<?php
use Entity\Model\Dilispec;

require_once 'application/class/class_ManageSession.php';

// Si l'utilisateur appel la popup des CS de l'entete
// contexte
if (is_null(getValue('contexte')))
    $context = '';
else {
    $context = '&contexte=' . urlencode(getValue('contexte'));
    if (getValue('contexte') == 'DOA') {
        $context .= '&ID_DOA=' . getValue('ID_DOA');
    }
}

if (getValue('action') == 'popup_cs_entete') {
    $hauteur = 650;
    $largeur = 700;

    
    if(getValue('typeChargement') == 'modification')
    {
        echo "window.open('gestion_cs_panier.php?action=open_popup_cs_entete&typeChargement=modification&num_da=".getValue('num_da')."&tokenCSRF=".getValue('tokenCSRF')."','popup_cs_entete',
        'width={$largeur}, height={$hauteur},typeChargement=modification');";
    }
    else
    {
        echo "window.open('gestion_cs_panier.php?action=open_popup_cs_entete&tokenCSRF=".getValue('tokenCSRF')."','popup_cs_entete','width={$largeur}, height={$hauteur}');";
    }


}// Si l'utilisateur appelle la popup sur la table des centre
elseif (getValue('action') == 'zoom_CS_TABLE_STD') {
    
    $form = getValue('form');
    $champ = getValue('champ');
    $type = getValue('TYPE');
    $height = 450;
    $url = 'browse_popup.php?itemSelected=CS_TABLE_STD&valueSelected=' . ($type) . '&LIBELLE=' . urlencode(getValue('LIBELLE')) . "&form_parent={$form}&champ={$champ}&prg_appel=" . NomFile(__FILE__) . $context;
    echo "OpenPopup(\"{$url}\",'popup_zoom_cs',450,$height,'locationbar=no');";
}// Si l'utilisateur appelle la popup sur une table non standard (table non présente dans haplus mais intégrée dans la table TS_DON)
elseif (getValue('action') == 'zoom_TS_DON') {
    
    $form = getValue('form');
    $champ = getValue('champ');
    $table_non_standard = getValue('TYPE');
    $height = 450;
    $url = 'browse_popup.php?itemSelected=TS_DON&valueSelected=' . urlencode($table_non_standard) . '&LIBELLE=' . urlencode(getValue('LIBELLE')) . "&form_parent={$form}&champ={$champ}&prg_appel=" . NomFile(__FILE__) . $context;
    echo "OpenPopup(\"{$url}\",'popup_zoom_cs',450,$height,'locationbar=no');";
}// Si l'utilisateur clique sur le bouton pour afficher les CS de l'entête du panier
elseif (getValue('action') == 'open_popup_cs_entete') {
    
    $contexteModificationCS = ''; // Contexte dans lequel les CS sont affichés
    $panierEntete = new PanierEntete();

    $panierEntete->setTypeChargement(getValue('typeChargement')); 
    // print_r($panierEntete->getlib_panier()); exit; 
    $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);

    // print_r($panierEntete); exit; 
    
    if (SqlCs::rqSelectCsPanier($_SESSION['id_panier'], 0)->Trouve1()) {} // Generation des CS d'entete que si pas déjà existants
else
        Panier::CreateLigneCSLeft($_SESSION['id_panier'], false, null);
    
        
    // S'il s'agit d'un panier provenant de la modification d'un document en signature
    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';
    }
    
    $panier = new Panier(); // Création de l'objet panier
    // print_r($panierEntete->getlib_panier()); exit;

    $panierEntete->setTypeChargement(getValue('typeChargement')); 

    $panier->initListeCS(null, 'DA_ENTET', 0, 0, 'gestion_cs_panier.php', null, 'form_cs_entete_panier', true, $contexteModificationCS, null , null, getValue('typeChargement'), getValue('num_da'));
    $array = $panier->getListe_cs();
    
    $fichier_xsl = 'application/xsl/liste_cs_entete_panier.xsl';
    
    if ($_SESSION['Session_NumClient'] == '13') {
        $csSpecActif = (Sqlcs::getCsPanierSEM($panierEntete->getCODE_STE())->Trouve1()['VALEUR']??'') == 'O'? true:false;      
        
        if ($csSpecActif) {
            $fichier_xsl = 'application/xsl/liste_cs_spec_SEM.xsl';
        }
    }
    
    $obj_xml = new GenXslt(true);
    
    $array['popup_title'] = & trad('Liste des CS de l\'entête du panier');
    echo $obj_xml->XslHtml($fichier_xsl, $array);
}// Si l'utilisateur quitte un champ soumis à un contrôle alors on recherche le libéllé pour l'afficher
elseif ('SelectValueCS' == getValue('action')) {
    
    $object = getValue('OBJECT');
    if ($object == 'ID_ELEM') {
        $id_ligne = null;
        $valeurCS = getValue($object);
    } else {
        $champ_modifie = getValueCS('champ');
        $champ_modifie = explode('_', $champ_modifie);
        $id_ligne = $champ_modifie[1]; // On définit le préfixe commun à tous les champs que l'on va récupéré
        $num_fix = $champ_modifie[2];
        $prefix_liste_attributs = "CS_{$id_ligne}_{$num_fix}_";
        foreach ($_POST as $attributs => & $value) // Pour chaque attribut des CS
{
            
            $value = stripslashes(trim($value)); // Suppression des espaces inutiles et des slashes ajoutés dans le POST
            
            if (strpos($attributs, $prefix_liste_attributs) === 0) // Si le nom de l'attribut comporte le prefix recherché
{
                $nom_attribut = mb_substr($attributs, mb_strlen($prefix_liste_attributs));
                $array[$nom_attribut] = $value; // Alors on l'enregistre
            }
        }
        $valeurCS = $array['VALEUR'];
    }
    
    $arrayCS = $array??array();
    $CS = new CS($arrayCS); // On crée un objet CS
    $controleCS = getValue('controle');
    $typeCS = getValue('type');
    if ($controleCS === 'zoom_TS_DON') {

        if ($id_ligne) {
            $societe = SqlCs::getSocPanierByLigne($id_ligne)->Trouve1()['CODE_STE']??'';
        }

        $result_ctrl = CS::ControlValueTS($typeCS, $valeurCS, $societe);
    } else {
        if ('' != $typeCS) {
            $CS->setTYPE($typeCS);
            $CS->setCONTROLE(true);
            $CS->setCTRL_STD(true);
        }
        $result_ctrl = $CS->ControlValueCS();
    }
    // TODO 36513
    // Si la valeur saisie/sélectionnée par l'utilisateur existe alors on affiche le libéllé correspondant
    if (1 == $result_ctrl[0]) {
        if (! is_null($id_ligne))
            if (count($result_ctrl) > 1)
            {
                Affichage::innerHTMLPointeur("{$prefix_liste_attributs}LIBELLE_VALUE", $result_ctrl[1]['Libelle']);
                
            }
            else
                Affichage::innerHTML("{$prefix_liste_attributs}LIBELLE_VALUE", '');
    }    // Sinon on affiche un message d'avertissement à l'utilisateur et on efface la donnée
    else {
        if (is_null($id_ligne)) {
            Affichage::messageJS(CS::alertUser($result_ctrl[1]));
        } else {
            Affichage::messageJS(CS::alertUser($result_ctrl[1], getValue($prefix_liste_attributs . 'NOM'))); // Message d'avertissement pour l'utilisateur
            Affichage::setValue("{$prefix_liste_attributs}VALEUR", '');
            Affichage::innerHTML("{$prefix_liste_attributs}LIBELLE_VALUE", '');
        }
    }
}// Si l'utilisateur clique sur le bouton Enregistrer les CS de l'entete du panier
elseif (getValue('action') == 'enregistrerCSEntete') {
    
    $panierEntete = new PanierEntete();
    $panierEntete->getEntetePanier($_SESSION['id_panier'], $_SESSION['id_user']);
    
    // S'il s'agit d'un panier provenant de la modification d'un document en signature
    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';
    
    $result = Panier::getInfoCSCtrlCsUpdateCS($table_cs, $_POST, 0, 0);

    
    if ($result) // Si l'enregsitrement SQL s'est correctement déroulé
{
        //31352
        //Affichage::messageJS(trad('Les champs supplémentaires ont été enregistrés')); // On le confirme à l'utilisateur
        echo 'window.closePopup();';
    } else
        // En cas d'erreur lors de l'enregistrement
        Affichage::messageJS(trad('Une erreur est survenue lors de l\'enregistrement, veuillez recommencer'));
}

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