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

// Lorsque l'utilisateur appelle la page de notation de la commande
if ('accueil' == getValue('action')) {
    $NotationCde = new NotationCde(getValue('no_cde'));
    $ObjXSLT = new GenXslt(true);
    
    // On affiche la liste des thèmes, critère et notation de la commande
    // Zone globale est l'identifiant du div la commande affichée => Celui ci sera raffraichi par la suite
    // Zone action est l'identifiant du div contenant les actions possibles sur la commande affichée => Celui ci sera raffraichi par la suite
    echo $ObjXSLT->XslHtml('application/xsl/gestion_notation_commande.xsl', $NotationCde->buildXmlNotationCde(getValue('mode_acces'), getValue('zone_globale'), getValue('zone_actions')));
}// Lorsque l'utilisateur enregistre la notation d'une commande
elseif ('enregistrer' == getValue('action')) {
    $ind_theme = 0; // Initialisation de l'indice du tableau contenant les thèmes à noter
    
    $liste_notation['NumCde'] = getValue('no_cde'); // Récupération du numéro de commande à noter
    
    foreach (getValueAll() as $key => $value)
        if (false !== stripos($key, '|NOT')) // Pour chaque champ notation
{
            $liste_champs = explode('|', $key);
            $theme = getValue($liste_champs[0]);
            
            $liste_notation['Theme'][$ind_theme]['CodeTheme'] = $theme; // On récupère le code du theme sur lequel porte la notation
            
            $ind_critere = 0; // Initialisation de l'indice du tableau contenant les critères à noter du thème
            
            foreach (getValueAll() as $key_critere => & $value_critere) // Pour chaque critère à noter du thème
{
                if (false !== stripos($key_critere, $liste_champs[0] . '|CRIT') && false === stripos($key_critere, '|NOT') && false === stripos($key_critere, '|COM')) {
                    $liste_notation['Theme'][$ind_theme]['Critere'][$ind_critere]['CodeCritere'] = $value_critere; // On enregistre le code du critère
                    $liste_notation['Theme'][$ind_theme]['Critere'][$ind_critere]['Note'] = getValue($key_critere . '|NOT'); // La notation du critère
                    $liste_notation['Theme'][$ind_theme]['Critere'][$ind_critere]['Commentaire'] = trim(getValue($key_critere . '|COM')); // Le commentaire associé à la notation
                    
                    if (mb_strlen(trim(getValue($key_critere . '|COM'))) > 3000) // Si le commentaire dépasse 3000 caractères alors on bloque l'enregistrement et on informe l'utilisateur
{
                        Affichage::messageJS(strBuild(trad('Notation : @1@'), getValue($key_critere . '|NOT')) . "\r\n" . trad("Le commentaire est limité à 3000 caractères, veuillez vérifier"));
                        $connecteur->disconnect();
                        exit();
                    }
                    
                    $ind_critere ++;
                }
            }
            
            $ind_theme ++;
        }
    
    // On appelle le wsdl d'enregistrement de la notation de la commande
    $resultat_enregistrement = NotationCde::callWsdlEnregistrerNotationCde($liste_notation);
    
    // Si l'enregistrement se déroule correctement
    if ('O' == $resultat_enregistrement['Statut']) {
        // On met à jour le compteur de la notation
        $total = NotationCde::getNbCdeToRate($_SESSION['Session_Login']);
        Affichage::innerHTMLwithoutHTMLTr('nbCdeToRate', "({$total})", true);
        $_SESSION['NB_CDE_TO_RATE'] = $total;
        
        // On informe l'utilisateur que l'enregistrement est OK
        Affichage::messageJS(trad('La notation de la commande a été enregistrée'));
    }    // En cas d'erreur on affiche l'erreur rencontrée à l'utilisateur
    else
        Affichage::messageJS('une erreur est survenue : ' . $resultat_enregistrement['MsgErreur']);
    
    // On met à jour les actions possibles de notation sur la commande qui ont peut être changé suite à l'enregistrement de la notation
    $zone_globale = getValue('zone_globale');
    $zone_actions = getValue('zone_actions');
    
    $ActionsDoc = new ActionsDocument('CdeToRate', getValue('no_cde'), $zone_globale, $zone_actions);
    $Xslt = new GenXslt();
    $html = HttpReplacePointeur($Xslt->XslHtml('application/xsl/suivi_document.xsl', $ActionsDoc->getTabInfoForRefresh()));
    Affichage::innerHTMLwithoutHTMLTrPointeur($zone_actions, $html, true);
    
    // On met à jour la notation de la commande
    $no_cde = getValue('no_cde');
    $info_cde = SqlCde::getInfoOnEnteteCDE($no_cde)->Trouve1();
    Affichage::innerHTMLwithoutHTMLTr("note_{$liste_notation['NumCde']}", FormatageData::formatMontant($info_cde['NOTMOYEN']), true);
    
    // On ferme la popup de notation de la commande
    echo 'window.closePopup();';
}// Lorsque l'utilisateur valide la notation d'une commande
elseif ('valider' == getValue('action')) {
    // On appelle le wsdl de validation de la commande
    $resultat_validation = NotationCde::callWsdlValiderNotationCde(getValue('no_cde'), $_SESSION['Session_Login']);
    
    // Si la validation est OK
    if ('O' == $resultat_validation['Statut']) {
        // On met à jour le compteur de la notation
        $total = NotationCde::getNbCdeToRate($_SESSION['Session_Login']);
        Affichage::innerHTMLwithoutHTMLTr('nbCdeToRate', "({$total})", true);
        $_SESSION['NB_CDE_TO_RATE'] = $total;
        
        Affichage::messageJS(trad('La notation de la commande a été validée'));
        echo 'parent.CallUrl("suivi_doc.php?action=accueil","TypeSuivi=CdeToRate");window.closePopup();refreshNotification();';
    }    // Sinon on affiche la liste des erreurs rencontrées
    else {
        $message = '';
        
        if (is_array($resultat_validation['ListErreur']))
            foreach ($resultat_validation['ListErreur'] as & $erreur)
                $message .= $erreur['MsgErreur'] . "/r/n";
        
        Affichage::messageJS($message);
    }
    
    echo 'window.closePopup();';
    
    // On met à jour les actions possibles de notation sur la commande qui ont peut être changé suite à l'enregistrement de la notation
    $zone_globale = getValue('zone_globale');
    $zone_actions = getValue('zone_actions');
    
    $ActionsDoc = new ActionsDocument('CdeToRate', getValue('no_cde'), $zone_globale, $zone_actions);
    $Xslt = new GenXslt();
    $html = HttpReplacePointeur($Xslt->XslHtml('application/xsl/suivi_document.xsl', $ActionsDoc->getTabInfoForRefresh()));
    Affichage::innerHTMLwithoutHTMLTrPointeur($zone_actions, $html, true);

}

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