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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15835 - (hide annotations)
Thu Oct 5 12:46:12 2023 UTC (15 months, 3 weeks ago) by softime
File size: 118771 byte(s)
chore(branch): fusion de la branche d'intégration 6.1.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     task.object_id,
1417     task.dossier,
1418     task.stream,
1419     task.category,
1420     task.creation_date,
1421     task.creation_time,
1422     task.last_modification_date,
1423     task.last_modification_time,
1424     task.comment
1425 softime 9298 FROM %1$stask
1426 softime 12124 LEFT JOIN %1$slien_id_interne_uid_externe
1427     ON task.object_id = lien_id_interne_uid_externe.object_id
1428     AND task.category = lien_id_interne_uid_externe.category
1429 softime 9304 %2$s
1430 softime 9481 ORDER BY task ASC
1431 softime 9298 ',
1432 softime 9304 DB_PREFIXE,
1433     $where
1434 softime 9298 );
1435 softime 13137 $res = $this->f->get_all_results_from_db_query(
1436     $query,
1437     array(
1438     "origin" => __METHOD__,
1439     "force_return" => true,
1440     )
1441     );
1442 softime 9298 if ($res['code'] === 'KO') {
1443     return false;
1444     }
1445     $list_tasks = array();
1446     foreach ($res['result'] as $task) {
1447 softime 9950 if ($task['type'] === 'ajout_piece') {
1448 softime 9490 $val_dn = $this->get_document_numerise_data($task['object_id']);
1449     }
1450 softime 9872 if ($task['stream'] === 'output') {
1451 softime 11876 $task['external_uids'] = array_merge(
1452     $this->get_all_external_uids($task['dossier'], array(), $category !== null ? $category : $task['category']),
1453     $this->get_all_external_uids($task['object_id'], array(), $category !== null ? $category : $task['category'])
1454     );
1455 softime 9872 }
1456 softime 9298 $list_tasks[$task['task']] = $task;
1457     }
1458 softime 12124 echo(json_encode($list_tasks));
1459 softime 9298 }
1460    
1461 softime 9395 protected function get_dossier_data(string $dossier) {
1462     $val_di = array();
1463     $inst_di = $this->f->get_inst__om_dbform(array(
1464     "obj" => "dossier",
1465     "idx" => $dossier,
1466     ));
1467 softime 11228 if (empty($inst_di->val) === true) {
1468     return $val_di;
1469     }
1470 softime 9404 $val_di = $inst_di->get_json_data();
1471 softime 9396 if ($val_di['dossier_instruction_type_code'] === 'T') {
1472     $val_di['date_decision_transfert'] = $val_di['date_decision'];
1473     }
1474 softime 9395 unset($val_di['initial_dt']);
1475     unset($val_di['log_instructions']);
1476     return $val_di;
1477     }
1478    
1479     protected function get_dossier_autorisation_data(string $da) {
1480     $val_da = array();
1481     $inst_da = $this->f->get_inst__om_dbform(array(
1482     "obj" => "dossier_autorisation",
1483     "idx" => $da,
1484     ));
1485 softime 9404 $val_da = $inst_da->get_json_data();
1486 softime 9395 return $val_da;
1487     }
1488    
1489     protected function get_donnees_techniques_data(string $fk_idx, string $fk_field) {
1490     $val_dt = array();
1491     $inst_dt = $this->f->get_inst__by_other_idx(array(
1492     "obj" => "donnees_techniques",
1493     "fk_field" => $fk_field,
1494     "fk_idx" => $fk_idx,
1495     ));
1496     $val_dt = array(
1497     'donnees_techniques' => $inst_dt->getVal($inst_dt->clePrimaire),
1498     'cerfa' => $inst_dt->getVal('cerfa'),
1499     );
1500     $val_dt = array_merge($val_dt, $inst_dt->get_donnees_techniques_applicables());
1501 softime 9396 if (isset($val_dt['am_exist_date']) === true) {
1502     $val_dt['am_exist_date_num'] = '';
1503     if (is_numeric($val_dt['am_exist_date']) === true) {
1504     $val_dt['am_exist_date_num'] = $val_dt['am_exist_date'];
1505     }
1506     }
1507 softime 9403 // Correspond à la nomenclature de Plat'AU STATUT_INFO
1508     $val_dt['tax_statut_info'] = 'Déclaré';
1509 softime 9407 //
1510     if ($inst_dt->is_tab_surf_ssdest_enabled() === true) {
1511     $fields_tab_surf_dest = $inst_dt->get_fields_tab_surf_dest();
1512     foreach ($fields_tab_surf_dest as $field) {
1513     if (isset($val_dt[$field]) === true) {
1514     unset($val_dt[$field]);
1515     }
1516     }
1517     } else {
1518     $fields_tab_surf_ssdest = $inst_dt->get_fields_tab_surf_ssdest();
1519     foreach ($fields_tab_surf_ssdest as $field) {
1520     if (isset($val_dt[$field]) === true) {
1521     unset($val_dt[$field]);
1522     }
1523     }
1524     }
1525 softime 9409 // Correspond à la nouvelle ligne CERFA v7 dans le DENSI imposition 1.2.3
1526 softime 9408 if (isset($val_dt['tax_su_non_habit_surf2']) === true
1527 softime 9412 && isset($val_dt['tax_su_non_habit_surf3']) === true
1528     && (($val_dt['tax_su_non_habit_surf2'] !== null
1529     && $val_dt['tax_su_non_habit_surf2'] !== '')
1530     || ($val_dt['tax_su_non_habit_surf3'] !== null
1531     && $val_dt['tax_su_non_habit_surf3'] !== ''))) {
1532 softime 9408 //
1533     $val_dt['tax_su_non_habit_surf8'] = intval($val_dt['tax_su_non_habit_surf2']) + intval($val_dt['tax_su_non_habit_surf3']);
1534     }
1535     if (isset($val_dt['tax_su_non_habit_surf_stat2']) === true
1536 softime 9412 && isset($val_dt['tax_su_non_habit_surf_stat3']) === true
1537     && (($val_dt['tax_su_non_habit_surf_stat2'] !== null
1538     && $val_dt['tax_su_non_habit_surf_stat2'] !== '')
1539     || ($val_dt['tax_su_non_habit_surf_stat3'] !== null
1540     && $val_dt['tax_su_non_habit_surf_stat3'] !== ''))) {
1541 softime 9408 //
1542     $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']);
1543     }
1544 softime 9409 // Cas particulier d'un projet réduit à l'extension d'une habitation existante
1545     $particular_case = false;
1546     $fields_tab_crea_loc_hab = $inst_dt->get_fields_tab_crea_loc_hab();
1547     foreach ($fields_tab_crea_loc_hab as $field) {
1548 softime 9438 if (isset($val_dt[$field]) === false
1549     || (isset($val_dt[$field]) === true
1550     && ($val_dt[$field] === null
1551     || $val_dt[$field] === ''))) {
1552 softime 9409 //
1553     $particular_case = true;
1554     }
1555     }
1556     if ($particular_case === true) {
1557     if (isset($val_dt['tax_ext_pret']) === true
1558     && $val_dt['tax_ext_pret'] === 'f') {
1559     //
1560 softime 14542 $val_dt['tax_su_princ_surf1'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';
1561     $val_dt['tax_su_princ_surf_stat1'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';
1562 softime 9409 }
1563     if (isset($val_dt['tax_ext_pret']) === true
1564     && $val_dt['tax_ext_pret'] === 't') {
1565     //
1566     if (isset($val_dt['tax_ext_desc']) === true) {
1567     if (preg_match('/[pP].*[lL].*[aA].*[iI]/', $val_dt['tax_ext_desc']) === 1
1568     || preg_match('/[lL].*[lL].*[tT].*[sS]/', $val_dt['tax_ext_desc']) === 1) {
1569     //
1570 softime 14542 $val_dt['tax_su_princ_surf2'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';
1571     $val_dt['tax_su_princ_surf_stat2'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';
1572 softime 9409 }
1573     // if (preg_match('/[pP].*[tT].*[zZ]/', $val_dt['tax_ext_desc']) === 1) {
1574     // $val_dt['tax_su_princ_surf4'] = $val_dt['tax_surf_tot_cstr'];
1575     // $val_dt['tax_su_princ_surf_stat4'] = $val_dt['tax_surf_loc_stat'];
1576     // }
1577     // if (preg_match('/[pP].*[lL].*[uU].*[sS]/', $val_dt['tax_ext_desc']) === 1
1578     // || preg_match('/[lL].*[eE].*[sS]/', $val_dt['tax_ext_desc']) === 1
1579     // || preg_match('/[pP].*[sS].*[lL].*[aA]/', $val_dt['tax_ext_desc']) === 1
1580     // || preg_match('/[pP].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1
1581     // || preg_match('/[lL].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1) {
1582     // //
1583     // $val_dt['tax_su_princ_surf3'] = $val_dt['tax_surf_tot_cstr'];
1584     // $val_dt['tax_su_princ_surf_stat3'] = $val_dt['tax_surf_loc_stat'];
1585     // }
1586     }
1587     }
1588     }
1589     // Cas particulier de la surface taxable démolie
1590     if (isset($val_dt['tax_surf_tot_demo']) === true
1591     && isset($val_dt['tax_surf_tax_demo']) === true
1592     && ($val_dt['tax_surf_tot_demo'] === null
1593     || $val_dt['tax_surf_tot_demo'] === '')) {
1594     //
1595     $val_dt['tax_surf_tot_demo'] = $val_dt['tax_surf_tax_demo'];
1596     }
1597 softime 9395 return $val_dt;
1598     }
1599    
1600 softime 9984 /**
1601     * Récupère la liste des objets distincts existants dans la table des liens
1602     * entre identifiants internes et identifiants externes.
1603     *
1604     * @return array
1605     */
1606     protected function get_list_distinct_objects_external_link() {
1607     $query = sprintf('
1608     SELECT
1609     DISTINCT(object)
1610     FROM %1$slien_id_interne_uid_externe
1611     ORDER BY object ASC
1612     ',
1613     DB_PREFIXE
1614     );
1615 softime 13137 $res = $this->f->get_all_results_from_db_query(
1616     $query,
1617     array(
1618     "origin" => __METHOD__,
1619     "force_return" => true,
1620     )
1621     );
1622 softime 9984 if ($res['code'] === 'KO') {
1623     return array();
1624     }
1625     $result = array();
1626     foreach ($res['result'] as $object) {
1627     $result[] = $object['object'];
1628     }
1629     return $result;
1630     }
1631    
1632 softime 13137 protected function get_external_uid($fk_idx, string $fk_idx_2, $fk_idx_3 = PLATAU, $order_asc_desc = 'DESC') {
1633 softime 9404 $inst_external_uid = $this->f->get_inst__by_other_idx(array(
1634 softime 9395 "obj" => "lien_id_interne_uid_externe",
1635     "fk_field" => 'object_id',
1636     "fk_idx" => $fk_idx,
1637     "fk_field_2" => 'object',
1638     "fk_idx_2" => $fk_idx_2,
1639 softime 11876 "fk_field_3" => 'category',
1640     "fk_idx_3" => $fk_idx_3,
1641     "order_field" => 'lien_id_interne_uid_externe',
1642 softime 12124 "order_asc_desc" => $order_asc_desc,
1643 softime 9395 ));
1644 softime 9404 return $inst_external_uid->getVal('external_uid');
1645 softime 9395 }
1646    
1647 softime 13137 protected function get_all_external_uids($fk_idx, $link_objects = array(), $category=PLATAU) {
1648 softime 9984 if (count($link_objects) == 0) {
1649     $link_objects = $this->get_list_distinct_objects_external_link();
1650     }
1651 softime 9872 $val_external_uid = array();
1652     foreach ($link_objects as $link_object) {
1653 softime 11876 $external_uid = $this->get_external_uid($fk_idx, $link_object, $category);
1654 softime 9872 if ($external_uid !== '' && $external_uid !== null) {
1655     $val_external_uid[$link_object] = $external_uid;
1656     }
1657     }
1658     return $val_external_uid;
1659     }
1660    
1661 softime 11228 protected function get_demandeurs_data($dossier) {
1662 softime 9395 $val_demandeur = array();
1663 softime 11228 if ($dossier === null) {
1664     return $val_demandeur;
1665     }
1666 softime 9395 $inst_di = $this->f->get_inst__om_dbform(array(
1667     "obj" => "dossier",
1668     "idx" => $dossier,
1669     ));
1670     $list_demandeurs = $inst_di->get_demandeurs();
1671     foreach ($list_demandeurs as $demandeur) {
1672     $inst_demandeur = $this->f->get_inst__om_dbform(array(
1673     "obj" => "demandeur",
1674     "idx" => $demandeur['demandeur'],
1675 softime 9334 ));
1676 softime 9404 $val_demandeur[$demandeur['demandeur']] = $inst_demandeur->get_json_data();
1677 softime 9395 $val_demandeur[$demandeur['demandeur']]['petitionnaire_principal'] = $demandeur['petitionnaire_principal'];
1678 softime 9334 }
1679 softime 9395 return $val_demandeur;
1680     }
1681    
1682     protected function get_architecte_data($architecte = null) {
1683 softime 9408 $val_architecte = null;
1684 softime 9395 if ($architecte !== null
1685     && $architecte !== '') {
1686 softime 9334 //
1687 softime 9395 $inst_architecte = $this->f->get_inst__om_dbform(array(
1688     "obj" => "architecte",
1689     "idx" => $architecte,
1690 softime 9334 ));
1691 softime 9404 $val_architecte = $inst_architecte->get_json_data();
1692 softime 9334 }
1693 softime 9395 return $val_architecte;
1694     }
1695 softime 9334
1696 softime 11228 protected function get_instruction_data($dossier, $type = 'decision', $extra_params = array()) {
1697 softime 9414 $val_instruction = null;
1698 softime 11228 if ($dossier === null) {
1699     return $val_instruction;
1700     }
1701 softime 9416 $instruction_with_doc = null;
1702 softime 9395 $inst_di = $this->f->get_inst__om_dbform(array(
1703     "obj" => "dossier",
1704     "idx" => $dossier,
1705     ));
1706 softime 9457 $idx = null;
1707     if ($type === 'decision') {
1708     $idx = $inst_di->get_last_instruction_decision();
1709     }
1710     if ($type === 'incompletude') {
1711     $idx = $inst_di->get_last_instruction_incompletude();
1712     }
1713 softime 9838 // XXX Permet de récupérer l'instruction par son identifiant
1714     if ($type === 'with-id') {
1715     $idx = $extra_params['with-id'];
1716     }
1717 softime 9395 $inst_instruction = $this->f->get_inst__om_dbform(array(
1718     "obj" => "instruction",
1719 softime 9457 "idx" => $idx,
1720 softime 9395 ));
1721     if (count($inst_instruction->val) > 0) {
1722 softime 9416 $val_instruction = array();
1723     $instruction_data = $inst_instruction->get_json_data();
1724     $val_instruction = $this->sort_instruction_data($instruction_data, $val_instruction);
1725     if ($instruction_data['om_fichier_instruction'] !== null
1726     && $instruction_data['om_fichier_instruction'] !== '') {
1727     //
1728     $instruction_with_doc = $inst_instruction->getVal($inst_instruction->clePrimaire);
1729     }
1730 softime 9414 $inst_ev = $this->f->get_inst__om_dbform(array(
1731     "obj" => "evenement",
1732     "idx" => $inst_instruction->getVal('evenement'),
1733     ));
1734     if ($inst_ev->getVal('retour') === 't') {
1735     $instructions_related = $inst_instruction->get_related_instructions();
1736     foreach ($instructions_related as $instruction) {
1737 softime 9416 if ($instruction !== null && $instruction !== '') {
1738     $inst_related_instruction = $this->f->get_inst__om_dbform(array(
1739     "obj" => "instruction",
1740     "idx" => $instruction,
1741     ));
1742     $instruction_data = $inst_related_instruction->get_json_data();
1743     $val_instruction = $this->sort_instruction_data($instruction_data, $val_instruction);
1744     if ($instruction_data['om_fichier_instruction'] !== null
1745     && $instruction_data['om_fichier_instruction'] !== '') {
1746     //
1747     $instruction_with_doc = $inst_related_instruction->getVal($inst_related_instruction->clePrimaire);
1748     }
1749     }
1750 softime 9414 }
1751     }
1752 softime 9416 if ($instruction_with_doc !== null) {
1753     //
1754 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);
1755 softime 9416 }
1756 softime 9384 }
1757 softime 9395 return $val_instruction;
1758     }
1759 softime 9334
1760 softime 12433
1761 softime 10808 /**
1762 softime 12433 * Récupère les informations pour les notifications ayant plusieurs annexe
1763 softime 10808 */
1764     protected function get_instruction_notification_data($category, $type = '', $extra_params = array()) {
1765 softime 11228 $val_in = null;
1766 softime 10808
1767     $idx = null;
1768     if ($type === 'with-id') {
1769     $idx = $extra_params['with-id'];
1770     }
1771    
1772 softime 12433 // Récupération du type de notification. Le type est nécessaire pour récupérer
1773     // le message et le titre de notification.
1774     $typeNotification = $this->getVal('type');
1775     if (isset($this->valF['type'])) {
1776     $typeNotification = $this->valF['type'];
1777 softime 11057 }
1778 softime 10808
1779 softime 11585 // récupére les données à intégrer à la payload
1780     $inst_in = $this->f->get_inst__om_dbform(array(
1781     "obj" => "instruction_notification",
1782     "idx" => $idx,
1783     ));
1784     if (count($inst_in->val) > 0) {
1785     $val_in = $inst_in->get_json_data();
1786    
1787     $val_in['parametre_courriel_type_titre'] = '';
1788     $val_in['parametre_courriel_type_message'] = '';
1789     // Récupération du message et du titre
1790     if ($category === 'mail') {
1791     $inst_instruction = $this->f->get_inst__om_dbform(array(
1792     "obj" => "instruction",
1793     "idx" => $inst_in->getVal('instruction'),
1794     ));
1795     $collectivite_id = $inst_instruction->get_dossier_instruction_om_collectivite($inst_instruction->getVal('dossier'));
1796 softime 12433 $phrase_type_notification = $this->f->get_notification_parametre_courriel_type($collectivite_id, $typeNotification);
1797 softime 11585 $val_in['parametre_courriel_type_titre'] = $phrase_type_notification['parametre_courriel_type_titre'];
1798     $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];
1799     }
1800    
1801 softime 15037 if ($typeNotification == 'notification_signataire') {
1802     $val_in['lien_page_signature'] = $inst_in->getLienPageSignature($inst_instruction);
1803     }
1804     else {
1805     // Récupération des liens vers les documents et des id et type des annexes
1806     $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire), $category);
1807     $cle = $category == PORTAL ? 'path' : 'lien_telechargement_document';
1808     $val_in[$cle] = $infoDocNotif['document']['path'];
1809     $val_in['annexes'] = $infoDocNotif['annexes'];
1810     }
1811 softime 11585 }
1812     return $val_in;
1813     }
1814    
1815 softime 14064 /**
1816     * Récupère les informations concernant la lettre au pétitionnaire.
1817     *
1818     * @param string identifiant du dossier
1819     * @param string type de tâche
1820     * @param array paramètre supplémentaire permettant de récupérer les informations
1821     *
1822     * @return array information concernant la lettre au pétitionnaire
1823     */
1824     protected function get_lettre_petitionnaire_data($dossier, $type, $extra_params = array()) {
1825     // Si la date limite de notification n'a pas été dépassé le type de lettre est 1
1826     // Si la date a été dépassé et qu'il s'agit d'une demande de pièce le type est 3
1827     // Si la date a été dépassé et qu'il s'agit d'une prolongation le type est 4
1828     // Le type de document dépend du type de pièce
1829     $nomTypeLettre = '';
1830     $nomTypeDocument = '';
1831     if ($type === 'lettre_incompletude') {
1832     $nomTypeLettre = '3';
1833     $nomTypeDocument = '4';
1834     } elseif ($type === 'lettre_majoration') {
1835     $nomTypeLettre = '4';
1836     $nomTypeDocument = '6';
1837     }
1838    
1839     $inst_di = $this->f->get_inst__om_dbform(array(
1840     "obj" => "dossier",
1841     "idx" => $dossier,
1842     ));
1843     $date_limite_notification = DateTime::createFromFormat('Y-m-d', $inst_di->getVal('date_notification_delai'));
1844     $aujourdhui = new DateTime();
1845     if (! $date_limite_notification instanceof DateTime) {
1846     $nomTypeLettre = '';
1847     $nomTypeDocument = '';
1848     } elseif ($aujourdhui < $date_limite_notification) {
1849     $nomTypeLettre = '1';
1850     $nomTypeDocument = '3';
1851     }
1852    
1853     return array(
1854     'nomEtatLettre' => '3',
1855     'nomModaliteNotifMetier' => '4',
1856     'nomTypeLettre' => $nomTypeLettre,
1857     'nomTypeDocument' => $nomTypeDocument
1858     );
1859     }
1860    
1861 softime 9416 protected function sort_instruction_data(array $values, array $res) {
1862     $fields = array(
1863 softime 9838 "date_evenement",
1864 softime 9416 "date_envoi_signature",
1865     "date_retour_signature",
1866     "date_envoi_rar",
1867     "date_retour_rar",
1868     "date_envoi_controle_legalite",
1869     "date_retour_controle_legalite",
1870     "signataire_arrete",
1871     "om_fichier_instruction",
1872     "tacite",
1873 softime 9623 "lettretype",
1874 softime 10869 "commentaire",
1875     "complement_om_html",
1876 softime 9416 );
1877     foreach ($values as $key => $value) {
1878     if (in_array($key, $fields) === true) {
1879     if (array_key_exists($key, $res) === false
1880     && $value !== null
1881     && $value !== '') {
1882     //
1883     $res[$key] = $value;
1884     } elseif ($key === 'tacite'
1885     && $value === 't') {
1886     //
1887     $res[$key] = $value;
1888     }
1889     }
1890     }
1891     return $res;
1892     }
1893    
1894 softime 10968 /**
1895     * Permet de définir si l'instruction passée en paramètre est une instruction
1896     * récépissé d'une demande et si la demande en question a générée un dossier d'instruction.
1897     *
1898     * @param integer $instruction Identifiant de l'instruction
1899     * @return boolean
1900     */
1901     protected function is_demande_instruction_recepisse_without_dossier($instruction) {
1902 softime 11228 if ($instruction === null) {
1903     return false;
1904     }
1905 softime 13137 $qres = $this->f->get_one_result_from_db_query(
1906     sprintf(
1907     'SELECT
1908     demande_type.dossier_instruction_type
1909     FROM
1910     %1$sdemande
1911     INNER JOIN %1$sdemande_type
1912     ON demande.demande_type = demande_type.demande_type
1913     WHERE
1914     demande.instruction_recepisse = %2$s',
1915     DB_PREFIXE,
1916     intval($instruction)
1917     ),
1918     array(
1919     "origin" => __METHOD__,
1920     "force_return" => true,
1921     )
1922 softime 10968 );
1923 softime 13137 if ($qres["code"] !== "OK") {
1924 softime 10968 return null;
1925     }
1926 softime 13137 if ($qres["result"] === "") {
1927 softime 10968 return true;
1928     }
1929     return false;
1930     }
1931    
1932 softime 9395 protected function get_document_numerise_data(string $dn) {
1933     $val_dn = array();
1934     $inst_dn = $this->f->get_inst__om_dbform(array(
1935     "obj" => "document_numerise",
1936     "idx" => $dn,
1937     ));
1938 softime 9404 $val_dn = $inst_dn->get_json_data();
1939 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'));
1940 softime 9403 // Correspond à la nomenclature Plat'AU NATURE_PIECE
1941 softime 9457 $val_dn['nature'] = $val_dn['document_numerise_nature_libelle'];
1942 softime 9395 return $val_dn;
1943     }
1944    
1945 softime 9396 protected function get_parcelles_data(string $object, string $idx) {
1946     $val_dp = array();
1947     $inst_di = $this->f->get_inst__om_dbform(array(
1948     "obj" => $object,
1949     "idx" => $idx,
1950     ));
1951     $list_parcelles = $inst_di->get_parcelles();
1952     $no_ordre = 1;
1953     foreach ($list_parcelles as $parcelle) {
1954     $val_dp[$parcelle[$object.'_parcelle']] = array(
1955     $object.'_parcelle' => $parcelle[$object.'_parcelle'],
1956     'libelle' => $parcelle['libelle'],
1957     'no_ordre' => $no_ordre,
1958     );
1959     $no_ordre++;
1960     }
1961     return $val_dp;
1962     }
1963    
1964 softime 9853 protected function get_avis_decision_data(string $dossier) {
1965     $inst_di = $this->f->get_inst__om_dbform(array(
1966     "obj" => "dossier",
1967     "idx" => $dossier,
1968     ));
1969     $ad = $inst_di->getVal('avis_decision');
1970     $val_ad = array();
1971 softime 14064 if ($ad !== null && trim($ad) !== '') {
1972 softime 10104 $inst_ad = $this->f->get_inst__om_dbform(array(
1973     "obj" => "avis_decision",
1974     "idx" => $ad,
1975     ));
1976     $val_ad = $inst_ad->get_json_data();
1977     $val_ad['txAvis'] = "Voir document joint";
1978     if (isset($val_ad['tacite']) === true
1979     && $val_ad['tacite'] === 't') {
1980     //
1981     $val_ad['txAvis'] = "Sans objet";
1982     }
1983 softime 9871 }
1984 softime 9853 return $val_ad;
1985     }
1986    
1987     protected function get_signataire_arrete_data(string $sa) {
1988     $inst_sa = $this->f->get_inst__om_dbform(array(
1989     "obj" => "signataire_arrete",
1990     "idx" => $sa,
1991     ));
1992     $val_sa = array_combine($inst_sa->champs, $inst_sa->val);
1993     foreach ($val_sa as $key => $value) {
1994     $val_sa[$key] = strip_tags($value);
1995     }
1996     return $val_sa;
1997     }
1998    
1999 softime 10032 // XXX WIP
2000     protected function get_consultation_data(string $consultation) {
2001     $val_consultation = array();
2002     $inst_consultation = $this->f->get_inst__om_dbform(array(
2003     "obj" => "consultation",
2004     "idx" => $consultation,
2005     ));
2006     $val_consultation = $inst_consultation->get_json_data();
2007 softime 10133 if (isset($val_consultation['fichier']) === true
2008     && $val_consultation['fichier'] !== '') {
2009     //
2010     $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'));
2011     }
2012     if (isset($val_consultation['om_fichier_consultation']) === true
2013     && $val_consultation['om_fichier_consultation'] !== '') {
2014     //
2015     $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'));
2016     }
2017 softime 10032 return $val_consultation;
2018     }
2019    
2020     // XXX WIP
2021     protected function get_service_data(string $service) {
2022     $val_service = array();
2023     $inst_service = $this->f->get_inst__om_dbform(array(
2024     "obj" => "service",
2025     "idx" => $service,
2026     ));
2027     $val_service = $inst_service->get_json_data();
2028     return $val_service;
2029     }
2030    
2031 gmalvolti 9604 protected function view_form_json($in_field = false) {
2032 softime 9395 //
2033 softime 13528 $check_state = isset($this->valF['state']) === true ? $this->valF['state'] : $this->getVal('state');
2034     if ($check_state !== self::STATUS_CANCELED) {
2035 softime 9402 // Liste des valeurs à afficher
2036     $val = array();
2037 softime 9395 //
2038 softime 9402 $val_task = array_combine($this->champs, $this->val);
2039 softime 9405 foreach ($val_task as $key => $value) {
2040     $val_task[$key] = strip_tags($value);
2041     }
2042 softime 14064
2043     // Vérifie pour les tâches dont l'affichage de la payload est calculée si l'objet
2044     // de référence de la tâche existe.
2045     $objectRefExist = true;
2046     if ($val_task['stream'] === 'output'
2047     && (empty($val_task['json_payload']) || $val_task['json_payload'] === '{}')) {
2048     $objectRefExist = $this->does_referenced_object_exist(
2049     $val_task['object_id'],
2050     $val_task['type']
2051     );
2052 softime 9402 }
2053 softime 14064
2054     // Si l'objet de référence n'existe pas log le numéro de la tâche concerné et
2055     // renvoie une payload contenant le message d'erreur.
2056     // Sinon constitue la payload du json.
2057     if (! $objectRefExist) {
2058     $this->f->addToLog(
2059     sprintf(
2060     __('Impossible de récupérer la payload car l\'objet de réference n\'existe pas pour la tâche : %s'),
2061     $val_task['task']
2062     ),
2063     DEBUG_MODE
2064     );
2065     $val = __('Impossible de recuperer la payload car l\'objet de reference n\'existe pas.');
2066     } else {
2067    
2068 softime 15835 // L'historique n'est pas nécessaire dans l'affichage en JSON
2069     if ($in_field === true) {
2070     $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);
2071     } else {
2072     unset($val_task['timestamp_log']);
2073     }
2074 softime 14064 unset($val_task['timestamp_log_hidden']);
2075     $val['task'] = $val_task;
2076 softime 9402 //
2077 softime 14064 if ($this->getVal('type') === 'creation_DA'
2078     || $this->getVal('type') === 'modification_DA') {
2079     //
2080     $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));
2081     $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');
2082     $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);
2083     $val_external_uid = array();
2084     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier_autorisation']['dossier_autorisation'], 'dossier_autorisation');
2085     $val['external_uids'] = $val_external_uid;
2086 softime 10869 }
2087 softime 14064 //
2088     if ($this->getVal('type') === 'creation_DI'
2089     || $this->getVal('type') === 'modification_DI'
2090     || $this->getVal('type') === 'depot_DI') {
2091     //
2092     $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));
2093     $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_instruction');
2094     $val['demandeur'] = $this->get_demandeurs_data($val['dossier']['dossier']);
2095     $architecte = isset($val['donnees_techniques']['architecte']) === true ? $val['donnees_techniques']['architecte'] : null;
2096     $val['architecte'] = $this->get_architecte_data($architecte);
2097     $val['dossier_parcelle'] = $this->get_parcelles_data('dossier', $val['dossier']['dossier']);
2098     $val_external_uid = array();
2099     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2100     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2101     $val['external_uids'] = $val_external_uid;
2102 softime 9853 }
2103 softime 10032 //
2104 softime 14064 if ($this->getVal('type') === 'qualification_DI') {
2105     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2106     $val_external_uid = array();
2107     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2108     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2109     $val['external_uids'] = $val_external_uid;
2110     }
2111 softime 11418 //
2112 softime 14064 if ($this->getVal('type') === 'ajout_piece') {
2113     $val['document_numerise'] = $this->get_document_numerise_data($this->getVal('object_id'));
2114     $val['dossier'] = $this->get_dossier_data($val['document_numerise']['dossier']);
2115     $val_external_uid = array();
2116     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2117     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2118     $val_external_uid['piece'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'piece');
2119     $val['external_uids'] = $val_external_uid;
2120 softime 11418 }
2121 softime 10808 //
2122 softime 14064 if ($this->getVal('type') === 'decision_DI') {
2123     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2124     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2125 softime 11585 $val['instruction']['final'] = 't';
2126 softime 14064 if (isset($val['instruction']['signataire_arrete']) === true) {
2127     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2128     }
2129     $val_external_uid = array();
2130     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2131     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2132     $val['external_uids'] = $val_external_uid;
2133 softime 11585 }
2134 softime 14064 //
2135     if ($this->getVal('type') === 'incompletude_DI') {
2136     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2137     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2138     $val_external_uid = array();
2139     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2140     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2141     $val['external_uids'] = $val_external_uid;
2142 softime 10869 }
2143 softime 14064 //
2144     if ($this->getVal('type') === 'completude_DI') {
2145     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2146     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2147     $val_external_uid = array();
2148     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2149     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2150     $val['external_uids'] = $val_external_uid;
2151     }
2152     //
2153     if ($this->getVal('type') === 'lettre_incompletude'
2154     || $this->getVal('type') === 'lettre_majoration') {
2155     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2156     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2157     $val['lettre_petitionnaire'] = $this->get_lettre_petitionnaire_data($val['dossier']['dossier'], $this->getVal('type'));
2158     $val_external_uid = array();
2159     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2160     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2161     $val['external_uids'] = $val_external_uid;
2162     }
2163     //
2164     if ($this->getVal('type') === 'pec_metier_consultation') {
2165     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2166     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2167     $val_external_uid = array();
2168     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2169     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2170     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2171     $val['external_uids'] = $val_external_uid;
2172     }
2173     //
2174     if ($this->getVal('type') === 'avis_consultation') {
2175     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2176     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2177     $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2178     if (isset($val['instruction']['signataire_arrete']) === true) {
2179     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2180     }
2181     $val_external_uid = array();
2182     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2183     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2184     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2185     $val_external_uid['avis_dossier_consultation'] = $this->get_external_uid($this->getVal('object_id'), 'avis_dossier_consultation');
2186     $val['external_uids'] = $val_external_uid;
2187     }
2188     // XXX WIP
2189     if ($this->getVal('type') === 'creation_consultation') {
2190     //
2191     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2192     $val['consultation'] = $this->get_consultation_data($this->getVal('object_id'));
2193     $val['service'] = $this->get_service_data($val['consultation']['service']);
2194     $val_external_uid = array();
2195     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2196     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2197     $val['external_uids'] = $val_external_uid;
2198     }
2199     //
2200     if ($this->getVal('type') === 'envoi_CL') {
2201     //
2202     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2203     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2204     $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($val['dossier']['dossier_autorisation']);
2205     $val_external_uid = array();
2206     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2207     $val_external_uid['dossier'] = $this->get_external_uid($this->getVal('dossier'), 'dossier');
2208     $val_external_uid['decision'] = $this->get_external_uid($this->getVal('object_id'), 'instruction');
2209     if ($val_external_uid['decision'] === '') {
2210     $inst_instruction = $this->f->get_inst__om_dbform(array(
2211     "obj" => "instruction",
2212     "idx" => $this->getVal('object_id'),
2213     ));
2214     $val_external_uid['decision'] = $this->get_external_uid($inst_instruction->get_related_instructions_next('retour_signature'), 'instruction');
2215     }
2216     $val['external_uids'] = $val_external_uid;
2217     }
2218     if ($this->getVal('type') === 'notification_instruction'
2219     || $this->getVal('type') === 'notification_recepisse'
2220     || $this->getVal('type') === 'notification_decision'
2221     || $this->getVal('type') === 'notification_service_consulte'
2222 softime 15037 || $this->getVal('type') === 'notification_tiers_consulte'
2223     || $this->getVal('type') === 'notification_signataire') {
2224 softime 14064 //
2225     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2226     $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;
2227     $val['demandeur'] = $this->get_demandeurs_data($dossier_id);
2228     $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));
2229     $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;
2230     $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;
2231     $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));
2232     // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une
2233     // demande dont le type ne génère pas de dossier
2234     if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {
2235     $val['instruction']['final'] = 't';
2236     }
2237     $val_external_uid = array();
2238     // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier
2239     $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');
2240     $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', PORTAL, 'ASC');
2241     $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', PORTAL);
2242     $val['external_uids'] = $val_external_uid;
2243     }
2244     //
2245     if ($this->getVal('type') === 'prescription') {
2246     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2247     $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2248     $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2249     if (isset($val['instruction']['signataire_arrete']) === true) {
2250     $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2251     }
2252     $val_external_uid = array();
2253     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');
2254     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');
2255     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');
2256     $val_external_uid['prescription'] = $this->get_external_uid($this->getVal('object_id'), 'prescription');
2257     $val['external_uids'] = $val_external_uid;
2258     }
2259 softime 10869 }
2260 softime 9402
2261 gmalvolti 9604 if ($in_field === true) {
2262 gmalvolti 9746 return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
2263 gmalvolti 9604 } else {
2264     // Liste des valeurs affichée en JSON
2265 softime 11057 echo(json_encode($val, JSON_UNESCAPED_SLASHES));
2266 gmalvolti 9604 }
2267 softime 9395 }
2268 softime 9293 }
2269 softime 9385
2270 gmalvolti 9765 function post_update_task() {
2271 gmalvolti 9721 // Mise à jour des valeurs
2272 softime 9973
2273     // Modification de l'état de la tâche
2274     if ($this->f->get_submitted_post_value('state') !== null) {
2275     $params = array(
2276     'val' => array(
2277     'state' => $this->f->get_submitted_post_value('state')
2278     ),
2279 gmalvolti 9721 );
2280 softime 14064 if ($this->f->get_submitted_post_value('comment') !== null) {
2281     $params['comment'] = $this->f->get_submitted_post_value('comment');
2282     }
2283 softime 9973 $update = $this->update_task($params);
2284     $message_class = "valid";
2285     $message = $this->msg;
2286     if ($update === false) {
2287     $this->addToLog($this->msg, DEBUG_MODE);
2288     $message_class = "error";
2289     $message = sprintf(
2290     '%s %s',
2291     __('Impossible de mettre à jour la tâche.'),
2292     __('Veuillez contacter votre administrateur.')
2293     );
2294     }
2295     $this->f->displayMessage($message_class, $message);
2296 gmalvolti 9721 }
2297 softime 9950
2298 softime 9973 // Sauvegarde de l'uid externe retourné
2299 softime 15650 $external_uid = $this->f->get_submitted_post_value('external_uid');
2300     if ($external_uid !== null) {
2301 softime 9950 //
2302 softime 10032 $objects = $this->get_objects_by_task_type($this->getVal('type'), $this->getVal('stream'));
2303 softime 15218 // Si l'identifiant externe contient le préfixe pour identifier les codes de suivi,
2304     // le seul objet concerné sera celui du code de suivi
2305 softime 15650 if (strpos($external_uid, self::CS_PREFIX) !== false) {
2306 softime 15218 $objects = array('code-suivi', );
2307 softime 15650 $external_uid = str_replace(self::CS_PREFIX, '', $external_uid);
2308 softime 15218 }
2309 softime 9973 foreach ($objects as $object) {
2310     $inst_lien = $this->f->get_inst__om_dbform(array(
2311     "obj" => "lien_id_interne_uid_externe",
2312     "idx" => ']',
2313     ));
2314 softime 11418 $object_id = $this->getVal('object_id');
2315 softime 15650 $is_exists = $inst_lien->is_exists($object, $object_id, $external_uid, $this->getVal('dossier'));
2316 softime 11418 // Dans le cas spécifique de la mise à jour d'une notification
2317     // et de la création d'une liaison d'identifiant pour l'objet demande,
2318     // l'identifiant de l'objet n'est plus celui de la notification
2319     // d'instruction mais celui du dossier d'instruction
2320     if ($object === 'demande'
2321     && ($this->getVal('type') === 'notification_recepisse'
2322     || $this->getVal('type') === 'notification_instruction'
2323 softime 11585 || $this->getVal('type') === 'notification_decision'
2324     || $this->getVal('type') === 'notification_service_consulte'
2325 softime 15037 || $this->getVal('type') === 'notification_tiers_consulte'
2326     || $this->getVal('type') === 'notification_signataire')) {
2327 softime 11418 //
2328     $object_id = $this->getVal('dossier');
2329 softime 12124 // Il ne doit y avoir qu'une liaison entre le numéro du dossier interne et un uid externe de "demande"
2330     $is_exists = $inst_lien->is_exists($object, $object_id, null, $this->getVal('dossier'));
2331 softime 11418 }
2332 softime 12124 if ($is_exists === false) {
2333 softime 9973 $valF = array(
2334     'lien_id_interne_uid_externe' => '',
2335     'object' => $object,
2336 softime 11418 'object_id' => $object_id,
2337 softime 15650 'external_uid' => $external_uid,
2338 softime 9973 'dossier' => $this->getVal('dossier'),
2339 softime 10808 'category' => $this->getVal('category'),
2340 softime 9973 );
2341     $add = $inst_lien->ajouter($valF);
2342     $message_class = "valid";
2343     $message = $inst_lien->msg;
2344     if ($add === false) {
2345     $this->addToLog($inst_lien->msg, DEBUG_MODE);
2346     $message_class = "error";
2347     $message = sprintf(
2348     '%s %s',
2349     __("Impossible de mettre à jour le lien entre l'identifiant interne et l'identifiant de l'application externe."),
2350     __('Veuillez contacter votre administrateur.')
2351 softime 9950 );
2352     }
2353 softime 9973 $this->f->displayMessage($message_class, $message);
2354 softime 9950 }
2355 gmalvolti 9840 }
2356 gmalvolti 9721 }
2357     }
2358    
2359 gmalvolti 9765 function post_add_task() {
2360 mbroquet 9776 // TODO Tester de remplacer la ligne de json_payload par un $_POST
2361 gmalvolti 9765 $result = $this->add_task(array(
2362     'val' => array(
2363     'stream' => 'input',
2364 softime 14064 'json_payload' => html_entity_decode($this->f->get_submitted_post_value('json_payload'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401),
2365 gmalvolti 9765 'type' => $this->f->get_submitted_post_value('type'),
2366 softime 10808 'category' => $this->f->get_submitted_post_value('category'),
2367 gmalvolti 9765 )
2368     ));
2369 mbideau 9955 $message = sprintf(
2370     __("Tâche %s ajoutée avec succès"),
2371     $this->getVal($this->clePrimaire)).
2372     '<br/><br/>'.
2373     $this->msg;
2374 gmalvolti 9751 $message_class = "valid";
2375     if ($result === false){
2376     $this->addToLog($this->msg, DEBUG_MODE);
2377     $message_class = "error";
2378     $message = sprintf(
2379     '%s %s',
2380     __('Impossible d\'ajouter la tâche.'),
2381     __('Veuillez contacter votre administrateur.')
2382 gmalvolti 9746 );
2383     }
2384 gmalvolti 9751 $this->f->displayMessage($message_class, $message);
2385 gmalvolti 9721 }
2386    
2387 gmalvolti 9604 function setLayout(&$form, $maj) {
2388 softime 12433 //
2389     $form->setBloc('json_payload', 'D', '', 'col_6');
2390 softime 13528 $fieldset_title_payload = __("json_payload (calculée)");
2391     if ($this->getVal('json_payload') !== "{}") {
2392     $fieldset_title_payload = __("json_payload");
2393     }
2394     $form->setFieldset('json_payload', 'DF', $fieldset_title_payload, "collapsible, startClosed");
2395 softime 12433 $form->setBloc('json_payload', 'F');
2396     $form->setBloc('timestamp_log', 'DF', __("historique"), 'col_9 timestamp_log_jsontotab');
2397 gmalvolti 9604 }
2398    
2399 softime 9950 /**
2400 softime 11585 * Récupère le nom de l'objet à mentionner dans la table lien_id_interne_uid_externe
2401     * en fonction du type et du stream de la tâche.
2402     *
2403     * @param string $type Type de la tâche
2404     * @param string $stream Stream de la tâche
2405     *
2406     * @return array
2407 softime 9950 */
2408 softime 10032 function get_objects_by_task_type($type, $stream = 'all') {
2409 softime 9950 $objects = array();
2410 softime 10356 if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2411 softime 9950 $objects = array('dossier_autorisation', );
2412     }
2413     if (in_array($type, array('creation_DI', 'depot_DI', 'notification_DI', 'qualification_DI', )) === true) {
2414     $objects = array('dossier', );
2415     }
2416     if (in_array($type, array('create_DI_for_consultation', )) === true) {
2417     $objects = array('dossier', 'dossier_consultation', );
2418     }
2419 gmalvolti 10317 if (in_array($type, array('create_DI', )) === true
2420     && $stream === 'input') {
2421 softime 10808 $objects = array('dossier', 'dossier_autorisation', 'demande', );
2422 gmalvolti 10317 }
2423 softime 14064 if (in_array($type, array(
2424     'decision_DI',
2425     'incompletude_DI',
2426     'completude_DI',
2427     'lettre_incompletude',
2428     'lettre_majoration'
2429     )) === true) {
2430 softime 9950 $objects = array('instruction', );
2431     }
2432 softime 11585 if (in_array($type, array('envoi_CL', )) === true) {
2433     $objects = array('instruction_action_cl', );
2434     }
2435 softime 10032 if (in_array($type, array('pec_metier_consultation', )) === true
2436     && $stream === 'output') {
2437 softime 9950 $objects = array('pec_dossier_consultation', );
2438     }
2439 softime 10032 if (in_array($type, array('avis_consultation', )) === true
2440     && $stream === 'output') {
2441 softime 9950 $objects = array('avis_dossier_consultation', );
2442     }
2443 softime 10869 if (in_array($type, array('prescription', )) === true
2444     && $stream === 'output') {
2445     $objects = array('prescription', );
2446     }
2447 softime 9950 if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2448     $objects = array('piece', );
2449     }
2450 softime 10032 if (in_array($type, array('creation_consultation', )) === true) {
2451     $objects = array('consultation', );
2452     }
2453 softime 10043 if (in_array($type, array('pec_metier_consultation', )) === true
2454 softime 10032 && $stream === 'input') {
2455 softime 10043 $objects = array('pec_metier_consultation', );
2456 softime 10032 }
2457 softime 10043 if (in_array($type, array('avis_consultation', )) === true
2458     && $stream === 'input') {
2459     $objects = array('avis_consultation', );
2460     }
2461 cgarcin 10362 if (in_array($type, array('create_message', )) === true
2462     && $stream === 'input') {
2463     $objects = array('dossier_message', );
2464     }
2465 softime 11585 if (in_array(
2466     $type,
2467     array(
2468     'notification_recepisse',
2469     'notification_instruction',
2470     'notification_decision',
2471     'notification_service_consulte',
2472     'notification_tiers_consulte',
2473 softime 15037 'notification_signataire',
2474 softime 11585 )
2475     ) === true) {
2476 softime 11418 $objects = array('instruction_notification', 'demande', );
2477 softime 10808 }
2478 softime 9950 return $objects;
2479     }
2480    
2481 softime 11228 /**
2482     * Récupère les tables auxquelles pourrait être rattaché l'objet lié à la tâche,
2483     * par rapport à son type.
2484     *
2485     * @param string $type Type de la tâche
2486     * @param string $stream input ou output
2487     * @return array
2488     */
2489     function get_tables_by_task_type($type, $stream = 'all') {
2490     $tables = array();
2491     if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2492     $tables = array('dossier_autorisation', );
2493     }
2494     if (in_array($type, array('creation_DI', 'depot_DI', )) === true) {
2495     $tables = array('dossier', );
2496     }
2497     if (in_array($type, array('qualification_DI', )) === true) {
2498 softime 11585 $tables = array('instruction', 'dossier', );
2499 softime 11228 }
2500     if (in_array($type, array('create_DI_for_consultation', )) === true) {
2501     $tables = array('dossier', );
2502     }
2503     if (in_array($type, array('create_DI', )) === true
2504     && $stream === 'input') {
2505     $tables = array('dossier', 'dossier_autorisation', 'demande', );
2506     }
2507 softime 14064 if (in_array($type, array(
2508     'decision_DI',
2509     'incompletude_DI',
2510     'completude_DI',
2511     'lettre_incompletude',
2512     'lettre_majoration'
2513     )) === true) {
2514 softime 11228 $tables = array('instruction', );
2515     }
2516 softime 14542 if (in_array($type, array('envoi_CL', )) === true) {
2517     $objects = array('instruction', );
2518     }
2519 softime 11228 if (in_array($type, array('pec_metier_consultation', )) === true
2520     && $stream === 'output') {
2521     $tables = array('instruction', );
2522     }
2523     if (in_array($type, array('avis_consultation', )) === true
2524     && $stream === 'output') {
2525     $tables = array('instruction', );
2526     }
2527     if (in_array($type, array('prescription', )) === true
2528     && $stream === 'output') {
2529     $tables = array('instruction', );
2530     }
2531     if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {
2532     $tables = array('document_numerise', );
2533     }
2534     if (in_array($type, array('creation_consultation', )) === true) {
2535     $tables = array('consultation', );
2536     }
2537     if (in_array($type, array('pec_metier_consultation', )) === true
2538     && $stream === 'input') {
2539     $tables = array('consultation', );
2540     }
2541     if (in_array($type, array('avis_consultation', )) === true
2542     && $stream === 'input') {
2543     $tables = array('consultation', );
2544     }
2545     if (in_array($type, array('create_message', )) === true
2546     && $stream === 'input') {
2547     $tables = array('dossier_message', );
2548     }
2549 softime 11585 if (in_array(
2550     $type,
2551     array(
2552     'notification_recepisse',
2553     'notification_instruction',
2554     'notification_decision',
2555     'notification_service_consulte',
2556 softime 15037 'notification_tiers_consulte',
2557     'notification_signataire'
2558 softime 11585 )
2559     ) === true) {
2560 softime 11228 $tables = array('instruction_notification', );
2561     }
2562     return $tables;
2563     }
2564    
2565 softime 14064 /**
2566     * Vérifie si l'objet référencé par la tâche existe en base de données.
2567     *
2568     * Récupère la liste des tables de référence associé à la tâche à partir
2569     * du type de tâche et de son flux (input ou output).
2570     * Pour chaque table potentiellement référencé par la tâche on essaye d'instancier
2571     * l'objet correspondant à partir de l'identifiant de l'objet de référence de la tâche.
2572     * Si l'élément instancié existe renvoie true sinon renvoie false.
2573     *
2574     * @param string|integer $taskObjectId : identifiant de l'objet de référence de la tâche
2575     * @param string $taskType : type de la tâche
2576     * @param string $taskStream : flux entrant (output - valeur par défaut) ou sortant (input)
2577     * @return boolean
2578     */
2579     protected function does_referenced_object_exist($taskObjectId, string $taskType, string $taskStream = 'output') {
2580     $refTables = $this->get_tables_by_task_type($taskType, $taskStream);
2581 softime 14542 if (empty($refTables) === true) {
2582     $this->f->addToLog(
2583     sprintf(
2584     __("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."),
2585     $taskType,
2586     "get_tables_by_task_type()"
2587     ),
2588     DEBUG_MODE
2589     );
2590     return true;
2591     }
2592 softime 14064 foreach ($refTables as $table) {
2593     $inst = $this->f->get_inst__om_dbform(array(
2594     'obj' => $table,
2595     'idx' => $taskObjectId
2596     ));
2597     if ($inst->exists() === true) {
2598     return true;
2599     }
2600     }
2601     return false;
2602     }
2603    
2604 softime 9293 }

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26