<?php

class GestFourniss
{

    public static $fichier_xml = 'application/xsl/gest_fourniss/gest_fourniss.xsl';

    public static $page_php = 'gest_fourniss.php';

    // Nom du formulaire
    public static function &getIdFormulaire($code_frs = '')
    {
        $id_formulaire = 'FORM_GEST_FOURNISS_' . $code_frs;
        return $id_formulaire;
    }

    // Longueurs de champs par défaut
    public static $longueurChampTexte = 25;

    public static $longueurChampDate = 10;

    public static function &JSAfficherFiche(& $ancrage, & $codeFrs, $mode, $tabInProgress = '')
    {
        if ('' != $tabInProgress)
            $tabInProgress = '&tabInProgress=' . $tabInProgress;
        
        // Pourquoi est-ce qu'on n'utilise pas "this" ou "document.forms.FORM_GEST_FOURNISS.elements[0]" ?
        // => parce que IE9 ne gère pas les éléments ajoutés dynamiquement de la même manière que les autres navigateurs
        // EDP Ajout de UrlEncode aussi
        $js = 'CallUrl(\'gest_fourniss.php?action=AfficherFicheFournisseur&ancrage=' . $ancrage . '&codeFrs=' . urlencode($codeFrs) . '&mode=' . $mode . $tabInProgress . '\' );';
        
        return $js;
    }

    // NE PAS PASSER MODE PAR REFERENCE, IL EST MODIFIE DANS LA METHODE
    public static function &BuildXmlListeOnglets(& $codeFrs, & $ancrage, $mode, & $tabInProgress)
    {
        // On va rechercher les informations
        $min_width = 150;
        
        $fiche = FicheFournisseurXml::GetFiche($codeFrs);
        if (is_string($fiche)) {
            // C'est une chaîne de caractères qui a été retournée, nous avons donc une erreur à afficher
        } else {
            // C'est un tableau qui a été retourné, nous avons donc des valeurs
            $typeFour = FicheFournisseurXml::GetTypeFournisseur($fiche);
            
            if (is_null($tabInProgress)) {
                // Onglet par défaut en lecture
                $tabInProgress = GestFourniss_Docs_Ratt::getIdOnglet($codeFrs);
            }
            
            // En première place, l'onglet docs rattachés ; il n'est pas alimenté par le wsdl
            if ('L' == $mode) {
                $array[] = array(
                    '!id' => GestFourniss_Docs_Ratt::getIdOnglet($codeFrs),
                    '!titre' => Trad('Documents rattachés'),
                    '!url' => GestFourniss_Docs_Ratt::GetUrlRafraichissement($codeFrs, $ancrage, $mode),
                    '!min_width' => $min_width
                );
            } else {
                if (GestFourniss_Docs_Ratt::getIdOnglet($codeFrs) == $tabInProgress) {
                    // Onglet par défaut en lecture/écriture
                    $tabInProgress = GestFourniss_Identity::getIdOnglet($codeFrs);
                }
                
                switch ($mode) {
                    case 'AJOUT_F':
                        $mode = 'LE';
                        FicheFournisseurXml::SetTypeFournisseur($codeFrs, 'F');
                        FicheFournisseurXml::SetModeCreation($codeFrs, true);
                        $typeFour = 'F';
                        break;
                    case 'AJOUT_P':
                        $mode = 'LE';
                        FicheFournisseurXml::SetTypeFournisseur($codeFrs, 'P');
                        FicheFournisseurXml::SetModeCreation($codeFrs, true);
                        $typeFour = 'P';
                        break;
                }
            }
            
            $array[] = array(
                '!id' => GestFourniss_Identity::getIdOnglet($codeFrs),
                '!titre' => Trad('Fiche'),
                '!url' => GestFourniss_Identity::GetUrlRafraichissement($codeFrs, $ancrage, $mode),
                '!min_width' => $min_width
            );
            
            // On peut aussi construire dynamiquement la liste des onglets
            // foreach($fiche as $key => & $value) {
            // switch ($key) {
            // case 'Identity':
            // $array[] = array(
            // '!id' => GestFourniss_Identity::$id_onglet,
            // '!titre' => Trad('Identité'),
            // );
            // break;
            // case 'ListContacts':
            // $array[] = array(
            // '!id' => GestFourniss_Contacts::$id_onglet,
            // '!titre' => Trad('Contacts'),
            // );
            // break;
            // }
            // }
            
            // Titre affiché en haut, indépendemment de la présentation
            
            $libTypeFour = ('P' == $typeFour) ? Trad('Prospect') : Trad('Fournisseur');
            $raisoc = array_key_exists('#text', $fiche['Identity']['RS']) ? ' : ' . $fiche['Identity']['RS']['#text'] : '';
            $array['titre'] = array(
                '!libelle' => $libTypeFour . $raisoc,
                '!code' => $codeFrs
            );
            
            // id du formulaire
            $id_formulaire = GestFourniss::getIdFormulaire($codeFrs);
            $array['form'] = array(
                // '!id' => GestFourniss::$id_formulaire.'_VALEUR',
                '!id' => GestFourniss::getIdFormulaire($codeFrs)
            );
            
            // if ($_SESSION['AdminFournisseur'] || ('F' == $typeFour && $_SESSION['AuthModifFournisseur']) || ('P' == $typeFour && $_SESSION['AuthModifProspect'])) {
            // // Pour la modification, on présente la même fiche, mais avec le mode lecture/écriture
            // $array['!onclick_modifier'] = GestFourniss::JSAfficherFiche($ancrage, $codeFrs, 'LE');
            
            // // Action d'enregistrement des modifications
            // $array['!onclick_enregistrer'] = 'TraiteUrlAsync(\'gest_fourniss.php?action=EnregistrerModifications&ancrage='.$ancrage.'&codeFrs='.urlencode($codeFrs).'&mode=LE\', this, "'.Trad('Veuillez patienter pendant l\'enregistrement des données').'");';
            
            // // Action d'annulation des modifications : idel modification, mais en mode lecture
            // $array['!onclick_annuler'] = GestFourniss::JSAfficherFiche($ancrage, $codeFrs, 'L');
            // }
        }
        
        return $array;
    }

    public static function AfficherOngletCourant(& $tabInProgress, & $codeFrs, $ancrage, $mode)
    {
        $id_content = $tabInProgress . '_content';
        $genXsl = new GenXslt(true);
        
        switch ($tabInProgress) {
            case GestFourniss_Identity::getIdOnglet($codeFrs):
                $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
                
                $id_panel_contacts = GestFourniss_Identity::getIdPanelContact($codeFrs);
                $id_panel_detail = GestFourniss_Identity::getIdPanelDetail($codeFrs);
                $id_panel_conditions = GestFourniss_Identity::getIdPanelConditions($codeFrs);
                $id_panel_reglement = GestFourniss_Identity::getIdPanelReglement($codeFrs);
                $id_panel_impression_cde = GestFourniss_Identity::getIdPanelImpressionCde($codeFrs);
                $id_panel_societe = GestFourniss_Identity::getIdPanelSociete($codeFrs);
                $id_panel_adresses = GestFourniss_Identity::getIdPanelAdresses($codeFrs);
                
                // L'onglet identité est forcément affiché.
                $fichier_xml = GestFourniss_Identity::$fichier_xml;
                $array = GestFourniss_Identity::BuildXml($codeFrs, $mode, $ancrage);
                $array['content']['HautDePage'] = array(
                    '!id' => 'HautDePage' . urlencode($codeFrs),
                    '!lien' => '#HautDePage' . urlencode($codeFrs)
                );
                
                // L'onglet contacts est forcément affiché.
                $idAction = 'lien_' . $id_panel_contacts;
                $action = '#' . $id_panel_contacts;
                $lienAction = new ComposantXslLienAction($idAction);
                $lienAction->setAction($action);
                $lienAction->setLibelle(Trad('Contacts'));
                
                $array['content']['contacts']['lien'] = $lienAction->buildXml();
                $array['content']['contacts']['!id'] = $id_panel_contacts;
                
                // On prépare les différents ids
                $id_panel_detail = GestFourniss_Identity::getIdPanelDetail($codeFrs);
                $id_panel_conditions = GestFourniss_Identity::getIdPanelConditions($codeFrs);
                
                // note : pour les éléments paramétrés, si l'id n'est pas envoyé, il ne sera pas affiché
                $reglementVisible = FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Reglement::$id_Xml);
                if ($reglementVisible) {
                    $idAction = 'lien_' . $id_panel_reglement;
                    $action = '#' . $id_panel_reglement;
                    $lienAction = new ComposantXslLienAction($idAction);
                    $lienAction->setAction($action);
                    $lienAction->setLibelle(Trad('Règlement'));
                    $array['content']['reglement']['lien'] = $lienAction->buildXml();
                    $array['content']['reglement']['!id'] = $id_panel_reglement;
                }
                
                $conditionVisible = FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Conditions::$id_Xml);
                if ($conditionVisible) {
                    $idAction = 'lien_' . $id_panel_conditions;
                    $action = '#' . $id_panel_conditions;
                    $lienAction = new ComposantXslLienAction($idAction);
                    $lienAction->setAction($action);
                    $lienAction->setLibelle(Trad('Conditions'));
                    
                    $array['content']['conditions']['lien'] = $lienAction->buildXml();
                    $array['content']['conditions']['!id'] = $id_panel_conditions;
                }
                
                $detailVisible = FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Detail::$id_Xml);
                if ($detailVisible) {
                    $idAction = 'lien_' . $id_panel_detail;
                    $action = '#' . $id_panel_detail;
                    
                    $lienAction = new ComposantXslLienAction($idAction);
                    $lienAction->setAction($action);
                    $lienAction->setLibelle(Trad('Détail'));
                    
                    $array['content']['detail']['lien'] = $lienAction->buildXml();
                    $array['content']['detail']['!id'] = $id_panel_detail;
                }
                
                $impressionVisible = false && FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Impression_Cde::$id_Xml); // || DroitAcces::GetALL();
                if ($impressionVisible) {
                    $idAction = 'lien_' . $id_panel_impression_cde;
                    $action = '#' . $id_panel_impression_cde;
                    $lienAction = new ComposantXslLienAction($idAction);
                    $lienAction->setAction($action);
                    $lienAction->setLibelle(Trad('Impression CDE'));
                    
                    $array['content']['impression_cde']['lien'] = $lienAction->buildXml();
                    $array['content']['impression_cde']['!id'] = $id_panel_impression_cde;
                }
                
                $societesVisible = false;
                if (Param::AllParamsGetValue('LIEN_FOURNISSEUR_SOCIETE')) {
                    $societesVisible = FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Societes::$id_Xml);
                    if ($societesVisible) {
                        $idAction = 'lien_' . $id_panel_societe;
                        $action = '#' . $id_panel_societe;
                        $lienAction = new ComposantXslLienAction($idAction);
                        $lienAction->setAction($action);
                        $lienAction->setLibelle(Trad('Sociétés'));
                        
                        $array['content']['societes']['lien'] = $lienAction->buildXml();
                        $array['content']['societes']['!id'] = $id_panel_societe;
                    }
                }
                
                $adressesVisible = false && FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Adresses::$id_Xml); // || DroitAcces::GetALL();
                if ($adressesVisible) {
                    $idAction = 'lien_' . $id_panel_adresses;
                    $action = '#' . $id_panel_adresses;
                    $lienAction = new ComposantXslLienAction($idAction);
                    $lienAction->setAction($action);
                    $lienAction->setLibelle(Trad('Adresses'));
                    
                    $array['content']['adresses']['lien'] = $lienAction->buildXml();
                    $array['content']['adresses']['!id'] = $id_panel_adresses;
                }
                
                Affichage::innerHTMLPointeur($id_content, $genXsl->XslHtml($fichier_xml, $array));
                // La base de la page est affichée, on peut afficher le reste
                
                // Affichage de la partie Contacts
                $arrayTmp = GestFourniss_Contacts::BuildXml($codeFrs, $mode);
                Affichage::innerHTMLPointeur($id_panel_contacts, $genXsl->XslHtml(GestFourniss_Contacts::$fichier_xml, $arrayTmp));
                
                if ($reglementVisible) {
                    // Affichage de la partie Reglement
                    $array = GestFourniss_Reglement::BuildXml($codeFrs, $mode);
                    Affichage::innerHTMLPointeur($id_panel_reglement, $genXsl->XslHtml(GestFourniss_Reglement::$fichier_xml, $array));
                }
                
                if ($conditionVisible) {
                    // Affichage de la partie Conditions
                    $array = GestFourniss_Conditions::BuildXml($codeFrs, $mode);
                    Affichage::innerHTMLPointeur($id_panel_conditions, $genXsl->XslHtml(GestFourniss_Conditions::$fichier_xml, $array));
                    GestFourniss_Conditions::JSSwitchConditionMontant($array['content']['seuilBool']);
                    GestFourniss_Conditions::JSMajDeviseConditions($array['content']['conditions']['DEVISE']['!value']);
                }
                
                if ($detailVisible) {
                    // Affichage de la partie Détail
                    $array = GestFourniss_Detail::BuildXml($codeFrs, $mode);
                    Affichage::innerHTMLPointeur($id_panel_detail, $genXsl->XslHtml(GestFourniss_Detail::$fichier_xml, $array));
                    GestFourniss_Detail::JSSwitchDetailPeriodicite($array['content']['periodicite']);
                }
                
                if ($impressionVisible) {
                    // Affichage de la partie impression commande
                    if (FicheFournisseurXml::GetOngletIsVisible($tableauXml, GestFourniss_Impression_Cde::$id_Xml)) {
                        $array = GestFourniss_Impression_Cde::BuildXml($codeFrs, $mode);
                        Affichage::innerHTMLPointeur($id_panel_impression_cde, $genXsl->XslHtml(GestFourniss_Impression_Cde::$fichier_xml, $array));
                        GestFourniss_Impression_Cde::JSSwitchImpressionVolets($array['content']['BDC_ELEC']);
                        GestFourniss_Impression_Cde::JSSwitchModeEnvoi($array['content']['MODE_ENV']);
                    }
                }
                
                if ($societesVisible) {
                    // Affichage de la liste des sociétés
                    $array = GestFourniss_Societes::BuildXml($codeFrs, $mode);
                    Affichage::innerHTMLPointeur($id_panel_societe, $genXsl->XslHtml(GestFourniss_Societes::$fichier_xml, $array));
                }
                
                if ($adressesVisible) {
                    $array = GestFourniss_Adresses::BuildXml($codeFrs, $mode);
                    Affichage::innerHTMLPointeur($id_panel_adresses, $genXsl->XslHtml(GestFourniss_Adresses::$fichier_xml, $array));
                }
                
                break;
            case GestFourniss_Docs_Ratt::getIdOnglet($codeFrs):
                $fichier_xml = GestFourniss_Docs_Ratt::$fichier_xml;
                $array = GestFourniss_Docs_Ratt::BuildXml($codeFrs, $ancrage, $mode);
                Affichage::innerHTMLPointeur($id_content, $genXsl->XslHtml($fichier_xml, $array));
                break;
            case GestFourniss_Contacts::$id_onglet:
                $fichier_xml = GestFourniss_Contacts::$fichier_xml;
                $array = GestFourniss_Contacts::BuildXml($codeFrs, $mode);
                Affichage::innerHTMLPointeur($id_content, $genXsl->XslHtml($fichier_xml, $array));
                break;
        }
    }

    public static function &WsdlEnregistrer(& $codeFrs, & $confirmation)
    {
        // On copie le tableau
        $tableau = FicheFournisseurXml::ChargeSession($codeFrs);
        // On envoie le tableau au wsdl
        $resultat = FicheFournisseurXml::SetFiche($tableau, $confirmation);
        return $resultat;
    }

    public static function &WsdlLienSociete(& $codeFrs)
    {
        // Si le code société est vide, on va rechercher le code existant correspondant au SIRET
        // $siret
        //
        $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
        $codeFrs = FicheFournisseurXml::GetCodeFournisseur($tableauXml);
        $typeFrs = FicheFournisseurXml::GetTypeFournisseur($tableauXml);
        $siret = FicheFournisseurXml::GetSIRET($tableauXml);
        if ('' != $siret && '' == $codeFrs)
            if ($reqSql = SqlGestFourniss::rqGetFournissSIRET($typeFrs, $codeFrs, $siret, true)->Trouve1())
                $codeFrs = $reqSql['CODE'];
        
        XmlEntities($codeFrs);
        $xml = '<FournisseurSocIn>
			<CodeFouGrpFou>' . $codeFrs . '</CodeFouGrpFou>
			<TypeFouG>F</TypeFouG>
			<Societe>' . utilisateur::getSociete() . '</Societe>
			</FournisseurSocIn>';
        
        return Wsdl::wsdlGenerique('SRM_FOURNISS_AJT_RET_SOC', $xml, true);
    }

    public static function &UrlChangeFavori(& $codeFrs, & $idBase)
    {
        $resultat = 'CallUrl("gest_fourniss.php?action=ChangeFavori&codeFrs=' . urlencode($codeFrs) . '&idBase=' . $idBase . '")';
        return $resultat;
    }

    public static function &WsdlChangeFavori($codeFrs)
    {
        XmlEntities($codeFrs);
        $xml = '<FournisseurFavoriIn>
    				<CodeUtilisateur>' . ReplaceSqlPointeur(utilisateur::getCode()) . '</CodeUtilisateur>
    				<TypeFouG>F</TypeFouG>
    				<CodeFouGrpFou>' . ReplaceSqlPointeur($codeFrs) . '</CodeFouGrpFou>
				</FournisseurFavoriIn>';
        
        return Wsdl::wsdlGenerique(' SRM_FOURNISS_AJT_RET_FAVORI', $xml, true);
    }

    public static function &WsdlEditerFiche($codeFrs)
    {
        XmlEntities($codeFrs);
        $xml = '<FournisseurImprIn LngUtilisation=\'' . $_SESSION["Session_Langue"] . '\'>
                    <CodeUtilisateur>' . ReplaceSql($_SESSION['Session_Login']) . '</CodeUtilisateur>
                    <CodeFour>' . ReplaceSqlPointeur($codeFrs) . '</CodeFour>
				</FournisseurImprIn>';
        
        return Wsdl::wsdlGenerique('SRM_FOURNISS_IMPR', $xml, true);
    }

    public static function &WsdlInviterFournisseur($codeFrs, $partenaire)
    { // Pas de référence ici, les valeurs sont modifiées à l'intérieur de la fonction
        XmlEntities($codeFrs);
        XmlEntities($partenaire);
        $xml = '<FournisseurInvitationIn LngUtilisation="' . ReplaceSqlPointeur(utilisateur::getLangue()) . '">
				<Utilisateur>' . ReplaceSqlPointeur(utilisateur::getCode()) . '</Utilisateur>
				<Partenaire>' . ReplaceSqlPointeur($partenaire) . '</Partenaire>
				<Societe>' . ReplaceSqlPointeur(utilisateur::getSociete()) . '</Societe>
				<CodeFourn>' . ReplaceSqlPointeur($codeFrs) . '</CodeFourn>
				</FournisseurInvitationIn>';
        
        return Wsdl::wsdlGenerique('OXAPRC_PARTFOU_INVIT', $xml, true);
    }

    /*
     * TODO BAILA popup d'erreur
     */
    public static function &GetAfficheErreur(& $infoWsdl, & $action, & $ancrage, & $codeFrs)
    {
        $popupErreur = new AfficheErreur();
        $popupErreur->setInfosWsdl($infoWsdl);
        if ('Validation' == $action) {
            $popupErreur->setTitre(Trad('Information validation du fournisseur'));
            $popupErreur->setBtnPrimaire('CallUrl("gest_fourniss.php?ancrage=' . $ancrage . '&codeFrs=' . urlencode($codeFrs) . '&action=EnregistrementPopup");return false;', trad('Ignorer'), trad('Ignorer les avertissements'));
            // Le bouton secondaire est déjà paramétré pour "Annuler"
        } else {
            $popupErreur->setTitre(Trad('Information enregistrement du fournisseur'));
            $popupErreur->setBtnPrimaire('CallUrl("gest_fourniss.php?ancrage=' . $ancrage . '&codeFrs=' . urlencode($codeFrs) . '&action=EnregistrementPopup");return false;', trad('Ignorer'), trad('Ignorer les avertissements'));
        }
        return $popupErreur;
    }

    public static function &IsFournisseurLiePartenaire(& $CODE_FOU, & $CODEPARTENAIRE)
    {
        $result = false;
        if (SqlGestFourniss::rqGetFournisseurLiePartenaire($CODE_FOU, $CODEPARTENAIRE)->Trouve1())
            $result = true;
        return $result;
    }

    public static function &IsFournisseurLieALG(& $CODE_FOU)
    {
        $CODEPARTENAIRE = 'ALG';
        $resultat = GestFourniss::IsFournisseurLiePartenaire($CODE_FOU, $CODEPARTENAIRE);
        return $resultat;
    }
}
