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

/**
 * Affichage de la liste des secteurs d'imputation
 */

// si on est en mode HTML, on charge l'entête.
$isHttp = (GetValue('THROUGH') == 'TRUE');

$fichier_xsl = 'application/xsl/planning.xsl';
$obj_xml = new GenXslt();

$array['fenetre'] = array(
    '!form_parent' => getValue('form_parent'),
    '!champ' => getValue('champ'),
    '!num_lig' => getValue('num_lig'),
    '!id_bloc' => getValue('id_bloc'),
    '!idpopup' => getValue('idpopup'),
    '!QteConditionnement' => getValue('QteConditionnement'),
    '!ValeurUniteDAArticle' => getValue('ValeurUniteDAArticle'),
);
$champ = getValue('champ');
$num_lig = getValue('num_lig');
$detail = getValue('detail');
$ReceptionAuto = getValue('ReceptionAuto');
$CodeArticle = getValue('CodeArticle');
$QteDemande = getValue('QteDemande');
$CodeUnit = getValue('CodeUnit');
$DteDebContrat = getValue('DteDebContrat');
$DteFinContrat = getValue('DteFinContrat');
$Periodicite = getValue('Periodicite');
$ModeCalculDelai = getValue('ModeCalculDelai');
$JourApplication = getValue('JourApplication');
$affichageDateVisu = stripos(getValue('form_parent'), 'suiviLigneFormName_') === 0 ? false : true;

if ($isHttp) {
    switch (GetValue('MODE')) {
        // Mode appserveur
        case 'httpreq': // mode reponse sur les updates
            $action = GetValue('action');
            $object = GetValue('OBJECT');
            $numform = GetValue('formjs');
            $form_parent = GetValue('form_parent');
            $champ = GetValue('champ');
            $valeur = trim(getValue($object));
            
            if (stripos($object, 'date_') === 0) {
                $date_OK = convertDateUserToSql($valeur);
                if(!verificationDate($date_OK)) {
                    $message = cnv_to_javascript(trad("La saisie de la date est incohérente.") . "\n");           
                    echo 'alert("', $message, '");';
                    echo 'if(document.getElementById("'.$object.'")) 
                        {
                            document.getElementById("'.$object.'").value = "";
                            
                        }';
                    $connecteur->disconnect();
                    exit();
                }
                $connecteur->disconnect();
                exit();
            }

            switch ($action) {
                case 'addLine':
                    
                    $lastId = (int)getValue('lastId');
                    $nextId= $lastId+1;
                    
                    
                    $add =  "<tr class='FdStyle9' id='".$nextId."'><td width='45%' nowrap='' align='left'><table class='tablespacepadd0' border='0'><tbody><tr style='border:0px;'><td><div class='dib withicon'><table class='tablespacepadd0 NF16Table' border='0'><tbody><tr><td style='overflow:visible;'><input type='text' class='NF16Input' id='date_".$nextId."' style='width:auto !important;' name='date_".$nextId."' value='' size='20' maxlength='10' onfocus='SelObj(this);'></td><td style='max-width:0px;overflow:visible;'><div style='position:relative;left:-32px;' class='img16 icon img_calendrier_16x16' onclick='CL.show(null,document.frm_recherche.date_".$nextId.",null,-80);'id='date_".$nextId."_icon'></div></td></tr></tbody></table></div></td></tr></tbody></table></td><td width='45%' align='left'><table class='tablespacepadd0' border='0'><tbody><tr style='border:0px;'><td><div class='dib '><table class='tablespacepadd0 NF16Table' border='0'><tbody><tr><td style='overflow:visible;'><input type='text' class='NF16Input quantite' id='quantite_".$nextId."' style='width:auto !important;' name='quantite_".$nextId."' value='' size='20' maxlength='10' onfocus='SelObj(this);' onchange='checkQuantitePlanning(this);'></td></tr></tbody></table></div></td></tr></tbody></table></td><td width='10%' align='left'><input type='hidden' name='lineSelected_".$nextId."' id='lineSelected_".$nextId."' value='1'><div class='img16 img_picto_supprimer_16x16 supprimer' title='supprimer' onclick='supprLignePlanning(".$nextId.");'></div></td></tr>";

                    echo 'document.getElementById("planning").innerHTML += "'.$add.'";
                    document.getElementById("date_'.$nextId.'").setAttribute( "onchange", "if (checkdate(this)) {Traite(\'planning.php\',this);}");
                    document.getElementById("lastId").value = "'.($nextId).'";
                    document.getElementById("countPlanning").value = parseInt(document.getElementById("countPlanning").value)+1; 
                    displayBtnSupprimer(); ';
                    for($i=0; $i<=$lastId;$i++)
                    {
                        echo 'if(document.getElementById("date_'.$i.'")) 
                        {
                            document.getElementById("date_'.$i.'").value = "'.getValue('date_'.$i).'";
                            document.getElementById("quantite_'.$i.'").value = "'.getValue('quantite_'.$i).'";
                            
                        }';
                    }


                    $connecteur->disconnect();
                    exit();
                    break;
                
//                 
                
                case 'save_planning':                    
                    $okNbLigne = false;
                    $ok_qte = false;
                    $ok_date = true;
                    $dateVide = false;
                    $quantiteCumule = 0;
                    $message = '';
                    $messageNonBloquant = '';
                    $nbLigne = 0;
                    
                    $qte = (float)$_POST['qte'];
                    
                    $listeNumDate = array();
                    $dateDebContrat = convertDateUserToSql($_POST['dateDebContrat']);
                    $datefinContrat = convertDateUserToSql($_POST['dateFinContrat']);

                    foreach($_POST as $key => $value){
                        if(strpos($key, 'date_') === 0){
                            $tblKey = explode('_', $key);
                            if(getValue('lineSelected_'.$tblKey[1])=='1'){
                                $listeNumDate[] = $tblKey[1];
                                $dateLigne = convertDateUserToSql($value);
                                if ($dateLigne == '00000000' || $dateLigne == '') {
                                    $dateVide = true;
                                } elseif($_POST['ReceptionAuto']=='true' && ($dateLigne< $dateDebContrat || $datefinContrat<$dateLigne)){
                                    $message .= cnv_to_javascript(strBuild(Trad('La date @3@ n\'est pas comprise entre @1@ et @2@.'),$_POST['dateDebContrat'],$_POST['dateFinContrat'], $value) . "\n");
                                }
                                $okNbLigne = true;    
                            }                        
                        }
                        if(strpos($key, 'quantite_') === 0){
                            $tblKey = explode('_', $key);
                            if(getValue('lineSelected_'.$tblKey[1])=='1'){
                                if($value==''){
                                    $value = 0;
                                }
                                $quantiteCumule += str_replace(' ','',$value);
                                if($value<0){    
                                    $message .= cnv_to_javascript(strBuild(trad("Il ne peut y avoir de quantité négative (@1@)."), $value) . "\n");
                                }
                                elseif($qte!=0 && $value==0){    
                                    $message .= cnv_to_javascript(trad("Il ne peut y avoir de quantité égale à 0.") . "\n");
                                }
                                
                                if(getValue('QteConditionnement')!=0 && !ctype_digit($value * getValue('ValeurUniteDAArticle')/ getValue('QteConditionnement'))){
                                    $messageNonBloquant .= cnv_to_javascript(strBuild(Trad('La quantité @1@ @2@ n\'est pas un multiple de la quantité de conditionnement @3@  @4@.'),$value,( 'DA_LIGNE.UNIT' ),getValue('QteConditionnement'), 'ARTICLE.UNIT') . "\n");
                                }
                                $nbLigne++;
                            }
                        }
                    }
                    
                    if(!$okNbLigne){
                        $message .= cnv_to_javascript(trad("Une ligne de planning est obligatoire") . "\n");
                    }
                    if($dateVide){
                        $message .= cnv_to_javascript(trad("Chaque ligne doit contenir une date") . "\n");
                    }
                 
                    if($quantiteCumule!=$qte){
                        $message .= cnv_to_javascript(strBuild(trad("La quantité cumulée doit être égale à @1@"), $qte) . "\n");
                    }
                    if($qte==0 && $nbLigne>1){
                        $message .= cnv_to_javascript(trad("Il ne peut y avoir qu'une ligne de planning pour cette ligne de commande ayant une quantité à 0.") . "\n");
                    }

                    if ($message!='') {
                        // Affichage::messageJs($message);exit;
                        echo 'alert("', $message, '");';
                        $connecteur->disconnect();
                        exit();
                    }
                    // elseif($messageNonBloquant!=''){
                    //     echo 'if (confirm('.$messageNonBloquant.'"Souhaitez-vous valider le planning ?")) {document.frm_recherche.action.value = "save_confirmation"; Traite("planning.php",document.frm_recherche.action);}';
                    //     $connecteur->disconnect();
                    //     exit();
                    // }

                    $repjs = '';
                    if(getValue('ReceptionAuto')=='false' && count($listeNumDate)>1 && $affichageDateVisu){
                        // S'il existe plusieurs ligne de planning pour les réceptions non automatique, on supprime la valeur du délai de livraison
                        $nameChamp = 'delaiLivraison_'.$num_lig;
                        $repjs .= "parent.document.{$form_parent}.{$nameChamp}.value = '';";
                    }

                    $nouvelleListePlanning = '';
                    foreach($listeNumDate as $numDate){
                        $nouvelleListePlanning .= convertDateUserToSql(getValue('date_'.$numDate)).':'.getValue('quantite_'.$numDate).';';
                    }
                    $nouvelleListePlanning = substr($nouvelleListePlanning, 0, -1);
                    $repjs .= "parent.document.{$form_parent}.{$champ}.value = '{$nouvelleListePlanning}';" . 'window.closePopup();';
                    
                    echo $repjs;
                    $connecteur->disconnect();
                    exit();
                    break;
                // case 'save_confirmation':
                //     $repjs = '';
                //     if($_POST['ReceptionAuto']=='false' && count($listeNumDate)>1){
                //         // S'il existe plusieurs ligne de planning pour les réceptions non automatique, on supprime la valeur du délai de livraison
                //         $nameChamp = 'delaiLivraison_'.$num_lig;
                //         $repjs .= "me().opener.document.{$form_parent}.{$nameChamp}.value = '';";
                //     }

                //     $nouvelleListePlanning = '';
                //     foreach($listeNumDate as $numDate){
                //         $nouvelleListePlanning .= convertDateUserToSql($_POST['date_'.$numDate]).':'.$_POST['quantite_'.$numDate].';';
                //     }
                //     $nouvelleListePlanning = substr($nouvelleListePlanning, 0, -1);
                //     $repjs .= "me().opener.document.{$form_parent}.{$champ}.value = '{$nouvelleListePlanning}';" . 'window.closePopup();';
                    
                //     echo $repjs;
                //     $connecteur->disconnect();
                //     exit();
                //     break;
            }
            $connecteur->disconnect();
            exit();
            break;
        default:
            break;
    }
    $connecteur->disconnect();
    exit();
} else {
    $obj_xml = new GenXslt(true);
    
    $article = SqlPanier::rqGetOneArticle($CodeArticle)->Trouve1();
    
    $listePeriodicite = array(
        'M' => 'Mensuelle',
        'T' => 'Trimestrielle',
        'S' => 'Semestrielle',
        'A' => 'Annuelle'
    );
    $listePeriode = array(
        '' => 'Fin',
        'F' => 'Fin',
        'D' => 'Début',
    );
    $array['lignePanier'] = array(
        '!affichageDateVisu' => $affichageDateVisu,
        '!qte' => $QteDemande,
        '!unite' => $CodeUnit,
        '!uniteArticle' => $article['UNIT']??'',
        'ReceptionAuto' => array(
            '!value' => $ReceptionAuto,
            '!valueClass' => 'recepAuto',
            '!valueTexte' => ($ReceptionAuto=='true'?Trad('Oui'):Trad('Non')),
            '!texte' => Trad('Réception automatique ? '),
        ),
        'DATEDEBCONT' => array(
            '!value' => convertDateSqlToFr($DteDebContrat),
            '!texte' => Trad('Dates contrat : '),
        ),
        'DATEFINCONT' => array(
            '!value' => convertDateSqlToFr($DteFinContrat),
            '!texte' => Trad(' au '),
        ),
        'PER_REC_AUTO' => array(
            '!value' => Trad($listePeriodicite[$Periodicite] ?? ''),
            '!texte' => Trad('Périodicité : '),
        ),
        'FIN_DEB_PER' => array(
            '!value' => Trad($listePeriode[$ModeCalculDelai]),
            '!texte' => Trad('Période : '),
        ),
        'OUPL_RECEPAUTO_JOUR' => array(
            '!value' => $JourApplication,
            '!texte' => Trad('Jour application : '),
        ),
    );

    $tblDetail = explode(';', $detail);
    $listePlanning = array();
    $array['lastId'] = 0;
    $qteCumule = 0;
    $conteur = 0;
    foreach($tblDetail as $key => $lignePlanning){
        if($lignePlanning!=''){
            $tblLignePlanning = explode(':', $lignePlanning);
            $qteCumule = $qteCumule + str_replace(' ','',$tblLignePlanning[1]);
            $listePlanning[] = array(
                '!id' => $key,
                'date' => array(
                    '!value' => convertDateSqlToFr($tblLignePlanning[0]),
                    '!name' => 'date_'.$key,
                    '!id' => 'date_'.$key,
                    '!onchange' => "if (checkdate(this)) {Traite('planning.php',this);};",
                    '!onfocus' => 'SelObj(this);',
                    '!onclick' => "CL.show(null,document.frm_recherche.date_{$key},null,-80);",
                ),
                'quantite' => array(
                    '!value' => $tblLignePlanning[1],
                    '!name' => 'quantite_'.$key,
                    '!id' => 'quantite_'.$key,
                    '!onfocus' => 'SelObj(this);',
                    '!onchange' => "checkQuantitePlanning(this);",
                ),
                'delete' => array(
                    '!flg_delete' => "supprLignePlanning('{$key}');",
                ),
                'lineSelected' => array(
                    '!name' => 'lineSelected_'.$key,
                    '!id' => 'lineSelected_'.$key,
                    '!value' => '1'
                )
            );
            $lastId = $key;
            $conteur++;
        }
    }

    $array['listePlanning'] = $listePlanning;
    
    $array['qteRestante'] = array(
        '!value' => number_format(((float)$QteDemande - $qteCumule), 3),
        '!texte' => Trad('Reste à cadencer : '),
    );
    $array['add']['!name'] = 'lastId';
    $array['add']['!lastId'] = $lastId;
    $array['add']['!conteur'] = $conteur;
    $array['add']['!onclick'] = "document.frm_recherche.action.value = 'addLigne'; Traite('planning.php?action=addLine', document.frm_recherche.action, 'addLine', document.frm_recherche.idpopup.value);";
    
    $array['save']['!name'] = 'save_planning';
    $array['save']['!onclick'] = "document.frm_recherche.action.value = 'save_planning'; Traite('planning.php',document.frm_recherche.action);";

    $array['popup_title'] = trad('Planning');
    echo $obj_xml->XslHtml($fichier_xsl, $array);
}
$connecteur->disconnect();
exit();