public static function checkActifWorkflow($paramIdFtaWorkflow)
 {
     $arrayActifWorkflow = DatabaseOperation::convertSqlStatementWithoutKeyToArray(" SELECT " . self::TABLENAME . "." . self::FIELDNAME_WORKFLOW_ACTIF . "," . self::FIELDNAME_DESCRIPTION_FTA_WORKFLOW . " FROM " . self::TABLENAME . " WHERE  " . self::KEYNAME . "=" . $paramIdFtaWorkflow);
     foreach ($arrayActifWorkflow as $rowsActifWorkflow) {
         $actif = $rowsActifWorkflow[self::FIELDNAME_WORKFLOW_ACTIF];
         $nom = $rowsActifWorkflow[self::FIELDNAME_DESCRIPTION_FTA_WORKFLOW];
         if (!$actif) {
             $titre = self::WORKFLOW_NON_ACTIF_TITLE;
             $message = self::WORKFLOW_NON_ACTIF_1 . $nom . self::WORKFLOW_NON_ACTIF_2;
             $redirection = "";
             Lib::showMessage($titre, $message, $redirection);
         }
     }
 }
        //                . '-encours-1-' . $idFtaEtat
        //                . '-' . $abreviationFtaEtat
        //                . '-' . $idFtaRole . '.html');
        break;
    case 2:
        //Duplication d'une Fiche Technique Article
        if ($id_fta) {
            $arrayFta = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaModel::KEYNAME . ' FROM ' . FtaModel::TABLENAME . ' WHERE ( ' . FtaModel::KEYNAME . ' = ' . $id_fta . ' ) ');
        } else {
            //Averissement
            $titre = "Manque de donnée id_fta";
            $message = "Veuillez saisir un id_fta existant à dupliquer .<br><br>";
            Lib::showMessage($titre, $message, $redirection);
        }
        if ($arrayFta) {
            //Redirection
            header('Location: duplication_fiche.php?' . 'id_fta=' . $id_fta . '&synthese_action=modification&abreviation_etat_destination=' . $abreviationFtaEtat . '&new_designation_commerciale_fta=' . $designationCommercialeFta . '&site_de_production=' . $siteDeProduction . '&id_fta_role=' . $idFtaRole . '&id_fta_workflow=' . $idFtaWorkflow);
        } else {
            //Averissement
            $titre = UserInterfaceMessage::FR_WARNING_DATA_ID_FTA_TITLE;
            $message = UserInterfaceMessage::FR_WARNING_DATA_ID_FTA;
            Lib::showMessage($titre, $message, $redirection);
        }
        break;
        /*     * **********
              Fin de switch
             * ********** */
}
?>

 /**
  * On vérifie si la l'element qui va être supprimé est utilisé
  */
 function checkClassificationUsed()
 {
     $array = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaModel::FIELDNAME_CODE_ARTICLE_LDC . "," . FtaModel::FIELDNAME_LIBELLE . " FROM " . ClassificationFta2Model::TABLENAME . "," . FtaModel::TABLENAME . " WHERE (" . ClassificationFta2Model::FIELDNAME_ID_PROPRIETAIRE_GROUPE . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_PROPRIETAIRE_ENSEIGNE . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_ACTIVITE . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_MARQUE . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_RAYON . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_ENVIRONNEMENT . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_RESEAU . "=" . $this->getKeyValue() . " OR " . ClassificationFta2Model::FIELDNAME_ID_SAISONNALITE . "=" . $this->getKeyValue() . ")" . " AND " . ClassificationFta2Model::TABLENAME . "." . ClassificationFta2Model::KEYNAME . "=" . FtaModel::TABLENAME . "." . FtaModel::FIELDNAME_ID_FTA_CLASSIFICATION2 . " ORDER BY " . FtaModel::FIELDNAME_CODE_ARTICLE_LDC);
     if ($array) {
         //Liste des modèles concernés
         $liste = "";
         foreach ($array as $rows) {
             $liste .= $rows[FtaModel::FIELDNAME_CODE_ARTICLE_LDC] . " " . $rows[FtaModel::FIELDNAME_LIBELLE] . "<br>";
         }
         //Averissement
         $titre = UserInterfaceMessage::FR_WARNING_CLASSIFICATION_ELEMENT_TITLE;
         $message = UserInterfaceMessage::FR_WARNING_CLASSIFICATION_ELEMENT . $liste;
         Lib::showMessage($titre, $message, $redirection);
     }
 }
//http://intranet.dev.agis.fr/fta/recherche.php?url_page_depart=(/fta/recherche.php)&requete_resultat=SELECT+DISTINCT+fta.id_fta+FROM+fta+WHERE+fta.id_article_agrologic%3D%27666%27&nb_limite_resultat=1000&champ_recherche=4||1||&operateur_recherche=1||4||&texte_recherche=666||666||&nbcol=1&nbligne=2&nb_col_courant=0&nb_ligne_courant=1&ajout_col=0
if (is_numeric($recherche)) {
    //Recherche du code Regate
    //    $search_table = "fta";
    //    $search_id = "fta.id_fta";
    //    $search_req = "fta.code_article_ldc%3D%27" . $recherche . "%27+";
    $champ_recherche = 6;
    $operateur_recherche = 4;
} else {
    if ($recherche) {
        //Recherche dans la désignation Commerciale
        //        $search_table = "fta";
        //        $search_id = "$search_table.id_fta";
        //        $search_req = "fta.designation_commerciale_fta++LIKE+%28+%27%25" . $recherche . "%25%27+%29+";
        $operateur_recherche = 1;
        $champ_recherche = 4;
    } else {
        $message = "Veuillez saisir un code article arcadia ou une Désignation interne";
        $redirection = "recherche.php";
        Lib::showMessage("Erreur", $message, $redirection);
    }
}
header("Location: ./recherche.php?url_page_depart=(/" . $dossierUrL . "/apps/fta/recherche.php)&rechercheRapide={$recherche}&nb_limite_resultat=1000&champ_recherche={$champ_recherche}&operateur_recherche={$operateur_recherche}&texte_recherche={$recherche}&nbcol=1&nbligne=1&nb_col_courant=0&nb_ligne_courant=1&ajout_col=0&id_fta_role={$idFtaRole}");
/* * **********
  Fin de switch
 * ********** */
//include ("./action_bs.php");
//include ("./action_sm.php");
?>

 /**
  * On insert les champs à verrouiller par défaut
  * @param int $paramFtaDossierPrimaire
  */
 public static function insertDefaultFieldToLock($paramFtaDossierPrimaire)
 {
     $arrayIntranetColumInfoLockField = IntranetColumnInfoModel::getArrayDefaultLockField();
     if ($arrayIntranetColumInfoLockField) {
         foreach ($arrayIntranetColumInfoLockField as $rowIntranetColumInfoLockField) {
             $lockValueIntranet = $rowIntranetColumInfoLockField[IntranetColumnInfoModel::FIELDNAME_DEFAULT_FIELD_TO_LOCK_FOR_PRIMARY_FTA];
             /**
              * On vérifie si il s'agit un champ à verrouilé par défaut ou pas.
              */
             switch ($lockValueIntranet) {
                 case IntranetColumnInfoModel::DEFAULT_FIELD_TO_LOCK_FOR_PRIMARY_FTA_VALUES:
                     $lockValue = self::FIELD_LOCK_TRUE;
                     break;
                 case IntranetColumnInfoModel::DEFAULT_FIELD_NOT_TO_LOCK_FOR_PRIMARY_FTA_VALUES:
                     $lockValue = self::FIELD_LOCK_FALSE;
                     break;
             }
             DatabaseOperation::execute("INSERT INTO " . self::TABLENAME . " ( " . self::FIELDNAME_TABLE_NAME . ", " . self::FIELDNAME_FIELD_NAME . ", " . self::FIELDNAME_DOSSIER_FTA_PRIMAIRE . ", " . self::FIELDNAME_FIELD_LOCK . ", " . self::FIELDNAME_FIELD_CHANGE_STATE . " ) VALUES ( \"" . $rowIntranetColumInfoLockField[IntranetColumnInfoModel::FIELDNAME_TABLE_NAME_INTRANET_COLUMN_INFO] . "\", \"" . $rowIntranetColumInfoLockField[IntranetColumnInfoModel::FIELDNAME_COLUMN_NAME_INTRANET_COLUMN_INFO] . "\", \"" . $paramFtaDossierPrimaire . "\", \"" . $lockValue . "\", \"" . self::CHANGE_STATE_TRUE_VALIDATION_FTA . "\" ) ");
         }
     } else {
         $titre = UserInterfaceMessage::FR_WARNING_VERROUILLAGE_CHAMPS_TITLE;
         $message = UserInterfaceMessage::FR_WARNING_VERROUILLAGE_CHAMPS;
         Lib::showMessage($titre, $message);
     }
 }
 /**
  * Algo de recherche de jointures pour 1 champ
  * Dictionnaire des variables :
  * $table_rech = nom de la table du champ que l'utilisateur a selectionner.
  * $nbligne_jointure = variable qui contiendra le nombre de jointure contenue dans le fichier
  * @param type $champ_sel
  * @param type $url_page_depart
  * @param type $module
  * @param type $table_champ_retour
  * @param type $table_tous_champs_rech
  * @return string
  */
 public static function rechercheDeJointure($champ_sel, $url_page_depart, $module, $table_champ_retour, $table_tous_champs_rech)
 {
     // Dictionnaire des variables
     $result = array();
     // Fichier qui contient les differentes liaisons entre les tables
     //d'un meme module
     $file = '../' . $module . '/sql.map';
     // Recherche du nom de la table du champ que l'utilisateur a selectionné
     $nom_table = "table_moteur_de_recherche";
     $nom = "nom_champ_moteur_de_recherche";
     $table_req = " SELECT {$nom_table} FROM {$table_tous_champs_rech}\n                        WHERE {$nom}='{$champ_sel}'";
     $array_enr = DatabaseOperation::convertSqlStatementKeyAndOneFieldToArray($table_req);
     // nom de la table
     foreach ($array_enr as $table_enr) {
         $table_rech = $table_enr[0];
     }
     /*         * *****************************************************************************
               Transformation du fichier $file en 1 tableau pour les jointures
     
               $tab_jointure[][] = Tableau a 2 dimensions qui va contenir  :
              * dans sa premiere colonne
               - soit 0 (si la jointure n'a pas été utilisée)
               - soit 1 (si elle a deja ete utilisée)
              * dans sa deuxieme colonne : la jointure en elle meme.
              * ****************************************************************************** */
     unset($tab_jointure);
     //on vide le tableau
     if (file_exists("{$file}")) {
         // Test de l'existance du fichier
         // Ouverture du fichier en lecture
         $fp = fopen("{$file}", "r");
         $nbligne_jointure = 0;
         // le nombre de jointure
         if ($fp) {
             // Si le fichier est ouvert
             $toute_ligne = fgets($fp, 4096);
             // lecture d'une ligne
             while (!feof($fp)) {
                 // tant qu'on n'est pas a la fin du fichier
                 if ($toute_ligne[0] != '#') {
                     // on saute les lignes en commentaires
                     $tab_jointure[][1] = $toute_ligne;
                     // on rempli le tableau
                     $nbligne_jointure++;
                 }
                 $toute_ligne = fgets($fp, 4096);
                 // lecture d'une ligne
             }
         } else {
             $titre = 'ERREUR';
             $message = 'Probleme d\'ouverture du fichier ';
             $message .= $file;
             Lib::showMessage($titre, $message, $redirection);
             exit;
         }
     } else {
         $titre = 'ERREUR';
         $message = 'Le fichier ';
         $message .= $file;
         $message .= " n'existe pas ! ";
         Lib::showMessage($titre, $message, $redirection);
         exit;
     }
     // initialisation du marquage à 0
     for ($j = 0; $j < $nbligne_jointure; $j++) {
         $tab_jointure[$j][0] = 0;
     }
     /*         * *****************************************************************************
               Jointures et chemin forcé
               Pour pouvoir determiner toutes les jointures entre la table qui contient la valeur
               que l'on recherche et la table qui contient le resultat que l'on attend
               On utilise un algorithme de parcours en profondeur
               Explication :
               point de depart = la table du champ que l'ulisateur vient de selectionner
               pour faire sa recherche.
               point d'arrivée = $table_champ_retour
     
               En partant du point de départ, il peut y avoir plusieurs chemins pour
               arriver au point d'arrivée.
     
               Les differentes étapes du chemin (les jointures) seront séparées
               par des AND,
               Les differents chemins seront séparés par des OR
     
               Le principe de parcours en profondeur :
               on explore un chemin jusqu'au bout, si la table de la
               dernière jointure (étape) est le point d'arrivée
               on l'enregistre dans le tableau $chemin
     
               Chemin forcé :
               Si un champ a un chemin forcé alors il faut trouver
               la jointure entre ce champ et son étape forcé
               ( IMPORTANT un champ ne peut avoir de lien forcé qu'avec une table qui a
               une jointure directe avec lui)
               Et ensuite trouver les jointures entre l'étape forcée et
               la table de retour.
     
               Dictionnaire des variables :
     
               $requete = va contenir le resultat de la fonction cad les jointures
               $pile = va contenir le nom des tables trouvées au fur et a mesure
               $chemin[][] = tableau à 2 dimensions qui va contenir sur chaque ligne
               un chemin valide
     
              * ****************************************************************************** */
     // Recherche dans la table  $module_table_moteur_de_recherche si le champ à un chemin forcé
     $nom_chemin = 'chemin_force_moteur_de_recherche';
     $chemin_req = " SELECT {$nom_chemin} FROM {$table_tous_champs_rech}\n                         WHERE {$nom}='{$champ_sel}'";
     $chemin_resultat = DatabaseOperation::convertSqlStatementKeyAndOneFieldToArray($chemin_req);
     foreach ($chemin_resultat as $chemin_enr) {
         // chemin force
         $chemin = $chemin_enr[0];
     }
     $requete = '';
     $ligne = 0;
     $col = 0;
     if ($chemin != '') {
         // si elle a un chemin forcé
         // on recherche la jointure correspondante
         $j = 0;
         while ($j < $nbligne_jointure) {
             // on parcours tout le tableau de jointure
             $aux = explode('=', $tab_jointure[$j][1]);
             if (trim($aux[0]) == trim($chemin)) {
                 $tmp1 = explode('.', $aux[1]);
                 if (trim($tmp1[0]) == trim($table_rech)) {
                     $jointure_force = $tab_jointure[$j][1];
                 }
             } else {
                 if (strcmp(trim($aux[1]), trim($chemin)) == 0) {
                     $tmp1 = explode('.', $aux[0]);
                     if (trim($tmp1[0]) == trim($table_rech)) {
                         $jointure_force = $tab_jointure[$j][1];
                     }
                 }
             }
             $j++;
         }
         if ($jointure_force == '') {
             // si il n'y a pas de jointure correspondant au chemin forcé
             //ERREUR
             $titre = 'ERREUR';
             $message = 'Probleme de jointure : le champ ';
             $message .= $chemin;
             $message .= "n'est pas reliée à la table  ";
             $message .= $table_rech;
             Lib::showMessage($titre, $message, $redirection);
         } else {
             // On change $table_rech
             // la table du champ de recherche devient le nom de la table
             // du champ de la jointure forcée
             $tmp = explode('.', $chemin);
             $table_rech = $tmp[0];
             $requete[$ligne][1] = $jointure_force;
             $requete[$ligne][0] = 0;
             $ligne++;
         }
     }
     if ($table_champ_retour != $table_rech) {
         // Besoin de jointure
         $l = 0;
         // nombre de ligne du tableau chemin
         $p = 0;
         // nombre de colonne du tableau chemin
         $pile = array();
         // creation d'un tableau
         array_push($pile, $table_rech);
         // on empile la table de départ
         while (count($pile) > 0) {
             // tant que la pile n'est pas vide
             $j = 0;
             while ($j < $nbligne_jointure) {
                 // on parcours tout le tableau de jointure
                 $aux = explode('=', $tab_jointure[$j][1]);
                 $tmp1 = explode(".", $aux[0]);
                 $tmp2 = explode(".", $aux[1]);
                 // si on trouve la table $pile[$p] dans une jointure
                 if (($pile[$p] == $tmp1[0] or $pile[$p] == $tmp2[0]) and $tab_jointure[$j][0] != 1) {
                     //echo "test";
                     $p++;
                     // on marque la jointure pour ne pas avoir de doublons
                     $tab_jointure[$j][0] = 1;
                     // dans le tableau des chemins on garde le numero de la ligne ou se trouve la jointure
                     $chemin[$l][$p] = $j;
                     // on recupere le nom de la table qui fait une jointure avec $pile[$p-1]
                     if ($pile[$p - 1] == $tmp1[0]) {
                         $a_empiler = $tmp2[0];
                     } else {
                         $a_empiler = $tmp1[0];
                     }
                     if ($a_empiler == $table_champ_retour) {
                         // si on est a la fin d'un chemin VALIDE
                         $chemin[$l + 1] = $chemin[$l];
                         // on recopie le bon chemin dans la ligne d'apres
                         $z = array_pop($chemin[$l + 1]);
                         // mais on supprime le dernier element
                         $l++;
                         $p--;
                     } else {
                         array_push($pile, $a_empiler);
                         // on empile le nom de la table
                         $j = -1;
                         //on repart au debut de la liste des jointures
                     }
                 }
                 $j++;
             }
             if ($j == $nbligne_jointure) {
                 // Fin d'un chemin mais non valide
                 $z = array_pop($pile);
                 // on depile le dernier element de la pile
                 // on supprime la derniere etape du chemin
                 //echo $chemin[$l][$p]."<br>";
                 unset($chemin[$l][$p]);
                 //Rajout du contrôle de l'existance -- 2007-01-15 Boris.
                 /*
                  if($chemin[$l][$p])
                  {
                  // on supprime la derniere etape du chemin
                  unset($chemin[$l][$p]);
                  }
                 */
                 $p--;
             }
         }
         if (count($pile) == 0) {
             // Si la pile est vide, on a parcouru tous les chemins
             if (count($chemin[0]) == 0) {
                 // si le tableau de chemin est vide = table isolée = ERREUR
                 $titre = 'ERREUR';
                 $message = 'Probleme de jointure : la table ';
                 $message .= $table_rech;
                 $message .= " n'est pas reliée à la table  ";
                 $message .= $table_champ_retour;
                 Lib::showMessage($titre, $message, $redirection);
                 exit;
             } else {
                 // ecriture de la requete
                 // la requete est saisie dans un tableau a 2 dimensions sur le meme
                 // principe que le tableau des jointures (avec une premiere colonne a 0
                 // pour le marquage et la 2eme colonnes contient les jointures pour un chemin
                 // separée par des AND
                 for ($i = 0; $i < $l; $i++) {
                     $requete[$ligne][0] = 0;
                     for ($j = 1; $j <= count($chemin[$i]); $j++) {
                         $q = $chemin[$i][$j];
                         $requete[$ligne][1] .= $tab_jointure[$q][1];
                         //echo  $requete[$ligne][1]."<br>";
                         if ($j < count($chemin[$i])) {
                             $requete[$ligne][1] .= ' AND ';
                         }
                         $aux = explode('=', $tab_jointure[$q][1]);
                         $table1 = explode('.', $aux[0]);
                         $table2 = explode('.', $aux[1]);
                     }
                     $ligne++;
                 }
             }
         }
     }
     //Il n'y a pas de jointure
     if ($requete == "") {
         $result[0][0] = 0;
         $result[0][1] = "";
     } else {
         $result = $requete;
     }
     return $result;
 }
Beispiel #7
0
 /**
  * Vérifie si l'utilisateur a toujours sa session active.
  * Sinon, c'est qu'elle a expirée et un message est affiché.
  * @param GlobalConfig $paramGlobalConfig
  */
 public static function checkUserSessionExpired(GlobalConfig $paramGlobalConfig)
 {
     if (self::isUserSessionExpired($paramGlobalConfig)) {
         $titre = UserInterfaceMessage::FR_SESSION_EXPIRED;
         $message = UserInterfaceMessage::FR_SESSION_EXPIRED_TITLE;
         $redirection = "index.php";
         Lib::showMessage($titre, $message, $redirection);
     }
 }
Beispiel #8
0
 protected static function RecupChapitre($paramT_Liste_Processus)
 {
     $page_default = "modification_fiche";
     $first = "";
     /*
      *  Nous récupérons les chapitres obligatoirement présent ce qui implique que les autre chapitres doivent être attribués.
      */
     $reqRecup = 'SELECT ' . FtaChapitreModel::TABLENAME . '.' . FtaChapitreModel::KEYNAME . ', ' . FtaChapitreModel::TABLENAME . '.' . FtaChapitreModel::FIELDNAME_NOM_USUEL_CHAPITRE . ', ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ', ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . ' FROM ' . FtaChapitreModel::TABLENAME . ' LEFT JOIN ' . FtaWorkflowStructureModel::TABLENAME . ' ON ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . FtaChapitreModel::TABLENAME . '.' . FtaChapitreModel::KEYNAME . ' WHERE ( ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . ' =' . FtaRoleModel::ID_FTA_ROLE_COMMUN;
     foreach ($paramT_Liste_Processus as $value) {
         $reqRecup .= ' OR ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '=\'' . $value . '\'';
     }
     $reqRecup .= ' ) AND ' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . self::$id_fta_workflow . ' ORDER BY ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE . ',' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . ',' . FtaChapitreModel::TABLENAME . '.' . FtaChapitreModel::KEYNAME;
     $arrayRecup = DatabaseOperation::convertSqlStatementWithoutKeyToArray($reqRecup);
     //Balyage des chapitres trouvés
     foreach ($arrayRecup as $rowsRecup) {
         $id_fta_chapitre = $rowsRecup[FtaChapitreModel::KEYNAME];
         $nom_usuel_fta_chapitre = $rowsRecup[FtaChapitreModel::FIELDNAME_NOM_USUEL_CHAPITRE];
         $idFtaProcessus = $rowsRecup[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS];
         $idFtaRole = $rowsRecup[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_ROLE];
         //Dans le cas où il n'y a pas de chapitre sélectionné, sélection du chapitre identité
         if (!self::$id_fta_chapitre_encours) {
             self::$id_fta_chapitre_encours = $id_fta_chapitre;
         }
         if (self::$id_fta_chapitre_encours == $id_fta_chapitre and !self::$selectionChap) {
             $font_size = "size=" . self::FONT_SIZE_CHAPITRE_ENCOURS;
             $font_flash_color = "color=" . self::FONT_COLOR_CHAPITRE_ENCOURS;
             $font_flash = "<font " . $font_size . " " . $font_flash_color . ">";
             $image_flash1 = $font_flash . '[  ' . "</font>";
             $image_flash2 = $font_flash . '  ]' . "</font>";
             $num = 1;
         } else {
             $font_size = "";
             $image_flash1 = '-  ';
             $image_flash2 = '  -';
         }
         //Ce chapitre est-il public?
         if ($idFtaProcessus == 0) {
             $font_color = "color=" . self::FONT_COLOR_CHAPITRE_PUBLIC;
             $link = TRUE;
             $num = 1;
         } else {
             //Le chapitre est-il validé ?
             $req1 = 'SELECT ' . FtaSuiviProjetModel::KEYNAME . ' FROM ' . FtaSuiviProjetModel::TABLENAME . ' WHERE ' . FtaSuiviProjetModel::FIELDNAME_ID_FTA . '=' . self::$id_fta . ' AND ' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . $id_fta_chapitre . ' AND ' . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . '<> ' . FtaSuiviProjetModel::SIGNATURE_VALIDATION_SUIVI_PROJET_FALSE;
             $result1 = DatabaseOperation::queryPDO($req1);
             $num = DatabaseOperation::getSqlNumRows($result1);
             switch ($num) {
                 case 0:
                     /**
                      * Chapitre pas encore validé
                      *  - Chapitre encours en rouge 
                      *  - Chapitre non accessible  en noir
                      */
                     if (in_array($idFtaProcessus, self::$id_fta_processus)) {
                         $font_color = "color=" . self::FONT_COLOR_CHAPITRE_NON_VALIDEE;
                         $link = TRUE;
                         $i = "";
                         $iEnd = "";
                     } elseif (self::$id_fta_role == $idFtaRole) {
                         $font_color = "color=" . self::FONT_COLOR_CHAPITRE_NON_ACCESSIBLE;
                         $link = FALSE;
                         $i = "";
                         $iEnd = "";
                     } else {
                         $font_color = "color=" . self::FONT_COLOR_CHAPITRE_AUTRE_ROLE;
                         $i = " <i> ";
                         $iEnd = " </i> ";
                         $link = FALSE;
                     }
                     break;
                 case 1:
                     //Chapitre validé
                     $font_color = "color=" . self::FONT_COLOR_CHAPITRE_VALIDEE;
                     $link = TRUE;
                     $i = "";
                     $iEnd = "";
                     break;
                 default:
                     //Anomalie
                     $titre = 'Erreur Grave !';
                     $message = 'La fonction afficher_navigation() vient de trouver des doublons de validation des chapitres dans la table fta_suivi_projet';
                     Lib::showMessage($titre, $message, $redirection);
                     break;
             }
         }
         //Fin du test public
         //}//Fin de la colorisation
         if ($num == 0 and self::$synthese_action === 'attente') {
         } else {
             $b = $i . "<font " . $font_size . " " . $font_color . ">";
             $menu_navigation .= $image_flash1;
             if ($link) {
                 $menu_navigation .= '<a href=' . $page_default . '.php?' . 'id_fta=' . self::$id_fta . '&id_fta_chapitre_encours=' . $id_fta_chapitre . '&synthese_action=' . self::$synthese_action . '&id_fta_etat=' . self::$id_fta_etat . '&abreviation_fta_etat=' . self::$abreviation_etat . '&id_fta_role=' . self::$id_fta_role . '>';
             }
             $menu_navigation .= $b . ' ' . $nom_usuel_fta_chapitre;
             $menu_navigation .= '</a>';
             $menu_navigation .= '</font> ' . $iEnd . $image_flash2;
             /**
              * Mise en forme des chapitres de la barre de navigation regroupé par Rôle
              */
             if ($idFtaRoleTmp == $idFtaRole or !$first) {
                 $roleMenu .= $menu_navigation;
                 $menu_navigation = "";
                 $idFtaRoleTmp = $idFtaRole;
                 $first = "1";
             } else {
                 $color = FtaRoleModel::getColorByRole($idFtaRoleTmp);
                 $border = FtaRoleModel::getBoderByRole($idFtaRoleTmp, self::$id_fta_role_encours);
                 $roleMenuFinal .= "<td style='border-style:solid; border-bottom-width: {$border}; border-color: " . $color . "' >" . $roleMenu . "</td>";
                 $roleMenu = $menu_navigation;
                 $menu_navigation = "";
                 $idFtaRoleTmp = $idFtaRole;
             }
         }
     }
     $color = FtaRoleModel::getColorByRole($idFtaRoleTmp);
     $border = FtaRoleModel::getBoderByRole($idFtaRoleTmp, self::$id_fta_role_encours);
     $roleMenuFinal .= "<td style='border-style:solid; border-bottom-width: {$border}; border-color: " . $color . "' >" . $roleMenu . "</td>";
     return $roleMenuFinal;
 }
Beispiel #9
0
 /**
  * Retourne l'objet Html associé au champ DataField
  * @param DatabaseDataField $paramDataField
  * @param  $param
  * @return AbstractHtmlGlobalElement
  */
 public static function getHtmlObjectFromDataField(DatabaseDataField $paramDataField, $param = FALSE, $param2 = FALSE)
 {
     $htmlObject = NULL;
     $TypeOfHtmlObject = $paramDataField->getFieldTypeOfHtmlObject();
     switch ($TypeOfHtmlObject) {
         case Html::TYPE_OF_OBJECT_CALENDAR:
             $htmlObject = new DataFieldToHtmlInputCalendar($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_INPUTTEXT:
             $htmlObject = new DataFieldToHtmlInputText($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_LIST:
             $htmlObject = new DataFieldToHtmlListSelect($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_BOOLEAN:
             $htmlObject = new DataFieldToHtmlListBoolean($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_TEXTAREA:
             $htmlObject = new DataFieldToHtmlTextArea($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_SUBFORM_R1N:
             $htmlObject = new DataFieldToHtmlSubform_R1N($paramDataField);
             break;
         case Html::TYPE_OF_OBJECT_SUBFORM_RNN:
             $htmlObject = new DataFieldToHtmlSubform_RNN($paramDataField, $param, $param2);
             break;
         case Html::TYPE_OF_OBJECT_INPUTNUMBER:
             $htmlObject = new DataFieldToHtmlInputNumber($paramDataField);
             break;
         default:
             Lib::showMessage("Erreur", "Type d'objet <b>" . $TypeOfHtmlObject . "</b> inconnu." . " Champs concerné:" . $paramDataField->getFieldName() . " ", $redirection);
             //                throw new Exception();
     }
     return $htmlObject;
 }
 /**
  * On vérifie si la classification qui va être supprimé est utilisé
  */
 function checkClassificationUsed()
 {
     $array = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaModel::FIELDNAME_CODE_ARTICLE_LDC . "," . FtaModel::FIELDNAME_LIBELLE . " FROM " . FtaModel::TABLENAME . " WHERE " . FtaModel::FIELDNAME_ID_FTA_CLASSIFICATION2 . "=" . $this->getKeyValue() . " ORDER BY " . FtaModel::FIELDNAME_CODE_ARTICLE_LDC);
     if ($array) {
         //Liste des modèles concernés
         $liste = "";
         foreach ($array as $rows) {
             $liste .= $rows[FtaModel::FIELDNAME_CODE_ARTICLE_LDC] . " " . $rows[FtaModel::FIELDNAME_LIBELLE] . "<br>";
         }
         //Averissement
         $titre = UserInterfaceMessage::FR_WARNING_CLASSIFICATION_DELETE_TITLE;
         $message = UserInterfaceMessage::FR_WARNING_CLASSIFICATION_DELETE . $liste;
         Lib::showMessage($titre, $message, $redirection);
     }
 }
Beispiel #11
0
 public function arrayEmballages($paramGroupeType)
 {
     $return = $this->poidsDesEmballagesColis();
     //Les calculs pour Emballages
     $array = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT . "  FROM " . FtaConditionnementModel::TABLENAME . ", " . AnnexeEmballageGroupeModel::TABLENAME . ", " . AnnexeEmballageGroupeTypeModel::TABLENAME . " " . " WHERE " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " " . " AND " . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . "=" . $paramGroupeType . " " . " AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE . "=" . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::KEYNAME . " " . " AND ( " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NOT NULL AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . " OR " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NULL AND " . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_CONFIGURATION . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . "    ) " . " ORDER BY " . AnnexeEmballageGroupeTypeModel::FIELDNAME_NOM_ANNEXE_EMBALLAGE_GROUPE_TYPE);
     if ($paramGroupeType == AnnexeEmballageGroupeTypeModel::EMBALLAGE_DU_COLIS) {
         if (count($array) > 1) {
             $titre = UserInterfaceMessage::FR_WARNING_NOT_HANDLE_TITLE;
             $message = UserInterfaceMessage::FR_WARNING_EMBALLAGE_COLIS;
             Lib::showMessage($titre, $message, $redirection, TRUE);
         }
     }
     if ($paramGroupeType == AnnexeEmballageGroupeTypeModel::EMBALLAGE_PALETTE) {
         if (count($array) > 1) {
             $titre = UserInterfaceMessage::FR_WARNING_NOT_HANDLE_TITLE;
             $message = UserInterfaceMessage::FR_WARNING_EMBALLAGE_PALETTE;
             Lib::showMessage($titre, $message, $redirection, TRUE);
         }
     }
     if ($array) {
         foreach ($array as $rows) {
             // Calcul du poids de l'emballage  par UVC
             $return[FtaConditionnementModel::UVC_EMBALLAGE] += FtaConditionnementModel::getCalculPoidsEmballage($rows[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT], $rows[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT], $rows[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT]);
             //Calcul des dimensions de l'emballage par UVC
             $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION] = FtaConditionnementModel::getCalculDimensionEmballageUvc($return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_HAUTEUR], $rows[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT], $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_LONGEUR], $rows[FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT], $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_LARGEUR], $rows[FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT]);
             $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_HAUTEUR] = $rows[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT];
             $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_LONGEUR] = $rows[FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT];
             $return[FtaConditionnementModel::UVC_EMBALLAGE_DIMENSION_LARGEUR] = $rows[FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT];
             //Les Calculs de la table fta
             $arrayFta = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaModel::FIELDNAME_NOMBRE_UVC_PAR_CARTON . "," . FtaModel::FIELDNAME_POIDS_ELEMENTAIRE . " FROM " . FtaModel::TABLENAME . " " . " WHERE " . FtaModel::KEYNAME . "=" . $this->getKeyValue());
             foreach ($arrayFta as $rowsFta) {
                 //Calcul du Poids net par UVC
                 $return[FtaConditionnementModel::UVC_EMBALLAGE_NET] = $rowsFta[FtaModel::FIELDNAME_POIDS_ELEMENTAIRE] * 1000;
                 //Calcul du PCB du colis
                 $return[FtaModel::FIELDNAME_NOMBRE_UVC_PAR_CARTON] = $rowsFta[FtaModel::FIELDNAME_NOMBRE_UVC_PAR_CARTON];
             }
             //Calcul du poids brut par UVC en g
             $return[FtaConditionnementModel::UVC_EMBALLAGE_BRUT] = FtaConditionnementModel::getCalculPoidsBrutEmballage($return[FtaConditionnementModel::UVC_EMBALLAGE_NET], $return[FtaConditionnementModel::UVC_EMBALLAGE]);
             //Calcul du poids de Emballages du Colis
             //                $return[FtaConditionnementModel::COLIS_EMBALLAGE_TYPE_2] += FtaConditionnementModel::getCalculPoidsEmballage(
             //                                $rows[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT]
             //                                , $rows[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT]
             //                                , $rows[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT]
             //                );
             //Les calculs pour Emballages
             $arrayUVC1 = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT . "  FROM " . FtaConditionnementModel::TABLENAME . ", " . AnnexeEmballageGroupeModel::TABLENAME . ", " . AnnexeEmballageGroupeTypeModel::TABLENAME . " " . " WHERE " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " " . " AND " . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . "=" . AnnexeEmballageGroupeTypeModel::EMBALLAGE_UVC . " " . " AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE . "=" . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::KEYNAME . " " . " AND ( " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NOT NULL AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . " OR " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NULL AND " . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_CONFIGURATION . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . "    ) " . " ORDER BY " . AnnexeEmballageGroupeTypeModel::FIELDNAME_NOM_ANNEXE_EMBALLAGE_GROUPE_TYPE);
             if ($arrayUVC1) {
                 foreach ($arrayUVC1 as $rowsUVC1) {
                     // Calcul du poids de l'emballage  par UVC
                     $return[FtaConditionnementModel::UVC_EMBALLAGE_TYPE_1] += FtaConditionnementModel::getCalculPoidsEmballage($rowsUVC1[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT], $rowsUVC1[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT], $rowsUVC1[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT]);
                 }
             }
             //Les Calculs de la table composant
             $arrayComposant = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaComposantModel::FIELDNAME_QUANTITE_FTA_COMPOSITION . "," . FtaComposantModel::FIELDNAME_POIDS_FTA_COMPOSITION . " FROM " . FtaComposantModel::TABLENAME . " WHERE " . FtaComposantModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " AND " . FtaComposantModel::FIELDNAME_IS_COMPOSITION_FTA_COMPOSANT . "=" . FtaConditionnementModel::EMBALLAGES_UVF);
             if ($arrayComposant) {
                 foreach ($arrayComposant as $rowsComposant) {
                     // Calcul du Poids net du colis
                     $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] += FtaConditionnementModel::getCalculGenericMultiplication($rowsComposant[FtaComposantModel::FIELDNAME_QUANTITE_FTA_COMPOSITION], $rowsComposant[FtaComposantModel::FIELDNAME_POIDS_FTA_COMPOSITION]);
                 }
             } else {
                 $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = "0";
             }
             // Calcul du Poids net du colis
             $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] / "1000";
             //Conversion en g --> Kg
             if (!$return[FtaConditionnementModel::COLIS_EMBALLAGE_NET]) {
                 $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = FtaConditionnementModel::getCalculGenericMultiplication($rowsFta[FtaModel::FIELDNAME_POIDS_ELEMENTAIRE], $rowsFta[FtaModel::FIELDNAME_NOMBRE_UVC_PAR_CARTON]);
             }
             //Les calculs pour Emballages
             $array3 = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT . "  FROM " . FtaConditionnementModel::TABLENAME . ", " . AnnexeEmballageGroupeModel::TABLENAME . ", " . AnnexeEmballageGroupeTypeModel::TABLENAME . " " . " WHERE " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " " . " AND " . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . "=" . AnnexeEmballageGroupeTypeModel::EMBALLAGE_DU_COLIS . " " . " AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE . "=" . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::KEYNAME . " " . " AND ( " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NOT NULL AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . " OR " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NULL AND " . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_CONFIGURATION . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . "    ) " . " ORDER BY " . AnnexeEmballageGroupeTypeModel::FIELDNAME_NOM_ANNEXE_EMBALLAGE_GROUPE_TYPE);
             if ($array3) {
                 foreach ($array3 as $rows3) {
                     //Calcul du nombre de colis par couche
                     $return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE] = $rows3[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT];
                     //Calcul du nombre de couche par palette
                     $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE] = $rows3[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT];
                     //Hauteur du colis
                     $return[FtaConditionnementModel::COLIS_EMBALLAGE_HAUTEUR] = $rows3[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT];
                     //                        $return[FtaConditionnementModel::COLIS_EMBALLAGE_TYPE_3] += $rows3[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT];
                 }
             }
             //Calcul du poids brut du Colis en Kg
             $return[FtaConditionnementModel::COLIS_EMBALLAGE_BRUT] = FtaConditionnementModel::getCalculPoidsBrutEmballageColis($return[FtaConditionnementModel::COLIS_EMBALLAGE_NET], $return[FtaConditionnementModel::COLIS_EMBALLAGE]);
             //Calcul du Poids net par Palette
             $return[FtaConditionnementModel::PALETTE_EMBALLAGE_NET] = FtaConditionnementModel::getCalculPoidsEmballage($return[FtaConditionnementModel::COLIS_EMBALLAGE_NET], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE], $return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE]);
             //Calcul de la hauteur par palette
             $return[FtaConditionnementModel::PALETTE_EMBALLAGE_HAUTEUR] = FtaConditionnementModel::getCalculHauteurEmballagePalette($return[FtaConditionnementModel::COLIS_EMBALLAGE_HAUTEUR], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE], $rows[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT]);
             //Calcul du nombre total de Carton par palette:
             $return[FtaConditionnementModel::PALETTE_NOMBRE_TOTAL_PAR_CARTON] = FtaConditionnementModel::getCalculGenericMultiplication($return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE]);
             //                $return[FtaConditionnementModel::COLIS_EMBALLAGE] += FtaConditionnementModel::getCalculPoidsEmballage(
             //                                $rows[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT]
             //                                , $rows[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT]
             //                                , $rows[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT]
             //                );
             $return[FtaConditionnementModel::PALETTE_EMBALLAGE] += $rows[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT] / "1000";
             //Calcul du poids de l'emballage par palette
             $return[FtaConditionnementModel::PALETTE_EMBALLAGE] += $return[FtaConditionnementModel::COLIS_EMBALLAGE] / "1000" * ($return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE] * $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE]);
         }
         //Calcul Poids Brut  d'une Palette en Kg
         $return[FtaConditionnementModel::PALETTE_EMBALLAGE_BRUT] = FtaConditionnementModel::getCalculPoidsBrutEmballage($return[FtaConditionnementModel::PALETTE_EMBALLAGE_NET], $return[FtaConditionnementModel::PALETTE_EMBALLAGE]);
     } else {
         //Les Calculs de la table composant
         $arrayComposant = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaComposantModel::FIELDNAME_QUANTITE_FTA_COMPOSITION . "," . FtaComposantModel::FIELDNAME_POIDS_FTA_COMPOSITION . " FROM " . FtaComposantModel::TABLENAME . " WHERE " . FtaComposantModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " AND " . FtaComposantModel::FIELDNAME_IS_COMPOSITION_FTA_COMPOSANT . "=" . FtaConditionnementModel::EMBALLAGES_UVF);
         if ($arrayComposant) {
             foreach ($arrayComposant as $rowsComposant) {
                 // Calcul du Poids net du colis
                 $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] += FtaConditionnementModel::getCalculGenericMultiplication($rowsComposant[FtaComposantModel::FIELDNAME_QUANTITE_FTA_COMPOSITION], $rowsComposant[FtaComposantModel::FIELDNAME_POIDS_FTA_COMPOSITION]);
             }
         } else {
             $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = "0";
         }
         // Calcul du Poids net du colis
         $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] / "1000";
         //Conversion en g --> Kg
         if (!$return[FtaConditionnementModel::COLIS_EMBALLAGE_NET]) {
             $return[FtaConditionnementModel::COLIS_EMBALLAGE_NET] = FtaConditionnementModel::getCalculGenericMultiplication($return[FtaModel::FIELDNAME_POIDS_ELEMENTAIRE], $return[FtaModel::FIELDNAME_NOMBRE_UVC_PAR_CARTON]);
         }
         //Les calculs pour Emballages
         $array3 = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LONGUEUR_FTA_CONDITIONNEMENT . ", " . FtaConditionnementModel::FIELDNAME_LARGEUR_FTA_CONDITIONNEMENT . "  FROM " . FtaConditionnementModel::TABLENAME . ", " . AnnexeEmballageGroupeModel::TABLENAME . ", " . AnnexeEmballageGroupeTypeModel::TABLENAME . " " . " WHERE " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_FTA . "=" . $this->getKeyValue() . " " . " AND " . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . "=" . AnnexeEmballageGroupeTypeModel::EMBALLAGE_DU_COLIS . " " . " AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE . "=" . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::KEYNAME . " " . " AND ( " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NOT NULL AND " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . " OR " . "( " . FtaConditionnementModel::TABLENAME . "." . FtaConditionnementModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_TYPE . " IS NULL AND " . AnnexeEmballageGroupeModel::TABLENAME . "." . AnnexeEmballageGroupeModel::FIELDNAME_ID_ANNEXE_EMBALLAGE_GROUPE_CONFIGURATION . "=" . AnnexeEmballageGroupeTypeModel::TABLENAME . "." . AnnexeEmballageGroupeTypeModel::KEYNAME . ")" . "    ) " . " ORDER BY " . AnnexeEmballageGroupeTypeModel::FIELDNAME_NOM_ANNEXE_EMBALLAGE_GROUPE_TYPE);
         if ($array3) {
             foreach ($array3 as $rows3) {
                 //Calcul du nombre de colis par couche
                 $return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE] = $rows3[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT];
                 //Calcul du nombre de couche par palette
                 $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE] = $rows3[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT];
                 //Hauteur du colis
                 $return[FtaConditionnementModel::COLIS_EMBALLAGE_HAUTEUR] = $rows3[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT];
                 //                        $return[FtaConditionnementModel::COLIS_EMBALLAGE_TYPE_3] += $rows3[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT];
             }
         }
         //Calcul du poids brut du Colis en Kg
         $return[FtaConditionnementModel::COLIS_EMBALLAGE_BRUT] = FtaConditionnementModel::getCalculPoidsBrutEmballageColis($return[FtaConditionnementModel::COLIS_EMBALLAGE_NET], $return[FtaConditionnementModel::COLIS_EMBALLAGE]);
         //Calcul du Poids net par Palette
         $return[FtaConditionnementModel::PALETTE_EMBALLAGE_NET] = FtaConditionnementModel::getCalculPoidsEmballage($return[FtaConditionnementModel::COLIS_EMBALLAGE_NET], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE], $return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE]);
         //Calcul de la hauteur par palette
         $return[FtaConditionnementModel::PALETTE_EMBALLAGE_HAUTEUR] = FtaConditionnementModel::getCalculHauteurEmballagePalette($return[FtaConditionnementModel::COLIS_EMBALLAGE_HAUTEUR], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE], $rows[FtaConditionnementModel::FIELDNAME_HAUTEUR_FTA_CONDITIONNEMENT]);
         //Calcul du nombre total de Carton par palette:
         $return[FtaConditionnementModel::PALETTE_NOMBRE_TOTAL_PAR_CARTON] = FtaConditionnementModel::getCalculGenericMultiplication($return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE], $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE]);
         //                $return[FtaConditionnementModel::COLIS_EMBALLAGE] += FtaConditionnementModel::getCalculPoidsEmballage(
         //                                $rows[FtaConditionnementModel::FIELDNAME_POIDS_FTA_CONDITIONNEMENT]
         //                                , $rows[FtaConditionnementModel::FIELDNAME_QUANTITE_PAR_COUCHE_FTA_CONDITIONNEMENT]
         //                                , $rows[FtaConditionnementModel::FIELDNAME_NOMBRE_COUCHE_FTA_CONDITIONNEMENT]
         //                );
         //Calcul du poids de l'emballage par palette
         $return[FtaConditionnementModel::PALETTE_EMBALLAGE] += $return[FtaConditionnementModel::COLIS_EMBALLAGE] / "1000" * ($return[FtaConditionnementModel::PALETTE_NOMBRE_COLIS_PAR_COUCHE] * $return[FtaConditionnementModel::PALETTE_NOMBRE_DE_COUCHE]);
         //Calcul Poids Brut  d'une Palette en Kg
         $return[FtaConditionnementModel::PALETTE_EMBALLAGE_BRUT] = FtaConditionnementModel::getCalculPoidsBrutEmballage($return[FtaConditionnementModel::PALETTE_EMBALLAGE_NET], $return[FtaConditionnementModel::PALETTE_EMBALLAGE]);
     }
     return $return;
 }
$login = $globalConfig->getAuthenticatedUser()->getKeyValue();
$pass = $globalConfig->getAuthenticatedUser()->getDataField(UserModel::FIELDNAME_PASSWORD)->getFieldValue();
$id_type = $globalConfig->getAuthenticatedUser()->getDataField(UserModel::FIELDNAME_ID_TYPE)->getFieldValue();
$paramIdUser = Lib::getParameterFromRequest('sal_user');
$paramRech = Lib::getParameterFromRequest('rech');
$userModel = new UserModel($paramIdUser);
$userView = new UserView($userModel);
$userView->setIsEditable(TRUE);
identification1('salaries', $login, $pass, FALSE);
if ($paramRech == '1') {
    /* Recherche des infos sur le salarie */
    $arrayUserDetail = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT ' . UserModel::FIELDNAME_NOM . ',' . UserModel::FIELDNAME_PRENOM . ',' . UserModel::FIELDNAME_ID_CATSOPRO . ',' . UserModel::FIELDNAME_LIEU_GEO . ',' . UserModel::FIELDNAME_LOGIN . ',' . UserModel::FIELDNAME_PASSWORD . ',' . UserModel::FIELDNAME_MAIL . ',' . UserModel::FIELDNAME_DATE_CREATION_SALARIES . ' FROM ' . UserModel::TABLENAME . ' WHERE ' . UserModel::KEYNAME . '=' . $paramIdUser);
    if (!$arrayUserDetail) {
        $titre = "Utilisateur inexistant";
        $message = "La requete de recherche de l'ID salarie a echoue";
        Lib::showMessage($titre, $message);
    } else {
        foreach ($arrayUserDetail as $rowsUserDetail) {
            $userNom = $rowsUserDetail[UserModel::FIELDNAME_NOM];
            $userPrenom = $rowsUserDetail[UserModel::FIELDNAME_PRENOM];
            $userCatsopro = $rowsUserDetail[UserModel::FIELDNAME_ID_CATSOPRO];
            $userLieuGeo = $rowsUserDetail[UserModel::FIELDNAME_LIEU_GEO];
            $userLogin = $rowsUserDetail[UserModel::FIELDNAME_LOGIN];
            $userPass = $rowsUserDetail[UserModel::FIELDNAME_PASSWORD];
            $champ = 'date_creation_salaries';
            ${'sal_' . $champ} = $rowsUserDetail[UserModel::FIELDNAME_DATE_CREATION_SALARIES];
            //$sal_pass=mysql_result($result, 0, pass);
            $userMail = $rowsUserDetail[UserModel::FIELDNAME_MAIL];
        }
        $userNom = stripslashes($userNom);
        $userPrenom = stripslashes($userPrenom);
 /**
  * Correction d'une FTA
  * Pour une FTA données, correction d'un chapitre et dévalidation des processus suivants
  * @param type $paramIdFta
  * @param type $paramIdChapitre
  * @param type $option
  * @return int
  */
 public static function buildCorrectionChapitre($paramIdFta, $paramIdChapitre, $option)
 {
     $option['no_message_ecran'];
     //0=affichage à l'ecran, 1=rien
     $option['correction_fta_suivi_projet'];
     //Commentaire justifiant la correction du chapitre
     $option['mail_gestionnaire'];
     //Informe le gestionnaire de la Fta de la mise en correction de sa Fta
     $HtmlResult = new HtmlResult2();
     $globalConfig = new GlobalConfig();
     UserModel::checkUserSessionExpired($globalConfig);
     //Récupération des informations préalables
     //Nom de l'assistante de projet responsable:
     $idUser = $globalConfig->getAuthenticatedUser()->getKeyValue();
     $mailExpediteur = $globalConfig->getAuthenticatedUser()->getDataField(UserModel::FIELDNAME_MAIL)->getFieldValue();
     $nomPrenom = $globalConfig->getAuthenticatedUser()->getPrenomNom();
     $idFtaWorkflowStructure = FtaWorkflowStructureModel::getIdFtaWorkflowStructureByIdFtaAndIdChapitre($paramIdFta, $paramIdChapitre);
     $ftaWorkflowStructureModel = new FtaWorkflowStructureModel($idFtaWorkflowStructure, $paramIdChapitre);
     $idFtaProcessus = $ftaWorkflowStructureModel->getDataField(FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS)->getFieldValue();
     $idFtaWorkflow = $ftaWorkflowStructureModel->getDataField(FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW)->getFieldValue();
     $arrayFtaSuiviCorrection = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT ' . FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET . ',' . FtaSuiviProjetModel::FIELDNAME_NOTIFICATION_FTA_SUIVI_PROJET . ' FROM ' . FtaSuiviProjetModel::TABLENAME . ' WHERE ' . FtaModel::KEYNAME . '=' . $paramIdFta . ' AND ' . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . '=' . $paramIdChapitre . ' ');
     if ($arrayFtaSuiviCorrection) {
         foreach ($arrayFtaSuiviCorrection as $rowsFtaSuiviCorrection) {
             $current_correction_fta_suivi_projet = $rowsFtaSuiviCorrection[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET];
             $notificationFtaSuiviProjet = $rowsFtaSuiviCorrection[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET];
         }
     }
     //Intégration du commentaire de la correction
     if ($current_correction_fta_suivi_projet and $option[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET]) {
         $fullComment = $option[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET] . '\\n\\n' . $current_correction_fta_suivi_projet;
         $newCorrectionFtaSuiviProjet = FtaController::getComment("Correction d'une Fta", $nomPrenom, $fullComment);
     }
     //        $newCorrectionFtaSuiviProjet = mysql_real_escape_string($newCorrectionFtaSuiviProjet);
     $newCorrectionFtaSuiviProjet = str_replace("<br/>", "\n", $newCorrectionFtaSuiviProjet);
     //Dévalidation du chapitre en cours
     $reqDevelidationChapitre = " UPDATE " . FtaSuiviProjetModel::TABLENAME . " SET " . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . "=0, " . FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET . "=\"" . $newCorrectionFtaSuiviProjet . "\" " . " WHERE " . FtaModel::KEYNAME . "=" . $paramIdFta . " AND " . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "=" . $paramIdChapitre;
     DatabaseOperation::execute($reqDevelidationChapitre);
     /*
      * Mise à jour de la validation de l'échéance du processus
      * fonction non utilisé
      */
     // FtaProcessusDelaiModel::BuildFtaProcessusValidationDelai($paramIdFta, $idFtaProcessus, $idFtaWorkflow);
     //Dévalidation des processus suivants
     $return = FtaChapitreModel::buildDevalidationChapitre($paramIdFta, $idFtaProcessus, $HtmlResult);
     /**
      * Actualisation du pourcentage de validation de la Fta
      */
     $idFtaSuiviProjet = FtaSuiviProjetModel::getIdFtaSuiviProjetByIdFtaAndIdChapitre($paramIdFta, $paramIdChapitre);
     $modelFtaSuiviProjet = new FtaSuiviProjetModel($idFtaSuiviProjet);
     $modelFtaSuiviProjet->unsetSigned();
     $modelFtaSuiviProjet->saveToDatabase();
     //print_r($return['mail']);      //Tableau contenant les adresses emails des personnes concernées par la dévalidation
     if (count($return) > 1) {
         $return['processus'] = array_unique($return['processus']);
         //Tableau contenant les identifiants des processus dévalidés unique
     }
     if (is_string($return['processus'])) {
         $return['processus'] = array('processus' => $return['processus']);
     }
     //Informations
     if ($return['processus']) {
         foreach ($return['processus'] as $id_Fta_Processus) {
             $idFtaProcessus = $id_Fta_Processus;
             $arrayFtaProcessus = DatabaseOperation::convertSqlStatementWithoutKeyToArray('SELECT DISTINCT ' . FtaProcessusModel::FIELDNAME_NOM . ' FROM ' . FtaProcessusModel::TABLENAME . ', ' . FtaWorkflowStructureModel::TABLENAME . ' WHERE ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '=' . FtaProcessusModel::TABLENAME . '.' . FtaProcessusModel::KEYNAME . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . '=' . $idFtaProcessus . ' AND ' . FtaWorkflowStructureModel::TABLENAME . '.' . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . '=' . $idFtaWorkflow);
             if ($arrayFtaProcessus) {
                 foreach ($arrayFtaProcessus as $rowsFtaProcessus) {
                     $message .= $rowsFtaProcessus[FtaProcessusModel::FIELDNAME_NOM] . '<br>';
                 }
             }
         }
         if (!$message) {
             $message = 'Aucun processus n\'a été dévalidé.';
         }
         $titre = 'Liste des Processus dévalidés';
         if (!$option['no_message_ecran']) {
             Lib::showMessage($titre, $message, $redirection);
         }
         //Envoi des mails
         $show_din = FtaModel::showDin($paramIdFta);
         $sujetElements = $show_din;
         if ($return['mail']) {
             $return['mail'] = array_unique($return['mail']);
             foreach ($return['mail'] as $mail) {
                 $sujetmail = 'FTA/Correction: ' . $sujetElements;
                 $destinataire = $mail;
                 $expediteur = $nomPrenom . ' <' . $mailExpediteur . '>';
                 $text = 'Vos chapitres viennent d\'être dévalidés suite à une correction apportée par ' . $nomPrenom . '.\\n\\n' . 'OBJET DE LA CORRECTION:\\n' . '\\t' . stripslashes($option[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET]);
                 $typeMail = 'Correction';
                 if ($notificationFtaSuiviProjet) {
                     envoismail($sujetmail, $text, $destinataire, $expediteur, $typeMail);
                 }
             }
         }
         /**
          * Génération d'un mail informant le gestionnaire de la Fta
          */
         if ($option['mail_gestionnaire']) {
             $ftaModel = new FtaModel($paramIdFta);
             $idGestionnaire = $ftaModel->getModelCreateur()->getKeyValue();
             //Tableau des id intranet actions Fta
             $arrayAction = IntranetDroitsAccesModel::getArrayIdIntranetActionWithAccesRightsToFtaByUser($idGestionnaire);
             $checkDiffusion = FtaController::isValueInArray(IntranetNiveauAccesModel::NIVEAU_FTA_DIFFUSION, $arrayAction);
             if ($idGestionnaire != $idUser and $checkDiffusion) {
                 $mailGestionnaire = $ftaModel->getModelCreateur()->getDataField(UserModel::FIELDNAME_MAIL)->getFieldValue();
                 $sujetmail = 'FTA/Mise en Correction: ' . $sujetElements . ' par ' . $nomPrenom;
                 $destinataire = $mailGestionnaire;
                 $expediteur = $nomPrenom . ' <' . $mailExpediteur . '>';
                 $text = 'Une nouvelle version vient d\'être crée, la correction apportée par ' . $nomPrenom . ' est au sujet de :\\n' . '\\t' . stripslashes($option[FtaSuiviProjetModel::FIELDNAME_CORRECTION_FTA_SUIVI_PROJET]);
                 $typeMail = 'CorrectionValidation2Modification';
                 envoismail($sujetmail, $text, $destinataire, $expediteur, $typeMail);
             }
         }
     }
     //Fin du traitement des processus suivants
     return 1;
 }
 /**
  * On vérifie si la Fte qui va e^tre supprimé est utilisé
  */
 function checkFteFournisseurUsed()
 {
     $array = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . AnnexeEmballageModel::KEYNAME . "," . AnnexeEmballageModel::FIELDNAME_REFERENCE_FOURNISSEUR_ANNEXE_EMBALLAGE . " FROM " . AnnexeEmballageModel::TABLENAME . " WHERE " . AnnexeEmballageModel::FIELDNAME_ID_FTE_FOURNISSEUR . "=" . $this->getKeyValue() . " ORDER BY " . AnnexeEmballageModel::FIELDNAME_REFERENCE_FOURNISSEUR_ANNEXE_EMBALLAGE);
     if ($array) {
         //Liste des modèles concernés
         $liste = "";
         foreach ($array as $rows) {
             $liste .= $rows[AnnexeEmballageModel::FIELDNAME_REFERENCE_FOURNISSEUR_ANNEXE_EMBALLAGE] . "<br>";
         }
         //Averissement
         $titre = UserInterfaceMessage::FR_WARNING_FTE_FOURNISSEUR_TITLE;
         $message = UserInterfaceMessage::FR_WARNING_FTE_FOURNISSEUR . $liste;
         Lib::showMessage($titre, $message, $redirection);
     }
 }
 /**
  * Définit la liste de diffusion après la transition de "I" vers "V" d'une FTA données
  * 
  * Cette fonction retourne une liste d'adresse email distinctes sous la
  * forme du tableau suivant:
  * $return[mail]:       adresse email
  * $return[prenom_nom]: prénom et nom du destinataire
  * @param int $id_fta
  * @return array
  */
 public static function buildListeDiffusionTransition($id_fta)
 {
     $logTransition = "";
     //Déclaration des variables
     //Chargement des données Articles
     $req = "SELECT " . FtaModel::FIELDNAME_LISTE_CHAPITRE_MAJ_FTA . ", " . FtaModel::FIELDNAME_WORKFLOW . ", " . FtaModel::FIELDNAME_VERSION_DOSSIER_FTA . ", " . FtaModel::KEYNAME . ", " . FtaModel::FIELDNAME_SITE_PRODUCTION . " FROM " . FtaModel::TABLENAME . ",  " . FtaEtatModel::TABLENAME . " WHERE " . FtaModel::TABLENAME . "." . FtaModel::KEYNAME . "='" . $id_fta . "' " . " AND " . FtaEtatModel::TABLENAME . "." . FtaEtatModel::KEYNAME . "=" . FtaModel::TABLENAME . "." . FtaModel::FIELDNAME_ID_FTA_ETAT;
     $logTransition .= "\n\nLISTE DIFFUSION\n" . $req . "\n";
     $arrayFta = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
     foreach ($arrayFta as $rowsFta) {
         $rowsFta["liste_chapitre_maj_fta"];
         //Liste des chapitres ayant été coché pour effectuer la mise à jour de la fta
         $ok = 0;
         if ($rowsFta[FtaModel::FIELDNAME_LISTE_CHAPITRE_MAJ_FTA]) {
             //Détermination des chapitres du processus Initiateur du cycle de vie "I"
             $req = "SELECT DISTINCT " . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . " FROM " . FtaProcessusCycleModel::TABLENAME . " LEFT JOIN " . FtaProcessusCycleModel::TABLENAME . " as precedent " . " ON precedent." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . "=" . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . ", " . FtaWorkflowStructureModel::TABLENAME . " WHERE precedent." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . " IS NULL " . " AND " . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . "='I' " . " AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . "=" . $rowsFta[FtaModel::FIELDNAME_WORKFLOW] . " AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . "=" . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . " AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . "=" . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_WORKFLOW;
             $logTransition .= "\n\n" . $req . "\n";
             $arrayIdChapitreInitiateur = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
             //L'un des chapitres initiateurs est-il dans la liste des chapitres mis à jour sur la fta ?
             foreach ($arrayIdChapitreInitiateur as $rowsInitiateur) {
                 if (strstr($rowsFta[FtaModel::FIELDNAME_LISTE_CHAPITRE_MAJ_FTA], $rowsInitiateur[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE] . ";")) {
                     $ok = 1;
                 }
             }
         } else {
             $ok = 1;
             //Diffusion globale
         }
         if ($rowsFta[FtaModel::FIELDNAME_VERSION_DOSSIER_FTA] == 0 or $ok == 1) {
             //Log de la diffusion globale
             $logTransition .= "\n\nDiffusion Globale Activée";
         } else {
             //Log de la diffusion globale
             $logTransition .= "\n\nDiffusion Globale Désactivée";
         }
         $arrayIdIntranetActions = DatabaseOperation::convertSqlStatementWithoutKeyToArray(' SELECT ' . FtaActionSiteModel::TABLENAME . '.' . FtaActionSiteModel::FIELDNAME_ID_INTRANET_ACTIONS . ' FROM ' . FtaActionSiteModel::TABLENAME . ' WHERE ' . FtaActionSiteModel::FIELDNAME_ID_SITE . '=' . $rowsFta[FtaModel::FIELDNAME_SITE_PRODUCTION] . ' AND ' . FtaActionSiteModel::FIELDNAME_ID_FTA_WORKFLOW . ' =' . $rowsFta[FtaModel::FIELDNAME_WORKFLOW]);
         if ($arrayIdIntranetActions) {
             foreach ($arrayIdIntranetActions as $rowsIdIntranetActions) {
                 $IdIntranetActions[] = $rowsIdIntranetActions[IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS];
             }
         }
         /**
          * Il est impératif d'avoir une condition Where dans le requête de diffusion
          * Si ce n'est pas le cas, la diffusion s'étend à l'ensemble des utiisateurs du système Intranet !
          * Il est necessaire d'interdire celà.
          */
         if ($IdIntranetActions) {
             /**
              * Liste des utilisateurs ayant le droits de diffusion sur le module Fta
              */
             $arrayListeDiffusion = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " FROM " . UserModel::TABLENAME . ", " . IntranetDroitsAccesModel::TABLENAME . " WHERE " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " = " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_USER . " AND " . UserModel::TABLENAME . "." . UserModel::FIELDNAME_ACTIF . " ='" . UserModel::USER_ACTIF . "' " . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_MODULES . " = " . IntranetModulesModel::ID_MODULES_FTA . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . " = " . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE . ' AND ' . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . '=' . IntranetNiveauAccesModel::NIVEAU_FTA_DIFFUSION);
             foreach ($arrayListeDiffusion as $value) {
                 $idUser[] = $value[UserModel::KEYNAME];
             }
             //Création de la liste des destinataires
             $req = "SELECT DISTINCT " . UserModel::TABLENAME . "." . UserModel::KEYNAME . ", " . UserModel::FIELDNAME_NOM . ", " . UserModel::FIELDNAME_PRENOM . ", " . UserModel::FIELDNAME_MAIL . " FROM " . UserModel::TABLENAME . ", " . IntranetDroitsAccesModel::TABLENAME . ", " . IntranetActionsModel::TABLENAME . " WHERE " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " = " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_USER . " AND " . UserModel::TABLENAME . "." . UserModel::FIELDNAME_ACTIF . " ='" . UserModel::USER_ACTIF . "' " . " AND ( 0 " . UserModel::AddIdUser($idUser) . ')' . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . " = " . IntranetActionsModel::TABLENAME . "." . IntranetActionsModel::KEYNAME . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . " = " . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE . ' AND ( 0 ' . IntranetActionsModel::addIdIntranetAction($IdIntranetActions) . ')';
             $logTransition .= "\n\n" . $req . "\nFIN DIFFUSION\n";
             $r_liste_destinataire = DatabaseOperation::convertSqlStatementWithoutKeyToArray($req);
             foreach ($r_liste_destinataire as $rows_destinataire) {
                 $return[$rows_destinataire[UserModel::KEYNAME]]["mail"] = $rows_destinataire[UserModel::FIELDNAME_MAIL];
                 $return[$rows_destinataire[UserModel::KEYNAME]]["prenom_nom"] = $rows_destinataire[UserModel::FIELDNAME_NOM] . " " . $rows_destinataire[UserModel::FIELDNAME_PRENOM];
             }
             $reqConsultation = "SELECT DISTINCT " . UserModel::TABLENAME . "." . UserModel::KEYNAME . ", " . UserModel::FIELDNAME_NOM . ", " . UserModel::FIELDNAME_PRENOM . ", " . UserModel::FIELDNAME_MAIL . " FROM " . UserModel::TABLENAME . ", " . IntranetDroitsAccesModel::TABLENAME . ", " . IntranetActionsModel::TABLENAME . ", " . IntranetNiveauAccesModel::TABLENAME . " WHERE " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " = " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_USER . " AND " . UserModel::TABLENAME . "." . UserModel::FIELDNAME_ACTIF . " ='" . UserModel::USER_ACTIF . "' " . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . " = " . IntranetActionsModel::TABLENAME . "." . IntranetActionsModel::KEYNAME . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_MODULES . " = " . IntranetActionsModel::TABLENAME . "." . IntranetActionsModel::FIELDNAME_MODULE_INTRANET_ACTIONS . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . " = " . IntranetNiveauAccesModel::TABLENAME . "." . IntranetNiveauAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_MODULES . " = " . IntranetNiveauAccesModel::TABLENAME . "." . IntranetNiveauAccesModel::FIELDNAME_ID_INTRANET_MODULES . " AND ((" . UserModel::FIELDNAME_LIEU_GEO . "=" . $rowsFta[FtaModel::FIELDNAME_SITE_PRODUCTION] . " AND " . IntranetActionsModel::FIELDNAME_NOM_INTRANET_ACTIONS . "='" . IntranetActionsModel::NAME_DIFFUSION_FTA . "' AND " . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . "=" . IntranetNiveauAccesModel::DIFFUSION_FTA_OUI_LIEU_RATTACHEMENT_VALUE . ") OR (" . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . "=" . IntranetNiveauAccesModel::DIFFUSION_FTA_OUI_TOUT_VALUE . " AND " . IntranetActionsModel::FIELDNAME_NOM_INTRANET_ACTIONS . "='" . IntranetActionsModel::NAME_DIFFUSION_FTA . "'))" . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_USER . " NOT IN (" . " SELECT DISTINCT " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " FROM " . UserModel::TABLENAME . ", " . IntranetDroitsAccesModel::TABLENAME . " WHERE " . UserModel::TABLENAME . "." . UserModel::KEYNAME . " = " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_USER . " AND " . UserModel::TABLENAME . "." . UserModel::FIELDNAME_ACTIF . " ='" . UserModel::USER_ACTIF . "' " . " AND " . IntranetDroitsAccesModel::TABLENAME . "." . IntranetDroitsAccesModel::FIELDNAME_ID_INTRANET_ACTIONS . " = " . IntranetNiveauAccesModel::NIVEAU_FTA_MODIFICATION . " AND " . IntranetDroitsAccesModel::FIELDNAME_NIVEAU_INTRANET_DROITS_ACCES . "=" . IntranetNiveauAccesModel::NIVEAU_GENERIC_TRUE . ")";
             $r_liste_destinataire_consultation = DatabaseOperation::convertSqlStatementWithoutKeyToArray($reqConsultation);
             if ($r_liste_destinataire_consultation) {
                 foreach ($r_liste_destinataire_consultation as $rows_destinataire_consultation) {
                     $return[$rows_destinataire_consultation[UserModel::KEYNAME]]["mail"] = $rows_destinataire_consultation[UserModel::FIELDNAME_MAIL];
                     $return[$rows_destinataire_consultation[UserModel::KEYNAME]]["prenom_nom"] = $rows_destinataire_consultation[UserModel::FIELDNAME_NOM] . " " . $rows_destinataire_consultation[UserModel::FIELDNAME_PRENOM];
                 }
             }
         } else {
             //Erreur critique, risque de diffusion généralisée à l'ensemble de l'Intranet
             $titre = "Erreur critique dans la liste de diffusion";
             $message = "L'ensemble des utilisateurs de l'Intranet était visé par cette diffusion.<br>" . "L'envoi des mails d'information vient d'être avorté mais" . "Le reste du traitement continue.<br><br>" . "<pre>" . $logTransition . "</pre>";
             $redirection = "";
             Lib::showMessage($titre, $message, $redirection);
             $return = 0;
         }
         $return["log"] = $logTransition;
     }
     return $return;
 }