Exemplo n.º 1
0
 /**
 * Cette fonction permet de dupliquer une Fiche Technique Article pour faire les actions suivantes:
 
  $action
  -------
  "totale":       Créer un nouveau dossier en recopiant l'intégralité de la fiche d'origine
  "selective":(pas géré)    Créer un nouveau dossier en ne recopiant que certains processus
  "version":      Créer une nouvelle fiche au sein du même dossier
 
  $option:
  --------
  - Dans le cas d'une duplication "selective", cette variable contient le tableau des id_processus des processus sélectionnés
  - Dans le cas d'une duplication "version", cette variable contient le nouvel état de la FTA (I, A, ...).
  Si vide, alors l'état par défaut sera de type I, initialisation
 
  Retour de la fonction:
  ----------------------
  La fonction renvoi l'id_fta nouvellement créé.
 * @param int $paramIdFta
 * @param string $paramAction
 * @param array $paramOption
 * @param int $paramIdFtaWorkflow
 * @return int
 */
 public static function buildDuplicationFta($paramIdFta, $paramAction, $paramOption, $paramIdFtaWorkflow)
 {
     /*         * ****************************************
               Déclaration et initialisation des variables
              * **************************************** */
     $globalConfig = new GlobalConfig();
     UserModel::checkUserSessionExpired($globalConfig);
     $idUser = $globalConfig->getAuthenticatedUser()->getKeyValue();
     $ftaModelOrig = new FtaModel($paramIdFta);
     //Identifiant de la fiche technique article à dupliquer
     if ($paramOption["id_version_dossier_fta"]) {
         $idFtaVersion = $paramOption["id_version_dossier_fta"];
     } else {
         $idFtaVersion = $ftaModelOrig->getDataField(FtaModel::FIELDNAME_VERSION_DOSSIER_FTA)->getFieldValue();
     }
     $idFtaOriginal = $paramIdFta;
     //Sauvegarde de la clef initiale.
     $paramOption["abreviation_etat_destination"];
     //Etat vers lequel doit aller la FTA
     $paramOption["selection_chapitre"];
     //Tableau contenant les id_fta_chapitre des chapitres à corriger
     $paramOption["designation_commerciale_fta"];
     //Nouveau nom commerciale de la FTA
     $paramOption["site_de_production"];
     //Nouveau site de production de la FTA
     $paramOption["nouveau_maj_fta"];
     //Nouveau commentaire de la nouvelle FTA
     $paramOption["id_version_dossier_fta"];
     //Id dossier version maximun
     switch ($paramAction) {
         case "version":
             //récupération de l'identifiant de l'état
             if ($paramOption["abreviation_etat_destination"] == "") {
                 //Si aucun Etat n'a été donné, l'état   Intialisation est choisi par défaut
                 $paramOption["abreviation_etat_destination"] = "I";
             }
             $arrayIdFtaEtat = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaEtatModel::KEYNAME . " FROM " . FtaEtatModel::TABLENAME . " WHERE " . FtaEtatModel::FIELDNAME_ABREVIATION . "='" . $paramOption["abreviation_etat_destination"] . "'");
             foreach ($arrayIdFtaEtat as $value) {
                 $idFtaEtatNew = $value[FtaEtatModel::KEYNAME];
             }
     }
     /*         * *****************************************************************************
               Traitement Principal
              * ****************************************************************************** */
     /*         * *************************
               Traitement de la table "fta"
              * ************************* */
     $idFtaNew = FtaModel::duplicationIdFta($paramIdFta);
     //Récupération de la nouvelle clef
     /*
      * Enregsitrement des mises à jour
      */
     if (!$paramOption["site_de_production"]) {
         $paramOption["site_de_production"] = "NULL";
     }
     DatabaseOperation::execute("UPDATE " . FtaModel::TABLENAME . " SET " . FtaModel::FIELDNAME_DATE_CREATION . "='" . date("Y-m-d") . "', " . FtaModel::FIELDNAME_ACTIF . "=" . 0 . ", " . FtaModel::FIELDNAME_CODE_ARTICLE . "=" . 'NULL' . ", " . FtaModel::FIELDNAME_WORKFLOW . "=" . $paramIdFtaWorkflow . ", " . FtaModel::FIELDNAME_SITE_PRODUCTION . "=" . $paramOption["site_de_production"] . " WHERE " . FtaModel::KEYNAME . "=" . $idFtaNew);
     switch ($paramAction) {
         //Suivant l'action, certaines données sont à mettre à jour
         /*
          * //Création d'un nouveau dossier
          */
         case "totale":
             DatabaseOperation::execute("UPDATE " . FtaModel::TABLENAME . " SET " . FtaModel::FIELDNAME_DOSSIER_FTA . "=" . $idFtaNew . ", " . FtaModel::FIELDNAME_VERSION_DOSSIER_FTA . "=" . 0 . ", " . FtaModel::FIELDNAME_ID_FTA_ETAT . "=" . 1 . ", " . FtaModel::FIELDNAME_ARTICLE_AGROLOGIC . "=" . 0 . ", " . FtaModel::FIELDNAME_DATE_ECHEANCE_FTA . "=" . "0000-00-00" . ", " . FtaModel::FIELDNAME_DESIGNATION_COMMERCIALE . "=\"" . $paramOption["designation_commerciale_fta"] . "\", " . FtaModel::FIELDNAME_NOM_ABREGE . "=" . "NULL" . ", " . FtaModel::FIELDNAME_LIBELLE . "=" . "NULL" . ", " . FtaModel::FIELDNAME_CODE_ARTICLE_LDC . "=" . "0" . ", " . FtaModel::FIELDNAME_EAN_COLIS . "=" . "0" . ", " . FtaModel::FIELDNAME_EAN_UVC . "=" . "0" . ", " . FtaModel::FIELDNAME_EAN_PALETTE . "=" . "0" . ", " . FtaModel::FIELDNAME_POURCENTAGE_AVANCEMENT . "=" . "\"0%\"" . ", " . FtaModel::FIELDNAME_CREATEUR . "=" . $idUser . ", " . FtaModel::FIELDNAME_LISTE_ID_FTA_ROLE . "=" . "NULL" . " WHERE " . FtaModel::KEYNAME . "=" . $idFtaNew);
             break;
             /*
              *  //Création d'une nouvelle version de la FTA
              */
         /*
          *  //Création d'une nouvelle version de la FTA
          */
         case "version":
             $idFtaVersion = $idFtaVersion + 1;
             DatabaseOperation::execute("UPDATE " . self::TABLENAME . " SET " . self::FIELDNAME_VERSION_DOSSIER_FTA . "=\"" . $idFtaVersion . "\", " . self::FIELDNAME_ID_FTA_ETAT . "=\"" . $idFtaEtatNew . "\", " . self::FIELDNAME_DATE_ECHEANCE_FTA . "=\"" . $paramOption["date_echeance_fta"] . "\" WHERE " . self::KEYNAME . "=" . $idFtaNew);
             break;
     }
     /*         * ***************************
               Traitement des tables esclaves
              * *************************** */
     /*         * ******************************************************************************************
               Les tables esclaves sont des tables contenant le champ "id_fta" dans la liste de leurs champs
              * ****************************************************************************************** */
     FtaComposantModel::duplicateFtaComposantByIdFta($idFtaOriginal, $idFtaNew);
     FtaConditionnementModel::duplicateFtaConditionnementByIdFta($idFtaOriginal, $idFtaNew);
     FtaSuiviProjetModel::duplicateFtaSuiviProjetByIdFta($idFtaOriginal, $idFtaNew);
     // ClassificationFtaModel::DuplicateFtaClassificationByIdFta($idFtaOriginal, $idFtaNew);
     /*
      - Récupérér les composants de la nouvelle FTA
      - Pour chaque produit (id_fta_nomenclature)
      - Récupérer l'identifiant de la version précédente (noté: [last_id_fta_nomenclature])
      - Sur la FTA précédente, retrouver l'identifiant composant associé à cette ancienne version du produit (noté: [last_id_fta_composant])
      - Sur le nouvelle FTA, retrouver l'identifiant composant associé à ce [last_id_fta_composant]
      - Sur ce nouveau composant, remplacer l'association nomenclature par [id_fta_nomenclature]
     */
     /*         * *****************************************************************************
               Traitement POST
              * ****************************************************************************** */
     switch ($paramAction) {
         case "version":
             $newAbreviationFtaEtat = $paramOption["abreviation_etat_destination"];
             //Nouvel état
             //Récupération de la liste des chapitres a dévalider
             $selection_chapitre = $paramOption["selection_chapitre"];
             $paramOption["no_message_ecran"] = 1;
             $paramOption["mail_gestionnaire"] = 1;
             if ($selection_chapitre) {
                 foreach ($selection_chapitre as $id_fta_chapitre) {
                     //Correction des chapitres
                     $paramOption["correction_fta_suivi_projet"] = $paramOption["nouveau_maj_fta"];
                     FtaChapitreModel::buildCorrectionChapitre($idFtaNew, $id_fta_chapitre, $paramOption);
                 }
             }
             /*
              * Cette fonction est mise en pause car elle nécessite la création de processus cycle pour chaque workflow,
              * questionnement à boris.
              */
             if ($newAbreviationFtaEtat == FtaEtatModel::ETAT_ABREVIATION_VALUE_MODIFICATION and !$selection_chapitre) {
                 //Suppression des validations
                 //Recherche des chapitres affectés au cycle de vie correspondant à l'état
                 $arrayCycle = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . "," . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . " FROM " . FtaProcessusCycleModel::TABLENAME . ", " . FtaWorkflowStructureModel::TABLENAME . " WHERE " . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . "='" . $newAbreviationFtaEtat . "' 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 . " AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . "=" . $paramIdFtaWorkflow);
                 if ($arrayCycle) {
                     //Si ce cycle de vie necessite l'intervention de processus, alors                            //On supprime la validation du suivi de projet des processus concernés
                     $req = "DELETE FROM " . FtaSuiviProjetModel::TABLENAME . " WHERE ";
                     $or = " ";
                     foreach ($arrayCycle as $rowsCycle) {
                         //Vérification qu'il ne s'agissent pas du processus initiateur du nouveau cycle de vie
                         $arrayFirst = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaSuiviProjetModel::KEYNAME . " FROM " . FtaProcessusCycleModel::TABLENAME . ", " . FtaWorkflowStructureModel::TABLENAME . ", " . FtaSuiviProjetModel::TABLENAME . " WHERE " . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . "='" . $newAbreviationFtaEtat . "' AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_PROCESSUS . "=" . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . " AND " . FtaSuiviProjetModel::TABLENAME . "." . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "=" . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . " AND " . FtaSuiviProjetModel::TABLENAME . "." . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "' " . " AND " . FtaProcessusCycleModel::TABLENAME . "." . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_NEXT . "='" . $rowsCycle[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT] . "' ");
                         if ($arrayFirst) {
                             //Si il ne s'agit pas du chapitre appartenant au processus initial, on supprime
                             $req .= $or . "(" . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "='" . $rowsCycle[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE] . "' AND " . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "') ";
                             $or = " OR ";
                         } else {
                             //Sinon, Supprimer uniquement la validation et on notifie les chapitres
                             $req_update = "UPDATE " . FtaSuiviProjetModel::TABLENAME . " SET " . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . "=''" . ", " . FtaSuiviProjetModel::FIELDNAME_DATE_VALIDATION_SUIVI_PROJET . "=''" . ", " . FtaSuiviProjetModel::FIELDNAME_DATE_DEMARRAGE_CHAPITRE_FTA_SUIVI_PROJET . "=''" . ", " . FtaSuiviProjetModel::FIELDNAME_NOTIFICATION_FTA_SUIVI_PROJET . "='1' " . " WHERE (" . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "='" . $rowsCycle[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE] . "' AND " . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "') ";
                             DatabaseOperation::execute($req_update);
                         }
                     }
                     DatabaseOperation::execute($req);
                 }
                 //Fin de Recherche des notifications relatives aux processus trouvées
             }
             //Fin de la dévalidation suite à une initialisation
             //Vérrouillage des chapitre ne correspondant pas au cycle de vie.
             if ($newAbreviationFtaEtat == "P") {
                 //Condition where
                 $where = "";
                 //Récupération des chapitres concernés par ce cycle de vie
                 $arrayCycle2 = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . " FROM " . FtaProcessusCycleModel::TABLENAME . " WHERE " . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . " = '" . $newAbreviationFtaEtat . "' ");
                 foreach ($arrayCycle2 as $rowsCycle2) {
                     $where .= " AND " . FtaProcessusModel::TABLENAME . "." . FtaProcessusModel::KEYNAME . " <> " . $rowsCycle2[FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT];
                 }
                 //Récupération des chapitres à vérrouiller
                 $arrayChapitreVerrouiller = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT  " . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . " FROM " . FtaProcessusModel::TABLENAME . ", " . FtaWorkflowStructureModel::TABLENAME . " WHERE ( " . FtaProcessusModel::TABLENAME . "." . FtaProcessusModel::KEYNAME . " = " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE . " ) " . " AND ( (  " . FtaProcessusModel::TABLENAME . "." . FtaProcessusModel::KEYNAME . " <>1 {$where} ) )" . " AND " . FtaWorkflowStructureModel::TABLENAME . "." . FtaWorkflowStructureModel::FIELDNAME_ID_FTA_WORKFLOW . " = " . $paramIdFtaWorkflow);
                 foreach ($arrayChapitreVerrouiller as $rowsChapitreVerrouiller) {
                     //Le suivi existe-il déjà ?
                     $arrayFtaSuiviProjet = DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT " . FtaSuiviProjetModel::KEYNAME . ", " . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . " FROM " . FtaSuiviProjetModel::TABLENAME . " WHERE " . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "' AND " . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "='" . $rowsChapitreVerrouiller[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE] . "' ");
                     if ($arrayFtaSuiviProjet) {
                         //Mise à jour de l'existant si il n'y a pas de vérrou existant
                         foreach ($arrayFtaSuiviProjet as $rowsFtaSuiviProjet) {
                             if (!$rowsFtaSuiviProjet[FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET]) {
                                 $idFtaSuiviProjet = $rowsFtaSuiviProjet[FtaSuiviProjetModel::KEYNAME];
                                 $req = "UPDATE " . FtaSuiviProjetModel::TABLENAME . "SET " . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . "='-1' " . "WHERE " . FtaSuiviProjetModel::KEYNAME . "='" . $idFtaSuiviProjet . "' ";
                                 DatabaseOperation::execute($req);
                             }
                         }
                     } else {
                         //Création des suivi
                         $req = "INSERT " . FtaSuiviProjetModel::TABLENAME . " SET " . FtaSuiviProjetModel::FIELDNAME_ID_FTA_CHAPITRE . "='" . $rowsChapitreVerrouiller[FtaWorkflowStructureModel::FIELDNAME_ID_FTA_CHAPITRE] . "', " . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "', " . FtaSuiviProjetModel::FIELDNAME_SIGNATURE_VALIDATION_SUIVI_PROJET . "='-1' ";
                         DatabaseOperation::execute($req);
                     }
                 }
             }
             break;
             //Fin du post-traitement dans le cas d'une duplication de type "version"
         //Fin du post-traitement dans le cas d'une duplication de type "version"
         case "totale":
             $newAbreviationFtaEtat = $paramOption["abreviation_etat_destination"];
             //Nouvel état
             //Suppression de tout le suivi de dossier
             $req = "DELETE FROM " . FtaSuiviProjetModel::TABLENAME . " WHERE " . FtaSuiviProjetModel::TABLENAME . "." . FtaSuiviProjetModel::FIELDNAME_ID_FTA . "='" . $idFtaNew . "' ";
             DatabaseOperation::execute($req);
             break;
     }
     //Fin du post-traitement dans le cas d'une duplication de type "totale"
     return $idFtaNew;
 }