<?php

class WebServiceManager extends WebServiceOperator
{

    private $clLoaded = null;

    function __construct()
    {
        parent::__construct();
        
        parent::init();
    }

    function works()
    {
        global $connecteur;
        if (Param::isPublicationGenerique()) {
            $_SESSION['GLOB_AuthLigneGenerique'] = true;
            $_SESSION['GLOB_AuthLigneSFamille'] = true;
        }
        
        $listeCleArticle = array(
            'PROVENANCE',
            'COD_ART', // Code de l'article HAPLUS
            'DES_ART', // Designation de l'article
            'REF_FAB', // Référence fabricant
            'REF_FOURN', // Référence fournisseur
            'qte', // Quantité
            'COD_GAM', // Code gamme
            'COD_FAB', // Code fabricant
            'COD_SFAM', // Code sous famille
            'PX_ART', // Prix de l'article unitaire en fonction de la quantité intégrant les remises gammes ....
            'PX_ART_INIT', // Prix de l'article unitaire pour une quantité de 1 integrant les remises gammes ....
            'COD_FOURN', // Code du fournisseur
            'COEFCONV', // Coefficicient de conversion valeur si aucune alors 0
            'ID_CAT', // Id du catalgue dans le cas d'article provenant de catalogue
            'CATPRLST', // visibilité des catalogues (liste d'id)
            'COD_UNIT', // Code unité de l'article
            'DELAI',
            'COD_DEV',
            'DES_COMP',
            'type_de_ligne', // 0 => article catalogue, 1 article genererique / famille / Libre,2 article de types frais annexe, 3 article de frais de transport (automatique)
            
            'SI_CODE',
            'CG_CODE',
            'CDC_CODE',
            'SCA_CODE',
            'CTR_LIVR',
            'MODE_TRS',
            'TYPIMAGE',
            'IMGART',

            'TAUX_TVA',
            
            'IDLIGNE' // Information provenant de synequa sinon 0
        );
        
        $idUser = 0;
        $idPanier = null;
        $this->xmlStruct->cd('//SOAP-ENV:Body');
        $objs = $this->xmlStruct->getNodes('OxaprocIN'); // UNIPAAS

        if ($objs->length > 0) {
            $_SESSION['TrtSynchrone'] = true;
            $sessionClose = false;
            foreach ($objs as $o) {
                switch ($o->tagName) {
                    case 'OxaprocIN':
                        $itemPanier = array();
                        if ($o->hasChildNodes())
                            foreach ($o->childNodes as $child) {
                                switch ($child->tagName??'') {
                                    /**
                                     * Test EDP
                                     */
                                    case 'CopiePanier':
                                        if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) {
                                            $idPanierSource = null;
                                            $initImput = 0;
                                            if ($child->hasChildNodes()) {
                                                foreach ($child->childNodes as $childElement) {
                                                    switch ($childElement->tagName) {
                                                        case 'idPanierSource':
                                                            $idPanierSource = $childElement->textContent;
                                                        case 'forcageInitImputation':
                                                            $forcageInitImputation = (BoolWsdl($childElement->textContent) ? 1 : 0);
                                                            break;
                                                    }
                                                }
                                            }
                                            if (! is_null($idPanierSource)) {
                                                $flg_del_entry = false;
                                                $en_cours = true;
                                                CopiePanier($idPanierSource, 'SYS', $flg_del_entry, $en_cours, $forcageInitImputation);
                                                $_SESSION['id_panier'] = 0;
                                                $clTraitement = ValideIntPanier('controle_panier_login'); // Doit renvoyer que ce panier est valide pour un usage externe
                                                $clTraitement->ControlePanier();
                                            }
                                        }
                                        break;
                                    /**
                                     * Test EDP
                                     */
                                    case 'ValidationPanier':
                                        $CdeComptoir = null;
                                        $ChiffrageExecution = null;
                                        $critere = null;
										
										/**
										*	Refait les controle dans le panier pour la gestion des catprlist
										*/
										$clTraitement = ValideIntPanier('controle_panier_login');
                                        $clTraitement->ControlePanier();
										
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'CdeComptoir':
                                                        $CdeComptoir = $childElement->textContent;
                                                    case 'ChiffrageExecution': // Valeur Possible C ou E
                                                        $ChiffrageExecution = $childElement->textContent;
                                                        break;
                                                }
                                            }
                                   
                                            if (! is_null($CdeComptoir) && ! is_null($ChiffrageExecution)) {
                                                
                                                if (! BoolSql($CdeComptoir))
                                                {
                                                    Panier::revaluationFraisDePort($_SESSION['id_user'], $_SESSION['id_panier']);
                                                }
                                            
                                                
                                                if ($all_four = GetFrsLigne($_SESSION['id_panier'], is_null($critere) ? $critere : $critere['COD_FOURN'])) {
                                                    // Pour chacun des fournisseurs, on appelle la fonction CreeBrowse qui crée la structure XML destinée à la XSL.
                                                    foreach ($all_four as $num_interne_browse => & $critere) {
                                                        // Si le fournisseur n'est pas présent dans la table Oxaproc : oxa_user_panier_four
                                                        PanierLigne::controleBlocRegroupement($critere);
                                                    }
                                                }
                                                
                                                $wsdl['Retour'] = PanierEntete::soumission($ChiffrageExecution, $CdeComptoir);
                                            }
                                        }
                                        break; // Dossier N° 27021 (BOUYCO) du 18/04/2017 : Vos Réf. : 1984 / L'article frais de port ne doit pas s'ajouter dans le panier pour une commande comptoir
                                               // ws : validation panier, popup fournisseur, mise à jour entete panier, mise à jour session utilisateur
                                    /**
                                     * Soumission initiale d'un panier ou lancement de la visualisation d'un contenu d'un fournisseur
                                     */
                                    /**
                                     * Test EDP
                                     */
                                    case 'SoumissionPanier':
                                        $critere = null;
                                        $CdeComptoir = null;
                                        $ChiffrageExecution = null;
                                        
                                        if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) {
                                            if ($child->hasChildNodes()) {
                                                foreach ($child->childNodes as $childElement) {
                                                    switch ($childElement->tagName) {
                                                        case 'CdeComptoir':
                                                            $CdeComptoir = $childElement->textContent;
                                                        case 'ChiffrageExecution': // Valeur Possible C ou E
                                                            $ChiffrageExecution = $childElement->textContent;
                                                            break;
                                                        case 'COD_FOURN': // Donnée pouvant ne pas etre mis si l'on veut un retour moins restritif
                                                        case 'CRITERE_REGROUP':
                                                            $critere[$childElement->tagName] = $childElement->textContent;
                                                            break;
                                                    }
                                                }
                                            }
                                            
                                            if (! is_null($CdeComptoir) && ! is_null($ChiffrageExecution)) {
                                                
                                                if (! BoolSql($CdeComptoir))
                                                    // Lancement de la procédure de recalcul des lignes de frais de port
                                                    Panier::revaluationFraisDePort($_SESSION['id_user'], $_SESSION['id_panier'], $critere);
                                                
                                                if ($all_four = GetFrsLigne($_SESSION['id_panier'], is_null($critere) ? $critere : $critere['COD_FOURN'])) {
                                                    // Pour chacun des fournisseurs, on appelle la fonction CreeBrowse qui crée la structure XML destinée à la XSL.
                                                    foreach ($all_four as $num_interne_browse => & $critere) {
                                                        // Si le fournisseur n'est pas présent dans la table Oxaproc : oxa_user_panier_four
                                                        PanierLigne::controleBlocRegroupement($critere);
                                                    }
                                                }
                                            }
                                        }
                                        break;
                                    /**
                                     * Test EDP
                                     */
                                    case 'SupprimerPanier':
                                        $id_panier = null;
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'id_panier':
                                                        $id_panier = $childElement->textContent;
                                                        break;
                                                }
                                            }
                                            if (! is_null($id_panier) && array_key_exists('id_user', $_SESSION)) {
                                                $_SESSION['id_panier'] = $id_panier;
                                                $_SESSION['initConnexion'] = 1;
                                                PanierEntete::InitPanierEncours($_SESSION['id_user'], $_SESSION['id_panier'], true);
                                            }
                                        }
                                        break;
                                    case 'SupprimerSession':
                                        @ session_destroy();
                                        $sessionClose = true;
                                        break;
                                    case 'SelectEntete':
                                   
                                        $id_panier = null;
                                        if ($child->hasChildNodes()) 
                                        {
                                            foreach ($child->childNodes as $childElement) 
                                            {
                                                switch ($childElement->tagName) {
                                                    case 'id_panier':
                                                        $id_panier = $childElement->textContent;
                                                        break;
                                                }
                                            }    
                                            $PanierEntete = new PanierEntete();
                                            $PanierEntete->getEntetePanier($id_panier, $_SESSION['id_user']);
                                            
                                            $wsdl['Retour']['Entete'] = $PanierEntete->getAttributs();
                                        }
                                        $contexteModificationCS = ''; 
                                        $panier = new Panier(); // Création de l'objet panier          
                                    
                                        if ($PanierEntete->isPanierModifDocPourSignature()) {
                                            $origine = explode('|', $PanierEntete->getORIGINE());
                                            
                                            if (TypeSuivi::CDE == $origine[1])
                                                $table_cs = 'CA_ENTET';
                                            elseif (TypeSuivi::DA == $origine[1])
                                                $table_cs = 'DA_ENTET';
                                            
                                            $contexteModificationCS = 'signerModifDocument';
                                        } else
                                            $table_cs = 'DA_ENTET';
                                    
                                        $panier->initListeCS(null, $table_cs, 0, 0, 'gestion_cs_panier.php', null, 'form_cs_entete_panier', true, $contexteModificationCS, null , null, getValue('typeChargement'), getValue('num_da'));

                                        $array = $panier->getListe_cs();
                                
                                        $final = []; 
										
                                       // print_r($array); exit; 
										//print_r(SqlCs::rqGetInfoByType('')->TrouveTous());
										$nbrPush = count($array['ListeCS']['CS']); 
										$arrayCs = $panier->getListeCsArraySansInit($table_cs, $_SESSION['id_panier']);
										foreach($arrayCs as $cs)
										{
											if($cs['NONDISPO'] != 1)
											{
												
                                                $type = SqlCs::rqGetInfoByType($cs['TYPE'])->Trouve1()['CONTROLE'];
                                                    // print_r($cs);exit;
                                                $arr = 
                                                [
                                                    'CSNumFixe'   => $cs['NUM_FIX'],
                                                    'CSValeur'    => $cs['VALEUR'],
                                                    'CSCodeTable' => $type == 1 ? $cs['TYPE'] : '',
                                                    'CSFormat'    => $cs['FORMAT'],
                                                    'CSLibelle'   => trad($cs['NOM']), 
                                                
                                                ]; 

                                                if($cs['OBLIG']==1 || $cs['OBLIG']==true)
                                                {
                                                    $arr['CSOblig'] = 'true';
                                                }else
                                                {
                                                    $arr['CSOblig'] = 'false';
                                                }
                                                    
                                                array_push($final, $arr);
                                                    
											}
										}
                                        
                                  
                                        
                                        $wsdl['Retour']['Entete']['ListChpSup']['ChpSup'] = $final;
                                        
                                  
                                        break;
                                    case 'UpdateEntete':
                                        if ($child->hasChildNodes()) {
                                            $PanierEntete = new PanierEntete();
                                            $PanierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
                                            
                                            $ModifImput = new ModifImput(true, $PanierEntete->getCODE_STE());
                                            $zoneEcran = null;
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName)
                                                {
                                                    case 'SI_CODE':
                                                        if($PanierEntete->getSI_CODE() != $childElement->textContent)
                                                        {
                                                            if ($ret = PanierEntete::majAxeImputation(true, $ModifImput, $zoneEcran, $childElement->tagName, 'SectionImputation_', $childElement->textContent))
                                                                $wsdl['Retour']['Maj'] = $ret;                     
                                                        }
                                                        
                                                        break;
                                                    case 'CG_CODE':
                                                        if($PanierEntete->getCG_CODE() != $childElement->textContent)
                                                        {
                                                            if ($ret = PanierEntete::majAxeImputation(true, $ModifImput, $zoneEcran, $childElement->tagName, $childElement->tagName, $childElement->textContent))
                                                                $wsdl['Retour']['Maj'] = $ret;
                                                        }
                                                        break;
                                                    case 'CDC_CODE':
                                                        if($PanierEntete->getCDC_CODE() != $childElement->textContent)
                                                        {
                                                            if ($ret = PanierEntete::majAxeImputation(true, $ModifImput, $zoneEcran, $childElement->tagName, $childElement->tagName, $childElement->textContent))
                                                                $wsdl['Retour']['Maj'] = $ret;
                                                        }
                                                        break;
                                                    case 'SCA_CODE':
                                                        if($PanierEntete->getSCA_CODE() != $childElement->textContent)
                                                        {
                                                            if ($ret = PanierEntete::majAxeImputation(true, $ModifImput, $zoneEcran, $childElement->tagName, $childElement->tagName, $childElement->textContent))
                                                                $wsdl['Retour']['Maj'] = $ret;
                                                        }
                                                        break;
                                                    case 'CtrLivraison': // Demande de changement sur le centre de livraison
                                                        $centre_livraison = $childElement->textContent;
                                                        if (1 == $_SESSION['GLOB_AuthModAdrLiv']) {
                                                            if ($ctr_liv = SqlCentreGene::getInfoOnCentre($centre_livraison, 'L', $PanierEntete->getCODE_STE(), array(
                                                                'CODE_SI' => $PanierEntete->getSI_CODE()
                                                            ))->Trouve1()) {
                                                                $array_valeur = array();
                                                                
                                                                if ($contact = & SqlCentreGene::getContactForCentre($centre_livraison)->Trouve1()) {
                                                                    $array_valeur['CTC_NOM'] = $contact['CTC_NOM'];
                                                                    $array_valeur['CTC_FCT'] = $contact['CTC_FCT'];
                                                                    $array_valeur['CTC_TEL'] = $contact['CTC_TEL'];
                                                                    $array_valeur['CTC_FAX'] = $contact['CTC_FAX'];
                                                                    $array_valeur['CTC_GSM'] = $contact['CTC_GSM'];
                                                                    $array_valeur['CTC_MAIL'] = $contact['CTC_MAIL'];
                                                                } else {
                                                                    $array_valeur['CTC_NOM'] = '';
                                                                    $array_valeur['CTC_FCT'] = '';
                                                                    $array_valeur['CTC_TEL'] = '';
                                                                    $array_valeur['CTC_FAX'] = '';
                                                                    $array_valeur['CTC_GSM'] = '';
                                                                    $array_valeur['CTC_MAIL'] = '';
                                                                }
                                                                
                                                                $array_valeur['LIV_ADR'] = $ctr_liv['ADRESSE']; // Adresse de livraison
                                                                $array_valeur['LIV_CP'] = $ctr_liv['CPOSTAL']; // Code postal de livraison
                                                                $array_valeur['LIV_VILLE'] = $ctr_liv['VILLE1']; // Ville de livraison
                                                                $array_valeur['LIV_PAYS'] = $ctr_liv['PAYS']; // Pays de livraison
                                                                $array_valeur['LIV_CTR'] = $centre_livraison; // Centre de livraison
                                                                
                                                                $mode_trs = ''; // Pas de système de transport
                                                                PanierLigne::updateCtrLiv($_SESSION['id_user'], $_SESSION['id_panier'], $centre_livraison, $mode_trs);
                                                                
                                                                PanierEntete::changeCentreLivraison($array_valeur, $centre_livraison, $mode_trs);
                                                            }
                                                        }
                                                        break;
                                                        case 'ListChpSup':

                                                            if ($PanierEntete->isPanierModifDocPourSignature()) {
                                                                $origine = explode('|', $PanierEntete->getORIGINE());
                                                                
                                                                if (TypeSuivi::CDE == $origine[1])
                                                                    $table_cs = 'CA_ENTET';
                                                                elseif (TypeSuivi::DA == $origine[1])
                                                                    $table_cs = 'DA_ENTET';
                                                                
                                                            } else
                                                                $table_cs = 'DA_ENTET';

                                                                $updateFinal = []; 
                                                                foreach($childElement->childNodes as $updateChilds)
                                                                {
                                                                    $numFix = $valeurCSUpdate =  '';
                                                                    $i=0;
                                                                    
                                                                    foreach($updateChilds->childNodes as $CSUpdate)
                                                                    {
                                                                        if($CSUpdate->nextSibling->tagName == 'CSValeur')
                                                                        {
                                                                            if($CSUpdate->nextSibling->textContent == '')
                                                                            {
                                                                                $valeurCSUpdate = ' '; 
                                                                            }
                                                                            else
                                                                            {
                                                                                $valeurCSUpdate = $CSUpdate->nextSibling->textContent;
                                                                            }
                                                                        }
                                                                        if($CSUpdate->nextSibling->tagName == 'CSNumFixe')
                                                                        {
                                                                            $numFix = $CSUpdate->nextSibling->textContent;
                                                                        }
                                                                    
                                                                    
                                                                        if($numFix != '' && $valeurCSUpdate != '')
                                                                        {
                                                                            
                                                                            $array = 
                                                                            [
                                                                                'VALEUR' => $valeurCSUpdate, 
                                                                                'NUM_FIX' => $numFix, 
                                                                                'ID_LIGNE' => 0,
                                                                                'COD_TAB' => $table_cs, 
                                                                            ]; 
                                                                            $valeurCSUpdate = ''; $numFix = ''; 
                                                                            array_push($updateFinal, $array);                                                                       
                                                                            $i++;
                                                                            
                                                                        }
                                                                        
                                                                    }
    
                                                                }
                                                                CS::UpdateCS($updateFinal);
                                                                break;
                                                }
                                            }
                                        }
                                        // SI_CODE CG_CODE CDC_CODE SCA_CODE CTR_LIV
                                        break;
                                    /**
                                     * mise à jour session utilisateur
                                     */
                                    case 'UpdateSession':
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'Langue':
                                                        $_SESSION['Session_Langue'] = $childElement->textContent;
                                                        break;
                                                    case 'CtrEmetteur':
                                                        $_SESSION['Session_CodeCtrEmetteur'] = $childElement->textContent;
                                                        break;
                                                    case 'CtrLivraison':
                                                        $_SESSION['Session_CodeCtrLivraison'] = $childElement->textContent;
                                                        break;
                                                    case 'SI_CODE':
                                                        $_SESSION['Session_SectionImputation'] = $childElement->textContent;
                                                        /**
                                                         * Important c'est le systeme qui pascule cette donnée pour un nouveau panier
                                                         */
                                                        $_SESSION['SectionImputation_Session_user'] = $childElement->textContent;
                                                        break;
                                                    case 'CG_CODE':
                                                        $_SESSION['Session_CG'] = $childElement->textContent;
                                                        break;
                                                    case 'CDC_CODE':
                                                        $_SESSION['Session_CDC'] = $childElement->textContent;
                                                        ;
                                                        break;
                                                    case 'SCA_CODE':
                                                        $_SESSION['Session_SCA'] = $childElement->textContent;
                                                        break;
                                                }
                                                $_SESSION['initConnexion'] = 1;
                                                $nb_ligne_panier = Panier::getNbLignePanier($_SESSION['id_user'], $_SESSION['id_panier']);
                                                if (0 == $nb_ligne_panier) {
                                                    $PanierEntete = new PanierEntete();
                                                    $PanierEntete->initEntetePanier(0, true);
                                                }
                                            }
                                            
                                            $centre = new Centre();
                                            $centre->getSiteStkFromCtrLiv($_SESSION['Session_CodeCtrLivraison']);
                                            $siteStock = $centre->getSITE_STK();
                                            
                                            $libSiteStock = SqlSiteStock::rqGetSiteStockLabel($siteStock)->Trouve1()['DESIGN']??'';
                                            
                                            $wsdl['Retour']['CodeSiteStock'] = $siteStock;
                                            $wsdl['Retour']['LibSiteStock'] = $libSiteStock;
                                        }
                                        break;
                                    /**
                                     * EDP Controle mProc
                                     * WSDL relatif à la connexion
                                     */
                                    case 'Connexion':
                                        $result = null;
                                        $ident = null;
                                        $langue = null;
                                        $CODE_STE = null;
                                        
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'Langue':
                                                        $langue = trim($childElement->textContent);
                                                        break;
                                                    case 'Utilisateur':
                                                        $ident = trim($childElement->textContent);
                                                        $passwd = '';
                                                        break;
                                                    case 'CODE_STE':
                                                        $CODE_STE = trim($childElement->textContent);
                                                        break;
                                                }
                                            }
                                            if (is_null($ident)) {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => trad('Absence de :') . ' ' . 'Utilisateur'
                                                );
                                            } else if (is_null($langue)) {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => trad('Absence de :') . ' ' . 'Langue'
                                                );
                                            } else if (is_null($CODE_STE)) {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => trad('Absence de :') . ' ' . 'CODE_STE'
                                                );
                                            } else if ($ident == '') {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => 'Utilisateur' . ' ' . trad('Non renseigné:')
                                                );
                                            } else if ($langue == '') {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => 'Langue' . ' ' . trad('Non renseigné:')
                                                );
                                            } else if ($CODE_STE == '') {
                                                $wsdl['Retour']['Erreur'] = array(
                                                    '!Statut' => 'E',
                                                    '!Message' => 'CODE_STE' . ' ' . trad('Non renseigné:')
                                                );
                                            } else {
                                                $autologin = true;
                                                if ($result = Utilisateur::WsdlIdent($ident, $passwd, $langue, $result, $autologin, 'MPROC')) {
                                                    if ($result['ConnexionReussie']) {
                                                        // Lancement du controle panier
                                                        $_SESSION['Init_SectionImputation'] = $_SESSION['Session_SectionImputation'];
                                                        $_SESSION['Session_SocUsr'] = $CODE_STE;
                                                        $_SESSION['SectionImputation_Session_user'] = $_SESSION['Session_SectionImputation'];
                                                        $_SESSION['Session_CG'] = (isset($_SESSION['Session_CG'])) ? $_SESSION['Session_CG'] : '';
                                                        $_SESSION['Session_CDC'] = $_SESSION['Session_CDC'];
                                                        $_SESSION['Session_SCA'] = $_SESSION['Session_SCA'];
                                                        $_SESSION['Session_Langue'] = $langue;
                                                        
                                                        $valeur_init_session = utilisateur::getAllValueInitSessionByUserAndSociete($ident, $_SESSION['Session_SocUsr']);
                                                        utilisateur::setAllFieldsSessionUser($valeur_init_session);
                                                        
                                                        PanierEntete::setPanierCourant(0);
                                                        
                                                        $PanierEntete = new PanierEntete();
                                                        $PanierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
                                                        $clTraitement = ValideIntPanier('controle_panier_login'); // Doit renvoyer que ce panier est valide pour un usage externe
                                                        $clTraitement->ControlePanier();
                                                        
                                                        $wsdl['Retour'] = $result;
                                                    } else {
                                                        $wsdl['Retour']['Erreur'] = array(
                                                            '!Statut' => 'E',
                                                            '!Message' => trad('Connexion non permise')
                                                        );
                                                    }
                                                } else {
                                                    $wsdl['Retour']['Erreur'] = array(
                                                        '!Statut' => 'E',
                                                        '!Message' => trad('Pb WebService HAPLUS')
                                                    );
                                                }
                                            }
                                        }
                                        break;
                                    /**
                                     * Donne la liste des lignes d'articles,
                                     */
                                    case 'SelectLigneArticle':
                                        $critere = null;
                                        if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) {
                                            $idPanier = $_SESSION['id_panier'];
                                            if ($child->hasChildNodes()) {
                                                foreach ($child->childNodes as $childElement) {
                                                    switch ($childElement->tagName) {
                                                        case 'id_panier':
                                                            $idPanier = $childElement->textContent;
                                                            break;
                                                        case 'COD_FOURN': // Donnée pouvant ne pas etre mis si l'on veut un retour moins restritif
                                                        case 'CRITERE_REGROUP':
                                                            $critere[$childElement->tagName] = $childElement->textContent;
                                                            break; 
                                                        
                                                    }
                                                }
                                            }
                                            $panier = new Panier(); // Création de l'objet panier    
											$final = []; 
                                            $contexteModificationCS = '';
                                            $table_cs = 'DA_LIGNE';
                                            
                                            // $sql = SqlPanier::rqGetLignePanierBlocFournisseur($idPanier, $critere);
                                            if ($ligneBloc = SqlPanier::rqGetLignePanierBlocFournisseur($idPanier, $critere)->TrouveTous()) 
                                            {
                                                $i=0;
                                                foreach($ligneBloc as $ligne)
                                                {                                          
                                                    $ccTmpArray = [];
										            $ListeCCLigne = SqlCaracteristiquesCompl::getCCDoc('PAN', $_SESSION['id_panier'], $ligne['id_lig'], $_SESSION['id_user'])->TrouveTous();
                                                    if (is_array($ListeCCLigne)){
                                                        foreach ($ListeCCLigne as $ligneCC) {
                                                            if ($ligneCC['FORMAT'] == 'L'){
                                                                $ligneCC['VALEUR'] = Wsdl::convertBooleenCheckboxForWsdl($ligneCC['VALEUR']);
                                                            }
                                                            
                                                            $ccTmpArray[] = [
                                                                'CC_ID' => $ligneCC['CC_ID'],
                                                                'CC_IS_TITLE' => Wsdl::convertBooleenCheckboxForWsdlTrueFalse($ligneCC['CC_IS_TITLE']),
                                                                'CC_NAME' => $ligneCC['NOM'],
                                                                'CC_FORMAT' => $ligneCC['FORMAT'],
                                                                'CC_TYPE' => $ligneCC['CC_TYPE'],
                                                                'CC_REQUIRED' => Wsdl::convertBooleenCheckboxForWsdlTrueFalse($ligneCC['CC_REQUIRED']),
                                                                'CC_VALUE' => $ligneCC['VALEUR']
                                                            ];
                                                        }
                                                    }
                                                    if (count($ccTmpArray)>0) {
                                                        $ligneBloc[$i]['ListCarComp']['CarComp'] = $ccTmpArray;
                                                    }
                                                           
									
                                                    $panier->initListeCS(null, $table_cs, $ligne['id_lig'], (int) $ligne['id_lig'], 'gestion_cs_panier.php', null, "frm_recherche", true, $contexteModificationCS, null, null,null,null, true);
                                                    $r =$panier->getListe_cs(); 
                                                    $final = []; 
                                                    $o=0;
                                                    $arr = [];
                                                    
                                                    foreach($r['ListeCS'] as $v)
                                                    { 														
                                                        foreach($v as $z)
                                                        {
                                                            
                                                            foreach($z['attributs'] as $a)
                                                            {
                                                                
                                                                $a['!name'] == 'COD_TAB' ? $codeTab = $a['!value'] : ''; 
                                                                if(mb_strtoupper($a['!name']) == 'MEMO' || mb_strtoupper($a['!name']) == 'MEMOS' || mb_strtoupper($a['!name']) == 'MÉMO' || mb_strtoupper($a['!name']) == 'MÉMOS' || mb_strtoupper($a['!name']) == 'M')
                                                                {
                                                                    $codeTab = $a['!value'];
                                                                }

                                                            
                                                                $a['!name'] == 'FORMAT' ? $format = $a['!value'] : '';                                                     
                                                                $a['!name'] == 'NOM' ? $libelle = trad($a['!value']) : ''; 
                                                                $a['!name'] == 'NUM_FIX' ? $numfix = $a['!value'] : ''; 
                                                                $a['!name'] == 'VALEUR' ? $valeur = $a['!value'] : ''; 
                                                                $a['!name'] == 'TYPE' ? $type = SqlCs::rqGetInfoByType($a['!value'])->Trouve1()['CONTROLE'] : '';
                                                                $a['!name'] == 'TYPE' ? $typeValueArr = $a['!value'] : '';
                                                                $a['!name'] == 'NONDISPO' ? $isDispo = $a['!value'] : 0; 

                                                                if($a['!name'] == 'OBLIG') {
                                                                    if($a['OBLIG']==1 || $a['OBLIG']==true)
                                                                    {
                                                                        $CSOblig = 'true';
                                                                    }else
                                                                    {
                                                                        $CSOblig = 'false';
                                                                    } 
                                                                }

                                                                
                                                                
                                                            }
                                                                
                                                            if($isDispo == 0)
                                                            { 
                                                                $arr[$o] = 
                                                                [
                                                                    'CSNumFixe' => $numfix, 
                                                                    'CSValeur' => $valeur,
                                                                    'CSOblig' => $CSOblig,
                                                                    'CSCodeTable' => $type == 1 ? $typeValueArr : '',
                                                                    'CSFormat' => $format, 
                                                                    'CSLibelle' => $libelle, 
                                                                ]; 
                                                                
                                                                //array_push($final, $arr);
                                                                $o++; 
                                                            }
                                                            
                                                        }
                                                        
                                                    }
														
													$infoFrs = SqlPanier::rqGetInfoFourPanier($ligne)->Trouve1();
													
													$filtre =  [
													    'CODE_PAYS' => $infoFrs['CODE_PAYS'],
													    'CPOSTAL' => $infoFrs['CPOSTAL'],
													    'VILLE1' => $infoFrs['VILLE1'],
													    'ADR' => $infoFrs['ADR'],
													];
													if($r = sqlPanier::rqGetListeAdresseCdeFrs($ligne['COD_FOURN'], $filtre, null)->Trouve1())
													{
													    $ligneBloc[$i]['Fournisseur'] = sqlPanier::rqGetListeAdresseCdeFrs($ligne['COD_FOURN'], $filtre, null)->Trouve1();
													}
													elseif($r = sqlPanier::rqGetListeAdresseCdeFrs($ligne['COD_FOURN'], null, null)->Trouve1())
													{
													   $ligneBloc[$i]['Fournisseur'] = sqlPanier::rqGetListeAdresseCdeFrs($ligne['COD_FOURN'], null, null)->Trouve1();
													}
													
													$arrayTmp= []; 
                                                    
													foreach($arr as $v)
													{
                                                        $existe = 0;
                                                        foreach($arrayTmp as $arrCS)
                                                        {
                                                            if($arrCS['CSNumFixe'] == $v['CSNumFixe'])
                                                            {
                                                                $existe = 1;
                                                            }
                                                        }
                                                        if(!$existe)
                                                        {
                                                            $arrayTmp[] = $v; 
                                                        }
                                                  
													}
													
												
													$ligneBloc[$i]['ListChpSup']['ChpSup']= $arrayTmp;
                                                  
                                                    $i++;
                                                }
                                           
                                                $wsdl['Retour']['Ligne'] = & $ligneBloc;
                                            }
                                            
                                        }
                                        break;
                                    case 'DeleteLigneArticle': // Demande de suppression d'une ligne article
                                        $result = null;
                                        $id_lig = null;
                                        $valeur = null;
                                        
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'id_panier':
                                                        PanierEntete::setPanierCourant($childElement->textContent);
                                                        break;
                                                    case 'id_lig': // Numéro de la ligne de panier oxa_users_panier_ligne.id_lig
                                                        $id_lig = $childElement->textContent;
                                                        break;
                                                }
                                            }
                                            if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) {
                                                if (! is_null($id_lig) && is_numeric($id_lig)) {
                                                    PanierLigne::deleteLignePanier($_SESSION['id_panier'], $id_lig);
                                                }
                                            }
                                        }
                                        break;
                                    /**
                                     * Mise à jour de ligne
                                     */
                                    case 'UpdateLigneArticle': // Mise à jour ligne de panier
                                        $result = null;
                                        $id_lig = null;
                                        $valeur = null;
                                        $dteLiv = null;
                                        $codFourn = null;
                                        
                                        if ($child->hasChildNodes()) 
                                        {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'id_panier':
                                                        PanierEntete::setPanierCourant($childElement->textContent);
                                                        break;
                                                    case 'id_lig': // Numéro de la ligne de panier oxa_users_panier_ligne.id_lig
                                                        $id_lig = $childElement->textContent;
                                                        break;
                                                    case 'qte':
                                                        $valeur = $childElement->textContent;
                                                        break;
                                                    case 'COD_FOURN':
                                                        $codFourn = $childElement->textContent;
                                                        break;
                                                    case 'DTE_LIV':
                                                        $dteLiv = $childElement->textContent;
                                                        break;
                                                    case 'COD_ADR':
                                                        $codeAdresse = $childElement->textContent;
                                                        break;
                                                    case 'SI_CODE':
                                                        SqlPanier::MajPanierImput($_SESSION['id_user'], $_SESSION['id_panier'], $id_lig, 'SI_CODE', $childElement->textContent)->ExecuteSql();                                                        
                                                        break;
                                                    case 'CG_CODE':
                                                        SqlPanier::MajPanierImput($_SESSION['id_user'], $_SESSION['id_panier'], $id_lig, 'CG_CODE', $childElement->textContent)->ExecuteSql();       
                                                        break;
                                                    case 'CDC_CODE':
                                                        SqlPanier::MajPanierImput($_SESSION['id_user'], $_SESSION['id_panier'], $id_lig, 'CDC_CODE', $childElement->textContent)->ExecuteSql();       
                                                        break;
                                                    case 'SCA_CODE':
                                                        SqlPanier::MajPanierImput($_SESSION['id_user'], $_SESSION['id_panier'], $id_lig, 'SCA_CODE', $childElement->textContent)->ExecuteSql();       
                                                        break;
                                                    case 'ListChpSup':
                                                        $PanierEntete = new PanierEntete();
                                                        $PanierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);

                                                        if ($PanierEntete->isPanierModifDocPourSignature()) {
                                                            $origine = explode('|', $PanierEntete->getORIGINE());
                                                            
                                                            if (TypeSuivi::CDE == $origine[1])
                                                                $table_cs = 'CA_ENTET';
                                                            elseif (TypeSuivi::DA == $origine[1])
                                                                $table_cs = 'DA_ENTET';
                                                            
                                                        } else
                                                            $table_cs = 'DA_LIGNE';

                                                        $updateFinal = []; 
                                                        foreach($childElement->childNodes as $updateChilds)
                                                        {
                                                            $numFix = $valeurCSUpdate =  '';
                                                            $i=0;
                                                            
                                                            foreach($updateChilds->childNodes as $CSUpdate)
                                                            {
                                                                if($CSUpdate->nextSibling->tagName == 'CSValeur')
                                                                {
                                                                    if($CSUpdate->nextSibling->textContent == '')
                                                                    {
                                                                        $valeurCSUpdate = ' '; 
                                                                    }
                                                                    else
                                                                    {
                                                                        $valeurCSUpdate = $CSUpdate->nextSibling->textContent;
                                                                    }
                                                                }
                                                                if($CSUpdate->nextSibling->tagName == 'CSNumFixe')
                                                                {
                                                                    $numFix = $CSUpdate->nextSibling->textContent;
                                                                }
                                                            
                                                            
                                                                if($numFix != '' && $valeurCSUpdate != '')
                                                                {
                                                                    
                                                                    $array = 
                                                                    [
                                                                        'VALEUR' => $valeurCSUpdate, 
                                                                        'NUM_FIX' => $numFix, 
                                                                        'ID_LIGNE' =>$id_lig,
                                                                        'COD_TAB' => $table_cs, 
                                                                    ]; 
                                                                    $valeurCSUpdate = ''; $numFix = ''; 
                                                                    array_push($updateFinal, $array);                                                                       
                                                                    $i++;
                                                                    
                                                                }
                                                                
                                                            }

                                                        }
                                                        CS::UpdateCS($updateFinal);
                                                        break;
                                                    case 'ListCarComp':
                                                        $Pile = new PileSql(DB_OXAPROCDB);
														foreach($childElement->childNodes as $updateChilds)
														{
															$ccId = $ccValue =  '';
															foreach($updateChilds->childNodes as $CcUpdate)
															{
																if($CcUpdate->nextSibling->tagName == 'CC_VALUE')
																{
																	if($CcUpdate->nextSibling->textContent == '')
																	{
																		$ccValue = ' '; 
																	}
																	else
																	{
																		$ccValue = $CcUpdate->nextSibling->textContent;
																	}
																}
																if($CcUpdate->nextSibling->tagName == 'CC_ID')
																{
																	$ccId = $CcUpdate->nextSibling->textContent;
																}
															}
															if($ccId!=''){
																$Pile->AddRequeteSql(SqlCaracteristiquesCompl::rqUpdateValueCCDoc($ccValue, $ccId, 'PAN', $_SESSION['id_panier'], $id_lig, $_SESSION['id_user']));
															}
														}
														$Pile->Commit();                                                         
                                                        break;
                                                    default: // DES_COMP ....
                                                        if (in_array($childElement->tagName, $listeCleArticle)) {
                                                            $result[$childElement->tagName] = $childElement->textContent;
                                                        }
                                                        break;
                                                }
                                            }
                                            if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) 
                                            {
                                                if (! is_null($id_lig) && is_numeric($id_lig)) {
                                                    
                                                    if (! is_null($valeur) && ! is_float($valeur))
                                                        PanierLigne::updateQteLignePanier($_SESSION['id_panier'], $id_lig, $valeur);
                                                    
                                                    if (! is_null($result) && is_array($result))
                                                        foreach ($result as $key => $value) {
                                                            $sql = SqlPanierLigne::rqUpdateLigPanierChamp($_SESSION['id_user'], $_SESSION['id_panier'], $id_lig, $key, $value);
                                                            $sql->ExecuteSql();
                                                            // $connecteur->ExecSql($sql,'OXAPROCDB');
                                                        }
                                                }
                                                if (! is_null($dteLiv)) {
                                                    $critere = null;
                                                    if (! is_null($codFourn))
                                                        $critere['COD_FOURN'] = $codFourn;
                                                    
                                                    $sql = SqlPanier::rqGetLignePanierBlocFournisseur($_SESSION['id_panier'], $critere);
                                                    if ($ligneBloc = SqlPanier::rqGetLignePanierBlocFournisseur($_SESSION['id_panier'], $critere)->TrouveTous()) {
                                                        foreach ($ligneBloc as $index => & $ligne) {
                                                            $sql = SqlPanier::MajPanierImput($_SESSION['id_user'], $_SESSION['id_panier'], $ligne['id_lig'], 'DATELIVR', $dteLiv);
                                                            $sql->ExecuteSql();
                                                            // $connecteur->ExecSql($sql,'OXAPROCDB');
                                                        }
                                                    }
                                                }
                                                
                                                if($codeAdresse || $codeAdresse === '0' || $codeAdresse===0)
                                                {
                                                    $itemPanier['COD_FOURN'] = $codFourn;
                                                    
                                                    if ($all_four = GetFrsLigne($_SESSION['id_panier'], $itemPanier['COD_FOURN'])) {
                                                        foreach ($all_four as $num_interne_browse => & $critere) {
                                                            PanierLigne::controleBlocRegroupement($critere);
                                                            
                                                            $adr_frs = sqlPanier::rqGetListeAdresseCdeFrs($itemPanier['COD_FOURN'], null, $codeAdresse)->Trouve1();
                                                            SqlPanier::updateAdrCdeFrs($itemPanier['COD_FOURN'], $critere['CRITERE_REGROUP'], $adr_frs)->ExecuteSql();
                                                        
                                                            if (Param::InitialiseMailFaxFour()) {
                                                                SqlPanier::updateContactFrs($itemPanier['COD_FOURN'], $critere['CRITERE_REGROUP'], 0, $adr_frs)->ExecuteSql();
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        break;
                                    /**
                                     * Insert d'un article avec une ligne,
                                     */
                                    case 'InsertLigneArticle':
                                        // TODO MOBILITE CDE_COMPTOIR
                                        if ($child->hasChildNodes()) {
                                            $codeAdresse = null;
                                            $CdeComptoir = false;
                                            $cde_comptoir = false;
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'qte':
                                                        $valeur = $childElement->textContent;
                                                        break;
                                                    case 'COD_ACD':
                                                        $valeurACD = $childElement->textContent;
                                                        break;
                                                        ;
                                                    case 'id_panier':
                                                        PanierEntete::setPanierCourant($childElement->textContent);
                                                        break;
                                                    case 'COD_ADR': 
                                                        $codeAdresse = $childElement->textContent;
                                                        break;
                                                    case 'CdeComptoir': 
                                                        $CdeComptoir = BoolSql($childElement->textContent);
                                                        $array = ['CDE_COMPTOIR' => $CdeComptoir];
                                                        PanierEntete::updateEntetePanier($_SESSION['id_panier'], $array);
                                                        break;
                                                    default:
                                                        if (in_array($childElement->tagName, $listeCleArticle)) {
                                                            $itemPanier[$childElement->tagName] = $childElement->textContent;
                                                        }
                                                        break;
                                                }
                                            }
                                            // Controle imperatif que les données lié au panier soit mis en eouvre
                                            if (array_key_exists('id_user', $_SESSION) && is_numeric($_SESSION['id_user']) && array_key_exists('id_panier', $_SESSION) && is_numeric($_SESSION['id_panier'])) {
                                                $itemPanier['ARTASSOCIE'] = false;
                                                $CODE_MET = '';
                                                $CODE_SPE = '';
                                                $CODE_FM = '';
                                                
                                                if ($itemPanier['type_de_ligne'] == 1) {
                                                    if ($itemPanier['COD_ART'] == '') {} else {
                                                        $itemPanier['COD_GAM'] = ARTICLE::GEN;
                                                        
                                                        // DOSSIER
                                                        if ($result = & SqlArticle::rqIsArticleHaplus($itemPanier['COD_ART'])->Trouve1())
                                                            $itemPanier['COD_FAB'] = $result['CODEFAB'];
                                                        else
                                                            $itemPanier['COD_FAB'] = ARTICLE::GEN;
                                                    }
                                                }
                                                
                                                if (! is_null($valeurACD) || $valeurACD != '')
                                                    $itemPanier['COD_ACD'] = $valeurACD;

                                                $TmpSqlListe = null;
                                                $panierEntete = new PanierEntete();
                                                $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
                                                
                                                if(empty($_SESSION['Session_SocUsr']))
                                                {
                                                    $_SESSION['Session_SocUsr'] = $_SESSION['Session_SocUsrProfil'] = $panierEntete->getCODE_STE();
                                                }

                                                if ($itemPanier['mode'] == 'CdeComptoir') {
                                                    $cde_comptoir = true;
                                                }
                                                
                                                $centre = new Centre();
                                                $centre->getSiteStkFromCtrLiv($itemPanier['CTR_LIVR']);
                                                $siteStock = $centre->getSITE_STK();
                                                
                                                /* ticket mobilite 492 : probleme article site de stock */
                                                if ($itemPanier['COD_FOURN'] == '' && $itemPanier['CTR_LIVR'] != '' && $siteStock) {
                                                    $itemPanier['COD_FOURN'] = 'RESERVESTOCK';
                                                }
                                                
                                                $nbLigneCree = InsertQteArticlePanier($_SESSION['id_panier'], $itemPanier['type_de_ligne'], $itemPanier, $valeur, $CODE_MET, // $CODE_MET
                                                $CODE_SPE, // $CODE_SPE
                                                /*$panierEntete->getSI_CODE(), $panierEntete->getCG_CODE(), $panierEntete->getCDC_CODE(), $panierEntete->getSCA_CODE(),*/
                                                $itemPanier['SI'],'', $itemPanier['CDC'],$itemPanier['SCA'],'', $panierEntete->getLIV_CTR(), $panierEntete->getMOD_TRS(), $CODE_FM, 0, '', false, true, $TmpSqlListe,false,
                                                '', 0, '00000000', '00000000', null, $cde_comptoir);
                                                $wsdl['Retour']['Action'] = array(
                                                    '!NbLigneCree' => $nbLigneCree
                                                );
                                                
                                                if($codeAdresse || $codeAdresse === '0' || $codeAdresse===0)
                                                {
                                                    if ($all_four = GetFrsLigne($_SESSION['id_panier'], $itemPanier['COD_FOURN'])) {
                                                        foreach ($all_four as $num_interne_browse => & $critere) {
                                                            PanierLigne::controleBlocRegroupement($critere);
                                                            
                                                            $adr_frs = sqlPanier::rqGetListeAdresseCdeFrs($itemPanier['COD_FOURN'], null, $codeAdresse)->Trouve1();
                                                            SqlPanier::updateAdrCdeFrs($itemPanier['COD_FOURN'], $critere['CRITERE_REGROUP'], $adr_frs)->ExecuteSql();
                                                        
                                                            if (Param::InitialiseMailFaxFour()) {
                                                                SqlPanier::updateContactFrs($itemPanier['COD_FOURN'], $critere['CRITERE_REGROUP'], 0, $adr_frs)->ExecuteSql();
                                                            }
                                                        }
                                                    }                                              
                                                }
                                                
                                            }
                                        }
                                        
                                        break;
                                    case 'RayonDetail':
                                        $codeRayon = '';
                                        $rechercheArticle = new RechercheArticle();
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'Langue':
                                                        $_SESSION['Session_Langue'] = $childElement->textContent;
                                                        break;
                                                    case 'CtrEmetteur':
                                                        $rechercheArticle->setCentreEmetteur($childElement->textContent);
                                                        break;
                                                    case 'CtrLivraison':
                                                        $rechercheArticle->setCentreLivraison($childElement->textContent);
                                                        break;
                                                    
                                                    case 'CodeRayon':
                                                        $codeRayon = $childElement->textContent;
                                                        break;
                                                }
                                            }
                                        }
                                        
                                        $wsdl['DetailRayon'] = $rechercheArticle->buildPanelSousRayon($codeRayon);
                                        break;
                                    case 'RayonListe':
                                        if ($child->hasChildNodes()) {
                                            $rechercheArticle = new RechercheArticle();
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName) {
                                                    case 'Langue':
                                                        $_SESSION['Session_Langue'] = $childElement->textContent;
                                                        break;
                                                    case 'CtrEmetteur':
                                                        $rechercheArticle->setCentreEmetteur($childElement->textContent);
                                                        break;
                                                    case 'CtrLivraison':
                                                        $rechercheArticle->setCentreLivraison($childElement->textContent);
                                                        break;
                                                }
                                            }
                                            
                                            $rechercheArticle->buildXmlInitRechercheArticle(true);
                                            
                                            $wsdl['Retour'] = $rechercheArticle->getArrayXml();
                                        }
                                        break;
                                    /**
                                     * Recherche intuition
                                     */
                                    case 'Requete':
                                        $value = $child->getAttribute('value');
                                        $texte_recherche = $child->getAttribute('texte_recherche');
                                        $texte_recherche_ref = $child->getAttribute('texte_recherche_ref');
                                        
                                        $rechercheIntuition = new RechercheArticlesIntuition(); // Objet gérant la recherche
                                        
                                        $page = $child->getAttribute('filtre_page');
                                        if (is_null($page) || trim($page) == '')
                                            $page = 1;
                                        
                                        $mode_comment = $child->getAttribute('filtre_comment');
                                        if (is_null($mode_comment) || trim($mode_comment) == '')
                                            $mode_comment = 'TOUS';
                                        
                                        $filtre_combien = $child->getAttribute('filtre_combien');
                                        if (is_null($filtre_combien) || trim($filtre_combien) == '')
                                            $filtre_combien = 20;
                                        
                                        $rayon = $child->getAttribute('filtre_rayon');
                                        if (is_null($rayon) || trim($rayon) == '')
                                            $rayon = '';
                                        
                                        $liste_catalogues_art = array(); // Tableau qui contiendra les catalogues privés sélectionnés par l'utilisateur
                                        $liste_catalogues_sf = array(); // Tableau qui contiendra les catalogues sur sous-famille sélectionnés par l'utilisateur
                                        $liste_catalogues_gen = array(); // Tableau qui contiendra les catalogues d'articles génériques sélectionnés par l'utilisateur
                                        $liste_catalogues_panel = array(); // Tableau qui contiendra les filstres activés au niveau du panel de recherche
                                        $liste_caract_info_article = array(); // Tableau qui contiendra les caractéristiques informatives sélectionnées pas l'utilisateur
                                        $isSelectionCatalogue = false;
                                        
                                        $liste_cod_fournisseurs = array();
                                        $liste_sous_familles = array();
                                        $liste_gammes = array();
                                        $liste_fabricants = array();
                                        
                                        $filterStock = false;
                                        if ($child->hasChildNodes()) {
                                            foreach ($child->childNodes as $childElement) {
                                                switch ($childElement->tagName??'') {
                                                    case 'FiltrerSurStock':
                                                        $filterStock = BoolSql($childElement->textContent);
                                                        break;
                                                    case 'AuthLigneGenerique':
                                                        $_SESSION['GLOB_AuthLigneGenerique'] = BoolSql($childElement->textContent);
                                                        break;
                                                    case 'AuthLigneSFamille':
                                                        $_SESSION['GLOB_AuthLigneSFamille'] = BoolSql($childElement->textContent);
                                                        break;
                                                    case 'CtrEmetteur':
                                                        $rechercheIntuition->setCentreEmetteur($childElement->textContent);
                                                        break;
                                                    case 'CtrLivraison':
                                                        $rechercheIntuition->setCentreLivraison($childElement->textContent);
                                                        break;
                                                    case 'Langue':
                                                        $_SESSION['Session_Langue'] = $childElement->textContent;
                                                        break;
                                                    case 'ListeCatalogue':
                                                        if ($childElement->hasChildNodes())
                                                            foreach ($childElement->childNodes as $childSuite)
                                                                switch ($childSuite->tagName) {
                                                                    case 'Catalogue':
                                                                        $liste_catalogues_panel[] = $childSuite->textContent;
                                                                        break;
                                                                }
                                                        break;
                                                    case 'ListeFournisseur':
                                                        if ($childElement->hasChildNodes())
                                                            foreach ($childElement->childNodes as $childSuite)
                                                                switch ($childSuite->tagName) {
                                                                    case 'Fournisseur':
                                                                        $liste_cod_fournisseurs[] = $childSuite->textContent;
                                                                        break;
                                                                }
                                                        break;
                                                    case 'ListeSousFamille':
                                                        if ($childElement->hasChildNodes())
                                                            foreach ($childElement->childNodes as $childSuite)
                                                                switch ($childSuite->tagName) {
                                                                    case 'SousFamille':
                                                                        $liste_sous_familles[] = $childSuite->textContent;
                                                                        break;
                                                                }
                                                        
                                                        break;
                                                    case 'ListeGamme':
                                                        if ($childElement->hasChildNodes())
                                                            foreach ($childElement->childNodes as $childSuite)
                                                                switch ($childSuite->tagName) {
                                                                    case 'Gamme':
                                                                        $liste_gammes[] = $childSuite->textContent;
                                                                        break;
                                                                }
                                                        break;
                                                    case 'ListeFabricant':
                                                        if ($childElement->hasChildNodes())
                                                            foreach ($childElement->childNodes as $childSuite)
                                                                switch ($childSuite->tagName) {
                                                                    case 'Fabricant':
                                                                        $liste_fabricants[] = $childSuite->textContent;
                                                                        break;
                                                                }
                                                        break;
                                                }
                                            }
                                        }

                                        $rechercheArticle = new RechercheArticle();
                                        $liste_articles = $rechercheIntuition->rechercheArtCatalogue(true, $page, $filtre_combien, $texte_recherche, $rayon, $mode_comment, $type_tri??'', $liste_catalogues_art, $liste_catalogues_panel, $liste_caract_info_article, $liste_cod_fournisseurs, $liste_ref_fournisseur??'', $liste_familles??'', $liste_sous_familles, $liste_fabricants, $liste_gammes, $liste_prix??'', $liste_caract_select_article??'', '', $liste_type_article??'', $isSelectionCatalogue,false, $texte_recherche_ref, false, [], $filterStock);
                                        
                                        $_SESSION['CACHE_CATALOGUE'] = serializeSecure(array());
                                        //TODO OXAMPROC
                                        $wsdl['cat'] = array(
                                            'lignes' => $rechercheArticle->buildResultatRechercheArticleCatalogue('CAT', $liste_articles, $rechercheIntuition->getNbArtTrouves())
                                            // 'listePanels' => $element = RechercheArticle::buildPanelNavigation(getValue('typeRecherche'), $page, $filtre_combien, $rechercheIntuition->getNbArtTrouves()),
                                            //'panel' => $element = RechercheArticle::buildPanelNavigation(getValue('typeRecherche'), $page, $filtre_combien, $nombre_article_catalogue_trouve),
                                            //'navig' => $rechercheArticle->buildPanelAffinageRecherche($rechercheIntuition->getPanels())
                                        );
                                        
                                      
                                        //TODO OXAMPROC
                                        $rechercheIntuition->setClassContexte(null);
                                        if ($_SESSION['GLOB_AuthLigneGenerique'] && !$filterStock) {
                                            $liste_articles_generique = $rechercheIntuition->rechercheArtGenerique($page, $filtre_combien, $texte_recherche, $mode_comment, $type_tri, $rayon, $liste_catalogues_gen);
                                            
                                            $wsdl['gen'] = array(
                                                'lignes' => $rechercheArticle->buildResultatRechercheArticleGenerique($liste_articles_generique, $rechercheIntuition->getNbArtTrouves())
                                                //'panel' => RechercheArticle::buildPanelNavigation('generique', $page, $filtre_combien, $rechercheIntuition->getNbArtTrouves())
                                            );
                                        }
                                        //TODO OXAMPROC
                                        if ($_SESSION['GLOB_AuthLigneSFamille'] && !$filterStock) {
                                            $liste_articles_sous_famille = $rechercheIntuition->rechercheArtSousFamille($page, $filtre_combien, $texte_recherche, $mode_comment, $type_tri, $rayon, $liste_catalogues_sf);
                                            
                                            $wsdl['sfam'] = array(
                                                'lignes' => $rechercheArticle->buildResultatRechercheArtSousFamille($liste_articles_sous_famille, $rechercheIntuition->getNbArtTrouves())
                                                // 'listePanels' => RechercheArticle::buildPanelNavigation('sous_famille', $page, $filtre_combien, $rechercheIntuition->getNbArtTrouves())
                                                //'panel' => RechercheArticle::buildPanelNavigation('sous_famille', $page, $filtre_combien, $rechercheIntuition->getNbArtTrouves())
                                            );
                                        }
                                        $wsdl['listePanels']=    $rechercheArticle->buildPanelAffinageRecherche($rechercheIntuition->getPanels(), [], true);
                                      
                                        break;
                                    default:
                                        break;
                                }
                            }
                        if (! $sessionClose) {
                            if (array_key_exists('info_panier', $_SESSION) && ! is_null($_SESSION['info_panier']))
                                $wsdl['Retour']['UsagePanier'] = $_SESSION['info_panier'];
                            
                            $wsdl['Retour']['Cookie'] = array(
                                '!name' => session_name(),
                                '!value' => session_id(),
                                '!appel' => $child->tagName
                            );
                            // print_r($wsdl);exit;
                            // echo FluxXml::tradArrayInFluxXml($wsdl, null, true,0,true);exit;
                            $this->addToXMLOut(FluxXml::tradArrayInFluxXml($wsdl, null, true,0,false));
                        }
                        break;
                    default:
                        // methode inconnu
                        break;
                }
            }
        }
        
        return;
    }
}