/[openfoncier]/trunk/obj/task.class.php
ViewVC logotype

Diff of /trunk/obj/task.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 12432 by softime, Thu May 12 16:27:24 2022 UTC revision 12433 by softime, Thu Jun 23 17:40:44 2022 UTC
# Line 192  class task extends task_gen { Line 192  class task extends task_gen {
192              "CONCAT_WS(' ', to_char(task.creation_date, 'DD/MM/YYYY'), task.creation_time) AS date_creation",              "CONCAT_WS(' ', to_char(task.creation_date, 'DD/MM/YYYY'), task.creation_time) AS date_creation",
193              'last_modification_date',              'last_modification_date',
194              'last_modification_time',              'last_modification_time',
195                "CONCAT_WS(' ', to_char(task.last_modification_date, 'DD/MM/YYYY'), task.last_modification_time) AS date_modification",
196                "comment",
197              "json_payload",              "json_payload",
198              "timestamp_log",              "timestamp_log",
199                "timestamp_log AS timestamp_log_hidden",
200              "category",              "category",
201          );          );
202      }      }
# Line 206  class task extends task_gen { Line 209  class task extends task_gen {
209    
210          // ALL          // ALL
211          $form->setType("category", "hidden");          $form->setType("category", "hidden");
212            $form->setType("timestamp_log_hidden", "hidden");
213    
214          // MODE CREER          // MODE CREER
215          if ($maj == 0 || $crud == 'create') {          if ($maj == 0 || $crud == 'create') {
216                $form->setType("type", "select");
217              $form->setType("state", "select");              $form->setType("state", "select");
218              $form->setType("stream", "select");              $form->setType("stream", "select");
219              $form->setType("json_payload", "textarea");              $form->setType("json_payload", "textarea");
220          }          }
221          // MODE MODIFIER          // MODE MODIFIER
222          if ($maj == 1 || $crud == 'update') {          if ($maj == 1 || $crud == 'update') {
223                $form->setType("task", "hiddenstatic");
224              $form->setType("state", "select");              $form->setType("state", "select");
225              $form->setType("stream", "select");              $form->setType("stream", "hiddenstatic");
226              $form->setType("json_payload", "jsonprettyprint");              $form->setType("json_payload", "jsonprettyprint");
227                $form->setType("timestamp_log", "jsontotab");
228                $form->setType("type", "hiddenstatic");
229              $form->setType("creation_date", "hidden");              $form->setType("creation_date", "hidden");
230              $form->setType("creation_time", "hidden");              $form->setType("creation_time", "hidden");
231              $form->setType("date_creation", "static");              $form->setType("object_id", "hiddenstatic");
232                $form->setType("dossier", "hiddenstatic");
233                $form->setType("date_creation", "hiddenstatic");
234              $form->setType("last_modification_date", "hidden");              $form->setType("last_modification_date", "hidden");
235              $form->setType("last_modification_time", "hidden");              $form->setType("last_modification_time", "hidden");
236                $form->setType("date_modification", "static");
237          }          }
238          // MODE CONSULTER          // MODE CONSULTER
239          if ($maj == 3 || $crud == 'read') {          if ($maj == 3 || $crud == 'read') {
240                $form->setType("state", "selecthiddenstatic");
241                $form->setType("stream", "selecthiddenstatic");
242              $form->setType('dossier', 'link');              $form->setType('dossier', 'link');
243              $form->setType('json_payload', 'jsonprettyprint');              $form->setType('json_payload', 'jsonprettyprint');
244                $form->setType("type", "selecthiddenstatic");
245              $form->setType("creation_date", "hidden");              $form->setType("creation_date", "hidden");
246              $form->setType("creation_time", "hidden");              $form->setType("creation_time", "hidden");
247              $form->setType("date_creation", "static");              $form->setType("date_creation", "static");
248              $form->setType("last_modification_date", "hidden");              $form->setType("last_modification_date", "hidden");
249              $form->setType("last_modification_time", "hidden");              $form->setType("last_modification_time", "hidden");
250                $form->setType("date_modification", "static");
251                $form->setType("timestamp_log", "jsontotab");
252          }          }
   
253      }      }
254    
255        function stateTranslation ($currentState) {
256            switch ($currentState){
257                case "draft":
258                    return __('brouillon');
259                    break;
260                case "new":
261                    return __('à traiter');
262                    break;
263                case "pending":
264                    return __('en cours');
265                    break;
266                case "done":
267                    return __('terminé');
268                    break;
269                case "archived":
270                    return __('archivé');
271                    break;
272                case "error":
273                    return __('erreur');
274                    break;
275                case "debug":
276                    return __('debug');
277                    break;
278                case "canceled":
279                    return __('annulé');
280                    break;
281            }
282        }
283      /**      /**
284       *       *
285       */       */
286      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
287          if($maj < 2) {          if($maj <= 3) {
   
288              $contenu = array();              $contenu = array();
289              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED') as $key) {              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED') as $key) {
290                  $const_name = 'STATUS_'.$key;                  $const_name = 'STATUS_'.$key;
291                  $const_value = constant("self::$const_name");                  $const_value = constant("self::$const_name");
292                  $contenu[0][] = $const_value;                  $contenu[0][] = $const_value;
293                  $contenu[1][] = $const_value;  
294    
295                    $contenu[1][] = $this->stateTranslation($const_value);
296    
297              }              }
298    
299              $form->setSelect("state", $contenu);              $form->setSelect("state", $contenu);
300    
301              $contenu_stream =array();              $contenu_stream =array();
302              $contenu_stream[0][0]="input";              $contenu_stream[0][0]="input";
303              $contenu_stream[1][0]=_('input');              $contenu_stream[1][0]=__('input');
304              $contenu_stream[0][1]="output";              $contenu_stream[0][1]="output";
305              $contenu_stream[1][1]=_('output');              $contenu_stream[1][1]=__('output');
306              $form->setSelect("stream", $contenu_stream);              $form->setSelect("stream", $contenu_stream);
307    
308                $tab_type = array_unique(array_merge(self::TASK_TYPE_SI, self::TASK_TYPE_SC));
309    
310                foreach ($tab_type as $type) {
311    
312                    $contenu_type[0][] = $type;
313    
314                    switch ($type) {
315                        case "creation_DA":
316                            $value_type = __('Création DA');
317                            break;
318                        case "create_DI":
319                            $value_type = __('Création demande');
320                            break;
321                        case "creation_DI":
322                            $value_type = __('Création DI');
323                            break;
324                        case "modification_DA":
325                            $value_type = __('Modification DA');
326                            break;
327                        case "modification_DI":
328                            $value_type = __('Modification DI');
329                            break;
330                        case "ajout_piece":
331                            $value_type = __('Ajout pièce (sortant)');
332                            break;
333                        case "add_piece":
334                            $value_type = __('Ajout pièce (entrant)');
335                            break;
336                        case "depot_DI":
337                            $value_type = __('Dépôt DI');
338                            break;
339                        case "qualification_DI":
340                            $value_type = __('Qualification DI');
341                            break;
342                        case "creation_consultation":
343                            $value_type = __('Création consultation');
344                            break;
345                        case "decision_DI":
346                            $value_type = __('Décision DI');
347                            break;
348                        case "envoi_CL":
349                            $value_type = __('Envoi contrôle de légalité');
350                            break;
351                        case "pec_metier_consultation":
352                            $value_type = __('PeC consultation');
353                            break;
354                        case "avis_consultation":
355                            $value_type = __('Avis');
356                            break;
357                        case "prescription":
358                            $value_type = __('Prescription');
359                            break;
360                        case "create_DI_for_consultation":
361                            $value_type = __('Création DI pour consultation');
362                            break;
363                        case "create_message":
364                            $value_type = __('Message');
365                            break;
366                        case "notification_recepisse":
367                            $value_type = __('Notification récépissé');
368                            break;
369                        case "notification_instruction":
370                            $value_type = __('Notification instruction');
371                            break;
372                        case "notification_decision":
373                            $value_type = __('Notification décision');
374                            break;
375                        case "notification_service_consulte":
376                            $value_type = __('Notification service consulté');
377                            break;
378                        case "notification_tiers_consulte":
379                            $value_type = __('Notification tiers consulté');
380                            break;
381                        case "completude_DI":
382                            $value_type = __('complétude DI');
383                            break;
384                        case "incompletude_DI":
385                            $value_type = __('incomplétude DI');
386                            break;
387                    }
388    
389                    $contenu_type[1][] = $value_type;
390                }
391    
392                $form->setselect('type', $contenu_type);
393          }          }
394    
395          if ($maj == 3) {          if ($maj == 3) {
396              if ($this->getVal('stream') == 'output') {              // Récupération du numéro du dossier si il n'est pas renseigné dans la tâche
397                  $inst_dossier = $this->f->get_inst__om_dbform(array(              if ($form->val['dossier'] == '' || $form->val['dossier'] == null) {
398                      "obj" => "dossier",                  // Récupération de la payload de la taĉhe.
399                      "idx" => $form->val['dossier'],                  // Si la tâche est une tâche input la payload est associée à la tâche.
400                  ));                  // Si la tâche est une tâche en output la payload est "calculé" à l'ouverture
401                    // du formulaire.
402                    if ($this->getVal('stream') == 'input') {
403                        $json_payload = json_decode($this->getVal('json_payload'), true);
404                    } else {
405                        $json_payload = json_decode($form->val['json_payload'], true);
406                    }
407                    // A partir de la payload de la tâche ont récupère les externals uid
408                    // Si un external uid de DI (dossier) existe ont le récupère et on stocke le numéro
409                    // pour l'afficher sur le formulaire.
410                    // Si l'external UID du DI n'existe pas on récupère celui du DA
411                    $external_uid = '';
412                    if (array_key_exists('external_uids', $json_payload)
413                        && array_key_exists('dossier', $json_payload['external_uids'])
414                    ) {
415                        $external_uid = $json_payload['external_uids']['dossier'];
416                    } elseif (array_key_exists('external_uids', $json_payload)
417                        && array_key_exists('dossier', $json_payload['external_uids'])) {
418                        $external_uid = $json_payload['external_uids']['dossier'];
419                    }
420                    // Recherche l'external uid dans la base de données pour récupèrer le numéro de
421                    // DI / DA correspondant. On stocke le numéro de dossier dans la propriété val
422                    // du formulaire pour pouvoir l'afficher
423                    if ($external_uid != '') {
424                        $uid = sprintf(
425                            'SELECT
426                                lien_id_interne_uid_externe.dossier
427                            FROM
428                                %1$slien_id_interne_uid_externe
429                            WHERE
430                                lien_id_interne_uid_externe.external_uid = \'%2$s\'',
431                            DB_PREFIXE,
432                            $external_uid
433                        );
434                        $res_external_uid = $this->f->get_one_result_from_db_query($uid);
435                        if (! empty($res_external_uid['result'])) {
436                            $form->val['dossier'] = $res_external_uid['result'];
437                        }
438                    }
439                }
440    
441                  if($form->val['type'] == "creation_DA"              // Vérifie si le numéro de dossier associé à la tâche existe dans la base.
442                      || $form->val['type'] == "modification_DA"){              // Si c'est le cas ce numéro sera lié au dossier (DI ou DA) correspondant
443                      //              // TODO : vérifier la liste des tâches lié à des DA
444                $obj_link = '';
445                if ($form->val['type'] == "creation_DA" || $form->val['type'] == "modification_DA") {
446                    // Vérification que le numéro de DA affiché dans le formulaire existe
447                    $idDA = sprintf(
448                        'SELECT
449                            dossier_autorisation.dossier_autorisation
450                        FROM
451                            %1$sdossier_autorisation
452                        WHERE
453                            dossier_autorisation.dossier_autorisation = \'%2$s\'',
454                        DB_PREFIXE,
455                        $form->val['dossier']
456                    );
457                    $resIdDA=$this->f->get_one_result_from_db_query($idDA);
458                    // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
459                    if (! empty($resIdDA['result'])) {
460                      $obj_link = 'dossier_autorisation';                      $obj_link = 'dossier_autorisation';
461                  } else {                  }
462                } else {
463                    // Vérification que le numéro de DI affiché dans le formulaire existe
464                    $idDI = sprintf(
465                        'SELECT
466                            dossier.dossier
467                        FROM
468                            %1$sdossier
469                        WHERE
470                            dossier.dossier = \'%2$s\'',
471                        DB_PREFIXE,
472                        $form->val['dossier']
473                    );
474                    $resDI = $this->f->get_one_result_from_db_query($idDI);
475                    // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
476                    if (! empty($resDI['result'])) {
477                      $obj_link = 'dossier_instruction';                      $obj_link = 'dossier_instruction';
478                  }                  }
   
                 $params = array();  
                 $params['obj'] = $obj_link;  
                 $params['libelle'] = $inst_dossier->getVal('dossier');  
                 $params['title'] = "Consulter le dossier";  
                 $params['idx'] = $form->val['dossier'];  
                 $form->setSelect("dossier", $params);  
479              }              }
480                // Pour afficher le lien vers un dossier ont utilise un champ de type "link".
481                // Pour paramétrer ce champs on a besoin de savoir :
482                //  - quel objet est visé par le lien
483                //  - le label (libellé) du lien
484                //  - l'identifiant de l'objet qui sera utilisé dans le lien
485                //  - le titre associé au lien
486                // Pour cela on remplit le champs comme un select et les valeurs du select
487                // contiennent les informations nécessaire à l'affichage du champs.
488                $params = array(
489                    'obj' => $obj_link,
490                    'libelle' => $form->val['dossier'],
491                    'title' => "Consulter le dossier",
492                    'idx' => $form->val['dossier']
493                );
494                $form->setSelect("dossier", $params);
495          }          }
496      }      }
497    
# Line 308  class task extends task_gen { Line 516  class task extends task_gen {
516          // Récupération du mode de l'action          // Récupération du mode de l'action
517          $crud = $this->get_action_crud($maj);          $crud = $this->get_action_crud($maj);
518    
519            $form->setLib('date_creation', __("Date de création"));
520            $form->setLib('date_modification', __("Date de dernière modification"));
521            $form->setLib('comment', __("commentaire"));
522    
523          // MODE different de CREER          // MODE different de CREER
524          if ($maj != 0 || $crud != 'create') {          if ($maj != 0 || $crud != 'create') {
525              $form->setLib('json_payload', '');              $form->setLib('json_payload', '');
526                $form->setLib("task", __("identifiant"));
527                $form->setLib("Task_portal", __("task_portal"));
528                $form->setLib("type", __("type"));
529                $form->setLib("object_id", __("Réf. interne"));
530                $form->setLib("stream", __("flux"));
531                $form->setLib("timestamp_log", __("Historique"));
532          }          }
533      }      }
534    
# Line 527  class task extends task_gen { Line 745  class task extends task_gen {
745    
746          // gestion d'une tache de type notification et de category mail          // gestion d'une tache de type notification et de category mail
747          if (isset($val['type'])          if (isset($val['type'])
748              && ((//$val['type'] === 'notification_recepisse'              && (($val['type'] === 'notification_instruction' || $val['type'] === 'notification_decision')
749                  $val['type'] === 'notification_instruction'                  && isset($val['category'])
750                  || $val['type'] === 'notification_decision')                  && $val['category'] === 'mail')
             && isset($val['category'])  
             && $val['category'] === 'mail')  
751              || $val['type'] === 'notification_service_consulte'              || $val['type'] === 'notification_service_consulte'
752              || $val['type'] === 'notification_tiers_consulte'              || $val['type'] === 'notification_tiers_consulte'
753              ) {              ) {
754              // Récupère la payload de la tache              // Récupère la payload de la tache
755              $data = array();              $data = array();
756              // TODO : pour l'instant la gestion des notifs des demandeurs a été séparée              $data['instruction_notification'] = $this->get_instruction_notification_data(
757              // de celle des autres type de notif afin de ne pas risquer de casser l'existant                  $this->valF['category'],
758              // et pour des contraintes de temps. A optimiser plus tard                  'with-id',
759              if ($val['type'] === 'notification_service_consulte'                  array('with-id' => $this->valF['object_id'])
760                  || $val['type'] === 'notification_tiers_consulte') {              );
                 $data['instruction_notification'] = $this->get_instruction_notification_data_annexe_multiple(  
                     $this->valF['category'],  
                     'with-id',  
                     array('with-id' => $this->valF['object_id'])  
                 );  
             } else {  
                 $data['instruction_notification'] = $this->get_instruction_notification_data(  
                     $this->valF['category'],  
                     'with-id',  
                     array('with-id' => $this->valF['object_id'])  
                 );  
             }  
761              $data['dossier'] = $this->get_dossier_data($this->valF['dossier']);              $data['dossier'] = $this->get_dossier_data($this->valF['dossier']);
762    
763              // Récupère l'instance de la notification              // Récupère l'instance de la notification
# Line 573  class task extends task_gen { Line 777  class task extends task_gen {
777      }      }
778    
779      /**      /**
780         * TRIGGER - triggermodifier.
781         *
782         * @param string $id
783         * @param null &$dnu1 @deprecated  Ne pas utiliser.
784         * @param array $val Tableau des valeurs brutes.
785         * @param null $dnu2 @deprecated  Ne pas utiliser.
786         *
787         * @return boolean
788         */
789        function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
790            parent::triggermodifier($id, $dnu1, $val, $dnu2);
791            $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
792    
793            // Mise à jour des valeurs, notamment du timestamp_log en fonction de plusieurs critères
794            $values = array(
795                'state' => $this->valF['state'],
796                'object_id' => $this->valF['object_id'],
797                'comment' => $this->valF['comment'],
798            );
799            $new_values = $this->set_values_for_update($values);
800            if ($new_values === false) {
801                $this->addToLog(__METHOD__."(): erreur timestamp log", DEBUG_MODE);
802                return false;
803            }
804    
805            // Mise à jour des valeurs
806            $this->valF['timestamp_log'] = $new_values['timestamp_log'];
807            $this->valF['state'] = $new_values['state'];
808            $this->valF['object_id'] = $new_values['object_id'];
809            $this->valF['last_modification_date'] = date('Y-m-d');
810            $this->valF['last_modification_time'] = date('H:i:s');
811    
812            return true;
813        }
814    
815    
816        /**
817         * Applique nouvelle valeur après traitement.
818         *
819         * @param array $params Tableau des valeurs en entrées
820         * @return array        Tableau des valeurs en sorties
821         */
822        public function set_values_for_update($params = array()) {
823    
824            // Récupération du timestamp_log existant
825            $timestamp_log = $this->get_timestamp_log();
826            if ($timestamp_log === false) {
827                return false;
828            }
829    
830            // Vérification des object_id précédent en cas de tentative d'appliquer
831            // l'état CANCELED sur la tâche
832            if (isset($params['state']) === true
833                && $params['state'] === self::STATUS_CANCELED) {
834                // Récupération du journal d'activité de la tâche sous forme de tableau
835                // trié par ordre décroissant
836                $log = $timestamp_log;
837                krsort($log);
838                // Pour chaque entrée dans le journal d'activité de la tâche :
839                // - vérification de la présence de l'object_id précédent
840                // - vérification que l'object_id précédent existe toujours dans la base de données
841                // - l'object_id est mise à jour avec la valeur de l'object_id précédent
842                // - le state n'est pas modifié
843                // - sortie du traitement dès que le premier object_id précédent existant est trouvé
844                // - si aucun object_id précédent existant n'est trouvé alors ni le state, ni l'object_id n'est modifiés
845                foreach ($log as $key => $value) {
846                    //
847                    if (isset($value['prev_object_id']) === true
848                        && $this->getVal('object_id') !== $value['prev_object_id']) {
849                        // Récupère la liste des tables potentielles pour un type de tâche
850                        $tables = $this->get_tables_by_task_type($this->getVal('type'), $this->getVal('stream'));
851                        foreach ($tables as $table) {
852                            // Vérifie s'il y a un ou aucun résultat
853                            $query = sprintf('
854                                SELECT COUNT(%2$s)
855                                FROM %1$s%2$s
856                                WHERE %2$s::CHARACTER VARYING = \'%3$s\'
857                                ',
858                                DB_PREFIXE,
859                                $table,
860                                $value['prev_object_id']
861                            );
862                            $res = $this->f->get_one_result_from_db_query($query, true);
863                            if ($res['code'] === 'KO') {
864                                return $this->end_treatment(__METHOD__, false);
865                            }
866                            // Affectation des valeurs et sortie de la boucle
867                            if ($res['result'] == '1') {
868                                $params['object_id'] = $value['prev_object_id'];
869                                $params['state'] = $this->getVal('state');
870                                break;
871                            }
872                        }
873                        // Sortie de la boucle si les valeurs sont affectées
874                        if ($params['object_id'] !== null
875                            && $params['object_id'] === $value['prev_object_id']) {
876                            //
877                            break;
878                        }
879                    }
880                }
881            }
882    
883            // Mise à jour du journal d'activité de la tâche
884            array_push($timestamp_log, array(
885                'modification_date' => date('Y-m-d H:i:s'),
886                'object_id' => $params['object_id'] !== null ? $params['object_id'] : $this->getVal('object_id'),
887                'prev_object_id' => $this->getVal('object_id'),
888                'state' =>  $params['state'],
889                'prev_state' => $this->getVal('state'),
890                'comment' => isset($params['comment']) ? $params['comment'] : $this->getVal('comment'),
891            ));
892            //
893            $timestamp_log = json_encode($timestamp_log);
894            
895    
896            // Les nouvelles valeurs après vérification des critères
897            $result = array(
898                'timestamp_log' => $timestamp_log,
899                'object_id' => $params['object_id'],
900                'state' => $params['state'],
901                'comment' => $params['comment'],
902            );
903            return $result;
904        }
905    
906        
907        /**
908       * TRIGGER - triggermodifierapres.       * TRIGGER - triggermodifierapres.
909       *       *
910       * @param string $id       * @param string $id
# Line 733  class task extends task_gen { Line 1065  class task extends task_gen {
1065                  $this->addToMessage(__("Le contenu JSON de la tâche n'est pas valide."));                  $this->addToMessage(__("Le contenu JSON de la tâche n'est pas valide."));
1066                  return $this->end_treatment(__METHOD__, false);                  return $this->end_treatment(__METHOD__, false);
1067              }              }
1068              if (isset($json_payload['document_numerise']) === true              if (isset($json_payload['document_numerise']["file_content"]) === true
1069                  && empty($json_payload['document_numerise']) === false) {                  && empty($json_payload['document_numerise']["file_content"]) === false) {
1070                  //                  //
1071                  $document_numerise = $json_payload['document_numerise'];                  $document_numerise = $json_payload['document_numerise'];
1072                  $file_content = base64_decode($document_numerise["file_content"]);                  $file_content = base64_decode($document_numerise["file_content"]);
# Line 775  class task extends task_gen { Line 1107  class task extends task_gen {
1107              'creation_time' => date('H:i:s'),              'creation_time' => date('H:i:s'),
1108              'last_modification_date' => null,              'last_modification_date' => null,
1109              'last_modification_time' => null,              'last_modification_time' => null,
1110                'comment' => null,
1111          );          );
1112    
1113          // tâche sortante          // tâche sortante
# Line 837  class task extends task_gen { Line 1170  class task extends task_gen {
1170       */       */
1171      public function update_task($params = array()) {      public function update_task($params = array()) {
1172          $this->begin_treatment(__METHOD__);          $this->begin_treatment(__METHOD__);
1173          $timestamp_log = $this->get_timestamp_log();  
         if ($timestamp_log === false) {  
             $this->addToLog(__METHOD__."(): erreur timestamp log", DEBUG_MODE);  
             return $this->end_treatment(__METHOD__, false);  
         }  
         // Vérification des object_id précédent en cas de tentative d'appliquer  
         // l'état CANCELED sur la tâche  
         if (isset($params['val']['state']) === true  
             && $params['val']['state'] === self::STATUS_CANCELED) {  
             // Récupération du journal d'activité de la tâche sous forme de tableau  
             // trié par ordre décroissant  
             $log = $timestamp_log;  
             unset($log['creation_date']);  
             krsort($log);  
             // Pour chaque entrée dans le journal d'activité de la tâche :  
             // - vérification de la présence de l'object_id précédent  
             // - vérification que l'object_id précédent existe toujours dans la base de données  
             // - l'object_id est mise à jour avec la valeur de l'object_id précédent  
             // - le state n'est pas modifié  
             // - sortie du traitement dès que le premier object_id précédent existant est trouvé  
             // - si aucun object_id précédent existant n'est trouvé alors ni le state, ni l'object_id n'est modifiés  
             foreach ($log as $key => $value) {  
                 //  
                 if (isset($value['prev_object_id']) === true  
                     && $this->getVal('object_id') !== $value['prev_object_id']) {  
                     // Récupère la liste des tables potentielles pour un type de tâche  
                     $tables = $this->get_tables_by_task_type($this->getVal('type'), $this->getVal('stream'));  
                     foreach ($tables as $table) {  
                         // Vérifie s'il y a un ou aucun résultat  
                         $query = sprintf('  
                             SELECT COUNT(%2$s)  
                             FROM %1$s%2$s  
                             WHERE %2$s::CHARACTER VARYING = \'%3$s\'  
                             ',  
                             DB_PREFIXE,  
                             $table,  
                             $value['prev_object_id']  
                         );  
                         $res = $this->f->get_one_result_from_db_query($query, true);  
                         if ($res['code'] === 'KO') {  
                             return $this->end_treatment(__METHOD__, false);  
                         }  
                         // Affectation des valeurs et sortie de la boucle  
                         if ($res['result'] == '1') {  
                             $params['object_id'] = $value['prev_object_id'];  
                             $params['val']['state'] = $this->getVal('state');  
                             break;  
                         }  
                     }  
                     // Sortie de la boucle si les valeurs sont affectées  
                     if (isset($params['object_id']) === true  
                         && $params['object_id'] === $value['prev_object_id']) {  
                         //  
                         break;  
                     }  
                 }  
             }  
         }  
         // Mise à jour du journal d'activité de la tâche  
         array_push($timestamp_log, array(  
             'modification_date' => date('Y-m-d H:i:s'),  
             'state' => $params['val']['state'],  
             'prev_state' => $this->getVal('state'),  
             'object_id' => isset($params['object_id']) == true ? $params['object_id'] : $this->getVal('object_id'),  
             'prev_object_id' => $this->getVal('object_id'),  
         ));  
         $timestamp_log = json_encode($timestamp_log);  
1174          // Mise à jour de la tâche          // Mise à jour de la tâche
1175          $valF = array(          $valF = array(
1176              'task' => $this->getVal($this->clePrimaire),              'task' => $this->getVal($this->clePrimaire),
1177              'type' => $this->getVal('type'),              'type' => $this->getVal('type'),
1178              'timestamp_log' => $timestamp_log,              'timestamp_log' => '[]',
1179              'state' => $params['val']['state'],              'state' => $params['val']['state'],
1180              'object_id' => isset($params['object_id']) == true ? $params['object_id'] : $this->getVal('object_id'),              'object_id' => isset($params['object_id']) == true ? $params['object_id'] : $this->getVal('object_id'),
1181              'stream' => $this->getVal('stream'),              'stream' => $this->getVal('stream'),
# Line 919  class task extends task_gen { Line 1186  class task extends task_gen {
1186              'creation_time' => $this->getVal('creation_time'),              'creation_time' => $this->getVal('creation_time'),
1187              'last_modification_date' => date('Y-m-d'),              'last_modification_date' => date('Y-m-d'),
1188              'last_modification_time' => date('H:i:s'),              'last_modification_time' => date('H:i:s'),
1189                'comment' => $this->getVal('comment'),
1190          );          );
1191          $update = $this->modifier($valF);          $update = $this->modifier($valF);
1192          if ($update === false) {          if ($update === false) {
# Line 1335  class task extends task_gen { Line 1603  class task extends task_gen {
1603          return $val_instruction;          return $val_instruction;
1604      }      }
1605    
1606    
1607      /**      /**
1608       * Récupère les informations       * Récupère les informations pour les notifications ayant plusieurs annexe
1609      */      */
1610      protected function get_instruction_notification_data($category, $type = '', $extra_params = array()) {      protected function get_instruction_notification_data($category, $type = '', $extra_params = array()) {
1611          $val_in = null;          $val_in = null;
# Line 1346  class task extends task_gen { Line 1615  class task extends task_gen {
1615              $idx = $extra_params['with-id'];              $idx = $extra_params['with-id'];
1616          }          }
1617    
1618          // récupére les données à intégrer à la payload          // Récupération du type de notification. Le type est nécessaire pour récupérer
1619          $inst_in = $this->f->get_inst__om_dbform(array(          // le message et le titre de notification.
1620              "obj" => "instruction_notification",          $typeNotification = $this->getVal('type');
1621              "idx" => $idx,          if (isset($this->valF['type'])) {
1622          ));              $typeNotification = $this->valF['type'];
         if (count($inst_in->val) > 0) {  
             $val_in = $inst_in->get_json_data();  
   
             $val_in['parametre_courriel_type_titre'] = '';  
             $val_in['parametre_courriel_type_message'] = '';  
             // Récupération du message et du titre  
             if ($category === 'mail') {  
                 $inst_instruction = $this->f->get_inst__om_dbform(array(  
                     "obj" => "instruction",  
                     "idx" => $inst_in->getVal('instruction'),  
                 ));  
                 $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));  
                 $phrase_type_notification = array();  
                 $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $this->valF['type']);  
                 $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];  
                 $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];  
             }  
   
             // Récupération des liens vers les documents et de l'id de l'instruction  
             // de l'annexe  
             $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire));  
             $val_in['lien_telechargement_document'] = $infoDocNotif['document']['lien'];  
             $val_in['lien_telechargement_annexe'] = $infoDocNotif['annexe']['lien'];  
             $val_in['instruction_annexe'] = $infoDocNotif['annexe']['id_instruction'];  
         }  
   
         return $val_in;  
     }  
   
     /**  
      * Récupère les informations pour les notifications ayant plusieurs annexe  
     */  
     protected function get_instruction_notification_data_annexe_multiple($category, $type = '', $extra_params = array()) {  
         $val_in = null;  
   
         $idx = null;  
         if ($type === 'with-id') {  
             $idx = $extra_params['with-id'];  
1623          }          }
1624    
1625          // récupére les données à intégrer à la payload          // récupére les données à intégrer à la payload
# Line 1408  class task extends task_gen { Line 1639  class task extends task_gen {
1639                      "idx" => $inst_in->getVal('instruction'),                      "idx" => $inst_in->getVal('instruction'),
1640                  ));                  ));
1641                  $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));                  $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));
1642                  $phrase_type_notification = array();                  $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $typeNotification);
                 $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $this->valF['type']);  
1643                  $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];                  $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];
1644                  $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];                  $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];
1645              }              }
1646    
1647              // Récupération des liens vers les documents et de l'id de l'instruction              // Récupération des liens vers les documents et des id et type des annexes
1648              // de l'annexe              $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire));
             $infoDocNotif = $inst_in->getInfosDocumentsNotifAnnexeMultiple($inst_in->getVal($inst_in->clePrimaire));  
1649              $val_in['lien_telechargement_document'] = $infoDocNotif['document']['lien'];              $val_in['lien_telechargement_document'] = $infoDocNotif['document']['lien'];
1650              $val_in['annexes'] = $infoDocNotif['annexes'];              $val_in['annexes'] = $infoDocNotif['annexes'];
1651          }          }
   
1652          return $val_in;          return $val_in;
1653      }      }
1654    
# Line 1601  class task extends task_gen { Line 1829  class task extends task_gen {
1829                  $val_task[$key] = strip_tags($value);                  $val_task[$key] = strip_tags($value);
1830              }              }
1831              $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);              $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);
1832                unset($val_task['timestamp_log_hidden']);
1833              $val['task'] = $val_task;              $val['task'] = $val_task;
1834              //              //
1835              if ($this->getVal('type') === 'creation_DA'              if ($this->getVal('type') === 'creation_DA'
# Line 1733  class task extends task_gen { Line 1962  class task extends task_gen {
1962                  }                  }
1963                  $val['external_uids'] = $val_external_uid;                  $val['external_uids'] = $val_external_uid;
1964              }              }
             //  
1965              if ($this->getVal('type') === 'notification_instruction'              if ($this->getVal('type') === 'notification_instruction'
1966                  || $this->getVal('type') === 'notification_recepisse'                  || $this->getVal('type') === 'notification_recepisse'
1967                  || $this->getVal('type') === 'notification_decision') {                  || $this->getVal('type') === 'notification_decision'
1968                  //                  || $this->getVal('type') === 'notification_service_consulte'
                 $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));  
                 $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;  
                 $val['demandeur'] = $this->get_demandeurs_data($dossier_id);  
                 $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));  
                 $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;  
                 $instruction_annexe = isset($val['instruction_notification']['instruction_annexe']) === true ? $val['instruction_notification']['instruction_annexe'] : null;  
                 $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));  
                 // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une  
                 // demande dont le type ne génère pas de dossier  
                 if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {  
                     $val['instruction']['final'] = 't';  
                 }  
                 //  
                 if ($instruction_annexe != '') {  
                     $val['instruction_annexe'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_annexe));  
                 }  
                 $val_external_uid = array();  
                 // Affiche l'identifiant de la demande concernant le dossier d'instruction  
                 $val_external_uid['demande'] = $this->get_external_uid($dossier_id, 'demande', 'portal', 'ASC');  
                 $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', 'portal', 'ASC');  
                 $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', 'portal');  
                 $val['external_uids'] = $val_external_uid;  
             }  
             if ($this->getVal('type') === 'notification_service_consulte'  
1969                  || $this->getVal('type') === 'notification_tiers_consulte') {                  || $this->getVal('type') === 'notification_tiers_consulte') {
1970                  //                  //
1971                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1972                  $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;                  $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;
1973                  $val['demandeur'] = $this->get_demandeurs_data($dossier_id);                  $val['demandeur'] = $this->get_demandeurs_data($dossier_id);
1974                  $val['instruction_notification'] = $this->get_instruction_notification_data_annexe_multiple($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));                  $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));
1975                  $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;                  $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;
1976                  $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;                  $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;
1977                  $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));                  $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));
# Line 1791  class task extends task_gen { Line 1995  class task extends task_gen {
1995                  $val_external_uid = array();                  $val_external_uid = array();
1996                  // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier                  // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier
1997                  $val_external_uid['demande'] = $this->get_external_uid($instruction_id, 'demande') !== '' ? $this->get_external_uid($instruction_id, 'demande') : $this->get_external_uid($dossier_id, 'demande');                  $val_external_uid['demande'] = $this->get_external_uid($instruction_id, 'demande') !== '' ? $this->get_external_uid($instruction_id, 'demande') : $this->get_external_uid($dossier_id, 'demande');
1998                    $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', 'portal', 'ASC');
1999                    $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', 'portal');
2000                  $val['external_uids'] = $val_external_uid;                  $val['external_uids'] = $val_external_uid;
2001              }              }
2002              //              //
# Line 1925  class task extends task_gen { Line 2131  class task extends task_gen {
2131      }      }
2132    
2133      function setLayout(&$form, $maj) {      function setLayout(&$form, $maj) {
2134            //
2135          // Récupération du mode de l'action          $form->setBloc('json_payload', 'D', '', 'col_6');
2136          $crud = $this->get_action_crud($maj);              $form->setFieldset('json_payload', 'DF', __("json_payload"), "collapsible, startClosed");
2137            $form->setBloc('json_payload', 'F');
2138          // MODE different de CREER          $form->setBloc('timestamp_log', 'DF', __("historique"), 'col_9 timestamp_log_jsontotab');
         if ($maj != 0 || $crud != 'create') {  
             $form->setBloc('json_payload', 'D', '', 'col_6');  
                 $form->setFieldset('json_payload', 'DF', __("json_payload"), "collapsible, startClosed");  
             $form->setBloc('json_payload', 'F');  
         }  
         $form->setBloc('timestamp_log', 'DF', '', 'col_9');  
2139      }      }
2140    
2141      /**      /**

Legend:
Removed from v.12432  
changed lines
  Added in v.12433

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26