<?php

class TDB_Operationnel
{

    public static function NbDOAMod($isModele)
    {
        $reqSqlDoa = SqlDoa::rqGetInfoSuiviDoaMode($isModele)->TrouveTous();
        $nbDOA = count($reqSqlDoa);
        return $nbDOA;
    }

    public static function getLibTache(& $typeObjet, & $idObjet, & $idTache, $champ)
    {
        $reqSqlTAches = SqlDoa::rqGetInfoTaches($typeObjet, $idObjet, $idTache)->Trouve1();
        return $reqSqlTAches[$champ];
    }

    public static function getLibDoa(& $idObjet, $champ)
    {
        $reqSqlDoa = SqlDoa::rqGetInfoSuiviDoa($idObjet)->Trouve1();
        return $reqSqlDoa[$champ];
    }

    public static function &BuildXmlAccueil($mode, $idAction = null)
    {
        $array = array();
        $array['ide']['fiche']['!mode'] = $mode;
        
        if ($reqSqlActions = SqlDoaActions::rqGetDOAPourTDBOperationnel($_SESSION['Session_Login'])->TrouveTous()) {
            $infoActions = null;
            foreach ($reqSqlActions as & $value) {
                
                /**
                 * Définition d'un element pour la notion
                 * Vert = date ≥ date de début et < Date de fin – préavis
                 * Orange = date ≥ Date de fin – préavis et ≤ date de fin
                 * Rouge = Date > Date de fin
                 *
                 * Utlisation de DATE_DEB DATE_FIN DELAI_PREAVIS
                 */
                $DELAI_PREAVIS = $value['DELAI_PREAVIS'];
                
                $objToday = new DateTime('today');
                $strDateToday = $objToday->format('Ymd');
                
                $objDateDeb = DateTime::createFromFormat('Ymd h:i:s', $value['LIB_date_deb'] . ' 0:00:00');
                $strDateDeb = $objDateDeb->format('Ymd');
                
                $objDatePrev = DateTime::createFromFormat('Ymd h:i:s', $value['LIB_date_fin'] . ' 0:00:00');
                $objDatePrev->sub(new DateInterval('P' . $DELAI_PREAVIS . 'D'));
                $strDatePrev = $objDatePrev->format('Ymd');
                
                $objDateFin = DateTime::createFromFormat('Ymd h:i:s', $value['LIB_date_fin'] . ' 0:00:00');
                $strDateFin = $objDateFin->format('Ymd');
                
                if ($strDateToday > $strDateFin) { // Rouge = Date > Date de fin
                    $encours = 3;
                } elseif ($strDatePrev <= $strDateToday && $strDateToday <= $strDateFin) { // Orange = date ≥ Date de fin – préavis et ≤ date de fin
                    $encours = 2;
                } elseif ($strDateDeb <= $strDateToday && $strDateDeb < $strDatePrev) { // Vert = date ≥ date de début et < Date de fin – préavis
                    $encours = 1;
                } else {
                    $encours = 0;
                }
                
                // if ($strDateDeb <= $strDateToday && $strDateDeb < $strDatePrev) // Vert = date ≥ date de début et < Date de fin – préavis
                // $encours = 1;
                // else
                // if ($strDatePrev <= $strDateToday && $strDateToday <= $strDateFin) // Orange = date ≥ Date de fin – préavis et ≤ date de fin
                // $encours = 2;
                // else
                // if ($strDateToday > $strDateFin)
                // $encours = 3;
                // else
                // $encours = 0;
                
                $infoActions[] = array(
                    '!TYPE_OBJET' => & $value['TYPE_OBJET'],
                    '!ID_OBJET' => & $value['ID_OBJET'],
                    '!ID_TACHE' => & $value['ID_TACHE'],
                    '!ID_ACTION' => & $value['ID_ACTION'],
                    '!LIB' => & $value['LIB'],
                    '!COMMENTAIRE' => & $value['COMMENTAIRE'],
                    '!NUM_ORDRE' => & $value['NUM_ORDRE'],
                    '!ID_TYPE_ACT' => & $value['ID_TYPE_ACT'],
                    '!TERMINEE' => & $value['TERMINEE'],
                    '!statutActivite' => $encours,
                    '!TACHE' => & $value['LIB_tache'],
                    '!DATE_DEB' => convertDateSqlToFr($value['LIB_date_deb']),
                    '!DATE_FIN' => convertDateSqlToFr($value['LIB_date_fin']),
                    '!AFFICHER_ACTIONS' => 'CallUrl(\'DOA_Action.php?action=AfficherActionExecuterTB&ancrage=men_gene&idAction=' . $value['ID_ACTION'] . '&typeObjet=' . $value['TYPE_OBJET'] . '&idObjet=' . $value['ID_OBJET'] . '&idTache=' . $value['ID_TACHE'] . '\');window.scrollTo(0,0);',
                    '!LIB_DOA' => & $value['LIB_doa']
                );
            }
            
            $array['ide']['fiche']['actions'] = & $infoActions;
        }
        
        // En fonction du droit devisibilité de DOA
        if (DroitAcces::GetModuleDOA()) // Dossier 25235 Re controle de la possibilité d'acces global au doa car la saisie d'un raci est peut etre possible mais pour autant pas voir les DOA
            $array['ide']['fiche']['doa'] = DOA::BuildXmlResumeDOA();
        
        $array['ide']['fiche']['!enregistrer_actions'] = 'TraiteAsync(\'TDB_Operationnel.php?action=ModifierAction\',document.form_editer_action.elements[0],\'\',\'' . cnv_to_javascript(trad('Enregistrement des information...')) . '\');return false;';
        
        $array['fenetre']['!titre'] = trad('Actions à faire');
        
        return $array;
    }

    const id_TYPE_OBJET = 'TYPE_OBJET';

    const id_LIB = 'LIB';

    const id_COMMENTAIRE = 'COMMENTAIRE';

    const id_hidden_id_action = 'hidden_id_action';

    public static function &EnregistrerAction()
    {
        $messageErreur = '';
        
        $LIB = trim(GetValue(TDB_Operationnel::id_LIB));
        $COMMENTAIRE = trim(GetValue(TDB_Operationnel::id_COMMENTAIRE));
        $TYPE_OBJET = trim(GetValue(TDB_Operationnel::id_TYPE_OBJET));
        $ID_ACTION = trim(GetValue(TDB_Operationnel::id_hidden_id_action));
        
        // verification des champs
        if ('' === $LIB)
            $messageErreur = Trad('Vous devez remplir l\'action à faire');
        else {
            if (mb_strlen($LIB) > 120)
                $messageErreur = Trad('Le nom de l\'action doit être inférieur à 120 caractères.');
        }
        if ('' === $TYPE_OBJET)
            $messageErreur = Trad('Vous devez remplir le type d\'action');
        else {
            if (mb_strlen($TYPE_OBJET) > 1)
                $messageErreur = Trad('Le type d\'action doit être égal à 1 caractère.');
        }
        
        // Enregistrement de l'action
        if ('' === $messageErreur) {
            if (! SqlDoaActions::rqDOA_ModifActions($LIB, $COMMENTAIRE, $TYPE_OBJET, $ID_ACTION)->ExecuteSql()) {
                $messageErreur = Trad('Une erreur est survenue pendant l\'enregistrement de la modification.');
            }
        }
        
        return array(
            'messageErreur' => $messageErreur
        );
    }
}