<?php

class GestFourniss_Identity
{

    public static $page_php = 'gest_fourniss_identite.php';

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

    public static $id_btn_modif_rais_soc = 'btn_modif_rais_soc';

    public static $id_btn_modif_cp = 'btn_modif_cp';

    public static $id_btn_modif_ville = 'btn_modif_ville';

    public static function &getIdOnglet(& $codeFrs)
    {
        $id = 'pres_dyn_onglet_Identity_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelContact(& $codeFrs)
    {
        $id = 'Panel_Contacts_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelDetail(& $codeFrs)
    {
        $id = 'Panel_Detail_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelReglement(& $codeFrs)
    {
        $id = 'Panel_Reglement_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelConditions(& $codeFrs)
    {
        $id = 'Panel_Conditions_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelImpressionCde(& $codeFrs)
    {
        $id = 'Panel_Impression_Cde_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelSociete(& $codeFrs)
    {
        $id = 'Panel_Societes_' . urlencode($codeFrs);
        return $id;
    }

    public static function &getIdPanelAdresses(& $codeFrs)
    {
        $id = 'Panel_Adresses_' . urlencode($codeFrs);
        return $id;
    }

    /**
     * permet d'obtenir des infos sur l'existence ou le libellé du fournissseur principal
     * 
     * @param unknown $codeGrp
     */
    public static function &GetInfoGroupeFournisseur(& $codeGrp)
    {
        return SqlGestFourniss::rqGetInfoGroupeFournisseur($codeGrp)->Trouve1();
    }

    public static function &GetUrlRafraichissement(& $codeFrs, & $ancrage, $mode)
    {
        $url = GestFourniss_Identity::$page_php . '?action=AfficherOnglet&codeFrs=' . urlencode($codeFrs) . '&ancrage=' . $ancrage . '&mode=' . $mode . '';
        return $url;
    }

    public static function &JSCopierValeursAdresse()
    {
        // RAISOC, ADRFOUR, CP, VILLE, CODPAYS on vérifie les éléments du règlement correspondants RAISOCREGL, ADRREGL, CPREGL, VILREGL, PAYSREGL
        $js = 'var src = document.getElementById("RS");var dest = document.getElementById("RS_REGL");
				if ( src && dest ) { dest.value = src.value; dest.onblur(); }
				src = document.getElementById("ADR");dest = document.getElementById("ADR_REGL");
				if ( src && dest ) { dest.value = src.value; dest.onblur(); }
				src = document.getElementById("CPOSTAL");dest = document.getElementById("CPREGL");
				if ( src && dest ) { dest.value = src.value; dest.onblur(); }
				src = document.getElementById("VILLE1");dest = document.getElementById("VILREGL");
				if ( src && dest ) { dest.value = src.value; dest.onblur(); }
				src = document.getElementById("CODE_PAYS");dest = document.getElementById("PAYSREGL");
				if ( src && dest ) { dest.value = src.value; dest.onblur(); }';
        return $js;
    }

    public static function &BuildXmlMenuContextuel(& $codeFrs, & $typeFour, & $idBase)
    {
        $arrayInfoMenu = array(
            'codeFrs' => $codeFrs,
            'typeFrs' => $typeFour,
            'urlRetour' => GestFourniss_Identity::$page_php
        );
        $entete = array(
            '!LIB' => 'MonLibelle',
            '!COMMENTAIRE' => 'MonCommentaire',
            'zone_actions' => array(
                '!value' => $idBase
            )
        );
        
        $actions = new ActionsDocument(TypeSuivi::GESTFOURNISS, '', '', '', '', $arrayInfoMenu);
        
        $arrayMenu = array(
            'entete' => $entete,
            'actions' => $actions->getTabInfo(),
            '!id' => $idBase,
            '!clickOnlign' => "itemSelectedByUser('{$idBase}');"
        );
        
        return $arrayMenu;
    }

    public static function &BuildXml($codeFrs, $mode, $ancrage)
    {
        $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
        $typeFour = FicheFournisseurXml::GetTypeFournisseur($tableauXml);
        $modeCreation = FicheFournisseurXml::GetIsModeCreation($tableauXml);
        
        if ('L' == $mode) {
            $modeLocal = 'L';
        } elseif ('LE' == $mode) {
            if ($_SESSION['AdminFournisseur'] || ('F' == $typeFour && ($_SESSION['AuthModifFournisseur'] || $_SESSION['GestionAdrFournisseur'])) || ('P' == $typeFour && ($_SESSION['AuthModifProspect'] || $_SESSION['GestionAdrProspect'])))
                $modeLocal = 'LE';
            else
                $modeLocal = 'L';
        }
        
        //
        // 1. Gestion des champs standards
        //
        $objTaxe = new InfosTaxes(Param::getPaysInstall());
        
        // Pour les champs RAISOC, ADRFOUR, CP, VILLE, CODPAYS on vérifie les éléments du règlement correspondants RAISOCREGL, ADRREGL, CPREGL, VILREGL, PAYSREGL
        // Si initialement ils sont différents, on ne proposera pas la copie
        if (array_key_exists('#text', $tableauXml['Identity']['RS']) && array_key_exists('#text', $tableauXml['Identity']['ADR']) && array_key_exists('#text', $tableauXml['Identity']['CPOSTAL']) && array_key_exists('#text', $tableauXml['Identity']['VILLE1']) && array_key_exists('#text', $tableauXml['Identity']['CODE_PAYS']) && array_key_exists('#text', $tableauXml['Reglement']['RS_REGL']) && array_key_exists('#text', $tableauXml['Reglement']['ADR_REGL']) && array_key_exists('#text', $tableauXml['Reglement']['CPREGL']) && array_key_exists('#text', $tableauXml['Reglement']['VILREGL']) && array_key_exists('#text', $tableauXml['Reglement']['PAYSREGL']))
            $proposeCopie = ($tableauXml['Identity']['RS']['#text'] == $tableauXml['Reglement']['RS_REGL']['#text'] && $tableauXml['Identity']['ADR']['#text'] == $tableauXml['Reglement']['ADR_REGL']['#text'] && $tableauXml['Identity']['CPOSTAL']['#text'] == $tableauXml['Reglement']['CPREGL']['#text'] && $tableauXml['Identity']['VILLE1']['#text'] == $tableauXml['Reglement']['VILREGL']['#text'] && $tableauXml['Identity']['CODE_PAYS']['#text'] == $tableauXml['Reglement']['PAYSREGL']['#text']);
        else
            $proposeCopie = false;
        
        $lgChampTexte = GestFourniss::$longueurChampTexte;
        $lgChampDate = GestFourniss::$longueurChampDate;
        
        foreach ($tableauXml['Identity'] as $key => &$value) {
            $longueurMax = ControleSaisie::getLongueurChamp($value['!Format']);
            $size = $longueurMax;
            $modifiable = (((array_key_exists('!Modifiable', $value)) ? $value['!Modifiable'] : false) && $modeLocal != 'L');
            $readonly = ! $modifiable;
            $valeur = (array_key_exists('#text', $value)) ? $value['#text'] : '';
            $jsCheckValeur = 'TraiteUrl(\'' . GestFourniss_Identity::$page_php . '?action=checkValue&codeFrs=' . urlencode($codeFrs) . '\', this);';
            $libelle_champ = FicheFournisseurXml::Transcode_Champs($key);
            $format = (array_key_exists('!Format', $value)) ? $value['!Format'] : '';
            $objet = (array_key_exists('!Objet', $value)) ? $value['!Objet'] : '';
            $valeurModif = (array_key_exists('!ValeurModif', $value)) ? $value['!ValeurModif'] : '';
            
            switch ($key) {
                case 'EMAIL':
                case 'CPOSTAL':
                case 'VILLE1':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($lgChampTexte);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                case 'SITEWEB':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($lgChampTexte);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                case 'RS':
                    if ($proposeCopie) {
                        $onmodif_btn_id = GestFourniss_Identity::$id_btn_modif_rais_soc;
                        $onmodif_js = GestFourniss_Identity::JSCopierValeursAdresse();
                    } else {
                        $onmodif_btn_id = '';
                        $onmodif_js = '';
                    }
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($lgChampTexte);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setToolTipChangement($valeurModif);
                    
                    $panelAdresse[$key] = $compXsl->buildXml();
                    
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    
                    $panelAdresse[$key]['!onmodif_btn_id'] = $onmodif_btn_id;
                    $panelAdresse[$key]['!onmodif_js'] = $onmodif_js;
                    $panelAdresse[$key]['!onmodif_title'] = Trad('Mise à jour de l\'adresse de règlement.');
                    break;
                
                case 'ADR':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setRowsCols(2, 35);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                
                case 'TEL':
                case 'TELEX':
                case 'FAX':
                case 'NO_TVA_IC':
                case 'NO_DUNS':
                case 'ID_EXT':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                
                case 'CODE_PAYS':
                    $compXsl = new ComposantXslSelection($key, $modifiable, $format, $objet);
                    $compXsl->setValeur($valeur);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setListeOptions(ListeComboGeneral::getArrayListePays());
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                
                case 'COD_LNG':
                    // Visible uniquement si le multilingue est activé.
                    $isMultilingueActif = Param::isMultiLanguages();
                    
                    $compXsl = new ComposantXslSelection($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setListeOptions(ListeComboGeneral::getArrayListeLangues());
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    $panelAdresse[$key]['!multilingueActif'] = $isMultilingueActif;
                    break;
                
                case 'FOUPPAL':
                    // rechercher le libellé du fournisseur principal
                    $lbl_final = Trad('n/a');
                    if ('' !== $valeur) {
                        $infos_grp = GestFourniss_Identity::GetInfoGroupeFournisseur($valeur);
                        if (is_array($infos_grp))
                            $lbl_final = $infos_grp['RS'];
                    }
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setLibelleFinal($lbl_final);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    break;
                
                case 'NO_SIRET':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setLibelleFinal($lbl_final);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    $panelAdresse[$key]['!est_defini'] = $objTaxe->GetChampIsDefini(1);
                    break;
                
                case 'TAXE2':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setLibelleFinal($lbl_final);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    $panelAdresse[$key]['!est_defini'] = $objTaxe->GetChampIsDefini(2);
                    break;
                
                case 'TAXE3':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setLibelleFinal($lbl_final);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    $panelAdresse[$key]['!est_defini'] = $objTaxe->GetChampIsDefini(3);
                    break;
                
                case 'TAXE4':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($size);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setLibelleFinal($lbl_final);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ;
                    $panelAdresse[$key]['!est_defini'] = $objTaxe->GetChampIsDefini(4);
                    break;
            }
        }
        //
        // 2. Gestion de champs de détails
        //
        
        foreach ($tableauXml as $key => &$value) {
            $longueurMax = ControleSaisie::getLongueurChamp($value['!Format']);
            $modifiable = (((array_key_exists('!Modifiable', $value)) ? $value['!Modifiable'] : false) && $modeLocal != 'L');
            $readonly = ! $modifiable;
            $valeur = (array_key_exists('#text', $value)) ? $value['#text'] : '';
            $jsCheckValeur = 'TraiteUrl(\'gest_fourniss_identite.php?action=checkValue&codeFrs=' . urlencode($codeFrs) . '\', this);';
            $libelle_champ = FicheFournisseurXml::Transcode_Champs($key);
            $format = (array_key_exists('!Format', $value)) ? $value['!Format'] : '';
            $objet = (array_key_exists('!Objet', $value)) ? $value['!Objet'] : '';
            $valeurModif = (array_key_exists('!ValeurModif', $value)) ? $value['!ValeurModif'] : '';
            
            switch ($key) {
                case 'CODE':
                    if ($modeCreation && 'A' != $value['!TypeNum']) {
                        $modifiable = true;
                        $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                        $compXsl->setReadonly($readonly);
                        $compXsl->setValeur($valeur);
                        $compXsl->setLongueurMax($longueurMax);
                        $compXsl->setSize($longueurMax);
                        $compXsl->setAction($jsCheckValeur);
                        $compXsl->setToolTipChangement($valeurModif);
                        $panelAdresse[$key] = $compXsl->buildXml();
                        $panelAdresse[$key]['!libelle_chp'] = $libelle_champ . '';
                    }
                    break;
                
                case 'PROSPECT':
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeur);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($longueurMax);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setToolTipChangement($valeurModif);
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ . '';
                    
                    break;
                case 'DTEVALMIN':
                case 'DTEVALMAX':
                    $valeurTmp = ($valeur == '00000000' ? '' : convertDateSqlToFr($valeur));
                    
                    // Partie case texte
                    $compXsl = new ComposantXslTexte($key, $modifiable, $format, $objet);
                    $compXsl->setReadonly($readonly);
                    $compXsl->setValeur($valeurTmp);
                    $compXsl->setLongueurMax($longueurMax);
                    $compXsl->setSize($longueurMax);
                    $compXsl->setAction($jsCheckValeur);
                    $compXsl->setImgClasse($classeImage);
                    $compXsl->setImgOnclick($onclickTmp);
                    $compXsl->setToolTipChangement($valeurModif);
                    
                    $panelAdresse[$key] = $compXsl->buildXml();
                    $panelAdresse[$key]['!libelle_chp'] = $libelle_champ . '';
                    break;
            }
        }
        $array['content']['adresse'] = &$panelAdresse;
        
        // Gestion du menu contextuel
        $idMenu = 'MC_Fournisseur';
        $compXslMenu = new ComposantXslMenuContextuel($idMenu);
        
        // Menu éditer
        $idMenuEditer = 'LMC_EditerFiche';
        $libelle = Trad('Editer la fiche');
        $action = 'CallUrl(\'gest_fourniss.php?action=EditerFiche&codeFrs=' . urlencode($codeFrs) . '\')';
        $classeIcone = 'img_result_ok_mini_16x16';
        $menuEditer = new ComposantXslLigneMenuContextuel($idMenu1);
        $menuEditer->setLibelle($libelle);
        $menuEditer->setAction($action);
        $menuEditer->setClasseIcone($classeIcone);
        
        // On ajoute le ménu éditer au menu contextuel
        $compXslMenu->addMenu($menuEditer);
        
        if (DroitAcces::GetALL() || $_SESSION['AdminFournisseur']) {
            // On créé une ligne de séparation
            $idVide = '';
            $menuSeparateur = new ComposantXslLigneMenuContextuel($idVide);
            $menuSeparateur->setSeparateur();
            
            // On ajoute la ligne de séparation au menu
            $compXslMenu->addMenu($menuSeparateur);
            
            if ('F' == $typeFour) {
                // Transfert en prospect
                $idMenuTrsft = 'LMC_TransfertProspect';
                $libelle = Trad('Transfert en prospect');
                $action = 'CallUrl(\'' . GestFourniss_Identity::$page_php . '?action=TransfertEnReference&codeFrs=' . urlencode($codeFrs) . '\')';
                $classeIcone = 'img_result_ok_mini_16x16';
            } else {
                // Transfert en référencé
                $idMenuTrsft = 'LMC_TransfertReference';
                $libelle = Trad('Transfert en référencé');
                $action = 'CallUrl(\'' . GestFourniss_Identity::$page_php . '?action=TransfertEnProspect&codeFrs=' . urlencode($codeFrs) . '\')';
                $classeIcone = 'img_result_ok_mini_16x16';
            }
            
            // On ajoute le transfert au menu
            $menuTransfert = new ComposantXslLigneMenuContextuel($idMenuTrsft);
            $menuTransfert->setLibelle($libelle);
            $menuTransfert->setAction($action);
            $menuTransfert->setClasseIcone($classeIcone);
            $compXslMenu->addMenu($menuTransfert);
            
            // On ajoute la ligne de séparation au menu
            $compXslMenu->addMenu($menuSeparateur);
            
            // Gestion des Shorts Lists
            
            $nombreShortList = SqlFrs::nbrShortListValide()->Trouve1();
            $idMenuTrsft = 'LMC_GestionShortList';
            $libelle = Trad('Short lists');
            if ($nombreShortList['nombreShortList'] != 0)
                $action = 'window.open(\'popup_short_list.php?action=voirShortList&codeFrs=' . urlencode($codeFrs) . '\',\'gestion_short_list\',\'width=870, height=695\');';
            else
                $action = 'alert(\'' . cnv_to_javascript(trad('Il n\'y a pas de short list disponible ! ')) . '\');';
            $classeIcone = 'img_result_ok_mini_16x16';
            
            // On ajoute de la gestion des shorts listes
            $menuTransfert = new ComposantXslLigneMenuContextuel($idMenuTrsft);
            $menuTransfert->setLibelle($libelle);
            $menuTransfert->setAction($action);
            $menuTransfert->setClasseIcone($classeIcone);
            $compXslMenu->addMenu($menuTransfert);
        }
        
        $array['content']['adresse']['menuCtxt'] = $compXslMenu->buildXml();
        
        // Affichage des boutons Modifier / Enregistrer / Annuler
        
        if ($_SESSION['AdminFournisseur'] || ('F' == $typeFour && $_SESSION['AuthModifFournisseur']) || ('P' == $typeFour && $_SESSION['AuthModifProspect'])) {
            if ('LE' == $mode) {
                $idBtn = 'btnEnregistrer';
                $actionBtn = 'CallUrl(\'gest_fourniss.php?action=ValidationInit&ancrage=' . $ancrage . '&codeFrs=' . urlencode($codeFrs) . '&mode=LE\', \'win_pop_validation\', 1000, 200);';
                $compXsl = new ComposantXslAction($idBtn);
                $compXsl->setLibelle(Trad('Enregistrer'));
                $compXsl->setAction($actionBtn);
                $compXsl->setEstPrimaire(true);
                $array['content']['btn_enregistrer'] = $compXsl->buildXml();
                
                // Pour l'instant, pas de retour à la liste, on ne sait pas si on vient de celle-ci ou du menu.
                if (! $modeCreation) {
                    $idBtn = 'btnAnnuler';
                    $actionBtn = GestFourniss::JSAfficherFiche($ancrage, $codeFrs, 'L');
                    $compXsl = new ComposantXslAction($idBtn);
                    $compXsl->setLibelle(Trad('Annuler'));
                    $compXsl->setAction($actionBtn);
                    $array['content']['btn_annuler'] = $compXsl->buildXml();
                }
            } else {
                $idBtn = 'btnModifier';
                $compXsl = new ComposantXslAction($idBtn);
                $compXsl->setLibelle(Trad('Modifier'));
                $compXsl->setAction(GestFourniss::JSAfficherFiche($ancrage, $codeFrs, 'LE'));
                $compXsl->setEstPrimaire(true);
                $array['content']['btn_modifier'] = $compXsl->buildXml();
            }
        }
        
        // Spec 3752 / 3781 : on ajoute un message lorsque le fournisseur est partagé et en mode modification
        if ('LE' == $modeLocal) {
            $nb_ste = 0;
            // On compte le nombre de société liées
            if (array_key_exists('ListSocietes', $tableauXml)) {
                if (array_key_exists('CODE_STE', $tableauXml['ListSocietes'])) {
                    if (is_array($tableauXml['ListSocietes']['CODE_STE'])) {
                        $nb_ste = count($tableauXml['ListSocietes']['CODE_STE']);
                    }
                }
            }
            if ($nb_ste > 1)
                $array['content']['!messageMultiSociete'] = Trad('Attention - Ce fournisseur est utilisé par une autre société - Merci de veiller à vous coordonner avant d\'enregistrer vos modifications.');
        }
        $array['content']['!mode'] = $mode;
        return $array;
    }

    public static function &checkValue(& $codeFrs, & $format, & $objet, & $code, & $value)
    {
        $messageErreur = '';
        $valeurModifiee = '';
        $libelleValeur = '';
        $baseValeur = null;
        $proposition_rattachement = false;
        $value = trim($value);
        $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
        $typeFrs = FicheFournisseurXml::GetTypeFournisseur($tableauXml);
        $jsMontrerBouton = '';
        
        if (array_key_exists($code, $tableauXml))
            $baseValeur = &$tableauXml[$code];
        elseif (array_key_exists($code, $tableauXml['Identity']))
            $baseValeur = &$tableauXml['Identity'][$code];
        
        if (! is_null($baseValeur)) { // Si on n'a pas de valeur de base, on n'a pas son format.
            if (array_key_exists('#text', $baseValeur))
                $valeur_init = & $baseValeur['#text'];
            
            // On passe par la vérification standard
            $resultatTest = ControleSaisie::checkValue($format, $objet, $value);
            $valeurModifiee = $resultatTest['valeurModifiee'];
            $messageErreur = $resultatTest['messageErreur'];
            $libelleValeur = $resultatTest['libelleValeur'];
            $numTaxe = 0;
            // TODO Baila voir les validator pour le WF fournisseur a voir avec YA
            // Vérification spécialisée de l'écran
            if ('' == $messageErreur) {
                switch ($code) {
                    case 'EMAIL':
                        if (! ControleSaisie::checkMail($value))
                            $messageErreur = Trad('L\'e-mail renseigné n\'est pas correct.');
                        break;
                    case 'DTEVALMIN':
                        $DTEVALMAX = $tableauXml['DTEVALMAX']['#text'];
                        if ($DTEVALMAX != '' and $DTEVALMAX != '00000000') {
                            $DTEVALMIN = convertDateUserToSql(($valeurModifiee != '') ? $valeurModifiee : $value);
                            if ($DTEVALMIN >= $DTEVALMAX) {
                                $messageErreur = Trad('La date de validité de fin doit être supérieure à celle de début.');
                                $valeurModifiee = convertDateSqlToFr($valeur_init);
                                $libelleValeur = & $valeurModifiee;
                            }
                        }
                        
                        break;
                    case 'DTEVALMAX':
                        $DTEVALMIN = $tableauXml['DTEVALMIN']['#text'];
                        if ($DTEVALMIN != '' and $DTEVALMIN != '00000000') {
                            $DTEVALMAX = convertDateUserToSql(($valeurModifiee != '') ? $valeurModifiee : $value);
                            if ($DTEVALMIN >= $DTEVALMAX) {
                                $messageErreur = Trad('La date de validité de fin doit être supérieure à celle de début.');
                                $valeurModifiee = convertDateSqlToFr($valeur_init);
                                $libelleValeur = & $valeurModifiee;
                            }
                        }
                        
                        break;
                    case 'NO_SIRET':
                        if ('' != $value) {
                            // 1. on recherche si le siret n'est pas déjà rattaché à une autre société
                            $reqSqlCnt = SqlGestFourniss::rqGetFournissSIRET($typeFrs, $codeFrs, $value)->Trouve1();
                            // 2. Si fournisseur trouvé
                            if (0 != $reqSqlCnt['nb']) {
                                if (Param::GetLienFournisseurSocieteActif()) {
                                    // Lien société activé : propose à l’utilisateur de le rattacher à sa société si ce n’est pas déjà le cas
                                    if ($reqSqlLien = SqlGestFourniss::rqGetFournissLienSociete('F', $codeFrs)->Trouve1()) {
                                        if ($reqSqlLien['CODE_STE'] != $_SESSION['Session_SocUsr'])
                                            $proposition_rattachement = true;
                                    } else
                                        // Pas de lien existant, on propose de rattacher
                                        $proposition_rattachement = true;
                                } else {
                                    // Lien société non activé : si doublons interdit, bloque dès ce moment la création. Le paramétrage d’interdiction du doublon dépend du pays.
                                    if ('F' == $typeFrs) {
                                        if (Param::GetCtrlUniciteSiretFournisseur())
                                            $messageErreur = Trad('Un fournisseur existe déjà avec ce SIRET.');
                                    } else {
                                        if (Param::GetCtrlUniciteSiretProspect())
                                            $messageErreur = Trad('Un prospect existe déjà avec ce SIRET.');
                                    }
                                }
                            }
                        } else {
                            // Est-ce que le code est obligatoire?
                            $objTaxe = new InfosTaxes(FicheFournisseurXml::GetPaysFournisseur($tableauXml));
                            if ($objTaxe->GetChampFixe(1))
                                $messageErreur = Trad('Le champ') . ' "' . Trad('SIRET') . '" ' . Trad('est obligatoire.');
                        }
                        break;
                    case 'TAXE2':
                        if (0 == $numTaxe)
                            $numTaxe = 2;
                    case 'TAXE3':
                        if (0 == $numTaxe)
                            $numTaxe = 3;
                    case 'TAXE4':
                        if (0 == $numTaxe)
                            $numTaxe = 4;
                        // Est-ce que le code est obligatoire?
                        $objTaxe = new InfosTaxes(FicheFournisseurXml::GetPaysFournisseur($tableauXml));
                        if ($objTaxe->GetChampFixe($numTaxe))
                            $messageErreur = Trad('Le champ') . ' "' . $objTaxe->GetLibelleChamp($numTaxe) . '" ' . Trad('est obligatoire.');
                        break;
                }
            }
            
            if ('' == $messageErreur) {
                $id_btn = '';
                // On met à jour l'info dans le tableau xml
                switch ($code) {
                    case 'CODE':
                        $valeur = ($valeurModifiee != '') ? $valeurModifiee : $value;
                        $baseValeur['#text'] = $valeur;
                        break;
                    case 'DTEVALMAX':
                    case 'DTEVALMIN':
                        $valeur = ($valeurModifiee != '') ? $valeurModifiee : $value;
                        $baseValeur['#text'] = convertDateUserToSql($valeur);
                        break;
                    case 'RS':
                    case 'ADR':
                    case 'CPOSTAL':
                    case 'VILLE1':
                    case 'CODE_PAYS':
                        if (isset($tableauXml['Identity'][$code]['#text']) && $value != $tableauXml['Identity'][$code]['#text'])
                            $jsMontrerBouton = GestFourniss_Identity::$id_btn_modif_rais_soc;
                    default:
                        $baseValeur['#text'] = $value;
                        break;
                }
                FicheFournisseurXml::SauvegardeSession($tableauXml);
            }
        }
        
        $result = array(
            'valeurModifiee' => & $valeurModifiee,
            'libelleValeur' => & $libelleValeur,
            'messageErreur' => & $messageErreur,
            'codeFrs' => & $codeFrs,
            'proposition_rattachement' => $proposition_rattachement,
            'jsMontrerBouton' => $jsMontrerBouton
        );
        return $result;
    }
}
