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

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

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

revision 14542 by softime, Thu Apr 20 13:21:47 2023 UTC revision 19307 by softime, Wed Nov 6 10:57:56 2024 UTC
# Line 4  Line 4 
4    
5  require_once "../gen/obj/task.class.php";  require_once "../gen/obj/task.class.php";
6    
7    
8  class task extends task_gen {  class task extends task_gen {
9    
10      const STATUS_DRAFT = 'draft';      const STATUS_DRAFT = 'draft';
# Line 14  class task extends task_gen { Line 15  class task extends task_gen {
15      const STATUS_DEBUG = 'debug';      const STATUS_DEBUG = 'debug';
16      const STATUS_ARCHIVED = 'archived';      const STATUS_ARCHIVED = 'archived';
17      const STATUS_CANCELED = 'canceled';      const STATUS_CANCELED = 'canceled';
18        const STATUS_INVALID = 'invalid';
19    
20        /**
21         * Définie le code platau correspondant aux documents de type consultation
22         *
23         * @var integer
24         */
25        const CODE_PLATAU_CONSULTATION = 7;
26    
27      /**      /**
28       * Liste des types de tâche concernant les services instructeurs       * Liste des types de tâche concernant les services instructeurs
# Line 28  class task extends task_gen { Line 37  class task extends task_gen {
37          'incompletude_DI',          'incompletude_DI',
38          'completude_DI',          'completude_DI',
39          'ajout_piece',          'ajout_piece',
40            'modification_piece',
41            'suppression_piece',
42          'add_piece',          'add_piece',
43          'creation_consultation',          'creation_consultation',
44          'modification_DA',          'modification_DA',
# Line 40  class task extends task_gen { Line 51  class task extends task_gen {
51          'notification_tiers_consulte',          'notification_tiers_consulte',
52          'notification_depot_demat',          'notification_depot_demat',
53          'notification_commune',          'notification_commune',
54            'notification_signataire',
55          'lettre_incompletude',          'lettre_incompletude',
56          'lettre_majoration'          'lettre_majoration',
57            'ajout_documents_specifiques'
58      );      );
59    
60      /**      /**
# Line 59  class task extends task_gen { Line 72  class task extends task_gen {
72          'notification_tiers_consulte',          'notification_tiers_consulte',
73          'notification_depot_demat',          'notification_depot_demat',
74          'prescription',          'prescription',
75            'ajout_documents_specifiques'
76      );      );
77    
78      /**      /**
# Line 67  class task extends task_gen { Line 81  class task extends task_gen {
81      const TASK_WITH_DOCUMENT = array(      const TASK_WITH_DOCUMENT = array(
82          'add_piece',          'add_piece',
83          'avis_consultation',          'avis_consultation',
84          'pec_metier_consultation'          'pec_metier_consultation',
85            'ajout_documents_specifiques'
86      );      );
87    
88      /**      /**
89         * Préfixe pour identifier les codes de suivi
90         * @var string
91         */
92        const CS_PREFIX = 'code-suivi://';
93    
94        /**
95       * Catégorie de la tâche       * Catégorie de la tâche
96       */       */
97      var $category = PLATAU;      var $category = PLATAU;
# Line 268  class task extends task_gen { Line 289  class task extends task_gen {
289    
290      function stateTranslation ($currentState) {      function stateTranslation ($currentState) {
291          switch ($currentState){          switch ($currentState){
292              case "draft":              case self::STATUS_DRAFT:
293                  return __('brouillon');                  return __('brouillon');
294                  break;                  break;
295              case "new":              case self::STATUS_NEW:
296                  return __('à traiter');                  return __('à traiter');
297                  break;                  break;
298              case "pending":              case self::STATUS_PENDING:
299                  return __('en cours');                  return __('en cours');
300                  break;                  break;
301              case "done":              case self::STATUS_DONE:
302                  return __('terminé');                  return __('terminé');
303                  break;                  break;
304              case "archived":              case self::STATUS_ARCHIVED:
305                  return __('archivé');                  return __('archivé');
306                  break;                  break;
307              case "error":              case self::STATUS_ERROR:
308                  return __('erreur');                  return __('erreur');
309                  break;                  break;
310              case "debug":              case self::STATUS_DEBUG:
311                  return __('debug');                  return __('debug');
312                  break;                  break;
313              case "canceled":              case self::STATUS_CANCELED:
314                  return __('annulé');                  return __('annulé');
315                  break;                  break;
316                case self::STATUS_INVALID:
317                    return __('invalide');
318                    break;
319          }          }
320      }      }
321    
322      /**      /**
323       *       *
324       */       */
325      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {      function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
326          if($maj <= 3) {          if($maj <= 3) {
327              $contenu = array();              $contenu = array();
328              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED') as $key) {              foreach(array('DRAFT', 'NEW', 'PENDING', 'DONE', 'ERROR', 'DEBUG', 'ARCHIVED', 'CANCELED', 'INVALID') as $key) {
329                  $const_name = 'STATUS_'.$key;                  $const_name = 'STATUS_'.$key;
330                  $const_value = constant("self::$const_name");                  $const_value = constant("self::$const_name");
331                  $contenu[0][] = $const_value;                  $contenu[0][] = $const_value;
# Line 347  class task extends task_gen { Line 372  class task extends task_gen {
372                      case "add_piece":                      case "add_piece":
373                          $value_type = __('Ajout pièce (entrant)');                          $value_type = __('Ajout pièce (entrant)');
374                          break;                          break;
375                        case "modification_piece":
376                            $value_type = __('Modification pièce (sortant)');
377                            break;
378                        case "suppression_piece":
379                            $value_type = __('Suppression pièce (sortant)');
380                            break;
381                      case "depot_DI":                      case "depot_DI":
382                          $value_type = __('Dépôt DI');                          $value_type = __('Dépôt DI');
383                          break;                          break;
# Line 392  class task extends task_gen { Line 423  class task extends task_gen {
423                      case "notification_tiers_consulte":                      case "notification_tiers_consulte":
424                          $value_type = __('Notification tiers consulté');                          $value_type = __('Notification tiers consulté');
425                          break;                          break;
426                        case "notification_signataire":
427                            $value_type = __('Notification signataire');
428                            break;
429                      case "completude_DI":                      case "completude_DI":
430                          $value_type = __('complétude DI');                          $value_type = __('complétude DI');
431                          break;                          break;
# Line 404  class task extends task_gen { Line 438  class task extends task_gen {
438                      case "lettre_majoration":                      case "lettre_majoration":
439                          $value_type = __('Lettre au pétitionnaire de majoration');                          $value_type = __('Lettre au pétitionnaire de majoration');
440                          break;                          break;
441                        case "ajout_documents_specifiques":
442                            $value_type = __('Ajout Document Spécifique');
443                            break;
444                  }                  }
445    
446                  $contenu_type[1][] = $value_type;                  $contenu_type[1][] = $value_type;
# Line 413  class task extends task_gen { Line 450  class task extends task_gen {
450          }          }
451    
452          if ($maj == 3) {          if ($maj == 3) {
453                $dossier = $form->val['dossier'];
454              // Récupération du numéro du dossier si il n'est pas renseigné dans la tâche              // Récupération du numéro du dossier si il n'est pas renseigné dans la tâche
455              if ($form->val['dossier'] == '' || $form->val['dossier'] == null) {  
456                if ($dossier == '' || $dossier == null) {
457                  // Récupération de la payload de la taĉhe.                  // Récupération de la payload de la taĉhe.
458                  // Si la tâche est une tâche input la payload est associée à la tâche.                  // Si la tâche est une tâche input la payload est associée à la tâche.
459                  // Si la tâche est une tâche en output la payload est "calculé" à l'ouverture                  // Si la tâche est une tâche en output la payload est "calculé" à l'ouverture
# Line 428  class task extends task_gen { Line 467  class task extends task_gen {
467                  // Si un external uid de DI (dossier) existe ont le récupère et on stocke le numéro                  // Si un external uid de DI (dossier) existe ont le récupère et on stocke le numéro
468                  // pour l'afficher sur le formulaire.                  // pour l'afficher sur le formulaire.
469                  // Si l'external UID du DI n'existe pas on récupère celui du DA                  // Si l'external UID du DI n'existe pas on récupère celui du DA
470                  $external_uid = '';                  if (! empty($json_payload) ){
471                  if (array_key_exists('external_uids', $json_payload)                      $external_uid = '';
472                      && array_key_exists('dossier', $json_payload['external_uids'])                      if (array_key_exists('external_uids', $json_payload)
473                  ) {                          && array_key_exists('dossier', $json_payload['external_uids'])
474                      $external_uid = $json_payload['external_uids']['dossier'];                      ) {
475                  } elseif (array_key_exists('external_uids', $json_payload)                          $external_uid = $json_payload['external_uids']['dossier'];
476                      && array_key_exists('demande', $json_payload['external_uids'])) {                      } elseif (array_key_exists('external_uids', $json_payload)
477                      $external_uid = $json_payload['external_uids']['demande'];                          && array_key_exists('demande', $json_payload['external_uids'])) {
478                  }                          $external_uid = $json_payload['external_uids']['demande'];
479                  // Recherche l'external uid dans la base de données pour récupèrer le numéro de                      }
480                  // DI / DA correspondant. On stocke le numéro de dossier dans la propriété val                      // Recherche l'external uid dans la base de données pour récupèrer le numéro de
481                  // du formulaire pour pouvoir l'afficher                      // DI / DA correspondant. On stocke le numéro de dossier dans la propriété val
482                  if ($external_uid != '') {                      // du formulaire pour pouvoir l'afficher
483                      $qres = $this->f->get_one_result_from_db_query(                      if ($external_uid != '') {
484                          sprintf(                          $qres = $this->f->get_one_result_from_db_query(
485                              'SELECT                              sprintf(
486                                  lien_id_interne_uid_externe.dossier                                  'SELECT
487                              FROM                                      lien_id_interne_uid_externe.dossier
488                                  %1$slien_id_interne_uid_externe                                  FROM
489                              WHERE                                      %1$slien_id_interne_uid_externe
490                                  lien_id_interne_uid_externe.external_uid = \'%2$s\'',                                  WHERE
491                              DB_PREFIXE,                                      lien_id_interne_uid_externe.external_uid = \'%2$s\'',
492                              $this->f->db->escapeSimple($external_uid)                                  DB_PREFIXE,
493                          ),                                  $this->f->db->escapeSimple($external_uid)
494                          array(                              ),
495                              "origin" => __METHOD__,                              array(
496                          )                                  "origin" => __METHOD__,
497                      );                              )
498                      if (! empty($qres["result"])) {                          );
499                          $form->val['dossier'] = $qres["result"];                          if (! empty($qres["result"])) {
500                                $dossier = $qres["result"];
501                            }
502                      }                      }
503                  }                  }
504              }              }
# Line 489  class task extends task_gen { Line 530  class task extends task_gen {
530                  }                  }
531              } else {              } else {
532                  // Vérification que le numéro de DI affiché dans le formulaire existe                  // Vérification que le numéro de DI affiché dans le formulaire existe
533                  $qres = $this->f->get_one_result_from_db_query(                  $sql = sprintf(
534                      sprintf(                      'SELECT
535                          'SELECT                          dossier.dossier,
536                              dossier.dossier                          dossier.dossier_parent
537                          FROM                      FROM
538                              %1$sdossier                          %1$sdossier
539                          WHERE                      WHERE
540                              dossier.dossier = \'%2$s\'',                          dossier.dossier = \'%2$s\'',
541                          DB_PREFIXE,                      DB_PREFIXE,
542                          $this->f->db->escapeSimple($form->val['dossier'])                      $this->f->db->escapeSimple($dossier)
543                      ),                  );
544                    $qres = $this->f->get_all_results_from_db_query(
545                        $sql,
546                      array(                      array(
547                          "origin" => __METHOD__,                          "origin" => __METHOD__,
548                      )                      )
549                  );                  );
550                  // Si on a un résultat c'est que le dossier existe, il faut afficher le lien                  // Si on a un résultat c'est que le dossier existe, il faut afficher le lien
551                  if (! empty($qres["result"])) {                  if (! empty($qres['result']) && $qres['row_count'] > 0) {
552                      $obj_link = 'dossier_instruction';                      $obj_link = 'dossier_instruction';
553                        if (! empty($qres['result'][0]['dossier_parent'])) {
554                            $dossier = $qres['result'][0]['dossier_parent'];
555                        }
556                  }                  }
557              }              }
558              // Pour afficher le lien vers un dossier ont utilise un champ de type "link".              // Pour afficher le lien vers un dossier ont utilise un champ de type "link".
# Line 519  class task extends task_gen { Line 565  class task extends task_gen {
565              // contiennent les informations nécessaire à l'affichage du champs.              // contiennent les informations nécessaire à l'affichage du champs.
566              $params = array(              $params = array(
567                  'obj' => $obj_link,                  'obj' => $obj_link,
568                  'libelle' => $form->val['dossier'],                  'libelle' => $dossier,
569                  'title' => "Consulter le dossier",                  'title' => "Consulter le dossier",
570                  'idx' => $form->val['dossier']                  'idx' => $dossier
571              );              );
572              $form->setSelect("dossier", $params);              $form->setSelect("dossier", $params);
573          }          }
# Line 536  class task extends task_gen { Line 582  class task extends task_gen {
582          // parent::setVal($form, $maj, $validation);          // parent::setVal($form, $maj, $validation);
583          //          //
584          if ($this->getVal('stream') == "output"          if ($this->getVal('stream') == "output"
585                && $this->getVal('type') !== 'suppression_piece'
586              && ($this->getVal('state') !== self::STATUS_DONE              && ($this->getVal('state') !== self::STATUS_DONE
587                  || $this->getVal('json_payload') === "{}")) {                  || $this->getVal('json_payload') === "{}")) {
588              //              //
# Line 576  class task extends task_gen { Line 623  class task extends task_gen {
623      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
624          $ret = parent::verifier($val, $dnu1, $dnu2);          $ret = parent::verifier($val, $dnu1, $dnu2);
625    
626            $allowed_state = array(
627                self::STATUS_DRAFT,
628                self::STATUS_NEW,
629                self::STATUS_PENDING,
630                self::STATUS_DONE,
631                self::STATUS_ERROR,
632                self::STATUS_DEBUG,
633                self::STATUS_ARCHIVED,
634                self::STATUS_CANCELED,
635                self::STATUS_INVALID);
636    
637            $task_id = $this->getVal($this->clePrimaire);
638            $task_id_text = sprintf(__("la tâche '%s'"), $task_id);
639            if (empty($task_id) || $task_id === ']') {
640                $task_id_text = __("la nouvelle tâche");
641            }
642    
643            if (! isset($this->valF['state']) || empty($this->valF['state'])) {
644                $this->correct = false;
645                $err_msg = sprintf(
646                    __("Champ '%s' obligatoire pour %s"),
647                    'state', $task_id_text);
648                $this->addToMessage($err_msg);
649                $this->addToLog(__METHOD__.'(): '.$err_msg, DEBUG_MODE);
650            }
651            elseif (! in_array($this->valF['state'], $allowed_state)) {
652                $this->correct = false;
653                $err_msg = sprintf(
654                    __("Champ '%s' invalide (%s) pour %s"),
655                    'state', var_export($this->valF['state'], true), $task_id_text);
656                $this->addToMessage($err_msg);
657                $this->addToLog(__METHOD__.'(): '.$err_msg, DEBUG_MODE);
658            }
659    
660          // une tâche entrante doit avoir un type et une payload non-vide          // une tâche entrante doit avoir un type et une payload non-vide
661          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
662              if (isset($this->valF['type']) === false) {              if (isset($this->valF['type']) === false) {
# Line 710  class task extends task_gen { Line 791  class task extends task_gen {
791       * @param  string $object_id [description]       * @param  string $object_id [description]
792       * @param  bool   $is_not_done   [description]       * @param  bool   $is_not_done   [description]
793       * @return [type]            [description]       * @return [type]            [description]
794         *
795         * Cette méthode est déprécier, car elle cause des cas illogique avec PENDING qui ne compte pas dans le is_not_done.
796         * L'utilisation de task_exists_multi_search() est à privilegier pour éviter les problèmes et les risques
797       */       */
798      public function task_exists(string $type, string $object_id, string $dossier = null, bool $is_not_done = true) {      public function task_exists(string $type, string $object_id, string $dossier = null, bool $is_not_done = true) {
799          $qres = $this->f->get_one_result_from_db_query(          $qres = $this->f->get_one_result_from_db_query(
# Line 730  class task extends task_gen { Line 814  class task extends task_gen {
814                  $is_not_done == true ? 'state != \''.self::STATUS_DONE.'\' AND' : '',                  $is_not_done == true ? 'state != \''.self::STATUS_DONE.'\' AND' : '',
815                  $type,                  $type,
816                  $object_id,                  $object_id,
817                  $dossier !== null ? sprintf('OR dossier = \'%s\'', $dossier) : '',                  $dossier !== null ? sprintf('OR (object_id IS NULL AND dossier = \'%s\')', $dossier) : '',
818                  self::STATUS_CANCELED                  self::STATUS_CANCELED
819              ),              ),
820              array(              array(
821                  "origin" => __METHOD__,                  "origin" => __METHOD__,
822              )              )
823          );          );
824          if ($qres["result"] !== null && $qres["result"] !== "") {          if (! empty($qres["result"])) {
825              return $qres["result"];              return $qres["result"];
826          }          }
827          return false;          return false;
# Line 751  class task extends task_gen { Line 835  class task extends task_gen {
835       */       */
836      public function task_exists_multi_search(array $search_values) {      public function task_exists_multi_search(array $search_values) {
837          $query = sprintf('          $query = sprintf('
838              SELECT *              SELECT task, state
839              FROM %1$stask              FROM %1$stask
840              %2$s              %2$s
841              %3$s              %3$s
# Line 784  class task extends task_gen { Line 868  class task extends task_gen {
868       * @return boolean       * @return boolean
869       */       */
870      function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {      function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
871            $parent_res = parent::triggerajouter($id, $dnu1, $val);
872            if ($parent_res === false) return $parent_res;
873    
874          // tâche entrante          // tâche entrante
875          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {          if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
# Line 808  class task extends task_gen { Line 894  class task extends task_gen {
894              || $val['type'] === 'notification_tiers_consulte'              || $val['type'] === 'notification_tiers_consulte'
895              || $val['type'] === 'notification_depot_demat'              || $val['type'] === 'notification_depot_demat'
896              || $val['type'] === 'notification_commune'              || $val['type'] === 'notification_commune'
897                || $val['type'] === 'notification_signataire'
898              ) {              ) {
899              // Récupère la payload de la tache              // Récupère la payload de la tache
900              $data = array();              $data = array();
# Line 827  class task extends task_gen { Line 914  class task extends task_gen {
914              $envoiMail = $inst_notif->send_mail_notification($data, $val['type']);              $envoiMail = $inst_notif->send_mail_notification($data, $val['type']);
915              // Passage de la tache à done si elle a réussi et à error              // Passage de la tache à done si elle a réussi et à error
916              // si l'envoi a échoué              // si l'envoi a échoué
917              $this->valF['state'] = 'done';              $this->valF['state'] = self::STATUS_DONE;
918              if ($envoiMail === false) {              if ($envoiMail === false) {
919                  $this->valF['state'] = 'error';                  $this->valF['state'] = self::STATUS_ERROR;
920              }              }
921          }          }
922      }      }
# Line 866  class task extends task_gen { Line 953  class task extends task_gen {
953          $this->valF['object_id'] = $new_values['object_id'];          $this->valF['object_id'] = $new_values['object_id'];
954          $this->valF['last_modification_date'] = date('Y-m-d');          $this->valF['last_modification_date'] = date('Y-m-d');
955          $this->valF['last_modification_time'] = date('H:i:s');          $this->valF['last_modification_time'] = date('H:i:s');
956          if ($val['stream'] === 'output') {  
957              // Lorsque la task passe d'un état qui n'est pas "done" à l'état "done"          if ($val['stream'] === 'output'
958              if ($this->getVal("state") !== self::STATUS_DONE              && $val['type'] !== 'suppression_piece') {
                 && $this->valF['state'] === self::STATUS_DONE) {  
                 //  
                 $this->valF['json_payload'] = $this->view_form_json(true);  
             }  
959              // Lorsque la task passe d'un état "done" à un état qui n'est pas "done"              // Lorsque la task passe d'un état "done" à un état qui n'est pas "done"
960              if ($this->getVal("state") === self::STATUS_DONE              if ($this->getVal("state") === self::STATUS_DONE
961                  && $this->valF['state'] !== self::STATUS_DONE) {                  && $this->valF['state'] !== self::STATUS_DONE) {
# Line 994  class task extends task_gen { Line 1077  class task extends task_gen {
1077       * @return boolean       * @return boolean
1078       */       */
1079      public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {      public function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1080          parent::triggermodifierapres($id, $dnu1, $val, $dnu2);          $res = parent::triggermodifierapres($id, $dnu1, $val, $dnu2);
1081    
1082            if ($res !== false) {
1083                if ($val['stream'] === 'output') {
1084                    // Si le type de la tache est suppression alors il faut gerer le state dans la payload figée.
1085                    if (in_array($val['type'], array('suppression_piece'))) {
1086                        $json_payload = json_decode($this->valF['json_payload']);
1087                        // Si le state de la payload est différent du nouveau state de la tache.
1088                        if ($json_payload->task->state !== $this->valF['state']) {
1089                            $json_payload->task->state = $this->valF['state'];
1090                            $task_val = array();
1091                            // Avec la nouvelle payload.
1092                            $task_val['json_payload'] = json_encode($json_payload);
1093                            $res = $this->f->db->autoExecute(
1094                                sprintf('%s%s', DB_PREFIXE, "task"),
1095                                $task_val,
1096                                DB_AUTOQUERY_UPDATE,
1097                                sprintf("task = '%s'", $val['task'])
1098                            );
1099                            $this->f->addToLog(__METHOD__."(): db->autoexecute(\"".sprintf('%s%s', DB_PREFIXE, 'task')."\", ".print_r($task_val, true).", DB_AUTOQUERY_UPDATE, \"".sprintf("task = '%s'", $val['task'])."\");", VERBOSE_MODE);
1100                            if ($this->f->isDatabaseError($res, true) === true) {
1101                                return false;
1102                            }
1103                            # Choix de l'autoExecute pour évité le double trigger de l'enregistrement de l'historique
1104                            # $instance_task->modifier($task_val);
1105                        }
1106                    }
1107                    if ($val['type'] !== 'suppression_piece') {
1108                        // Lorsque la task passe d'un état qui n'est pas "done" à l'état "done".
1109                        if ($this->getVal("state") !== self::STATUS_DONE
1110                            && $this->valF['state'] === self::STATUS_DONE) {
1111                            if ($this->valF['json_payload'] == '{}' ) {
1112                                $this->valF['json_payload'] = $this->view_form_json(true);
1113                            }
1114                            $json_payload = json_decode($this->valF['json_payload']);
1115                            // Si le state de la payload est différent du nouveau state de la tache.
1116                            if ($json_payload->task->state !== $this->valF['state']) {
1117                                $json_payload->task->state = $this->valF['state'];
1118                                $task_val = array();
1119                                // Avec la nouvelle payload.
1120                                $task_val['json_payload'] = json_encode($json_payload);
1121                                $res = $this->f->db->autoExecute(
1122                                    sprintf('%s%s', DB_PREFIXE, "task"),
1123                                    $task_val,
1124                                    DB_AUTOQUERY_UPDATE,
1125                                    sprintf("task = '%s'", $val['task'])
1126                                );
1127                                $this->f->addToLog(__METHOD__."(): db->autoexecute(\"".sprintf('%s%s', DB_PREFIXE, 'task')."\", ".print_r($task_val, true).", DB_AUTOQUERY_UPDATE, \"".sprintf("task = '%s'", $val['task'])."\");", VERBOSE_MODE);
1128                                if ($this->f->isDatabaseError($res, true) === true) {
1129                                    return false;
1130                                }
1131                                # Choix de l'autoExecute pour évité le double trigger de l'enregistrement de l'historique
1132                                # $instance_task->modifier($task_val);
1133                            }
1134                        }
1135                    }
1136                }
1137            }
1138    
1139          // Suivi des notificiations          // Suivi des notificiations
1140          // En cas de changement de l'état de la tâche de notification, alors          // En cas de changement de l'état de la tâche de notification, alors
# Line 1048  class task extends task_gen { Line 1188  class task extends task_gen {
1188                          $inst_instruction->setParameter('maj', 175);                          $inst_instruction->setParameter('maj', 175);
1189                          $update_instruction = $inst_instruction->modifier($valF_instruction);                          $update_instruction = $inst_instruction->modifier($valF_instruction);
1190                          if ($update_instruction === false) {                          if ($update_instruction === false) {
1191                              $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);                              $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, VERBOSE_MODE);
1192                              return false;                              return false;
1193                          }                          }
1194                      }                      }
# Line 1062  class task extends task_gen { Line 1202  class task extends task_gen {
1202                  $inst_in->setParameter('maj', 1);                  $inst_in->setParameter('maj', 1);
1203                  $update_in = $inst_in->modifier($valF_in);                  $update_in = $inst_in->modifier($valF_in);
1204                  if ($update_in === false) {                  if ($update_in === false) {
1205                      $this->addToLog(__METHOD__."(): ".$inst_in->msg, DEBUG_MODE);                      $this->addToLog(__METHOD__."(): ".$inst_in->msg, VERBOSE_MODE);
1206                      return false;                      return false;
1207                  }                  }
1208              }              }
# Line 1079  class task extends task_gen { Line 1219  class task extends task_gen {
1219                  "obj" => "instruction",                  "obj" => "instruction",
1220                  "idx" => $this->getVal('object_id'),                  "idx" => $this->getVal('object_id'),
1221              ));              ));
1222              if ($inst_instruction->has_an_edition() === true) {              $valF_instruction = array();
1223                  $valF_instruction = array();              foreach ($inst_instruction->champs as $champ) {
1224                  foreach ($inst_instruction->champs as $champ) {                  $valF_instruction[$champ] = $inst_instruction->getVal($champ);
                     $valF_instruction[$champ] = $inst_instruction->getVal($champ);  
                 }  
1225              }              }
1226                // On met à jour la date d'envoi au CL seulement si l'instruction a une édition liée
1227              $valF_instruction['date_envoi_controle_legalite'] = date("Y-m-d");              $valF_instruction['date_envoi_controle_legalite'] = date("Y-m-d");
1228              $inst_instruction->setParameter('maj', 1);              $inst_instruction->setParameter('maj', 1);
1229              $update_instruction = $inst_instruction->modifier($valF_instruction);              $update_instruction = $inst_instruction->modifier($valF_instruction);
1230              if ($update_instruction === false) {              if ($update_instruction === false) {
1231                  $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, DEBUG_MODE);                  $this->addToLog(__METHOD__."(): ".$inst_instruction->msg, VERBOSE_MODE);
1232                  return false;                  return false;
1233              }              }
1234          }          }
# Line 1173  class task extends task_gen { Line 1312  class task extends task_gen {
1312              }              }
1313          }          }
1314    
1315            if (isset($params['val']['state'])) {
1316                $allowed_state = array(
1317                    self::STATUS_DRAFT,
1318                    self::STATUS_NEW,
1319                    self::STATUS_PENDING,
1320                    self::STATUS_DONE,
1321                    self::STATUS_ERROR,
1322                    self::STATUS_DEBUG,
1323                    self::STATUS_ARCHIVED,
1324                    self::STATUS_CANCELED,
1325                    self::STATUS_INVALID);
1326    
1327                if (empty($params['val']['state'])) {
1328                    throw new InvalidArgumentException(
1329                        "État ('state') vide pour la nouvelle tâche");
1330                }
1331                elseif (! in_array($params['val']['state'], $allowed_state)) {
1332                    throw new InvalidArgumentException(
1333                        "État ('state') invalide (".var_export($params['val']['state'], true).
1334                        ") pour la nouvelle tâche");
1335                }
1336            }
1337    
1338          // Valeurs de la tâche          // Valeurs de la tâche
1339          $valF = array(          $valF = array(
1340              'task' => '',              'task' => '',
# Line 1197  class task extends task_gen { Line 1359  class task extends task_gen {
1359              'notification_instruction',              'notification_instruction',
1360              'notification_decision',              'notification_decision',
1361              'notification_service_consulte',              'notification_service_consulte',
1362              'notification_tiers_consulte'              'notification_tiers_consulte',
1363                'notification_depot_demat',
1364                'notification_commune',
1365                'notification_signataire',
1366          );          );
1367          if ($valF["stream"] == "output"          if ($valF["stream"] == "output"
1368              && ! in_array($valF['type'], $typeNonConcerne)) {              && ! in_array($valF['type'], $typeNonConcerne)) {
# Line 1206  class task extends task_gen { Line 1371  class task extends task_gen {
1371              $search_values_common = array(              $search_values_common = array(
1372                  sprintf('state != \'%s\'', self::STATUS_CANCELED),                  sprintf('state != \'%s\'', self::STATUS_CANCELED),
1373                  sprintf('state != \'%s\'', self::STATUS_DONE),                  sprintf('state != \'%s\'', self::STATUS_DONE),
1374                    sprintf('state != \'%s\'', self::STATUS_PENDING),
1375              );              );
1376              $search_values_others = array(              $search_values_others = array(
1377                  sprintf('type = \'%s\'', $valF['type']),                  sprintf('type = \'%s\'', $valF['type']),
1378                  sprintf('(object_id = \'%s\' OR dossier = \'%s\')', $valF['object_id'], $valF['dossier']),                  sprintf('(object_id = \'%s\' OR (object_id IS NULL AND dossier = \'%s\'))', $valF['object_id'], $valF['dossier']),
1379              );              );
1380              $search_values_specifics = array(              $search_values_specifics = array(
1381                  sprintf('object_id = \'%s\'', $valF['object_id']),                  sprintf('object_id = \'%s\'', $valF['object_id']),
# Line 1222  class task extends task_gen { Line 1388  class task extends task_gen {
1388              // Sinon return false              // Sinon return false
1389              $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_others));              $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_others));
1390    
1391              // S'il n'existe pas de tâche de type 'modification DI' pour l'object id/dossier              // Vérifie si une tâche existe déjà pour les types de tâches ayant un fonctionnement particulier.
1392              if ($valF['type'] === 'modification_DI' && $task_exists === false) {              // Il existe 2 cas :
1393                  // On se réfère à la tâche de type 'creation DI' de l'object id              //   - Aucune tâche déjà existante n'a été récupérées mais on veut faire une vérification supplémentaire
1394                  $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_DI'")));              //   - Les tâches pour lesquelles on fait une vérification supplémentaire qu'une correspondance ait été
1395              }              //     trouvée ou pas
1396              // S'il n'existe pas de tâche de type 'modification DA' pour l'object id/dossier              // Une tâche ne pouvant avoir qu'un seul type si elle est trouvée, il n'est pas nécessaire de
1397              if ($valF['type'] === 'modification_DA' && $task_exists === false) {              // vérifier les autres
1398                  // On se réfère à la tâche de type 'creation DA' de l'object id              $is_type_voulu_traite = false;
1399                  $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_DA'")));              // Cas 1 : Aucune tâche déjà existante n'a été récupérées mais effectue une vérification supplémentaire
1400              }              $cas_specifiques_tache_non_existante = array(
1401              if ($valF['type'] === 'ajout_piece') {                  'modification_DI' => array("type = 'creation_DI'"),
1402                  // On se réfère à la tâche de type 'ajout piece' de l'object id                  'modification_DA' => array("type = 'creation_DA'")
1403                  $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'ajout_piece'")));              );
1404              }              foreach ($cas_specifiques_tache_non_existante as $type_task => $conditions_specifiques) {
1405              if ($valF['type'] === 'creation_consultation') {                  // S'il n'existe pas de tâche de type voulu pour l'object id/dossier
1406                  // On se réfère à la tâche de type 'creation consultation' de l'object id                  if ($valF['type'] === $type_task && $task_exists === false) {
1407                  $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = 'creation_consultation'")));                      // On se réfère à la tâche de type 'ajout piece' de l'object id
1408                        $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, $conditions_specifiques));
1409                        $is_type_voulu_traite = true;
1410                        break;
1411                    }
1412              }              }
1413    
1414                // Cas 2 : Vérification supplémentaire qu'une correspondance ait été trouvé ou pas
1415                if (! $is_type_voulu_traite) {
1416                    $cas_specifiques = array(
1417                        'ajout_piece',
1418                        'modification_piece',
1419                        'suppression_piece',
1420                        'creation_consultation',
1421                        'ajout_documents_specifiques',
1422                    );
1423                    foreach ($cas_specifiques as $type_task) {
1424                        if ($valF['type'] === $type_task) {
1425                            // On se réfère à la tâche de type 'ajout piece' de l'object id
1426                            $task_exists = $this->task_exists_multi_search(array_merge($search_values_common, $search_values_specifics, array("type = '$type_task'")));
1427                            break;
1428                        }
1429                    }
1430                }
1431    
1432              // S'il existe une tâche pour l'objet concerné, pas d'ajout de nouvelle              // S'il existe une tâche pour l'objet concerné, pas d'ajout de nouvelle
1433              // tâche mais mise à jour de l'existante              // tâche mais mise à jour de l'existante
1434              if ($task_exists !== false) {              if ($task_exists !== false) {
# Line 1275  class task extends task_gen { Line 1464  class task extends task_gen {
1464          }          }
1465          $add = $this->ajouter($valF);          $add = $this->ajouter($valF);
1466          $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);          $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);
1467    
1468            // Création de la payload JSON dans le cas ou nous avons un suppression d'objet
1469            if ($stream === 'output'
1470                && $add === true
1471                && isset($valF['type']) === true
1472                && strpos($valF['type'], 'suppression_piece') !== false
1473            ) {
1474                $inst_task_empty = $this->f->get_inst__om_dbform(array(
1475                    "obj" => "task",
1476                    "idx" => 0,
1477                ));
1478                // Vérification de l'éxistence d'une tache de suppression de pièce
1479                $task_exists = $inst_task_empty->task_exists('suppression_piece', $valF['object_id']);
1480                $valF['task'] = $task_exists;
1481                $inst_task = $this->f->get_inst__om_dbform(array(
1482                    "obj" => "task",
1483                    "idx" => $task_exists,
1484                ));
1485                $valF['json_payload'] = $inst_task->view_form_json(true);
1486                $update = $this->modifier($valF);
1487                if ($update === false) {
1488                    $this->addToLog(__METHOD__."(): ".$this->msg, DEBUG_MODE);
1489                    return $this->end_treatment(__METHOD__, false);
1490                }
1491            }
1492    
1493          if ($add === false) {          if ($add === false) {
1494              $this->addToLog(__METHOD__."(): ".$this->msg, DEBUG_MODE);              $this->addToLog(__METHOD__."(): ".$this->msg, DEBUG_MODE);
1495              return $this->end_treatment(__METHOD__, false);              return $this->end_treatment(__METHOD__, false);
# Line 1292  class task extends task_gen { Line 1507  class task extends task_gen {
1507      public function update_task($params = array()) {      public function update_task($params = array()) {
1508          $this->begin_treatment(__METHOD__);          $this->begin_treatment(__METHOD__);
1509    
1510            $allowed_state = array(
1511                self::STATUS_DRAFT,
1512                self::STATUS_NEW,
1513                self::STATUS_PENDING,
1514                self::STATUS_DONE,
1515                self::STATUS_ERROR,
1516                self::STATUS_DEBUG,
1517                self::STATUS_ARCHIVED,
1518                self::STATUS_CANCELED,
1519                self::STATUS_INVALID);
1520    
1521            $task_id = $this->getVal($this->clePrimaire);
1522    
1523            if (! isset($params['val']['state']) || empty($params['val']['state'])) {
1524                throw new InvalidArgumentException(
1525                    "État ('state') non spécifié ou vide pour la tâche '$task_id'");
1526            }
1527            elseif (! in_array($params['val']['state'], $allowed_state)) {
1528                throw new InvalidArgumentException(
1529                    "État ('state') invalide (".var_export($params['val']['state'], true).
1530                    ") pour la tâche '$task_id'");
1531            }
1532    
1533          // Mise à jour de la tâche          // Mise à jour de la tâche
1534          $valF = array(          $valF = array(
1535              'task' => $this->getVal($this->clePrimaire),              'task' => $task_id,
1536              'type' => $this->getVal('type'),              'type' => $this->getVal('type'),
1537              'timestamp_log' => '[]',              'timestamp_log' => '[]',
1538              'state' => $params['val']['state'],              'state' => $params['val']['state'],
# Line 1318  class task extends task_gen { Line 1556  class task extends task_gen {
1556      }      }
1557    
1558      /**      /**
1559         * A partir des éléments fournis en paramètre compose une url permettant
1560         * d'accéder à un document.
1561         *
1562         * @param string         $nom_objet : nom de l'objet d'appartenance du document
1563         * @param string         $champ     : champ contenant l'uid du document
1564         * @param string|integer $id_objet  : id de l'objet d'appartenance du document
1565         *
1566         * @return string url d'accès au document
1567         */
1568        function compose_url_acces_document(string $nom_objet, string $champ, $id_objet) {
1569            return sprintf(
1570                'app/index.php?module=form&snippet=file&obj=%s&champ=%s&id=%s',
1571                $nom_objet,
1572                $champ,
1573                $id_objet
1574            );
1575        }
1576    
1577        /**
1578       * Récupère le journal d'horodatage dans le champ timestamp_log de       * Récupère le journal d'horodatage dans le champ timestamp_log de
1579       * l'enregistrement instancié.       * l'enregistrement instancié.
1580       *       *
# Line 1345  class task extends task_gen { Line 1602  class task extends task_gen {
1602          $this->checkAccessibility();          $this->checkAccessibility();
1603          $this->f->disableLog();          $this->f->disableLog();
1604          if ($this->getParameter('idx') !== ']'          if ($this->getParameter('idx') !== ']'
1605              && $this->getParameter('idx') !== '0') {              && $this->getParameter('idx') !== '0'
1606              //          ) {
1607              $this->view_form_json();              if ($this->getVal('json_payload') !== "{}") {
1608                    // On prend la Payload en BDD
1609                    echo(
1610                        json_encode(
1611                            json_decode($this->getVal('json_payload'), true),
1612                            JSON_UNESCAPED_SLASHES
1613                        )
1614                    );
1615                } else {
1616                    // On Calcule la payload JSON
1617                    $this->view_form_json();
1618                }
1619          }          }
1620          else {          else {
1621              $this->view_tab_json();              $this->view_tab_json();
# Line 1398  class task extends task_gen { Line 1666  class task extends task_gen {
1666          //          //
1667          $query = sprintf('          $query = sprintf('
1668              SELECT              SELECT
1669                  task.*                  DISTINCT (task.task),
1670                    task.type,
1671                    task.object_id,
1672                    task.dossier,
1673                    task.stream,
1674                    task.category,
1675                    task.creation_date,
1676                    task.creation_time,
1677                    task.last_modification_date,
1678                    task.last_modification_time,
1679                    task.comment
1680              FROM %1$stask              FROM %1$stask
1681              LEFT JOIN %1$slien_id_interne_uid_externe              LEFT JOIN %1$slien_id_interne_uid_externe
1682                  ON task.object_id = lien_id_interne_uid_externe.object_id                  ON task.object_id = lien_id_interne_uid_externe.object_id
# Line 1421  class task extends task_gen { Line 1699  class task extends task_gen {
1699          }          }
1700          $list_tasks = array();          $list_tasks = array();
1701          foreach ($res['result'] as $task) {          foreach ($res['result'] as $task) {
             unset($task['timestamp_log']);  
             unset($task['json_payload']);  
             if ($task['type'] === 'ajout_piece') {  
                 $val_dn = $this->get_document_numerise_data($task['object_id']);  
             }  
1702              if ($task['stream'] === 'output') {              if ($task['stream'] === 'output') {
1703                  $task['external_uids'] = array_merge(                  $task['external_uids'] = array_merge(
1704                      $this->get_all_external_uids($task['dossier'], array(), $category !== null ? $category : $task['category']),                      $this->get_all_external_uids($task['dossier'], array(), $category !== null ? $category : $task['category']),
# Line 1549  class task extends task_gen { Line 1822  class task extends task_gen {
1822                          $val_dt['tax_su_princ_surf2'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';                          $val_dt['tax_su_princ_surf2'] = isset($val_dt['tax_surf_tot_cstr']) === true ? $val_dt['tax_surf_tot_cstr'] : '';
1823                          $val_dt['tax_su_princ_surf_stat2'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';                          $val_dt['tax_su_princ_surf_stat2'] = isset($val_dt['tax_surf_loc_stat']) === true ? $val_dt['tax_surf_loc_stat'] : '';
1824                      }                      }
                     // if (preg_match('/[pP].*[tT].*[zZ]/', $val_dt['tax_ext_desc']) === 1) {  
                     //     $val_dt['tax_su_princ_surf4'] = $val_dt['tax_surf_tot_cstr'];  
                     //     $val_dt['tax_su_princ_surf_stat4'] = $val_dt['tax_surf_loc_stat'];  
                     // }  
                     // if (preg_match('/[pP].*[lL].*[uU].*[sS]/', $val_dt['tax_ext_desc']) === 1  
                     //     || preg_match('/[lL].*[eE].*[sS]/', $val_dt['tax_ext_desc']) === 1  
                     //     || preg_match('/[pP].*[sS].*[lL].*[aA]/', $val_dt['tax_ext_desc']) === 1  
                     //     || preg_match('/[pP].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1  
                     //     || preg_match('/[lL].*[lL].*[sS]/', $val_dt['tax_ext_desc']) === 1) {  
                     //     //  
                     //     $val_dt['tax_su_princ_surf3'] = $val_dt['tax_surf_tot_cstr'];  
                     //     $val_dt['tax_su_princ_surf_stat3'] = $val_dt['tax_surf_loc_stat'];  
                     // }  
1825                  }                  }
1826              }              }
1827          }          }
# Line 1697  class task extends task_gen { Line 1957  class task extends task_gen {
1957              "obj" => "instruction",              "obj" => "instruction",
1958              "idx" => $idx,              "idx" => $idx,
1959          ));          ));
1960            $id_instruction = $inst_instruction->getVal($inst_instruction->clePrimaire);
1961          if (count($inst_instruction->val) > 0) {          if (count($inst_instruction->val) > 0) {
1962              $val_instruction = array();              $val_instruction = array();
1963              $instruction_data = $inst_instruction->get_json_data();              $instruction_data = $inst_instruction->get_json_data();
# Line 1704  class task extends task_gen { Line 1965  class task extends task_gen {
1965              if ($instruction_data['om_fichier_instruction'] !== null              if ($instruction_data['om_fichier_instruction'] !== null
1966                  && $instruction_data['om_fichier_instruction'] !== '') {                  && $instruction_data['om_fichier_instruction'] !== '') {
1967                  //                  //
1968                  $instruction_with_doc = $inst_instruction->getVal($inst_instruction->clePrimaire);                  $instruction_with_doc = $id_instruction;
1969              }              }
1970              $inst_ev = $this->f->get_inst__om_dbform(array(              $inst_ev = $this->f->get_inst__om_dbform(array(
1971                  "obj" => "evenement",                  "obj" => "evenement",
# Line 1730  class task extends task_gen { Line 1991  class task extends task_gen {
1991              }              }
1992              if ($instruction_with_doc !== null) {              if ($instruction_with_doc !== null) {
1993                  //                  //
1994                  $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);                  $val_instruction['path'] = $this->compose_url_acces_document('instruction', 'om_fichier_instruction', $instruction_with_doc);
1995                }
1996                // Si il y a des annexes compatibles avec l'instruction elles sont ajoutées à la payload
1997                if (! empty($annexes = $this->ajouter_annexes_a_la_payload($id_instruction, true))) {
1998                    $val_instruction['annexes'] = $annexes;
1999              }              }
2000          }          }
2001          return $val_instruction;          return $val_instruction;
# Line 1777  class task extends task_gen { Line 2042  class task extends task_gen {
2042                  $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];                  $val_in['parametre_courriel_type_message'] = $phrase_type_notification['parametre_courriel_type_message'];
2043              }              }
2044    
2045              // Récupération des liens vers les documents et des id et type des annexes              if ($typeNotification == 'notification_signataire') {
2046              $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire), $category);                  $val_in['lien_page_signature'] = $inst_in->getLienPageSignature($inst_instruction);
2047              $cle = $category == PORTAL ? 'path' : 'lien_telechargement_document';              }
2048              $val_in[$cle] = $infoDocNotif['document']['path'];              else {
2049              $val_in['annexes'] = $infoDocNotif['annexes'];                  // Récupération des liens vers les documents et des id et type des annexes
2050                    $infoDocNotif = $inst_in->getInfosDocumentsNotif($inst_in->getVal($inst_in->clePrimaire), $category);
2051                    $cle = $category == PORTAL ? 'path' : 'lien_telechargement_document';
2052                    $val_in[$cle] = $infoDocNotif['document']['path'];
2053                    $val_in['annexes'] = $infoDocNotif['annexes'];
2054                }
2055          }          }
2056          return $val_in;          return $val_in;
2057      }      }
# Line 1834  class task extends task_gen { Line 2104  class task extends task_gen {
2104    
2105      protected function sort_instruction_data(array $values, array $res) {      protected function sort_instruction_data(array $values, array $res) {
2106          $fields = array(          $fields = array(
2107                "instruction",
2108              "date_evenement",              "date_evenement",
2109              "date_envoi_signature",              "date_envoi_signature",
2110              "date_retour_signature",              "date_retour_signature",
# Line 1862  class task extends task_gen { Line 2133  class task extends task_gen {
2133                  }                  }
2134              }              }
2135          }          }
2136    
2137            if (! empty($values['document_type_instruction'])){
2138                // Gestion du type de document :
2139                $document_type = $this->f->get_inst__om_dbform(array(
2140                    "obj" => "document_type",
2141                    "idx" => $values['document_type_instruction'],
2142                ));
2143                if (count($document_type->val) > 0) {
2144                    $res['document_type'] = $document_type->getVal('code');
2145                }
2146            }
2147          return $res;          return $res;
2148      }      }
2149    
# Line 1885  class task extends task_gen { Line 2167  class task extends task_gen {
2167                          INNER JOIN %1$sdemande_type                          INNER JOIN %1$sdemande_type
2168                              ON demande.demande_type = demande_type.demande_type                              ON demande.demande_type = demande_type.demande_type
2169                  WHERE                  WHERE
2170                      demande.instruction_recepisse = %2$s',                      demande.instruction_recepisse = %2$d',
2171                  DB_PREFIXE,                  DB_PREFIXE,
2172                  intval($instruction)                  intval($instruction)
2173              ),              ),
# Line 1905  class task extends task_gen { Line 2187  class task extends task_gen {
2187    
2188      protected function get_document_numerise_data(string $dn) {      protected function get_document_numerise_data(string $dn) {
2189          $val_dn = array();          $val_dn = array();
2190          $inst_dn = $this->f->get_inst__om_dbform(array(          $qres = $this->f->get_all_results_from_db_query(
2191              "obj" => "document_numerise",              sprintf(
2192              "idx" => $dn,                  'SELECT
2193          ));                      document_numerise.document_numerise,
2194          $val_dn = $inst_dn->get_json_data();                      document_numerise.uid,
2195          $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'));                      document_numerise.dossier,
2196          // Correspond à la nomenclature Plat'AU NATURE_PIECE                      document_numerise.nom_fichier,
2197          $val_dn['nature'] = $val_dn['document_numerise_nature_libelle'];                      document_numerise.date_creation,
2198                        document_numerise.document_numerise_type,
2199                        document_numerise.uid_dossier_final,
2200                        document_numerise.document_numerise_nature,
2201                        document_numerise.uid_thumbnail,
2202                        document_numerise.description_type,
2203                        document_numerise.document_travail,
2204                        document_numerise_type.code AS document_numerise_type_code,
2205                        document_numerise_type.libelle AS document_numerise_type_libelle,
2206                        document_numerise_nature.code AS document_numerise_nature_code,
2207                        document_numerise_nature.libelle AS document_numerise_nature_libelle,
2208                        document_numerise_nature.libelle AS nature
2209                    FROM
2210                        %1$sdocument_numerise
2211                    LEFT JOIN %1$sdocument_numerise_type
2212                        ON document_numerise.document_numerise_type = document_numerise_type.document_numerise_type
2213                    LEFT JOIN %1$sdocument_numerise_nature
2214                        ON document_numerise.document_numerise_nature = document_numerise_nature.document_numerise_nature
2215                    WHERE
2216                        document_numerise.document_numerise = %2$d',
2217                    DB_PREFIXE,
2218                    intval($dn)
2219                ),
2220                array(
2221                    "origin" => __METHOD__,
2222                )
2223            );
2224            if ($qres["result"] !== null
2225                && $qres["result"] !== ""
2226                && count($qres["result"]) > 0) {
2227                //
2228                $val_dn = $qres["result"][0];
2229            }
2230            $val_dn['path'] = $this->compose_url_acces_document('document_numerise', 'uid', $this->getVal('object_id'));
2231          return $val_dn;          return $val_dn;
2232      }      }
2233    
# Line 1981  class task extends task_gen { Line 2296  class task extends task_gen {
2296          if (isset($val_consultation['fichier']) === true          if (isset($val_consultation['fichier']) === true
2297              && $val_consultation['fichier'] !== '') {              && $val_consultation['fichier'] !== '') {
2298              //              //
2299              $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'));              $val_consultation['path_fichier'] = $this->compose_url_acces_document('consultation', 'fichier', $this->getVal('object_id'));
2300          }          }
2301          if (isset($val_consultation['om_fichier_consultation']) === true          if (isset($val_consultation['om_fichier_consultation']) === true
2302              && $val_consultation['om_fichier_consultation'] !== '') {              && $val_consultation['om_fichier_consultation'] !== '') {
2303              //              //
2304              $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'));              $val_consultation['path_om_fichier_consultation'] = $this->compose_url_acces_document('consultation', 'om_fichier_consultation', $this->getVal('object_id'));
2305          }          }
2306          return $val_consultation;          return $val_consultation;
2307      }      }
# Line 2002  class task extends task_gen { Line 2317  class task extends task_gen {
2317          return $val_service;          return $val_service;
2318      }      }
2319    
2320      protected function view_form_json($in_field = false) {      /**
2321         * Recupere le numéro du dossier ou le numéro du dossier parent s'il existe,
2322         * @param string $dossier : le numéro du dossier
2323         *
2324         * @return string $dossier | $dossier_parent
2325         */
2326        protected function get_id_dossier_parent(string $dossier){
2327            $query = sprintf('
2328                SELECT
2329                    dossier.dossier_parent
2330                FROM
2331                    %1$sdossier
2332                WHERE
2333                    dossier.dossier = \'%2$s\'
2334                ORDER BY
2335                    dossier.dossier',
2336                DB_PREFIXE,
2337                $dossier
2338            );
2339    
2340            $res = $this->f->get_all_results_from_db_query(
2341                $query,
2342                array(
2343                    "origin" => __METHOD__,
2344                    // "force_return" => true,
2345                )
2346            );
2347            if ($res['code'] === 'KO') {
2348                return false;
2349            }
2350            if ( isset($res['result'][0]["dossier_parent"])
2351                && ! empty($res['result'][0]["dossier_parent"] )
2352            ) {
2353                return $res['result'][0]["dossier_parent"];
2354            }
2355            return $dossier;
2356    
2357        }
2358    
2359        /**
2360         * Renvoie un tableau, contenant les informations nécessaire à l'ajout des annexes
2361         * à une payload.
2362         *
2363         * Récupère la liste des annexes paramétrées dans la table parametrage_annexe
2364         * pour l'instruction voulu. A partir de cette liste, construit un tableau avec
2365         * une entrée par annexe. Chaque entrées contiens les informations suivantes :
2366         *   - path          : url d'accès au fichier
2367         *   - document_type : code du document dans plat'au
2368         *   - document_id   : uid du document
2369         *
2370         * @param int  $instruction_id             : identifiant de l'instruction dont ont doit récuperer les annexes
2371         * @param bool $document_platau_uniquement : limite les annexes renvoyées a celles typées pour platau
2372         *
2373         * @return array $annexes
2374         */
2375        protected function ajouter_annexes_a_la_payload(int $instruction_id, bool $document_platau_uniquement = false) {
2376            $annexes = array();
2377            $annexes_a_lier = $this->f->recuperer_documents_a_annexe($instruction_id, $document_platau_uniquement);
2378            foreach ($annexes_a_lier as $annexe_info) {
2379                $objet = $annexe_info['objet'];
2380                $id_objet = $annexe_info['id'];
2381                // Récupère l'objet identifié en tant qu'annexe. Si l'objet n'est pas
2382                // récupéré on passe à l'itération suivante
2383                if (empty($inst_objet = $this->f->findObjectById($objet, $id_objet, true))) {
2384                    $this->f->addToLog(__METHOD__."() : L'objet *$objet* d'identifiant *$id_objet* n'a pas pu être instancié, son document ne peut pas être ajouté aux annexes.");
2385                    continue;
2386                }
2387    
2388                // Détermine le champ contenant l'uid et le type de document
2389                switch ($objet) {
2390                    case 'document_numerise':
2391                        $champ_uid = 'uid';
2392                        /* TODO : Gestion du document_type
2393                            $document_numerise_type = $this->f->get_inst__om_dbform(array(
2394                                "obj" => 'document_numerise_type',
2395                                "idx" => $inst_objet->getVal('document_numerise_type'),
2396                            ));
2397                            $document_numerise_type_categorie = $this->f->get_inst__om_dbform(array(
2398                                "obj" => 'document_numerise_type_categorie',
2399                                "idx" => $document_numerise_type->getVal('document_numerise_type_categorie'),
2400                            ));
2401                            $annexe['document_type'] =
2402                        */
2403                        $document_type = '';
2404                        break;
2405                    case 'instruction':
2406                        $champ_uid = 'om_fichier_instruction';
2407                        $inst_document_type = $this->f->findObjectById('document_type', $inst_objet->getVal('document_type_instruction'));
2408                        $document_type = $inst_document_type->getVal('code');
2409                        break;
2410                    case 'consultation':
2411                        $champ_uid = 'fichier';
2412                        // Gestion du document_type, Code platau de la consultation
2413                        $document_type = self::CODE_PLATAU_CONSULTATION;
2414                        break;
2415                    default :
2416                        // Si le type de document n'est pas géré on passe au document suivant.
2417                        // Ajoute une ligne dans les logs pour comprendre pourquoi le document n'apparaît pas.
2418                        $this->f->addToLog(
2419                            __METHOD__.
2420                            "() : L'ajout d'annexe lié aux *$objet* n'est pas implémenté.
2421                            Le document de *$objet* et d'identifiant *$id_objet* n'a pas été ajouté aux annexes.",
2422                            DEBUG_MODE
2423                        );
2424                        continue 2;
2425                }
2426    
2427                $annexes[] = array(
2428                    'path' => $this->compose_url_acces_document($objet, $champ_uid, $id_objet),
2429                    'document_type' => $document_type,
2430                    'document_id' => $inst_objet->getVal($champ_uid)
2431                );
2432            }
2433            return $annexes;
2434        }
2435    
2436        /**
2437         * Fonction de récupération des UID externes en fonction des besoins.
2438         * - Factorisation du code
2439         *
2440         * @param array $val : Tableau des valeurs du flux.
2441         * @param array $elements default array() : liste des élément à ajouter au tableau des UID_externes
2442         * @param array $val_external_uid default array() : tableau des UIDs externes du flux
2443         *
2444         * @return array $val_external_uid
2445         *
2446         */
2447        protected function val_external_uid(array $val, array $elements = array(), array $val_external_uid = array()) {
2448    
2449            if (in_array('dossier_autorisation', $elements)) {
2450                if (empty($val['dossier_autorisation']['dossier_autorisation'])) {
2451                    $dossier_autorisation = $val['dossier']['dossier_autorisation'];
2452                } else {
2453                    $dossier_autorisation = $val['dossier_autorisation']['dossier_autorisation'];
2454                }
2455                $val_external_uid['dossier_autorisation'] = $this->get_external_uid($dossier_autorisation, 'dossier_autorisation');
2456            }
2457    
2458            if (in_array('dossier', $elements)) {
2459                $val_external_uid['dossier'] = $this->get_external_uid(
2460                    $this->get_id_dossier_parent($val['dossier']['dossier']),
2461                    'dossier'
2462                );
2463            }
2464    
2465            if (in_array('piece', $elements)) {
2466                $val_external_uid['piece'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'piece');
2467            }
2468            if (in_array('dossier_consultation', $elements)) {
2469                $val_external_uid['dossier_consultation'] = $this->get_external_uid(
2470                    $this->get_id_dossier_parent($val['dossier']['dossier']),
2471                    'dossier_consultation'
2472                );
2473            }
2474            if (in_array('prescription', $elements)) {
2475                $val_external_uid['prescription'] = $this->get_external_uid($this->getVal('object_id'), 'prescription');
2476            }
2477            if (in_array('avis_dossier_consultation', $elements)) {
2478                $val_external_uid['avis_dossier_consultation'] = $this->get_external_uid(
2479                    $this->getVal('object_id'), 'avis_dossier_consultation');
2480            }
2481            if (in_array('decision', $elements)) {
2482                $val_external_uid['decision'] = $this->get_external_uid($this->getVal('object_id'), 'instruction');
2483                if ($val_external_uid['decision'] === '') {
2484                    $inst_instruction = $this->f->get_inst__om_dbform(array(
2485                        "obj" => "instruction",
2486                        "idx" => $this->getVal('object_id'),
2487                    ));
2488                    $val_external_uid['decision'] = $this->get_external_uid($inst_instruction->get_related_instructions_next('retour_signature'), 'instruction');
2489                }
2490            }
2491            if (in_array('instruction_notification', $elements)) {
2492                $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', PORTAL);
2493            }
2494            return $val_external_uid;
2495        }
2496    
2497        /**
2498         *
2499         *
2500         */
2501        protected function view_form_json(bool $in_field = false) {
2502          //          //
2503          $check_state = isset($this->valF['state']) === true ? $this->valF['state'] : $this->getVal('state');          $check_state = isset($this->valF['state']) === true ? $this->valF['state'] : $this->getVal('state');
2504          if ($check_state !== self::STATUS_CANCELED) {          if ($check_state !== self::STATUS_CANCELED) {
2505    
2506                $data = array('in_field' => $in_field);
2507                $this->f->module_manager->run_hooks('view_form_json_pre', $this, $data);
2508    
2509              // Liste des valeurs à afficher              // Liste des valeurs à afficher
2510              $val = array();              $val = array();
2511    
2512              //              //
2513              $val_task = array_combine($this->champs, $this->val);              $val_task = array_combine($this->champs, $this->val);
2514              foreach ($val_task as $key => $value) {              foreach ($val_task as $key => $value) {
# Line 2039  class task extends task_gen { Line 2540  class task extends task_gen {
2540                  $val = __('Impossible de recuperer la payload car l\'objet de reference n\'existe pas.');                  $val = __('Impossible de recuperer la payload car l\'objet de reference n\'existe pas.');
2541              } else {              } else {
2542    
2543                  $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);                  // L'historique n'est pas nécessaire dans l'affichage en JSON
2544                    if ($in_field === true) {
2545                        $val_task['timestamp_log'] = json_decode($val_task['timestamp_log'], true);
2546                    } else {
2547                        unset($val_task['timestamp_log']);
2548                    }
2549                  unset($val_task['timestamp_log_hidden']);                  unset($val_task['timestamp_log_hidden']);
2550                  $val['task'] = $val_task;                  $val['task'] = $val_task;
2551                  //                  //
2552                  if ($this->getVal('type') === 'creation_DA'                  if (in_array($this->getVal('type'), array('creation_DA', 'modification_DA'))) {
                     || $this->getVal('type') === 'modification_DA') {  
2553                      //                      //
2554                      $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));                      $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($this->getVal('object_id'));
2555                      $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');                      $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_autorisation');
2556                      $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);                      $val['dossier_autorisation_parcelle'] = $this->get_parcelles_data('dossier_autorisation', $val['dossier_autorisation']['dossier_autorisation']);
2557                      $val_external_uid = array();                      // Recupération des UID externes
2558                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier_autorisation']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation'));
                     $val['external_uids'] = $val_external_uid;  
2559                  }                  }
2560                  //                  //
2561                  if ($this->getVal('type') === 'creation_DI'                  if (in_array($this->getVal('type'), array('creation_DI', 'modification_DI', 'depot_DI'))) {
                     || $this->getVal('type') === 'modification_DI'  
                     || $this->getVal('type') === 'depot_DI') {  
2562                      //                      //
2563                      $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('object_id'));
2564                      $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_instruction');                      $val['donnees_techniques'] = $this->get_donnees_techniques_data($this->getVal('object_id'), 'dossier_instruction');
# Line 2064  class task extends task_gen { Line 2566  class task extends task_gen {
2566                      $architecte = isset($val['donnees_techniques']['architecte']) === true ? $val['donnees_techniques']['architecte'] : null;                      $architecte = isset($val['donnees_techniques']['architecte']) === true ? $val['donnees_techniques']['architecte'] : null;
2567                      $val['architecte'] = $this->get_architecte_data($architecte);                      $val['architecte'] = $this->get_architecte_data($architecte);
2568                      $val['dossier_parcelle'] = $this->get_parcelles_data('dossier', $val['dossier']['dossier']);                      $val['dossier_parcelle'] = $this->get_parcelles_data('dossier', $val['dossier']['dossier']);
2569                      $val_external_uid = array();                      // Recupération des UID externes
2570                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2571                  }                  }
2572                  //                  //
2573                  if ($this->getVal('type') === 'qualification_DI') {                  if ($this->getVal('type') === 'qualification_DI') {
2574                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2575                      $val_external_uid = array();                      // Recupération des UID externes
2576                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2577                  }                  }
2578                  //                  //
2579                  if ($this->getVal('type') === 'ajout_piece') {                  if (in_array($this->getVal('type'), array('ajout_piece', 'modification_piece', 'suppression_piece'))) {
2580                      $val['document_numerise'] = $this->get_document_numerise_data($this->getVal('object_id'));                      $val['document_numerise'] = $this->get_document_numerise_data($this->getVal('object_id'));
2581                      $val['dossier'] = $this->get_dossier_data($val['document_numerise']['dossier']);                      $val['dossier'] = $this->get_dossier_data($val['document_numerise']['dossier']);
2582                      $val_external_uid = array();                      // Recupération des UID externes
2583                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'piece'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val_external_uid['piece'] = $this->get_external_uid($val['document_numerise']['document_numerise'], 'piece');  
                     $val['external_uids'] = $val_external_uid;  
2584                  }                  }
2585                  //                  //
2586                  if ($this->getVal('type') === 'decision_DI') {                  if ($this->getVal('type') === 'decision_DI') {
# Line 2095  class task extends task_gen { Line 2590  class task extends task_gen {
2590                      if (isset($val['instruction']['signataire_arrete']) === true) {                      if (isset($val['instruction']['signataire_arrete']) === true) {
2591                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2592                      }                      }
2593                      $val_external_uid = array();                      // Recupération des UID externes
2594                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2595                  }                  }
2596                  //                  //
2597                  if ($this->getVal('type') === 'incompletude_DI') {                  if (in_array($this->getVal('type'), array('incompletude_DI', 'completude_DI'))) {
2598                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2599                      $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2600                      $val_external_uid = array();                      // Recupération des UID externes
2601                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2602                  }                  }
2603                  //                  //
2604                  if ($this->getVal('type') === 'completude_DI') {                  if (in_array($this->getVal('type'), array('lettre_incompletude', 'lettre_majoration'))) {
                     $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));  
                     $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));  
                     $val_external_uid = array();  
                     $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');  
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
                 }  
                 //  
                 if ($this->getVal('type') === 'lettre_incompletude'  
                     || $this->getVal('type') === 'lettre_majoration') {  
2605                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2606                      $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction'] = $this->get_instruction_data($val['dossier']['dossier'], 'with-id', array('with-id' => $this->getVal('object_id')));
2607                      $val['lettre_petitionnaire'] = $this->get_lettre_petitionnaire_data($val['dossier']['dossier'], $this->getVal('type'));                      $val['lettre_petitionnaire'] = $this->get_lettre_petitionnaire_data($val['dossier']['dossier'], $this->getVal('type'));
2608                      $val_external_uid = array();                      // Recupération des UID externes
2609                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2610                  }                  }
2611                  //                  //
2612                  if ($this->getVal('type') === 'pec_metier_consultation') {                  if ($this->getVal('type') === 'pec_metier_consultation') {
2613                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2614                      $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction'] = $this->get_instruction_data(
2615                      $val_external_uid = array();                          $this->getVal('dossier'),
2616                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                          'with-id',
2617                      $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                          array('with-id' => $this->getVal('object_id'))
2618                      $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');                      );
2619                      $val['external_uids'] = $val_external_uid;                      // Recupération des UID externes
2620                        $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'dossier_consultation'));
2621                  }                  }
2622                  //                  //
2623                  if ($this->getVal('type') === 'avis_consultation') {                  if ($this->getVal('type') === 'avis_consultation') {
2624                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2625                      $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction'] = $this->get_instruction_data(
2626                            $this->getVal('dossier'),
2627                            'with-id',
2628                            array('with-id' => $this->getVal('object_id'))
2629                        );
2630                      $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));                      $val['avis_decision'] = $this->get_avis_decision_data($this->getVal('dossier'));
2631                      if (isset($val['instruction']['signataire_arrete']) === true) {                      if (isset($val['instruction']['signataire_arrete']) === true) {
2632                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2633                      }                      }
2634                      $val_external_uid = array();                      // Recupération des UID externes
2635                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'dossier_consultation', 'avis_dossier_consultation'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');  
                     $val_external_uid['avis_dossier_consultation'] = $this->get_external_uid($this->getVal('object_id'), 'avis_dossier_consultation');  
                     $val['external_uids'] = $val_external_uid;  
2636                  }                  }
2637                  // XXX WIP                  //
2638                  if ($this->getVal('type') === 'creation_consultation') {                  if ($this->getVal('type') === 'creation_consultation') {
2639                      //                      //
2640                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2641                      $val['consultation'] = $this->get_consultation_data($this->getVal('object_id'));                      $val['consultation'] = $this->get_consultation_data($this->getVal('object_id'));
2642                      $val['service'] = $this->get_service_data($val['consultation']['service']);                      $val['service'] = $this->get_service_data($val['consultation']['service']);
2643                      $val_external_uid = array();                      // Recupération des UID externes
2644                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier'));
                     $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');  
                     $val['external_uids'] = $val_external_uid;  
2645                  }                  }
2646                  //                  //
2647                  if ($this->getVal('type') === 'envoi_CL') {                  if ($this->getVal('type') === 'envoi_CL') {
# Line 2171  class task extends task_gen { Line 2649  class task extends task_gen {
2649                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2650                      $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction'] = $this->get_instruction_data($this->getVal('dossier'), 'with-id', array('with-id' => $this->getVal('object_id')));
2651                      $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($val['dossier']['dossier_autorisation']);                      $val['dossier_autorisation'] = $this->get_dossier_autorisation_data($val['dossier']['dossier_autorisation']);
2652                      $val_external_uid = array();                      // Recupération des UID externes
2653                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'decision'));
                     $val_external_uid['dossier'] = $this->get_external_uid($this->getVal('dossier'), 'dossier');  
                     $val_external_uid['decision'] = $this->get_external_uid($this->getVal('object_id'), 'instruction');  
                     if ($val_external_uid['decision'] === '') {  
                         $inst_instruction = $this->f->get_inst__om_dbform(array(  
                             "obj" => "instruction",  
                             "idx" => $this->getVal('object_id'),  
                         ));  
                         $val_external_uid['decision'] = $this->get_external_uid($inst_instruction->get_related_instructions_next('retour_signature'), 'instruction');  
                     }  
                     $val['external_uids'] = $val_external_uid;  
2654                  }                  }
2655                  if ($this->getVal('type') === 'notification_instruction'                  if (in_array(
2656                      || $this->getVal('type') === 'notification_recepisse'                          $this->getVal('type'),
2657                      || $this->getVal('type') === 'notification_decision'                          array(
2658                      || $this->getVal('type') === 'notification_service_consulte'                              'notification_instruction',
2659                      || $this->getVal('type') === 'notification_tiers_consulte') {                              'notification_recepisse',
2660                                'notification_decision',
2661                                'notification_service_consulte',
2662                                'notification_tiers_consulte',
2663                                'notification_signataire'
2664                            )
2665                    )) {
2666                      //                      //
2667                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));                      $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2668                      $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;                      $dossier_id = isset($val['dossier']['dossier']) === true ? $val['dossier']['dossier'] : null;
2669                      $val['demandeur'] = $this->get_demandeurs_data($dossier_id);                      $val['demandeur'] = $this->get_demandeurs_data($dossier_id);
2670                      $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));                      $val['instruction_notification'] = $this->get_instruction_notification_data($this->getVal('category'), 'with-id', array('with-id' => $this->getVal('object_id')));
2671                      $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;                      $instruction_id = isset($val['instruction_notification']['instruction']) === true ? $val['instruction_notification']['instruction'] : null;
                     $instruction_annexes = isset($val['instruction_notification']['annexes']) === true ? $val['instruction_notification']['annexes'] : null;  
2672                      $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));                      $val['instruction'] = $this->get_instruction_data($dossier_id, 'with-id', array('with-id' => $instruction_id));
2673                      // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une                      // Précise qu'il s'agit d'une instruction final si l'instruction est liée à une
2674                      // demande dont le type ne génère pas de dossier                      // demande dont le type ne génère pas de dossier
2675                      if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {                      if ($this->is_demande_instruction_recepisse_without_dossier($instruction_id) === true) {
2676                          $val['instruction']['final'] = 't';                          $val['instruction']['final'] = 't';
2677                      }                      }
2678                        // Recupération des UID externes
2679                      $val_external_uid = array();                      $val_external_uid = array();
2680                      // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier                      // Affiche l'identifiant externe lié à l'instruction si cette combinaison existe, sinon celui lié au dossier
2681                      $val_external_uid['demande'] = $this->get_external_uid($instruction_id, 'demande') !== '' ? $this->get_external_uid($instruction_id, 'demande') : $this->get_external_uid($dossier_id, 'demande');                      $val_external_uid['demande'] = $this->get_external_uid($instruction_id, 'demande') !== '' ? $this->get_external_uid($instruction_id, 'demande') : $this->get_external_uid($dossier_id, 'demande');
2682                      $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', PORTAL, 'ASC');                      $val_external_uid['demande (instruction)'] = $this->get_external_uid($instruction_id, 'demande', PORTAL, 'ASC');
2683                      $val_external_uid['instruction_notification'] = $this->get_external_uid($this->getVal('object_id'), 'instruction_notification', PORTAL);                      $val['external_uids'] = $this->val_external_uid($val, array('demande', 'demande (instruction)', 'instruction_notification'), $val_external_uid );
                     $val['external_uids'] = $val_external_uid;  
2684                  }                  }
2685                  //                  //
2686                  if ($this->getVal('type') === 'prescription') {                  if ($this->getVal('type') === 'prescription') {
# Line 2217  class task extends task_gen { Line 2690  class task extends task_gen {
2690                      if (isset($val['instruction']['signataire_arrete']) === true) {                      if (isset($val['instruction']['signataire_arrete']) === true) {
2691                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);                          $val['signataire_arrete'] = $this->get_signataire_arrete_data($val['instruction']['signataire_arrete']);
2692                      }                      }
2693                      $val_external_uid = array();                      // Recupération des UID externes
2694                      $val_external_uid['dossier_autorisation'] = $this->get_external_uid($val['dossier']['dossier_autorisation'], 'dossier_autorisation');                      $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'dossier_consultation', 'prescription'));
2695                      $val_external_uid['dossier'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier');                  }
2696                      $val_external_uid['dossier_consultation'] = $this->get_external_uid($val['dossier']['dossier'], 'dossier_consultation');                  //
2697                      $val_external_uid['prescription'] = $this->get_external_uid($this->getVal('object_id'), 'prescription');                  if ($this->getVal('type') === 'ajout_documents_specifiques') {
2698                      $val['external_uids'] = $val_external_uid;                      // Data blocs
2699                        $val['dossier'] = $this->get_dossier_data($this->getVal('dossier'));
2700                        $val['instruction'] = $this->get_instruction_data(
2701                            $this->getVal('dossier'),
2702                            'with-id',
2703                            array('with-id' => $this->getVal('object_id'))
2704                        );
2705                        // Recupération des UID externes
2706                        $val['external_uids'] = $this->val_external_uid($val, array('dossier_autorisation', 'dossier', 'dossier_consultation'));
2707                  }                  }
2708              }              }
2709    
2710                $data = array('in_field' => $in_field, 'val' => &$val);
2711                $this->f->module_manager->run_hooks('view_form_json_post', $this, $data);
2712    
2713              if ($in_field === true) {              if ($in_field === true) {
2714                  return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);                  return json_encode($val, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
2715              } else {              } else {
# Line 2264  class task extends task_gen { Line 2748  class task extends task_gen {
2748          }          }
2749    
2750          // Sauvegarde de l'uid externe retourné          // Sauvegarde de l'uid externe retourné
2751          if ($this->f->get_submitted_post_value('external_uid') !== null) {          $external_uid = $this->f->get_submitted_post_value('external_uid');
2752            if ($external_uid !== null) {
2753              //              //
2754              $objects = $this->get_objects_by_task_type($this->getVal('type'), $this->getVal('stream'));              $objects = $this->get_objects_by_task_type($this->getVal('type'), $this->getVal('stream'));
2755                // Si l'identifiant externe contient le préfixe pour identifier les codes de suivi,
2756                // le seul objet concerné sera celui du code de suivi
2757                if (strpos($external_uid, self::CS_PREFIX) !== false) {
2758                    $objects = array('code-suivi', );
2759                    $external_uid = str_replace(self::CS_PREFIX, '', $external_uid);
2760                }
2761              foreach ($objects as $object) {              foreach ($objects as $object) {
2762                  $inst_lien = $this->f->get_inst__om_dbform(array(                  $inst_lien = $this->f->get_inst__om_dbform(array(
2763                      "obj" => "lien_id_interne_uid_externe",                      "obj" => "lien_id_interne_uid_externe",
2764                      "idx" => ']',                      "idx" => ']',
2765                  ));                  ));
2766                  $object_id = $this->getVal('object_id');                  $object_id = $this->getVal('object_id');
2767                  $is_exists = $inst_lien->is_exists($object, $object_id, $this->f->get_submitted_post_value('external_uid'), $this->getVal('dossier'));                  $is_exists = $inst_lien->is_exists($object, $object_id, $external_uid, $this->getVal('dossier'));
2768                  // Dans le cas spécifique de la mise à jour d'une notification                  // Dans le cas spécifique de la mise à jour d'une notification
2769                  // et de la création d'une liaison d'identifiant pour l'objet demande,                  // et de la création d'une liaison d'identifiant pour l'objet demande,
2770                  // l'identifiant de l'objet n'est plus celui de la notification                  // l'identifiant de l'objet n'est plus celui de la notification
# Line 2283  class task extends task_gen { Line 2774  class task extends task_gen {
2774                          || $this->getVal('type') === 'notification_instruction'                          || $this->getVal('type') === 'notification_instruction'
2775                          || $this->getVal('type') === 'notification_decision'                          || $this->getVal('type') === 'notification_decision'
2776                          || $this->getVal('type') === 'notification_service_consulte'                          || $this->getVal('type') === 'notification_service_consulte'
2777                          || $this->getVal('type') === 'notification_tiers_consulte')) {                          || $this->getVal('type') === 'notification_tiers_consulte'
2778                            || $this->getVal('type') === 'notification_signataire')) {
2779                      //                      //
2780                      $object_id = $this->getVal('dossier');                      $object_id = $this->getVal('dossier');
2781                      // Il ne doit y avoir qu'une liaison entre le numéro du dossier interne et un uid externe de "demande"                      // Il ne doit y avoir qu'une liaison entre le numéro du dossier interne et un uid externe de "demande"
# Line 2294  class task extends task_gen { Line 2786  class task extends task_gen {
2786                          'lien_id_interne_uid_externe' => '',                          'lien_id_interne_uid_externe' => '',
2787                          'object' => $object,                          'object' => $object,
2788                          'object_id' => $object_id,                          'object_id' => $object_id,
2789                          'external_uid' => $this->f->get_submitted_post_value('external_uid'),                          'external_uid' => $external_uid,
2790                          'dossier' => $this->getVal('dossier'),                          'dossier' => $this->getVal('dossier'),
2791                          'category' => $this->getVal('category'),                          'category' => $this->getVal('category'),
2792                      );                      );
# Line 2404  class task extends task_gen { Line 2896  class task extends task_gen {
2896              && $stream === 'output') {              && $stream === 'output') {
2897              $objects = array('prescription', );              $objects = array('prescription', );
2898          }          }
2899          if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {          if (in_array($type, array('ajout_piece', 'add_piece', 'modification_piece', 'suppression_piece', )) === true) {
2900              $objects = array('piece', );              $objects = array('piece', );
2901          }          }
2902          if (in_array($type, array('creation_consultation', )) === true) {          if (in_array($type, array('creation_consultation', )) === true) {
2903              $objects = array('consultation', );              $objects = array('consultation', );
2904          }          }
2905            if (in_array($type, array('ajout_documents_specifiques', )) === true
2906                && $stream === 'output') {
2907                $objects = array('dossier', 'instruction', 'instruction_notification',);
2908            }
2909          if (in_array($type, array('pec_metier_consultation', )) === true          if (in_array($type, array('pec_metier_consultation', )) === true
2910              && $stream === 'input') {              && $stream === 'input') {
2911              $objects = array('pec_metier_consultation', );              $objects = array('pec_metier_consultation', );
# Line 2430  class task extends task_gen { Line 2926  class task extends task_gen {
2926                  'notification_decision',                  'notification_decision',
2927                  'notification_service_consulte',                  'notification_service_consulte',
2928                  'notification_tiers_consulte',                  'notification_tiers_consulte',
2929                    'notification_signataire',
2930              )              )
2931          ) === true) {          ) === true) {
2932              $objects = array('instruction_notification', 'demande', );              $objects = array('instruction_notification', 'demande', );
# Line 2450  class task extends task_gen { Line 2947  class task extends task_gen {
2947          if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {          if (in_array($type, array('creation_DA', 'modification_DA', )) === true) {
2948              $tables = array('dossier_autorisation', );              $tables = array('dossier_autorisation', );
2949          }          }
2950          if (in_array($type, array('creation_DI', 'depot_DI', )) === true) {          if (in_array($type, array('creation_DI', 'depot_DI', 'modification_DI',)) === true) {
2951              $tables = array('dossier', );              $tables = array('dossier', );
2952          }          }
2953          if (in_array($type, array('qualification_DI', )) === true) {          if (in_array($type, array('qualification_DI', )) === true) {
# Line 2472  class task extends task_gen { Line 2969  class task extends task_gen {
2969          )) === true) {          )) === true) {
2970              $tables = array('instruction', );              $tables = array('instruction', );
2971          }          }
2972            if (in_array($type, array('ajout_documents_specifiques', )) === true
2973                && in_array($stream, array('output', 'all', )) === true ) {
2974                $tables = array('instruction', 'dossier', );
2975            }
2976          if (in_array($type, array('envoi_CL', )) === true) {          if (in_array($type, array('envoi_CL', )) === true) {
2977              $objects = array('instruction', );              $tables = array('instruction', );
2978          }          }
2979          if (in_array($type, array('pec_metier_consultation', )) === true          if (in_array($type, array('pec_metier_consultation', )) === true
2980              && $stream === 'output') {              && $stream === 'output') {
2981              $tables = array('instruction', );              $tables = array('dossier', 'instruction', 'instruction_notification', );
2982          }          }
2983          if (in_array($type, array('avis_consultation', )) === true          if (in_array($type, array('avis_consultation', )) === true
2984              && $stream === 'output') {              && $stream === 'output') {
# Line 2487  class task extends task_gen { Line 2988  class task extends task_gen {
2988              && $stream === 'output') {              && $stream === 'output') {
2989              $tables = array('instruction', );              $tables = array('instruction', );
2990          }          }
2991          if (in_array($type, array('ajout_piece', 'add_piece', )) === true) {          if (in_array($type, array('ajout_piece', 'add_piece', 'modification_piece', 'suppression_piece', )) === true) {
2992              $tables = array('document_numerise', );              $tables = array('document_numerise', );
2993          }          }
2994          if (in_array($type, array('creation_consultation', )) === true) {          if (in_array($type, array('creation_consultation', )) === true) {
# Line 2512  class task extends task_gen { Line 3013  class task extends task_gen {
3013                  'notification_instruction',                  'notification_instruction',
3014                  'notification_decision',                  'notification_decision',
3015                  'notification_service_consulte',                  'notification_service_consulte',
3016                  'notification_tiers_consulte'                  'notification_tiers_consulte',
3017                    'notification_signataire'
3018              )              )
3019          ) === true) {          ) === true) {
3020              $tables = array('instruction_notification', );              $tables = array('instruction_notification', );

Legend:
Removed from v.14542  
changed lines
  Added in v.19307

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26