<?php
/**
 *  Ce script est un exemple d'utilisation de la nouvelle classe destinée à gérer les popups
 *  de navigation sur les données.
 *  Ici, la popup porte sur les fournisseurs.
 */

// On inclut tous les scripts nécessaires
require_once 'application/config/boot_init.php';

$affichePopupId = getValue('affichePopupId');
if (! is_null($affichePopupId) && '' !== $affichePopupId) {
    $objPopup = AffichePopup::getFromSession($affichePopupId);
    
    $popupId = $objPopup->getNomFenetre();
    $action = $objPopup->getVariable('action');
    $formName = $objPopup->getVariable('formName');
    $inputField = $objPopup->getVariable('inputField');
    $labelField = $objPopup->getVariable('labelField');
    $contexte = $objPopup->getContexte();
    
    // AMI 20160517 Pas définis pour le moment, mais utilisés dans le script...
    $typeSuivi = $objPopup->getVariable('typeSuivi');
}

$actionTmp = getValue('action');
if (! is_null($actionTmp) && '' != $actionTmp)
    $action = & $actionTmp;

switch ($action) {
    case 'initPopup': // Lorsque la popup est appelée
                      // On insère l'entête PHP qui contient les liens vers les source scripts javascripts
                      // Le mode popup est défini à true afin de masquer le bandeau d'entête
                      
        // On créé l'objet Popup et on pass en paramètre l'identifiant de la popup, un type de popup doit donc porté un identifiant unique
                      // on passe en 2ème paramètre le nom du script php jouant le rôle de controlleur qui prendra en charge les évènements déclenchés sur la popup
        $monBrowse = new PopupBrowse($popupId, $_SERVER['SCRIPT_NAME']);
        $monBrowse->setAffichePopupId($affichePopupId);
        
        // On définit le titre de la popup. Le titre sera affiché.
        $monBrowse->setPopupTitle(trad('Liste des fournisseurs'));
        
        // On définit les champs de recherche proposés à l'utilisateur, on peut en ajouter autant qu'on le souhaite.
        // IMPORTANT : 1er paramètre : Le nom des champs ajoutés doit correspondre au nom des colonnes sql utilisés dans la requête de recherche.
        // 2ème paramètre : On définit le libellé du champ qui sera iniqué à l'utilisateur
        
        if ($result = & SqlParam::rqSelectParFicheOf('FOURN')->TrouveTous()) {
            /**
             * Spec 3599
             * NE PAS METTRE DE REFERENCE A CE NIVEAU CAR ON VA PEUT ETRE INSERER UNE DONNEE DANS Result
             */
            foreach ($result as $index => $element)
                if (array_key_exists('CODE_CHMP', $element) && $element['CODE_CHMP'] == 'MTMAXCC') {
                    $addElement1 = $element;
                    $addElement1['CODE_CHMP'] = 'MTMAXCCCAT';
                    $addElement1['LIB_CHP_LISTE'] = trad('Max e-proc / cat.');
                    
                    // Inversion normal car la suite logique ecran doit etre MTMAXCC,MTMAXCCCAT,MTMAXCCHCT
                    insertArray($result, $addElement1, $index + 1);
                    break;
                }
            
            $colonne = array_merge(array(
                array(
                    'ATTR_CHP' => 'A',
                    'MASQ_CHP' => '6',
                    'CODE_CHP' => 'ACTION',
                    'LIB_CHP_LISTE' => 'Action',
                    '_triable' => false
                )
            ), $result);
            
            $monBrowse->calculColonne($colonne);
        }
        
        /**
         * A revoir pour ajouter methode sur le type de donnée EDP
         */
        $monBrowse->addNewSearchField('CODE', trad('Code du fournisseur'));
        $monBrowse->addNewSearchField('RS', trad('Nom'));
        $monBrowse->addNewSearchField('NO_SIRET', trad('Siret / Id fiscal'));
        $monBrowse->addNewSearchField('CPOSTAL', trad('Code postal'));
        $monBrowse->addNewSearchField('VILLE', trad('Ville'));
        $monBrowse->addNewSearchField('DEPARTEMENT', trad('Département'));
        
        // On définit ici les colonnes qui seront affichées dans le résultats des recherches.
        // On peut définir ici autant de colonne qu'on le souhaite. Générallement, on propose dans l'affichage du résultat au moins toutes
        // les colonnes correspondantes aux champs de recherche
        // 1er paramètre : Le libellé de la colonne, 2ème paramètre : Le nom du champ sql tel qu'il est présent dans la requête sql
        
        // On définit ici les éléments cibles à utilisés lors de la sélection d'une ligne de résultat par l'utilisateur
        $monBrowse->setTargetFormName($formName); // On définit le nom du formulaire possédant le champ de saisi de la valeur sélectionnée depuis la popup
        $monBrowse->setTargetImputField($inputField); // On définit le nom du champ de saisi
        $monBrowse->setTargetLabelField($labelField); // On définit (optionel) le nom du champ qui contiendra le libellé de la valeur saisie
        
        $panierEntete = new PanierEntete();
        $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
        
        if (Param::isFrsProspectVisible() && 'C' == $panierEntete->getCHIF_EXEC())
            $monBrowse->addAction('SELECT_TYPE_FRS', '');
        
        // Si la liste des fournisseurs est appelé dans le cadre d'un panier et si le panier est du type exécution alors on enregistre ce contexte car il joue comme filtre sur la
        $popup_contexte = getValue('popup_contexte');
        if ($popup_contexte == 'panier' && 'E' == $panierEntete->getCHIF_EXEC())
            $popup_contexte = 'panier_execution';
        else {
            $popup_contexte = getValue('contexte');
            if (is_null($popup_contexte) || '' == $popup_contexte)
                $popup_contexte = getValue('type_suivi');
        }
        $monBrowse->setContexte($popup_contexte);
        
        $monBrowse->addAction('CLOSE_POPUP', 'window.closePopup();');
        
        $monBrowse->setIsActionClick(true);
        $monBrowse->setBackCtrl(getValue('backCtrl'));
        $monBrowse->setBackMode(getValue('backMode'));
        $monBrowse->setBackAction(getValue('backAction'));
        $monBrowse->setBackData(array(
            'CODE'
        ));
        $monBrowse->setBackPopup(getValue('backPopup'));
        $monBrowse->setBackForm(getValue('backForm'));
        $monBrowse->setBackField(getValue('backField'));
        
        $monBrowse->setSignataire(getValue('SIGNAT'));
        if (! is_null(getValue('modeHtml')))
            $monBrowse->setModeHtml(getValue('modeHtml') == '1');
        
        $monBrowse->setIsActionClick(true);
        
        // La popup précédemment construite peut maintenant être affichée
        $monBrowse->setIndiceTriColonne(2);
        $monBrowse->buildXML(); // On construite le tableau de données qui sera fusionné avec la feuille de style XSL
        
        $array_filters = array();
        $nbFourSFAM = 0;
        $nbFourArticle = 0;
        $libArticle = '';
        $libSousFamille = '';
        $codeSousFamille = getValue('code_sous_famille');
        $code_art_haplus = getValue('code_art_haplus');
        
        $article = null;
        if ($monBrowse->getPopupId() == 'FOURNISS') {
            // Pour spec 03649
            if (! is_null($codeSousFamille) && $codeSousFamille != '') {
                $liste = explode('\\|', $codeSousFamille);
                if (count($liste) == 1) {
                    if ($sousFamille = & SqlArticle::rqGetSousFamille($codeSousFamille)->Trouve1()) {
                        $monBrowse->setProperties('COD_SFAM', $sousFamille['CODE_SFA']);
                        $popup = 'FOURNISS_SFAM';
                        $libSousFamille = $sousFamille['DESIGNAT'];
                        if ($array = & SearchForBrowse::retreiveSql($popup, $array_filters, $monBrowse, false, true))
                            $nbFourSFAM = $array[0]['CPTRESTBL'];
                    }
                } else {
                    $monBrowse->setProperties('COD_SFAM', $liste);
                    $popup = 'FOURNISS_SFAM';
                    if ($array = & SearchForBrowse::retreiveSql($popup, $array_filters, $monBrowse, false, true))
                        $nbFourSFAM = $array[0]['CPTRESTBL'];
                }
            }
            
            if (! is_null($code_art_haplus) && $code_art_haplus != '') {
                $liste = explode('\\|', $code_art_haplus);
                if (count($liste) == 1) {
                    if ($article = & SqlArticle::rqIsArticleHaplus($code_art_haplus)->Trouve1()) {
                        if (is_null($codeSousFamille) || trim($codeSousFamille) == '') {
                            if ($sousFamille = & SqlArticle::rqGetSousFamille($article['SSFAM'])->Trouve1()) {
                                $monBrowse->setProperties('COD_SFAM', $sousFamille['CODE_SFA']);
                                $popup = 'FOURNISS_SFAM';
                                $libSousFamille = $sousFamille['DESIGNAT'];
                                if ($array = & SearchForBrowse::retreiveSql($popup, $array_filters, $monBrowse, false, true))
                                    $nbFourSFAM = $array[0]['CPTRESTBL'];
                            }
                        }
                        $monBrowse->setProperties('COD_ART', $code_art_haplus);
                        $popup = 'FOURNISS_ART';
                        if ($array = & SearchForBrowse::retreiveSql($popup, $array_filters, $monBrowse, false, true))
                            $nbFourArticle = $array[0]['CPTRESTBL'];
                        $libArticle = $article['DESIGN'];
                    }
                } else {
                    $monBrowse->setProperties('COD_ART', $liste);
                    $popup = 'FOURNISS_ART';
                    if ($array = & SearchForBrowse::retreiveSql($popup, $array_filters, $monBrowse, false, true))
                        $nbFourArticle = $array[0]['CPTRESTBL'];
                }
            }
        }
        
        // id_barre_onglet
        $monBrowse->setPopupIdOnglet('');
        if ($nbFourArticle != 0) { // Ajout onglet Article
            $ongletActif = 'FOURNISS_ART';
            $monBrowse->addOnglet($ongletActif, trad('Article') . ' ' . $libArticle, 'TraiteUrl("ctrl_liste_frs.php?popup_id=' . $monBrowse->getPopupId() . '&action=changeOnglet&onglet=' . $ongletActif . '")');
            if ($monBrowse->getPopupIdOnglet() == '')
                $monBrowse->setPopupIdOnglet($ongletActif);
        }
        
        if ($nbFourSFAM != 0) { // Ajout SousFamille
            $ongletActif = 'FOURNISS_SFAM';
            $monBrowse->addOnglet('FOURNISS_SFAM', trad('Sous Famille') . ' ' . $libSousFamille, 'TraiteUrl("ctrl_liste_frs.php?popup_id=' . $monBrowse->getPopupId() . '&action=changeOnglet&onglet=' . $ongletActif . '")');
            if ($monBrowse->getPopupIdOnglet() == '')
                $monBrowse->setPopupIdOnglet($ongletActif);
        }
        
        if ($monBrowse->isOngletExiste()) {
            $ongletActif = $monBrowse->getPopupId();
            $monBrowse->addOnglet('FOURNISS', trad('Tous les fournisseurs'), 'TraiteUrl("ctrl_liste_frs.php?popup_id=' . $monBrowse->getPopupId() . '&action=changeOnglet&onglet=' . $monBrowse->getPopupId() . '")');
            if ($monBrowse->getPopupIdOnglet() == '')
                $monBrowse->setPopupIdOnglet($ongletActif);
        } else
            $monBrowse->setPopupIdOnglet($monBrowse->getPopupId());
        
        if ($_SESSION['Session_CreatFournOccas'] || Menu::allMenu) {
            if ('FOURNISS' == $monBrowse->getPopupIdOnglet()) {
                $action = array(
                    '!action' => "OpenPopup('creation_frs.php?action=creationFrs','popup_creat_frs', 700, 700);",
                    '!texte' => trad('Créer un fournisseur')
                );
                $monBrowse->addAction('ACTION', $action);
            }
        }
        
        // Spec 3673
        // l'action relance le search et sera utilisée par la combo mot-clef
        $action_refresh = 'if (document.getElementById("btnSearch")) document.getElementById("btnSearch").click();';
        $monBrowse->addAction('REFRESH', $action_refresh);
        
        // Bouton "voir carte"
        $action_voir_carte = 'CallUrl(\'ctrl_liste_frs.php?action=VoirCarte&popup_id=FOURNISS&nb_four=\'+document.getElementById(\'zone_nb_element_found\').innerHTML);';
        $monBrowse->addAction('VOIR_CARTE', $action_voir_carte);
        
        // Select "mots-clefs"
        $reqSql = & SqlFournisseur::rqGetMotClefs()->TrouveTous();
        if (is_array($reqSql)) {
            $arrayMots = array();
            $arrayMots[] = array(
                '!value' => '',
                '!libelle' => trad('Choisir un mot-clef')
            );
            foreach ($reqSql as &$mot) {
                $arrayMots[] = array(
                    '!value' => urlencode($mot['MOTCLEF']),
                    '!libelle' => $mot['MOTCLEF']
                );
            }
            $monBrowse->addAction('MOTCLEF', $arrayMots);
            $actionMotClefClear = 'document.getElementById("MOTCLEF").value="";' . $action_refresh;
            $monBrowse->addAction('MOTCLEFCLEAN', $actionMotClefClear);
        }
        
        if ('' != $codeSousFamille) { // $codeSousFamille, $code_art_haplus
                                      // Informations contexte
            $monBrowse->setCodeSSFam($codeSousFamille);
            $monBrowse->setArticleHaplus($code_art_haplus);
            
            // Checkbox "pertinents"
            $monBrowse->addAction('FRS_PERTINENTS', $action_refresh);
        }
        
        $arrayXml = & $monBrowse->getArrayXmlForXsl();
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml('application/xsl/template_browse/browseCore.xsl', $arrayXml);
        PopupBrowse::execSearch('btnSearch', false);
        
        // TRES IMPORTANT : Afin de pouvoir réutiliser la popup dans le script controleur on serialize l'objet. Il pourra être ainsi rapellé par la suite.
        $_SESSION[$popupId] = serializeSecure($monBrowse);
        break;
    case 'VoirCarte':
        $nb_four = getValue('nb_four');
        $idxSep = strpos($nb_four, '/');
        if (false !== $idxSep)
            $nb_four = trim(substr($nb_four, 0, $idxSep));
        
        $nb_four_max = Param::AllParamsGetValue('NB_FOUR_POSI_CARTE');
        
        $nb_four_max = $nb_four_max==0? 10:$nb_four_max;
        
        if ($nb_four > $nb_four_max) {
            $msg = strBuild(Trad('Vous ne pouvez afficher la carte que si au plus @1@ fournisseurs sont sélectionnés.'), $nb_four_max);
            Affichage::messageJS($msg);
        } elseif ($nb_four < 0) {
            $msg = Trad('Il faut au moins un fournisseur sélectionné.');
            Affichage::messageJS($msg);
        } else {
            // On veut les données du focrmulaire, on passe par TraiteUrl
            echo 'TraiteUrl(\'ctrl_liste_frs.php?action=PrepaPopupVoirCarte&popup_id=FOURNISS&page=1\', document.forms.FORM_FOURNISS.elements[0]);';
        }
        
        break;
    case 'PrepaPopupVoirCarte':
        $monBrowse = unserializeSecure($_SESSION[getValue('popup_id')]);
        // On appele la fonction de recherche en passant en paramètre les données GET + POST
        $resultat = $monBrowse->search(getValueAll($_REQUEST));
        $geoInfos = array();
        foreach ($resultat['resultat'] as & $panierFour) {
            $RS = $panierFour['RS'];
            $ADR = $panierFour['ADR'];
            $CPOSTAL = $panierFour['CPOSTAL'];
            $VILLE = $panierFour['VILLE'];
            $CODE_PAYS = $panierFour['CODE_PAYS'];
            $geoInfos[] = array(
                'RS' => $panierFour['RS'],
                'ADR' => $panierFour['ADR'],
                'CPOSTAL' => $panierFour['CPOSTAL'],
                'VILLE' => $panierFour['VILLE'],
                'CODE_PAYS' => $panierFour['CODE_PAYS']
            );
        }
        $_SESSION['GeoLocListeFou'] = serializeSecure($geoInfos);
        echo 'OpenPopup(\'ctrl_liste_frs.php?action=PopupVoirCarte&popup_id=FOURNISS\',\'popup_geoloc_four\', \'600\', \'500\');';
        break;
    
    case 'PopupVoirCarte':
        $geoInfos = unserializeSecure($_SESSION['GeoLocListeFou']);
        unset($_SESSION['GeoLocListeFou']);
        
        $geoloc = new GoogleGeoLocation();
        
        // Ajouter le centre de livraison du panier en cours OU de l'AO en cours
        if (true) {
            // Pour l'instant, le panier
            $panierEntete = new PanierEntete();
            $no_panier = 0;
            $panierEntete->getEntetePanier($no_panier, utilisateur::getID());
            $ADR = $panierEntete->getLIV_ADR();
            // AMI / 20161220 : Il n'y a pas de raison sociale en provenance du panier
            $RS = ''; // $panierEntete->getLIV_CTR();
            $CPOSTAL = $panierEntete->getLIV_CP();
            $VILLE = $panierEntete->getLIV_VILLE();
            $CODE_PAYS = $panierEntete->getLIV_PAYS();
            
            // Dossier 26411
            $index = $geoloc->tryAddLocalisation($ADR, $CPOSTAL, $VILLE, $CODE_PAYS, $RS, $RS);
            if ($index != - 1) {
                $geoloc->setIcon($index, 'http://maps.google.com/intl/en_us/mapfiles/ms/micons/red-dot.png');
                $geoloc->setInfoBulle($index, array(
                    $RS,
                    $ADR,
                    $VILLE,
                    $CODE_PAYS
                ));
            }
        } else {
            // Les AO
        }
        
        // Puis la liste des fournisseurs de la liste
        foreach ($geoInfos as $panierFour) {
            $RS = $panierFour['RS'];
            $ADR = $panierFour['ADR'];
            $CPOSTAL = $panierFour['CPOSTAL'];
            $VILLE = $panierFour['VILLE'];
            $CODE_PAYS = $panierFour['CODE_PAYS'];
            // Dossier 26411
            $index = $geoloc->tryAddLocalisation($ADR, $CPOSTAL, $VILLE, $CODE_PAYS, $RS, $RS);
            if ($index != - 1) {
                $geoloc->setIcon($index, 'http://maps.google.com/intl/en_us/mapfiles/ms/micons/yellow-dot.png');
                $geoloc->setInfoBulle($index, array(
                    $RS,
                    $ADR,
                    $VILLE,
                    $CODE_PAYS
                ));
            }
        }
        $array['geo']['!js'] = $geoloc->GenMap('EmplacementDeMaCarte');
        
        $ObjXSLT = new GenXslt(true);
        echo $ObjXSLT->XslHtml('application/xsl/gestion_fournisseur_localisation.xsl', $array);
        break;
    
    case 'initListeFrs':
        // On créé l'objet Popup et on pass en paramètre l'identifiant de la popup, un type de popup doit donc porté un identifiant unique
        // on passe en 2ème paramètre le nom du script php jouant le rôle de controlleur qui prendra en charge les évènements déclenchés sur la popup
        $monBrowse = new PopupBrowse(getValue('popup_id'), $_SERVER['SCRIPT_NAME']);
        // On définit le titre de la popup. Le titre sera affiché.
        if ($result = SqlParam::rqSelectParFicheOf('FOURN')->TrouveTous()) {
            /**
             * Spec 3599
             * NE PAS METTRE DE REFERENCE A CE NIVEAU CAR ON VA PEUT ETRE INSERER UNE DONNEE DANS Result
             */
            foreach ($result as $index => $element)
                if ($element['CODE_CHP'] == 'MTMAXCC') {
                    $addElement1 = $element;
                    $addElement1['CODE_CHP'] = 'MTMAXCCCAT';
                    $addElement1['LIB_CHP_LISTE'] = trad('Max e-proc / cat.');
                    
                    // Inversion normal car la suite logique ecran doit etre MTMAXCC,MTMAXCCCAT,MTMAXCCHCT
                    insertArray($result, $addElement1, $index + 1);
                    break;
                }
            
            $colonne = array_merge(array(
                array(
                    'ATTR_CHP' => 'A',
                    'MASQ_CHP' => '6',
                    'CODE_CHP' => 'ACTION',
                    'LIB_CHP_LISTE' => 'Action',
                    '_triable' => false
                )
            ), $result);
            
            $monBrowse->calculColonne($colonne);
        }
        
        // On définit ici les colonnes qui seront affichées dans le résultats des recherches.
        // On peut définir ici autant de colonne qu'on le souhaite. Générallement, on propose dans l'affichage du résultat au moins toutes
        // les colonnes correspondantes aux champs de recherche
        // 1er paramètre : Le libellé de la colonne, 2ème paramètre : Le nom du champ sql tel qu'il est présent dans la requête sql
        $monBrowse->addNewSearchField('CODE', trad('Code du fournisseur'));
        $monBrowse->addNewSearchField('RS', trad('Nom'));
        $monBrowse->addNewSearchField('NO_SIRET', trad('Siret / Id fiscal'));
        $monBrowse->addNewSearchField('CPOSTAL', trad('Code postal'));
        $monBrowse->addNewSearchField('VILLE', trad('Ville'));
        
        if ($_SESSION['Session_CreatFournOccas']) {
            $action_creat_frs = "OpenPopup('creation_frs.php?action=creationFrs','popup_creat_frs', 700, 700);";
            $monBrowse->addAction('CREAT_FRS', $action_creat_frs);
        }
        
        if (Param::isFrsProspectVisible())
            $monBrowse->addAction('SELECT_TYPE_FRS', '');
        
        $monBrowse->setIsActionClick(false);
        
        // La popup précédemment construite peut maintenant être affichée
        $monBrowse->setIndiceTriColonne(2);
        $monBrowse->buildXML(); // On construite le tableau de données qui sera fusionné avec la feuille de style XSL
        $genXsl = new GenXslt();
        
        Affichage::innerHTMLPointeur(getValue('ancrage'), $genXsl->XslHtml('application/xsl/template_browse/browseCore.xsl', $monBrowse->getArrayXmlForXsl()));
        
        PopupBrowse::execSearch('btnSearch', true);
        
        // TRES IMPORTANT : Afin de pouvoir réutiliser la popup dans le script controleur on serialize l'objet. Il pourra être ainsi rapellé par la suite.
        $_SESSION[getValue('popup_id')] = serializeSecure($monBrowse);
        break;
    
    case 'initListeNotationFrs':
        // On créé l'objet Popup et on pass en paramètre l'identifiant de la popup, un type de popup doit donc porté un identifiant unique
        // on passe en 2ème paramètre le nom du script php jouant le rôle de controlleur qui prendra en charge les évènements déclenchés sur la popup
        $monBrowse = new PopupBrowse(getValue('popup_id'), $_SERVER['SCRIPT_NAME']);
        
        // On définit le titre de la popup. Le titre sera affiché.
        $monBrowse->setPopupTitle(trad('Liste des notations fournisseurs'));
        
        // On définit les champs de recherche proposés à l'utilisateur, on peut en ajouter autant qu'on le souhaite.
        // IMPORTANT : 1er paramètre : Le nom des champs ajoutés doit correspondre au nom des colonnes sql utilisés dans la requête de recherche.
        // 2ème paramètre : On définit le libellé du champ qui sera iniqué à l'utilisateur
        $monBrowse->addNewSearchField('CODE', trad('Code du fournisseur'));
        $monBrowse->addNewSearchField('RS', trad('Nom'));
        $monBrowse->addNewSearchField('NO_SIRET', trad('Siret / Id fiscal'));
        $monBrowse->addNewSearchField('CPOSTAL', trad('Code postal'));
        $monBrowse->addNewSearchField('VILLE', trad('Ville'));
        $monBrowse->addNewSearchField('COD_PER', trad('Période'));
        
        // On définit ici les colonnes qui seront affichées dans le résultats des recherches.
        // On peut définir ici autant de colonne qu'on le souhaite. Générallement, on propose dans l'affichage du résultat au moins toutes
        // les colonnes correspondantes aux champs de recherche
        // 1er paramètre : Le libellé de la colonne, 2ème paramètre : Le nom du champ sql tel qu'il est présent dans la requête sql
        $monBrowse->addNewColumn(trad('Code'), 'CODE', 'asc', '15%', true, 'A');
        $monBrowse->addNewColumn(trad('Nom'), "RS", 'asc', '30%', true, 'A');
        $monBrowse->addNewColumn(trad('Siret / Id fiscal'), 'NO_SIRET', 'asc', "30%", true, 'A');
        $monBrowse->addNewColumn(trad('Code postal'), 'CPOSTAL', 'asc', '15%', true, 'A');
        $monBrowse->addNewColumn(trad('Ville'), 'VILLE', 'asc', '20%', true, 'A');
        $monBrowse->addNewColumn(trad('Période'), 'COD_PER', 'asc', '10%', true, 'A');
        $monBrowse->addNewColumn(trad('Note'), 'NOTMOYFO', 'asc', '10%', true, 'A');
        
        $monBrowse->setIsActionClick(false);
        
        // La popup précédemment construite peut maintenant être affichée
        $monBrowse->buildXML(); // On construite le tableau de données qui sera fusionné avec la feuille de style XSL
        
        $genXsl = new GenXslt();
        Affichage::innerHTMLPointeur(getValue('ancrage'), $genXsl->XslHtml('application/xsl/template_browse/browseCoreFournisseurs.xsl', $monBrowse->getArrayXmlForXsl()));
        
        PopupBrowse::execSearch('btnSearch', true);
        
        // TRES IMPORTANT : Afin de pouvoir réutiliser la popup dans le script controleur on serialize l'objet. Il pourra être ainsi rapellé par la suite.
        $_SESSION[$popupId] = serializeSecure($monBrowse);
        break;
    
    case 'search': // Si l'utilisateur clique sur le bouton "Rechercher"
                   // On récupère l'objet popup créé prcédemment en le déserialisant
        $monBrowse = unserializeSecure($_SESSION[$popupId]);
        $_REQUEST['contexte'] = $contexte;
        
        if ($_SESSION['Session_CreatFournOccas']) {
            if ('FOURNISS' == $monBrowse->getPopupIdOnglet()) {
                $action = array(
                    '!action' => "OpenPopup('creation_frs.php?action=creationFrs','popup_creat_frs', 700, 700);",
                    '!texte' => trad('Créer un fournisseur')
                );
                $monBrowse->addAction('ACTION', $action);
            }
        }
        
        // On appele la fonction de recherche en passant en paramètre les données GET + POST
        $resultat = $monBrowse->search(getValueAll($_REQUEST));
        // On affiche sur la popup le nombre de résultats trouvés
        $monBrowse->showNbResult($resultat['resultat']);
        
        // On créé un nouvel objet : un objet pagination.
        // On lui passe en paramètre : le tableau de résultat de la recherche, le nombre de résultats affiché par page, le numéro de la page en cours
        $Pagination = new Pagination($resultat['resultat'], $monBrowse);
        $Pagination->setClassBrowse($monBrowse);
        
        if ($monBrowse->getIsActionClick()) {
            // On définit ici les actions postionnées sur les lignes de résultat
            // On peut ajouter autant d'action qu'on le souhaite sur le déclencheur onclick
            $Pagination->setClickOnLine(true, 'value', $monBrowse->getTargetImputField(), 'CODE', true); // action permettant d'insérer la valeur de la ligne sélectionnée dans le champ de saisi
            $Pagination->setClickOnLine(false, 'innerHTML', $monBrowse->getTargetLabelField(), 'RS', true); // action permettant d'afficher le libellé de la valeur saisi
            $Pagination->setActionBack($monBrowse->getBackMode(), $monBrowse->getBackCtrl(), $monBrowse->getBackAction(), $monBrowse->getBackData(), $monBrowse->getBackPopup(), $monBrowse->getBackForm(), $monBrowse->getBackField(), true);
        }
        
        $Pagination->setWidth($monBrowse);
        
        $liste_fournisseurs = $Pagination->getArrayPageElements($monBrowse);
        $requeteIntuition = new RechercheArticleMetier(null, '', '', '');
        $popup_contexte = getValue('popup_contexte');
        
        if (is_array($liste_fournisseurs) && array_key_exists('resultat', $liste_fournisseurs))
            foreach ($liste_fournisseurs['resultat'] as &$frs) {
                $code = $frs['CODE'];
                $code_frs = urlencode($code);
                $frs['fiche_frs'] = "OpenPopup('popup_frs.php?action=afficherPopupFrs&contexte={$popup_contexte}&code_frs={$code_frs}','win_popup_frs',700,600);";
                
                // Spec 3599
                if (array_key_exists('SEUILEPDIF', $frs) && ! BoolSql($frs['SEUILEPDIF']))
                    $frs['MTMAXCCHCT'] = '';
                
                // Quand le type de liste est celui des notations de fournisseur on ajoute une action permettant d'afficher le détail de la notation
                if ('NOTATION_FOURNISS' == getValue('popup_id') && array_key_exists('COD_PER', $frs))
                    $frs['detail_notation_frs'] = "OpenPopup('popup_frs.php?action=afficherPopupNotationFrs&code_frs={$code_frs}&periode={$frs['COD_PER']}','win_popup_frs',700,600);";
                
                if (array_key_exists('NB_DOC_ATT', $frs) && $frs['NB_DOC_ATT'] > 0 || 1 == $_SESSION['DOC_RAT'])
                    $frs['visuDocRatt'] = "OpenPopup('suivi_doc.php?action=visuDocRatt&typeItem=FOURNISS&codeItem=" . $code_frs . "','popup_visu_doc_ratt',800, 500);";
                
                $Fournisseur = new Fournisseur($code);
                $Fournisseur->addInfoBulleFraisPort($frs);
                
                // Cde eproc interdite sur hors catalogue 3599
                $frs['NOCCGEN'] = array_key_exists('NOCCGEN', $frs) ? BoolSql($frs['NOCCGEN']) : false;
                
                // Spec 03649 test de l'existance d'un accord-cadre
                $code_art_haplus = $monBrowse->getProperties('COD_ART');
                $sql = "select * from ( " . "SELECT distinct * FROM ACCCADRE with(nolock) " . "WHERE TYPE_FG='F' AND CODE_FOUR='" . ReplaceSqlPointeur($code) . "'  " . "AND DATE_DEB <= CONVERT(VARCHAR,GETDATE(),112) AND (DATE_FIN ='00000000' OR DATE_FIN >= CONVERT(VARCHAR,GETDATE(),112)) " . "union " . "SELECT distinct a.* FROM FS_ACD l with(nolock), ACCCADRE a with(nolock) " . "WHERE l.CODE_FOU='" . ReplaceSqlPointeur($code) . "'  " . "AND a.TYPE_FG='G' AND a.CODE_ACD=l.CODE_ACD " . "AND a.DATE_DEB<= CONVERT(VARCHAR,GETDATE(),112) AND (a.DATE_FIN='00000000' OR a.DATE_FIN >= CONVERT(VARCHAR,GETDATE(),112)) " . ") tmp " . "where not exists(select * from ACART with (nolock) where ACART.CODE_ACD = tmp.CODE_ACD) " . (! is_null($code_art_haplus) && $code_art_haplus != '' ? "or exists(select * from ACART with (nolock) where ACART.CODE_ACD = tmp.CODE_ACD AND ACART.CODE_ART = '" . ReplaceSqlPointeur($code_art_haplus) . "') " : '');
                $requete = new RequeteSQL($sql, DB_OXASQLDB);
                
                if ($requete->Trouve1())
                    $frs['existe_acd'] = 1;
                else
                    $frs['existe_acd'] = 0;
                
                // Pour etde ET Bouygues rien
                if ($_SESSION['Session_NumClient'] == 37 || $_SESSION['Session_NumClient'] == 28 || $_SESSION['Session_NumClient'] == 35) {} else
                    // Dossier 26787
                    $frs['presenceCatalogue'] = (Param::isSearchByCatalogue() && ($result_rech_intuition = $requeteIntuition->InfoArt(null, $code, 1, true)));
                
                /**
                 * Traitement des valeurs MTMAXCC / MTMAXCCHCT
                 */
                if (array_key_exists('SEUILEPDIF', $frs) && BoolSql($frs['SEUILEPDIF'])) {
                    $frs['MTMAXCCCAT'] = $frs['MTMAXCC'];
                    $frs['MTMAXCC'] = '';
                } else {
                    $frs['MTMAXCCCAT'] = '';
                    $frs['MTMAXCCHCT'] = '';
                }
            }
        
        if ('FOURNISS' == getValue('popup_id'))
            $fichier_xsl = 'application/xsl/popups_and_listes/browseFournisseurs.xsl';
        elseif ('NOTATION_FOURNISS' == getValue('popup_id'))
            $fichier_xsl = 'application/xsl/popups_and_listes/browseNotationFournisseurs.xsl';
        
        $genXsl = new GenXslt();
        
        $xmlTemp = $genXsl->XslHtml($fichier_xsl, $liste_fournisseurs);
        
        Affichage::innerHTMLPointeur('resultat', $xmlTemp);
        
        $genXsl->echoHtml('id_btn_action_liste');
        
        $html = $genXsl->XslHtml('application/xsl/template_browse/browsePagination.xsl', $Pagination->buildNavigationBar(getValue('popup_id'), $_SERVER['SCRIPT_NAME'], $monBrowse->getPopup_form_name()));
        Affichage::innerHTMLPointeur('pagination', $html);
        break;
}

$connecteur->disconnect();
exit();