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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15973 - (hide annotations)
Thu Oct 26 18:29:29 2023 UTC (15 months ago) by softime
File size: 118652 byte(s)
chore(branch): fusion de la branche d'intégration 6.2.0-develop dans le trunk

1 softime 9293 <?php
2 mbroquet 9776 //$Id$
3 softime 9293 //gen openMairie le 14/04/2020 14:11
4    
5     require_once "../gen/obj/task.class.php";
6    
7     class task extends task_gen {
8    
9 mbideau 9799 const STATUS_DRAFT = 'draft';
10     const STATUS_NEW = 'new';
11     const STATUS_PENDING = 'pending';
12     const STATUS_DONE = 'done';
13     const STATUS_ERROR = 'error';
14     const STATUS_DEBUG = 'debug';
15     const STATUS_ARCHIVED = 'archived';
16 softime 10572 const STATUS_CANCELED = 'canceled';
17 mbideau 9799
18 softime 9293 /**
19 softime 10036 * 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 softime 10356 'modification_DA',
34 gmalvolti 10317 'create_DI',
35 softime 11418 'envoi_CL',
36 softime 10808 'notification_recepisse',
37     'notification_instruction',
38     'notification_decision',
39 softime 11585 'notification_service_consulte',
40     'notification_tiers_consulte',
41 softime 12654 'notification_depot_demat',
42 softime 14064 'notification_commune',
43 softime 15037 'notification_signataire',
44 softime 14064 'lettre_incompletude',
45     'lettre_majoration'
46 softime 10036 );
47    
48     /**
49     * Liste des types de tâche concernant les services consultés
50     */
51     const TASK_TYPE_SC = array(
52     'create_DI_for_consultation',
53     'avis_consultation',
54     'pec_metier_consultation',
55 cgarcin 10362 'create_message',
56 softime 10808 'notification_recepisse',
57     'notification_instruction',
58     'notification_decision',
59 softime 11585 'notification_service_consulte',
60     'notification_tiers_consulte',
61 softime 12654 'notification_depot_demat',
62 softime 10869 'prescription',
63 softime 10036 );
64    
65     /**
66 softime 14542 * Liste des types de tâche pouvant avoir des documents associés
67     */
68     const TASK_WITH_DOCUMENT = array(
69     'add_piece',
70     'avis_consultation',
71     'pec_metier_consultation'
72     );
73    
74     /**
75 softime 15218 * Préfixe pour identifier les codes de suivi
76     * @var string
77     */
78     const CS_PREFIX = 'code-suivi://';
79    
80     /**
81 softime 10808 * Catégorie de la tâche
82     */
83 softime 13137 var $category = PLATAU;
84 softime 10808
85     /**
86 softime 9293 * Définition des actions disponibles sur la classe.
87     *
88     * @return void
89     */
90     public function init_class_actions() {
91     parent::init_class_actions();
92     //
93     $this->class_actions[998] = array(
94 softime 9330 "identifier" => "json_data",
95     "view" => "view_json_data",
96 softime 9293 "permission_suffix" => "consulter",
97     );
98 gmalvolti 9721 $this->class_actions[997] = array(
99     "identifier" => "json_data",
100 gmalvolti 9765 "view" => "post_update_task",
101 gmalvolti 9721 "permission_suffix" => "modifier",
102     );
103     $this->class_actions[996] = array(
104     "identifier" => "json_data",
105 gmalvolti 9765 "view" => "post_add_task",
106 gmalvolti 9721 "permission_suffix" => "ajouter",
107     );
108 softime 9293 }
109    
110 softime 9482 public function setvalF($val = array()) {
111 mbideau 9813
112 softime 9842 // // les guillets doubles sont remplacés automatiquement par des simples
113     // // dans core/om_formulaire.clasS.php::recupererPostvar()
114     // // voir le ticket https://dev.atreal.fr/projets/openmairie/tracker/209
115     // // ceci est un hack sale temporaire en attendant résolution du ticket
116     // foreach(array('json_payload', 'timestamp_log') as $key) {
117     // if (isset($val[$key]) && ! empty($val[$key]) &&
118     // isset($_POST[$key]) && ! empty($_POST[$key])) {
119     // $submited_payload = $_POST[$key];
120     // if (! empty($submited_payload)) {
121     // $new_payload = str_replace("'", '"', $val[$key]);
122     // if ($new_payload == $submited_payload ||
123     // strpos($submited_payload, '"') === false) {
124     // $val[$key] = $new_payload;
125     // }
126     // else {
127     // $error_msg = sprintf(
128     // __("La convertion des guillemets de la payload JSON '%s' ".
129     // "n'est pas idempotente (courante: %s, postée: %s, convertie: %s)"),
130     // $key, var_export($val[$key], true), var_export($submited_payload, true),
131     // var_export($new_payload, true));
132     // $this->correct = false;
133     // $this->addToMessage($error_msg);
134     // $this->addToLog(__METHOD__."() erreur : $error_msg", DEBUG_MODE);
135     // return false;
136     // }
137     // }
138     // }
139     // }
140 mbideau 9813
141 softime 9482 parent::setvalF($val);
142 mbideau 9813
143 softime 9842 // XXX Ancien code : permet de ne pas avoir d'erreru lors de la modification d'une task
144     if (array_key_exists('timestamp_log', $val) === true) {
145     $this->valF['timestamp_log'] = str_replace("'", '"', $val['timestamp_log']);
146     }
147    
148 mbideau 9813 // récupération de l'ID de l'objet existant
149     $id = property_exists($this, 'id') ? $this->id : null;
150     if(isset($val[$this->clePrimaire])) {
151     $id = $val[$this->clePrimaire];
152     } elseif(isset($this->valF[$this->clePrimaire])) {
153     $id = $this->valF[$this->clePrimaire];
154 softime 9482 }
155 mbideau 9813
156     // MODE MODIFIER
157     if (! empty($id)) {
158    
159     // si aucune payload n'est fourni (devrait toujours être le cas)
160     if (! isset($val['json_payload']) || empty($val['json_payload'])) {
161    
162     // récupère l'objet existant
163 softime 10808 $existing = $this->f->findObjectById('task', $id);
164 mbideau 9813 if (! empty($existing)) {
165    
166     // récupère la payload de l'objet
167     $val['json_payload'] = $existing->getVal('json_payload');
168     $this->valF['json_payload'] = $existing->getVal('json_payload');
169     $this->f->addToLog(__METHOD__."() récupère la payload de la tâche existante ".
170     "'$id': ".$existing->getVal('json_payload'), EXTRA_VERBOSE_MODE);
171     }
172     }
173     }
174 softime 10808
175     if (array_key_exists('category', $val) === false
176     || $this->valF['category'] === ''
177     || $this->valF['category'] === null) {
178     //
179     $this->valF['category'] = $this->category;
180     }
181 softime 12124
182     // Si last_modification_time est vide, la valeur est remplacée par NULL
183     // pour eviter d'avoir une erreur de base de données car le champ est au format time.
184     if ($val['last_modification_time'] == "") {
185     $this->valF['last_modification_time'] = NULL;
186     } else {
187     $this->valF['last_modification_time'] = $val['last_modification_time'];
188     }
189    
190     // Si creation_time est vide, la valeur est remplacée par NULL
191     // pour eviter d'avoir une erreur de base de données car le champ est au format time.
192     if ($val['creation_time'] == "") {
193     $this->valF['creation_time'] = NULL;
194     } else {
195     $this->valF['creation_time'] = $val['creation_time'];
196     }
197 softime 9482 }
198    
199 gmalvolti 9589 /**
200     *
201     * @return array
202     */
203     function get_var_sql_forminc__champs() {
204     return array(
205     "task",
206     "type",
207     "state",
208     "object_id",
209     "dossier",
210 gmalvolti 9721 "stream",
211 softime 12124 "creation_date",
212     "creation_time",
213     "CONCAT_WS(' ', to_char(task.creation_date, 'DD/MM/YYYY'), task.creation_time) AS date_creation",
214     'last_modification_date',
215     'last_modification_time',
216 softime 12433 "CONCAT_WS(' ', to_char(task.last_modification_date, 'DD/MM/YYYY'), task.last_modification_time) AS date_modification",
217     "comment",
218 gmalvolti 9604 "json_payload",
219 gmalvolti 9589 "timestamp_log",
220 softime 12433 "timestamp_log AS timestamp_log_hidden",
221 softime 10808 "category",
222 gmalvolti 9589 );
223     }
224    
225 gmalvolti 9585 function setType(&$form, $maj) {
226     parent::setType($form, $maj);
227 mbideau 9813
228 gmalvolti 9585 // Récupération du mode de l'action
229     $crud = $this->get_action_crud($maj);
230    
231 softime 10808 // ALL
232     $form->setType("category", "hidden");
233 softime 12433 $form->setType("timestamp_log_hidden", "hidden");
234 softime 10808
235 mbideau 9813 // MODE CREER
236     if ($maj == 0 || $crud == 'create') {
237 softime 12433 $form->setType("type", "select");
238 gmalvolti 9585 $form->setType("state", "select");
239 gmalvolti 9721 $form->setType("stream", "select");
240 mbideau 9813 $form->setType("json_payload", "textarea");
241     }
242 softime 12124 // MODE MODIFIER
243 mbideau 9813 if ($maj == 1 || $crud == 'update') {
244 softime 12433 $form->setType("task", "hiddenstatic");
245 mbideau 9813 $form->setType("state", "select");
246 softime 12433 $form->setType("stream", "hiddenstatic");
247 gmalvolti 9721 $form->setType("json_payload", "jsonprettyprint");
248 softime 12433 $form->setType("timestamp_log", "jsontotab");
249     $form->setType("type", "hiddenstatic");
250 softime 12124 $form->setType("creation_date", "hidden");
251     $form->setType("creation_time", "hidden");
252 softime 12433 $form->setType("object_id", "hiddenstatic");
253     $form->setType("dossier", "hiddenstatic");
254     $form->setType("date_creation", "hiddenstatic");
255 softime 12124 $form->setType("last_modification_date", "hidden");
256     $form->setType("last_modification_time", "hidden");
257 softime 12433 $form->setType("date_modification", "static");
258 gmalvolti 9585 }
259 mbideau 9813 // MODE CONSULTER
260     if ($maj == 3 || $crud == 'read') {
261 softime 12433 $form->setType("state", "selecthiddenstatic");
262     $form->setType("stream", "selecthiddenstatic");
263 gmalvolti 9589 $form->setType('dossier', 'link');
264 gmalvolti 9604 $form->setType('json_payload', 'jsonprettyprint');
265 softime 12433 $form->setType("type", "selecthiddenstatic");
266 softime 12124 $form->setType("creation_date", "hidden");
267     $form->setType("creation_time", "hidden");
268     $form->setType("date_creation", "static");
269     $form->setType("last_modification_date", "hidden");
270     $form->setType("last_modification_time", "hidden");
271 softime 12433 $form->setType("date_modification", "static");
272     $form->setType("timestamp_log", "jsontotab");
273 gmalvolti 9589 }
274 softime 12433 }
275 gmalvolti 9589
276 softime 12433 function stateTranslation ($currentState) {
277     switch ($currentState){
278     case "draft":
279     return __('brouillon');
280     break;
281     case "new":
282     return __('à traiter');
283     break;
284     case "pending":
285     return __('en cours');
286     break;
287     case "done":
288     return __('terminé');
289     break;
290     case "archived":
291     return __('archivé');
292     break;
293     case "error":
294     return __('erreur');
295     break;
296     case "debug":
297     return __('debug');
298     break;
299     case "canceled":
300     return __('annulé');
301     break;
302     }
303 gmalvolti 9585 }
304     /**
305     *
306     */
307     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
308 softime 12433 if($maj <= 3) {
309 mbideau 9799 $contenu = array();
310 softime 10572 foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED') as $key) {
311 mbideau 9799 $const_name = 'STATUS_'.$key;
312     $const_value = constant("self::$const_name");
313     $contenu[0][] = $const_value;
314 softime 12433
315    
316     $contenu[1][] = $this->stateTranslation($const_value);
317    
318 mbideau 9799 }
319 gmalvolti 9585
320     $form->setSelect("state", $contenu);
321 gmalvolti 9721
322     $contenu_stream =array();
323     $contenu_stream[0][0]="input";
324 softime 12433 $contenu_stream[1][0]=__('input');
325 gmalvolti 9721 $contenu_stream[0][1]="output";
326 softime 12433 $contenu_stream[1][1]=__('output');
327 gmalvolti 9721 $form->setSelect("stream", $contenu_stream);
328    
329 softime 12433 $tab_type = array_unique(array_merge(self::TASK_TYPE_SI, self::TASK_TYPE_SC));
330    
331     foreach ($tab_type as $type) {
332    
333     $contenu_type[0][] = $type;
334    
335     switch ($type) {
336     case "creation_DA":
337     $value_type = __('Création DA');
338     break;
339     case "create_DI":
340     $value_type = __('Création demande');
341     break;
342     case "creation_DI":
343     $value_type = __('Création DI');
344     break;
345     case "modification_DA":
346     $value_type = __('Modification DA');
347     break;
348     case "modification_DI":
349     $value_type = __('Modification DI');
350     break;
351     case "ajout_piece":
352     $value_type = __('Ajout pièce (sortant)');
353     break;
354     case "add_piece":
355     $value_type = __('Ajout pièce (entrant)');
356     break;
357     case "depot_DI":
358     $value_type = __('Dépôt DI');
359     break;
360     case "qualification_DI":
361     $value_type = __('Qualification DI');
362     break;
363     case "creation_consultation":
364     $value_type = __('Création consultation');
365     break;
366     case "decision_DI":
367     $value_type = __('Décision DI');
368     break;
369     case "envoi_CL":
370     $value_type = __('Envoi contrôle de légalité');
371     break;
372     case "pec_metier_consultation":
373     $value_type = __('PeC consultation');
374     break;
375     case "avis_consultation":
376     $value_type = __('Avis');
377     break;
378     case "prescription":
379     $value_type = __('Prescription');
380     break;
381     case "create_DI_for_consultation":
382     $value_type = __('Création DI pour consultation');
383     break;
384     case "create_message":
385     $value_type = __('Message');
386     break;
387     case "notification_recepisse":
388     $value_type = __('Notification récépissé');
389     break;
390     case "notification_instruction":
391     $value_type = __('Notification instruction');
392     break;
393     case "notification_decision":
394     $value_type = __('Notification décision');
395     break;
396     case "notification_service_consulte":
397     $value_type = __('Notification service consulté');
398     break;
399     case "notification_tiers_consulte":
400     $value_type = __('Notification tiers consulté');
401     break;
402 softime 15037 case "notification_signataire":
403     $value_type = __('Notification signataire');
404     break;
405 softime 12433 case "completude_DI":
406     $value_type = __('complétude DI');
407     break;
408     case "incompletude_DI":
409     $value_type = __('incomplétude DI');
410     break;
411 softime 14064 case "lettre_incompletude":
412     $value_type = __('Lettre au pétitionnaire d\'incompletude');
413     break;
414     case "lettre_majoration":
415     $value_type = __('Lettre au pétitionnaire de majoration');
416     break;
417 softime 12433 }
418    
419     $contenu_type[1][] = $value_type;
420     }
421    
422     $form->setselect('type', $contenu_type);
423 gmalvolti 9585 }
424 gmalvolti 9589
425     if ($maj == 3) {
426 softime 12433 // Récupération du numéro du dossier si il n'est pas renseigné dans la tâche
427     if ($form->val['dossier'] == '' || $form->val['dossier'] == null) {
428     // Récupération de la payload de la taĉhe.
429     // Si la tâche est une tâche input la payload est associée à la tâche.
430     // Si la tâche est une tâche en output la payload est "calculé" à l'ouverture
431     // du formulaire.
432     if ($this->getVal('stream') == 'input') {
433     $json_payload = json_decode($this->getVal('json_payload'), true);
434     } else {
435     $json_payload = json_decode($form->val['json_payload'], true);
436     }
437     // A partir de la payload de la tâche ont récupère les externals uid
438     // Si un external uid de DI (dossier) existe ont le récupère et on stocke le numéro
439     // pour l'afficher sur le formulaire.
440     // Si l'external UID du DI n'existe pas on récupère celui du DA
441     $external_uid = '';
442     if (array_key_exists('external_uids', $json_payload)
443     && array_key_exists('dossier', $json_payload['external_uids'])
444     ) {
445     $external_uid = $json_payload['external_uids']['dossier'];
446     } elseif (array_key_exists('external_uids', $json_payload)
447 softime 13528 && array_key_exists('demande', $json_payload['external_uids'])) {
448     $external_uid = $json_payload['external_uids']['demande'];
449 softime 12433 }
450     // Recherche l'external uid dans la base de données pour récupèrer le numéro de
451     // DI / DA correspondant. On stocke le numéro de dossier dans la propriété val
452     // du formulaire pour pouvoir l'afficher
453     if ($external_uid != '') {
454 softime 13137 $qres = $this->f->get_one_result_from_db_query(
455     sprintf(
456     'SELECT
457     lien_id_interne_uid_externe.dossier
458     FROM
459     %1$slien_id_interne_uid_externe
460     WHERE
461     lien_id_interne_uid_externe.external_uid = \'%2$s\'',
462     DB_PREFIXE,
463     $this->f->db->escapeSimple($external_uid)
464     ),
465     array(
466     "origin" => __METHOD__,
467     )
468 softime 12433 );
469 softime 13137 if (! empty($qres["result"])) {
470     $form->val['dossier'] = $qres["result"];
471 softime 12433 }
472     }
473     }
474 mbroquet 9776
475 softime 12433 // Vérifie si le numéro de dossier associé à la tâche existe dans la base.
476     // Si c'est le cas ce numéro sera lié au dossier (DI ou DA) correspondant
477     // TODO : vérifier la liste des tâches lié à des DA
478     $obj_link = '';
479     if ($form->val['type'] == "creation_DA" || $form->val['type'] == "modification_DA") {
480     // Vérification que le numéro de DA affiché dans le formulaire existe
481 softime 13137 $qres = $this->f->get_one_result_from_db_query(
482     sprintf(
483     'SELECT
484     dossier_autorisation.dossier_autorisation
485     FROM
486     %1$sdossier_autorisation
487     WHERE
488     dossier_autorisation.dossier_autorisation = \'%2$s\'',
489     DB_PREFIXE,
490     $this->f->db->escapeSimple($form->val['dossier'])
491     ),
492     array(
493     "origin" => __METHOD__,
494     )
495 softime 12433 );
496     // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
497 softime 13137 if (! empty($qres["result"])) {
498 gmalvolti 9721 $obj_link = 'dossier_autorisation';
499 softime 12433 }
500     } else {
501     // Vérification que le numéro de DI affiché dans le formulaire existe
502 softime 13137 $qres = $this->f->get_one_result_from_db_query(
503     sprintf(
504     'SELECT
505     dossier.dossier
506     FROM
507     %1$sdossier
508     WHERE
509     dossier.dossier = \'%2$s\'',
510     DB_PREFIXE,
511     $this->f->db->escapeSimple($form->val['dossier'])
512     ),
513     array(
514     "origin" => __METHOD__,
515     )
516 softime 12433 );
517     // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
518 softime 13137 if (! empty($qres["result"])) {
519 gmalvolti 9721 $obj_link = 'dossier_instruction';
520     }
521 gmalvolti 9594 }
522 softime 12433 // Pour afficher le lien vers un dossier ont utilise un champ de type "link".
523     // Pour paramétrer ce champs on a besoin de savoir :
524     // - quel objet est visé par le lien
525     // - le label (libellé) du lien
526     // - l'identifiant de l'objet qui sera utilisé dans le lien
527     // - le titre associé au lien
528     // Pour cela on remplit le champs comme un select et les valeurs du select
529     // contiennent les informations nécessaire à l'affichage du champs.
530     $params = array(
531     'obj' => $obj_link,
532     'libelle' => $form->val['dossier'],
533     'title' => "Consulter le dossier",
534     'idx' => $form->val['dossier']
535     );
536     $form->setSelect("dossier", $params);
537 gmalvolti 9589 }
538 gmalvolti 9585 }
539    
540 gmalvolti 9604 /**
541     * SETTER_FORM - setVal (setVal).
542     *
543     * @return void
544     */
545     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
546     // parent::setVal($form, $maj, $validation);
547     //
548 softime 13137 if ($this->getVal('stream') == "output"
549 softime 13528 && ($this->getVal('state') !== self::STATUS_DONE
550     || $this->getVal('json_payload') === "{}")) {
551 softime 13137 //
552 gmalvolti 9721 $form->setVal('json_payload', $this->view_form_json(true));
553 gmalvolti 9728 } else {
554 softime 12654 $form->setVal('json_payload', json_encode(json_decode($this->getVal('json_payload'), true), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
555 gmalvolti 9721 }
556 softime 14064 // Gestion du contenu de l'historique
557     if ($this->getVal('timestamp_log') !== ''
558     && $this->getVal('timestamp_log') !== null) {
559     //
560     $form->setVal('timestamp_log', $this->getVal('timestamp_log'));
561     }
562 gmalvolti 9604 }
563    
564 gmalvolti 9746 function setLib(&$form, $maj) {
565     parent::setLib($form, $maj);
566 mbideau 9813
567     // Récupération du mode de l'action
568     $crud = $this->get_action_crud($maj);
569    
570 softime 12433 $form->setLib('date_creation', __("Date de création"));
571     $form->setLib('date_modification', __("Date de dernière modification"));
572     $form->setLib('comment', __("commentaire"));
573    
574 mbideau 9813 // MODE different de CREER
575     if ($maj != 0 || $crud != 'create') {
576     $form->setLib('json_payload', '');
577 softime 12433 $form->setLib("task", __("identifiant"));
578     $form->setLib("Task_portal", __("task_portal"));
579     $form->setLib("type", __("type"));
580     $form->setLib("object_id", __("Réf. interne"));
581     $form->setLib("stream", __("flux"));
582     $form->setLib("timestamp_log", __("Historique"));
583 mbideau 9813 }
584 gmalvolti 9746 }
585    
586 softime 9482 public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
587 gmalvolti 9765 $ret = parent::verifier($val, $dnu1, $dnu2);
588    
589     // une tâche entrante doit avoir un type et une payload non-vide
590     if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
591     if (isset($this->valF['type']) === false) {
592     $this->correct = false;
593     $this->addToMessage(sprintf(
594     __("Le champ %s est obligatoire pour une tâche entrante."),
595     sprintf('<span class="bold">%s</span>', $this->getLibFromField('type'))
596     ));
597     $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
598     }
599     if (isset($this->valF['json_payload']) === false) {
600     $this->correct = false;
601     $this->addToMessage(sprintf(
602     __("Le champ %s est obligatoire pour une tâche entrante."),
603     sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
604     ));
605     $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
606     }
607     }
608    
609 mbideau 9813 // les JSONs doivent être décodables
610     foreach(array('json_payload', 'timestamp_log') as $key) {
611     if (isset($this->valF[$key]) && ! empty($this->valF[$key]) && (
612     is_array(json_decode($this->valF[$key], true)) === false
613     || json_last_error() !== JSON_ERROR_NONE)) {
614     $this->correct = false;
615     $champ_text = sprintf('<span class="bold">%s</span>', $this->getLibFromField($key));
616     $this->addToMessage(sprintf(
617     __("Le champ %s doit être dans un format JSON valide (erreur: %s).".
618     "<p>%s valF:</br><pre>%s</pre></p>".
619     "<p>%s val:</br><pre>%s</pre></p>".
620     "<p>%s POST:</br><pre>%s</pre></p>".
621     "<p>%s submitted POST value:</br><pre>%s</pre></p>"),
622     $champ_text,
623     json_last_error() !== JSON_ERROR_NONE ? json_last_error_msg() : __('invalide'),
624     $champ_text,
625     $this->valF[$key],
626     $champ_text,
627     $val[$key],
628     $champ_text,
629     isset($_POST[$key]) ? $_POST[$key] : '',
630     $champ_text,
631     $this->f->get_submitted_post_value($key)
632     ));
633     $this->addToLog(__METHOD__.'(): erreur JSON: '.$this->msg, DEBUG_MODE);
634     }
635 gmalvolti 9765 }
636    
637     // une tâche entrante doit avoir une payload avec les clés requises
638 mbideau 9813 if ($this->correct && (isset($this->valF['stream']) === false ||
639     $this->valF['stream'] == 'input')) {
640 gmalvolti 9765
641     // décode la payload JSON
642 softime 13137 // TODO : COMMENTER
643 gmalvolti 9765 $json_payload = json_decode($this->valF['json_payload'], true);
644    
645     // défini une liste de chemin de clés requises
646 softime 10808 $paths = array();
647 softime 13137 if ($this->valF['category'] === PLATAU) {
648 softime 10808 $paths = array(
649     'external_uids/dossier'
650     );
651     }
652 gmalvolti 9765
653     // tâche de type création de DI/DA
654 mbroquet 9776 if (isset($this->valF['type']) !== false && $this->valF['type'] == 'create_DI_for_consultation') {
655 gmalvolti 9765
656     $paths = array_merge($paths, array(
657 mbideau 9798 'dossier/dossier',
658 mbideau 9773 'dossier/dossier_autorisation_type_detaille_code',
659 gmalvolti 9765 'dossier/date_demande',
660     'dossier/depot_electronique',
661     ));
662    
663     // si l'option commune est activée (mode MC)
664     if ($this->f->is_option_dossier_commune_enabled()) {
665     $paths[] = 'dossier/insee';
666     }
667    
668     // présence d'un moyen d'identifier la collectivité/le service
669 mbideau 9955 if (! isset($json_payload['external_uids']['acteur']) &&
670 gmalvolti 9765 ! isset($json_payload['dossier']['om_collectivite'])) {
671     $this->correct = false;
672     $this->addToMessage(sprintf(
673     __("L'une des clés %s ou %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),
674 mbideau 9955 sprintf('<span class="bold">%s</span>', 'external_uids/acteur'),
675 gmalvolti 9765 sprintf('<span class="bold">%s</span>', 'dossier/om_collectivite'),
676     sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
677     ));
678     $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
679     }
680     }
681    
682     // pas d'erreur déjà trouvée
683     if($this->correct) {
684    
685     // pour chaque chemin
686     foreach($paths as $path) {
687    
688     // décompose le chemin
689     $tokens = explode('/', $path);
690     $cur_depth = $json_payload;
691    
692     // descend au et à mesure dans l'arborescence du chemin
693     foreach($tokens as $token) {
694    
695     // en vérifiant que chaque élément du chemin est défini et non-nul
696     if (isset($cur_depth[$token]) === false) {
697    
698     // sinon on produit une erreur
699     $this->correct = false;
700     $this->addToMessage(sprintf(
701     __("La clé %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),
702     sprintf('<span class="bold">%s</span>', $path),
703     sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
704     ));
705     $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
706     break 2;
707     }
708     $cur_depth = $cur_depth[$token];
709     }
710     }
711     }
712     }
713    
714     return $ret && $this->correct;
715 softime 9482 }
716    
717 softime 10356 /**
718     * [task_exists description]
719     * @param string $type [description]
720     * @param string $object_id [description]
721 gmalvolti 10380 * @param bool $is_not_done [description]
722 softime 10356 * @return [type] [description]
723     */
724 softime 10572 public function task_exists(string $type, string $object_id, string $dossier = null, bool $is_not_done = true) {
725 softime 13137 $qres = $this->f->get_one_result_from_db_query(
726     sprintf(
727     'SELECT
728     task
729     FROM
730     %1$stask
731     WHERE
732     %2$s
733     type = \'%3$s\'
734     AND (
735     object_id = \'%4$s\'
736     %5$s
737     )
738     AND state != \'%6$s\'',
739     DB_PREFIXE,
740     $is_not_done == true ? 'state != \''.self::STATUS_DONE.'\' AND' : '',
741     $type,
742     $object_id,
743     $dossier !== null ? sprintf('OR dossier = \'%s\'', $dossier) : '',
744     self::STATUS_CANCELED
745     ),
746     array(
747     "origin" => __METHOD__,
748     )
749 softime 9395 );
750 softime 13137 if ($qres["result"] !== null && $qres["result"] !== "") {
751     return $qres["result"];
752 softime 9395 }
753     return false;
754     }
755    
756 softime 9293 /**
757 softime 10968 * Permet la recherche multi-critères des tasks.
758     *
759     * @param array $search_values Chaque entrée du tableau est une ligne dans le WHERE
760     * @return mixed Retourne le résultat de la requête ou false
761     */
762     public function task_exists_multi_search(array $search_values) {
763     $query = sprintf('
764 softime 11585 SELECT *
765 softime 10968 FROM %1$stask
766     %2$s
767     %3$s
768 softime 14064 ORDER BY task ASC
769 softime 10968 ',
770     DB_PREFIXE,
771     empty($search_values) === false ? ' WHERE ' : '',
772     implode(' AND ', $search_values)
773     );
774 softime 13137 $res = $this->f->get_all_results_from_db_query(
775     $query,
776     array(
777     "origin" => __METHOD__,
778     )
779     );
780 softime 10968 if (count($res['result']) > 0) {
781     return $res['result'];
782     }
783     return false;
784     }
785    
786     /**
787 gmalvolti 9765 * TRIGGER - triggerajouter.
788     *
789     * @param string $id
790     * @param null &$dnu1 @deprecated Ne pas utiliser.
791     * @param array $val Tableau des valeurs brutes.
792     * @param null $dnu2 @deprecated Ne pas utiliser.
793     *
794     * @return boolean
795     */
796     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
797    
798     // tâche entrante
799     if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
800    
801     // décode la paylod JSON pour extraire les données métiers à ajouter
802     // en tant que métadonnées de la tâche
803     $json_payload = json_decode($this->valF['json_payload'], true);
804 mbideau 9798
805     // si la tâche possède déjà une clé dossier
806     if (isset($json_payload['dossier']['dossier']) &&
807     ! empty($json_payload['dossier']['dossier'])) {
808     $this->valF["dossier"] = $json_payload['dossier']['dossier'];
809     }
810 gmalvolti 9765 }
811 softime 10808
812     // gestion d'une tache de type notification et de category mail
813 softime 10869 if (isset($val['type'])
814 softime 12433 && (($val['type'] === 'notification_instruction' || $val['type'] === 'notification_decision')
815     && isset($val['category'])
816     && $val['category'] === 'mail')
817 softime 11585 || $val['type'] === 'notification_service_consulte'
818     || $val['type'] === 'notification_tiers_consulte'
819 softime 12654 || $val['type'] === 'notification_depot_demat'
820     || $val['type'] === 'notification_commune'
821 softime 15037 || $val['type'] === 'notification_signataire'
822 softime 11585 ) {
823 softime 10869 // Récupère la payload de la tache
824     $data = array();
825 softime 12433 $data['instruction_notification'] = $this->get_instruction_notification_data(
826     $this->valF['category'],
827     'with-id',
828     array('with-id' => $this->valF['object_id'])
829     );
830 softime 10869 $data['dossier'] = $this->get_dossier_data($this->valF['dossier']);
831    
832 softime 10808 // Récupère l'instance de la notification
833     $inst_notif = $this->f->get_inst__om_dbform(array(
834     "obj" => "instruction_notification",
835     "idx" => $val['object_id'],
836     ));
837     // Envoi le mail et met à jour le suivi
838 softime 11585 $envoiMail = $inst_notif->send_mail_notification($data, $val['type']);
839 softime 10808 // Passage de la tache à done si elle a réussi et à error
840     // si l'envoi a échoué
841     $this->valF['state'] = 'done';
842     if ($envoiMail === false) {
843     $this->valF['state'] = 'error';
844     }
845     }
846 gmalvolti 9765 }
847    
848     /**
849 softime 12433 * TRIGGER - triggermodifier.
850     *
851     * @param string $id
852     * @param null &$dnu1 @deprecated Ne pas utiliser.
853     * @param array $val Tableau des valeurs brutes.
854     * @param null $dnu2 @deprecated Ne pas utiliser.
855     *
856     * @return boolean
857     */
858     function triggermodifier($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
859     parent::triggermodifier($id, $dnu1, $val, $dnu2);
860     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
861    
862     // Mise à jour des valeurs, notamment du timestamp_log en fonction de plusieurs critères
863     $values = array(
864     'state' => $this->valF['state'],
865     'object_id' => $this->valF['object_id'],
866     'comment' => $this->valF['comment'],
867     );
868     $new_values = $this->set_values_for_update($values);
869     if ($new_values === false) {
870     $this->addToLog(__METHOD__."(): erreur timestamp log", DEBUG_MODE);
871     return false;
872     }
873    
874     // Mise à jour des valeurs
875     $this->valF['timestamp_log'] = $new_values['timestamp_log'];
876     $this->valF['state'] = $new_values['state'];
877     $this->valF['object_id'] = $new_values['object_id'];
878     $this->valF['last_modification_date'] = date('Y-m-d');
879     $this->valF['last_modification_time'] = date('H:i:s');
880 softime 13137 if ($val['stream'] === 'output') {
881 softime 13528 // Lorsque la task passe d'un état qui n'est pas "done" à l'état "done"
882 softime 13137 if ($this->getVal("state") !== self::STATUS_DONE
883     && $this->valF['state'] === self::STATUS_DONE) {
884     //
885     $this->valF['json_payload'] = $this->view_form_json(true);
886     }
887 softime 13528 // Lorsque la task passe d'un état "done" à un état qui n'est pas "done"
888     if ($this->getVal("state") === self::STATUS_DONE
889     && $this->valF['state'] !== self::STATUS_DONE) {
890     //
891     $this->valF['json_payload'] = "{}";
892     }
893 softime 13137 }
894 softime 12433
895     return true;
896     }
897    
898    
899     /**
900     * Applique nouvelle valeur après traitement.
901     *
902     * @param array $params Tableau des valeurs en entrées
903     * @return array Tableau des valeurs en sorties
904     */
905     public function set_values_for_update($params = array()) {
906    
907     // Récupération du timestamp_log existant
908     $timestamp_log = $this->get_timestamp_log();
909     if ($timestamp_log === false) {
910     return false;
911     }
912    
913     // Vérification des object_id précédent en cas de tentative d'appliquer
914     // l'état CANCELED sur la tâche
915     if (isset($params['state']) === true
916     && $params['state'] === self::STATUS_CANCELED) {
917     // Récupération du journal d'activité de la tâche sous forme de tableau
918     // trié par ordre décroissant
919     $log = $timestamp_log;
920     krsort($log);
921     // Pour chaque entrée dans le journal d'activité de la tâche :
922     // - vérification de la présence de l'object_id précédent
923     // - vérification que l'object_id précédent existe toujours dans la base de données
924     // - l'object_id est mise à jour avec la valeur de l'object_id précédent
925     // - le state n'est pas modifié
926     // - sortie du traitement dès que le premier object_id précédent existant est trouvé
927     // - si aucun object_id précédent existant n'est trouvé alors ni le state, ni l'object_id n'est modifiés
928     foreach ($log as $key => $value) {
929     //
930     if (isset($value['prev_object_id']) === true
931     && $this->getVal('object_id') !== $value['prev_object_id']) {
932     // Récupère la liste des tables potentielles pour un type de tâche
933     $tables = $this->get_tables_by_task_type($this->getVal('type'), $this->getVal('stream'));
934     foreach ($tables as $table) {
935     // Vérifie s'il y a un ou aucun résultat
936 softime 13137 $qres = $this->f->get_one_result_from_db_query(
937     sprintf(
938     'SELECT
939     COUNT(%2$s)
940     FROM
941     %1$s%2$s
942     WHERE
943     %2$s::CHARACTER VARYING = \'%3$s\'',
944     DB_PREFIXE,
945     $table,
946     $value['prev_object_id']
947     ),
948     array(
949     "origin" => __METHOD__,
950     "force_return" => true,
951     )
952 softime 12433 );
953 softime 13137 if ($qres["code"] !== "OK") {
954 softime 12433 return $this->end_treatment(__METHOD__, false);
955     }
956     // Affectation des valeurs et sortie de la boucle
957 softime 13137 if ($qres["result"] == '1') {
958 softime 12433 $params['object_id'] = $value['prev_object_id'];
959     $params['state'] = $this->getVal('state');
960     break;
961     }
962     }
963     // Sortie de la boucle si les valeurs sont affectées
964     if ($params['object_id'] !== null
965     && $params['object_id'] === $value['prev_object_id']) {
966     //
967     break;
968     }
969     }
970     }
971     }
972    
973     // Mise à jour du journal d'activité de la tâche
974     array_push($timestamp_log, array(
975     'modification_date' => date('Y-m-d H:i:s'),
976     'object_id' => $params['object_id'] !== null ? $params['object_id'] : $this->getVal('object_id'),
977     'prev_object_id' => $this->getVal('object_id'),
978     'state' => $params['state'],
979     'prev_state' => $this->getVal('state'),
980     'comment' => isset($params['comment']) ? $params['comment'] : $this->getVal('comment'),
981     ));
982     //
983     $timestamp_log = json_encode($timestamp_log);
984    
985    
986     // Les nouvelles valeurs après vérification des critères
987     $result = array(
988     'timestamp_log' => $timestamp_log,
989     'object_id' => $params['object_id'],
990     'state' => $params['state'],
991     'comment' => $params['comment'],
992     );
993     return $result;
994     }
995    
996    
997     /**
998 softime 10812 * TRIGGER - triggermodifierapres.
999     *
1000     * @param string $id
1001     * @param null &$dnu1 @deprecated Ne pas utiliser.
1002     * @param array $val Tableau des valeurs brutes.
1003     * @param null $dnu2 @deprecated Ne pas utiliser.
1004     *
1005     * @return boolean
1006     */
1007     public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1008     parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
1009    
1010     // Suivi des notificiations
1011 softime 11228 // En cas de changement de l'état de la tâche de notification, alors
1012     // le suivi des dates de la notification et de l'instruction, est effectué
1013 softime 10812 if (isset($val['category']) === true
1014 softime 13137 && $val['category'] === PORTAL
1015 softime 10812 && isset($val['type']) === true
1016     && ($val['type'] === 'notification_recepisse'
1017     || $val['type'] === 'notification_instruction'
1018 softime 11585 || $val['type'] === 'notification_decision'
1019     || $val['type'] === 'notification_service_consulte'
1020     || $val['type'] === 'notification_tiers_consulte')) {
1021 softime 10812 //
1022     if (isset($this->valF['state']) === true
1023 softime 11228 && $this->valF['state'] !== $this->getVal('state')
1024     && $this->valF['state'] !== self::STATUS_CANCELED) {
1025 softime 10812 //
1026     $inst_in = $this->f->get_inst__om_dbform(array(
1027     "obj" => "instruction_notification",
1028     "idx" => $val['object_id'],
1029     ));
1030 softime 10813 $valF_in = array();
1031 softime 10812 foreach ($inst_in->champs as $champ) {
1032 softime 10813 $valF_in[$champ] = $inst_in->getVal($champ);
1033 softime 10812 }
1034 softime 11228 // Par défaut la date d'envoi et la date de premier accès sur
1035     // la notification ne sont pas renseignées
1036 softime 10813 $valF_in['date_envoi'] = null;
1037     $valF_in['date_premier_acces'] = null;
1038 softime 11228 // Lorsque la tâche est correctement traitée
1039 softime 10812 if ($this->valF['state'] === self::STATUS_DONE) {
1040 softime 10813 //
1041     $valF_in['statut'] = __("envoyé");
1042     $valF_in['commentaire'] = __("Notification traitée");
1043     $valF_in['date_envoi'] = date('d/m/Y H:i:s');
1044 softime 11228 // Si l'instruction possède un document lié, alors ses dates
1045     // de suivi sont mises à jour
1046 softime 10813 $inst_instruction = $this->f->get_inst__om_dbform(array(
1047     "obj" => "instruction",
1048     "idx" => $inst_in->getVal('instruction'),
1049     ));
1050     if ($inst_instruction->has_an_edition() === true) {
1051     $valF_instruction = array();
1052     foreach ($inst_instruction->champs as $champ) {
1053     $valF_instruction[$champ] = $inst_instruction->getVal($champ);
1054     }
1055     $valF_instruction['date_envoi_rar'] = date('d/m/Y');
1056     $valF_instruction['date_retour_rar'] = date('d/m/Y', strtotime('now + 1 day'));
1057 softime 13137 // Action spécifique pour identifier que la modification
1058 softime 13528 // est une notification de demandeur
1059 softime 13137 $inst_instruction->setParameter('maj', 175);
1060 softime 10813 $update_instruction = $inst_instruction->modifier($valF_instruction);
1061     if ($update_instruction === false) {
1062     $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);
1063     return false;
1064     }
1065     }
1066 softime 10812 }
1067 softime 11228 // En cas d'erreur lors du traitement de la task
1068 softime 10812 if ($this->valF['state'] === self::STATUS_ERROR) {
1069 softime 10813 $valF_in['statut'] = __("échec");
1070     $valF_in['commentaire'] = __("Le traitement de la notification a échoué");
1071 softime 10812 }
1072 softime 11228 // Met à jour la notification
1073 softime 10812 $inst_in->setParameter('maj', 1);
1074 softime 10813 $update_in = $inst_in->modifier($valF_in);
1075     if ($update_in === false) {
1076 softime 10812 $this->addToLog(__METHOD__."(): ".$inst_in->msg, DEBUG_MODE);
1077     return false;
1078     }
1079     }
1080     }
1081    
1082 softime 11418 // Envoi au contrôle de légalité
1083     // En cas de changement de l'état de la tâche envoi_CL, alors le suivi
1084     // des dates de l'instruction est effectué
1085     if ($val['type'] === 'envoi_CL'
1086     && isset($this->valF['state']) === true
1087     && $this->valF['state'] === self::STATUS_DONE) {
1088     //
1089     $inst_instruction = $this->f->get_inst__om_dbform(array(
1090     "obj" => "instruction",
1091     "idx" => $this->getVal('object_id'),
1092     ));
1093     if ($inst_instruction->has_an_edition() === true) {
1094     $valF_instruction = array();
1095     foreach ($inst_instruction->champs as $champ) {
1096     $valF_instruction[$champ] = $inst_instruction->getVal($champ);
1097     }
1098     }
1099     $valF_instruction['date_envoi_controle_legalite'] = date("Y-m-d");
1100     $inst_instruction->setParameter('maj', 1);
1101     $update_instruction = $inst_instruction->modifier($valF_instruction);
1102     if ($update_instruction === false) {
1103     $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);
1104     return false;
1105     }
1106     }
1107    
1108 softime 10812 //
1109     return true;
1110     }
1111    
1112     /**
1113 softime 9293 * TREATMENT - add_task
1114     * Ajoute un enregistrement.
1115     *
1116     * @param array $params Tableau des paramètres
1117     * @return boolean
1118     */
1119     public function add_task($params = array()) {
1120     $this->begin_treatment(__METHOD__);
1121 softime 9853
1122     // Vérifie si la task doit être ajoutée en fonction du mode de l'application,
1123     // seulement pour les tasks output
1124 softime 10036 $task_types_si = self::TASK_TYPE_SI;
1125     $task_types_sc = self::TASK_TYPE_SC;
1126 softime 9853 $stream = isset($params['val']['stream']) === true ? $params['val']['stream'] : 'output';
1127     if ($stream === 'output'
1128     && isset($params['val']['type']) === true
1129     && $this->f->is_option_mode_service_consulte_enabled() === true
1130     && in_array($params['val']['type'], $task_types_sc) === false) {
1131     //
1132     return $this->end_treatment(__METHOD__, true);
1133     }
1134     if ($stream === 'output'
1135     && isset($params['val']['type']) === true
1136     && $this->f->is_option_mode_service_consulte_enabled() === false
1137     && in_array($params['val']['type'], $task_types_si) === false) {
1138     //
1139     return $this->end_treatment(__METHOD__, true);
1140     }
1141    
1142 softime 10808 //
1143 softime 12124 $timestamp_log = json_encode(array());
1144 gmalvolti 9751
1145 softime 10808 //
1146     $category = isset($params['val']['category']) === true ? $params['val']['category'] : $this->category;
1147    
1148 gmalvolti 9751 // Si la tâche est de type ajout_piece et de stream input alors on ajoute le fichier
1149     // et on ajoute l'uid dans le champ json_payload avant l'ajout de la tâche
1150 mbroquet 9776 if (isset($params['val']['type'])
1151 softime 14542 && in_array($params['val']['type'], self::TASK_WITH_DOCUMENT)
1152 gmalvolti 9751 && isset($params['val']['stream'])
1153     && $params['val']['stream'] == "input" ) {
1154     //
1155     $json_payload = json_decode($params['val']['json_payload'], true);
1156 mbideau 9955 if (json_last_error() !== JSON_ERROR_NONE) {
1157     $this->addToMessage(__("Le contenu JSON de la tâche n'est pas valide."));
1158     return $this->end_treatment(__METHOD__, false);
1159     }
1160 softime 12433 if (isset($json_payload['document_numerise']["file_content"]) === true
1161     && empty($json_payload['document_numerise']["file_content"]) === false) {
1162 softime 10043 //
1163     $document_numerise = $json_payload['document_numerise'];
1164     $file_content = base64_decode($document_numerise["file_content"]);
1165     if ($file_content === false){
1166     $this->addToMessage(__("Le contenu du fichier lié à la tâche n'a pas pu etre recupere."));
1167     return $this->end_treatment(__METHOD__, false);
1168     }
1169     $metadata = array(
1170     "filename" => $document_numerise['nom_fichier'],
1171     "size" => strlen($file_content),
1172     "mimetype" => $document_numerise['file_content_type'],
1173     "date_creation" => isset($document_numerise['date_creation']) === true ? $document_numerise['date_creation'] : date("Y-m-d"),
1174     );
1175 gmalvolti 10058 $uid_fichier = $this->f->storage->create($file_content, $metadata, "from_content", "task.uid_fichier");
1176 softime 10043 if ($uid_fichier === OP_FAILURE) {
1177     $this->addToMessage(__("Erreur lors de la creation du fichier lié à la tâche."));
1178     return $this->end_treatment(__METHOD__, false);
1179     }
1180     $json_payload["document_numerise"]["uid"] = $uid_fichier;
1181     // Le fichier a été ajouté nous n'avons plus besoin du champ file_content dans la payload
1182     unset($json_payload["document_numerise"]["file_content"]);
1183     $params['val']['json_payload'] = json_encode($json_payload, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
1184 gmalvolti 9751 }
1185     }
1186    
1187 softime 14064 // Valeurs de la tâche
1188 softime 9293 $valF = array(
1189     'task' => '',
1190     'type' => $params['val']['type'],
1191     'timestamp_log' => $timestamp_log,
1192 mbideau 9799 'state' => isset($params['val']['state']) === true ? $params['val']['state'] : self::STATUS_NEW,
1193 gmalvolti 9765 'object_id' => isset($params['val']['object_id']) ? $params['val']['object_id'] : '',
1194     'dossier' => isset($params['val']['dossier']) ? $params['val']['dossier'] : '',
1195 softime 9853 'stream' => $stream,
1196 gmalvolti 9721 'json_payload' => isset($params['val']['json_payload']) === true ? $params['val']['json_payload'] : '{}',
1197 softime 10808 'category' => $category,
1198 softime 12124 'creation_date' => date('Y-m-d'),
1199     'creation_time' => date('H:i:s'),
1200     'last_modification_date' => null,
1201     'last_modification_time' => null,
1202 softime 12433 'comment' => null,
1203 softime 9293 );
1204 gmalvolti 9765
1205 softime 14064 // Gestion de la mise à jour des tâches sortantes
1206 softime 11585 $typeNonConcerne = array(
1207     'notification_recepisse',
1208     'notification_instruction',
1209     'notification_decision',
1210     'notification_service_consulte',
1211 softime 15037 'notification_tiers_consulte',
1212 softime 15650 'notification_depot_demat',
1213     'notification_commune',
1214     'notification_signataire',
1215 softime 11585 );
1216 softime 10808 if ($valF["stream"] == "output"
1217 softime 11585 && ! in_array($valF['type'], $typeNonConcerne)) {
1218 softime 14064 // Vérification de l'existance d'une tâche pour l'objet concerné
1219     // La vérification diffère en fonction de certains types de tâche
1220     $search_values_common = array(
1221     sprintf('state != \'%s\'', self::STATUS_CANCELED),
1222     sprintf('state != \'%s\'', self::STATUS_DONE),
1223     );
1224     $search_values_others = array(
1225     sprintf('type = \'%s\'', $valF['type']),
1226     sprintf('(object_id = \'%s\' OR dossier = \'%s\')', $valF['object_id'], $valF['dossier']),
1227     );
1228     $search_values_specifics = array(
1229     sprintf('object_id = \'%s\'', $valF['object_id']),
1230     );
1231 softime 14542
1232     // Recherche multi-critères sur les tâches
1233     // Si l'object id/dossier à des tâches de type $valF['type'] qui lui est associé
1234     // Et que ces tâches ont des statut différents de canceled et done
1235     // Alors on récupère ces tâches
1236     // Sinon return false
1237 softime 14064 $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_others));
1238 softime 14542
1239     // S'il n'existe pas de tâche de type 'modification DI' pour l'object id/dossier
1240 gmalvolti 9746 if ($valF['type'] === 'modification_DI' && $task_exists === false) {
1241 softime 14542 // On se réfère à la tâche de type 'creation DI' de l'object id
1242 softime 14064 $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_DI'")));
1243 softime 9414 }
1244 softime 14542 // S'il n'existe pas de tâche de type 'modification DA' pour l'object id/dossier
1245 softime 10356 if ($valF['type'] === 'modification_DA' && $task_exists === false) {
1246 softime 14542 // On se réfère à la tâche de type 'creation DA' de l'object id
1247 softime 14064 $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_DA'")));
1248 softime 10356 }
1249 softime 10572 if ($valF['type'] === 'ajout_piece') {
1250 softime 14542 // On se réfère à la tâche de type 'ajout piece' de l'object id
1251 softime 14064 $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'ajout_piece'")));
1252 softime 10572 }
1253     if ($valF['type'] === 'creation_consultation') {
1254 softime 14542 // On se réfère à la tâche de type 'creation consultation' de l'object id
1255 softime 14064 $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_consultation'")));
1256 softime 10572 }
1257 softime 14542 // S'il existe une tâche pour l'objet concerné, pas d'ajout de nouvelle
1258 softime 14064 // tâche mais mise à jour de l'existante
1259 gmalvolti 9746 if ($task_exists !== false) {
1260 softime 14064 // Plusieurs tâches pourraient exister, elles sont contôler par ordre croissant
1261     foreach ($task_exists as $task) {
1262     $inst_task = $this->f->get_inst__om_dbform(array(
1263     "obj" => "task",
1264     "idx" => $task['task'],
1265     ));
1266     $update_state = $inst_task->getVal('state');
1267     if (isset($params['update_val']['state']) === true) {
1268     $update_state = $params['update_val']['state'];
1269     }
1270     $object_id = $inst_task->getVal('object_id');
1271 softime 14542 if (!empty($valF['object_id'])) {
1272 softime 14064 $object_id = $valF['object_id'];
1273     }
1274     // Pour être mise à jour, la tâche existante ne doit pas être en cours de traitement
1275     $task_pending = $inst_task->getVal('state') === self::STATUS_PENDING
1276     && $update_state === self::STATUS_PENDING
1277     && $inst_task->getVal('object_id') !== $object_id;
1278     if ($task_pending === false) {
1279     $update_params = array(
1280     'val' => array(
1281     'state' => $update_state,
1282     ),
1283     'object_id' => $object_id,
1284     );
1285     return $inst_task->update_task($update_params);
1286     }
1287 gmalvolti 9746 }
1288     }
1289 softime 9395 }
1290 softime 9293 $add = $this->ajouter($valF);
1291 mbideau 9785 $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);
1292 softime 9293 if ($add === false) {
1293 gmalvolti 9765 $this->addToLog(__METHOD__."(): ".$this->msg, DEBUG_MODE);
1294 softime 9293 return $this->end_treatment(__METHOD__, false);
1295     }
1296     return $this->end_treatment(__METHOD__, true);
1297     }
1298    
1299     /**
1300     * TREATMENT - update_task
1301     * Met à jour l'enregistrement instancié.
1302     *
1303     * @param array $params Tableau des paramètres
1304     * @return boolean
1305     */
1306     public function update_task($params = array()) {
1307     $this->begin_treatment(__METHOD__);
1308 softime 12433
1309 softime 11228 // Mise à jour de la tâche
1310 softime 9293 $valF = array(
1311     'task' => $this->getVal($this->clePrimaire),
1312     'type' => $this->getVal('type'),
1313 softime 12433 'timestamp_log' => '[]',
1314 softime 9293 'state' => $params['val']['state'],
1315 softime 11228 'object_id' => isset($params['object_id']) == true ? $params['object_id'] : $this->getVal('object_id'),
1316 gmalvolti 9721 'stream' => $this->getVal('stream'),
1317 gmalvolti 9593 'dossier' => $this->getVal('dossier'),
1318 gmalvolti 9667 'json_payload' => $this->getVal('json_payload'),
1319 softime 10808 'category' => $this->getVal('category'),
1320 softime 12124 'creation_date' => $this->getVal('creation_date'),
1321     'creation_time' => $this->getVal('creation_time'),
1322     'last_modification_date' => date('Y-m-d'),
1323     'last_modification_time' => date('H:i:s'),
1324 softime 14064 'comment' => isset($params['comment']) == true ? $params['comment'] : $this->getVal('comment'),
1325 softime 9293 );
1326     $update = $this->modifier($valF);
1327     if ($update === false) {
1328     $this->addToLog($this->msg, DEBUG_MODE);
1329     return $this->end_treatment(__METHOD__, false);
1330     }
1331     return $this->end_treatment(__METHOD__, true);
1332     }
1333    
1334     /**
1335     * Récupère le journal d'horodatage dans le champ timestamp_log de
1336     * l'enregistrement instancié.
1337 mbroquet 9776 *
1338 softime 9293 * @param array $params Tableau des paramètres
1339     * @return array sinon false en cas d'erreur
1340     */
1341     protected function get_timestamp_log($params = array()) {
1342     $val = $this->getVal('timestamp_log');
1343     if ($val === '') {
1344     $val = json_encode(array());
1345     }
1346     if($this->isJson($val) === false) {
1347     return false;
1348     }
1349     return json_decode($val, true);
1350     }
1351    
1352     /**
1353 softime 9330 * VIEW - view_json_data
1354 softime 9293 * Affiche l'enregistrement dans le format JSON.
1355     *
1356     * @return void
1357     */
1358 softime 9330 public function view_json_data() {
1359 softime 9293 $this->checkAccessibility();
1360 softime 9330 $this->f->disableLog();
1361 softime 9298 if ($this->getParameter('idx') !== ']'
1362     && $this->getParameter('idx') !== '0') {
1363     //
1364     $this->view_form_json();
1365     }
1366     else {
1367     $this->view_tab_json();
1368     }
1369     }
1370    
1371     protected function view_tab_json() {
1372 softime 9304 $where = '';
1373 softime 11876 $category = null;
1374 softime 12124 // Liste des paramètres possibles pour la recherche des tâches
1375     $params = array(
1376     'task',
1377     'type',
1378     'state',
1379     'object_id',
1380     'dossier',
1381     'stream',
1382     'category',
1383     'lien_id_interne_uid_externe',
1384     'object',
1385     'external_uid',
1386     );
1387     // Pour chaque paramètre possible, vérification de son existance et de sa
1388     // valeur pour compléter la requête de recherche
1389     foreach ($params as $param) {
1390 softime 9304 //
1391 softime 12124 if ($this->f->get_submitted_get_value($param) !== null
1392     && $this->f->get_submitted_get_value($param) !== '') {
1393     // Condition spécifique au champ 'category'
1394     if ($param === 'category') {
1395     $category = $this->f->get_submitted_get_value('category');
1396     }
1397     //
1398     $where_or_and = 'WHERE';
1399     if ($where !== '') {
1400     $where_or_and = 'AND';
1401     }
1402     $table = 'task';
1403     if ($param === 'lien_id_interne_uid_externe'
1404     || $param === 'object'
1405     || $param === 'external_uid') {
1406     //
1407     $table = 'lien_id_interne_uid_externe';
1408     }
1409     $where .= sprintf(' %s %s.%s = \'%s\' ', $where_or_and, $table, $param, $this->f->get_submitted_get_value($param));
1410 softime 10808 }
1411 softime 9304 }
1412 softime 12124 //
1413 softime 9298 $query = sprintf('
1414     SELECT
1415 softime 15835 DISTINCT (task.task),
1416 softime 15973 task.type,
1417 softime 15835 task.object_id,
1418     task.dossier,
1419     task.stream,
1420     task.category,
1421     task.creation_date,
1422     task.creation_time,
1423     task.last_modification_date,
1424     task.last_modification_time,
1425     task.comment
1426 softime 9298 FROM %1$stask
1427 softime 12124 LEFT JOIN %1$slien_id_interne_uid_externe
1428     ON task.object_id = lien_id_interne_uid_externe.object_id
1429     AND task.category = lien_id_interne_uid_externe.category
1430 softime 9304 %2$s
1431 softime 9481 ORDER BY task ASC
1432 softime 9298 ',
1433 softime 9304 DB_PREFIXE,
1434     $where
1435 softime 9298 );
1436 softime 13137 $res = $this->f->get_all_results_from_db_query(
1437     $query,
1438     array(
1439     "origin" => __METHOD__,
1440     "force_return" => true,
1441     )
1442     );
1443 softime 9298 if ($res['code'] === 'KO') {
1444     return false;
1445     }
1446     $list_tasks = array();
1447     foreach ($res['result'] as $task) {
1448 softime 9872 if ($task['stream'] === 'output') {
1449 softime 11876 $task['external_uids'] = array_merge(
1450     $this->get_all_external_uids($task['dossier'], array(), $category !== null ? $category : $task['category']),
1451     $this->get_all_external_uids($task['object_id'], array(), $category !== null ? $category : $task['category'])
1452     );
1453 softime 9872 }
1454 softime 9298 $list_tasks[$task['task']] = $task;
1455     }
1456 softime 12124 echo(json_encode($list_tasks));
1457 softime 9298 }
1458    
1459 softime 9395 protected function get_dossier_data(string $dossier) {
1460     $val_di = array();
1461     $inst_di = $this->f->get_inst__om_dbform(array(
1462     "obj" => "dossier",
1463     "idx" => $dossier,
1464     ));
1465 softime 11228 if (empty($inst_di->val) === true) {
1466     return $val_di;
1467     }
1468 softime 9404 $val_di = $inst_di->get_json_data();
1469 softime 9396 if ($val_di['dossier_instruction_type_code'] === 'T') {
1470     $val_di['date_decision_transfert'] = $val_di['date_decision'];
1471     }
1472 softime 9395 unset($val_di['initial_dt']);
1473     unset($val_di['log_instructions']);
1474     return $val_di;
1475     }
1476    
1477     protected function get_dossier_autorisation_data(string $da) {
1478     $val_da = array();
1479     $inst_da = $this->f->get_inst__om_dbform(array(
1480     "obj" => "dossier_autorisation",
1481     "idx" => $da,
1482     ));
1483 softime 9404 $val_da = $inst_da->get_json_data();
1484 softime 9395 return $val_da;
1485     }
1486    
1487     protected function get_donnees_techniques_data(string $fk_idx, string $fk_field) {
1488     $val_dt = array();
1489     $inst_dt = $this->f->get_inst__by_other_idx(array(
1490     "obj" => "donnees_techniques",
1491     "fk_field" => $fk_field,
1492     "fk_idx" => $fk_idx,
1493     ));
1494     $val_dt = array(
1495     'donnees_techniques' => $inst_dt->getVal($inst_dt->clePrimaire),
1496     'cerfa' => $inst_dt->getVal('cerfa'),
1497     );
1498     $val_dt = array_merge($val_dt, $inst_dt->get_donnees_techniques_applicables());
1499 softime 9396 if (isset($val_dt['am_exist_date']) === true) {
1500     $val_dt['am_exist_date_num'] = '';
1501     if (is_numeric($val_dt['am_exist_date']) === true) {
1502     $val_dt['am_exist_date_num'] = $val_dt['am_exist_date'];
1503     }
1504     }
1505 softime 9403 // Correspond à la nomenclature de Plat'AU STATUT_INFO
1506     $val_dt['tax_statut_info'] = 'Déclaré';
1507 softime 9407 //
1508     if ($inst_dt->is_tab_surf_ssdest_enabled() === true) {
1509     $fields_tab_surf_dest = $inst_dt->get_fields_tab_surf_dest();
1510     foreach ($fields_tab_surf_dest as $field) {
1511     if (isset($val_dt[$field]) === true) {
1512     unset($val_dt[$field]);
1513     }
1514     }
1515     } else {
1516     $fields_tab_surf_ssdest = $inst_dt->get_fields_tab_surf_ssdest();
1517     foreach ($fields_tab_surf_ssdest as $field) {
1518     if (isset($val_dt[$field]) === true) {
1519     unset($val_dt[$field]);
1520     }
1521     }
1522     }
1523 softime 9409 // Correspond à la nouvelle ligne CERFA v7 dans le DENSI imposition 1.2.3
1524 softime 9408 if (isset($val_dt['tax_su_non_habit_surf2']) === true
1525 softime 9412 && isset($val_dt['tax_su_non_habit_surf3']) === true
1526     && (($val_dt['tax_su_non_habit_surf2'] !== null
1527     && $val_dt['tax_su_non_habit_surf2'] !== '')
1528     || ($val_dt['tax_su_non_habit_surf3'] !== null
1529     && $val_dt['tax_su_non_habit_surf3'] !== ''))) {
1530 softime 9408 //
1531     $val_dt['tax_su_non_habit_surf8'] = intval($val_dt['tax_su_non_habit_surf2']) + intval($val_dt['tax_su_non_habit_surf3']);
1532     }
1533     if (isset($val_dt['tax_su_non_habit_surf_stat2']) === true
1534 softime 9412 && isset($val_dt['tax_su_non_habit_surf_stat3']) === true
1535     && (($val_dt['tax_su_non_habit_surf_stat2'] !== null
1536     && $val_dt['tax_su_non_habit_surf_stat2'] !== '')
1537     || ($val_dt['tax_su_non_habit_surf_stat3'] !== null
1538     && $val_dt['tax_su_non_habit_surf_stat3'] !== ''))) {
1539 softime 9408 //
1540     $val_dt['tax_su_non_habit_surf_stat8'] = intval($val_dt['tax_su_non_habit_surf_stat2']) + intval($val_dt['tax_su_non_habit_surf_stat3']);
1541     }
1542 softime 9409 // Cas particulier d'un projet réduit à l'extension d'une habitation existante
1543     $particular_case = false;
1544     $fields_tab_crea_loc_hab = $inst_dt->get_fields_tab_crea_loc_hab();
1545     foreach ($fields_tab_crea_loc_hab as $field) {
1546 softime 9438 if (isset($val_dt[$field]) === false
1547     || (isset($val_dt[$field]) === true
1548     && ($val_dt[$field] === null
1549     || $val_dt[$field] === ''))) {
1550 softime 9409 //
1551     $particular_case = true;
1552     }
1553     }
1554     if ($particular_case === true) {
1555     if (isset($val_dt['tax_ext_pret']) === true
1556     && $val_dt['tax_ext_pret'] === 'f') {
1557     //
1558 softime 14542 $val_dt['tax_su_princ_surf1'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';
1559     $val_dt['tax_su_princ_surf_stat1'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';
1560 softime 9409 }
1561     if (isset($val_dt['tax_ext_pret']) === true
1562     && $val_dt['tax_ext_pret'] === 't') {
1563     //
1564     if (isset($val_dt['tax_ext_desc']) === true) {
1565     if (preg_match('/[pP].*[lL].*[aA].*[iI]/', $val_dt['tax_ext_desc']) === 1
1566     || preg_match('/[lL].*[lL].*[tT].*[sS]/', $val_dt['tax_ext_desc']) === 1) {
1567     //
1568 softime 14542 $val_dt['tax_su_princ_surf2'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';
1569     $val_dt['tax_su_princ_surf_stat2'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';
1570 softime 9409 }
1571     // if (preg_match('/[pP].*[tT].*[zZ]/', $val_dt['tax_ext_desc']) === 1) {
1572     // $val_dt['tax_su_princ_surf4'] = $val_dt['tax_surf_tot_cstr'];
1573     // $val_dt['tax_su_princ_surf_stat4'] = $val_dt['tax_surf_loc_stat'];
1574     // }
1575     // if (preg_match('/[pP].*[lL].*[uU].*[sS]/', $val_dt['tax_ext_desc']) === 1
1576     // || preg_match('/[lL].*[eE].*[sS]/', $val_dt['tax_ext_desc']) === 1
1577     // || preg_match('/[pP].*[sS].*[lL].*[aA]/', $val_dt['tax_ext_desc']) === 1
1578     // || preg_match('/[pP].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1
1579     // || preg_match('/[lL].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1) {
1580     // //
1581     // $val_dt['tax_su_princ_surf3'] = $val_dt['tax_surf_tot_cstr'];
1582     // $val_dt['tax_su_princ_surf_stat3'] = $val_dt['tax_surf_loc_stat'];
1583     // }
1584     }
1585     }
1586     }
1587     // Cas particulier de la surface taxable démolie
1588     if (isset($val_dt['tax_surf_tot_demo']) === true
1589     && isset($val_dt['tax_surf_tax_demo']) === true
1590     && ($val_dt['tax_surf_tot_demo'] === null
1591     || $val_dt['tax_surf_tot_demo'] === '')) {
1592     //
1593     $val_dt['tax_surf_tot_demo'] = $val_dt['tax_surf_tax_demo'];
1594     }
1595 softime 9395 return $val_dt;
1596     }
1597    
1598 softime 9984 /**
1599     * Récupère la liste des objets distincts existants dans la table des liens
1600     * entre identifiants internes et identifiants externes.
1601     *
1602     * @return array
1603     */
1604     protected function get_list_distinct_objects_external_link() {
1605     $query = sprintf('
1606     SELECT
1607     DISTINCT(object)
1608     FROM %1$slien_id_interne_uid_externe
1609     ORDER BY object ASC
1610     ',
1611     DB_PREFIXE
1612     );
1613 softime 13137 $res = $this->f->get_all_results_from_db_query(
1614     $query,
1615     array(
1616     "origin" => __METHOD__,
1617     "force_return" => true,
1618     )
1619     );
1620 softime 9984 if ($res['code'] === 'KO') {
1621     return array();
1622     }
1623     $result = array();
1624     foreach ($res['result'] as $object) {
1625     $result[] = $object['object'];
1626     }
1627     return $result;
1628     }
1629    
1630 softime 13137 protected function get_external_uid($fk_idx, string $fk_idx_2, $fk_idx_3 = PLATAU, $order_asc_desc = 'DESC') {
1631 softime 9404 $inst_external_uid = $this->f->get_inst__by_other_idx(array(
1632 softime 9395 "obj" => "lien_id_interne_uid_externe",
1633     "fk_field" => 'object_id',
1634     "fk_idx" => $fk_idx,
1635     "fk_field_2" => 'object',
1636     "fk_idx_2" => $fk_idx_2,
1637 softime 11876 "fk_field_3" => 'category',
1638     "fk_idx_3" => $fk_idx_3,
1639     "order_field" => 'lien_id_interne_uid_externe',
1640 softime 12124 "order_asc_desc" => $order_asc_desc,
1641 softime 9395 ));
1642 softime 9404 return $inst_external_uid->getVal('external_uid');
1643 softime 9395 }
1644    
1645 softime 13137 protected function get_all_external_uids($fk_idx, $link_objects = array(), $category=PLATAU) {
1646 softime 9984 if (count($link_objects) == 0) {
1647     $link_objects = $this->get_list_distinct_objects_external_link();
1648     }
1649 softime 9872 $val_external_uid = array();
1650     foreach ($link_objects as $link_object) {
1651 softime 11876 $external_uid = $this->get_external_uid($fk_idx, $link_object, $category);
1652 softime 9872 if ($external_uid !== '' && $external_uid !== null) {
1653     $val_external_uid[$link_object] = $external_uid;
1654     }
1655     }
1656     return $val_external_uid;
1657     }
1658    
1659 softime 11228 protected function get_demandeurs_data($dossier) {
1660 softime 9395 $val_demandeur = array();
1661 softime 11228 if ($dossier === null) {
1662     return $val_demandeur;
1663     }
1664 softime 9395 $inst_di = $this->f->get_inst__om_dbform(array(
1665     "obj" => "dossier",
1666     "idx" => $dossier,
1667     ));
1668     $list_demandeurs = $inst_di->get_demandeurs();
1669     foreach ($list_demandeurs as $demandeur) {
1670     $inst_demandeur = $this->f->get_inst__om_dbform(array(
1671     "obj" => "demandeur",
1672     "idx" => $demandeur['demandeur'],
1673 softime 9334 ));
1674 softime 9404 $val_demandeur[$demandeur['demandeur']] = $inst_demandeur->get_json_data();
1675 softime 9395 $val_demandeur[$demandeur['demandeur']]['petitionnaire_principal'] = $demandeur['petitionnaire_principal'];
1676 softime 9334 }
1677 softime 9395 return $val_demandeur;
1678     }
1679    
1680     protected function get_architecte_data($architecte = null) {
1681 softime 9408 $val_architecte = null;
1682 softime 9395 if ($architecte !== null
1683     && $architecte !== '') {
1684 softime 9334 //
1685 softime 9395 $inst_architecte = $this->f->get_inst__om_dbform(array(
1686     "obj" => "architecte",
1687     "idx" => $architecte,
1688 softime 9334 ));
1689 softime 9404 $val_architecte = $inst_architecte->get_json_data();
1690 softime 9334 }
1691 softime 9395 return $val_architecte;
1692     }
1693 softime 9334
1694 softime 11228 protected function get_instruction_data($dossier, $type = 'decision', $extra_params = array()) {
1695 softime 9414 $val_instruction = null;
1696 softime 11228 if ($dossier === null) {
1697     return $val_instruction;
1698     }
1699 softime 9416 $instruction_with_doc = null;
1700 softime 9395 $inst_di = $this->f->get_inst__om_dbform(array(
1701     "obj" => "dossier",
1702     "idx" => $dossier,
1703     ));
1704 softime 9457 $idx = null;
1705     if ($type === 'decision') {
1706     $idx = $inst_di->get_last_instruction_decision();
1707     }
1708     if ($type === 'incompletude') {
1709     $idx = $inst_di->get_last_instruction_incompletude();
1710     }
1711 softime 9838 // XXX Permet de récupérer l'instruction par son identifiant
1712     if ($type === 'with-id') {
1713     $idx = $extra_params['with-id'];
1714     }
1715 softime 9395 $inst_instruction = $this->f->get_inst__om_dbform(array(
1716     "obj" => "instruction",
1717 softime 9457 "idx" => $idx,
1718 softime 9395 ));
1719     if (count($inst_instruction->val) > 0) {
1720 softime 9416 $val_instruction = array();
1721     $instruction_data = $inst_instruction->get_json_data();
1722     $val_instruction = $this->sort_instruction_data($instruction_data, $val_instruction);
1723     if ($instruction_data['om_fichier_instruction'] !== null
1724     && $instruction_data['om_fichier_instruction'] !== '') {
1725     //
1726     $instruction_with_doc = $inst_instruction->getVal($inst_instruction->clePrimaire);
1727     }
1728 softime 9414 $inst_ev = $this->f->get_inst__om_dbform(array(
1729     "obj" => "evenement",
1730     "idx" => $inst_instruction->getVal('evenement'),
1731     ));
1732     if ($inst_ev->getVal('retour') === 't') {
1733     $instructions_related = $inst_instruction->get_related_instructions();
1734     foreach ($instructions_related as $instruction) {
1735 softime 9416 if ($instruction !== null && $instruction !== '') {
1736     $inst_related_instruction = $this->f->get_inst__om_dbform(array(
1737     "obj" => "instruction",
1738     "idx" => $instruction,
1739     ));
1740     $instruction_data = $inst_related_instruction->get_json_data();
1741     $val_instruction = $this->sort_instruction_data($instruction_data, $val_instruction);
1742     if ($instruction_data['om_fichier_instruction'] !== null
1743     && $instruction_data['om_fichier_instruction'] !== '') {
1744     //
1745     $instruction_with_doc = $inst_related_instruction->getVal($inst_related_instruction->clePrimaire);
1746     }
1747     }
1748 softime 9414 }
1749     }
1750 softime 9416 if ($instruction_with_doc !== null) {
1751     //
1752 softime 9480 $val_instruction['path'] = sprintf('%s&snippet=%s&obj=%s&champ=%s&id=%s', 'app/index.php?module=form', 'file', 'instruction', 'om_fichier_instruction', $instruction_with_doc);
1753 softime 9416 }
1754 softime 9384 }
1755 softime 9395 return $val_instruction;
1756     }
1757 softime 9334
1758 softime 12433
1759 softime 10808 /**
1760 softime 12433 * Récupère les informations pour les notifications ayant plusieurs annexe
1761 softime 10808 */
1762     protected function get_instruction_notification_data($category, $type = '', $extra_params = array()) {
1763 softime 11228 $val_in = null;
1764 softime 10808
1765     $idx = null;
1766     if ($type === 'with-id') {
1767     $idx = $extra_params['with-id'];
1768     }
1769    
1770 softime 12433 // Récupération du type de notification. Le type est nécessaire pour récupérer
1771     // le message et le titre de notification.
1772     $typeNotification = $this->getVal('type');
1773     if (isset($this->valF['type'])) {
1774     $typeNotification = $this->valF['type'];
1775 softime 11057 }
1776 softime 10808
1777 softime 11585 // récupére les données à intégrer à la payload
1778     $inst_in = $this->f->get_inst__om_dbform(array(
1779     "obj" => "instruction_notification",
1780     "idx" => $idx,
1781     ));
1782     if (count($inst_in->val) > 0) {
1783     $val_in = $inst_in->get_json_data();
1784    
1785     $val_in['parametre_courriel_type_titre'] = '';
1786     $val_in['parametre_courriel_type_message'] = '';
1787     // Récupération du message et du titre
1788     if ($category === 'mail') {
1789     $inst_instruction = $this->f->get_inst__om_dbform(array(
1790     "obj" => "instruction",
1791     "idx" => $inst_in->getVal('instruction'),
1792     ));
1793     $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));
1794 softime 12433 $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $typeNotification);
1795 softime 11585 $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];
1796     $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];
1797     }
1798    
1799 softime 15037 if ($typeNotification == 'notification_signataire') {
1800     $val_in['lien_page_signature'] = $inst_in->getLienPageSignature($inst_instruction);
1801     }
1802     else {
1803     // Récupération des liens vers les documents et des id et type des annexes
1804     $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire), $category);
1805     $cle = $category == PORTAL ? 'path' : 'lien_telechargement_document';
1806     $val_in[$cle] = $infoDocNotif['document']['path'];
1807     $val_in['annexes'] = $infoDocNotif['annexes'];
1808     }
1809 softime 11585 }
1810     return $val_in;
1811     }
1812    
1813 softime 14064 /**
1814     * Récupère les informations concernant la lettre au pétitionnaire.
1815     *
1816     * @param string identifiant du dossier
1817     * @param string type de tâche
1818     * @param array paramètre supplémentaire permettant de récupérer les informations
1819     *
1820     * @return array information concernant la lettre au pétitionnaire
1821     */
1822     protected function get_lettre_petitionnaire_data($dossier, $type, $extra_params = array()) {
1823     // Si la date limite de notification n'a pas été dépassé le type de lettre est 1
1824     // Si la date a été dépassé et qu'il s'agit d'une demande de pièce le type est 3
1825     // Si la date a été dépassé et qu'il s'agit d'une prolongation le type est 4
1826     // Le type de document dépend du type de pièce
1827     $nomTypeLettre = '';
1828     $nomTypeDocument = '';
1829     if ($type === 'lettre_incompletude') {
1830     $nomTypeLettre = '3';
1831     $nomTypeDocument = '4';
1832     } elseif ($type === 'lettre_majoration') {
1833     $nomTypeLettre = '4';
1834     $nomTypeDocument = '6';
1835     }
1836    
1837     $inst_di = $this->f->get_inst__om_dbform(array(
1838     "obj" => "dossier",
1839     "idx" => $dossier,
1840     ));
1841     $date_limite_notification = DateTime::createFromFormat('Y-m-d', $inst_di->getVal('date_notification_delai'));
1842     $aujourdhui = new DateTime();
1843     if (! $date_limite_notification instanceof DateTime) {
1844     $nomTypeLettre = '';
1845     $nomTypeDocument = '';
1846     } elseif ($aujourdhui < $date_limite_notification) {
1847     $nomTypeLettre = '1';
1848     $nomTypeDocument = '3';
1849     }
1850    
1851     return array(
1852     'nomEtatLettre' => '3',
1853     'nomModaliteNotifMetier' => '4',
1854     'nomTypeLettre' => $nomTypeLettre,
1855     'nomTypeDocument' => $nomTypeDocument
1856     );
1857     }
1858    
1859 softime 9416 protected function sort_instruction_data(array $values, array $res) {
1860     $fields = array(
1861 softime 9838 "date_evenement",
1862 softime 9416 "date_envoi_signature",
1863     "date_retour_signature",
1864     "date_envoi_rar",
1865     "date_retour_rar",
1866     "date_envoi_controle_legalite",
1867     "date_retour_controle_legalite",
1868     "signataire_arrete",
1869     "om_fichier_instruction",
1870     "tacite",
1871 softime 9623 "lettretype",
1872 softime 10869 "commentaire",
1873     "complement_om_html",
1874 softime 9416 );
1875     foreach ($values as $key => $value) {
1876     if (in_array($key, $fields) === true) {
1877     if (array_key_exists($key, $res) === false
1878     && $value !== null
1879     && $value !== '') {
1880     //
1881     $res[$key] = $value;
1882     } elseif ($key === 'tacite'
1883     && $value === 't') {
1884     //
1885     $res[$key] = $value;
1886     }
1887     }
1888     }
1889     return $res;
1890     }
1891    
1892 softime 10968 /**
1893     * Permet de définir si l'instruction passée en paramètre est une instruction
1894     * récépissé d'une demande et si la demande en question a générée un dossier d'instruction.
1895     *
1896     * @param integer $instruction Identifiant de l'instruction
1897     * @return boolean
1898     */
1899     protected function is_demande_instruction_recepisse_without_dossier($instruction) {
1900 softime 11228 if ($instruction === null) {
1901     return false;
1902     }
1903 softime 13137 $qres = $this->f->get_one_result_from_db_query(
1904     sprintf(
1905     'SELECT
1906     demande_type.dossier_instruction_type
1907     FROM
1908     %1$sdemande
1909     INNER JOIN %1$sdemande_type
1910     ON demande.demande_type = demande_type.demande_type
1911     WHERE
1912     demande.instruction_recepisse = %2$s',
1913     DB_PREFIXE,
1914     intval($instruction)
1915     ),
1916     array(
1917     "origin" => __METHOD__,
1918     "force_return" => true,
1919     )
1920 softime 10968 );
1921 softime 13137 if ($qres["code"] !== "OK") {
1922 softime 10968 return null;
1923     }
1924 softime 13137 if ($qres["result"] === "") {
1925 softime 10968 return true;
1926     }
1927     return false;
1928     }
1929    
1930 softime 9395 protected function get_document_numerise_data(string $dn) {
1931     $val_dn = array();
1932     $inst_dn = $this->f->get_inst__om_dbform(array(
1933     "obj" => "document_numerise",
1934     "idx" => $dn,
1935     ));
1936 softime 9404 $val_dn = $inst_dn->get_json_data();
1937 softime 9480 $val_dn['path'] = sprintf('%s&snippet=%s&obj=%s&champ=%s&id=%s', 'app/index.php?module=form', 'file', 'document_numerise', 'uid', $this->getVal('object_id'));
1938 softime 9403 // Correspond à la nomenclature Plat'AU NATURE_PIECE
1939 softime 9457 $val_dn['nature'] = $val_dn['document_numerise_nature_libelle'];
1940 softime 9395 return $val_dn;
1941     }
1942    
1943 softime 9396 protected function get_parcelles_data(string $object, string $idx) {
1944     $val_dp = array();
1945     $inst_di = $this->f->get_inst__om_dbform(array(
1946     "obj" => $object,
1947     "idx" => $idx,
1948     ));
1949     $list_parcelles = $inst_di->get_parcelles();
1950     $no_ordre = 1;
1951     foreach ($list_parcelles as $parcelle) {
1952     $val_dp[$parcelle[$object.'_parcelle']] = array(
1953     $object.'_parcelle' => $parcelle[$object.'_parcelle'],
1954     'libelle' => $parcelle['libelle'],
1955     'no_ordre' => $no_ordre,
1956     );
1957     $no_ordre++;
1958     }
1959     return $val_dp;
1960     }
1961    
1962 softime 9853 protected function get_avis_decision_data(string $dossier) {
1963     $inst_di = $this->f->get_inst__om_dbform(array(
1964     "obj" => "dossier",
1965     "idx" => $dossier,
1966     ));
1967     $ad = $inst_di->getVal('avis_decision');
1968     $val_ad = array();
1969 softime 14064 if ($ad !== null && trim($ad) !== '') {
1970 softime 10104 $inst_ad = $this->f->get_inst__om_dbform(array(
1971     "obj" => "avis_decision",
1972     "idx" => $ad,
1973     ));
1974     $val_ad = $inst_ad->get_json_data();
1975     $val_ad['txAvis'] = "Voir document joint";
1976     if (isset($val_ad['tacite']) === true
1977     && $val_ad['tacite'] === 't') {
1978     //
1979     $val_ad['txAvis'] = "Sans objet";
1980     }
1981 softime 9871 }
1982 softime 9853 return $val_ad;
1983     }
1984    
1985     protected function get_signataire_arrete_data(string $sa) {
1986     $inst_sa = $this->f->get_inst__om_dbform(array(
1987     "obj" => "signataire_arrete",
1988     "idx" => $sa,
1989     ));
1990     $val_sa = array_combine($inst_sa->champs, $inst_sa->val);
1991     foreach ($val_sa as $key => $value) {
1992     $val_sa[$key] = strip_tags($value);
1993     }
1994     return $val_sa;
1995     }
1996    
1997 softime 10032 // XXX WIP
1998     protected function get_consultation_data(string $consultation) {
1999     $val_consultation = array();
2000     $inst_consultation = $this->f->get_inst__om_dbform(array(
2001     "obj" => "consultation",
2002     "idx" => $consultation,
2003     ));
2004     $val_consultation = $inst_consultation->get_json_data();
2005 softime 10133 if (isset($val_consultation['fichier']) === true
2006     && $val_consultation['fichier'] !== '') {
2007     //
2008     $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'));
2009     }
2010     if (isset($val_consultation['om_fichier_consultation']) === true
2011     && $val_consultation['om_fichier_consultation'] !== '') {
2012     //
2013     $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'));
2014     }
2015 softime 10032 return $val_consultation;
2016     }
2017    
2018     // XXX WIP
2019     protected function get_service_data(string $service) {
2020     $val_service = array();
2021     $inst_service = $this->f->get_inst__om_dbform(array(
2022     "obj" => "service",
2023     "idx" => $service,
2024     ));
2025     $val_service = $inst_service->get_json_data();
2026     return $val_service;
2027     }
2028    
2029 gmalvolti 9604 protected function view_form_json($in_field = false) {
2030 softime 9395 //
2031 softime 13528 $check_state = isset($this->valF['state']) === true ? $this->valF['state'] : $this->getVal('state');
2032     if ($check_state !== self::STATUS_CANCELED) {
2033 softime 9402 // Liste des valeurs à afficher
2034     $val = array();
2035 softime 9395 //
2036 softime 9402 $val_task = array_combine($this->champs, $this->val);
2037 softime 9405 foreach ($val_task as $key => $value) {
2038     $val_task[$key] = strip_tags($value);
2039     }
2040 softime 14064
2041     // Vérifie pour les tâches dont l'affichage de la payload est calculée si l'objet
2042     // de référence de la tâche existe.
2043     $objectRefExist = true;
2044     if ($val_task['stream'] === 'output'
2045     && (empty($val_task['json_payload']) || $val_task['json_payload'] === '{}')) {
2046     $objectRefExist = $this->does_referenced_object_exist(
2047     $val_task['object_id'],
2048     $val_task['type']
2049     );
2050 softime 9402 }
2051 softime 14064
2052     // Si l'objet de référence n'existe pas log le numéro de la tâche concerné et
2053     // renvoie une payload contenant le message d'erreur.
2054     // Sinon constitue la payload du json.
2055     if (! $objectRefExist) {
2056     $this->f->addToLog(
2057     sprintf(
2058     __('Impossible de récupérer la payload car l\'objet de réference n\'existe pas pour la tâche : %s'),
2059     $val_task['task']
2060     ),
2061     DEBUG_MODE
2062     );
2063     $val = __('Impossible de recuperer la payload car l\'objet de reference n\'existe pas.');
2064     } else {
2065    
2066 softime 15835 // L'historique n'est pas nécessaire dans l'affichage en JSON
2067     if ($in_field === true) {
2068     $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);
2069     } else {
2070     unset($val_task['timestamp_log']);
2071     }
2072 softime 14064 unset($val_task['timestamp_log_hidden']);
2073     $val['task'] = $val_task;
2074 softime 9402 //
2075 softime 14064 if ($this->getVal('type') === 'creation_DA'
2076     || $this->getVal('type') === 'modification_DA') {
2077     //
2078     $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));
2079     $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');
2080     $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);
2081     $val_external_uid = array();
2082     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier_autorisation']['dossier_autorisation'], 'dossier_autorisation');
2083     $val['external_uids'] = $val_external_uid;
2084 softime 10869 }
2085 softime 14064 //
2086     if ($this->getVal('type') === 'creation_DI'
2087     || $this->getVal('type') === 'modification_DI'
2088     || $this->getVal('type') === 'depot_DI') {
2089     //
2090     $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));
2091     $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_instruction');
2092     $val['demandeur'] = $this->get_demandeurs_data($val['dossier']['dossier']);
2093     $architecte = isset($val['donnees_techniques']['architecte']) === true ? $val['donnees_techniques']['architecte'] : null;
2094     $val['architecte'] = $this->get_architecte_data($architecte);
2095     $val['dossier_parcelle'] = $this->get_parcelles_data('dossier', $val['dossier']['dossier']);
2096     $val_external_uid = array();
2097     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2098     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2099     $val['external_uids'] = $val_external_uid;
2100 softime 9853 }
2101 softime 10032 //
2102 softime 14064 if ($this->getVal('type') === 'qualification_DI') {
2103     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2104     $val_external_uid = array();
2105     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2106     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2107     $val['external_uids'] = $val_external_uid;
2108     }
2109 softime 11418 //
2110 softime 14064 if ($this->getVal('type') === 'ajout_piece') {
2111     $val['document_numerise'] = $this->get_document_numerise_data($this->getVal('object_id'));
2112     $val['dossier'] = $this->get_dossier_data($val['document_numerise']['dossier']);
2113     $val_external_uid = array();
2114     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2115     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2116     $val_external_uid['piece'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'piece');
2117     $val['external_uids'] = $val_external_uid;
2118 softime 11418 }
2119 softime 10808 //
2120 softime 14064 if ($this->getVal('type') === 'decision_DI') {
2121     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2122     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2123 softime 11585 $val['instruction']['final'] = 't';
2124 softime 14064 if (isset($val['instruction']['signataire_arrete']) === true) {
2125     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2126     }
2127     $val_external_uid = array();
2128     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2129     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2130     $val['external_uids'] = $val_external_uid;
2131 softime 11585 }
2132 softime 14064 //
2133     if ($this->getVal('type') === 'incompletude_DI') {
2134     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2135     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2136     $val_external_uid = array();
2137     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2138     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2139     $val['external_uids'] = $val_external_uid;
2140 softime 10869 }
2141 softime 14064 //
2142     if ($this->getVal('type') === 'completude_DI') {
2143     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2144     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2145     $val_external_uid = array();
2146     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2147     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2148     $val['external_uids'] = $val_external_uid;
2149     }
2150     //
2151     if ($this->getVal('type') === 'lettre_incompletude'
2152     || $this->getVal('type') === 'lettre_majoration') {
2153     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2154     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2155     $val['lettre_petitionnaire'] = $this->get_lettre_petitionnaire_data($val['dossier']['dossier'], $this->getVal('type'));
2156     $val_external_uid = array();
2157     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2158     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2159     $val['external_uids'] = $val_external_uid;
2160     }
2161     //
2162     if ($this->getVal('type') === 'pec_metier_consultation') {
2163     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2164     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2165     $val_external_uid = array();
2166     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2167     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2168     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2169     $val['external_uids'] = $val_external_uid;
2170     }
2171     //
2172     if ($this->getVal('type') === 'avis_consultation') {
2173     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2174     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2175     $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2176     if (isset($val['instruction']['signataire_arrete']) === true) {
2177     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2178     }
2179     $val_external_uid = array();
2180     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2181     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2182     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2183     $val_external_uid['avis_dossier_consultation'] = $this->get_external_uid($this->getVal('object_id'), 'avis_dossier_consultation');
2184     $val['external_uids'] = $val_external_uid;
2185     }
2186     // XXX WIP
2187     if ($this->getVal('type') === 'creation_consultation') {
2188     //
2189     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2190     $val['consultation'] = $this->get_consultation_data($this->getVal('object_id'));
2191     $val['service'] = $this->get_service_data($val['consultation']['service']);
2192     $val_external_uid = array();
2193     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2194     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2195     $val['external_uids'] = $val_external_uid;
2196     }
2197     //
2198     if ($this->getVal('type') === 'envoi_CL') {
2199     //
2200     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2201     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2202     $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($val['dossier']['dossier_autorisation']);
2203     $val_external_uid = array();
2204     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2205     $val_external_uid['dossier'] = $this->get_external_uid($this->getVal('dossier'), 'dossier');
2206     $val_external_uid['decision'] = $this->get_external_uid($this->getVal('object_id'), 'instruction');
2207     if ($val_external_uid['decision'] === '') {
2208     $inst_instruction = $this->f->get_inst__om_dbform(array(
2209     "obj" => "instruction",
2210     "idx" => $this->getVal('object_id'),
2211     ));
2212     $val_external_uid['decision'] = $this->get_external_uid($inst_instruction->get_related_instructions_next('retour_signature'), 'instruction');
2213     }
2214     $val['external_uids'] = $val_external_uid;
2215     }
2216     if ($this->getVal('type') === 'notification_instruction'
2217     || $this->getVal('type') === 'notification_recepisse'
2218     || $this->getVal('type') === 'notification_decision'
2219     || $this->getVal('type') === 'notification_service_consulte'
2220 softime 15037 || $this->getVal('type') === 'notification_tiers_consulte'
2221     || $this->getVal('type') === 'notification_signataire') {
2222 softime 14064 //
2223     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2224     $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;
2225     $val['demandeur'] = $this->get_demandeurs_data($dossier_id);
2226     $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));
2227     $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;
2228     $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;
2229     $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));
2230     // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une
2231     // demande dont le type ne génère pas de dossier
2232     if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {
2233     $val['instruction']['final'] = 't';
2234     }
2235     $val_external_uid = array();
2236     // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier
2237     $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');
2238     $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', PORTAL, 'ASC');
2239     $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', PORTAL);
2240     $val['external_uids'] = $val_external_uid;
2241     }
2242     //
2243     if ($this->getVal('type') === 'prescription') {
2244     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2245     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2246     $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2247     if (isset($val['instruction']['signataire_arrete']) === true) {
2248     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2249     }
2250     $val_external_uid = array();
2251     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2252     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2253     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2254     $val_external_uid['prescription'] = $this->get_external_uid($this->getVal('object_id'), 'prescription');
2255     $val['external_uids'] = $val_external_uid;
2256     }
2257 softime 10869 }
2258 softime 9402
2259 gmalvolti 9604 if ($in_field === true) {
2260 gmalvolti 9746 return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
2261 gmalvolti 9604 } else {
2262     // Liste des valeurs affichée en JSON
2263 softime 11057 echo(json_encode($val, JSON_UNESCAPED_SLASHES));
2264 gmalvolti 9604 }
2265 softime 9395 }
2266 softime 9293 }
2267 softime 9385
2268 gmalvolti 9765 function post_update_task() {
2269 gmalvolti 9721 // Mise à jour des valeurs
2270 softime 9973
2271     // Modification de l'état de la tâche
2272     if ($this->f->get_submitted_post_value('state') !== null) {
2273     $params = array(
2274     'val' => array(
2275     'state' => $this->f->get_submitted_post_value('state')
2276     ),
2277 gmalvolti 9721 );
2278 softime 14064 if ($this->f->get_submitted_post_value('comment') !== null) {
2279     $params['comment'] = $this->f->get_submitted_post_value('comment');
2280     }
2281 softime 9973 $update = $this->update_task($params);
2282     $message_class = "valid";
2283     $message = $this->msg;
2284     if ($update === false) {
2285     $this->addToLog($this->msg, DEBUG_MODE);
2286     $message_class = "error";
2287     $message = sprintf(
2288     '%s %s',
2289     __('Impossible de mettre à jour la tâche.'),
2290     __('Veuillez contacter votre administrateur.')
2291     );
2292     }
2293     $this->f->displayMessage($message_class, $message);
2294 gmalvolti 9721 }
2295 softime 9950
2296 softime 9973 // Sauvegarde de l'uid externe retourné
2297 softime 15650 $external_uid = $this->f->get_submitted_post_value('external_uid');
2298     if ($external_uid !== null) {
2299 softime 9950 //
2300 softime 10032 $objects = $this->get_objects_by_task_type($this->getVal('type'), $this->getVal('stream'));
2301 softime 15218 // Si l'identifiant externe contient le préfixe pour identifier les codes de suivi,
2302     // le seul objet concerné sera celui du code de suivi
2303 softime 15650 if (strpos($external_uid, self::CS_PREFIX) !== false) {
2304 softime 15218 $objects = array('code-suivi', );
2305 softime 15650 $external_uid = str_replace(self::CS_PREFIX, '', $external_uid);
2306 softime 15218 }
2307 softime 9973 foreach ($objects as $object) {
2308     $inst_lien = $this->f->get_inst__om_dbform(array(
2309     "obj" => "lien_id_interne_uid_externe",
2310     "idx" => ']',
2311     ));
2312 softime 11418 $object_id = $this->getVal('object_id');
2313 softime 15650 $is_exists = $inst_lien->is_exists($object, $object_id, $external_uid, $this->getVal('dossier'));
2314 softime 11418 // Dans le cas spécifique de la mise à jour d'une notification
2315     // et de la création d'une liaison d'identifiant pour l'objet demande,
2316     // l'identifiant de l'objet n'est plus celui de la notification
2317     // d'instruction mais celui du dossier d'instruction
2318     if ($object === 'demande'
2319     && ($this->getVal('type') === 'notification_recepisse'
2320     || $this->getVal('type') === 'notification_instruction'
2321 softime 11585 || $this->getVal('type') === 'notification_decision'
2322     || $this->getVal('type') === 'notification_service_consulte'
2323 softime 15037 || $this->getVal('type') === 'notification_tiers_consulte'
2324     || $this->getVal('type') === 'notification_signataire')) {
2325 softime 11418 //
2326     $object_id = $this->getVal('dossier');
2327 softime 12124 // Il ne doit y avoir qu'une liaison entre le numéro du dossier interne et un uid externe de "demande"
2328     $is_exists = $inst_lien->is_exists($object, $object_id, null, $this->getVal('dossier'));
2329 softime 11418 }
2330 softime 12124 if ($is_exists === false) {
2331 softime 9973 $valF = array(
2332     'lien_id_interne_uid_externe' => '',
2333     'object' => $object,
2334 softime 11418 'object_id' => $object_id,
2335 softime 15650 'external_uid' => $external_uid,
2336 softime 9973 'dossier' => $this->getVal('dossier'),
2337 softime 10808 'category' => $this->getVal('category'),
2338 softime 9973 );
2339     $add = $inst_lien->ajouter($valF);
2340     $message_class = "valid";
2341     $message = $inst_lien->msg;
2342     if ($add === false) {
2343     $this->addToLog($inst_lien->msg, DEBUG_MODE);
2344     $message_class = "error";
2345     $message = sprintf(
2346     '%s %s',
2347     __("Impossible de mettre à jour le lien entre l'identifiant interne et l'identifiant de l'application externe."),
2348     __('Veuillez contacter votre administrateur.')
2349 softime 9950 );
2350     }
2351 softime 9973 $this->f->displayMessage($message_class, $message);
2352 softime 9950 }
2353 gmalvolti 9840 }
2354 gmalvolti 9721 }
2355     }
2356    
2357 gmalvolti 9765 function post_add_task() {
2358 mbroquet 9776 // TODO Tester de remplacer la ligne de json_payload par un $_POST
2359 gmalvolti 9765 $result = $this->add_task(array(
2360     'val' => array(
2361     'stream' => 'input',
2362 softime 14064 'json_payload' => html_entity_decode($this->f->get_submitted_post_value('json_payload'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401),
2363 gmalvolti 9765 'type' => $this->f->get_submitted_post_value('type'),
2364 softime 10808 'category' => $this->f->get_submitted_post_value('category'),
2365 gmalvolti 9765 )
2366     ));
2367 mbideau 9955 $message = sprintf(
2368     __("Tâche %s ajoutée avec succès"),
2369     $this->getVal($this->clePrimaire)).
2370     '<br/><br/>'.
2371     $this->msg;
2372 gmalvolti 9751 $message_class = "valid";
2373     if ($result === false){
2374     $this->addToLog($this->msg, DEBUG_MODE);
2375     $message_class = "error";
2376     $message = sprintf(
2377     '%s %s',
2378     __('Impossible d\'ajouter la tâche.'),
2379     __('Veuillez contacter votre administrateur.')
2380 gmalvolti 9746 );
2381     }
2382 gmalvolti 9751 $this->f->displayMessage($message_class, $message);
2383 gmalvolti 9721 }
2384    
2385 gmalvolti 9604 function setLayout(&$form, $maj) {
2386 softime 12433 //
2387     $form->setBloc('json_payload', 'D', '', 'col_6');
2388 softime 13528 $fieldset_title_payload = __("json_payload (calculée)");
2389     if ($this->getVal('json_payload') !== "{}") {
2390     $fieldset_title_payload = __("json_payload");
2391     }
2392     $form->setFieldset('json_payload', 'DF', $fieldset_title_payload, "collapsible, startClosed");
2393 softime 12433 $form->setBloc('json_payload', 'F');
2394     $form->setBloc('timestamp_log', 'DF', __("historique"), 'col_9 timestamp_log_jsontotab');
2395 gmalvolti 9604 }
2396    
2397 softime 9950 /**
2398 softime 11585 * Récupère le nom de l'objet à mentionner dans la table lien_id_interne_uid_externe
2399     * en fonction du type et du stream de la tâche.
2400     *
2401     * @param string $type Type de la tâche
2402     * @param string $stream Stream de la tâche
2403     *
2404     * @return array
2405 softime 9950 */
2406 softime 10032 function get_objects_by_task_type($type, $stream = 'all') {
2407 softime 9950 $objects = array();
2408 softime 10356 if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2409 softime 9950 $objects = array('dossier_autorisation', );
2410     }
2411     if (in_array($type, array('creation_DI', 'depot_DI', 'notification_DI', 'qualification_DI', )) === true) {
2412     $objects = array('dossier', );
2413     }
2414     if (in_array($type, array('create_DI_for_consultation', )) === true) {
2415     $objects = array('dossier', 'dossier_consultation', );
2416     }
2417 gmalvolti 10317 if (in_array($type, array('create_DI', )) === true
2418     && $stream === 'input') {
2419 softime 10808 $objects = array('dossier', 'dossier_autorisation', 'demande', );
2420 gmalvolti 10317 }
2421 softime 14064 if (in_array($type, array(
2422     'decision_DI',
2423     'incompletude_DI',
2424     'completude_DI',
2425     'lettre_incompletude',
2426     'lettre_majoration'
2427     )) === true) {
2428 softime 9950 $objects = array('instruction', );
2429     }
2430 softime 11585 if (in_array($type, array('envoi_CL', )) === true) {
2431     $objects = array('instruction_action_cl', );
2432     }
2433 softime 10032 if (in_array($type, array('pec_metier_consultation', )) === true
2434     && $stream === 'output') {
2435 softime 9950 $objects = array('pec_dossier_consultation', );
2436     }
2437 softime 10032 if (in_array($type, array('avis_consultation', )) === true
2438     && $stream === 'output') {
2439 softime 9950 $objects = array('avis_dossier_consultation', );
2440     }
2441 softime 10869 if (in_array($type, array('prescription', )) === true
2442     && $stream === 'output') {
2443     $objects = array('prescription', );
2444     }
2445 softime 9950 if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2446     $objects = array('piece', );
2447     }
2448 softime 10032 if (in_array($type, array('creation_consultation', )) === true) {
2449     $objects = array('consultation', );
2450     }
2451 softime 10043 if (in_array($type, array('pec_metier_consultation', )) === true
2452 softime 10032 && $stream === 'input') {
2453 softime 10043 $objects = array('pec_metier_consultation', );
2454 softime 10032 }
2455 softime 10043 if (in_array($type, array('avis_consultation', )) === true
2456     && $stream === 'input') {
2457     $objects = array('avis_consultation', );
2458     }
2459 cgarcin 10362 if (in_array($type, array('create_message', )) === true
2460     && $stream === 'input') {
2461     $objects = array('dossier_message', );
2462     }
2463 softime 11585 if (in_array(
2464     $type,
2465     array(
2466     'notification_recepisse',
2467     'notification_instruction',
2468     'notification_decision',
2469     'notification_service_consulte',
2470     'notification_tiers_consulte',
2471 softime 15037 'notification_signataire',
2472 softime 11585 )
2473     ) === true) {
2474 softime 11418 $objects = array('instruction_notification', 'demande', );
2475 softime 10808 }
2476 softime 9950 return $objects;
2477     }
2478    
2479 softime 11228 /**
2480     * Récupère les tables auxquelles pourrait être rattaché l'objet lié à la tâche,
2481     * par rapport à son type.
2482     *
2483     * @param string $type Type de la tâche
2484     * @param string $stream input ou output
2485     * @return array
2486     */
2487     function get_tables_by_task_type($type, $stream = 'all') {
2488     $tables = array();
2489     if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2490     $tables = array('dossier_autorisation', );
2491     }
2492     if (in_array($type, array('creation_DI', 'depot_DI', )) === true) {
2493     $tables = array('dossier', );
2494     }
2495     if (in_array($type, array('qualification_DI', )) === true) {
2496 softime 11585 $tables = array('instruction', 'dossier', );
2497 softime 11228 }
2498     if (in_array($type, array('create_DI_for_consultation', )) === true) {
2499     $tables = array('dossier', );
2500     }
2501     if (in_array($type, array('create_DI', )) === true
2502     && $stream === 'input') {
2503     $tables = array('dossier', 'dossier_autorisation', 'demande', );
2504     }
2505 softime 14064 if (in_array($type, array(
2506     'decision_DI',
2507     'incompletude_DI',
2508     'completude_DI',
2509     'lettre_incompletude',
2510     'lettre_majoration'
2511     )) === true) {
2512 softime 11228 $tables = array('instruction', );
2513     }
2514 softime 14542 if (in_array($type, array('envoi_CL', )) === true) {
2515     $objects = array('instruction', );
2516     }
2517 softime 11228 if (in_array($type, array('pec_metier_consultation', )) === true
2518     && $stream === 'output') {
2519     $tables = array('instruction', );
2520     }
2521     if (in_array($type, array('avis_consultation', )) === true
2522     && $stream === 'output') {
2523     $tables = array('instruction', );
2524     }
2525     if (in_array($type, array('prescription', )) === true
2526     && $stream === 'output') {
2527     $tables = array('instruction', );
2528     }
2529     if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2530     $tables = array('document_numerise', );
2531     }
2532     if (in_array($type, array('creation_consultation', )) === true) {
2533     $tables = array('consultation', );
2534     }
2535     if (in_array($type, array('pec_metier_consultation', )) === true
2536     && $stream === 'input') {
2537     $tables = array('consultation', );
2538     }
2539     if (in_array($type, array('avis_consultation', )) === true
2540     && $stream === 'input') {
2541     $tables = array('consultation', );
2542     }
2543     if (in_array($type, array('create_message', )) === true
2544     && $stream === 'input') {
2545     $tables = array('dossier_message', );
2546     }
2547 softime 11585 if (in_array(
2548     $type,
2549     array(
2550     'notification_recepisse',
2551     'notification_instruction',
2552     'notification_decision',
2553     'notification_service_consulte',
2554 softime 15037 'notification_tiers_consulte',
2555     'notification_signataire'
2556 softime 11585 )
2557     ) === true) {
2558 softime 11228 $tables = array('instruction_notification', );
2559     }
2560     return $tables;
2561     }
2562    
2563 softime 14064 /**
2564     * Vérifie si l'objet référencé par la tâche existe en base de données.
2565     *
2566     * Récupère la liste des tables de référence associé à la tâche à partir
2567     * du type de tâche et de son flux (input ou output).
2568     * Pour chaque table potentiellement référencé par la tâche on essaye d'instancier
2569     * l'objet correspondant à partir de l'identifiant de l'objet de référence de la tâche.
2570     * Si l'élément instancié existe renvoie true sinon renvoie false.
2571     *
2572     * @param string|integer $taskObjectId : identifiant de l'objet de référence de la tâche
2573     * @param string $taskType : type de la tâche
2574     * @param string $taskStream : flux entrant (output - valeur par défaut) ou sortant (input)
2575     * @return boolean
2576     */
2577     protected function does_referenced_object_exist($taskObjectId, string $taskType, string $taskStream = 'output') {
2578     $refTables = $this->get_tables_by_task_type($taskType, $taskStream);
2579 softime 14542 if (empty($refTables) === true) {
2580     $this->f->addToLog(
2581     sprintf(
2582     __("Impossible de vérifier si l'objet de référence existe, car le type de task '%s' n'a pas de correspondance avec une table dans la méthode %s."),
2583     $taskType,
2584     "get_tables_by_task_type()"
2585     ),
2586     DEBUG_MODE
2587     );
2588     return true;
2589     }
2590 softime 14064 foreach ($refTables as $table) {
2591     $inst = $this->f->get_inst__om_dbform(array(
2592     'obj' => $table,
2593     'idx' => $taskObjectId
2594     ));
2595     if ($inst->exists() === true) {
2596     return true;
2597     }
2598     }
2599     return false;
2600     }
2601    
2602 softime 9293 }

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26