<?php
require_once 'application/class/class_ManageSession.php';

// Tableau global utilisé pour les traductions : celui-ci doit être appelé en premier

/*
 *
 * Programme permettant la gestion de la suppression ou la transformation d'un panier
 * modele ou brouillon en panier en cours
 *
 */

if (($_SESSION['Session_SocUsr'] != $_SESSION['Tampon_SocUsr']) && ($_SESSION['Tampon_SocUsr'] != '') && ! (is_null($_SESSION['Tampon_SocUsr']))) {
    // on réinitialise la variable $_SESSION['Session_SocUsr'] avec la valeur
    $_SESSION['Session_SocUsr'] = $_SESSION['Tampon_SocUsr'];
    
    // On initialise toutes les variables de sessions qui découlent de ce choix de société
    utilisateur::setAllFieldsSessionUser(utilisateur::getAllValueInitSessionByUserAndSociete($_SESSION['Session_Login'], $_SESSION['Session_SocUsr']));
    
    // Dossier 26636
    echo Menu::refreshMenuUtilisateur();
}

$js_resp = '';

switch (getValue('type')) {
 
    // LES 2 TEST SUIVANTS VONT ENSEMBLE
    case 'test_panier_regul':
        
        $flg_existe = CountLigne(0) > 0 ? true : false;
        $js_resp .= 'glob_oxalys.flg_exite=' . (($flg_existe) ? 'true' : 'false') . ';';
        
        if ($flg_existe)
            break;
    case 'use_panier_regul':
        
        $codfrs = getValue('codfrs');
        $datePeriode = getValue('datePeriode');
        $id_panier_modele = getValue('panier');
        
        // Prise en compte du panier modele vers le panier en cours
        if (! is_numeric($id_panier_modele) || CopiePanier($id_panier_modele, 'SYS', $flg_del_entry, true)) {
            $_SESSION['sys_panier'] = 'SYS';
            $_SESSION['id_panier'] = 0;
            
            // Mise a jour du panier avec le champ system REGUL|codefournisseur
            $champ_specTmp = "REGUL|codfrs=".$codfrs.($datePeriode?"|dateperiode=".$datePeriode : '');
            $champ_spec = "REGUL|codfrs=".$codfrs;
            
            /*
             * ECA Dossier N°11852
             * On injecte dans le panier de régulation les valeurs de l'entête issu du panier modèlele sélectionné par l'utilisateur
             */
            
            if (is_numeric($id_panier_modele)) {
                $array_valeur_entete = SqlPanier::rqGetPanier($id_panier_modele, $_SESSION['id_user'])->Trouve1();
                PanierEntete::updateEntetePanier($_SESSION['id_panier'], $array_valeur_entete);
            }
            
            /*
             *
             */ 
            
            // initialisation complète de l'entete
            $panierEntete = new PanierEntete();
            $panierEntete->initEntetePanier(0, true);
            
            // MAJ des champs pour la REGUL
            SqlPanier::MajFieldPanier($_SESSION['id_user'], $_SESSION['id_panier'], 'CHIF_EXEC', 'E', 'char')->ExecuteSql();
            SqlPanier::MajFieldPanier($_SESSION['id_user'], $_SESSION['id_panier'], 'CHIF_EXEC_LOCK', 1, 'int')->ExecuteSql();
            SqlPanier::MajFieldPanier($_SESSION['id_user'], $_SESSION['id_panier'], 'CHPSPECCLT', $champ_specTmp, 'char')->ExecuteSql();
            SqlPanier::MajFieldPanier($_SESSION['id_user'], $_SESSION['id_panier'], 'lib_panier', Trad('REGUL') . '-' . Trad('FRS:') . ' ' . $codfrs, 'char')->ExecuteSql();
            SqlPanier::MajFieldPanier($_SESSION['id_user'], $_SESSION['id_panier'], 'IS_INITIALIZED', 1, 'int')->ExecuteSql();
            
            // Comme l'on peut avoir dans ce panier des lignes de ce fournisseur et des lignes sans fournisseur
            // Il faut donc que toutes les lignes sans code fournisseur soit update a la valeur du code fournisseur
            
            if ($result = SqlFrs::rqGetRecordFournis($codfrs)->Trouve1()) {
                $dt_liv = date('Ymd');
                SqlPanier::rqMajCodFrsRegul($_SESSION['id_user'], $_SESSION['id_panier'], $dt_liv, $result)->ExecuteSql();
            }
            
            if ($flg_del_entry) {
                require_once 'application/controllers/menu.php';
                $obj_xml = new GenXslt();
                $fichier_xsl = 'application/xsl/menu_panier.xsl';
                $array_menu = array();
                $obj_xml->XslHtml($fichier_xsl, $array_menu);
                $obj_xml->echoHtml('gest_panier');
            }
            
            // Vérification de la cohérence du panier
            ValideIntPanier('use_panier_regul');
        }
        break;
    
    // LES 2 TEST SUIVANTS VONT ENSEMBLE
    // Function de test panier pour savoir si l'on doit poser la question d'existence ou pas
    case 'test_panier':
        
        $flg_existe = CountLigne(0) > 0 ? true : false;
        
        $js_resp .= 'glob_oxalys.flg_exite=' . (($flg_existe) ? 'true' : 'false') . ';';
        
        if ($flg_existe)
            break;
    
    // Function pour le mouvement d'un panier vers le panier en cours
    case 'use_panier':
        
        $nom_formulaire = '';
        
        // Si la panier à charger dans le panier en cours est un panier brouillon et que ce dernier a été réalisé sur une société différente de la société de la session utilisteur
        // Alors on bloque le chargement en indiquant à l'utilisateur que le chargement du panier brouillon ne peut se faire que sur la même société.
        if ('SYS' == getValue('method')) // On teste si le panier à charger est un panier modèle ou brouillon
        {
            // On récupère l'identifiant du panier à charger dans le panier en cours
            $id_panier = getValue('rowid');
            $PanierEntete = new PanierEntete();
            $PanierEntete->getEntetePanier($id_panier, $_SESSION['id_user']);
            
            if (0 == $PanierEntete->getIS_PANIER_MODELE() && $PanierEntete->getCODE_STE() != $_SESSION['Session_SocUsr']) // S'il s'agit d'un panier brouillon et que les sociétés sont différentes
            {
                $message = strBuild(trad('Vous ne pouvez pas charger ce panier brouillon car il est lié à la société : @1@ ( @2@ ) qui est différente de la société de la session en cours : @3@ ( @4@ )'), $PanierEntete->getCODE_STE(), Societe::getLibelleSociete($PanierEntete->getCODE_STE()), $_SESSION['Session_SocUsr'], Societe::getLibelleSociete($_SESSION['Session_SocUsr']));
                
                Affichage::messageJS($message);
                
                $connecteur->disconnect();
                exit();
            }
        } else {
            $id_panier = 0;
            $PanierEntete = new PanierEntete();
            $PanierEntete->getEntetePanier($id_panier, $_SESSION['id_user']);
            $nom_formulaire = getValue('rowid');
        }
        
        // Si l'utilisateur a paramétrer l'initialisation des axes d'imputation avec demande de confirmation
        if ('DEMANDER' == Param::getSessionInitImput() && is_null(getValue('initImputation')) && $PanierEntete->getCODE_STE() == $_SESSION['Session_SocUsr']) {
            // Alors on lui demande de confirmer cette réinitialisation, c'est le initImputation qui contiendra sa réponse
            echo "if(window.confirm('" . cnv_to_javascript(trad("Vous allez procéder à la réinitialisation des axes d'imputations ?")) . "'))
				  {CallUrl('info_panier.php?initImputation=1','type=use_panier&rowid={$id_panier}&method=" . getValue('method') . "');}
				  else{CallUrl('info_panier.php?initImputation=0','type=use_panier&rowid={$id_panier}&method=" . getValue('method') . "');}";
            
            $connecteur->disconnect();
            exit();
        }
        
        // On réalise le chargement du panier brouillon/modèle vers le panier en cours
        if (CopiePanier($id_panier, getValue('method'), $flg_del_entry, true, getValue('initImputation'), $nom_formulaire)) {
            $_SESSION['sys_panier'] = 'SYS';
            $_SESSION['id_panier'] = 0;
            
            if ($flg_del_entry) {
                require_once 'application/controllers/menu.php';
                
                $obj_xml = new GenXslt();
                $fichier_xsl = 'application/xsl/menu_panier.xsl';
                
                $obj_xml->XslHtml($fichier_xsl, $array_menu);
                
                $obj_xml->echoHtml('gest_panier');
            } else
                $PanierEntete->initEntetePanier($_SESSION['id_panier'], true);
            
            ValideIntPanier('use_panier');
        } else
            // On met à jour la quantité d'article et le montant global du panier
            Panier::updateMontantAndNbArticlePanier($_SESSION['id_panier']);
        
        break;
}

// Suppression des variables temporaires liés aux articles
foreach ($_SESSION as $index => & $valeur_session)
    if (stripos($index, 'TmpArticle_') === 0) {
        $valeur_session = '';
    }

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