/[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

branches/4.14.0-develop_demat/obj/task.class.php revision 9799 by mbideau, Tue Dec 22 15:54:14 2020 UTC trunk/obj/task.class.php revision 13528 by softime, Thu Dec 15 22:46:03 2022 UTC
# Line 13  class task extends task_gen { Line 13  class task extends task_gen {
13      const STATUS_ERROR = 'error';      const STATUS_ERROR = 'error';
14      const STATUS_DEBUG = 'debug';      const STATUS_DEBUG = 'debug';
15      const STATUS_ARCHIVED = 'archived';      const STATUS_ARCHIVED = 'archived';
16        const STATUS_CANCELED = 'canceled';
17    
18        /**
19         * Liste des types de tâche concernant les services instructeurs
20         */
21        const TASK_TYPE_SI = array(
22            'creation_DA',
23            'creation_DI',
24            'depot_DI',
25            'modification_DI',
26            'qualification_DI',
27            'decision_DI',
28            'incompletude_DI',
29            'completude_DI',
30            'ajout_piece',
31            'add_piece',
32            'creation_consultation',
33            'modification_DA',
34            'create_DI',
35            'envoi_CL',
36            'notification_recepisse',
37            'notification_instruction',
38            'notification_decision',
39            'notification_service_consulte',
40            'notification_tiers_consulte',
41            'notification_depot_demat',
42            'notification_commune'
43        );
44    
45        /**
46         * Liste des types de tâche concernant les services consultés
47         */
48        const TASK_TYPE_SC = array(
49            'create_DI_for_consultation',
50            'avis_consultation',
51            'pec_metier_consultation',
52            'create_message',
53            'notification_recepisse',
54            'notification_instruction',
55            'notification_decision',
56            'notification_service_consulte',
57            'notification_tiers_consulte',
58            'notification_depot_demat',
59            'prescription',
60        );
61    
62        /**
63         * Catégorie de la tâche
64         */
65        var $category = PLATAU;
66    
67      /**      /**
68       * Définition des actions disponibles sur la classe.       * Définition des actions disponibles sur la classe.
# Line 40  class task extends task_gen { Line 90  class task extends task_gen {
90      }      }
91    
92      public function setvalF($val = array()) {      public function setvalF($val = array()) {
93    
94            // // les guillets doubles sont remplacés automatiquement par des simples
95            // // dans core/om_formulaire.clasS.php::recupererPostvar()
96            // // voir le ticket https://dev.atreal.fr/projets/openmairie/tracker/209
97            // // ceci est un hack sale temporaire en attendant résolution du ticket
98            // foreach(array('json_payload', 'timestamp_log') as $key) {
99            //     if (isset($val[$key]) && ! empty($val[$key]) &&
100            //             isset($_POST[$key]) && ! empty($_POST[$key])) {
101            //         $submited_payload = $_POST[$key];
102            //         if (! empty($submited_payload)) {
103            //             $new_payload = str_replace("'", '"', $val[$key]);
104            //             if ($new_payload == $submited_payload ||
105            //                     strpos($submited_payload, '"') === false) {
106            //                 $val[$key] = $new_payload;
107            //             }
108            //             else {
109            //                 $error_msg = sprintf(
110            //                     __("La convertion des guillemets de la payload JSON '%s' ".
111            //                         "n'est pas idempotente (courante: %s, postée: %s, convertie: %s)"),
112            //                     $key, var_export($val[$key], true), var_export($submited_payload, true),
113            //                     var_export($new_payload, true));
114            //                 $this->correct = false;
115            //                 $this->addToMessage($error_msg);
116            //                 $this->addToLog(__METHOD__."() erreur : $error_msg", DEBUG_MODE);
117            //                 return false;
118            //             }
119            //         }
120            //     }
121            // }
122    
123          parent::setvalF($val);          parent::setvalF($val);
124          //  
125            // XXX Ancien code : permet de ne pas avoir d'erreru lors de la modification d'une task
126          if (array_key_exists('timestamp_log', $val) === true) {          if (array_key_exists('timestamp_log', $val) === true) {
127              $this->valF['timestamp_log'] = str_replace("'", '"', $val['timestamp_log']);              $this->valF['timestamp_log'] = str_replace("'", '"', $val['timestamp_log']);
128          }          }
129    
130            // récupération de l'ID de l'objet existant
131            $id = property_exists($this, 'id') ? $this->id : null;
132            if(isset($val[$this->clePrimaire])) {
133                $id = $val[$this->clePrimaire];
134            } elseif(isset($this->valF[$this->clePrimaire])) {
135                $id = $this->valF[$this->clePrimaire];
136            }
137    
138            // MODE MODIFIER
139            if (! empty($id)) {
140    
141                // si aucune payload n'est fourni (devrait toujours être le cas)
142                if (! isset($val['json_payload']) || empty($val['json_payload'])) {
143    
144                    // récupère l'objet existant
145                    $existing = $this->f->findObjectById('task', $id);
146                    if (! empty($existing)) {
147    
148                        // récupère la payload de l'objet
149                        $val['json_payload'] = $existing->getVal('json_payload');
150                        $this->valF['json_payload'] = $existing->getVal('json_payload');
151                        $this->f->addToLog(__METHOD__."() récupère la payload de la tâche existante ".
152                            "'$id': ".$existing->getVal('json_payload'), EXTRA_VERBOSE_MODE);
153                    }
154                }
155            }
156    
157            if (array_key_exists('category', $val) === false
158                || $this->valF['category'] === ''
159                || $this->valF['category'] === null) {
160                //
161                $this->valF['category'] = $this->category;
162            }
163    
164            // Si last_modification_time est vide, la valeur est remplacée par NULL
165            // pour eviter d'avoir une erreur de base de données car le champ est au format time.
166            if ($val['last_modification_time'] == "") {
167                $this->valF['last_modification_time'] = NULL;
168            } else {
169                $this->valF['last_modification_time'] = $val['last_modification_time'];
170            }
171    
172            // Si creation_time est vide, la valeur est remplacée par NULL
173            // pour eviter d'avoir une erreur de base de données car le champ est au format time.
174            if ($val['creation_time'] == "") {
175                $this->valF['creation_time'] = NULL;
176            } else {
177                $this->valF['creation_time'] = $val['creation_time'];
178            }
179      }      }
180    
181      /**      /**
# Line 59  class task extends task_gen { Line 190  class task extends task_gen {
190              "object_id",              "object_id",
191              "dossier",              "dossier",
192              "stream",              "stream",
193                "creation_date",
194                "creation_time",
195                "CONCAT_WS(' ', to_char(task.creation_date, 'DD/MM/YYYY'), task.creation_time) AS date_creation",
196                'last_modification_date',
197                'last_modification_time',
198                "CONCAT_WS(' ', to_char(task.last_modification_date, 'DD/MM/YYYY'), task.last_modification_time) AS date_modification",
199                "comment",
200              "json_payload",              "json_payload",
201              "timestamp_log",              "timestamp_log",
202                "timestamp_log AS timestamp_log_hidden",
203                "category",
204          );          );
205      }      }
206    
207      function setType(&$form, $maj) {      function setType(&$form, $maj) {
208          parent::setType($form, $maj);          parent::setType($form, $maj);
209    
210          // Récupération du mode de l'action          // Récupération du mode de l'action
211          $crud = $this->get_action_crud($maj);          $crud = $this->get_action_crud($maj);
212    
213          if ($maj < 2) {          // ALL
214            $form->setType("category", "hidden");
215            $form->setType("timestamp_log_hidden", "hidden");
216    
217            // MODE CREER
218            if ($maj == 0 || $crud == 'create') {
219                $form->setType("type", "select");
220              $form->setType("state", "select");              $form->setType("state", "select");
221              $form->setType("stream", "select");              $form->setType("stream", "select");
222              $form->setType("json_payload", "jsonprettyprint");              $form->setType("json_payload", "textarea");
223          }          }
224          if ($maj == 3){          // MODE MODIFIER
225            if ($maj == 1 || $crud == 'update') {
226                $form->setType("task", "hiddenstatic");
227                $form->setType("state", "select");
228                $form->setType("stream", "hiddenstatic");
229                $form->setType("json_payload", "jsonprettyprint");
230                $form->setType("timestamp_log", "jsontotab");
231                $form->setType("type", "hiddenstatic");
232                $form->setType("creation_date", "hidden");
233                $form->setType("creation_time", "hidden");
234                $form->setType("object_id", "hiddenstatic");
235                $form->setType("dossier", "hiddenstatic");
236                $form->setType("date_creation", "hiddenstatic");
237                $form->setType("last_modification_date", "hidden");
238                $form->setType("last_modification_time", "hidden");
239                $form->setType("date_modification", "static");
240            }
241            // MODE CONSULTER
242            if ($maj == 3 || $crud == 'read') {
243                $form->setType("state", "selecthiddenstatic");
244                $form->setType("stream", "selecthiddenstatic");
245              $form->setType('dossier', 'link');              $form->setType('dossier', 'link');
246              $form->setType('json_payload', 'jsonprettyprint');              $form->setType('json_payload', 'jsonprettyprint');
247                $form->setType("type", "selecthiddenstatic");
248                $form->setType("creation_date", "hidden");
249                $form->setType("creation_time", "hidden");
250                $form->setType("date_creation", "static");
251                $form->setType("last_modification_date", "hidden");
252                $form->setType("last_modification_time", "hidden");
253                $form->setType("date_modification", "static");
254                $form->setType("timestamp_log", "jsontotab");
255          }          }
   
256      }      }
257    
258        function stateTranslation ($currentState) {
259            switch ($currentState){
260                case "draft":
261                    return __('brouillon');
262                    break;
263                case "new":
264                    return __('à traiter');
265                    break;
266                case "pending":
267                    return __('en cours');
268                    break;
269                case "done":
270                    return __('terminé');
271                    break;
272                case "archived":
273                    return __('archivé');
274                    break;
275                case "error":
276                    return __('erreur');
277                    break;
278                case "debug":
279                    return __('debug');
280                    break;
281                case "canceled":
282                    return __('annulé');
283                    break;
284            }
285        }
286      /**      /**
287       *       *
288       */       */
289      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
290          if($maj < 2) {          if($maj <= 3) {
   
291              $contenu = array();              $contenu = array();
292              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG') as $key) {              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED') as $key) {
293                  $const_name = 'STATUS_'.$key;                  $const_name = 'STATUS_'.$key;
294                  $const_value = constant("self::$const_name");                  $const_value = constant("self::$const_name");
295                  $contenu[0][] = $const_value;                  $contenu[0][] = $const_value;
296                  $contenu[1][] = __($const_value);  
297    
298                    $contenu[1][] = $this->stateTranslation($const_value);
299    
300              }              }
301    
302              $form->setSelect("state", $contenu);              $form->setSelect("state", $contenu);
303    
304              $contenu_stream =array();              $contenu_stream =array();
305              $contenu_stream[0][0]="input";              $contenu_stream[0][0]="input";
306              $contenu_stream[1][0]=_('input');              $contenu_stream[1][0]=__('input');
307              $contenu_stream[0][1]="output";              $contenu_stream[0][1]="output";
308              $contenu_stream[1][1]=_('output');              $contenu_stream[1][1]=__('output');
309              $form->setSelect("stream", $contenu_stream);              $form->setSelect("stream", $contenu_stream);
310    
311                $tab_type = array_unique(array_merge(self::TASK_TYPE_SI, self::TASK_TYPE_SC));
312    
313                foreach ($tab_type as $type) {
314    
315                    $contenu_type[0][] = $type;
316    
317                    switch ($type) {
318                        case "creation_DA":
319                            $value_type = __('Création DA');
320                            break;
321                        case "create_DI":
322                            $value_type = __('Création demande');
323                            break;
324                        case "creation_DI":
325                            $value_type = __('Création DI');
326                            break;
327                        case "modification_DA":
328                            $value_type = __('Modification DA');
329                            break;
330                        case "modification_DI":
331                            $value_type = __('Modification DI');
332                            break;
333                        case "ajout_piece":
334                            $value_type = __('Ajout pièce (sortant)');
335                            break;
336                        case "add_piece":
337                            $value_type = __('Ajout pièce (entrant)');
338                            break;
339                        case "depot_DI":
340                            $value_type = __('Dépôt DI');
341                            break;
342                        case "qualification_DI":
343                            $value_type = __('Qualification DI');
344                            break;
345                        case "creation_consultation":
346                            $value_type = __('Création consultation');
347                            break;
348                        case "decision_DI":
349                            $value_type = __('Décision DI');
350                            break;
351                        case "envoi_CL":
352                            $value_type = __('Envoi contrôle de légalité');
353                            break;
354                        case "pec_metier_consultation":
355                            $value_type = __('PeC consultation');
356                            break;
357                        case "avis_consultation":
358                            $value_type = __('Avis');
359                            break;
360                        case "prescription":
361                            $value_type = __('Prescription');
362                            break;
363                        case "create_DI_for_consultation":
364                            $value_type = __('Création DI pour consultation');
365                            break;
366                        case "create_message":
367                            $value_type = __('Message');
368                            break;
369                        case "notification_recepisse":
370                            $value_type = __('Notification récépissé');
371                            break;
372                        case "notification_instruction":
373                            $value_type = __('Notification instruction');
374                            break;
375                        case "notification_decision":
376                            $value_type = __('Notification décision');
377                            break;
378                        case "notification_service_consulte":
379                            $value_type = __('Notification service consulté');
380                            break;
381                        case "notification_tiers_consulte":
382                            $value_type = __('Notification tiers consulté');
383                            break;
384                        case "completude_DI":
385                            $value_type = __('complétude DI');
386                            break;
387                        case "incompletude_DI":
388                            $value_type = __('incomplétude DI');
389                            break;
390                    }
391    
392                    $contenu_type[1][] = $value_type;
393                }
394    
395                $form->setselect('type', $contenu_type);
396          }          }
397    
398          if ($maj == 3) {          if ($maj == 3) {
399              if ($this->getVal('stream') == 'output') {              // Récupération du numéro du dossier si il n'est pas renseigné dans la tâche
400                  $inst_dossier = $this->f->get_inst__om_dbform(array(              if ($form->val['dossier'] == '' || $form->val['dossier'] == null) {
401                      "obj" => "dossier",                  // Récupération de la payload de la taĉhe.
402                      "idx" => $form->val['dossier'],                  // Si la tâche est une tâche input la payload est associée à la tâche.
403                  ));                  // Si la tâche est une tâche en output la payload est "calculé" à l'ouverture
404                    // du formulaire.
405                    if ($this->getVal('stream') == 'input') {
406                        $json_payload = json_decode($this->getVal('json_payload'), true);
407                    } else {
408                        $json_payload = json_decode($form->val['json_payload'], true);
409                    }
410                    // A partir de la payload de la tâche ont récupère les externals uid
411                    // Si un external uid de DI (dossier) existe ont le récupère et on stocke le numéro
412                    // pour l'afficher sur le formulaire.
413                    // Si l'external UID du DI n'existe pas on récupère celui du DA
414                    $external_uid = '';
415                    if (array_key_exists('external_uids', $json_payload)
416                        && array_key_exists('dossier', $json_payload['external_uids'])
417                    ) {
418                        $external_uid = $json_payload['external_uids']['dossier'];
419                    } elseif (array_key_exists('external_uids', $json_payload)
420                        && array_key_exists('demande', $json_payload['external_uids'])) {
421                        $external_uid = $json_payload['external_uids']['demande'];
422                    }
423                    // Recherche l'external uid dans la base de données pour récupèrer le numéro de
424                    // DI / DA correspondant. On stocke le numéro de dossier dans la propriété val
425                    // du formulaire pour pouvoir l'afficher
426                    if ($external_uid != '') {
427                        $qres = $this->f->get_one_result_from_db_query(
428                            sprintf(
429                                'SELECT
430                                    lien_id_interne_uid_externe.dossier
431                                FROM
432                                    %1$slien_id_interne_uid_externe
433                                WHERE
434                                    lien_id_interne_uid_externe.external_uid = \'%2$s\'',
435                                DB_PREFIXE,
436                                $this->f->db->escapeSimple($external_uid)
437                            ),
438                            array(
439                                "origin" => __METHOD__,
440                            )
441                        );
442                        if (! empty($qres["result"])) {
443                            $form->val['dossier'] = $qres["result"];
444                        }
445                    }
446                }
447    
448                  if($form->val['type'] == "creation_DA"){              // Vérifie si le numéro de dossier associé à la tâche existe dans la base.
449                // Si c'est le cas ce numéro sera lié au dossier (DI ou DA) correspondant
450                // TODO : vérifier la liste des tâches lié à des DA
451                $obj_link = '';
452                if ($form->val['type'] == "creation_DA" || $form->val['type'] == "modification_DA") {
453                    // Vérification que le numéro de DA affiché dans le formulaire existe
454                    $qres = $this->f->get_one_result_from_db_query(
455                        sprintf(
456                            'SELECT
457                                dossier_autorisation.dossier_autorisation
458                            FROM
459                                %1$sdossier_autorisation
460                            WHERE
461                                dossier_autorisation.dossier_autorisation = \'%2$s\'',
462                            DB_PREFIXE,
463                            $this->f->db->escapeSimple($form->val['dossier'])
464                        ),
465                        array(
466                            "origin" => __METHOD__,
467                        )
468                    );
469                    // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
470                    if (! empty($qres["result"])) {
471                      $obj_link = 'dossier_autorisation';                      $obj_link = 'dossier_autorisation';
472                  } else {                  }
473                } else {
474                    // Vérification que le numéro de DI affiché dans le formulaire existe
475                    $qres = $this->f->get_one_result_from_db_query(
476                        sprintf(
477                            'SELECT
478                                dossier.dossier
479                            FROM
480                                %1$sdossier
481                            WHERE
482                                dossier.dossier = \'%2$s\'',
483                            DB_PREFIXE,
484                            $this->f->db->escapeSimple($form->val['dossier'])
485                        ),
486                        array(
487                            "origin" => __METHOD__,
488                        )
489                    );
490                    // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
491                    if (! empty($qres["result"])) {
492                      $obj_link = 'dossier_instruction';                      $obj_link = 'dossier_instruction';
493                  }                  }
   
                 $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);  
494              }              }
495                // Pour afficher le lien vers un dossier ont utilise un champ de type "link".
496                // Pour paramétrer ce champs on a besoin de savoir :
497                //  - quel objet est visé par le lien
498                //  - le label (libellé) du lien
499                //  - l'identifiant de l'objet qui sera utilisé dans le lien
500                //  - le titre associé au lien
501                // Pour cela on remplit le champs comme un select et les valeurs du select
502                // contiennent les informations nécessaire à l'affichage du champs.
503                $params = array(
504                    'obj' => $obj_link,
505                    'libelle' => $form->val['dossier'],
506                    'title' => "Consulter le dossier",
507                    'idx' => $form->val['dossier']
508                );
509                $form->setSelect("dossier", $params);
510          }          }
511      }      }
512    
# Line 137  class task extends task_gen { Line 518  class task extends task_gen {
518      function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {      function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
519          // parent::setVal($form, $maj, $validation);          // parent::setVal($form, $maj, $validation);
520          //          //
521          if ($this->getVal('stream') == "output") {          if ($this->getVal('stream') == "output"
522                && ($this->getVal('state') !== self::STATUS_DONE
523                    || $this->getVal('json_payload') === "{}")) {
524                //
525              $form->setVal('json_payload', $this->view_form_json(true));              $form->setVal('json_payload', $this->view_form_json(true));
526          } else {          } else {
527              $form->setVal('json_payload', htmlentities($this->getVal('json_payload')));              $form->setVal('json_payload', json_encode(json_decode($this->getVal('json_payload'), true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
528          }          }
529      }      }
530    
531      function setLib(&$form, $maj) {      function setLib(&$form, $maj) {
532          parent::setLib($form, $maj);          parent::setLib($form, $maj);
533          $form->setLib('json_payload', '');  
534            // Récupération du mode de l'action
535            $crud = $this->get_action_crud($maj);
536    
537            $form->setLib('date_creation', __("Date de création"));
538            $form->setLib('date_modification', __("Date de dernière modification"));
539            $form->setLib('comment', __("commentaire"));
540    
541            // MODE different de CREER
542            if ($maj != 0 || $crud != 'create') {
543                $form->setLib('json_payload', '');
544                $form->setLib("task", __("identifiant"));
545                $form->setLib("Task_portal", __("task_portal"));
546                $form->setLib("type", __("type"));
547                $form->setLib("object_id", __("Réf. interne"));
548                $form->setLib("stream", __("flux"));
549                $form->setLib("timestamp_log", __("Historique"));
550            }
551      }      }
552    
553      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
554          $ret = parent::verifier($val, $dnu1, $dnu2);          $ret = parent::verifier($val, $dnu1, $dnu2);
555    
         if (array_key_exists('timestamp_log', $this->valF) === true  
             && is_array(json_decode($this->valF['timestamp_log'], true)) === false) {  
             //  
             $this->correct = false;  
             $this->addToMessage(sprintf(  
                 __("Le champ %s doit être dans un format JSON valide."),  
                 sprintf('<span class="bold">%s</span>', $this->getLibFromField('timestamp_log'))  
             ));  
         }  
   
556          // une tâche entrante doit avoir un type et une payload non-vide          // une tâche entrante doit avoir un type et une payload non-vide
557          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
558              if (isset($this->valF['type']) === false) {              if (isset($this->valF['type']) === false) {
# Line 182  class task extends task_gen { Line 573  class task extends task_gen {
573              }              }
574          }          }
575    
576          // le JSON doit être décodable          // les JSONs doivent être décodables
577          if (isset($this->valF['json_payload']) && ! empty($this->valF['json_payload']) && (          foreach(array('json_payload', 'timestamp_log') as $key) {
578                  is_array(json_decode($this->valF['json_payload'], true)) === false              if (isset($this->valF[$key]) && ! empty($this->valF[$key]) && (
579                  || json_last_error() !== JSON_ERROR_NONE)) {                      is_array(json_decode($this->valF[$key], true)) === false
580              $this->correct = false;                      || json_last_error() !== JSON_ERROR_NONE)) {
581              $this->addToMessage(sprintf(                  $this->correct = false;
582                  __("Le champ %s doit être dans un format JSON valide (erreur: %s)."),                  $champ_text = sprintf('<span class="bold">%s</span>', $this->getLibFromField($key));
583                  sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'),                  $this->addToMessage(sprintf(
584                  json_last_error() !== JSON_ERROR_NONE ? json_last_error_msg() : __('invalide'))                      __("Le champ %s doit être dans un format JSON valide (erreur: %s).".
585              ));                      "<p>%s valF:</br><pre>%s</pre></p>".
586              $this->addToLog(__METHOD__.'(): erreur JSON: '.$this->msg, DEBUG_MODE);                      "<p>%s val:</br><pre>%s</pre></p>".
587                        "<p>%s POST:</br><pre>%s</pre></p>".
588                        "<p>%s submitted POST value:</br><pre>%s</pre></p>"),
589                        $champ_text,
590                        json_last_error() !== JSON_ERROR_NONE ? json_last_error_msg() : __('invalide'),
591                        $champ_text,
592                        $this->valF[$key],
593                        $champ_text,
594                        $val[$key],
595                        $champ_text,
596                        isset($_POST[$key]) ? $_POST[$key] : '',
597                        $champ_text,
598                        $this->f->get_submitted_post_value($key)
599                    ));
600                    $this->addToLog(__METHOD__.'(): erreur JSON: '.$this->msg, DEBUG_MODE);
601                }
602          }          }
603    
604          // une tâche entrante doit avoir une payload avec les clés requises          // une tâche entrante doit avoir une payload avec les clés requises
605          elseif (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {          if ($this->correct && (isset($this->valF['stream']) === false ||
606                                   $this->valF['stream'] == 'input')) {
607    
608              // décode la payload JSON              // décode la payload JSON
609                // TODO : COMMENTER
610              $json_payload = json_decode($this->valF['json_payload'], true);              $json_payload = json_decode($this->valF['json_payload'], true);
611    
612              // défini une liste de chemin de clés requises              // défini une liste de chemin de clés requises
613              $paths = array(              $paths = array();
614                  'external_uids/dossier'              if ($this->valF['category'] === PLATAU) {
615              );                  $paths = array(
616                        'external_uids/dossier'
617                    );
618                }
619    
620              // tâche de type création de DI/DA              // tâche de type création de DI/DA
621              if (isset($this->valF['type']) !== false && $this->valF['type'] == 'create_DI_for_consultation') {              if (isset($this->valF['type']) !== false && $this->valF['type'] == 'create_DI_for_consultation') {
# Line 222  class task extends task_gen { Line 633  class task extends task_gen {
633                  }                  }
634    
635                  // présence d'un moyen d'identifier la collectivité/le service                  // présence d'un moyen d'identifier la collectivité/le service
636                  if (! isset($json_payload['dossier']['acteur']) &&                  if (! isset($json_payload['external_uids']['acteur']) &&
637                          ! isset($json_payload['dossier']['om_collectivite'])) {                          ! isset($json_payload['dossier']['om_collectivite'])) {
638                      $this->correct = false;                      $this->correct = false;
639                      $this->addToMessage(sprintf(                      $this->addToMessage(sprintf(
640                          __("L'une des clés %s ou %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),                          __("L'une des clés %s ou %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),
641                          sprintf('<span class="bold">%s</span>', 'dossier/acteur'),                          sprintf('<span class="bold">%s</span>', 'external_uids/acteur'),
642                          sprintf('<span class="bold">%s</span>', 'dossier/om_collectivite'),                          sprintf('<span class="bold">%s</span>', 'dossier/om_collectivite'),
643                          sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))                          sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
644                      ));                      ));
# Line 270  class task extends task_gen { Line 681  class task extends task_gen {
681          return $ret && $this->correct;          return $ret && $this->correct;
682      }      }
683    
684      protected function task_exists(string $type, string $object_id) {      /**
685         * [task_exists description]
686         * @param  string $type      [description]
687         * @param  string $object_id [description]
688         * @param  bool   $is_not_done   [description]
689         * @return [type]            [description]
690         */
691        public function task_exists(string $type, string $object_id, string $dossier = null, bool $is_not_done = true) {
692            $qres = $this->f->get_one_result_from_db_query(
693                sprintf(
694                    'SELECT
695                        task
696                    FROM
697                        %1$stask
698                    WHERE
699                        %2$s
700                        type = \'%3$s\'
701                        AND (
702                            object_id = \'%4$s\'
703                            %5$s
704                        )
705                        AND state != \'%6$s\'',
706                    DB_PREFIXE,
707                    $is_not_done == true ? 'state != \''.self::STATUS_DONE.'\' AND' : '',
708                    $type,
709                    $object_id,
710                    $dossier !== null ? sprintf('OR dossier = \'%s\'', $dossier) : '',
711                    self::STATUS_CANCELED
712                ),
713                array(
714                    "origin" => __METHOD__,
715                )
716            );
717            if ($qres["result"] !== null && $qres["result"] !== "") {
718                return $qres["result"];
719            }
720            return false;
721        }
722    
723        /**
724         * Permet la recherche multi-critères des tasks.
725         *
726         * @param  array  $search_values Chaque entrée du tableau est une ligne dans le WHERE
727         * @return mixed                 Retourne le résultat de la requête ou false
728         */
729        public function task_exists_multi_search(array $search_values) {
730          $query = sprintf('          $query = sprintf('
731              SELECT task              SELECT *
732              FROM %1$stask              FROM %1$stask
733              WHERE state != \'%2$s\'              %2$s
734              AND type = \'%3$s\'              %3$s
             AND object_id = \'%4$s\'  
735              ',              ',
736              DB_PREFIXE,              DB_PREFIXE,
737              self::STATUS_DONE,              empty($search_values) === false ? ' WHERE ' : '',
738              $type,              implode(' AND ', $search_values)
739              $object_id          );
740            $res = $this->f->get_all_results_from_db_query(
741                $query,
742                array(
743                    "origin" => __METHOD__,
744                )
745          );          );
746          $res = $this->f->get_one_result_from_db_query($query);          if (count($res['result']) > 0) {
         if ($res['result'] !== null && $res['result'] !== '') {  
747              return $res['result'];              return $res['result'];
748          }          }
749          return false;          return false;
# Line 314  class task extends task_gen { Line 773  class task extends task_gen {
773                      ! empty($json_payload['dossier']['dossier'])) {                      ! empty($json_payload['dossier']['dossier'])) {
774                  $this->valF["dossier"] = $json_payload['dossier']['dossier'];                  $this->valF["dossier"] = $json_payload['dossier']['dossier'];
775              }              }
776            }
777    
778              // sinon si la tâche possède une clé external_uids/dossier          // gestion d'une tache de type notification et de category mail
779              elseif(isset($json_payload['external_uids']['dossier']) &&          if (isset($val['type'])
780                      ! empty($json_payload['external_uids']['dossier'])) {              && (($val['type'] === 'notification_instruction' || $val['type'] === 'notification_decision')
781                    && isset($val['category'])
782                    && $val['category'] === 'mail')
783                || $val['type'] === 'notification_service_consulte'
784                || $val['type'] === 'notification_tiers_consulte'
785                || $val['type'] === 'notification_depot_demat'
786                || $val['type'] === 'notification_commune'
787                ) {
788                // Récupère la payload de la tache
789                $data = array();
790                $data['instruction_notification'] = $this->get_instruction_notification_data(
791                    $this->valF['category'],
792                    'with-id',
793                    array('with-id' => $this->valF['object_id'])
794                );
795                $data['dossier'] = $this->get_dossier_data($this->valF['dossier']);
796    
797                  // instancie l'objet lien_id_interne_uid_externe              // Récupère l'instance de la notification
798                  $inst_lien = $this->f->get_inst__om_dbform(array(              $inst_notif = $this->f->get_inst__om_dbform(array(
799                      "obj" => "lien_id_interne_uid_externe",                  "obj" => "instruction_notification",
800                      "idx" => ']',                  "idx" => $val['object_id'],
801                ));
802                // Envoi le mail et met à jour le suivi
803                $envoiMail = $inst_notif->send_mail_notification($data, $val['type']);
804                // Passage de la tache à done si elle a réussi et à error
805                // si l'envoi a échoué
806                $this->valF['state'] = 'done';
807                if ($envoiMail === false) {
808                    $this->valF['state'] = 'error';
809                }
810            }
811        }
812    
813        /**
814         * TRIGGER - triggermodifier.
815         *
816         * @param string $id
817         * @param null &$dnu1 @deprecated  Ne pas utiliser.
818         * @param array $val Tableau des valeurs brutes.
819         * @param null $dnu2 @deprecated  Ne pas utiliser.
820         *
821         * @return boolean
822         */
823        function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
824            parent::triggermodifier($id, $dnu1, $val, $dnu2);
825            $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
826    
827            // Mise à jour des valeurs, notamment du timestamp_log en fonction de plusieurs critères
828            $values = array(
829                'state' => $this->valF['state'],
830                'object_id' => $this->valF['object_id'],
831                'comment' => $this->valF['comment'],
832            );
833            $new_values = $this->set_values_for_update($values);
834            if ($new_values === false) {
835                $this->addToLog(__METHOD__."(): erreur timestamp log", DEBUG_MODE);
836                return false;
837            }
838    
839            // Mise à jour des valeurs
840            $this->valF['timestamp_log'] = $new_values['timestamp_log'];
841            $this->valF['state'] = $new_values['state'];
842            $this->valF['object_id'] = $new_values['object_id'];
843            $this->valF['last_modification_date'] = date('Y-m-d');
844            $this->valF['last_modification_time'] = date('H:i:s');
845            if ($val['stream'] === 'output') {
846                // Lorsque la task passe d'un état qui n'est pas "done" à l'état "done"
847                if ($this->getVal("state") !== self::STATUS_DONE
848                    && $this->valF['state'] === self::STATUS_DONE) {
849                    //
850                    $this->valF['json_payload'] = $this->view_form_json(true);
851                }
852                // Lorsque la task passe d'un état "done" à un état qui n'est pas "done"
853                if ($this->getVal("state") === self::STATUS_DONE
854                    && $this->valF['state'] !== self::STATUS_DONE) {
855                    //
856                    $this->valF['json_payload'] = "{}";
857                }
858            }
859    
860            return true;
861        }
862    
863    
864        /**
865         * Applique nouvelle valeur après traitement.
866         *
867         * @param array $params Tableau des valeurs en entrées
868         * @return array        Tableau des valeurs en sorties
869         */
870        public function set_values_for_update($params = array()) {
871    
872            // Récupération du timestamp_log existant
873            $timestamp_log = $this->get_timestamp_log();
874            if ($timestamp_log === false) {
875                return false;
876            }
877    
878            // Vérification des object_id précédent en cas de tentative d'appliquer
879            // l'état CANCELED sur la tâche
880            if (isset($params['state']) === true
881                && $params['state'] === self::STATUS_CANCELED) {
882                // Récupération du journal d'activité de la tâche sous forme de tableau
883                // trié par ordre décroissant
884                $log = $timestamp_log;
885                krsort($log);
886                // Pour chaque entrée dans le journal d'activité de la tâche :
887                // - vérification de la présence de l'object_id précédent
888                // - vérification que l'object_id précédent existe toujours dans la base de données
889                // - l'object_id est mise à jour avec la valeur de l'object_id précédent
890                // - le state n'est pas modifié
891                // - sortie du traitement dès que le premier object_id précédent existant est trouvé
892                // - si aucun object_id précédent existant n'est trouvé alors ni le state, ni l'object_id n'est modifiés
893                foreach ($log as $key => $value) {
894                    //
895                    if (isset($value['prev_object_id']) === true
896                        && $this->getVal('object_id') !== $value['prev_object_id']) {
897                        // Récupère la liste des tables potentielles pour un type de tâche
898                        $tables = $this->get_tables_by_task_type($this->getVal('type'), $this->getVal('stream'));
899                        foreach ($tables as $table) {
900                            // Vérifie s'il y a un ou aucun résultat
901                            $qres = $this->f->get_one_result_from_db_query(
902                                sprintf(
903                                    'SELECT
904                                        COUNT(%2$s)
905                                    FROM
906                                        %1$s%2$s
907                                    WHERE
908                                        %2$s::CHARACTER VARYING = \'%3$s\'',
909                                    DB_PREFIXE,
910                                    $table,
911                                    $value['prev_object_id']
912                                ),
913                                array(
914                                    "origin" => __METHOD__,
915                                    "force_return" => true,
916                                )
917                            );
918                            if ($qres["code"] !== "OK") {
919                                return $this->end_treatment(__METHOD__, false);
920                            }
921                            // Affectation des valeurs et sortie de la boucle
922                            if ($qres["result"] == '1') {
923                                $params['object_id'] = $value['prev_object_id'];
924                                $params['state'] = $this->getVal('state');
925                                break;
926                            }
927                        }
928                        // Sortie de la boucle si les valeurs sont affectées
929                        if ($params['object_id'] !== null
930                            && $params['object_id'] === $value['prev_object_id']) {
931                            //
932                            break;
933                        }
934                    }
935                }
936            }
937    
938            // Mise à jour du journal d'activité de la tâche
939            array_push($timestamp_log, array(
940                'modification_date' => date('Y-m-d H:i:s'),
941                'object_id' => $params['object_id'] !== null ? $params['object_id'] : $this->getVal('object_id'),
942                'prev_object_id' => $this->getVal('object_id'),
943                'state' =>  $params['state'],
944                'prev_state' => $this->getVal('state'),
945                'comment' => isset($params['comment']) ? $params['comment'] : $this->getVal('comment'),
946            ));
947            //
948            $timestamp_log = json_encode($timestamp_log);
949            
950    
951            // Les nouvelles valeurs après vérification des critères
952            $result = array(
953                'timestamp_log' => $timestamp_log,
954                'object_id' => $params['object_id'],
955                'state' => $params['state'],
956                'comment' => $params['comment'],
957            );
958            return $result;
959        }
960    
961        
962        /**
963         * TRIGGER - triggermodifierapres.
964         *
965         * @param string $id
966         * @param null &$dnu1 @deprecated  Ne pas utiliser.
967         * @param array $val Tableau des valeurs brutes.
968         * @param null $dnu2 @deprecated  Ne pas utiliser.
969         *
970         * @return boolean
971         */
972        public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
973            parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
974    
975            // Suivi des notificiations
976            // En cas de changement de l'état de la tâche de notification, alors
977            // le suivi des dates de la notification et de l'instruction, est effectué
978            if (isset($val['category']) === true
979                && $val['category'] === PORTAL
980                && isset($val['type']) === true
981                && ($val['type'] === 'notification_recepisse'
982                    || $val['type'] === 'notification_instruction'
983                    || $val['type'] === 'notification_decision'
984                    || $val['type'] === 'notification_service_consulte'
985                    || $val['type'] === 'notification_tiers_consulte')) {
986                //
987                if (isset($this->valF['state']) === true
988                    && $this->valF['state'] !== $this->getVal('state')
989                    && $this->valF['state'] !== self::STATUS_CANCELED) {
990                    //
991                    $inst_in = $this->f->get_inst__om_dbform(array(
992                        "obj" => "instruction_notification",
993                        "idx" => $val['object_id'],
994                  ));                  ));
995                  if(! $dossier = $inst_lien->get_id_dossier_from_external_uid(                  $valF_in = array();
996                          $json_payload['external_uids']['dossier'])){                  foreach ($inst_in->champs as $champ) {
997                      $error_msg = sprintf(                      $valF_in[$champ] = $inst_in->getVal($champ);
998                          __("Aucune correspondance de dossier pour l'external_uid.dossier '%s'."),                  }
999                          $json_payload['external_uids']['dossier']);                  // Par défaut la date d'envoi et la date de premier accès sur
1000                      $this->addToLog(__METHOD__."() : erreur : $error_msg", DEBUG_MODE);                  // la notification ne sont pas renseignées
1001                      $this->addToMessage($error_msg);                  $valF_in['date_envoi'] = null;
1002                      $this->correct = false;                  $valF_in['date_premier_acces'] = null;
1003                    // Lorsque la tâche est correctement traitée
1004                    if ($this->valF['state'] === self::STATUS_DONE) {
1005                        //
1006                        $valF_in['statut'] = __("envoyé");
1007                        $valF_in['commentaire'] = __("Notification traitée");
1008                        $valF_in['date_envoi'] = date('d/m/Y H:i:s');
1009                        // Si l'instruction possède un document lié, alors ses dates
1010                        // de suivi sont mises à jour
1011                        $inst_instruction = $this->f->get_inst__om_dbform(array(
1012                            "obj" => "instruction",
1013                            "idx" => $inst_in->getVal('instruction'),
1014                        ));
1015                        if ($inst_instruction->has_an_edition() === true) {
1016                            $valF_instruction = array();
1017                            foreach ($inst_instruction->champs as $champ) {
1018                                $valF_instruction[$champ] = $inst_instruction->getVal($champ);
1019                            }
1020                            $valF_instruction['date_envoi_rar'] = date('d/m/Y');
1021                            $valF_instruction['date_retour_rar'] = date('d/m/Y', strtotime('now + 1 day'));
1022                            // Action spécifique pour identifier que la modification
1023                            // est une notification de demandeur
1024                            $inst_instruction->setParameter('maj', 175);
1025                            $update_instruction = $inst_instruction->modifier($valF_instruction);
1026                            if ($update_instruction === false) {
1027                                $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);
1028                                return false;
1029                            }
1030                        }
1031                    }
1032                    // En cas d'erreur lors du traitement de la task
1033                    if ($this->valF['state'] === self::STATUS_ERROR) {
1034                        $valF_in['statut'] = __("échec");
1035                        $valF_in['commentaire'] = __("Le traitement de la notification a échoué");
1036                    }
1037                    // Met à jour la notification
1038                    $inst_in->setParameter('maj', 1);
1039                    $update_in = $inst_in->modifier($valF_in);
1040                    if ($update_in === false) {
1041                        $this->addToLog(__METHOD__."(): ".$inst_in->msg, DEBUG_MODE);
1042                      return false;                      return false;
1043                  }                  }
                 $this->valF["dossier"] = $dossier;  
1044              }              }
1045          }          }
1046    
1047            // Envoi au contrôle de légalité
1048            // En cas de changement de l'état de la tâche envoi_CL, alors le suivi
1049            // des dates de l'instruction est effectué
1050            if ($val['type'] === 'envoi_CL'
1051                && isset($this->valF['state']) === true
1052                && $this->valF['state'] === self::STATUS_DONE) {
1053                //
1054                $inst_instruction = $this->f->get_inst__om_dbform(array(
1055                    "obj" => "instruction",
1056                    "idx" => $this->getVal('object_id'),
1057                ));
1058                if ($inst_instruction->has_an_edition() === true) {
1059                    $valF_instruction = array();
1060                    foreach ($inst_instruction->champs as $champ) {
1061                        $valF_instruction[$champ] = $inst_instruction->getVal($champ);
1062                    }
1063                }
1064                $valF_instruction['date_envoi_controle_legalite'] = date("Y-m-d");
1065                $inst_instruction->setParameter('maj', 1);
1066                $update_instruction = $inst_instruction->modifier($valF_instruction);
1067                if ($update_instruction === false) {
1068                    $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);
1069                    return false;
1070                }
1071            }
1072    
1073            //
1074            return true;
1075      }      }
1076    
1077      /**      /**
# Line 348  class task extends task_gen { Line 1083  class task extends task_gen {
1083       */       */
1084      public function add_task($params = array()) {      public function add_task($params = array()) {
1085          $this->begin_treatment(__METHOD__);          $this->begin_treatment(__METHOD__);
1086          $timestamp_log = json_encode(array(  
1087              'creation_date' => date('Y-m-d H:i:s'),          // Vérifie si la task doit être ajoutée en fonction du mode de l'application,
1088          ));          // seulement pour les tasks output
1089            $task_types_si = self::TASK_TYPE_SI;
1090            $task_types_sc = self::TASK_TYPE_SC;
1091            $stream = isset($params['val']['stream']) === true ? $params['val']['stream'] : 'output';
1092            if ($stream === 'output'
1093                && isset($params['val']['type']) === true
1094                && $this->f->is_option_mode_service_consulte_enabled() === true
1095                && in_array($params['val']['type'], $task_types_sc) === false) {
1096                //
1097                return $this->end_treatment(__METHOD__, true);
1098            }
1099            if ($stream === 'output'
1100                && isset($params['val']['type']) === true
1101                && $this->f->is_option_mode_service_consulte_enabled() === false
1102                && in_array($params['val']['type'], $task_types_si) === false) {
1103                //
1104                return $this->end_treatment(__METHOD__, true);
1105            }
1106    
1107            //
1108            $timestamp_log = json_encode(array());
1109    
1110            //
1111            $category = isset($params['val']['category']) === true ? $params['val']['category'] : $this->category;
1112    
1113          // Si la tâche est de type ajout_piece et de stream input alors on ajoute le fichier          // Si la tâche est de type ajout_piece et de stream input alors on ajoute le fichier
1114          // et on ajoute l'uid dans le champ json_payload avant l'ajout de la tâche          // et on ajoute l'uid dans le champ json_payload avant l'ajout de la tâche
1115          if (isset($params['val']['type'])          if (isset($params['val']['type'])
1116              && $params['val']['type'] == "add_piece"              && ($params['val']['type'] == "add_piece" || $params['val']['type'] == "avis_consultation")
1117              && isset($params['val']['stream'])              && isset($params['val']['stream'])
1118              && $params['val']['stream'] == "input" ) {              && $params['val']['stream'] == "input" ) {
1119              //              //
1120              $json_payload = json_decode($params['val']['json_payload'], true);              $json_payload = json_decode($params['val']['json_payload'], true);
1121              $document_numerise = $json_payload['document_numerise'];              if (json_last_error() !== JSON_ERROR_NONE) {
1122              $file_content = base64_decode($document_numerise["file_content"]);                  $this->addToMessage(__("Le contenu JSON de la tâche n'est pas valide."));
             if ($file_content === false){  
                 $this->addToMessage(__("Le contenu du fichier lié à la tâche n'a pas pu etre recupere."));  
1123                  return $this->end_treatment(__METHOD__, false);                  return $this->end_treatment(__METHOD__, false);
1124              }              }
1125              $metadata = array(              if (isset($json_payload['document_numerise']["file_content"]) === true
1126                  "filename" => $document_numerise['nom_fichier'],                  && empty($json_payload['document_numerise']["file_content"]) === false) {
1127                  "size" => strlen($file_content),                  //
1128                  "mimetype" => $document_numerise['file_content_type'],                  $document_numerise = $json_payload['document_numerise'];
1129                  "date_creation" => $document_numerise['date_creation'],                  $file_content = base64_decode($document_numerise["file_content"]);
1130              );                  if ($file_content === false){
1131              $uid_fichier = $this->f->storage->create($file_content, $metadata, "from_content");                      $this->addToMessage(__("Le contenu du fichier lié à la tâche n'a pas pu etre recupere."));
1132              if ($uid_fichier === OP_FAILURE) {                      return $this->end_treatment(__METHOD__, false);
1133                  $this->addToMessage(__("Erreur lors de la creation du fichier lié à la tâche."));                  }
1134                  return $this->end_treatment(__METHOD__, false);                  $metadata = array(
1135                        "filename" => $document_numerise['nom_fichier'],
1136                        "size" => strlen($file_content),
1137                        "mimetype" => $document_numerise['file_content_type'],
1138                        "date_creation" => isset($document_numerise['date_creation']) === true ? $document_numerise['date_creation'] : date("Y-m-d"),
1139                    );
1140                    $uid_fichier = $this->f->storage->create($file_content, $metadata, "from_content", "task.uid_fichier");
1141                    if ($uid_fichier === OP_FAILURE) {
1142                        $this->addToMessage(__("Erreur lors de la creation du fichier lié à la tâche."));
1143                        return $this->end_treatment(__METHOD__, false);
1144                    }
1145                    $json_payload["document_numerise"]["uid"] = $uid_fichier;
1146                    // Le fichier a été ajouté nous n'avons plus besoin du champ file_content dans la payload
1147                    unset($json_payload["document_numerise"]["file_content"]);
1148                    $params['val']['json_payload'] = json_encode($json_payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
1149              }              }
             $json_payload["document_numerise"]["uid"] = $uid_fichier;  
             // Le fichier a été ajouté nous n'avons plus besoin du champ file_content dans la payload  
             unset($json_payload["document_numerise"]["file_content"]);  
             $params['val']['json_payload'] = json_encode($json_payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);  
1150          }          }
1151    
1152          // Mise à jour du DI          // Mise à jour du DI
# Line 391  class task extends task_gen { Line 1157  class task extends task_gen {
1157              'state' => isset($params['val']['state']) === true ? $params['val']['state'] : self::STATUS_NEW,              'state' => isset($params['val']['state']) === true ? $params['val']['state'] : self::STATUS_NEW,
1158              'object_id' => isset($params['val']['object_id']) ? $params['val']['object_id'] : '',              'object_id' => isset($params['val']['object_id']) ? $params['val']['object_id'] : '',
1159              'dossier' => isset($params['val']['dossier']) ? $params['val']['dossier'] : '',              'dossier' => isset($params['val']['dossier']) ? $params['val']['dossier'] : '',
1160              'stream' => isset($params['val']['stream']) === true ? $params['val']['stream'] : 'output',              'stream' => $stream,
1161              'json_payload' => isset($params['val']['json_payload']) === true ? $params['val']['json_payload'] : '{}',              'json_payload' => isset($params['val']['json_payload']) === true ? $params['val']['json_payload'] : '{}',
1162                'category' => $category,
1163                'creation_date' => date('Y-m-d'),
1164                'creation_time' => date('H:i:s'),
1165                'last_modification_date' => null,
1166                'last_modification_time' => null,
1167                'comment' => null,
1168          );          );
1169    
1170          // tâche sortante          // tâche sortante
1171          if($valF["stream"] == "output"){          $typeNonConcerne = array(
1172                'notification_recepisse',
1173                'notification_instruction',
1174                'notification_decision',
1175                'notification_service_consulte',
1176                'notification_tiers_consulte'
1177            );
1178            if ($valF["stream"] == "output"
1179                && ! in_array($valF['type'], $typeNonConcerne)) {
1180              // TODO expliquer ce code              // TODO expliquer ce code
1181              $task_exists = $this->task_exists($valF['type'], $valF['object_id']);              $task_exists = $this->task_exists($valF['type'], $valF['object_id'], $valF['dossier']);
1182              if ($valF['type'] === 'modification_DI' && $task_exists === false) {              if ($valF['type'] === 'modification_DI' && $task_exists === false) {
1183                  $task_exists = $this->task_exists('creation_DI', $valF['object_id']);                  $task_exists = $this->task_exists('creation_DI', $valF['object_id']);
1184              }              }
1185                if ($valF['type'] === 'modification_DA' && $task_exists === false) {
1186                    $task_exists = $this->task_exists('creation_DA', $valF['object_id']);
1187                }
1188                if ($valF['type'] === 'ajout_piece') {
1189                    $task_exists = $this->task_exists('ajout_piece', $valF['object_id']);
1190                }
1191                if ($valF['type'] === 'creation_consultation') {
1192                    $task_exists = $this->task_exists('creation_consultation', $valF['object_id']);
1193                }
1194              if ($task_exists !== false) {              if ($task_exists !== false) {
1195                  $inst_task = $this->f->get_inst__om_dbform(array(                  $inst_task = $this->f->get_inst__om_dbform(array(
1196                      "obj" => "task",                      "obj" => "task",
# Line 416  class task extends task_gen { Line 1204  class task extends task_gen {
1204                      'val' => array(                      'val' => array(
1205                          'state' => $update_state,                          'state' => $update_state,
1206                      ),                      ),
1207                        'object_id' => $valF['object_id'],
1208                  );                  );
1209                  return $inst_task->update_task($update_params);                  return $inst_task->update_task($update_params);
1210              }              }
1211          }          }
   
1212          $add = $this->ajouter($valF);          $add = $this->ajouter($valF);
1213          $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);          $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);
1214          if ($add === false) {          if ($add === false) {
# Line 439  class task extends task_gen { Line 1227  class task extends task_gen {
1227       */       */
1228      public function update_task($params = array()) {      public function update_task($params = array()) {
1229          $this->begin_treatment(__METHOD__);          $this->begin_treatment(__METHOD__);
1230          $timestamp_log = $this->get_timestamp_log();  
1231          if ($timestamp_log === false) {          // Mise à jour de la tâche
             $this->addToLog(__('XXX'), DEBUG_MODE);  
             return $this->end_treatment(__METHOD__, false);  
         }  
         array_push($timestamp_log, array(  
             'modification_date' => date('Y-m-d H:i:s'),  
             'state' => $params['val']['state'],  
             'prev_state' => $this->getVal('state'),  
         ));  
         $timestamp_log = json_encode($timestamp_log);  
1232          $valF = array(          $valF = array(
1233              'task' => $this->getVal($this->clePrimaire),              'task' => $this->getVal($this->clePrimaire),
1234              'type' => $this->getVal('type'),              'type' => $this->getVal('type'),
1235              'timestamp_log' => $timestamp_log,              'timestamp_log' => '[]',
1236              'state' => $params['val']['state'],              'state' => $params['val']['state'],
1237              'object_id' => $this->getVal('object_id'),              'object_id' => isset($params['object_id']) == true ? $params['object_id'] : $this->getVal('object_id'),
1238              'stream' => $this->getVal('stream'),              'stream' => $this->getVal('stream'),
1239              'dossier' => $this->getVal('dossier'),              'dossier' => $this->getVal('dossier'),
1240              'json_payload' => $this->getVal('json_payload'),              'json_payload' => $this->getVal('json_payload'),
1241                'category' => $this->getVal('category'),
1242                'creation_date' => $this->getVal('creation_date'),
1243                'creation_time' => $this->getVal('creation_time'),
1244                'last_modification_date' => date('Y-m-d'),
1245                'last_modification_time' => date('H:i:s'),
1246                'comment' => $this->getVal('comment'),
1247          );          );
1248          $update = $this->modifier($valF);          $update = $this->modifier($valF);
1249          if ($update === false) {          if ($update === false) {
# Line 507  class task extends task_gen { Line 1292  class task extends task_gen {
1292    
1293      protected function view_tab_json() {      protected function view_tab_json() {
1294          $where = '';          $where = '';
1295          if ($this->f->get_submitted_get_value('state') !== null          $category = null;
1296              && $this->f->get_submitted_get_value('state') !== '') {          // Liste des paramètres possibles pour la recherche des tâches
1297            $params = array(
1298                'task',
1299                'type',
1300                'state',
1301                'object_id',
1302                'dossier',
1303                'stream',
1304                'category',
1305                'lien_id_interne_uid_externe',
1306                'object',
1307                'external_uid',
1308            );
1309            // Pour chaque paramètre possible, vérification de son existance et de sa
1310            // valeur pour compléter la requête de recherche
1311            foreach ($params as $param) {
1312              //              //
1313              $where = sprintf(' WHERE state = \'%s\' ', $this->f->get_submitted_get_value('state'));              if ($this->f->get_submitted_get_value($param) !== null
1314                    && $this->f->get_submitted_get_value($param) !== '') {
1315                    // Condition spécifique au champ 'category'
1316                    if ($param === 'category') {
1317                        $category = $this->f->get_submitted_get_value('category');
1318                    }
1319                    //
1320                    $where_or_and = 'WHERE';
1321                    if ($where !== '') {
1322                        $where_or_and = 'AND';
1323                    }
1324                    $table = 'task';
1325                    if ($param === 'lien_id_interne_uid_externe'
1326                        || $param === 'object'
1327                        || $param === 'external_uid') {
1328                        //
1329                        $table = 'lien_id_interne_uid_externe';
1330                    }
1331                    $where .= sprintf(' %s %s.%s = \'%s\' ', $where_or_and, $table, $param, $this->f->get_submitted_get_value($param));
1332                }
1333          }          }
1334            //
1335          $query = sprintf('          $query = sprintf('
1336              SELECT              SELECT
1337                  *                  task.*
1338              FROM %1$stask              FROM %1$stask
1339                LEFT JOIN %1$slien_id_interne_uid_externe
1340                    ON task.object_id = lien_id_interne_uid_externe.object_id
1341                    AND task.category = lien_id_interne_uid_externe.category
1342              %2$s              %2$s
1343              ORDER BY task ASC              ORDER BY task ASC
1344              ',              ',
1345              DB_PREFIXE,              DB_PREFIXE,
1346              $where              $where
1347          );          );
1348          $res = $this->f->get_all_results_from_db_query($query, true);          $res = $this->f->get_all_results_from_db_query(
1349                $query,
1350                array(
1351                    "origin" => __METHOD__,
1352                    "force_return" => true,
1353                )
1354            );
1355          if ($res['code'] === 'KO') {          if ($res['code'] === 'KO') {
1356              return false;              return false;
1357          }          }
1358          $list_tasks = array();          $list_tasks = array();
1359          foreach ($res['result'] as $task) {          foreach ($res['result'] as $task) {
1360              $task['timestamp_log'] = json_decode($task['timestamp_log'], true);              unset($task['timestamp_log']);
1361              $task['dossier'] = $task['object_id'];              unset($task['json_payload']);
1362              if ($this->get_lien_objet_by_type($task['type']) === 'document_numerise') {              if ($task['type'] === 'ajout_piece') {
1363                  $val_dn = $this->get_document_numerise_data($task['object_id']);                  $val_dn = $this->get_document_numerise_data($task['object_id']);
1364                  $task['dossier'] = $val_dn['dossier'];              }
1365                if ($task['stream'] === 'output') {
1366                    $task['external_uids'] = array_merge(
1367                        $this->get_all_external_uids($task['dossier'], array(), $category !== null ? $category : $task['category']),
1368                        $this->get_all_external_uids($task['object_id'], array(), $category !== null ? $category : $task['category'])
1369                    );
1370              }              }
1371              $list_tasks[$task['task']] = $task;              $list_tasks[$task['task']] = $task;
1372          }          }
1373          printf(json_encode($list_tasks));          echo(json_encode($list_tasks));
1374      }      }
1375    
1376      protected function get_dossier_data(string $dossier) {      protected function get_dossier_data(string $dossier) {
# Line 545  class task extends task_gen { Line 1379  class task extends task_gen {
1379              "obj" => "dossier",              "obj" => "dossier",
1380              "idx" => $dossier,              "idx" => $dossier,
1381          ));          ));
1382            if (empty($inst_di->val) === true) {
1383                return $val_di;
1384            }
1385          $val_di = $inst_di->get_json_data();          $val_di = $inst_di->get_json_data();
1386          if ($val_di['dossier_instruction_type_code'] === 'T') {          if ($val_di['dossier_instruction_type_code'] === 'T') {
1387              $val_di['date_decision_transfert'] = $val_di['date_decision'];              $val_di['date_decision_transfert'] = $val_di['date_decision'];
# Line 675  class task extends task_gen { Line 1512  class task extends task_gen {
1512          return $val_dt;          return $val_dt;
1513      }      }
1514    
1515      protected function get_external_uid($fk_idx, string $fk_idx_2) {      /**
1516         * Récupère la liste des objets distincts existants dans la table des liens
1517         * entre identifiants internes et identifiants externes.
1518         *
1519         * @return array
1520         */
1521        protected function get_list_distinct_objects_external_link() {
1522            $query = sprintf('
1523                SELECT
1524                    DISTINCT(object)
1525                FROM %1$slien_id_interne_uid_externe
1526                ORDER BY object ASC
1527                ',
1528                DB_PREFIXE
1529            );
1530            $res = $this->f->get_all_results_from_db_query(
1531                $query,
1532                array(
1533                    "origin" => __METHOD__,
1534                    "force_return" => true,
1535                )
1536            );
1537            if ($res['code'] === 'KO') {
1538                return array();
1539            }
1540            $result = array();
1541            foreach ($res['result'] as $object) {
1542                $result[] = $object['object'];
1543            }
1544            return $result;
1545        }
1546    
1547        protected function get_external_uid($fk_idx, string $fk_idx_2, $fk_idx_3 = PLATAU, $order_asc_desc = 'DESC') {
1548          $inst_external_uid = $this->f->get_inst__by_other_idx(array(          $inst_external_uid = $this->f->get_inst__by_other_idx(array(
1549              "obj" => "lien_id_interne_uid_externe",              "obj" => "lien_id_interne_uid_externe",
1550              "fk_field" => 'object_id',              "fk_field" => 'object_id',
1551              "fk_idx" => $fk_idx,              "fk_idx" => $fk_idx,
1552              "fk_field_2" => 'object',              "fk_field_2" => 'object',
1553              "fk_idx_2" => $fk_idx_2,              "fk_idx_2" => $fk_idx_2,
1554                "fk_field_3" => 'category',
1555                "fk_idx_3" => $fk_idx_3,
1556                "order_field" => 'lien_id_interne_uid_externe',
1557                "order_asc_desc" => $order_asc_desc,
1558          ));          ));
1559          return $inst_external_uid->getVal('external_uid');          return $inst_external_uid->getVal('external_uid');
1560      }      }
1561    
1562      protected function get_demandeurs_data(string $dossier) {      protected function get_all_external_uids($fk_idx, $link_objects = array(), $category=PLATAU) {
1563            if (count($link_objects) == 0) {
1564                $link_objects = $this->get_list_distinct_objects_external_link();
1565            }
1566            $val_external_uid = array();
1567            foreach ($link_objects as $link_object) {
1568                $external_uid = $this->get_external_uid($fk_idx, $link_object, $category);
1569                if ($external_uid !== '' && $external_uid !== null) {
1570                    $val_external_uid[$link_object] = $external_uid;
1571                }
1572            }
1573            return $val_external_uid;
1574        }
1575    
1576        protected function get_demandeurs_data($dossier) {
1577          $val_demandeur = array();          $val_demandeur = array();
1578            if ($dossier === null) {
1579                return $val_demandeur;
1580            }
1581          $inst_di = $this->f->get_inst__om_dbform(array(          $inst_di = $this->f->get_inst__om_dbform(array(
1582              "obj" => "dossier",              "obj" => "dossier",
1583              "idx" => $dossier,              "idx" => $dossier,
# Line 718  class task extends task_gen { Line 1608  class task extends task_gen {
1608          return $val_architecte;          return $val_architecte;
1609      }      }
1610    
1611      protected function get_instruction_data(string $dossier, $type = 'decision') {      protected function get_instruction_data($dossier, $type = 'decision', $extra_params = array()) {
1612          $val_instruction = null;          $val_instruction = null;
1613            if ($dossier === null) {
1614                return $val_instruction;
1615            }
1616          $instruction_with_doc = null;          $instruction_with_doc = null;
1617          $inst_di = $this->f->get_inst__om_dbform(array(          $inst_di = $this->f->get_inst__om_dbform(array(
1618              "obj" => "dossier",              "obj" => "dossier",
# Line 732  class task extends task_gen { Line 1625  class task extends task_gen {
1625          if ($type === 'incompletude') {          if ($type === 'incompletude') {
1626              $idx = $inst_di->get_last_instruction_incompletude();              $idx = $inst_di->get_last_instruction_incompletude();
1627          }          }
1628            // XXX Permet de récupérer l'instruction par son identifiant
1629            if ($type === 'with-id') {
1630                $idx = $extra_params['with-id'];
1631            }
1632          $inst_instruction = $this->f->get_inst__om_dbform(array(          $inst_instruction = $this->f->get_inst__om_dbform(array(
1633              "obj" => "instruction",              "obj" => "instruction",
1634              "idx" => $idx,              "idx" => $idx,
# Line 775  class task extends task_gen { Line 1672  class task extends task_gen {
1672          return $val_instruction;          return $val_instruction;
1673      }      }
1674    
1675    
1676        /**
1677         * Récupère les informations pour les notifications ayant plusieurs annexe
1678        */
1679        protected function get_instruction_notification_data($category, $type = '', $extra_params = array()) {
1680            $val_in = null;
1681    
1682            $idx = null;
1683            if ($type === 'with-id') {
1684                $idx = $extra_params['with-id'];
1685            }
1686    
1687            // Récupération du type de notification. Le type est nécessaire pour récupérer
1688            // le message et le titre de notification.
1689            $typeNotification = $this->getVal('type');
1690            if (isset($this->valF['type'])) {
1691                $typeNotification = $this->valF['type'];
1692            }
1693    
1694            // récupére les données à intégrer à la payload
1695            $inst_in = $this->f->get_inst__om_dbform(array(
1696                "obj" => "instruction_notification",
1697                "idx" => $idx,
1698            ));
1699            if (count($inst_in->val) > 0) {
1700                $val_in = $inst_in->get_json_data();
1701    
1702                $val_in['parametre_courriel_type_titre'] = '';
1703                $val_in['parametre_courriel_type_message'] = '';
1704                // Récupération du message et du titre
1705                if ($category === 'mail') {
1706                    $inst_instruction = $this->f->get_inst__om_dbform(array(
1707                        "obj" => "instruction",
1708                        "idx" => $inst_in->getVal('instruction'),
1709                    ));
1710                    $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));
1711                    $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $typeNotification);
1712                    $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];
1713                    $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];
1714                }
1715    
1716                // Récupération des liens vers les documents et des id et type des annexes
1717                $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire), $category);
1718                $cle = $category == PORTAL ? 'path' : 'lien_telechargement_document';
1719                $val_in[$cle] = $infoDocNotif['document']['path'];
1720                $val_in['annexes'] = $infoDocNotif['annexes'];
1721            }
1722            return $val_in;
1723        }
1724    
1725      protected function sort_instruction_data(array $values, array $res) {      protected function sort_instruction_data(array $values, array $res) {
1726          $fields = array(          $fields = array(
1727                "date_evenement",
1728              "date_envoi_signature",              "date_envoi_signature",
1729              "date_retour_signature",              "date_retour_signature",
1730              "date_envoi_rar",              "date_envoi_rar",
# Line 787  class task extends task_gen { Line 1735  class task extends task_gen {
1735              "om_fichier_instruction",              "om_fichier_instruction",
1736              "tacite",              "tacite",
1737              "lettretype",              "lettretype",
1738                "commentaire",
1739                "complement_om_html",
1740          );          );
1741          foreach ($values as $key => $value) {          foreach ($values as $key => $value) {
1742              if (in_array($key, $fields) === true) {              if (in_array($key, $fields) === true) {
# Line 805  class task extends task_gen { Line 1755  class task extends task_gen {
1755          return $res;          return $res;
1756      }      }
1757    
1758        /**
1759         * Permet de définir si l'instruction passée en paramètre est une instruction
1760         * récépissé d'une demande et si la demande en question a générée un dossier d'instruction.
1761         *
1762         * @param  integer  $instruction Identifiant de l'instruction
1763         * @return boolean
1764         */
1765        protected function is_demande_instruction_recepisse_without_dossier($instruction) {
1766            if ($instruction === null) {
1767                return false;
1768            }
1769            $qres = $this->f->get_one_result_from_db_query(
1770                sprintf(
1771                    'SELECT
1772                        demande_type.dossier_instruction_type
1773                    FROM
1774                        %1$sdemande
1775                            INNER JOIN %1$sdemande_type
1776                                ON demande.demande_type = demande_type.demande_type
1777                    WHERE
1778                        demande.instruction_recepisse = %2$s',
1779                    DB_PREFIXE,
1780                    intval($instruction)
1781                ),
1782                array(
1783                    "origin" => __METHOD__,
1784                    "force_return" => true,
1785                )
1786            );
1787            if ($qres["code"] !== "OK") {
1788                return null;
1789            }
1790            if ($qres["result"] === "") {
1791                return true;
1792            }
1793            return false;
1794        }
1795    
1796      protected function get_document_numerise_data(string $dn) {      protected function get_document_numerise_data(string $dn) {
1797          $val_dn = array();          $val_dn = array();
1798          $inst_dn = $this->f->get_inst__om_dbform(array(          $inst_dn = $this->f->get_inst__om_dbform(array(
# Line 837  class task extends task_gen { Line 1825  class task extends task_gen {
1825          return $val_dp;          return $val_dp;
1826      }      }
1827    
1828        protected function get_avis_decision_data(string $dossier) {
1829            $inst_di = $this->f->get_inst__om_dbform(array(
1830                "obj" => "dossier",
1831                "idx" => $dossier,
1832            ));
1833            $ad = $inst_di->getVal('avis_decision');
1834            $val_ad = array();
1835            if ($ad !== null) {
1836                $inst_ad = $this->f->get_inst__om_dbform(array(
1837                    "obj" => "avis_decision",
1838                    "idx" => $ad,
1839                ));
1840                $val_ad = $inst_ad->get_json_data();
1841                $val_ad['txAvis'] = "Voir document joint";
1842                if (isset($val_ad['tacite']) ===  true
1843                    && $val_ad['tacite'] === 't') {
1844                    //
1845                    $val_ad['txAvis'] = "Sans objet";
1846                }
1847            }
1848            return $val_ad;
1849        }
1850    
1851        protected function get_signataire_arrete_data(string $sa) {
1852            $inst_sa = $this->f->get_inst__om_dbform(array(
1853                "obj" => "signataire_arrete",
1854                "idx" => $sa,
1855            ));
1856            $val_sa = array_combine($inst_sa->champs, $inst_sa->val);
1857            foreach ($val_sa as $key => $value) {
1858                $val_sa[$key] = strip_tags($value);
1859            }
1860            return $val_sa;
1861        }
1862    
1863        // XXX WIP
1864        protected function get_consultation_data(string $consultation) {
1865            $val_consultation = array();
1866            $inst_consultation = $this->f->get_inst__om_dbform(array(
1867                "obj" => "consultation",
1868                "idx" => $consultation,
1869            ));
1870            $val_consultation = $inst_consultation->get_json_data();
1871            if (isset($val_consultation['fichier']) === true
1872                && $val_consultation['fichier'] !== '') {
1873                //
1874                $val_consultation['path_fichier'] = sprintf('%s&snippet=%s&obj=%s&champ=%s&id=%s', 'app/index.php?module=form', 'file', 'consultation', 'fichier', $this->getVal('object_id'));
1875            }
1876            if (isset($val_consultation['om_fichier_consultation']) === true
1877                && $val_consultation['om_fichier_consultation'] !== '') {
1878                //
1879                $val_consultation['path_om_fichier_consultation'] = sprintf('%s&snippet=%s&obj=%s&champ=%s&id=%s', 'app/index.php?module=form', 'file', 'consultation', 'om_fichier_consultation', $this->getVal('object_id'));
1880            }
1881            return $val_consultation;
1882        }
1883    
1884        // XXX WIP
1885        protected function get_service_data(string $service) {
1886            $val_service = array();
1887            $inst_service = $this->f->get_inst__om_dbform(array(
1888                "obj" => "service",
1889                "idx" => $service,
1890            ));
1891            $val_service = $inst_service->get_json_data();
1892            return $val_service;
1893        }
1894    
1895      protected function view_form_json($in_field = false) {      protected function view_form_json($in_field = false) {
1896          //          //
1897          if ($this->f->get_submitted_post_value('valid') === null) {          $check_state = isset($this->valF['state']) === true ? $this->valF['state'] : $this->getVal('state');
1898            if ($check_state !== self::STATUS_CANCELED) {
1899              // Liste des valeurs à afficher              // Liste des valeurs à afficher
1900              $val = array();              $val = array();
1901              //              //
# Line 848  class task extends task_gen { Line 1904  class task extends task_gen {
1904                  $val_task[$key] = strip_tags($value);                  $val_task[$key] = strip_tags($value);
1905              }              }
1906              $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);              $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);
1907                unset($val_task['timestamp_log_hidden']);
1908              $val['task'] = $val_task;              $val['task'] = $val_task;
1909              //              //
1910              if ($this->getVal('type') === 'creation_DA') {              if ($this->getVal('type') === 'creation_DA'
1911                    || $this->getVal('type') === 'modification_DA') {
1912                    //
1913                  $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));                  $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));
1914                  $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');                  $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');
1915                  $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);                  $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);
# Line 876  class task extends task_gen { Line 1935  class task extends task_gen {
1935              }              }
1936              //              //
1937              if ($this->getVal('type') === 'qualification_DI') {              if ($this->getVal('type') === 'qualification_DI') {
1938                  $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1939                  $val_external_uid = array();                  $val_external_uid = array();
1940                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1941                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
# Line 889  class task extends task_gen { Line 1948  class task extends task_gen {
1948                  $val_external_uid = array();                  $val_external_uid = array();
1949                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1950                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
1951                  $val_external_uid['document_numerise'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'document_numerise');                  $val_external_uid['piece'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'piece');
1952                  $val['external_uids'] = $val_external_uid;                  $val['external_uids'] = $val_external_uid;
1953              }              }
1954              //              //
1955              if ($this->getVal('type') === 'decision_DI') {              if ($this->getVal('type') === 'decision_DI') {
1956                  $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1957                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier']);                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
1958                    $val['instruction']['final'] = 't';
1959                    if (isset($val['instruction']['signataire_arrete']) === true) {
1960                        $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
1961                    }
1962                  $val_external_uid = array();                  $val_external_uid = array();
1963                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1964                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
# Line 903  class task extends task_gen { Line 1966  class task extends task_gen {
1966              }              }
1967              //              //
1968              if ($this->getVal('type') === 'incompletude_DI') {              if ($this->getVal('type') === 'incompletude_DI') {
1969                  $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1970                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'incompletude');                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
1971                  $val_external_uid = array();                  $val_external_uid = array();
1972                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1973                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
# Line 912  class task extends task_gen { Line 1975  class task extends task_gen {
1975              }              }
1976              //              //
1977              if ($this->getVal('type') === 'completude_DI') {              if ($this->getVal('type') === 'completude_DI') {
1978                  $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));                  $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1979                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'completude');                  $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
1980                    $val_external_uid = array();
1981                    $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1982                    $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
1983                    $val['external_uids'] = $val_external_uid;
1984                }
1985                //
1986                if ($this->getVal('type') === 'pec_metier_consultation') {
1987                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1988                    $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
1989                    $val_external_uid = array();
1990                    $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
1991                    $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
1992                    $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
1993                    $val['external_uids'] = $val_external_uid;
1994                }
1995                //
1996                if ($this->getVal('type') === 'avis_consultation') {
1997                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
1998                    $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
1999                    $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2000                    if (isset($val['instruction']['signataire_arrete']) === true) {
2001                        $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2002                    }
2003                    $val_external_uid = array();
2004                    $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2005                    $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2006                    $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2007                    $val_external_uid['avis_dossier_consultation'] = $this->get_external_uid($this->getVal('object_id'), 'avis_dossier_consultation');
2008                    $val['external_uids'] = $val_external_uid;
2009                }
2010                // XXX WIP
2011                if ($this->getVal('type') === 'creation_consultation') {
2012                    //
2013                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2014                    $val['consultation'] = $this->get_consultation_data($this->getVal('object_id'));
2015                    $val['service'] = $this->get_service_data($val['consultation']['service']);
2016                    $val_external_uid = array();
2017                    $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2018                    $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2019                    $val['external_uids'] = $val_external_uid;
2020                }
2021                //
2022                if ($this->getVal('type') === 'envoi_CL') {
2023                    //
2024                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2025                    $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2026                    $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($val['dossier']['dossier_autorisation']);
2027                    $val_external_uid = array();
2028                    $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2029                    $val_external_uid['dossier'] = $this->get_external_uid($this->getVal('dossier'), 'dossier');
2030                    $val_external_uid['decision'] = $this->get_external_uid($this->getVal('object_id'), 'instruction');
2031                    if ($val_external_uid['decision'] === '') {
2032                        $inst_instruction = $this->f->get_inst__om_dbform(array(
2033                            "obj" => "instruction",
2034                            "idx" => $this->getVal('object_id'),
2035                        ));
2036                        $val_external_uid['decision'] = $this->get_external_uid($inst_instruction->get_related_instructions_next('retour_signature'), 'instruction');
2037                    }
2038                    $val['external_uids'] = $val_external_uid;
2039                }
2040                if ($this->getVal('type') === 'notification_instruction'
2041                    || $this->getVal('type') === 'notification_recepisse'
2042                    || $this->getVal('type') === 'notification_decision'
2043                    || $this->getVal('type') === 'notification_service_consulte'
2044                    || $this->getVal('type') === 'notification_tiers_consulte') {
2045                    //
2046                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2047                    $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;
2048                    $val['demandeur'] = $this->get_demandeurs_data($dossier_id);
2049                    $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));
2050                    $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;
2051                    $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;
2052                    $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));
2053                    // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une
2054                    // demande dont le type ne génère pas de dossier
2055                    if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {
2056                        $val['instruction']['final'] = 't';
2057                    }
2058                    $val_external_uid = array();
2059                    // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier
2060                    $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');
2061                    $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', PORTAL, 'ASC');
2062                    $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', PORTAL);
2063                    $val['external_uids'] = $val_external_uid;
2064                }
2065                //
2066                if ($this->getVal('type') === 'prescription') {
2067                    $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2068                    $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2069                    $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2070                    if (isset($val['instruction']['signataire_arrete']) === true) {
2071                        $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2072                    }
2073                  $val_external_uid = array();                  $val_external_uid = array();
2074                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                  $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2075                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2076                    $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2077                    $val_external_uid['prescription'] = $this->get_external_uid($this->getVal('object_id'), 'prescription');
2078                  $val['external_uids'] = $val_external_uid;                  $val['external_uids'] = $val_external_uid;
2079              }              }
2080    
# Line 924  class task extends task_gen { Line 2082  class task extends task_gen {
2082                  return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);                  return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
2083              } else {              } else {
2084                  // Liste des valeurs affichée en JSON                  // Liste des valeurs affichée en JSON
2085                  printf(json_encode($val, JSON_UNESCAPED_SLASHES));                  echo(json_encode($val, JSON_UNESCAPED_SLASHES));
2086              }              }
2087          }          }
2088      }      }
2089    
2090      function post_update_task() {      function post_update_task() {
2091          // Mise à jour des valeurs          // Mise à jour des valeurs
2092          //  
2093          $params = array(          // Modification de l'état de la tâche
2094              'val' => array(          if ($this->f->get_submitted_post_value('state') !== null) {
2095                  'state' => $this->f->get_submitted_post_value('state')              $params = array(
2096              ),                  'val' => array(
2097          );                      'state' => $this->f->get_submitted_post_value('state')
2098          $update = $this->update_task($params);                  ),
         $message_class = "valid";  
         $message = $this->msg;  
         if ($update === false) {  
             $this->addToLog($this->msg, DEBUG_MODE);  
             $message_class = "error";  
             $message = sprintf(  
                 '%s %s',  
                 __('Impossible de mettre à jour la tâche.'),  
                 __('Veuillez contacter votre administrateur.')  
2099              );              );
2100                $update = $this->update_task($params);
2101                $message_class = "valid";
2102                $message = $this->msg;
2103                if ($update === false) {
2104                    $this->addToLog($this->msg, DEBUG_MODE);
2105                    $message_class = "error";
2106                    $message = sprintf(
2107                        '%s %s',
2108                        __('Impossible de mettre à jour la tâche.'),
2109                        __('Veuillez contacter votre administrateur.')
2110                    );
2111                }
2112                $this->f->displayMessage($message_class, $message);
2113          }          }
2114          $this->f->displayMessage($message_class, $message);  
2115          //          // Sauvegarde de l'uid externe retourné
2116          $inst_lien = $this->f->get_inst__om_dbform(array(          if ($this->f->get_submitted_post_value('external_uid') !== null) {
2117              "obj" => "lien_id_interne_uid_externe",              //
2118              "idx" => ']',              $objects = $this->get_objects_by_task_type($this->getVal('type'), $this->getVal('stream'));
2119          ));              foreach ($objects as $object) {
2120          $valF = array(                  $inst_lien = $this->f->get_inst__om_dbform(array(
2121              'lien_id_interne_uid_externe' => '',                      "obj" => "lien_id_interne_uid_externe",
2122              'object' => $this->get_lien_objet_by_type($this->getVal('type')),                      "idx" => ']',
2123              'object_id' => $this->getVal('object_id'),                  ));
2124              'external_uid' => $this->f->get_submitted_post_value('external_uid'),                  $object_id = $this->getVal('object_id');
2125          );                  $is_exists = $inst_lien->is_exists($object, $object_id, $this->f->get_submitted_post_value('external_uid'), $this->getVal('dossier'));
2126          $add = $inst_lien->ajouter($valF);                  // Dans le cas spécifique de la mise à jour d'une notification
2127          $message_class = "valid";                  // et de la création d'une liaison d'identifiant pour l'objet demande,
2128          $message = $inst_lien->msg;                  // l'identifiant de l'objet n'est plus celui de la notification
2129          if ($add === false) {                  // d'instruction mais celui du dossier d'instruction
2130              $this->addToLog($inst_lien->msg, DEBUG_MODE);                  if ($object === 'demande'
2131              $message_class = "error";                      && ($this->getVal('type') === 'notification_recepisse'
2132              $message = sprintf(                          || $this->getVal('type') === 'notification_instruction'
2133                  '%s %s',                          || $this->getVal('type') === 'notification_decision'
2134                  __("Impossible de mettre à jour le lien entre l'identifiant interne et l'identifiant de l'application externe."),                          || $this->getVal('type') === 'notification_service_consulte'
2135                  __('Veuillez contacter votre administrateur.')                          || $this->getVal('type') === 'notification_tiers_consulte')) {
2136              );                      //
2137                        $object_id = $this->getVal('dossier');
2138                        // Il ne doit y avoir qu'une liaison entre le numéro du dossier interne et un uid externe de "demande"
2139                        $is_exists = $inst_lien->is_exists($object, $object_id, null, $this->getVal('dossier'));
2140                    }
2141                    if ($is_exists === false) {
2142                        $valF = array(
2143                            'lien_id_interne_uid_externe' => '',
2144                            'object' => $object,
2145                            'object_id' => $object_id,
2146                            'external_uid' => $this->f->get_submitted_post_value('external_uid'),
2147                            'dossier' => $this->getVal('dossier'),
2148                            'category' => $this->getVal('category'),
2149                        );
2150                        $add = $inst_lien->ajouter($valF);
2151                        $message_class = "valid";
2152                        $message = $inst_lien->msg;
2153                        if ($add === false) {
2154                            $this->addToLog($inst_lien->msg, DEBUG_MODE);
2155                            $message_class = "error";
2156                            $message = sprintf(
2157                                '%s %s',
2158                                __("Impossible de mettre à jour le lien entre l'identifiant interne et l'identifiant de l'application externe."),
2159                                __('Veuillez contacter votre administrateur.')
2160                            );
2161                        }
2162                        $this->f->displayMessage($message_class, $message);
2163                    }
2164                }
2165          }          }
         $this->f->displayMessage($message_class, $message);  
2166      }      }
2167    
2168      function post_add_task() {      function post_add_task() {
# Line 983  class task extends task_gen { Line 2172  class task extends task_gen {
2172                  'stream' => 'input',                  'stream' => 'input',
2173                  'json_payload' => html_entity_decode($this->f->get_submitted_post_value('json_payload')),                  'json_payload' => html_entity_decode($this->f->get_submitted_post_value('json_payload')),
2174                  'type' => $this->f->get_submitted_post_value('type'),                  'type' => $this->f->get_submitted_post_value('type'),
2175                    'category' => $this->f->get_submitted_post_value('category'),
2176              )              )
2177          ));          ));
2178          $message = $this->msg;          $message = sprintf(
2179                __("Tâche %s ajoutée avec succès"),
2180                $this->getVal($this->clePrimaire)).
2181                '<br/><br/>'.
2182                $this->msg;
2183          $message_class = "valid";          $message_class = "valid";
2184          if ($result === false){          if ($result === false){
2185              $this->addToLog($this->msg, DEBUG_MODE);              $this->addToLog($this->msg, DEBUG_MODE);
# Line 999  class task extends task_gen { Line 2193  class task extends task_gen {
2193          $this->f->displayMessage($message_class, $message);          $this->f->displayMessage($message_class, $message);
2194      }      }
2195    
2196      function get_lien_objet_by_type($type) {      function setLayout(&$form, $maj) {
2197          //          //
2198          $objet = '';          $form->setBloc('json_payload', 'D', '', 'col_6');
2199          if ($type === 'creation_DA') {          $fieldset_title_payload = __("json_payload (calculée)");
2200              $objet = 'dossier_autorisation';          if ($this->getVal('json_payload') !== "{}") {
2201          }              $fieldset_title_payload = __("json_payload");
         if ($type === 'creation_DI'  
             || $type === 'create_DI_for_consultation'  
             || $type === 'depot_DI'  
             || $type === 'modification_DI'  
             || $type === 'qualification_DI'  
             || $type === 'decision_DI'  
             || $type === 'incompletude_DI'  
             || $type === 'completude_DI') {  
             //  
             $objet = 'dossier';  
         }  
         if ($type === 'ajout_piece') {  
             $objet = 'document_numerise';  
         }  
         // La tâche entrante se nomme add_piece  
         if ($type === 'add_piece') {  
             $objet = 'piece';  
2202          }          }
2203          return $objet;          $form->setFieldset('json_payload', 'DF', $fieldset_title_payload, "collapsible, startClosed");
2204            $form->setBloc('json_payload', 'F');
2205            $form->setBloc('timestamp_log', 'DF', __("historique"), 'col_9 timestamp_log_jsontotab');
2206      }      }
2207    
2208      function setLayout(&$form, $maj) {      /**
2209          $form->setBloc('json_payload', 'D', '', 'col_6');       * Récupère le nom de l'objet à mentionner dans la table lien_id_interne_uid_externe
2210              $form->setFieldset('json_payload', 'DF', __("json_payload"), "collapsible, startClosed");       * en fonction du type et du stream de la tâche.
2211          $form->setBloc('json_payload', 'F');       *
2212          $form->setBloc('timestamp_log', 'DF', '', 'col_9');       * @param  string $type   Type de la tâche
2213         * @param  string $stream Stream de la tâche
2214         *
2215         * @return array
2216         */
2217        function get_objects_by_task_type($type, $stream = 'all') {
2218            $objects = array();
2219            if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2220                $objects = array('dossier_autorisation', );
2221            }
2222            if (in_array($type, array('creation_DI', 'depot_DI', 'notification_DI', 'qualification_DI', )) === true) {
2223                $objects = array('dossier', );
2224            }
2225            if (in_array($type, array('create_DI_for_consultation', )) === true) {
2226                $objects = array('dossier', 'dossier_consultation', );
2227            }
2228            if (in_array($type, array('create_DI', )) === true
2229                && $stream === 'input') {
2230                $objects = array('dossier', 'dossier_autorisation', 'demande', );
2231            }
2232            if (in_array($type, array('decision_DI', 'incompletude_DI', 'completude_DI', )) === true) {
2233                $objects = array('instruction', );
2234            }
2235            if (in_array($type, array('envoi_CL', )) === true) {
2236                $objects = array('instruction_action_cl', );
2237            }
2238            if (in_array($type, array('pec_metier_consultation', )) === true
2239                && $stream === 'output') {
2240                $objects = array('pec_dossier_consultation', );
2241            }
2242            if (in_array($type, array('avis_consultation', )) === true
2243                && $stream === 'output') {
2244                $objects = array('avis_dossier_consultation', );
2245            }
2246            if (in_array($type, array('prescription', )) === true
2247                && $stream === 'output') {
2248                $objects = array('prescription', );
2249            }
2250            if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2251                $objects = array('piece', );
2252            }
2253            if (in_array($type, array('creation_consultation', )) === true) {
2254                $objects = array('consultation', );
2255            }
2256            if (in_array($type, array('pec_metier_consultation', )) === true
2257                && $stream === 'input') {
2258                $objects = array('pec_metier_consultation', );
2259            }
2260            if (in_array($type, array('avis_consultation', )) === true
2261                && $stream === 'input') {
2262                $objects = array('avis_consultation', );
2263            }
2264            if (in_array($type, array('create_message', )) === true
2265                && $stream === 'input') {
2266                $objects = array('dossier_message', );
2267            }
2268            if (in_array(
2269                $type,
2270                array(
2271                    'notification_recepisse',
2272                    'notification_instruction',
2273                    'notification_decision',
2274                    'notification_service_consulte',
2275                    'notification_tiers_consulte',
2276                )
2277            ) === true) {
2278                $objects = array('instruction_notification', 'demande', );
2279            }
2280            return $objects;
2281        }
2282    
2283        /**
2284         * Récupère les tables auxquelles pourrait être rattaché l'objet lié à la tâche,
2285         * par rapport à son type.
2286         *
2287         * @param  string $type   Type de la tâche
2288         * @param  string $stream input ou output
2289         * @return array
2290         */
2291        function get_tables_by_task_type($type, $stream = 'all') {
2292            $tables = array();
2293            if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2294                $tables = array('dossier_autorisation', );
2295            }
2296            if (in_array($type, array('creation_DI', 'depot_DI', )) === true) {
2297                $tables = array('dossier', );
2298            }
2299            if (in_array($type, array('qualification_DI', )) === true) {
2300                $tables = array('instruction', 'dossier', );
2301            }
2302            if (in_array($type, array('create_DI_for_consultation', )) === true) {
2303                $tables = array('dossier', );
2304            }
2305            if (in_array($type, array('create_DI', )) === true
2306                && $stream === 'input') {
2307                $tables = array('dossier', 'dossier_autorisation', 'demande', );
2308            }
2309            if (in_array($type, array('decision_DI', 'incompletude_DI', 'completude_DI', )) === true) {
2310                $tables = array('instruction', );
2311            }
2312            if (in_array($type, array('pec_metier_consultation', )) === true
2313                && $stream === 'output') {
2314                $tables = array('instruction', );
2315            }
2316            if (in_array($type, array('avis_consultation', )) === true
2317                && $stream === 'output') {
2318                $tables = array('instruction', );
2319            }
2320            if (in_array($type, array('prescription', )) === true
2321                && $stream === 'output') {
2322                $tables = array('instruction', );
2323            }
2324            if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2325                $tables = array('document_numerise', );
2326            }
2327            if (in_array($type, array('creation_consultation', )) === true) {
2328                $tables = array('consultation', );
2329            }
2330            if (in_array($type, array('pec_metier_consultation', )) === true
2331                && $stream === 'input') {
2332                $tables = array('consultation', );
2333            }
2334            if (in_array($type, array('avis_consultation', )) === true
2335                && $stream === 'input') {
2336                $tables = array('consultation', );
2337            }
2338            if (in_array($type, array('create_message', )) === true
2339                && $stream === 'input') {
2340                $tables = array('dossier_message', );
2341            }
2342            if (in_array(
2343                $type,
2344                array(
2345                    'notification_recepisse',
2346                    'notification_instruction',
2347                    'notification_decision',
2348                    'notification_service_consulte',
2349                    'notification_tiers_consulte'
2350                )
2351            ) === true) {
2352                $tables = array('instruction_notification', );
2353            }
2354            return $tables;
2355      }      }
2356    
2357  }  }

Legend:
Removed from v.9799  
changed lines
  Added in v.13528

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26