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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10713 - (hide annotations)
Thu Nov 4 13:35:54 2021 UTC (3 years, 3 months ago) by softime
File size: 325410 byte(s)
* Fusion de la branche d'intégration 5.0.1-develop dans le trunk

1 mbroquet 3730 <?php
2     /**
3 softime 7996 * DBFORM - 'instruction' - Surcharge gen.
4     *
5 mbroquet 3730 * specific :
6     * - cle secondaire
7     * destruction autorisée que pour le dernier evenement
8     * [delete the last event ]
9     * - variable globale [global variables]
10     * var $retourformulaire;
11     * var $idxformulaire;
12     * - modification des données dans dossier trigger avant
13     * [modify dossier data with trigger function]
14     * - function mois_date : pour ajouter des mois a une date
15     * [add months (delay) and calculation final date]
16     * - voir script_lang.js : bible ...
17 softime 7996 *
18 mbroquet 3730 * @package openfoncier
19 nhaye 5254 * @version SVN : $Id$
20 mbroquet 3730 */
21    
22     //
23     require_once "../gen/obj/instruction.class.php";
24    
25     //
26     class instruction extends instruction_gen {
27    
28     // Champs contenant les UID des fichiers
29     var $abstract_type = array(
30     "om_fichier_instruction" => "file",
31     );
32 softime 8989
33 mbroquet 3730 var $valEvenement;
34     var $restriction_valid = null;
35     // Tableau contenant une partie des métadonnées arrêtés
36     var $metadonneesArrete;
37    
38 fmichon 3892 /**
39     * Instance de la classe dossier
40     *
41     * @var mixed
42     */
43     var $inst_dossier = null;
44    
45 softime 5169 /**
46     * Instance de la classe instructeur
47     *
48     * @var mixed
49     */
50     var $inst_instructeur = null;
51    
52     /**
53     * Instance de la classe om_utilisateur
54     *
55     * @var mixed
56     */
57     var $inst_om_utilisateur = null;
58    
59 mbroquet 3730 var $metadata = array(
60     "om_fichier_instruction" => array(
61     "dossier" => "getDossier",
62     "dossier_version" => "getDossierVersion",
63     "numDemandeAutor" => "getNumDemandeAutor",
64     "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
65     "typeInstruction" => "getTypeInstruction",
66     "statutAutorisation" => "getStatutAutorisation",
67     "typeAutorisation" => "getTypeAutorisation",
68     "dateEvenementDocument" => "getDateEvenementDocument",
69     "groupeInstruction" => 'getGroupeInstruction',
70     "title" => 'getTitle',
71 softime 6272 'concerneERP' => 'get_concerne_erp',
72 softime 10573
73     'date_cloture_metier' => 'getDossierDateDecision',
74     'type' => 'getDocumentType',
75     'dossier_autorisation_type_detaille' => 'getDossierAutorisationTypeDetaille',
76     'dossier_instruction_type' => 'getDossierInstructionTypeLibelle',
77     'region' => 'getDossierRegion',
78     'departement' => 'getDossierDepartement',
79     'commune' => 'getDossierCommune',
80     'annee' => 'getDossierAnnee',
81     'division' => 'getDossierDivision',
82     'collectivite' => 'getDossierServiceOrCollectivite'
83 mbroquet 3730 ),
84     "arrete" => array(
85     "numArrete" => "getNumArrete",
86     "ReglementaireArrete" => "getReglementaireArrete",
87     "NotificationArrete" => "getNotificationArrete",
88     "dateNotificationArrete" => "getDateNotificationArrete",
89     "controleLegalite" => "getControleLegalite",
90     "dateSignature" => "getDateSignature",
91     "nomSignataire" => "getNomSignataire",
92     "qualiteSignataire" => "getQualiteSignataire",
93     "ap_numRue" => "getAp_numRue",
94     "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
95     "ap_codePostal" => "getAp_codePostal",
96     "ap_ville" => "getAp_ville",
97     "activite" => "getActivite",
98     "dateControleLegalite" => "getDateControleLegalite",
99 softime 10573 )
100 mbroquet 3730 );
101    
102 softime 9245 /**
103     * Flag pour identifier la reprise de l'instruction d'un dossier.
104     * Le statut de l'état passe de "cloture" à "encours".
105     *
106     * @var boolean
107     */
108     var $di_reopened = null;
109    
110 mbroquet 3730 // {{{ Gestion de la confidentialité des données spécifiques
111    
112     /**
113     * Définition des actions disponibles sur la classe.
114     *
115     * @return void
116     */
117     function init_class_actions() {
118    
119     parent::init_class_actions();
120    
121     // ACTION - 000 - ajouter
122     // Modifie la condition d'affichage du bouton ajouter
123 softime 6565 $this->class_actions[0]["condition"] = array("is_addable", "can_user_access_dossier_contexte_ajout");
124 mbroquet 3730
125     // ACTION - 001 - modifier
126     // Modifie la condition et le libellé du bouton modifier
127 softime 6565 $this->class_actions[1]["condition"] = array(
128     "is_editable",
129     "is_finalizable_without_bypass",
130     "can_user_access_dossier_contexte_modification",
131 softime 10573 "is_evenement_modifiable",
132 softime 6565 );
133 mbroquet 3730 $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
134    
135     // ACTION - 002 - supprimer
136     // Modifie la condition et le libellé du bouton supprimer
137 softime 6565 $this->class_actions[2]["condition"] = array(
138     "is_deletable",
139     "is_finalizable_without_bypass",
140 softime 10573 "can_user_access_dossier_contexte_modification",
141     "is_evenement_supprimable",
142 softime 6565 );
143 mbroquet 3730 $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
144    
145 softime 6565 // ACTION - 003 - consulter
146     //
147     $this->class_actions[3]["condition"] = "can_user_access_dossier_contexte_modification";
148    
149 mbroquet 3730 // ACTION - 100 - finaliser
150     // Finalise l'enregistrement
151     $this->class_actions[100] = array(
152     "identifier" => "finaliser",
153     "portlet" => array(
154     "type" => "action-direct",
155     "libelle" => _("Finaliser le document"),
156     "order" => 110,
157     "class" => "finalise",
158     ),
159     "view" => "formulaire",
160     "method" => "finalize",
161     "button" => "finaliser",
162     "permission_suffix" => "finaliser",
163 softime 6565 "condition" => array(
164     "is_finalizable",
165     "is_finalizable_without_bypass",
166     "has_an_edition",
167     "can_user_access_dossier_contexte_modification",
168     ),
169 mbroquet 3730 );
170    
171     // ACTION - 110 - definaliser
172     // Finalise l'enregistrement
173     $this->class_actions[110] = array(
174     "identifier" => "definaliser",
175     "portlet" => array(
176     "type" => "action-direct",
177     "libelle" => _("Reprendre la redaction du document"),
178     "order" => 110,
179     "class" => "definalise",
180     ),
181     "view" => "formulaire",
182     "method" => "unfinalize",
183     "button" => "definaliser",
184     "permission_suffix" => "definaliser",
185 softime 6565 "condition" => array(
186     "is_unfinalizable",
187     "is_unfinalizable_without_bypass",
188     "can_user_access_dossier_contexte_modification",
189 softime 10573 "is_not_sent_for_signature",
190 softime 6565 ),
191 mbroquet 3730 );
192    
193     // ACTION - 120 - edition
194     // Affiche l'édition
195     $this->class_actions[120] = array(
196     "identifier" => "edition",
197     "portlet" => array(
198     "type" => "action-blank",
199     "libelle" => _("Edition"),
200     "order" => 100,
201     "class" => "pdf-16",
202     ),
203     "view" => "view_edition",
204 softime 6565 "condition" => array("has_an_edition", "can_user_access_dossier_contexte_modification"),
205 mbroquet 3730 "permission_suffix" => "om_fichier_instruction_telecharger",
206     );
207    
208     // ACTION - 125 - modifier_suivi
209     // Suivi des dates
210     $this->class_actions[125] = array(
211     "identifier" => "modifier_suivi",
212     "portlet" => array(
213     "type" => "action-self",
214     "libelle" => _("Suivi des dates"),
215     "order" => 125,
216     "class" => "suivi-dates-16",
217     ),
218     "crud" => "update",
219 softime 6565 "condition" => array("can_monitoring_dates", "can_user_access_dossier_contexte_modification"),
220 mbroquet 3730 "permission_suffix" => "modification_dates",
221     );
222    
223     // ACTION - 130 - bible
224     // Affiche la bible
225     $this->class_actions[130] = array(
226     "identifier" => "bible",
227     "view" => "view_bible",
228     "permission_suffix" => "modifier",
229     );
230    
231     // ACTION - 140 - bible_auto
232     // Active la bible automatique
233     $this->class_actions[140] = array(
234     "identifier" => "bible_auto",
235     "view" => "view_bible_auto",
236     "permission_suffix" => "modifier",
237     );
238    
239     // ACTION - 150 - suivi_bordereaux
240     // Imprimer un bordereau d'envoi
241     $this->class_actions[150] = array(
242     "identifier" => "suivi_bordereaux",
243     "view" => "view_suivi_bordereaux",
244     "permission_suffix" => "consulter",
245     );
246    
247     // ACTION - 160 - suivi_envoi_lettre_rar
248     // Imprimer un bordereau d'envoi
249     $this->class_actions[160] = array(
250     "identifier" => "suivi_envoi_lettre_rar",
251     "view" => "view_suivi_envoi_lettre_rar",
252     "permission_suffix" => "consulter",
253     );
254    
255     // ACTION - 170 - suivi_mise_a_jour_des_dates
256     // Mettre à jour les dates de l'instruction
257     $this->class_actions[170] = array(
258     "identifier" => "suivi_mise_a_jour_des_dates",
259     "view" => "view_suivi_mise_a_jour_des_dates",
260     "permission_suffix" => "consulter",
261     );
262    
263     // ACTION - 180 - pdf_lettre_rar
264 softime 8989 // Génère PDF sur bordereaux de lettres AR
265 mbroquet 3730 $this->class_actions[180] = array(
266     "identifier" => "pdf_lettre_rar",
267     "view" => "view_pdf_lettre_rar",
268     "permission_suffix" => "consulter",
269     );
270    
271     // ACTION - 190 - bordereau_envoi_maire
272     // Formulaire pour générer le bordereau d'envoi au maire
273     // Met à jour la date d'envoi à signature du maire
274     $this->class_actions[190] = array(
275     "identifier" => "bordereau_envoi_maire",
276     "view" => "view_bordereau_envoi_maire",
277     "permission_suffix" => "bordereau_envoi_maire",
278     );
279    
280     // ACTION - 200 - generate_bordereau_envoi_maire
281     // Génère PDF bordereau d'envoi au maire
282     $this->class_actions[200] = array(
283     "identifier" => "generate_bordereau_envoi_maire",
284     "view" => "view_generate_bordereau_envoi_maire",
285     "permission_suffix" => "bordereau_envoi_maire",
286     );
287 nmeucci 4108
288     // ACTION - 210 - notifier_commune
289     // Notifie la commune par mail d'un évément d'instruction finalisé
290     $this->class_actions[210] = array(
291     "identifier" => "notifier_commune",
292     "portlet" => array(
293     "type" => "action-direct-with-confirmation",
294     "libelle" => _("Notifier la commune par courriel"),
295     "order" => 210,
296     "class" => "notifier_commune-16",
297     ),
298     "view" => "formulaire",
299     "method" => "notifier_commune",
300     "permission_suffix" => "notifier_commune",
301 softime 6565 "condition" => array("is_notifiable", "can_user_access_dossier_contexte_modification"),
302 nmeucci 4108 );
303 nmeucci 4317
304     // ACTION - 220 - generate_suivi_bordereaux
305     // GénÚre PDF bordereaux
306     $this->class_actions[220] = array(
307     "identifier" => "generate_suivi_bordereaux",
308     "view" => "view_generate_suivi_bordereaux",
309 softime 6565 "permission_suffix" => "consulter",
310     );
311 softime 7521
312     // ACTION - 777 - pdf_temp
313     // Crée un PDF temporaire et affiche son contenu en base64
314     $this->class_actions[777] = array(
315     "identifier" => "pdf_temp",
316     "view" => "view_pdf_temp",
317     "permission_suffix" => "modifier",
318     "condition" => array("can_user_access_dossier_contexte_modification"),
319     );
320 softime 8593
321     // ACTION - 701
322     $this->class_actions[701] = array(
323     "identifier" => "enable-edition-integrale",
324     "portlet" => array(
325     "type" => "action-direct-with-confirmation",
326     "libelle" => _("Rédaction libre"),
327     "order" => 50,
328     "class" => "redac-libre-16",
329     ),
330     "view" => "formulaire",
331     "method" => "enable_edition_integrale",
332     "permission_suffix" => "modifier",
333     "condition" => array(
334     "is_editable",
335     "is_finalizable_without_bypass",
336     "can_user_access_dossier_contexte_modification",
337     "is_edition_integrale_not_enabled",
338     "is_option_redaction_libre_enabled",
339     "has_an_edition",
340     ),
341     );
342     // ACTION - 702
343     $this->class_actions[702] = array(
344     "identifier" => "disable-edition-integrale",
345     "portlet" => array(
346     "type" => "action-direct-with-confirmation",
347     "libelle" => _("Rédaction par compléments"),
348     "order" => 50,
349     "class" => "redac-complement-16",
350     ),
351     "view" => "formulaire",
352     "method" => "disable_edition_integrale",
353     "permission_suffix" => "modifier",
354     "condition" => array(
355     "is_editable",
356     "is_finalizable_without_bypass",
357     "can_user_access_dossier_contexte_modification",
358     "is_edition_integrale_enabled",
359     "is_option_redaction_libre_enabled",
360     "has_an_edition",
361     ),
362     );
363     // ACTION - 300 - evenement_has_an_edition_json
364     //
365     $this->class_actions[300] = array(
366     "identifier" => "evenement_has_an_edition_json",
367     "view" => "view_evenement_has_an_edition_json",
368     "permission_suffix" => "consulter",
369     );
370 softime 10573
371     // ACTION - 301 - evenement_has_a_commentaire
372     //
373     $this->class_actions[301] = array(
374     "identifier" => "evenement_has_a_commentaire_json",
375     "view" => "view_evenement_has_a_commentaire_json",
376     "permission_suffix" => "consulter",
377     );
378    
379     // ACTION - 400 - Envoyer en signature
380     // Cet évenement permet d'envoyer le document au parapheur pour signature
381     $this->class_actions[400] = array(
382     "identifier" => "envoyer_a_signature",
383     "portlet" => array(
384     "libelle" => _("Envoyer à signature"),
385     "type" => "action-direct-with-confirmation",
386     "class" => "envoyer_a_signature-16",
387     ),
388     "view" => "formulaire",
389 softime 10713 "method" => "envoyer_a_signature_sans_relecture",
390 softime 10573 "condition" => array(
391     "can_be_signed",
392     ),
393     "permission_suffix" => "envoyer_a_signature",
394     );
395    
396 softime 10713 // ACTION - 402 - Envoyer en signature avec relecture
397     // Cet évenement permet d'envoyer le document au parapheur pour signature
398     $this->class_actions[402] = array(
399     "identifier" => "envoyer_a_signature_relecture",
400     "portlet" => array(
401     "libelle" => __("Envoyer à signature avec relecture"),
402     "type" => "action-direct-with-confirmation",
403     "class" => "envoyer_a_signature-16",
404     ),
405     "view" => "formulaire",
406     "method" => "envoyer_a_signature_avec_relecture",
407     "condition" => array(
408     "can_be_signed",
409     "is_option_parapheur_relecture_enabled"
410     ),
411     "permission_suffix" => "envoyer_a_signature",
412     );
413    
414 softime 10573 //
415     $this->class_actions[401] = array(
416     "identifier" => "preview_edition",
417     "view" => "formulaire",
418     "permission_suffix" => "tab",
419     );
420    
421     //
422     $this->class_actions[998] = array(
423     "identifier" => "json_data",
424     "view" => "view_json_data",
425     "permission_suffix" => "consulter",
426     );
427 mbroquet 3730 }
428    
429 softime 8593 /**
430 softime 8989 * Clause select pour la requête de sélection des données de l'enregistrement.
431     *
432     * @return array
433     */
434     function get_var_sql_forminc__champs() {
435     return array(
436     "instruction",
437     "destinataire",
438     "instruction.evenement",
439 softime 10573 "instruction.commentaire",
440 softime 8989 "date_evenement",
441     "instruction.lettretype",
442     "signataire_arrete",
443     "flag_edition_integrale",
444     "om_final_instruction_utilisateur",
445     "date_finalisation_courrier",
446     "date_envoi_signature",
447     "date_envoi_rar",
448     "date_envoi_controle_legalite",
449    
450     "date_retour_signature",
451     "date_retour_rar",
452     "date_retour_controle_legalite",
453    
454     "numero_arrete",
455    
456     "complement_om_html",
457     "'' as bible_auto",
458     "'' as bible",
459     "complement2_om_html",
460     "'' as bible2",
461     "complement3_om_html",
462     "'' as bible3",
463     "complement4_om_html",
464     "'' as bible4",
465    
466     "titre_om_htmletat",
467     "corps_om_htmletatex",
468    
469     "'' as btn_preview",
470     "'' as btn_redaction",
471    
472     "'' as btn_refresh",
473     "'' as live_preview",
474    
475     "dossier",
476     "instruction.action",
477     "instruction.delai",
478     "instruction.etat",
479     "instruction.autorite_competente",
480     "instruction.accord_tacite",
481     "instruction.delai_notification",
482     "instruction.avis_decision",
483     "archive_delai",
484     "archive_accord_tacite",
485     "archive_etat",
486     "archive_avis",
487     "archive_date_complet",
488     "archive_date_rejet",
489     "archive_date_limite",
490     "archive_date_notification_delai",
491     "archive_date_decision",
492     "archive_date_validite",
493     "archive_date_achevement",
494     "archive_date_conformite",
495     "archive_date_chantier",
496     "archive_date_dernier_depot",
497     "date_depot",
498 softime 10573 "date_depot_mairie",
499 softime 8989 "complement5_om_html",
500     "'' as bible5",
501     "complement6_om_html",
502     "'' as bible6",
503     "complement7_om_html",
504     "'' as bible7",
505     "complement8_om_html",
506     "'' as bible8",
507     "complement9_om_html",
508     "'' as bible9",
509     "complement10_om_html",
510     "'' as bible10",
511     "complement11_om_html",
512     "'' as bible11",
513     "complement12_om_html",
514     "complement13_om_html",
515     "complement14_om_html",
516     "complement15_om_html",
517     "archive_incompletude",
518     "archive_incomplet_notifie",
519     "archive_evenement_suivant_tacite",
520     "archive_evenement_suivant_tacite_incompletude",
521     "archive_etat_pendant_incompletude",
522     "archive_date_limite_incompletude",
523     "archive_delai_incompletude",
524     "archive_autorite_competente",
525     "code_barres",
526     "om_fichier_instruction",
527     "om_final_instruction",
528     "om_fichier_instruction_dossier_final",
529     "document_numerise",
530     "duree_validite_parametrage",
531     "duree_validite",
532     "created_by_commune",
533     "archive_date_cloture_instruction",
534     "archive_date_premiere_visite",
535     "archive_date_derniere_visite",
536     "archive_date_contradictoire",
537     "archive_date_retour_contradictoire",
538     "archive_date_ait",
539     "archive_date_transmission_parquet",
540     "archive_dossier_instruction_type",
541     "archive_date_affichage",
542 softime 10573 "pec_metier",
543     "archive_pec_metier",
544     "archive_a_qualifier",
545     "id_parapheur_signature",
546     "statut_signature",
547     "commentaire_signature",
548     "historique_signature",
549    
550    
551     "'' as preview_edition",
552 softime 8989 );
553     }
554    
555     /**
556 softime 8593 * CONDITION - is_edition_integrale_enabled
557     *
558     * Vérifie que la rédaction libre est activée sur l'instruction en cours.
559     *
560     * @return boolean
561     */
562     function is_edition_integrale_enabled() {
563     if ($this->getVal("flag_edition_integrale") == 't') {
564     return true;
565     }
566     return false;
567     }
568 mbroquet 3730
569     /**
570 softime 8593 * CONDITION - is_edition_integrale_not_enabled
571     *
572     * Vérifie que la rédaction libre est désactivée sur l'instruction en cours.
573     *
574     * @return boolean
575     */
576     function is_edition_integrale_not_enabled() {
577     return !$this->is_edition_integrale_enabled();
578     }
579    
580     /**
581     * CONDITION - is_option_redaction_libre_enabled
582     *
583     * Vérifie que l'option de rédaction libre est activée.
584     *
585     * @return boolean
586     */
587     function is_option_redaction_libre_enabled() {
588     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
589     return $this->f->is_option_redaction_libre_enabled($collectivite_di);
590     }
591    
592     /**
593 softime 10713 * CONDITION - is_option_parapheur_relecture_enabled
594     *
595     * Vérifie que l'option de relecture lors de l'envoi en signature est activée.
596     *
597     * @return boolean
598     */
599     function is_option_parapheur_relecture_enabled() {
600     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
601     return $this->f->is_option_parapheur_relecture_enabled($collectivite_di);
602     }
603    
604    
605     /**
606 softime 10573 * CONDITION - is_sent_for_signature
607     *
608     * Vérifie que l'instruction a été envoyé à signature
609     *
610     * @return boolean
611     */
612     function is_sent_for_signature() {
613     // Si un parapheur a été configuré
614     // et que le champ id_parapheur_signature n'est pas vide
615     // que le status est différent de "canceled" ou "expired"
616     // alors l'évènement a été envoyé en signature
617     if ($this->has_connector_electronicsignature() === true
618     && empty($this->getVal("id_parapheur_signature")) === false
619     && ($this->getVal("statut_signature") != "canceled"
620     || $this->getVal("statut_signature") != "expired"
621     || $this->getVal("statut_signature") != "finished")) {
622     //
623     return true;
624     }
625    
626     return false;
627     }
628    
629     /**
630     * CONDITION - is_not_sent_for_signature
631     *
632     * Vérifie que l'instruction n'a pas été envoyé à signature
633     *
634     * @return boolean
635     */
636     function is_not_sent_for_signature() {
637     return !$this->is_sent_for_signature();
638     }
639    
640    
641     /**
642     * CONDITION - is_signed
643     *
644     * Vérifie que l'instruction a été signé
645     *
646     * @return boolean
647     */
648     function is_signed() {
649     // Si un parapheur a été configuré
650     // et que le champ id_parapheur_signature n'est pas vide
651     // et que le statut est égal à "finished"
652     // alors le document de l'instruciton à été signé
653     if ($this->has_connector_electronicsignature() === true
654     && empty($this->getVal("id_parapheur_signature")) === false
655     && $this->getVal("statut_signature") == "finished") {
656     //
657     return true;
658     }
659    
660     return false;
661     }
662    
663    
664     /**
665     * CONDITION - can_be_signed
666     *
667     * Vérifie que le document de l'instruction peut être envoyé au parapheur pour signature
668     *
669     * @return boolean
670     */
671     function can_be_signed() {
672     // Instanciation de l'objet signataire_arrete
673     $inst_signataire_arrete = $this->f->get_inst__om_dbform(array(
674     "obj" => "signataire_arrete",
675     "idx" => $this->getVal("signataire_arrete"),
676     ));
677     // Si un parapheur a été configuré, que le document est finalisé, que le signataire
678     // possède une adresse email, on vérifie le champ id_parapheur_signature
679     // S'il est vide l'évènement peut être envoyé en signature
680     // S'il ne l'est pas, alors on vérifie le champ statut_signature
681     // Si la valeur de ce champ est égal à "canceled" ou "expired"
682     // alors l'évènement peut être envoyé en signature
683     if ($this->has_connector_electronicsignature() === true
684     && $this->getVal("om_final_instruction") == 't'
685     && empty($inst_signataire_arrete->getVal('email')) === false) {
686     //
687     if (empty($this->getVal("id_parapheur_signature")) === true
688     || $this->getVal("statut_signature") == "canceled"
689     || $this->getVal("statut_signature") == "expired") {
690     //
691     return true;
692     }
693     }
694    
695     $this->addToLog(__METHOD__."() has_connector_electronicsignature: ".var_export($this->has_connector_electronicsignature(), true), EXTRA_VERBOSE_MODE);
696     $this->addToLog(__METHOD__."() om_final_instruction: ".var_export($this->getVal("om_final_instruction"), true), EXTRA_VERBOSE_MODE);
697     $this->addToLog(__METHOD__."() email: ".var_export($inst_signataire_arrete->getVal('email'), true), EXTRA_VERBOSE_MODE);
698     $this->addToLog(__METHOD__."() id_parapheur_signature: ".var_export($this->getVal("id_parapheur_signature"), true), EXTRA_VERBOSE_MODE);
699     $this->addToLog(__METHOD__."() statut_signature: ".var_export($this->getVal("statut_signature"), true), EXTRA_VERBOSE_MODE);
700    
701     return false;
702     }
703    
704     /**
705     * CONDITION - has_connector_electronicsignature
706     *
707     * Vérifie qu'un parapheur est paramétré
708     *
709     * @return boolean
710     */
711     function has_connector_electronicsignature() {
712     $inst_es = $this->get_electronicsignature_instance(false);
713     if ($inst_es === false) {
714     return false;
715     }
716     return true;
717     }
718    
719     /**
720     * CONDITION - can_display_parapheur
721     *
722     * Vérifie que le fieldset "Suivi Parapheur" soit affichable
723     *
724     * @return boolean
725     */
726     function can_display_parapheur() {
727     $evenement_id = $this->getVal("evenement");
728     $inst_evenement = $this->get_inst_evenement($evenement_id);
729     if ($this->has_connector_electronicsignature() === true
730     && $inst_evenement->getVal('lettretype') !== ''
731     && $inst_evenement->getVal('lettretype') !== null
732     && (empty($this->getVal("id_parapheur_signature")) === false
733     || empty($this->getVal("historique_signature")) === false)) {
734     //
735     return true;
736     }
737    
738     return false;
739     }
740    
741     /**
742 softime 8593 * TREATMENT - disable_edition_integrale.
743     *
744     * Cette methode permet de passer la consultation en "lu"
745     *
746     * @return boolean true si maj effectué false sinon
747     */
748     function disable_edition_integrale() {
749     // Cette méthode permet d'exécuter une routine en début des méthodes
750     // dites de TREATMENT.
751     $this->begin_treatment(__METHOD__);
752     $this->correct = true;
753     $valF = array(
754     "flag_edition_integrale" => false,
755     "titre_om_htmletat" => null,
756     "corps_om_htmletatex" => null,
757     );
758     $res = $this->f->db->autoExecute(
759     DB_PREFIXE.$this->table,
760     $valF,
761     DB_AUTOQUERY_UPDATE,
762     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
763     );
764     if ($this->f->isDatabaseError($res, true)) {
765     // Appel de la methode de recuperation des erreurs
766     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
767     $this->correct = false;
768     // Termine le traitement
769     return $this->end_treatment(__METHOD__, false);
770     } else {
771     $this->addToMessage(_("Rédaction par compléments activé."));
772     return $this->end_treatment(__METHOD__, true);
773     }
774    
775     // Termine le traitement
776     return $this->end_treatment(__METHOD__, false);
777     }
778    
779     /**
780     * TREATMENT - enable_edition_integrale.
781     *
782     * Cette methode permet de passer la consultation en "lu"
783     *
784     * @return boolean true si maj effectué false sinon
785     */
786     function enable_edition_integrale() {
787     // Cette méthode permet d'exécuter une routine en début des méthodes
788     // dites de TREATMENT.
789     $this->begin_treatment(__METHOD__);
790     $this->correct = true;
791    
792     // Récupère la collectivite du dossier d'instruction
793     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
794     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
795     //
796     $params = array(
797     "specific" => array(
798     "corps" => array(
799     "mode" => "get",
800     )
801     ),
802     );
803     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
804     $corps = $result['pdf_output'];
805     //
806     $params = array(
807     "specific" => array(
808     "titre" => array(
809     "mode" => "get",
810     )
811     ),
812     );
813     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
814     $titre = $result['pdf_output'];
815     //
816     $valF = array(
817     "flag_edition_integrale" => true,
818     "titre_om_htmletat" => $titre,
819     "corps_om_htmletatex" => $corps,
820     );
821     $res = $this->f->db->autoExecute(
822     DB_PREFIXE.$this->table,
823     $valF,
824     DB_AUTOQUERY_UPDATE,
825     $this->clePrimaire."=".$this->getVal($this->clePrimaire)
826     );
827     if ($this->f->isDatabaseError($res, true)) {
828     // Appel de la methode de recuperation des erreurs
829     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
830     $this->correct = false;
831     // Termine le traitement
832     return $this->end_treatment(__METHOD__, false);
833     } else {
834     $this->addToMessage(_("Rédaction libre activé."));
835     return $this->end_treatment(__METHOD__, true);
836     }
837    
838     // Termine le traitement
839     return $this->end_treatment(__METHOD__, false);
840     }
841    
842     /**
843 mbroquet 3730 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
844     */
845     function getNumDemandeAutorFromDossier($id) {
846     //
847     if (!isset($id)) {
848     return NULL;
849     }
850     //
851     $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
852     $sql .= " where dossier='".$id."'";
853     //
854 softime 8989 $dossier_autorisation = $this->f->db->getOne($sql);
855 mbroquet 3730 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
856     database::isError($dossier_autorisation);
857     //
858     return $dossier_autorisation;
859     }
860    
861     // }}}
862    
863     function setType(&$form, $maj) {
864 softime 8593 // Récupération du mode de l'action
865     $crud = $this->get_action_crud($maj);
866     // Récupère la collectivité du dossier d'instruction
867     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
868 mbroquet 3730
869 softime 8593 // Cache tous les champs
870     foreach ($this->champs as $value) {
871     $form->setType($value, 'hidden');
872     }
873 softime 6565
874 softime 10573 // Les champs historique_signature et statut_signature ne sont pas saisissable dans tous les cas
875     if ($this->can_display_parapheur() === true) {
876     $form->setType('statut_signature', 'selectstatic');
877     $form->setType('historique_signature', 'jsontotab');
878     if ($this->getVal('commentaire_signature') == null) {
879     $form->setType('commentaire_signature', 'hidden');
880     } else {
881     $form->setType('commentaire_signature', 'hiddenstatic');
882     }
883     }
884    
885 softime 8593 // MODE AJOUTER
886     if ($this->getParameter('maj') == 0) {
887 softime 10573 $form->setType('commentaire', 'textareahidden');
888     // Si l'option est active passage du champ date en lecture seule
889     if ($this->f->is_option_date_evenement_instruction_lecture_seule($collectivite_di) === true) {
890     $form->setType("date_evenement", "hiddenstaticdate");
891     } else {
892     $form->setType("date_evenement", "date");
893     }
894 softime 8989 if ($this->is_in_context_of_foreign_key("evenement", $this->getParameter("retourformulaire"))) {
895 softime 8593 $form->setType("evenement", "selecthiddenstatic");
896     } else {
897     $form->setType("evenement", "select");
898     }
899 softime 8989 if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->getParameter("retourformulaire"))) {
900 softime 8593 $form->setType("signataire_arrete", "selecthiddenstatic");
901     } else {
902     $form->setType("signataire_arrete", "select");
903     }
904     if ($this->is_option_redaction_libre_enabled() === true) {
905     $form->setType("flag_edition_integrale", "select");
906     }
907 mbroquet 3730 }
908    
909 softime 8593 // MODE MODIFIER
910     if ($this->getParameter('maj') == 1) {
911 softime 10573 // Si l'option est active passage du champ date en lecture seule
912     if ($this->f->is_option_date_evenement_instruction_lecture_seule($collectivite_di) === true) {
913     $form->setType("date_evenement", "hiddenstaticdate");
914     } else {
915     $form->setType("date_evenement", "date");
916     }
917 softime 8593 $form->setType("evenement", "selecthiddenstatic");
918     if ($this->has_an_edition() === true) {
919     $form->setType('lettretype', 'hiddenstatic');
920 softime 8989 if ($this->is_in_context_of_foreign_key("signataire_arrete", $this->getParameter("retourformulaire"))) {
921 softime 8593 $form->setType("signataire_arrete", "selecthiddenstatic");
922     } else {
923     $form->setType("signataire_arrete", "select");
924     }
925     if ($this->getVal("flag_edition_integrale") == "t") {
926     $form->setType("titre_om_htmletat", "htmlEtat");
927     $form->setType("corps_om_htmletatex", "htmlEtatEx");
928     } else {
929     $form->setType("complement_om_html", "html");
930     $form->setType("complement2_om_html", "html");
931     $form->setType("complement3_om_html", "html");
932     $form->setType("complement4_om_html", "html");
933     $form->setType('bible_auto', 'httpclick');
934     $form->setType('bible', 'httpclick');
935     $form->setType('bible2', 'httpclick');
936     $form->setType('bible3', 'httpclick');
937     $form->setType('bible4', 'httpclick');
938     }
939     if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true) {
940     //
941     $form->setType('btn_refresh', 'httpclickbutton');
942     $form->setType('btn_preview', 'httpclickbutton');
943     $form->setType('btn_redaction', 'httpclickbutton');
944 softime 7521 $form->setType('live_preview', 'pdf');
945     }
946 softime 8593
947 mbroquet 3730 // necessaire pour calcul de date en modification
948     //$form->setType('delai', 'hiddenstatic');
949     // les administrateurs technique et fonctionnel peuvent
950     // modifier tous les champs de date
951     // si l'instruction a déjà été finalisée au moins une fois
952 softime 7996 if (($this->f->isAccredited(array($this->get_absolute_class_name(), $this->get_absolute_class_name()."modification_dates"), "OR")
953 softime 6565 || $this->f->isAccredited(array('instruction', 'instruction_modification_dates'), "OR"))
954 mbroquet 3730 && $this->getVal("date_finalisation_courrier") != '') {
955 softime 8593 //
956 mbroquet 3730 $form->setType('date_envoi_signature', 'date');
957     $form->setType('date_retour_signature', 'date');
958 softime 10573 if ($this->is_sent_for_signature() === true
959     && $this->is_signed() === true) {
960     //
961     $form->setType("date_envoi_signature", "datereadonly");
962     $form->setType("date_retour_signature", "datereadonly");
963     }
964 mbroquet 3730 $form->setType('date_envoi_rar', 'date');
965     $form->setType('date_retour_rar', 'date');
966     $form->setType('date_envoi_controle_legalite', 'date');
967     $form->setType('date_retour_controle_legalite', 'date');
968     $form->setType('date_finalisation_courrier', 'date');
969     }
970     }
971     }
972    
973 softime 8593 // MODE CONSULTER + SUPPRIMER + SUIVI DES DATES 125
974     if ($this->getParameter('maj') == 3
975     || $this->getParameter('maj') == 2
976     || $this->getParameter('maj') == 125) {
977     //
978     $form->setType("date_evenement", "datestatic");
979     $form->setType("evenement", "selecthiddenstatic");
980     if ($this->has_an_edition() === true) {
981     $form->setType('lettretype', 'hiddenstatic');
982     $form->setType("signataire_arrete", "selecthiddenstatic");
983     if ($this->getVal("om_final_instruction") == 't') {
984     $form->setType('om_final_instruction_utilisateur', 'textareastatic');
985     } else {
986     $form->setType('om_final_instruction_utilisateur', 'hidden');
987     }
988     }
989 softime 10573 if ($this->evenement_has_a_commentaire($this->getVal('evenement')) === true ) {
990     $form->setType('commentaire', 'textareastatic');
991     }
992 mbroquet 3730 }
993    
994 softime 8593 // MODE CONSULTER + SUPPRIMER
995     if ($this->getParameter('maj') == 3 || $this->getParameter('maj') == 2) {
996 softime 10573 // Si il n'y a pas de lettre type (edition) associé à l'événement
997     // les dates de suivi ne sont pas affichée
998 softime 8593 if ($this->has_an_edition() === true) {
999 softime 10573 $form->setType('date_envoi_signature', 'datestatic');
1000     $form->setType('date_retour_signature', 'datestatic');
1001     $form->setType('date_envoi_rar', 'datestatic');
1002     $form->setType('date_retour_rar', 'datestatic');
1003     $form->setType('date_envoi_controle_legalite', 'datestatic');
1004     $form->setType('date_retour_controle_legalite', 'datestatic');
1005     $form->setType('date_finalisation_courrier', 'datestatic');
1006 softime 8593 if ($this->getVal("flag_edition_integrale") == "t") {
1007     $form->setType("titre_om_htmletat", "htmlstatic");
1008     $form->setType("corps_om_htmletatex", "htmlstatic");
1009     } else {
1010     $form->setType("complement_om_html", "htmlstatic");
1011     $form->setType("complement2_om_html", "htmlstatic");
1012     $form->setType("complement3_om_html", "htmlstatic");
1013     $form->setType("complement4_om_html", "htmlstatic");
1014     }
1015 mbroquet 3730 }
1016     }
1017 softime 8593
1018     // MODE SUIVI DES DATES 125
1019     if ($this->getParameter('maj') == 125) {
1020     $form->setType("date_evenement", "hiddenstaticdate");
1021     $form->setType('om_final_instruction_utilisateur', 'hiddenstatic');
1022     $form->setType('date_envoi_signature', 'date');
1023     $form->setType('date_retour_signature', 'date');
1024 softime 10573 if ($this->is_sent_for_signature() === true
1025     || $this->is_signed() === true) {
1026     //
1027     $form->setType("date_envoi_signature", "datereadonly");
1028     $form->setType("date_retour_signature", "datereadonly");
1029     }
1030 softime 8593 $form->setType('date_envoi_rar', 'date');
1031     $form->setType('date_retour_rar', 'date');
1032     $form->setType('date_envoi_controle_legalite', 'date');
1033     $form->setType('date_retour_controle_legalite', 'date');
1034     $form->setType('date_finalisation_courrier', 'date');
1035     }
1036 softime 10573
1037     if ($maj == 401) {
1038     foreach ($this->champs as $champ) {
1039     $form->setType($champ, 'hidden');
1040     }
1041     $form->setType('preview_edition', 'pdf');
1042     }
1043 mbroquet 3730 }
1044    
1045 softime 8593 function setOnchange(&$form,$maj){
1046     parent::setOnchange($form,$maj);
1047    
1048     // MODE AJOUTER
1049     if ($this->getParameter('maj') == 0) {
1050 softime 10573 $form->setOnchange(
1051     "evenement",
1052     "manage_instruction_evenement_lettretype(this.value, '".addslashes($this->getParameter('idxformulaire'))."');
1053     manage_instruction_evenement_commentaire(this.value, '".addslashes($this->getParameter('idxformulaire'))."');"
1054     );
1055 softime 8593 }
1056     }
1057    
1058     function evenement_has_an_edition($evenement_id) {
1059     $evenement = $this->get_inst_evenement($evenement_id);
1060     $lettretype = $evenement->getVal('lettretype');
1061     if ($lettretype !== '' && $lettretype !== null) {
1062     return true;
1063     }
1064     return false;
1065     }
1066    
1067     function view_evenement_has_an_edition_json() {
1068     $json_return = array(
1069     "lettretype" => $this->evenement_has_an_edition($this->f->get_submitted_get_value('evenement_id')),
1070     "option_redaction_libre_enabled" => $this->is_option_redaction_libre_enabled(),
1071     );
1072     echo json_encode($json_return);
1073     }
1074    
1075 softime 10573 function evenement_has_a_commentaire($evenement_id) {
1076     $evenement = $this->get_inst_evenement($evenement_id);
1077     return $this->get_boolean_from_pgsql_value($evenement->getVal('commentaire'));
1078     }
1079    
1080     function view_evenement_has_a_commentaire_json() {
1081     $json_return = array(
1082     "commentaire" => $this->evenement_has_a_commentaire($this->f->get_submitted_get_value('evenement_id'))
1083     );
1084     echo json_encode($json_return);
1085     }
1086    
1087 softime 8989 /**
1088     *
1089     * @return string
1090     */
1091     function get_var_sql_forminc__sql_signataire_arrete() {
1092     return "SELECT
1093     signataire_arrete.signataire_arrete,
1094     CONCAT(signataire_arrete.prenom, ' ', signataire_arrete.nom)
1095     FROM ".DB_PREFIXE."signataire_arrete
1096     WHERE ((signataire_arrete.om_validite_debut IS NULL AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)) OR (signataire_arrete.om_validite_debut <= CURRENT_DATE AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)))
1097     ORDER BY signataire_arrete.prenom, signataire_arrete.nom";
1098     }
1099    
1100     /**
1101     *
1102     * @return string
1103     */
1104     function get_var_sql_forminc__sql_signataire_arrete_by_id() {
1105     return "SELECT
1106     signataire_arrete.signataire_arrete,
1107     CONCAT(signataire_arrete.prenom, ' ', signataire_arrete.nom)
1108     FROM ".DB_PREFIXE."signataire_arrete
1109     WHERE signataire_arrete.signataire_arrete = <idx>";
1110     }
1111    
1112     /**
1113     *
1114     * @return string
1115     */
1116     function get_var_sql_forminc__sql_signataire_arrete_by_di() {
1117     return "SELECT
1118     signataire_arrete.signataire_arrete,
1119     CONCAT(signataire_arrete.prenom, ' ', signataire_arrete.nom)
1120     FROM ".DB_PREFIXE."signataire_arrete
1121     LEFT JOIN ".DB_PREFIXE."om_collectivite ON signataire_arrete.om_collectivite = om_collectivite.om_collectivite
1122     WHERE ((signataire_arrete.om_validite_debut IS NULL AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)) OR (signataire_arrete.om_validite_debut <= CURRENT_DATE AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)))
1123     AND (om_collectivite.niveau = '2' OR signataire_arrete.om_collectivite = <collectivite_di>)
1124     ORDER BY signataire_arrete.prenom, signataire_arrete.nom";
1125     }
1126    
1127     /**
1128     *
1129     * @return string
1130     */
1131     function get_var_sql_forminc__sql_signataire_arrete_defaut() {
1132     return "SELECT
1133     signataire_arrete.signataire_arrete,
1134     CONCAT(signataire_arrete.prenom, ' ', signataire_arrete.nom)
1135     FROM ".DB_PREFIXE."signataire_arrete
1136     WHERE ((signataire_arrete.om_validite_debut IS NULL AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)) OR (signataire_arrete.om_validite_debut <= CURRENT_DATE AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE))) AND signataire_arrete.defaut IS TRUE
1137     ORDER BY signataire_arrete.prenom, signataire_arrete.nom";
1138     }
1139    
1140     /**
1141     *
1142     * @return string
1143     */
1144     function get_var_sql_forminc__sql_signataire_arrete_defaut_by_di() {
1145     return "SELECT
1146     signataire_arrete.signataire_arrete,
1147     CONCAT(signataire_arrete.prenom, ' ', signataire_arrete.nom)
1148     FROM ".DB_PREFIXE."signataire_arrete
1149     LEFT JOIN ".DB_PREFIXE."om_collectivite ON signataire_arrete.om_collectivite = om_collectivite.om_collectivite
1150     WHERE ((signataire_arrete.om_validite_debut IS NULL AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE)) OR (signataire_arrete.om_validite_debut <= CURRENT_DATE AND (signataire_arrete.om_validite_fin IS NULL OR signataire_arrete.om_validite_fin > CURRENT_DATE))) AND signataire_arrete.defaut IS TRUE
1151     AND (om_collectivite.niveau = '2' OR signataire_arrete.om_collectivite = <collectivite_di>)
1152     ORDER BY signataire_arrete.prenom, signataire_arrete.nom";
1153     }
1154    
1155     /**
1156     * SETTER_FORM - setSelect.
1157     *
1158     * @return void
1159     */
1160     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
1161     //parent::setSelect($form, $maj);
1162 mbroquet 3730 /**
1163     * On ne surcharge pas la méthode parent car une requête sur la table
1164     * dossier est mauvaise pour les performances, car la requête qui
1165     * concerne evenement est plus complexe que celle générée et car les
1166     * champs action, avis_decision et etat ne sont pas utilisés comme des
1167     * select
1168     */
1169     //// action
1170 softime 8989 //$this->init_select($form, $this->f->db, $maj, null, "action",
1171 mbroquet 3730 // $sql_action, $sql_action_by_id, false);
1172    
1173     //// avis_decision
1174 softime 8989 //$this->init_select($form, $this->f->db, $maj, null, "avis_decision",
1175 mbroquet 3730 // $sql_avis_decision, $sql_avis_decision_by_id, false);
1176    
1177     //// dossier
1178 softime 8989 //$this->init_select($form, $this->f->db, $maj, null, "dossier",
1179 mbroquet 3730 // $sql_dossier, $sql_dossier_by_id, false);
1180    
1181     //// etat
1182 softime 8989 //$this->init_select($form, $this->f->db, $maj, null, "etat",
1183 mbroquet 3730 // $sql_etat, $sql_etat_by_id, false);
1184    
1185     //// evenement
1186 softime 8989 //$this->init_select($form, $this->f->db, $maj, null, "evenement",
1187 mbroquet 3730 // $sql_evenement, $sql_evenement_by_id, false);
1188    
1189     // signataire_arrete
1190     // si contexte DI
1191     if ($this->getParameter("retourformulaire") == "dossier"
1192     || $this->getParameter("retourformulaire") == "dossier_instruction"
1193     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1194     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1195     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1196 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
1197     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
1198     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
1199     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
1200     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
1201 mbroquet 3730 // on recupère les signataires de la multicollectivité et de celle du DI
1202 softime 7996 $di = $this->f->get_inst__om_dbform(array(
1203     "obj" => "dossier_instruction",
1204     "idx" => $this->getParameter('idxformulaire'),
1205     ));
1206 softime 8989 $sql_signataire_arrete_by_di = str_replace(
1207     '<collectivite_di>',
1208     $di->getVal("om_collectivite"),
1209     $this->get_var_sql_forminc__sql("signataire_arrete_by_di")
1210     );
1211     $this->init_select(
1212     $form,
1213     $this->f->db,
1214     $maj,
1215     null,
1216     "signataire_arrete",
1217     $sql_signataire_arrete_by_di,
1218     $this->get_var_sql_forminc__sql("signataire_arrete_by_id"),
1219     true
1220     );
1221 mbroquet 3730 } else {
1222 softime 8989 $this->init_select(
1223     $form,
1224     $this->f->db,
1225     $maj,
1226     null,
1227     "signataire_arrete",
1228     $this->get_var_sql_forminc__sql("signataire_arrete"),
1229     $this->get_var_sql_forminc__sql("signataire_arrete_by_id"),
1230     true
1231     );
1232 mbroquet 3730 }
1233    
1234     /**
1235     * Gestion du filtre sur les événements de workflow disponibles
1236     * On récupère ici en fonction de l'état du dossier d'instruction en
1237     * cours et du type du dossier d'instruction en cours la liste
1238     * événements disponibles.
1239     */
1240     if ($maj == 0) {
1241     // Récupération des événements par une jointure entre la table dossier
1242     // et la table transition et la table evenement et la table
1243     // lien_dossier_instruction_type_evenement en fonction de l'identifiant
1244     // du dossier d'instruction en cours
1245     $sql = "SELECT
1246     evenement.evenement,
1247     evenement.libelle as lib
1248     FROM ".DB_PREFIXE."dossier
1249     INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
1250     ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
1251     INNER JOIN ".DB_PREFIXE."evenement
1252     ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
1253     INNER JOIN ".DB_PREFIXE."transition
1254     ON evenement.evenement = transition.evenement
1255     AND dossier.etat=transition.etat
1256 softime 8989 WHERE dossier.dossier='".$this->getParameter("idxformulaire")."' ";
1257 mbroquet 3730
1258     // Si changement de décision par instructeur commune
1259     if($this->f->isUserInstructeur() === true
1260 softime 8989 && $this->getDivisionFromDossier($this->getParameter("idxformulaire")) != $_SESSION["division"]
1261     && $this->isInstrCanChangeDecision($this->getParameter("idxformulaire")) === true) {
1262 mbroquet 3730 $sql .= "AND evenement.type IN ('arrete', 'changement_decision') ";
1263     }
1264     $sql .= "ORDER BY evenement.libelle, evenement.action";
1265 softime 8989 $res = $this->f->db->query($sql);
1266 mbroquet 3730 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
1267     if (database::isError($res)) {
1268     die($res->getMessage());
1269     }
1270     // Remplissage du tableau du select
1271     $contenu = array(
1272     0 => array("",),
1273     1 => array(_('choisir')." "._('evenement'),)
1274     );
1275     while ($row=& $res->fetchRow()) {
1276     $contenu[0][] = $row[0];
1277     $contenu[1][] = $row[1];
1278     }
1279     $form->setSelect("evenement", $contenu);
1280 softime 8593
1281 mbroquet 3730 } else {
1282     $sql = "SELECT
1283     evenement.libelle as lib
1284     FROM ".DB_PREFIXE."evenement
1285     WHERE evenement.evenement=".$this->getVal("evenement")."";
1286 softime 8989 $res = $this->f->db->getone($sql);
1287 mbroquet 3730 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1288     if (database::isError($res)) {
1289     die($res->getMessage());
1290     }
1291     //
1292     $contenu = array(
1293     0 => array($this->getVal("evenement"),),
1294     1 => array($res,)
1295     );
1296     $form->setSelect("evenement", $contenu);
1297     }
1298    
1299     /**
1300     * Gesion des liens vers la bible
1301     */
1302     // lien bible_auto
1303     $contenu = array(_("automatique"));
1304     $form->setSelect("bible_auto",$contenu);
1305     // lien bible1
1306     $contenu = array(_("bible"));
1307     $form->setSelect("bible",$contenu);
1308     // lien bible2
1309     $contenu = array(_("bible"));
1310     $form->setSelect("bible2",$contenu);
1311     // lien bible3
1312     $contenu = array(_("bible"));
1313     $form->setSelect("bible3",$contenu);
1314     // lien bible4
1315     $contenu = array(_("bible"));
1316     $form->setSelect("bible4",$contenu);
1317 softime 7521
1318     if ($maj == 1) {
1319     $base64 = $this->init_pdf_temp();
1320     $form->setSelect('live_preview', array('base64'=>$base64));
1321 softime 8593 $form->setSelect("btn_refresh", array(_('Prévisualiser')));
1322     $form->setSelect("btn_preview", array(_('Prévisualiser >>')));
1323     $form->setSelect("btn_redaction", array(_('<< Rédiger')));
1324 softime 7521 }
1325 softime 8593
1326     // Selection du type de rédaction à l'ajout
1327     $content = array(
1328     0 => array('f', 't', ),
1329     1 => array(_('Rédaction par compléments'), _('Rédaction libre'), ),
1330     );
1331     $form->setSelect('flag_edition_integrale', $content);
1332 softime 10573
1333     $contenu = array();
1334     foreach(array('waiting', 'in_progress', 'canceled', 'expired', 'finished') as $value) {
1335     $contenu[0][] = $value;
1336     $contenu[1][] = $this->get_trad_for_statut($value);
1337     }
1338     $form->setSelect('statut_signature', $contenu);
1339    
1340    
1341     if ($maj == 401) {
1342     $file = $this->f->storage->get($this->getVal('om_fichier_instruction'));
1343     $base64 = base64_encode($file['file_content']);
1344     $form->setSelect('preview_edition', array('base64' => $base64));
1345     }
1346 mbroquet 3730 }
1347    
1348 softime 8989 function cleSecondaire($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1349 mbroquet 3730 //
1350 softime 8989 parent::cleSecondaire($id, $dnu1, $val);
1351 mbroquet 3730
1352     $id = $this->getVal($this->clePrimaire);
1353    
1354    
1355     //Requête de vérification que cet événement d'instruction n'est pas lié
1356     //à la création d'un dossier d'instruction
1357     $sql = "SELECT demande_type.dossier_instruction_type
1358     FROM ".DB_PREFIXE."demande_type
1359     LEFT JOIN ".DB_PREFIXE."demande
1360     ON demande.demande_type = demande_type.demande_type
1361     WHERE demande.instruction_recepisse = ".$id;
1362 softime 8989 $res = $this->f->db->getOne($sql);
1363 mbroquet 3730 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1364     if (database::isError($res)) {
1365     die($res->getMessage());
1366     }
1367    
1368     // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
1369     //création de dossier d'instruction, l'événement d'instruction peut être
1370     //supprimé
1371     if ( $this->correct !== false || $res == null || $res == ""){
1372    
1373     // Requête de vérification que cet événement d'instruction est lié
1374     // à une demande
1375     $sql = "SELECT demande
1376     FROM ".DB_PREFIXE."demande
1377     WHERE instruction_recepisse = ".$id;
1378 softime 8989 $res = $this->f->db->getOne($sql);
1379 mbroquet 3730 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1380     if (database::isError($res)) {
1381     die($res->getMessage());
1382     }
1383    
1384     //Si c'est un événement d'instruction lié à une demande
1385     if ($res != null || $res != ""){
1386 softime 7996 $demande = $this->f->get_inst__om_dbform(array(
1387     "obj" => "demande",
1388     "idx" => $res,
1389     ));
1390 mbroquet 3730
1391     //On met à jour la demande en supprimant la liaison vers
1392     //l'événement d'instruction
1393     $demande->setParameter("maj", 1);
1394     $valF = array();
1395     foreach($demande->champs as $identifiant => $champ) {
1396     $valF[$champ] = $demande->val[$identifiant];
1397     }
1398     $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
1399     $valF['instruction_recepisse']=NULL;
1400 softime 8989 $ret = $demande->modifier($valF);
1401 mbroquet 3730 }
1402    
1403     /**
1404     * Vérification que l'élément supprimé est le dernier pour pouvoir
1405     * remodifier les données de manière itérative.
1406     */
1407     // Initialisation
1408     $dernierevenement = "";
1409     // Récupération du dernier élément de la table d'instruction qui
1410     // concerne le dossier en cours
1411     $sql = "SELECT max(instruction)
1412     FROM ".DB_PREFIXE."instruction
1413 softime 8989 WHERE dossier ='".$this->getParameter("idxformulaire")."'";
1414     $dernierevenement = $this->f->db->getOne($sql);
1415 mbroquet 3730 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1416     if (database::isError($dernierevenement)) {
1417     die($dernierevenement->getMessage());
1418     }
1419     // Si on se trouve effectivement sur le dernier evenement d'instruction
1420     if ($dernierevenement == $id) {
1421     // Alors on valide la suppression
1422     $this->correct = true;
1423     $this->addToMessage(_('Destruction_chronologique'));
1424     } else {
1425     // Alors on annule la suppression
1426     $this->correct = false;
1427     $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
1428     }
1429     }
1430     }
1431    
1432     /**
1433     * Vérification de la possibilité ou non de modifier des dates de suivi
1434     * @param string $champ champ date à vérifier
1435     */
1436     function updateDate($champ) {
1437    
1438     //Si le retourformulaire est "dossier_instruction"
1439     if ($this->getParameter("retourformulaire") == "dossier"
1440     || $this->getParameter("retourformulaire") == "dossier_instruction"
1441     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1442     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1443     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1444 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
1445     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
1446     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
1447     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
1448     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
1449 mbroquet 3730
1450     // Vérification de la possibilité de modifier les dates si déjà éditées
1451     if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
1452     // si l'utilisateur n'est pas un admin
1453     if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
1454     $this->correct = false;
1455     $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
1456     }
1457     }
1458     }
1459    
1460     //
1461     return true;
1462     }
1463    
1464 softime 8989 /**
1465     * SETTER_FORM - setValsousformulaire (setVal).
1466     *
1467     * @return void
1468     */
1469     function setValsousformulaire(&$form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire, &$dnu1 = null, $dnu2 = null) {
1470     // parent::setValsousformulaire($form, $maj, $validation, $idxformulaire, $retourformulaire, $typeformulaire);
1471 mbroquet 3730 //
1472 softime 8989 $this->retourformulaire = $retourformulaire;
1473     //
1474 mbroquet 3730 if ($maj == 0) {
1475 softime 8989 $form->setVal("destinataire", $this->getParameter("idxformulaire"));
1476     $form->setVal("dossier", $this->getParameter("idxformulaire"));
1477 mbroquet 3730 }
1478     //
1479     $this->set_form_default_values($form, $maj, $validation);
1480     }
1481    
1482     /**
1483 softime 8989 * SETTER_FORM - set_form_default_values (setVal).
1484     *
1485     * @return void
1486 mbroquet 3730 */
1487     function set_form_default_values(&$form, $maj, $validation) {
1488 softime 8989 //
1489 mbroquet 3730 if ($maj == 0) {
1490     // si contexte DI
1491     if ($this->getParameter("retourformulaire") == "dossier"
1492     || $this->getParameter("retourformulaire") == "dossier_instruction"
1493     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
1494     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
1495     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
1496 softime 6565 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures"
1497     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_infractions"
1498     || $this->getParameter("retourformulaire") == "dossier_contentieux_toutes_infractions"
1499     || $this->getParameter("retourformulaire") == "dossier_contentieux_mes_recours"
1500     || $this->getParameter("retourformulaire") == "dossier_contentieux_tous_recours") {
1501 mbroquet 3730 // on recupère les signataires de la multicollectivité et de celle du DI
1502 softime 7996 $di = $this->f->get_inst__om_dbform(array(
1503     "obj" => "dossier_instruction",
1504 softime 8989 "idx" => $this->getParameter("idxformulaire"),
1505 softime 7996 ));
1506 softime 8989 $sql = str_replace(
1507     "<collectivite_di>",
1508     $di->getVal("om_collectivite"),
1509     $this->get_var_sql_forminc__sql("signataire_arrete_defaut_by_di")
1510     );
1511 mbroquet 3730 } else {
1512 softime 8989 $sql = $this->get_var_sql_forminc__sql("signataire_arrete_defaut");
1513 mbroquet 3730 }
1514     $res = $this->f->db->query($sql);
1515 softime 8989 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\")", VERBOSE_MODE);
1516     $this->f->isDatabaseError($res);
1517 mbroquet 3730 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
1518 softime 8989 if (isset($row["signataire_arrete"])
1519     && is_numeric($row["signataire_arrete"])) {
1520     //
1521     $form->setVal("signataire_arrete", $row["signataire_arrete"]);
1522 mbroquet 3730 }
1523 softime 8989 // Date du jour
1524     $form->setVal("date_evenement", date("Y-m-d"));
1525 mbroquet 3730 }
1526 softime 8989 //
1527 mbroquet 3730 if ($maj == 0 || $maj == 1 || $maj == 125) {
1528 softime 8989 $form->setVal("bible_auto", "bible_auto()");
1529     $form->setVal("bible", "bible(1)");
1530     $form->setVal("bible2", "bible(2)");
1531     $form->setVal("bible3", "bible(3)");
1532     $form->setVal("bible4", "bible(4)");
1533 mbroquet 3730 }
1534 softime 8989 //
1535 softime 7521 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1536 softime 8989 if ($maj == 1
1537     && $this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1538 softime 7521 && $this->has_an_edition() === true) {
1539 softime 8989 //
1540     $form->setVal("live_preview", $this->getVal($this->clePrimaire));
1541     $form->setVal("btn_refresh", "reload_pdf_viewer()");
1542     $form->setVal("btn_preview", "show_instr_preview()");
1543     $form->setVal("btn_redaction", "show_instr_redaction()");
1544 softime 7521 }
1545 mbroquet 3730 }
1546    
1547     function setLayout(&$form, $maj){
1548 softime 8593 $form->setBloc('evenement','D',"","sousform-instruction-action-".$maj);
1549 mbroquet 3730
1550 softime 8593 $form->setFieldset('evenement','D',_('Evenement'));
1551     $form->setFieldset('om_final_instruction_utilisateur','F','');
1552    
1553     $form->setBloc('om_final_instruction_utilisateur','F');
1554 mbroquet 3730
1555 softime 8593 $form->setBloc('date_finalisation_courrier','D',"","");
1556 mbroquet 3730
1557 softime 8593 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
1558     $form->setBloc('date_finalisation_courrier','D',"","col_6");
1559     $form->setBloc('date_envoi_controle_legalite','F');
1560 mbroquet 3730
1561 softime 8593 $form->setBloc('date_retour_signature','D',"","col_6");
1562     $form->setBloc('date_retour_controle_legalite','F');
1563     $form->setFieldset('date_retour_controle_legalite','F','');
1564    
1565     $form->setBloc('date_retour_controle_legalite','F');
1566 mbroquet 3730
1567 softime 10573 $form->setBloc('statut_signature','D');
1568     $form->setFieldset('statut_signature','D','Suivi Parapheur');
1569     $form->setBloc('commentaire_signature','F');
1570     $form->setBloc('historique_signature','D');
1571     $form->setFieldset('historique_signature', 'DF', __("Historique"), "collapsible, startClosed");
1572     $form->setBloc('historique_signature','F');
1573     $form->setFieldset('historique_signature','F');
1574    
1575 softime 8593 if ($maj == 1) {
1576     // Récupère la collectivité du dossier d'instruction
1577     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
1578 mbroquet 3730
1579 softime 8593 //
1580     if ($this->f->is_option_preview_pdf_enabled($collectivite_di) === true
1581     && $this->has_an_edition() === true) {
1582 softime 7521 //
1583 softime 8593 $form->setBloc('complement_om_html','D',"","container_instr_edition");
1584     $form->setBloc('complement_om_html','D',"","hidelabel box_instr_edition redaction_instr_edition");
1585     $form->setBloc('complement_om_html','D',"","box_instr_edition_main");
1586     $form->setFieldset('complement_om_html','D',_('Complement'));
1587     $form->setFieldset('bible','F','');
1588     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1589     $form->setFieldset('bible2','F','');
1590     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1591     $form->setFieldset('bible3','F','');
1592     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1593     $form->setFieldset('bible4','F','');
1594     $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1595     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1596     $form->setBloc('corps_om_htmletatex','F');
1597     $form->setBloc('btn_preview','DF',"","box_instr_edition_btn");
1598     $form->setBloc('btn_preview','F');
1599     $form->setBloc('btn_redaction','D', '',"hidelabel box_instr_edition preview_instr_edition");
1600     $form->setBloc('btn_redaction','DF',"","box_instr_edition_btn");
1601     $form->setFieldset('btn_refresh','D',_('Prévisualisation'), "box_instr_edition_main");
1602     $form->setFieldset('live_preview','F');
1603     $form->setBloc('live_preview','F');
1604     $form->setBloc('live_preview','F');
1605 softime 7521 } else {
1606 softime 8593 $form->setBloc('complement_om_html','D',"","hidelabel");
1607 softime 7521 $form->setFieldset('complement_om_html','D',_('Complement'));
1608     $form->setFieldset('bible','F','');
1609     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1610     $form->setFieldset('bible2','F','');
1611     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1612     $form->setFieldset('bible3','F','');
1613     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1614     $form->setFieldset('bible4','F','');
1615 softime 8593 $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1616     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1617     $form->setBloc('corps_om_htmletatex','F');
1618 softime 7521 }
1619 softime 8593 } else {
1620     $form->setBloc('complement_om_html','D',"","hidelabel");
1621     $form->setFieldset('complement_om_html','D',_('Complement'));
1622     $form->setFieldset('bible','F','');
1623     $form->setFieldset('complement2_om_html','D',_('Complement 2'));
1624     $form->setFieldset('bible2','F','');
1625     $form->setFieldset('complement3_om_html','D',_('Complement 3'));
1626     $form->setFieldset('bible3','F','');
1627     $form->setFieldset('complement4_om_html','D',_('Complement 4'));
1628     $form->setFieldset('bible4','F','');
1629     $form->setFieldset('titre_om_htmletat','DF',_('Titre'), 'startClosed');
1630     $form->setFieldset('corps_om_htmletatex','DF',_('Corps'));
1631     $form->setBloc('corps_om_htmletatex','F');
1632 mbroquet 3730 }
1633     }
1634    
1635     function setLib(&$form, $maj) {
1636     //
1637     parent::setLib($form, $maj);
1638     //
1639     $form->setLib('bible_auto', "");
1640     $form->setLib('bible', "");
1641     $form->setLib('bible2', "");
1642     $form->setLib('bible3', "");
1643     $form->setLib('bible4', "");
1644 softime 7521 $form->setLib('btn_refresh', "");
1645 softime 8593 $form->setLib('btn_preview', "");
1646     $form->setLib('btn_redaction', "");
1647 softime 7521 $form->setLib('live_preview', "");
1648 mbroquet 3730 $form->setLib('om_final_instruction_utilisateur', _("finalise par"));
1649 softime 8989 $form->setLib('date_envoi_rar', __("date_envoi_ar"));
1650     $form->setLib('date_retour_rar', __("date_notification"));
1651 softime 10573 $form->setLib('statut_signature', __("statut"));
1652     $form->setLib('commentaire_signature', __("commentaire"));
1653     $form->setLib('historique_signature', '');
1654     $form->setLib('preview_edition', "");
1655 softime 8593
1656     // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1657     // ajout et que l'option de rédaction libre est activée sur la
1658     // collectivité du dossier
1659     if ($maj === '0' && $this->is_option_redaction_libre_enabled() === true) {
1660     //
1661     $help_text_template = '%s <span class="info-16" title="%s"></span>';
1662     $help_text = _("Attention: le passage du mode 'Rédaction libre' à celui de 'Rédaction par compléments' fait perdre toute la rédaction manuelle effectuée.");
1663     $form->setLib('flag_edition_integrale', sprintf($help_text_template, _("Type de rédaction"), $help_text));
1664     }
1665     else {
1666     $form->setLib('flag_edition_integrale', _("Type de rédaction"));
1667     }
1668    
1669     // Ajout d'une infobulle d'aide lorsque le formulaire est en mode
1670     // modification et que l'option de prévisualisation de l'édition est
1671     // activée sur la collectivité du dossier
1672     if ($maj === '1'
1673     && $this->f->is_option_preview_pdf_enabled($this->get_dossier_instruction_om_collectivite()) === true) {
1674     //
1675     $help_text_template = '%s <span class="info-16" title="%s"></span>';
1676     $help_text = _("Attention la modification de la valeur de ce champ n'est pas prise en compte dans la prévisualisation. Pour que cette valeur soit mise à jour, il suffit de valider le formulaire.");
1677     $form->setLib('date_evenement', sprintf($help_text_template, _('date_evenement'), $help_text));
1678     $form->setLib('signataire_arrete', sprintf($help_text_template, _('signataire_arrete'), $help_text));
1679     }
1680 mbroquet 3730 }
1681    
1682 softime 8989 /**
1683     * TRIGGER - triggerajouter.
1684     *
1685     * @return boolean
1686     */
1687     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
1688     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
1689 mbroquet 3730 /**
1690     * Le code suivant permet de récupérer des valeurs des tables evenement
1691     * et dossier pour les stocker dans l'instruction :
1692     * DEPUIS L'EVENEMENT
1693     * - action
1694     * - delai
1695     * - accord_tacite
1696     * - etat
1697     * - avis_decision
1698     * - delai_notification
1699     * - lettretype
1700     * - autorite_competente
1701 softime 10573 * - pec_metier
1702 softime 6565 * - complement_om_html
1703     * - complement2_om_html
1704     * - complement3_om_html
1705     * - complement4_om_html
1706     * - complement5_om_html
1707 mbroquet 3730 * DEPUIS LE DOSSIER D'INSTRUCTION
1708     * - archive_delai
1709     * - archive_accord_tacite
1710     * - archive_etat
1711     * - archive_avis
1712     * - date_complet
1713     * - date_rejet
1714     * - date_limite
1715     * - date_notification_delai
1716     * - date_decision
1717     * - date_validite
1718     * - date_achevement
1719     * - date_chantier
1720     * - date_conformite
1721     * - avis_decision
1722     */
1723     // Récupération de tous les paramètres de l'événement sélectionné
1724     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1725     WHERE evenement=".$this->valF['evenement'];
1726 softime 8989 $res = $this->f->db->query($sql);
1727     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
1728 mbroquet 3730 if (database::isError($res)) {
1729     die($res->getMessage());
1730     }
1731     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1732     // Récupération de l'identifiant de l'action
1733     // si une action est paramétrée dans l'événement
1734     $this->valF['action'] = NULL;
1735     if (isset($row['action']) and !empty($row['action'])) {
1736     $this->valF['action']=$row['action'];
1737     }
1738     // Récupération de la valeur du délai
1739     $this->valF['delai'] = $row['delai'];
1740     // Récupération de l'identifiant de l'état
1741     // si un état est paramétré dans l'événement
1742     $this->valF['etat']=NULL;
1743     if (isset($row['etat']) and !empty($row['etat'])) {
1744     $this->valF['etat']=$row['etat'];
1745     }
1746     // Récupération de la valeur d'accord tacite
1747     $this->valF['accord_tacite']=$row['accord_tacite'];
1748     // Récupération de la valeur du délai de notification
1749     $this->valF['delai_notification']=$row['delai_notification'];
1750     // Récupération de l'identifiant de l'avis
1751     // si un avis est paramétré dans l'événement
1752     $this->valF['avis_decision'] = NULL;
1753     if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
1754     $this->valF['avis_decision']=$row['avis_decision'];
1755     }
1756     // Récupération de la valeur de l'autorité compétente
1757     // si l'autorité compétente est paramétré dans l'événement
1758     $this->valF['autorite_competente'] = NULL;
1759     if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
1760     $this->valF['autorite_competente']=$row['autorite_competente'];
1761     }
1762     // Récupération de la valeur de la lettre type
1763     $this->valF['lettretype']=$row['lettretype'];
1764 softime 10573 // Récupération de la valeur de la prise en compte métier
1765     // si la prise en compte métier est paramétrée dans l'événement
1766     $this->valF['pec_metier'] = NULL;
1767     if(isset($row['pec_metier']) === true and empty($row['pec_metier']) === false) {
1768     $this->valF['pec_metier'] = $row['pec_metier'];
1769     }
1770 mbroquet 3730 }
1771     // Récupération de toutes les valeurs du dossier d'instruction en cours
1772     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
1773     WHERE dossier='".$this->valF['dossier']."'";
1774 softime 8989 $res = $this->f->db->query($sql);
1775     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
1776 mbroquet 3730 if (database::isError($res)) {
1777     die($res->getMessage());
1778     }
1779     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1780     $this->updateArchiveData($row);
1781    
1782     // Récupération de la duree de validite du dossier d'autorisation
1783     $sql = "SELECT duree_validite_parametrage
1784     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1785     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1786     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1787     LEFT JOIN ".DB_PREFIXE."dossier
1788     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1789     WHERE dossier.dossier='".$this->valF['dossier']."'";
1790 softime 8989 $duree_validite_parametrage = $this->f->db->getOne($sql);
1791     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1792 mbroquet 3730 database::isError($duree_validite_parametrage);
1793     if ($duree_validite_parametrage != '') {
1794     $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
1795     }
1796    
1797     // Identifiant du type de courrier
1798     $idTypeCourrier = '11';
1799     $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
1800     // Code barres
1801     $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1802     }
1803    
1804     // Test si une restriction est valide
1805     // return boolean
1806     function restrictionIsValid($restriction){
1807     if($this->restriction_valid != null) {
1808     return $this->restriction_valid;
1809     }
1810     if(empty($restriction)) {
1811     $this->restriction_valid = true;
1812     return $this->restriction_valid;
1813     }
1814 nmeucci 3873 // Liste des opérateurs possibles sans espace
1815     $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
1816     // Liste identique mais avec le marqueur §
1817     $mark = "§";
1818     $operateurs_marked = array();
1819     foreach ($operateurs as $operateur) {
1820     $operateurs_marked[] = $mark.$operateur.$mark;
1821     }
1822 mbroquet 3730
1823     // Supprime tous les espaces de la chaîne de caractère
1824 nmeucci 3873 $restriction = preg_replace('/\s+/', '', $restriction);
1825 mbroquet 3730
1826 nmeucci 3873 // Met un marqueur avant et après les opérateurs
1827     // puis transforme la chaine en un tableau
1828     $restriction = str_replace($operateurs, $operateurs_marked,
1829 mbroquet 3730 $restriction);
1830    
1831 nmeucci 3873 // Pour chaque opérateur logique
1832     foreach (array('&&', '||') as $operator) {
1833    
1834     // S'il est absent on ne fait aucun traitement
1835     if (strpos($restriction, $mark.$operator.$mark) === false) {
1836     continue;
1837     }
1838     // Sinon on vérifie les deux conditions avec le OU/ET logique
1839     $restrictions = explode($mark.$operator.$mark, $restriction);
1840     $restrictions[0] = explode($mark, $restrictions[0]);
1841     $restrictions[1] = explode($mark, $restrictions[1]);
1842     $res_bool = false;
1843     if ($operator == '&&') {
1844     if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1845     && $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1846     $res_bool = true;
1847     }
1848     }
1849     if ($operator == '||') {
1850     if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1851     || $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1852     $res_bool = true;
1853     }
1854     }
1855     return $res_bool;
1856     }
1857     $tabRestriction = explode($mark, $restriction);
1858     return $this->is_restriction_satisfied($tabRestriction, $operateurs);
1859    
1860     }
1861    
1862     function is_restriction_satisfied($restriction, $operateurs) {
1863 mbroquet 3730 // Tableau comprenant les résultat
1864     $res = array();
1865     // Compteur pour les résultat
1866     // commence à 1 car le 0 doit rester inchangé tout au long du traitement
1867     $j = 1;
1868     // Comparateur du calcul
1869     $comparateur = '';
1870     // Booléen retourné
1871     $res_bool = true;
1872    
1873     // S'il y a un comparateur
1874 nmeucci 3873 if (in_array(">=", $restriction)
1875     || in_array("<=", $restriction)
1876     || in_array("==", $restriction)
1877     || in_array("!=", $restriction)) {
1878 mbroquet 3730
1879     // Si le tableau n'est pas vide
1880 nmeucci 3873 if (count($restriction) > 0) {
1881 mbroquet 3730
1882     // Boucle dans le tableau pour récupérer seulement les valeurs
1883 nmeucci 3873 foreach ($restriction as $key => $value) {
1884 mbroquet 3730 //
1885     if (!in_array($value, $operateurs)) {
1886     if ($this->getRestrictionValue($value) != false) {
1887     $res[] = $this->getRestrictionValue($value);
1888     } else {
1889     // Message d'erreur
1890     $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
1891     $this->addToMessage($error_message);
1892     // Arrête le traitement
1893     return false;
1894     }
1895     }
1896     }
1897    
1898     // Boucle dans le tableau
1899     // commence à 1 car le 0 doit rester inchangé tout au long du
1900     // traitement
1901 nmeucci 3873 for ($i = 1; $i<count($restriction); $i++) {
1902 mbroquet 3730
1903     // Récupère le comparateur
1904 nmeucci 3873 if ($restriction[$i] === ">="
1905     || $restriction[$i] === "<="
1906     || $restriction[$i] === "=="
1907     || $restriction[$i] === "!=") {
1908     $comparateur = $restriction[$i];
1909 mbroquet 3730 }
1910    
1911     // Si l'opérateur qui suit est un "+"
1912 nmeucci 3873 if ($restriction[$i] === "+") {
1913 mbroquet 3730 $dateDep = $res[$j];
1914     unset($res[$j]);$j++;
1915     $duree = $res[$j];
1916     unset($res[$j]);
1917     $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
1918     }
1919    
1920     // Si l'opérateur qui suit est un "-"
1921 nmeucci 3873 if ($restriction[$i] === "-") {
1922 mbroquet 3730 $dateDep = $res[$j];
1923     unset($res[$j]);$j++;
1924     $duree = $res[$j];
1925     unset($res[$j]);
1926     $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
1927     }
1928     }
1929    
1930     }
1931    
1932     // Si les tableau des résultats n'est pas vide
1933     if (count($res) > 0) {
1934     //
1935     $res_bool = false;
1936     // Effectue le test
1937     if ($comparateur === ">=") {
1938     //
1939     if (strtotime($res[0]) >= strtotime($res[$j])) {
1940     $res_bool = true;
1941     }
1942     }
1943     if ($comparateur === "<=") {
1944 nmeucci 3873 //
1945 mbroquet 3730 if (strtotime($res[0]) <= strtotime($res[$j])) {
1946     $res_bool = true;
1947     }
1948     }
1949 nmeucci 3873 if ($comparateur === "==") {
1950     //
1951     if (strtotime($res[0]) == strtotime($res[$j])) {
1952     $res_bool = true;
1953     }
1954     }
1955     if ($comparateur === "!=") {
1956     //
1957     if (strtotime($res[0]) != strtotime($res[$j])) {
1958     $res_bool = true;
1959     }
1960     }
1961 mbroquet 3730 }
1962     // Sinon une erreur s'affiche
1963     } else {
1964    
1965     // Message d'erreur
1966     $error_message = _("Mauvais parametrage de la restriction.")." ".
1967     _("Contactez votre administrateur");
1968     $this->addToMessage($error_message);
1969     // Arrête le traitement
1970     return false;
1971     }
1972    
1973     return $res_bool;
1974    
1975     }
1976    
1977     /**
1978     * Permet de définir si l'événement passé en paramètre est un événement retour.
1979     * @param integer $evenement événement à tester
1980     *
1981     * @return boolean retourne true si événement retour sinon false
1982     */
1983     function is_evenement_retour($evenement) {
1984     if(empty($evenement) || !is_numeric($evenement)) {
1985     return "";
1986     }
1987     $sql = "SELECT retour
1988     FROM ".DB_PREFIXE."evenement
1989     WHERE evenement = ".$evenement;
1990 softime 8989 $retour = $this->f->db->getOne($sql);
1991 mbroquet 3730 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1992     if (database::isError($retour)) {
1993     die($retour->getMessage());
1994     }
1995     if ($retour == 't') {
1996     return true;
1997     } else {
1998     return false;
1999     }
2000     }
2001    
2002     /**
2003     * Retourne le champ restriction de l'événement passé en paramètre.
2004     *
2005     * @param integer $evenement id de l'événement sur lequel récupérer la restriction
2006     *
2007     * @return string contenu du champ restriction
2008     */
2009     function get_restriction($evenement) {
2010     if(empty($evenement) || !is_numeric($evenement)) {
2011     return "";
2012     }
2013     //Récupère la restriction
2014     $sql= "SELECT
2015     restriction
2016     FROM
2017     ".DB_PREFIXE."evenement
2018     WHERE
2019     evenement =".$evenement;
2020    
2021 softime 8989 $restriction = $this->f->db->getOne($sql);
2022 mbroquet 3730 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
2023     if (database::isError($restriction)) {
2024     die($restriction->getMessage());
2025     }
2026     return $restriction;
2027     }
2028    
2029     /**
2030     * Récupère la valeur du champ dans la restriction
2031     * @param string $restrictionValue Nom du champ
2032     * @return mixed Valeur du champ
2033     */
2034     function getRestrictionValue($restrictionValue){
2035    
2036     // Initialisation de la valeur de retour
2037     $return = false;
2038    
2039     // Récupére les valeurs du dossier
2040     $value_dossier = $this->get_dossier_actual();
2041    
2042     //
2043     if (is_numeric($restrictionValue)) {
2044     $return = $restrictionValue;
2045     }elseif (isset($value_dossier[$restrictionValue])) {
2046     $return = $value_dossier[$restrictionValue];
2047     }elseif (isset($this->valF[$restrictionValue])) {
2048     $return = $this->valF[$restrictionValue];
2049     }
2050    
2051     // Retourne la valeur du champ
2052     return $return;
2053     }
2054    
2055 softime 6565
2056 mbroquet 3730 /**
2057 softime 6565 * Calcul des règle d'action selon leur type.
2058     *
2059     * Types de règle :
2060     * - date
2061     * - numeric
2062     * - text
2063     * - bool
2064     * - specific
2065     * - technical_data
2066 mbroquet 3730 *
2067 softime 6565 * @param string $rule Règle d'action.
2068     * @param string $rule_name Nom de la règle.
2069     * @param string $type Type de la règle.
2070     *
2071 mbroquet 3730 * @return mixed Résultat de la règle
2072     */
2073 softime 6565 public function regle($rule, $rule_name, $type = null) {
2074 mbroquet 3730
2075     // Supprime tous les espaces de la chaîne de caractère
2076     $rule = str_replace(' ', '', $rule);
2077     // Coupe la chaîne au niveau de l'opérateur
2078     $operands = explode ("+", $rule);
2079     // Nombre d'opérande
2080     $nb_operands = count($operands);
2081    
2082     // Règle à null
2083     if ($rule == "null") {
2084     return null;
2085     }
2086    
2087     // Tableau des champs de type date
2088     $rule_type_date = array(
2089     "regle_date_limite",
2090     "regle_date_notification_delai",
2091     "regle_date_complet",
2092     "regle_date_validite",
2093     "regle_date_decision",
2094     "regle_date_chantier",
2095     "regle_date_achevement",
2096     "regle_date_conformite",
2097     "regle_date_rejet",
2098     "regle_date_dernier_depot",
2099     "regle_date_limite_incompletude",
2100 softime 6565 "regle_date_cloture_instruction",
2101     "regle_date_premiere_visite",
2102     "regle_date_derniere_visite",
2103     "regle_date_contradictoire",
2104     "regle_date_retour_contradictoire",
2105     "regle_date_ait",
2106     "regle_date_transmission_parquet",
2107 softime 8989 "regle_date_affichage",
2108 mbroquet 3730 );
2109     // Tableau des champs de type numérique
2110     $rule_type_numeric = array(
2111     "regle_delai",
2112     "regle_delai_incompletude",
2113     );
2114 softime 6565 // Tableau des champs de type text
2115     $rule_type_text = array(
2116     );
2117     // Tableau des champs de type booléen
2118     $rule_type_bool = array(
2119 softime 10573 "regle_a_qualifier",
2120     "regle_incompletude",
2121     "regle_incomplet_notifie",
2122     "regle_evenement_suivant_tacite_incompletude",
2123 softime 6565 );
2124     // Tableau des champs spécifiques
2125     $rule_type_specific = array(
2126     "regle_autorite_competente",
2127     "regle_etat",
2128     "regle_accord_tacite",
2129     "regle_avis",
2130 softime 10573 "regle_pec_metier",
2131     "regle_etat_pendant_incompletude",
2132 softime 6565 );
2133     // Tableau des champs de données techniques
2134     $rule_type_technical_data = array(
2135     'regle_donnees_techniques1',
2136     'regle_donnees_techniques2',
2137     'regle_donnees_techniques3',
2138     'regle_donnees_techniques4',
2139     'regle_donnees_techniques5',
2140     );
2141 softime 8593 // Tableau des champs simple
2142     $rule_type_simple = array(
2143     "regle_dossier_instruction_type",
2144     );
2145 mbroquet 3730
2146     // Définit le type du champ
2147     if (in_array($rule_name, $rule_type_date) == true) {
2148     $type = "date";
2149     }
2150     if (in_array($rule_name, $rule_type_numeric) == true) {
2151     $type = "numeric";
2152     }
2153 softime 6565 if (in_array($rule_name, $rule_type_text) === true) {
2154     $type = "text";
2155     }
2156     if (in_array($rule_name, $rule_type_bool) === true) {
2157     $type = "bool";
2158     }
2159     if (in_array($rule_name, $rule_type_specific) === true) {
2160     $type = "specific";
2161     }
2162     if (in_array($rule_name, $rule_type_technical_data) === true) {
2163     $type = 'text';
2164     }
2165 softime 8593 if (in_array($rule_name, $rule_type_simple) === true) {
2166     $type = 'simple';
2167     }
2168 mbroquet 3730
2169 softime 6565 // Si c'est un type spécifique ou booléen alors il n'a qu'un opérande
2170     // Récupère directement la valeur de l'opérande
2171 softime 10573 if ($type === 'specific') {
2172 softime 6565 //
2173     return $this->get_value_for_rule($rule);
2174     }
2175    
2176 mbroquet 3730 // Initialisation des variables
2177     $key_date = 0;
2178     $total_numeric = 0;
2179 softime 6565 $res_text = '';
2180 mbroquet 3730
2181     // Pour chaque opérande
2182     foreach ($operands as $key => $operand) {
2183    
2184     // Si c'est une règle de type date
2185     if ($type == 'date') {
2186     // Vérifie si au moins une des opérandes est une date
2187 softime 6565 if (is_numeric($operand) === false
2188     && $this->get_value_for_rule($operand) !== null
2189     && $this->f->check_date($this->get_value_for_rule($operand)) == true) {
2190 mbroquet 3730 // Récupère la position de la date
2191     $key_date = $key;
2192     }
2193     // Les autres opérandes doivent être que des numériques
2194     if (is_numeric($operand) == true) {
2195     // Ajoute l'opérande au total
2196     $total_numeric += $operand;
2197     }
2198 softime 6565 if (is_numeric($operand) === false
2199     && $this->get_value_for_rule($operand) !== null
2200     && is_numeric($this->get_value_for_rule($operand)) == true) {
2201 mbroquet 3730 // Ajoute l'opérande au total
2202 softime 6565 $total_numeric += $this->get_value_for_rule($operand);
2203 mbroquet 3730 }
2204     }
2205    
2206     // Si c'est une règle de type numérique
2207     if ($type == 'numeric') {
2208     // Les opérandes doivent être que des numériques
2209     if (is_numeric($operand) == true) {
2210     // Ajoute l'opérande au total
2211     $total_numeric += $operand;
2212     }
2213 softime 6565 if (is_numeric($operand) === false
2214     && $this->get_value_for_rule($operand) !== null
2215     && is_numeric($this->get_value_for_rule($operand)) == true) {
2216 mbroquet 3730 // Ajoute l'opérande au total
2217 softime 6565 $total_numeric += $this->get_value_for_rule($operand);
2218 mbroquet 3730 }
2219     }
2220 softime 6565
2221     // Si c'est une règle de type text
2222     if ($type === 'text') {
2223     // Concatène toutes les chaînes de caractère
2224     $res_text .= $this->get_value_for_rule($operand);
2225     }
2226 mbroquet 3730 }
2227    
2228     // Résultat pour une règle de type date
2229     if ($type == 'date') {
2230     // Retourne le calcul de la date
2231     return $this->f->mois_date($this->valF[$operands[$key_date]],
2232     $total_numeric, "+");
2233     }
2234    
2235     // Résultat pour une règle de type numérique
2236     if ($type == 'numeric') {
2237     // Retourne le calcul
2238     return $total_numeric;
2239     }
2240 softime 6565
2241     // Résultat pour une règle de type text
2242     if ($type === 'text') {
2243     // Retourne la chaîne de caractère
2244     return $res_text;
2245     }
2246 softime 10573 if ($type === 'simple' || $type === 'bool') {
2247 softime 8593 // Retourne la valeur du champs rule
2248     return $rule;
2249     }
2250 softime 6565 }
2251    
2252    
2253     /**
2254     * Récupère la valeur du champs dans l'instruction ou dans les données
2255     * techniques.
2256     * Spécifique au calcul des règles.
2257     *
2258     * @param string $field Champ
2259     *
2260     * @return mixed Valeur du champ
2261     */
2262     private function get_value_for_rule($field) {
2263     // Si le champ n'existe pas dans la table instruction
2264     if (array_key_exists($field, $this->valF) === false) {
2265     // Récupère l'instance de la classe donnees_techniques
2266     $inst_donnees_techniques = $this->get_inst_donnees_techniques();
2267     // Retourne la valeur de la donnée technique
2268     return $inst_donnees_techniques->getVal($field);
2269     }
2270    
2271     //
2272     return $this->valF[$field];
2273     }
2274    
2275    
2276     /**
2277     * [get_inst_donnees_techniques description]
2278     *
2279     * @param [type] $donnees_techniques [description]
2280     *
2281     * @return [type] [description]
2282     */
2283     function get_inst_donnees_techniques($donnees_techniques = null) {
2284     //
2285     if (isset($this->inst_donnees_techniques) === false or
2286     $this->inst_donnees_techniques === null) {
2287     //
2288     if (is_null($donnees_techniques)) {
2289     $donnees_techniques = $this->getDonneesTechniques();
2290     }
2291     //
2292 softime 7996 $this->inst_donnees_techniques = $this->f->get_inst__om_dbform(array(
2293     "obj" => "donnees_techniques",
2294     "idx" => $donnees_techniques,
2295     ));
2296 softime 6565 }
2297     //
2298     return $this->inst_donnees_techniques;
2299     }
2300    
2301    
2302     /**
2303     * Retourne l'identifiant des données techniques liées du dossier
2304     * @return string L'identifiant des données techniques liées du dossier
2305     */
2306     function getDonneesTechniques() {
2307 mbroquet 3730
2308 softime 6565 $donnees_techniques = '';
2309    
2310     $sql = "SELECT donnees_techniques
2311     FROM ".DB_PREFIXE."donnees_techniques
2312     WHERE dossier_instruction ='".$this->valF["dossier"]."'";
2313 softime 8989 $donnees_techniques = $this->f->db->getOne($sql);
2314 softime 6565 $this->f->addToLog("getStatut() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2315     if ( database::isError($donnees_techniques)){
2316     die();
2317     }
2318    
2319     return $donnees_techniques;
2320 mbroquet 3730 }
2321    
2322 fmichon 4708 /**
2323     * TRIGGER - triggerajouterapres.
2324     *
2325     * - Mise à jour des informations liées au workflow sur le dossier
2326     * - Interface avec le référentiel ERP [105][111]
2327     * - Mise à jour du DA
2328     * - Historisation de la vie du DI
2329     *
2330     * @return boolean
2331     */
2332 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2333     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2334 fmichon 4708
2335     // On a besoin de l'instance du dossier lié à l'événement d'instruction
2336     $inst_di = $this->get_inst_dossier($this->valF['dossier']);
2337     // Instance de la classe evenement
2338     $inst_evenement = $this->get_inst_evenement($this->valF['evenement']);
2339 softime 9245 // Instance de l'état courant du dossier d'instruction
2340     $inst_current_etat = $this->f->get_inst__om_dbform(array(
2341     "obj" => "etat",
2342     "idx" => $inst_di->get_id_etat(),
2343     ));
2344 fmichon 4708
2345 mbroquet 3730 /**
2346     * Mise à jour des valeurs du dossier en fonction des valeurs calculées
2347     * par l'action
2348     */
2349 fmichon 4708 // état de complétude actuel du dossier
2350     $incompletude = ($inst_di->getVal('incompletude') == 't' ? true : false);
2351 softime 10573 // L'événement suivant tacite paramétré est destiné à la gestion de l'incomplétude
2352     $ev_suiv_tacite_incompletude = false;
2353 mbroquet 3730 // Initialisation
2354 softime 9245 $valF = array();
2355     $valF_dt = array();
2356 fmichon 4708 //
2357 mbroquet 3730 // Récupération des paramètres de l'action
2358     $sql = "SELECT * FROM ".DB_PREFIXE."action
2359     WHERE action='".$this->valF['action']."'";
2360 softime 8989 $res = $this->f->db->query($sql);
2361     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
2362 mbroquet 3730 if (database::isError($res)) {
2363     die($res->getMessage());
2364     }
2365     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2366    
2367     // pour chacune des regles, on applique la regle
2368 softime 6565 if ($row['regle_delai'] != '') {
2369 mbroquet 3730 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
2370     }
2371 softime 6565 if ($row['regle_accord_tacite'] != '') {
2372 mbroquet 3730 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
2373     }
2374 softime 6565 if ($row['regle_avis'] != '') {
2375 mbroquet 3730 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
2376     }
2377 softime 6565 if ($row['regle_date_limite'] != '') {
2378     $valF['date_limite'] = $this->regle($row['regle_date_limite'], 'regle_date_limite');
2379 mbroquet 3730 }
2380 softime 6565 if ($row['regle_date_complet'] != '') {
2381     $valF['date_complet'] = $this->regle($row['regle_date_complet'], 'regle_date_complet');
2382 mbroquet 3730 }
2383 softime 6565 if ($row['regle_date_dernier_depot'] != '') {
2384     $valF['date_dernier_depot'] = $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
2385 mbroquet 3730 }
2386 softime 6565 if ($row['regle_date_notification_delai'] != '') {
2387     $valF['date_notification_delai'] = $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
2388 mbroquet 3730 }
2389 softime 6565 if ($row['regle_date_decision'] != '') {
2390     $valF['date_decision'] = $this->regle($row['regle_date_decision'], 'regle_date_decision');
2391 mbroquet 3730 }
2392 softime 6565 if ($row['regle_date_rejet'] != '') {
2393     $valF['date_rejet'] = $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
2394 mbroquet 3730 }
2395 softime 6565 if ($row['regle_date_validite'] != '') {
2396     $valF['date_validite'] = $this->regle($row['regle_date_validite'], 'regle_date_validite');
2397 mbroquet 3730 }
2398 softime 6565 if ($row['regle_date_chantier'] != '') {
2399     $valF['date_chantier'] = $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
2400 mbroquet 3730 }
2401 softime 6565 if ($row['regle_date_achevement'] != '') {
2402     $valF['date_achevement'] = $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
2403 mbroquet 3730 }
2404 softime 6565 if ($row['regle_date_conformite'] != '') {
2405     $valF['date_conformite'] = $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
2406 mbroquet 3730 }
2407 softime 6565 if ($row['regle_date_limite_incompletude'] != '') {
2408     $valF['date_limite_incompletude'] = $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
2409 mbroquet 3730 }
2410 softime 6565 if ($row['regle_delai_incompletude'] != '') {
2411     $valF['delai_incompletude'] = $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
2412 mbroquet 3730 }
2413 softime 6565 if ($row['regle_autorite_competente'] != '') {
2414     $valF['autorite_competente'] = $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
2415 mbroquet 3730 }
2416 softime 6565 if ($row['regle_etat'] != '') {
2417 softime 10573 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
2418 mbroquet 3730 }
2419 softime 6565 if ($row['regle_date_cloture_instruction'] !== '') {
2420     $valF['date_cloture_instruction'] = $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
2421     }
2422     if ($row['regle_date_premiere_visite'] !== '') {
2423     $valF['date_premiere_visite'] = $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
2424     }
2425     if ($row['regle_date_derniere_visite'] !== '') {
2426     $valF['date_derniere_visite'] = $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
2427     }
2428     if ($row['regle_date_contradictoire'] !== '') {
2429     $valF['date_contradictoire'] = $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
2430     }
2431     if ($row['regle_date_retour_contradictoire'] !== '') {
2432     $valF['date_retour_contradictoire'] = $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
2433     }
2434     if ($row['regle_date_ait'] !== '') {
2435     $valF['date_ait'] = $this->regle($row['regle_date_ait'], 'regle_date_ait');
2436     }
2437     if ($row['regle_donnees_techniques1'] !== '') {
2438     $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
2439     }
2440     if ($row['regle_donnees_techniques2'] !== '') {
2441     $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
2442     }
2443     if ($row['regle_donnees_techniques3'] !== '') {
2444     $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
2445     }
2446     if ($row['regle_donnees_techniques4'] !== '') {
2447     $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
2448     }
2449     if ($row['regle_donnees_techniques5'] !== '') {
2450     $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
2451     }
2452     if ($row['regle_date_transmission_parquet'] !== '') {
2453     $valF['date_transmission_parquet'] = $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
2454     }
2455 softime 8593 if ($row['regle_dossier_instruction_type'] !== '') {
2456     $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
2457     }
2458 softime 8989 // La date d'affichage est modifiée seulement si le champ n'est pas
2459     // renseigné
2460     if ($row['regle_date_affichage'] !== ''
2461     && ($inst_di->getVal('date_affichage') === ''
2462     || $inst_di->getVal('date_affichage') === null)) {
2463     //
2464     $valF['date_affichage'] = $this->regle($row['regle_date_affichage'], 'regle_date_affichage');
2465     }
2466 softime 10573 //
2467     if ($row['regle_pec_metier'] != '') {
2468     $valF['pec_metier'] = $this->regle($row['regle_pec_metier'], 'regle_pec_metier');
2469     }
2470     if ($row['regle_a_qualifier'] != '') {
2471     $valF['a_qualifier'] = $this->regle($row['regle_a_qualifier'], 'regle_a_qualifier');
2472     }
2473     //
2474     if ($row['regle_incompletude'] != '') {
2475     $valF['incompletude'] = $this->regle($row['regle_incompletude'], 'regle_incompletude');
2476     }
2477     if ($row['regle_incomplet_notifie'] != '') {
2478     $valF['incomplet_notifie'] = $this->regle($row['regle_incomplet_notifie'], 'regle_incomplet_notifie');
2479     }
2480     if ($row['regle_etat_pendant_incompletude'] != '') {
2481     $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat_pendant_incompletude'], 'regle_etat_pendant_incompletude');
2482     }
2483     if ($row['regle_evenement_suivant_tacite_incompletude'] != '') {
2484     $resti = $this->regle($row['regle_evenement_suivant_tacite_incompletude'], 'regle_evenement_suivant_tacite_incompletude');
2485     if (strtolower($resti) === 't' || strtolower($resti) === 'true') {
2486     $ev_suiv_tacite_incompletude = true;
2487     }
2488     }
2489 mbroquet 3730 }
2490 softime 6063
2491     // Si l'événement a un événement suivant tacite
2492     if($inst_evenement->getVal('evenement_suivant_tacite') != '') {
2493 softime 10573 // En fonction de l'action de l'événement, l'événement suivant tacite ne sera
2494     // pas associé de le même façon au dossier d'instruction
2495     if ($ev_suiv_tacite_incompletude === false) {
2496 softime 6063 $valF['evenement_suivant_tacite'] = $inst_evenement->getVal('evenement_suivant_tacite');
2497 softime 10573 }
2498     if ($ev_suiv_tacite_incompletude === true) {
2499 softime 6063 $valF['evenement_suivant_tacite_incompletude'] = $inst_evenement->getVal('evenement_suivant_tacite');
2500 nhaye 5254 }
2501 mbroquet 3730 }
2502 softime 6565 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
2503 softime 9245 if (count($valF_dt) > 0) {
2504 softime 6565 $dt_id = $this->getDonneesTechniques();
2505     // On met à jour le dossier
2506     $cle = " donnees_techniques='".$dt_id."'";
2507 softime 8989 $res1 = $this->f->db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
2508     $this->addToLog(__METHOD__."(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2509 softime 6565 if (database::isError($res1)) {
2510     die($res->getMessage());
2511     }
2512     // Affichage d'informations à l'utilisateur
2513 softime 8989 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$this->f->db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2514 softime 6565 }
2515 mbroquet 3730 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2516 softime 9245 if (count($valF) > 0) {
2517 softime 10573 //
2518     $inst_dossier = $this->f->get_inst__om_dbform(array(
2519     "obj" => "dossier",
2520     "idx" => $this->valF['dossier'],
2521     ));
2522     $valF['instruction'] = $id;
2523     $update_by_instruction = $inst_dossier->update_by_instruction($valF);
2524     if ($update_by_instruction === false) {
2525     $this->cleanMessage();
2526     $this->addToMessage(sprintf('%s %s', __("Une erreur s'est produite lors de la mise à jour du dossier d'instruction."), __("Veuillez contacter votre administrateur.")));
2527     return false;
2528 mbroquet 3730 }
2529     // Affichage d'informations à l'utilisateur
2530 softime 8989 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$this->f->db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2531 mbroquet 3730 }
2532    
2533     /**
2534 fmichon 4708 * Interface avec le référentiel ERP.
2535     *
2536     * (WS->ERP)[105] Arrêté d'un dossier PC effectué -> PC qui concerne un ERP
2537     * (WS->ERP)[111] Décision de conformité effectuée -> PC qui concerne un ERP
2538     * Déclencheur :
2539     * - L'option ERP est activée
2540     * - Le dossier est marqué comme "connecté au référentiel ERP"
2541     * - Le dossier est de type PC
2542     * - Le formulaire d'ajout d'un événement d'instruction est validé
2543     * avec un événement pour lequel les services ERP doivent être
2544     * informé
2545 mbroquet 3730 */
2546 fmichon 4708 //
2547 softime 7521 if ($this->f->is_option_referentiel_erp_enabled() === true
2548 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2549     && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2550     && in_array($inst_evenement->getVal($inst_evenement->clePrimaire), explode(";", $this->f->getParameter('erp__evenements__decision__pc')))) {
2551 mbroquet 3730 //
2552 fmichon 4708 $infos = array(
2553     "dossier_instruction" => $this->valF['dossier'],
2554     "decision" => $inst_evenement->getVal("libelle"),
2555     );
2556 mbroquet 3730 //
2557 fmichon 4708 $ret = $this->f->send_message_to_referentiel_erp(105, $infos);
2558     if ($ret !== true) {
2559     $this->cleanMessage();
2560     $this->addToMessage(_("Une erreur s'est produite lors de la notification (105) du référentiel ERP. Contactez votre administrateur."));
2561     return false;
2562 mbroquet 3730 }
2563 fmichon 4708 $this->addToMessage(_("Notification (105) du référentiel ERP OK."));
2564     }
2565 mbroquet 3730
2566 softime 8989 // Si le mode en rédaction intégrale est activé
2567     if (isset($this->valF['flag_edition_integrale']) === true
2568     && $this->valF['flag_edition_integrale'] === true) {
2569     $redactionIntegraleValF = array();
2570    
2571     // Récupère la collectivite du dossier d'instruction
2572     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2573     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2574     // Récupère le corps de la lettre type
2575     $params = array(
2576     "specific" => array(
2577     "corps" => array(
2578     "mode" => "get",
2579     )
2580     ),
2581     );
2582     $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, $id, $params);
2583     $redactionIntegraleValF['corps_om_htmletatex'] = $result['pdf_output'];
2584     // Récupère le titre de la lettre type
2585     $params = array(
2586     "specific" => array(
2587     "titre" => array(
2588     "mode" => "get",
2589     )
2590     ),
2591     );
2592     $result = $this->compute_pdf_output('lettretype', $this->valF['lettretype'], $collectivite, $id, $params);
2593     $redactionIntegraleValF['titre_om_htmletat'] = $result['pdf_output'];
2594    
2595     // mise à jour en base de données
2596     $res = $this->f->db->autoExecute(
2597     DB_PREFIXE.$this->table,
2598     $redactionIntegraleValF,
2599     DB_AUTOQUERY_UPDATE,
2600     $this->clePrimaire."=".$id
2601     );
2602     $this->addToLog(__METHOD__."(): db->autoexecute(\"".DB_PREFIXE.'.'.$this->table."\", ".print_r($redactionIntegraleValF, true).", DB_AUTOQUERY_UPDATE, \"".$this->clePrimaire."=".$id."\");", VERBOSE_MODE);
2603     if ($this->f->isDatabaseError($res, true) === true) {
2604     return false;
2605     }
2606     }
2607    
2608 fmichon 4708 /**
2609 softime 7996 * Finalisation automatique de l'instruction si le paramétrage de l'événement l'autorise
2610     */
2611     // Si la finalisation automatique de l'événement est activée
2612     // ET si l'instruction n'a pas déjà été finalisée
2613     // ET s'il existe une lettre type associée
2614     if ($inst_evenement->getVal('finaliser_automatiquement') === 't'
2615     && $inst_evenement->getVal('om_final_instruction') !== 't'
2616     && $inst_evenement->getVal('lettretype') !== ''
2617     && $inst_evenement->getVal('lettretype') !== null) {
2618    
2619     // On instancie l'instruction
2620     $inst_instruction = $this->f->get_inst__om_dbform(array(
2621     "obj" => "instruction",
2622     "idx" => $this->valF[$this->clePrimaire],
2623     ));
2624    
2625     // On finalise l'instruction dans le contexte de finalisation : action 100
2626     $inst_instruction->setParameter('maj', 100);
2627     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2628    
2629     // Une erreur de finalisation renvoie 'false' : ajout dans les logs
2630     // et dans le message d'erreur
2631     if ($finalize === false) {
2632     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2633     $this->addToMessage(_("Erreur lors de la finalisation de l'instruction. Contactez votre administrateur."));
2634     return false;
2635     }
2636     }
2637    
2638     /**
2639 softime 7521 * Finalisation automatique des instructions tacites ou retours.
2640     */
2641 softime 7685 // Si l'option de finalisation automatique des instructions tacites ou
2642     // retours est activée et l'événement d'instruction a une lettre type
2643     // associée
2644     $collectivite_di = $this->get_dossier_instruction_om_collectivite($val['dossier']);
2645     if ($this->f->is_option_finalisation_auto_enabled($collectivite_di) === true
2646     && $inst_evenement->getVal('lettretype') !== ''
2647 softime 7521 && $inst_evenement->getVal('lettretype') !== null) {
2648    
2649     // Rècupère l'identifiant de l'événement
2650     $evenement_id = $inst_evenement->getVal($inst_evenement->clePrimaire);
2651    
2652     // Si l'événement d'instruction est identifié comme un événement
2653     // retour
2654     // OU l'événement d'instruction est l'événement suivant tacite du
2655     // dossier d'instruction (incomplétude prise en compte)
2656 softime 7996 // ET l'événement d'instruction n'a pas déjà été finalisé
2657     if (($inst_evenement->getVal("retour") === 't'
2658 softime 7521 || ($inst_di->getVal('evenement_suivant_tacite_incompletude') === $evenement_id
2659 softime 7996 || $inst_di->getVal('evenement_suivant_tacite') === $evenement_id))
2660     && ($inst_evenement->getVal('om_final_instruction') !== 't')) {
2661 softime 7521
2662     // Finalise l'instruction
2663 softime 7996 $inst_instruction = $this->f->get_inst__om_dbform(array(
2664     "obj" => "instruction",
2665     "idx" => $this->valF[$this->clePrimaire],
2666     ));
2667 softime 7521 $inst_instruction->setParameter('maj', 100);
2668     $finalize = $inst_instruction->finalize($inst_instruction->valF);
2669     if ($finalize === false) {
2670     //
2671     return false;
2672     }
2673     }
2674     }
2675    
2676     /**
2677 softime 9245 * Mise à jour de la version de clôture *version_clos* du dossier si et
2678     * seulement si l'instruction met à jour l'état du dossier.
2679     */
2680     if (isset($valF['etat']) === true
2681     && $valF['etat'] !== null
2682     && $valF['etat'] !== '') {
2683     // Instanciation de l'état appliqué sur le dossier par l'instruction
2684     $inst_etat = $this->f->get_inst__om_dbform(array(
2685     "obj" => "etat",
2686     "idx" => $valF['etat'],
2687     ));
2688     //
2689     $update_version_clos = null;
2690     // En cas d'instruction qui clôture le dossier
2691     if ($inst_etat->getVal('statut') === 'cloture') {
2692     $update_version_clos = $inst_di->update_version_clos('up');
2693     }
2694     // En cas d'instruction qui rouvre le dossier
2695     if ($inst_current_etat->getVal('statut') === 'cloture'
2696     && $inst_etat->getVal('statut') !== 'cloture') {
2697     //
2698     $update_version_clos = $inst_di->update_version_clos('down');
2699     //
2700     $params = array(
2701     'di_reopened' => true,
2702     );
2703     }
2704     //
2705     if ($update_version_clos === false) {
2706     $this->f->addToLog(sprintf(
2707     "%s() : ERREUR - %s %s",
2708     __METHOD__,
2709     sprintf(
2710     __("Impossible de mettre à jour la version de clôture du dossier d'instruction %s."),
2711     $inst_di->getVal($inst_di->clePrimaire)
2712     ),
2713     sprintf(
2714     __("L'instruction tente d'appliquer l'état %s."),
2715     $inst_etat->getVal($inst_etat->clePrimaire)
2716     )
2717     ));
2718     $this->addToMessage(sprintf(
2719     "%s %s",
2720     __("Erreur lors de la mise à jour de la version de clôture du dossier d'instruction."),
2721     __("Veuillez contacter votre administrateur.")
2722     ));
2723     return false;
2724     }
2725     }
2726    
2727     /**
2728 softime 7996 * Mise à jour de la date de dernière modification du dossier
2729     */
2730     $inst_di->update_last_modification_date();
2731    
2732     /**
2733 softime 8640 * Mise à jour des données du DA.
2734     */
2735     $inst_da = $inst_di->get_inst_dossier_autorisation();
2736 softime 9245 $params['di_id'] = $this->valF['dossier'];
2737 softime 8640 if ($inst_da->majDossierAutorisation($params) === false) {
2738     $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2739     $this->correct = false;
2740     return false;
2741     }
2742    
2743     /**
2744 fmichon 4708 * Historisation de la vie du DI.
2745     */
2746     //
2747 nmeucci 3963 return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
2748 nmeucci 3876 }
2749 mbroquet 3730
2750 softime 8989 /**
2751     * TRIGGER - triggermodifierapres.
2752     *
2753     * @return boolean
2754     */
2755     function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2756     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2757 mbroquet 3730 /**
2758     * L'objectif ici est d'effectuer les recalculs de date dans le dossier
2759     * si la date de l'evenement est modifiee
2760     */
2761     // Initialisation
2762 softime 9245 $valF = array();
2763     $valF_dt = array();
2764 mbroquet 3730 // Initialisation du type d'événement
2765     $type_evmt = "";
2766     // Récupération de l'action correspondante à l'événement
2767     $sql = "SELECT action
2768     FROM ".DB_PREFIXE."evenement
2769     WHERE evenement=".$this->valF['evenement'];
2770 softime 8989 $action = $this->f->db->getOne($sql);
2771     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
2772 mbroquet 3730 if (database::isError($action)) {
2773     die($action->getMessage());
2774     }
2775    
2776     // Récupération des paramètres de l'action
2777     $sql = "SELECT * FROM ".DB_PREFIXE."action
2778     WHERE action='".$action."'";
2779 softime 8989 $res = $this->f->db->query($sql);
2780     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
2781 mbroquet 3730 if (database::isError($res)) {
2782     die($res->getMessage());
2783     }
2784     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2785     // application des regles sur le courrier + delai
2786     if(preg_match("/date_evenement/",$row['regle_date_limite'])){
2787     $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
2788     }
2789     if(preg_match("/date_evenement/",$row['regle_date_complet'])){
2790     $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
2791     }
2792     if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
2793     $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
2794     }
2795     if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
2796     $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
2797     }
2798     if(preg_match("/date_evenement/",$row['regle_date_decision'])){
2799     $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
2800     }
2801     if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
2802     $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
2803     }
2804     if(preg_match("/date_evenement/",$row['regle_date_validite'])){
2805     $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
2806     }
2807     if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
2808     $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
2809     }
2810     if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
2811     $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
2812     }
2813     if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
2814     $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
2815     }
2816 softime 6565 if(preg_match("/date_evenement/",$row['regle_date_cloture_instruction'])){
2817     $valF['date_cloture_instruction']= $this->regle($row['regle_date_cloture_instruction'], 'regle_date_cloture_instruction');
2818     }
2819     if(preg_match("/date_evenement/",$row['regle_date_premiere_visite'])){
2820     $valF['date_premiere_visite']= $this->regle($row['regle_date_premiere_visite'], 'regle_date_premiere_visite');
2821     }
2822     if(preg_match("/date_evenement/",$row['regle_date_derniere_visite'])){
2823     $valF['date_derniere_visite']= $this->regle($row['regle_date_derniere_visite'], 'regle_date_derniere_visite');
2824     }
2825     if(preg_match("/date_evenement/",$row['regle_date_contradictoire'])){
2826     $valF['date_contradictoire']= $this->regle($row['regle_date_contradictoire'], 'regle_date_contradictoire');
2827     }
2828     if(preg_match("/date_evenement/",$row['regle_date_retour_contradictoire'])){
2829     $valF['date_retour_contradictoire']= $this->regle($row['regle_date_retour_contradictoire'], 'regle_date_retour_contradictoire');
2830     }
2831     if(preg_match("/date_evenement/",$row['regle_date_ait'])){
2832     $valF['date_ait']= $this->regle($row['regle_date_ait'], 'regle_date_ait');
2833     }
2834     if(preg_match("/date_evenement/",$row['regle_date_transmission_parquet'])){
2835     $valF['date_transmission_parquet']= $this->regle($row['regle_date_transmission_parquet'], 'regle_date_transmission_parquet');
2836     }
2837     if ($row['regle_donnees_techniques1'] !== '') {
2838     $valF_dt[$row['cible_regle_donnees_techniques1']] = $this->regle($row['regle_donnees_techniques1'], 'regle_donnees_techniques1');
2839     }
2840     if ($row['regle_donnees_techniques2'] !== '') {
2841     $valF_dt[$row['cible_regle_donnees_techniques2']] = $this->regle($row['regle_donnees_techniques2'], 'regle_donnees_techniques2');
2842     }
2843     if ($row['regle_donnees_techniques3'] !== '') {
2844     $valF_dt[$row['cible_regle_donnees_techniques3']] = $this->regle($row['regle_donnees_techniques3'], 'regle_donnees_techniques3');
2845     }
2846     if ($row['regle_donnees_techniques4'] !== '') {
2847     $valF_dt[$row['cible_regle_donnees_techniques4']] = $this->regle($row['regle_donnees_techniques4'], 'regle_donnees_techniques4');
2848     }
2849     if ($row['regle_donnees_techniques5'] !== '') {
2850     $valF_dt[$row['cible_regle_donnees_techniques5']] = $this->regle($row['regle_donnees_techniques5'], 'regle_donnees_techniques5');
2851     }
2852 softime 8593 if ($row['regle_dossier_instruction_type'] !== '') {
2853     $valF['dossier_instruction_type'] = $this->regle($row['regle_dossier_instruction_type'], 'regle_dossier_instruction_type');
2854     }
2855 mbroquet 3730 }
2856 softime 6565 // Si des valeurs de données techniques ont été calculées alors on met à jour l'enregistrement
2857 softime 9245 if (count($valF_dt) > 0) {
2858 softime 6565 $dt_id = $this->getDonneesTechniques();
2859     // On met à jour le dossier
2860     $cle = " donnees_techniques='".$dt_id."'";
2861 softime 8989 $res1 = $this->f->db->autoExecute(DB_PREFIXE.'donnees_techniques', $valF_dt, DB_AUTOQUERY_UPDATE, $cle);
2862     $this->addToLog(__METHOD__."(): db->autoexecute(\"".DB_PREFIXE."donnees_techniques\", ".print_r($valF_dt, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
2863 softime 6565 if (database::isError($res1)) {
2864     die($res->getMessage());
2865     }
2866     // Affichage d'informations à l'utilisateur
2867 softime 8989 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$this->f->db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2868 softime 6565 }
2869 mbroquet 3730 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
2870 softime 9245 if (count($valF) > 0) {
2871 softime 10573 //
2872     $inst_dossier = $this->f->get_inst__om_dbform(array(
2873     "obj" => "dossier",
2874     "idx" => $this->valF['dossier'],
2875     ));
2876     $valF['instruction'] = $id;
2877     $update_by_instruction = $inst_dossier->update_by_instruction($valF);
2878     if ($update_by_instruction === false) {
2879     $this->cleanMessage();
2880     $this->addToMessage(sprintf('%s %s', __("Une erreur s'est produite lors de la mise à jour du dossier d'instruction."), __("Veuillez contacter votre administrateur.")));
2881     return false;
2882 mbroquet 3730 }
2883     // Affichage d'informations à l'utilisateur
2884 softime 8989 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$this->f->db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2885 mbroquet 3730 }
2886    
2887     $restriction = $this->get_restriction($val['evenement']);
2888     $this->restriction_valid = $this->restrictionIsValid($restriction);
2889    
2890     if($restriction == "" || $this->restriction_valid ){
2891     // Récupération de tous les paramètres de l'événement sélectionné
2892     $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2893     WHERE evenement=".$this->valF['evenement'];
2894 softime 8989 $res = $this->f->db->query($sql);
2895     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
2896 mbroquet 3730 if (database::isError($res)) {
2897     die($res->getMessage());
2898     }
2899 nmeucci 3965 $current_id = $this->getVal($this->clePrimaire);
2900 mbroquet 3730 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2901     // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
2902     if ($this->getVal('date_retour_signature') == "" AND
2903     $this->valF['date_retour_signature'] != "" AND
2904     $row['evenement_retour_signature'] != "") {
2905 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2906     "obj" => "instruction",
2907     "idx" => "]",
2908     ));
2909 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2910     foreach($new_instruction->champs as $champ) {
2911     $valNewInstr[$champ] = "";
2912     }
2913     // Définition des valeurs de la nouvelle instruction
2914     $valNewInstr["evenement"] = $row['evenement_retour_signature'];
2915     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2916     $valNewInstr["dossier"] = $this->valF['dossier'];
2917     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
2918     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2919     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2920     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2921     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2922     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2923     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2924 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2925     $new_instruction->class_actions[0]["identifier"] =
2926     "retour signature de l'instruction $current_id";
2927 softime 8989 $retour = $new_instruction->ajouter($valNewInstr);
2928 mbroquet 3730
2929     //Si une erreur s'est produite et qu'il s'agit d'un problème
2930     //de restriction
2931     if ($retour == false && !$new_instruction->restriction_valid){
2932     $error_message = $this->get_restriction_error_message($restriction);
2933     $this->f->displayMessage("error", $error_message);
2934 softime 8989 $this->addToLog(__METHOD__."(): evenement retour ".
2935 mbroquet 3730 "instruction ".$this->valF[$this->clePrimaire]." : ".
2936     $new_instruction->msg);
2937     }
2938     //Si une erreur s'est produite après le test de la restriction
2939     elseif ($retour == false && $new_instruction->restriction_valid){
2940     $this->correct = false ;
2941     $this->msg .= $new_instruction->msg;
2942     return false;
2943     }
2944     }
2945     // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
2946     if ($this->getVal('date_retour_rar') == "" AND
2947     $this->valF['date_retour_rar'] != "") {
2948    
2949     if($row['evenement_retour_ar'] != "") {
2950 softime 7996 $new_instruction = $this->f->get_inst__om_dbform(array(
2951     "obj" => "instruction",
2952     "idx" => "]",
2953     ));
2954 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
2955     foreach($new_instruction->champs as $champ) {
2956     $valNewInstr[$champ] = "";
2957     }
2958     // Définition des valeurs de la nouvelle instruction
2959     $valNewInstr["evenement"] = $row['evenement_retour_ar'];
2960     $valNewInstr["destinataire"] = $this->valF['destinataire'];
2961     $valNewInstr["dossier"] = $this->valF['dossier'];
2962     $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
2963     $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
2964     $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
2965     $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
2966     $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
2967     $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
2968     $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
2969 nmeucci 3965 $new_instruction->setParameter("maj", 0);
2970     $new_instruction->class_actions[0]["identifier"] =
2971 softime 8989 "notification de l'instruction $current_id";
2972     $retour = $new_instruction->ajouter($valNewInstr);
2973 mbroquet 3730
2974     //Si une erreur s'est produite et qu'il s'agit d'un problème
2975     //de restriction
2976     if ($retour == false && !$new_instruction->restriction_valid) {
2977     $error_message = $this->get_restriction_error_message($restriction);
2978     $this->f->displayMessage("error", $error_message);
2979     $this->addToLog(
2980 softime 8989 __METHOD__."(): evenement retour instruction ".
2981 mbroquet 3730 $this->valF[$this->clePrimaire]." : ".
2982     $new_instruction->msg
2983     );
2984     }
2985     //Si une erreur s'est produite après le test de la restriction
2986     elseif ($retour == false && $new_instruction->restriction_valid){
2987     $this->correct = false ;
2988     $this->msg .= $new_instruction->msg;
2989     return false;
2990     }
2991     }
2992     }
2993     }
2994     }
2995    
2996 softime 8640 /**
2997     * Mise à jour de la date de dernière modification du dossier
2998     * d'instruction
2999     */
3000     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
3001     $inst_di->update_last_modification_date();
3002    
3003 mbroquet 3730 // Mise à jour des données du dossier d'autorisation
3004 softime 7996 $da = $this->f->get_inst__om_dbform(array(
3005     "obj" => "dossier_autorisation",
3006     "idx" => $this->getNumDemandeAutorFromDossier($this->valF['dossier']),
3007     ));
3008 softime 8640 $params = array(
3009     'di_id' => $this->getVal('dossier'),
3010     );
3011     if($da->majDossierAutorisation($params) === false) {
3012 mbroquet 3730 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3013     $this->correct = false;
3014     return false;
3015     }
3016 softime 7996
3017 softime 10573 // mise à jour des métadonnées issues des dates de suivi
3018     $dateRetourSignatureModified = ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature'));
3019     $dateRetourRARModified = ($this->valF['date_retour_rar'] != $this->getVal('date_retour_rar'));
3020     if ($dateRetourSignatureModified || $dateRetourRARModified) {
3021    
3022     // Calculs des nouvelles métadonnées
3023     $metadata = $this->getMetadata("om_fichier_instruction");
3024    
3025     // On vérifie si l'instruction à finaliser a un événement de type arrete
3026     $sql = "SELECT type FROM ".DB_PREFIXE."evenement WHERE evenement = ".$this->getVal("evenement");
3027     $typeEvenement = $this->f->db->getOne($sql);
3028     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3029     if ($this->f->isDatabaseError($typeEvenement, true) === true) {
3030     $this->correct = false;
3031     $this->addToMessage(__("Erreur de traitement de fichier."));
3032     $this->addToLog(__METHOD__."() erreur BDD: ".var_export($typeEvenement->getMessage(), true), DEBUG_MODE);
3033     return false;
3034     }
3035    
3036     // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
3037     if ($typeEvenement == 'arrete'){
3038     $metadata = array_merge($metadata, $this->getMetadata("arrete"));
3039     }
3040    
3041     // Filtre pour conserver uniquement les métadonnées liées aux dates
3042     $metadataToKeep = array(
3043     "statutAutorisation",
3044     "dateEvenementDocument",
3045     'date_cloture_metier',
3046     "NotificationArrete",
3047     "dateNotificationArrete",
3048     "controleLegalite",
3049     "dateSignature",
3050     "nomSignataire",
3051     "qualiteSignataire",
3052     "dateControleLegalite",
3053     );
3054     $metadata = array_filter(
3055     $metadata,
3056     function($key) use ($metadataToKeep) { return in_array($key, $metadataToKeep); },
3057     ARRAY_FILTER_USE_KEY
3058     );
3059    
3060     // Mise à jour des métadonnées du document en GED
3061     $docUid = $this->getVal("om_fichier_instruction");
3062     $operationOrUID = $this->f->storage->update_metadata($docUid, $metadata);
3063     if ($operationOrUID == 'OP_FAILURE') {
3064     $this->correct = false;
3065     $this->addToMessage(__("Erreur de traitement de fichier."));
3066     $this->addToLog(__METHOD__."() failed to update metadata: ".var_export($operationOrUID, true), DEBUG_MODE);
3067     return false;
3068     }
3069    
3070     // mise à jour de l'UID du document en BDD
3071     else {
3072     $valF = array('om_fichier_instruction' => $operationOrUID);
3073     $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF, DB_AUTOQUERY_UPDATE, $this->getCle($id));
3074     $this->addToLog(__METHOD__.'() : db->autoExecute("'.DB_PREFIXE.$this->table.'", '.print_r($valF, true).', DB_AUTOQUERY_UPDATE, "'.$this->getCle($id).'")', VERBOSE_MODE);
3075     if ($this->f->isDatabaseError($res, true) === true) {
3076     $this->correct = false;
3077     $this->addToMessage(__("Erreur de traitement de fichier."));
3078     $this->addToLog(__METHOD__."() erreur BDD: ".var_export($res->getMessage(), true), DEBUG_MODE);
3079     return false;
3080     }
3081     $this->addToMessage(__("La mise a jour du document s'est effectuee avec succes."));
3082     }
3083     }
3084    
3085 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
3086 fmichon 4708 }
3087 mbroquet 3730
3088 softime 8989 /**
3089     * TRIGGER - triggersupprimer.
3090     *
3091     * @return boolean
3092     */
3093     function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3094     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3095 mbroquet 3730 /**
3096     * L'objectif ici est de repositionner les valeurs récupérées en
3097     * archive dans le dossier d'instruction avant de supprimer l'événement
3098 softime 10573 * d'instruction si les valeurs du dossier sont différentes
3099 mbroquet 3730 */
3100 softime 10573 $valF = array();
3101     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
3102     foreach ($inst_di->champs as $key => $champ) {
3103     // Si le champ du DI à une archive dans l'instruction
3104     if (isset($val[sprintf('archive_%s', $champ)]) === true) {
3105     // Si la valeur entre le champ du DI et son archive dans instruction
3106     // est différente
3107     if ($inst_di->getVal($champ) !== $val[sprintf('archive_%s', $champ)]) {
3108     $val[sprintf('archive_%s', $champ)] === '' ? $valF[$champ] = null : $valF[$champ] = $val[sprintf('archive_%s', $champ)];
3109     }
3110     }
3111 softime 5024 }
3112 softime 10573 // Spécificité du champ avis_decision dont le champ archive est nommé
3113     // différemment
3114     if ($inst_di->getVal('avis_decision') !== $val['archive_avis']) {
3115     $val['archive_avis'] === '' ? $valF['avis_decision'] = null : $valF['avis_decision'] = $val['archive_avis'];
3116 softime 5024 }
3117 softime 10573 // Spécificité de la date d'affichage dont la valeur n'ai jamais modifiée
3118     // par l'archive
3119     unset($valF['date_affichage']);
3120 softime 6565
3121 softime 9245 /**
3122     * Mise à jour de la version de clôture *version_clos* du dossier si et
3123     * seulement si l'instruction met à jour l'état du dossier.
3124     */
3125 softime 10573 if (isset($valF['etat']) === true
3126     && $valF['etat'] !== null
3127 softime 9245 && $valF['etat'] !== '') {
3128 softime 10573 // Récupère l'état actuel du dossier d'instruction
3129     $inst_current_etat = $this->f->get_inst__om_dbform(array(
3130     "obj" => "etat",
3131     "idx" => $inst_di->get_id_etat(),
3132     ));
3133 softime 9245 // Instanciation de l'état archivé appliqué sur le dossier
3134     $inst_etat = $this->f->get_inst__om_dbform(array(
3135     "obj" => "etat",
3136     "idx" => $valF['etat'],
3137     ));
3138     //
3139     $update_version_clos = null;
3140     // En cas de clôture du dossier par l'état archivé
3141     if ($inst_etat->getVal('statut') === 'cloture') {
3142     $update_version_clos = $inst_di->update_version_clos('up');
3143     }
3144     // En cas de réouverture du dossier par l'état archivé
3145     if ($inst_current_etat->getVal('statut') === 'cloture'
3146     && $inst_etat->getVal('statut') !== 'cloture') {
3147     //
3148     $update_version_clos = $inst_di->update_version_clos('down');
3149     //
3150     $this->set_att_di_reopened(true);
3151     }
3152     //
3153     if ($update_version_clos === false) {
3154     $this->f->addToLog(sprintf(
3155     "%s() : ERREUR - %s %s",
3156     __METHOD__,
3157     sprintf(
3158     __("Impossible de mettre à jour la version de clôture du dossier d'instruction %s."),
3159     $inst_di->getVal($inst_di->clePrimaire)
3160     ),
3161     sprintf(
3162     __("L'instruction tente d'appliquer l'état %s."),
3163     $inst_etat->getVal($inst_etat->clePrimaire)
3164     )
3165     ));
3166     $this->addToMessage(sprintf(
3167     "%s %s",
3168     __("Erreur lors de la mise à jour de la version de clôture du dossier d'instruction."),
3169     __("Veuillez contacter votre administrateur.")
3170     ));
3171     return false;
3172     }
3173     }
3174    
3175 softime 10573 // On met à jour le dossier
3176     $valF['instruction'] = $id;
3177     $update_by_instruction = $inst_di->update_by_instruction($valF);
3178     if ($update_by_instruction === false) {
3179     $this->cleanMessage();
3180     $this->addToMessage(sprintf('%s %s', __("Une erreur s'est produite lors de la mise à jour du dossier d'instruction."), __("Veuillez contacter votre administrateur.")));
3181     return false;
3182     }
3183    
3184 softime 5024 // Affichage d'informations à l'utilisateur
3185 softime 8989 $this->addToMessage(_("Suppression de l'instruction")." [".$this->f->db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
3186 softime 5024
3187     // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
3188 mbroquet 3730 }
3189    
3190 softime 8989 /**
3191     * TRIGGER - triggersupprimerapres.
3192     *
3193     * @return boolean
3194     */
3195     function triggersupprimerapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3196     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3197 softime 8640 /**
3198     * Mise à jour de la date de dernière modification du dossier
3199     * d'instruction
3200     */
3201     $inst_di = $this->get_inst_dossier($this->getVal('dossier'));
3202     $inst_di->update_last_modification_date();
3203    
3204     /**
3205     * Mise à jour des données du dossier d'autorisation
3206     */
3207 softime 7996 $da = $this->f->get_inst__om_dbform(array(
3208     "obj" => "dossier_autorisation",
3209     "idx" => $this->getNumDemandeAutorFromDossier($val["dossier"]),
3210     ));
3211 softime 8640 $params = array(
3212     'di_id' => $this->getVal('dossier'),
3213 softime 9245 'di_reopened' => $this->get_att_di_reopened(),
3214 softime 8640 );
3215     if($da->majDossierAutorisation($params) === false) {
3216 mbroquet 3730 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
3217     $this->correct = false;
3218     return false;
3219     }
3220 softime 7996
3221 softime 10573 /**
3222     * Gestion des tâches pour la dématérialisation
3223     */
3224     $inst_task_empty = $this->f->get_inst__om_dbform(array(
3225     "obj" => "task",
3226     "idx" => 0,
3227     ));
3228     foreach ($inst_di->task_types as $task_type) {
3229     $task_exists = $inst_task_empty->task_exists($task_type, $id);
3230     if ($task_exists !== false) {
3231     $inst_task = $this->f->get_inst__om_dbform(array(
3232     "obj" => "task",
3233     "idx" => $task_exists,
3234     ));
3235     if ($inst_task->getVal('state') === $inst_task::STATUS_NEW || $inst_task->getVal('state') === $inst_task::STATUS_DRAFT) {
3236     $task_val = array(
3237     'state' => $inst_task::STATUS_CANCELED,
3238     );
3239     $update_task = $inst_task->update_task(array('val' => $task_val));
3240     if ($update_task === false) {
3241     $this->addToMessage(sprintf('%s %s',
3242     sprintf(__("Une erreur s'est produite lors de la modification de la tâche %."), $inst_task->getVal($inst_task->clePrimaire)),
3243     __("Veuillez contacter votre administrateur.")
3244     ));
3245     $this->correct = false;
3246     return false;
3247     }
3248     }
3249     }
3250     }
3251    
3252 softime 7996 //
3253 softime 8640 $val['evenement'] = $this->getVal('evenement');
3254 nmeucci 3933 return $this->add_log_to_dossier($id, $val);
3255 mbroquet 3730 }
3256    
3257     /**
3258 softime 9245 * Permet de mettre la valeur passée en paramètre dans l'attribut de classe
3259     * "di_reopened".
3260     *
3261     * @param boolean $val
3262     */
3263     function set_att_di_reopened($val) {
3264     $this->di_reopened = $val;
3265     }
3266    
3267     /**
3268     * Permet de récupérer la valeur de l'attribut de classe "di_reopened".
3269     *
3270     * @return boolean
3271     */
3272     function get_att_di_reopened() {
3273     return $this->di_reopened;
3274     }
3275    
3276     /**
3277 mbroquet 3730 * Permet de composer un message d'erreur sur restriction non valide en
3278     * fonction du contexte.
3279     *
3280     * @param string $restriction formule de la restriction
3281     *
3282     * @return string message d'erreur
3283     */
3284     function get_restriction_error_message($restriction) {
3285     // Affichage du message si la restriction s'applique
3286     // Contexte du suivi des dates (message simple)
3287     $message_restrict = _("Probleme de dates :");
3288     // Split restriction
3289     $champs_restrict = preg_split(
3290     '/(\W+)/',
3291     $restriction,
3292     null,
3293     PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
3294     );
3295     $formated_restrict = "";
3296     // Ajout des chaînes à traduire
3297     foreach ($champs_restrict as $value) {
3298     $formated_restrict .= _($value)." ";
3299     }
3300     $formated_restrict = substr($formated_restrict, 0, -1);
3301     // Message d'erreur dans le contexte du suivi des dates
3302     if($this->getParameter("maj") == 170) {
3303     $message_restrict .= " "._("contactez l'instructeur du dossier");
3304     $message_restrict .= "<br/>(".$formated_restrict.")";
3305     } else {
3306     // Affichage du message si la restriction s'applique
3307     // Contexte instruction
3308     $message_restrict .= "<br/>".$formated_restrict;
3309     }
3310    
3311     return $message_restrict;
3312     }
3313    
3314     /**
3315 softime 8989 * @return void
3316 mbroquet 3730 */
3317 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
3318     parent::verifier($val);
3319     //
3320 mbroquet 3730 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
3321     $restriction = $this->get_restriction($val['evenement']);
3322    
3323     //Test qu'une restriction est présente
3324     if ($restriction != "" ){
3325    
3326     //Test si la restriction est valide
3327     $this->restriction_valid = $this->restrictionIsValid($restriction);
3328     if ( !$this->restriction_valid ){
3329    
3330     // Affichage du message si la restriction s'applique
3331     $this->addToMessage(
3332     $this->get_restriction_error_message($restriction)
3333     );
3334     $this->correct=false;
3335     return false;
3336     }
3337    
3338     // Liste des opérateurs possible
3339 nmeucci 3873 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
3340 mbroquet 3730 // Supprime tous les espaces de la chaîne de caractère
3341     $restriction = str_replace(' ', '', $restriction);
3342    
3343     // Met des espace avant et après les opérateurs puis transforme la
3344     // chaine en un tableau
3345     $tabRestriction = str_replace($operateurs, " ", $restriction);
3346     // Tableau des champ
3347     $tabRestriction = explode(" ", $tabRestriction);
3348     // Supprime les numériques du tableau
3349     foreach ($tabRestriction as $key => $value) {
3350     if (is_numeric($value)) {
3351     unset($tabRestriction[$key]);
3352     }
3353     }
3354    
3355     // Vérifie les champs utilisés pour la restriction
3356     $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
3357     if ($check_field_exist !== true) {
3358    
3359     // Liste des champs en erreur
3360     $string_error_fields = implode(", ", $check_field_exist);
3361    
3362     // Message d'erreur
3363     $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
3364     if (count($check_field_exist) > 1) {
3365     $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
3366     }
3367    
3368     // Affiche l'erreur
3369     $this->correct=false;
3370     $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
3371     $this->addToMessage(_("Veuillez contacter votre administrateur."));
3372     }
3373     }
3374    
3375     }
3376     if(!$this->updateDate("date_envoi_signature")) {
3377     return false;
3378     }
3379     if(!$this->updateDate("date_retour_signature")) {
3380     return false;
3381     }
3382     if(!$this->updateDate("date_envoi_rar")) {
3383     return false;
3384     }
3385     if(!$this->updateDate("date_retour_rar")) {
3386     return false;
3387     }
3388     if(!$this->updateDate("date_envoi_controle_legalite")) {
3389     return false;
3390     }
3391     if(!$this->updateDate("date_retour_controle_legalite")) {
3392     return false;
3393     }
3394    
3395     }
3396    
3397     /**
3398     * Finalisation des documents.
3399     * @param string $champ champ du fichier à finaliser
3400     * @param booleen $status permet de définir si on finalise ou définalise
3401     * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
3402     */
3403     function manage_finalizing($mode = null, $val = array()) {
3404 softime 5024 //
3405     $this->begin_treatment(__METHOD__);
3406 mbroquet 3730
3407 softime 5024 //
3408     $id_inst = $this->getVal($this->clePrimaire);
3409 mbroquet 3730
3410 softime 5024 //
3411     $admin_msg_error = _("Veuillez contacter votre administrateur.");
3412     $file_msg_error = _("Erreur de traitement de fichier.")
3413     ." ".$admin_msg_error;
3414     $bdd_msg_error = _("Erreur de base de données.")
3415     ." ".$admin_msg_error;
3416 softime 5169 $log_msg_error = "Finalisation non enregistrée - id instruction = %s - uid fichier = %s";
3417 mbroquet 3730
3418     // Si on finalise le document
3419     if ($mode == "finalize"){
3420 softime 5024 //
3421     $etat = _('finalisation');
3422 mbroquet 3730
3423     // Récupère la collectivite du dossier d'instruction
3424     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
3425    
3426     //
3427     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
3428 softime 8593
3429     //
3430     $params = array(
3431     "specific" => array(),
3432     );
3433     // Si la rédaction libre est activée sur l'instruction
3434     if ($this->getVal("flag_edition_integrale") == 't') {
3435     $params["specific"]["corps"] = array(
3436     "mode" => "set",
3437     "value" => $this->getVal("corps_om_htmletatex"),
3438     );
3439     $params["specific"]["titre"] = array(
3440     "mode" => "set",
3441     "value" => $this->getVal("titre_om_htmletat"),
3442     );
3443     }
3444 mbroquet 3730 // Génération du PDF
3445 softime 8593 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
3446 mbroquet 3730 $pdf_output = $result['pdf_output'];
3447 softime 10573
3448 mbroquet 3730 //Métadonnées du document
3449     $metadata = array(
3450 softime 5024 'filename' => 'instruction_'.$id_inst.'.pdf',
3451 mbroquet 3730 'mimetype' => 'application/pdf',
3452     'size' => strlen($pdf_output)
3453     );
3454    
3455     // Récupération des métadonnées calculées après validation
3456     $spe_metadata = $this->getMetadata("om_fichier_instruction");
3457    
3458     //On vérifie si l'instruction à finaliser a un événement de type arrete
3459     $sql = "SELECT type
3460     FROM ".DB_PREFIXE."evenement
3461     WHERE evenement = ".$this->getVal("evenement");
3462 softime 8989 $typeEvenement = $this->f->db->getOne($sql);
3463 mbroquet 3730 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3464 softime 5024 if ($this->f->isDatabaseError($typeEvenement, true) === true) {
3465     $this->correct = false;
3466     $this->addToMessage($bdd_msg_error);
3467     return $this->end_treatment(__METHOD__, false);
3468 mbroquet 3730 }
3469    
3470     //Initialisation de la variable
3471     $arrete_metadata = array();
3472     // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
3473     if ( $typeEvenement === 'arrete' ){
3474     $arrete_metadata = $this->getMetadata("arrete");
3475     }
3476    
3477     $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
3478    
3479 softime 10573 /*
3480     // transforme le tableau de métadonnées en objet
3481     $mdf = new MetadataFactory();
3482     $md = $mdf->build('Instruction', $metadata);
3483     */
3484    
3485 softime 5024 // Si le document a déjà été finalisé on le met à jour
3486     // en conservant son UID
3487 mbroquet 3730 if ($this->getVal("om_fichier_instruction") != ''){
3488     $uid = $this->f->storage->update(
3489     $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
3490     }
3491 softime 5024 // Sinon on crée un nouveau document et dont on récupère l'UID
3492 mbroquet 3730 else {
3493 softime 10573 $uid = $this->f->storage->create($pdf_output, $metadata, "from_content", $this->table.".om_fichier_instruction");
3494 mbroquet 3730 }
3495     }
3496    
3497 softime 5024 // Si on définalise le document
3498 mbroquet 3730 if ($mode == "unfinalize") {
3499 softime 5024 //
3500     $etat = _('définalisation');
3501 mbroquet 3730 // Récupération de l'uid du document finalisé
3502     $uid = $this->getVal("om_fichier_instruction");
3503     }
3504 softime 5024
3505     // Si on définalise l'UID doit être défini
3506     // Si on finalise la création/modification du fichier doit avoir réussi
3507 mbroquet 3730 if ($uid == '' || $uid == 'OP_FAILURE' ) {
3508 softime 5024 $this->correct = false;
3509     $this->addToMessage($file_msg_error);
3510 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_inst, $uid), DEBUG_MODE);
3511 softime 5024 return $this->end_treatment(__METHOD__, false);
3512 mbroquet 3730 }
3513    
3514     //
3515     foreach ($this->champs as $key => $champ) {
3516     //
3517     $val[$champ] = $this->val[$key];
3518     }
3519    
3520     //
3521 softime 6565 $val['date_evenement'] = $this->dateDBToForm($val['date_evenement']);
3522     $val['archive_date_complet'] = $this->dateDBToForm($val['archive_date_complet']);
3523     $val['archive_date_rejet'] = $this->dateDBToForm($val['archive_date_rejet']);
3524     $val['archive_date_limite'] = $this->dateDBToForm($val['archive_date_limite']);
3525     $val['archive_date_notification_delai'] = $this->dateDBToForm($val['archive_date_notification_delai']);
3526     $val['archive_date_decision'] = $this->dateDBToForm($val['archive_date_decision']);
3527     $val['archive_date_validite'] = $this->dateDBToForm($val['archive_date_validite']);
3528     $val['archive_date_achevement'] = $this->dateDBToForm($val['archive_date_achevement']);
3529     $val['archive_date_chantier'] = $this->dateDBToForm($val['archive_date_chantier']);
3530     $val['archive_date_conformite'] = $this->dateDBToForm($val['archive_date_conformite']);
3531     $val['archive_date_dernier_depot'] = $this->dateDBToForm($val['archive_date_dernier_depot']);
3532     $val['archive_date_limite_incompletude'] = $this->dateDBToForm($val['archive_date_limite_incompletude']);
3533     $val['date_finalisation_courrier'] = $this->dateDBToForm($val['date_finalisation_courrier']);
3534     $val['date_envoi_signature'] = $this->dateDBToForm($val['date_envoi_signature']);
3535     $val['date_retour_signature'] = $this->dateDBToForm($val['date_retour_signature']);
3536     $val['date_envoi_rar'] = $this->dateDBToForm($val['date_envoi_rar']);
3537     $val['date_retour_rar'] = $this->dateDBToForm($val['date_retour_rar']);
3538     $val['date_envoi_controle_legalite'] = $this->dateDBToForm($val['date_envoi_controle_legalite']);
3539     $val['date_retour_controle_legalite'] = $this->dateDBToForm($val['date_retour_controle_legalite']);
3540     $val['archive_date_cloture_instruction'] = $this->dateDBToForm($val['archive_date_cloture_instruction']);
3541     $val['archive_date_premiere_visite'] = $this->dateDBToForm($val['archive_date_premiere_visite']);
3542     $val['archive_date_derniere_visite'] = $this->dateDBToForm($val['archive_date_derniere_visite']);
3543     $val['archive_date_contradictoire'] = $this->dateDBToForm($val['archive_date_contradictoire']);
3544     $val['archive_date_retour_contradictoire'] = $this->dateDBToForm($val['archive_date_retour_contradictoire']);
3545     $val['archive_date_ait'] = $this->dateDBToForm($val['archive_date_ait']);
3546     $val['archive_date_transmission_parquet'] = $this->dateDBToForm($val['archive_date_transmission_parquet']);
3547 softime 8989 $val['archive_date_affichage'] = $this->dateDBToForm($val['archive_date_affichage']);
3548 mbroquet 3730 $this->setvalF($val);
3549    
3550     // Verification de la validite des donnees
3551 softime 8989 $this->verifier($this->val);
3552 mbroquet 3730 // Si les verifications precedentes sont correctes, on procede a
3553     // la modification, sinon on ne fait rien et on retourne une erreur
3554 softime 5024 if ($this->correct === true) {
3555 mbroquet 3730 //
3556     $valF = array(
3557     "om_fichier_instruction" => $uid,
3558     "date_finalisation_courrier" => date('Y-m-d')
3559     );
3560     //
3561     if($mode=="finalize") {
3562     // état finalisé vrai
3563 softime 5024 $valF["om_final_instruction"] = true;
3564 mbroquet 3730 // ajout log utilisateur
3565     $login = $_SESSION['login'];
3566     $nom = "";
3567     $this->f->getUserInfos();
3568     if (isset($this->f->om_utilisateur["nom"])
3569     && !empty($this->f->om_utilisateur["nom"])) {
3570     $nom = $this->f->om_utilisateur["nom"];
3571     }
3572     $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
3573     if ($nom != "") {
3574     $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
3575     }
3576     } else {
3577     // état finalisé faux
3578 softime 5024 $valF["om_final_instruction"] = false;
3579 mbroquet 3730 // suppression log utilisateur
3580     $valF["om_final_instruction_utilisateur"] = '';
3581     }
3582    
3583     // Execution de la requête de modification des donnees de l'attribut
3584     // valF de l'objet dans l'attribut table de l'objet
3585 softime 8989 $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $valF,
3586 softime 5024 DB_AUTOQUERY_UPDATE, $this->getCle($id_inst));
3587     $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id_inst)."\")", VERBOSE_MODE);
3588     //
3589     if ($this->f->isDatabaseError($res, true) === true) {
3590     $this->correct = false;
3591     $this->addToMessage($bdd_msg_error);
3592     return $this->end_treatment(__METHOD__, false);
3593     }
3594 mbroquet 3730
3595 softime 5024 //
3596     $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
3597     //
3598     if ($this->add_log_to_dossier($id_inst, $val) === false) {
3599     return $this->end_treatment(__METHOD__, false);
3600     }
3601     //
3602     return $this->end_treatment(__METHOD__, true);
3603 mbroquet 3730 }
3604 softime 5024 // L'appel de verifier() a déjà positionné correct à false
3605     // et défini un message d'erreur.
3606 softime 8989 $this->addToLog(sprintf($log_msg_error, $id_inst, $uid), DEBUG_MODE);
3607 softime 5024 return $this->end_treatment(__METHOD__, false);
3608 mbroquet 3730 }
3609    
3610     /**
3611     * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
3612     * @return string numéro de dossier d'instruction
3613     */
3614 softime 10573 protected function getDossier($champ = null) {
3615 mbroquet 3730 if(empty($this->specificMetadata)) {
3616     $this->getSpecificMetadata();
3617     }
3618     return $this->specificMetadata->dossier;
3619     }
3620     /**
3621     * Récupération la version du dossier d'instruction à ajouter aux métadonnées
3622     * @return int Version
3623     */
3624     protected function getDossierVersion() {
3625     if(empty($this->specificMetadata)) {
3626     $this->getSpecificMetadata();
3627     }
3628     return $this->specificMetadata->version;
3629     }
3630     /**
3631     * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
3632     * @return string numéro de dossier d'autorisation
3633     */
3634     protected function getNumDemandeAutor() {
3635     if(empty($this->specificMetadata)) {
3636     $this->getSpecificMetadata();
3637     }
3638     return $this->specificMetadata->dossier_autorisation;
3639     }
3640     /**
3641     * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
3642     * @return date de la demande initiale
3643     */
3644     protected function getAnneemoisDemandeAutor() {
3645     if(empty($this->specificMetadata)) {
3646     $this->getSpecificMetadata();
3647     }
3648     return $this->specificMetadata->date_demande_initiale;
3649     }
3650     /**
3651     * Récupération du type de dossier d'instruction à ajouter aux métadonnées
3652     * @return string type du dossier d'instruction
3653     */
3654     protected function getTypeInstruction() {
3655     if(empty($this->specificMetadata)) {
3656     $this->getSpecificMetadata();
3657     }
3658     return $this->specificMetadata->dossier_instruction_type;
3659     }
3660     /**
3661     * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
3662     * @return string avis
3663     */
3664     protected function getStatutAutorisation() {
3665     if(empty($this->specificMetadata)) {
3666     $this->getSpecificMetadata();
3667     }
3668     return $this->specificMetadata->statut;
3669     }
3670     /**
3671     * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
3672     * @return string type du dossier d'autorisation
3673     */
3674     protected function getTypeAutorisation() {
3675     if(empty($this->specificMetadata)) {
3676     $this->getSpecificMetadata();
3677     }
3678     return $this->specificMetadata->dossier_autorisation_type;
3679     }
3680     /**
3681     * Récupération de la date d'ajout de document à ajouter aux métadonnées
3682     * @return date de l'évènement
3683     */
3684     protected function getDateEvenementDocument() {
3685     return date("Y-m-d");
3686     }
3687     /**
3688     * Récupération du groupe d'instruction à ajouter aux métadonnées
3689     * @return string Groupe d'instruction
3690     */
3691     protected function getGroupeInstruction() {
3692     if(empty($this->specificMetadata)) {
3693     $this->getSpecificMetadata();
3694     }
3695     return $this->specificMetadata->groupe_instruction;
3696     }
3697     /**
3698     * Récupération du libellé du type du document à ajouter aux métadonnées
3699     * @return string Groupe d'instruction
3700     */
3701     protected function getTitle() {
3702    
3703     // Récupère le champ événement
3704     if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
3705     $evenement = $this->valF["evenement"];
3706     } else {
3707     $evenement = $this->getVal("evenement");
3708     }
3709    
3710     // Requête sql
3711     $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
3712     WHERE evenement=".$evenement;
3713 softime 8989 $evenement_libelle = $this->f->db->getOne($sql);
3714 mbroquet 3730 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3715     if (database::isError($evenement_libelle)) {
3716     die();
3717     }
3718    
3719     // Retourne le libelle de l'événement
3720     return $evenement_libelle;
3721     }
3722    
3723 softime 6272
3724 mbroquet 3730 /**
3725 softime 6272 * Récupération du champ ERP du dossier d'instruction.
3726     *
3727     * @return boolean
3728     */
3729     public function get_concerne_erp() {
3730     //
3731     if(empty($this->specificMetadata)) {
3732     $this->getSpecificMetadata();
3733     }
3734     //
3735     return $this->specificMetadata->erp;
3736     }
3737    
3738    
3739     /**
3740 mbroquet 3730 * Cette méthode permet de stocker en attribut toutes les métadonnées
3741     * nécessaire à l'ajout d'un document.
3742     */
3743     public function getSpecificMetadata() {
3744     if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
3745     $dossier = $this->valF["dossier"];
3746     } else {
3747     $dossier = $this->getVal("dossier");
3748     }
3749     //Requête pour récupérer les informations essentiels sur le dossier d'instruction
3750     $sql = "SELECT dossier.dossier as dossier,
3751     dossier_autorisation.dossier_autorisation as dossier_autorisation,
3752     to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
3753     dossier_instruction_type.code as dossier_instruction_type,
3754     etat_dossier_autorisation.libelle as statut,
3755     dossier_autorisation_type.code as dossier_autorisation_type,
3756 softime 6272 groupe.code as groupe_instruction,
3757     CASE WHEN dossier.erp IS TRUE
3758     THEN 'true'
3759     ELSE 'false'
3760     END as erp
3761 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3762     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3763     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3764     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3765     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3766     LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
3767     ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
3768     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3769     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3770     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3771     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3772     LEFT JOIN ".DB_PREFIXE."groupe
3773     ON dossier_autorisation_type.groupe = groupe.groupe
3774     WHERE dossier.dossier = '".$dossier."'";
3775 softime 8989 $res = $this->f->db->query($sql);
3776 mbroquet 3730 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
3777     if ( database::isError($res)){
3778     die();
3779     }
3780    
3781     //Le résultat est récupéré dans un objet
3782     $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
3783    
3784     //Si il y a un résultat
3785     if ($row !== null) {
3786    
3787 fmichon 3892 // Instrance de la classe dossier
3788     $inst_dossier = $this->get_inst_dossier($dossier);
3789    
3790     // Insère l'attribut version à l'objet
3791     $row->version = $inst_dossier->get_dossier_instruction_version();
3792    
3793 mbroquet 3730 //Alors on créé l'objet dossier_instruction
3794     $this->specificMetadata = $row;
3795    
3796     }
3797     }
3798    
3799     /**
3800     * Retourne le statut du dossier d'instruction
3801     * @param string $idx Identifiant du dossier d'instruction
3802     * @return string Le statut du dossier d'instruction
3803     */
3804     function getStatutAutorisationDossier($idx){
3805    
3806     $statut = '';
3807    
3808     //Si l'identifiant du dossier d'instruction fourni est correct
3809     if ( $idx != '' ){
3810    
3811     //On récupère le statut de l'état du dossier à partir de l'identifiant du
3812     //dossier
3813     $sql = "SELECT etat.statut
3814     FROM ".DB_PREFIXE."dossier
3815     LEFT JOIN
3816     ".DB_PREFIXE."etat
3817     ON
3818     dossier.etat = etat.etat
3819     WHERE dossier ='".$idx."'";
3820 softime 8989 $statut = $this->f->db->getOne($sql);
3821 mbroquet 3730 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3822     if ( database::isError($statut)){
3823     die();
3824     }
3825     }
3826     return $statut;
3827     }
3828    
3829     /**
3830     * Récupère les données du dossier
3831     * @return array
3832     */
3833     function get_dossier_actual() {
3834    
3835     // Initialisation de la valeur de retour
3836     $return = array();
3837    
3838     // Récupération de toutes les valeurs du dossier d'instruction en cours
3839     $sql = "SELECT * FROM ".DB_PREFIXE."dossier
3840     WHERE dossier='".$this->valF['dossier']."'";
3841 softime 8989 $res = $this->f->db->query($sql);
3842 mbroquet 3730 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
3843     $this->f->isDatabaseError($res);
3844    
3845     //
3846     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3847    
3848     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3849     // de l'état et de l'avis du dossier d'instruction
3850 softime 6565 $return['archive_delai'] = $row['delai'];
3851     $return['archive_accord_tacite'] = $row['accord_tacite'];
3852     $return['archive_etat'] = $row['etat'];
3853     $return['archive_avis'] = $row['avis_decision'];
3854     // Récupération de la valeur actuelle des dates du dossier
3855 mbroquet 3730 // d'instruction
3856 softime 6565 $return['archive_date_complet'] = $row['date_complet'];
3857     $return['archive_date_dernier_depot'] = $row['date_dernier_depot'];
3858     $return['archive_date_rejet'] = $row['date_rejet'];
3859     $return['archive_date_limite'] = $row['date_limite'];
3860     $return['archive_date_notification_delai'] = $row['date_notification_delai'];
3861     $return['archive_date_decision'] = $row['date_decision'];
3862     $return['archive_date_validite'] = $row['date_validite'];
3863     $return['archive_date_achevement'] = $row['date_achevement'];
3864     $return['archive_date_chantier'] = $row['date_chantier'];
3865     $return['archive_date_conformite'] = $row['date_conformite'];
3866     $return['archive_incompletude'] = $row['incompletude'];
3867     $return['archive_incomplet_notifie'] = $row['incomplet_notifie'];
3868     $return['archive_evenement_suivant_tacite'] = $row['evenement_suivant_tacite'];
3869     $return['archive_evenement_suivant_tacite_incompletude'] = $row['evenement_suivant_tacite_incompletude'];
3870     $return['archive_etat_pendant_incompletude'] = $row['etat_pendant_incompletude'];
3871     $return['archive_date_limite_incompletude'] = $row['date_limite_incompletude'];
3872     $return['archive_delai_incompletude'] = $row['delai_incompletude'];
3873     $return['archive_autorite_competente'] = $row['autorite_competente'];
3874 softime 8593 $return['archive_dossier_instruction_type'] = $row['dossier_instruction_type'];
3875 softime 6565 $return['duree_validite'] = $row['duree_validite'];
3876     $return['date_depot'] = $row['date_depot'];
3877 softime 10573 $return['date_depot_mairie'] = $row['date_depot_mairie'];
3878 softime 6565 $return['archive_date_cloture_instruction'] = $row['date_cloture_instruction'];
3879     $return['archive_date_premiere_visite'] = $row['date_premiere_visite'];
3880     $return['archive_date_derniere_visite'] = $row['date_derniere_visite'];
3881     $return['archive_date_contradictoire'] = $row['date_contradictoire'];
3882     $return['archive_date_retour_contradictoire'] = $row['date_retour_contradictoire'];
3883     $return['archive_date_ait'] = $row['date_ait'];
3884     $return['archive_date_transmission_parquet'] = $row['date_transmission_parquet'];
3885 softime 8989 $return['archive_date_affichage'] = $row['date_affichage'];
3886 softime 10573 $return['archive_pec_metier'] = $row['pec_metier'];
3887     $return['archive_a_qualifier'] = $row['a_qualifier'];
3888 mbroquet 3730 }
3889    
3890     // Retour de la fonction
3891     return $return;
3892    
3893     }
3894    
3895     /**
3896     * Permet de vérifier qu'un événement est verrouillable
3897     * @param integer $idx Identifiant de l'instruction
3898     * @return boolean
3899     */
3900     function checkEvenementNonVerrouillable($idx) {
3901    
3902     // Initialisation du résultat
3903     $non_verrouillable = false;
3904    
3905     // Si la condition n'est pas vide
3906     if ($idx != "") {
3907    
3908     // Requête SQL
3909     $sql = "SELECT evenement.non_verrouillable
3910     FROM ".DB_PREFIXE."evenement
3911     LEFT JOIN ".DB_PREFIXE."instruction
3912     ON instruction.evenement = evenement.evenement
3913     WHERE instruction.instruction = $idx";
3914     $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
3915 softime 8989 $res = $this->f->db->getOne($sql);
3916 mbroquet 3730 $this->f->isDatabaseError($res);
3917    
3918     // Si le retour de la requête est true
3919     if ($res == 't') {
3920     //
3921     $non_verrouillable = true;
3922     }
3923     }
3924    
3925     // Retourne résultat
3926     return $non_verrouillable;
3927     }
3928    
3929     /**
3930     * Mise à jour des champs archive_*
3931     * @param mixed $row La ligne de données
3932     */
3933     public function updateArchiveData($row){
3934    
3935     // Récupération de la valeur actuelle du délai, de l'accord tacite,
3936     // de l'état et de l'avis du dossier d'instruction
3937     $this->valF['archive_delai']=$row['delai'];
3938     $this->valF['archive_accord_tacite']=$row['accord_tacite'];
3939     $this->valF['archive_etat']=$row['etat'];
3940     $this->valF['archive_avis']=$row['avis_decision'];
3941     // Récupération de la valeur actuelle des 9 dates du dossier
3942     // d'instruction
3943     if ($row['date_complet'] != '') {
3944     $this->valF['archive_date_complet']=$row['date_complet'];
3945     }
3946     if ($row['date_dernier_depot'] != '') {
3947     $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
3948     }
3949 softime 6565 if ($row['date_rejet'] != '') {
3950 mbroquet 3730 $this->valF['archive_date_rejet']= $row['date_rejet'];
3951     }
3952 softime 6565 if ($row['date_limite'] != '') {
3953 mbroquet 3730 $this->valF['archive_date_limite']= $row['date_limite'];
3954     }
3955 softime 6565 if ($row['date_notification_delai'] != '') {
3956 mbroquet 3730 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
3957     }
3958 softime 6565 if ($row['date_decision'] != '') {
3959 mbroquet 3730 $this->valF['archive_date_decision']= $row['date_decision'];
3960     }
3961 softime 6565 if ($row['date_validite'] != '') {
3962 mbroquet 3730 $this->valF['archive_date_validite']= $row['date_validite'];
3963     }
3964 softime 6565 if ($row['date_achevement'] != '') {
3965 mbroquet 3730 $this->valF['archive_date_achevement']= $row['date_achevement'];
3966     }
3967 softime 6565 if ($row['date_chantier'] != '') {
3968 mbroquet 3730 $this->valF['archive_date_chantier']= $row['date_chantier'];
3969     }
3970 softime 6565 if ($row['date_conformite'] != '') {
3971 mbroquet 3730 $this->valF['archive_date_conformite']= $row['date_conformite'];
3972     }
3973 softime 6565 if ($row['incompletude'] != '') {
3974 mbroquet 3730 $this->valF['archive_incompletude']= $row['incompletude'];
3975     }
3976 softime 6565 if ($row['incomplet_notifie'] != '') {
3977 mbroquet 3730 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
3978     }
3979 softime 6565 if ($row['evenement_suivant_tacite'] != '') {
3980 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
3981     }
3982 softime 6565 if ($row['evenement_suivant_tacite_incompletude'] != '') {
3983 mbroquet 3730 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
3984     }
3985 softime 6565 if ($row['etat_pendant_incompletude'] != '') {
3986 mbroquet 3730 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
3987     }
3988 softime 6565 if ($row['date_limite_incompletude'] != '') {
3989 mbroquet 3730 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
3990     }
3991 softime 6565 if ($row['delai_incompletude'] != '') {
3992 mbroquet 3730 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
3993     }
3994 softime 6565 if ($row['autorite_competente'] != '') {
3995 mbroquet 3730 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
3996     }
3997 softime 6565 if ($row['duree_validite'] != '') {
3998 mbroquet 3730 $this->valF['duree_validite']= $row['duree_validite'];
3999     }
4000 softime 6565 if ($row['date_depot'] != '') {
4001 nmeucci 3873 $this->valF['date_depot']= $row['date_depot'];
4002     }
4003 softime 10573 if ($row['date_depot_mairie'] != '') {
4004     $this->valF['date_depot_mairie']= $row['date_depot_mairie'];
4005     }
4006 softime 6565 // Dates concernant les dossiers contentieux
4007     if ($row['date_cloture_instruction'] != '') {
4008     $this->valF['archive_date_cloture_instruction']= $row['date_cloture_instruction'];
4009     }
4010     if ($row['date_premiere_visite'] != '') {
4011     $this->valF['archive_date_premiere_visite']= $row['date_premiere_visite'];
4012     }
4013     if ($row['date_derniere_visite'] != '') {
4014     $this->valF['archive_date_derniere_visite']= $row['date_derniere_visite'];
4015     }
4016     if ($row['date_contradictoire'] != '') {
4017     $this->valF['archive_date_contradictoire']= $row['date_contradictoire'];
4018     }
4019     if ($row['date_retour_contradictoire'] != '') {
4020     $this->valF['archive_date_retour_contradictoire']= $row['date_retour_contradictoire'];
4021     }
4022     if ($row['date_ait'] != '') {
4023     $this->valF['archive_date_ait']= $row['date_ait'];
4024     }
4025     if ($row['date_transmission_parquet'] != '') {
4026     $this->valF['archive_date_transmission_parquet']= $row['date_transmission_parquet'];
4027     }
4028 softime 8989 //
4029 softime 8593 if ($row['dossier_instruction_type'] != '') {
4030     $this->valF['archive_dossier_instruction_type']= $row['dossier_instruction_type'];
4031     }
4032 softime 8989 if ($row['date_affichage'] != '') {
4033     $this->valF['archive_date_affichage']= $row['date_affichage'];
4034     }
4035 softime 10573 if (isset($row['pec_metier']) === true && $row['pec_metier'] != '') {
4036     $this->valF['archive_pec_metier']= $row['pec_metier'];
4037     }
4038     if (isset($row['a_qualifier']) === true && $row['a_qualifier'] != '') {
4039     $this->valF['archive_a_qualifier']= $row['a_qualifier'];
4040     }
4041 mbroquet 3730 }
4042    
4043     // {{{
4044     // Méthodes de récupération des métadonnées arrêté
4045     /**
4046     * @return string Retourne le numéro d'arrêté
4047     */
4048     function getNumArrete() {
4049     return $this->getVal("numero_arrete");
4050     }
4051     /**
4052     * @return chaîne vide
4053     */
4054     function getReglementaireArrete() {
4055     return 'true';
4056     }
4057     /**
4058     * @return boolean de notification au pétitionnaire
4059     */
4060     function getNotificationArrete() {
4061     return 'true';
4062     }
4063     /**
4064     * @return date de notification au pétitionnaire
4065     */
4066     function getDateNotificationArrete() {
4067     if (empty($this->metadonneesArrete)) {
4068     $this->getArreteMetadata();
4069     }
4070     return $this->metadonneesArrete["datenotification"];
4071     }
4072     /**
4073     * @return boolean check si le document est passé au contrôle de légalité
4074     */
4075     function getControleLegalite() {
4076     return 'true';
4077     }
4078     /**
4079     * @return date de signature de l'arrêté
4080     */
4081     function getDateSignature() {
4082     if (empty($this->metadonneesArrete)) {
4083     $this->getArreteMetadata();
4084     }
4085     return $this->metadonneesArrete["datesignaturearrete"];
4086     }
4087     /**
4088     * @return string nom du signataire
4089     */
4090     function getNomSignataire() {
4091     if (empty($this->metadonneesArrete)) {
4092     $this->getArreteMetadata();
4093     }
4094     return $this->metadonneesArrete["nomsignataire"];
4095     }
4096     /**
4097     * @return string qualité du signataire
4098     */
4099     function getQualiteSignataire() {
4100     if (empty($this->metadonneesArrete)) {
4101     $this->getArreteMetadata();
4102     }
4103     return $this->metadonneesArrete["qualitesignataire"];
4104     }
4105     /**
4106     * @return string numéro du terrain
4107     */
4108     function getAp_numRue() {
4109     if (empty($this->metadonneesArrete)) {
4110     $this->getArreteMetadata();
4111     }
4112     return $this->metadonneesArrete["ap_numrue"];
4113     }
4114     /**
4115     * @return string nom de la rue du terrain
4116     */
4117     function getAp_nomDeLaVoie() {
4118     if (empty($this->metadonneesArrete)) {
4119     $this->getArreteMetadata();
4120     }
4121     return $this->metadonneesArrete["ap_nomdelavoie"];
4122     }
4123     /**
4124     * @return string code postal du terrain
4125     */
4126     function getAp_codePostal() {
4127     if (empty($this->metadonneesArrete)) {
4128     $this->getArreteMetadata();
4129     }
4130     return $this->metadonneesArrete["ap_codepostal"];
4131     }
4132     /**
4133     * @return string ville du terrain
4134     */
4135     function getAp_ville() {
4136     if (empty($this->metadonneesArrete)) {
4137     $this->getArreteMetadata();
4138     }
4139     return $this->metadonneesArrete["ap_ville"];
4140     }
4141     /**
4142     * @return string activité
4143     */
4144     function getActivite() {
4145     return "Droit du sol";
4146     }
4147     /**
4148     * @return string date du retour de controle légalité
4149     */
4150     function getDateControleLegalite() {
4151     if (empty($this->metadonneesArrete)) {
4152     $this->getArreteMetadata();
4153     }
4154     return $this->metadonneesArrete["datecontrolelegalite"];
4155     }
4156    
4157     // Fin des méthodes de récupération des métadonnées
4158     // }}}
4159    
4160     /**
4161     * Méthode de récupération des métadonnées arrêtés dans la base de données,
4162     * les données sont stockés dans l'attribut $this->metadonneesArrete
4163     */
4164     function getArreteMetadata() {
4165    
4166     //Récupération de la dernière instruction dont l'événement est de type 'arrete'
4167     $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
4168     "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
4169     "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
4170     "ap_codepostal"=>"", "ap_ville"=>"");
4171    
4172 softime 10573 $sqlArrete = "SELECT
4173     signataire_arrete.prenom || ' ' ||signataire_arrete.nom as \"nomsignataire\",
4174 mbroquet 3730 signataire_arrete.qualite as \"qualitesignataire\",
4175     instruction.etat as \"decisionarrete\",
4176     instruction.date_retour_rar as \"datenotification\",
4177     instruction.date_retour_signature as \"datesignaturearrete\",
4178     instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
4179     dossier.terrain_adresse_voie_numero as \"ap_numrue\",
4180     dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
4181     dossier.terrain_adresse_code_postal as \"ap_codepostal\",
4182     dossier.terrain_adresse_localite as \"ap_ville\"
4183     FROM ".DB_PREFIXE."instruction
4184     LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
4185     instruction.signataire_arrete = signataire_arrete.signataire_arrete
4186     LEFT JOIN ".DB_PREFIXE."dossier ON
4187     instruction.dossier = dossier.dossier
4188     LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
4189     donnees_techniques.dossier_instruction = dossier.dossier
4190     WHERE instruction.instruction = ".$this->getVal("instruction");
4191 softime 8989 $resArrete = $this->f->db->query($sqlArrete);
4192 mbroquet 3730 $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
4193     if ( database::isError($resArrete)){
4194     die();
4195     }
4196    
4197     $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
4198     }
4199    
4200     /**
4201     * CONDITION - has_an_edition.
4202     *
4203     * Condition pour afficher le bouton de visualisation de l'édition.
4204     *
4205     * @return boolean
4206     */
4207     function has_an_edition() {
4208     // Récupère la valeur du champ lettretype
4209     $lettretype = $this->getVal("lettretype");
4210     // Si le champ est vide
4211 softime 7521 if ($lettretype !== '' && $lettretype !== null) {
4212 mbroquet 3730 //
4213 softime 7521 return true;
4214 mbroquet 3730 }
4215    
4216     //
4217 softime 7521 return false;
4218 mbroquet 3730 }
4219    
4220     /**
4221 softime 10573 * CONDITION - is_modifiable.
4222     *
4223     * Controle si l'évenement est modifiable.
4224     *
4225     * @return boolean
4226     */
4227     function is_evenement_modifiable() {
4228     $evenement = $this->get_inst_evenement($this->getVal('evenement'));
4229     return ! $this->get_boolean_from_pgsql_value($evenement->getVal('non_modifiable'));
4230     }
4231    
4232     /**
4233 mbroquet 3730 * CONDITION - is_editable.
4234     *
4235     * Condition pour la modification.
4236     *
4237     * @return boolean
4238     */
4239     function is_editable() {
4240 softime 10573
4241     // XXX
4242     // Identifier si l'instruction est lié à une tâche depuis le champ object_id (mais aussi voir le log car object_id peut être modifié)
4243     // Si cette tâche identifiée est DONE alors la suppression/modification de cette intruction est impossible
4244    
4245 mbroquet 3730 // Contrôle si l'utilisateur possède un bypass
4246 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modifier_bypass");
4247 mbroquet 3730 //
4248     if ($bypass == true) {
4249     //
4250     return true;
4251     }
4252 softime 6565
4253 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
4254     // que l'événement n'est pas identifié comme non verrouillable
4255     if ($this->f->isUserInstructeur()
4256     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
4257     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
4258     //
4259     return false;
4260     }
4261    
4262 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
4263     // dossier
4264     if ($this->is_instructeur_from_division_dossier() === true) {
4265     //
4266     return true;
4267     }
4268    
4269     // Si l'utilisateur est instructeur de la commune du dossier et que
4270     // l'instruction est créée par un instructeur de la commune
4271     if ($this->is_instructeur_from_collectivite_dossier() === true and
4272     $this->getVal('created_by_commune') === 't') {
4273     return true;
4274     }
4275    
4276 mbroquet 3730 //
4277 softime 6565 return false;
4278 mbroquet 3730 }
4279    
4280     /**
4281 softime 10573 * Vérifie si l'événement est supprimable ou pas.
4282     *
4283     * @return boolean
4284     */
4285     function is_evenement_supprimable() {
4286     // Controle si l'évenement est supprimable
4287     $evenement = $this->get_inst_evenement($this->getVal('evenement'));
4288     return ! $this->get_boolean_from_pgsql_value($evenement->getVal('non_supprimable'));
4289     }
4290    
4291     /**
4292 mbroquet 3730 * CONDITION - is_deletable.
4293     *
4294 softime 6864 * Condition pour la suppression.
4295 mbroquet 3730 *
4296     * @return boolean
4297     */
4298     function is_deletable() {
4299 softime 10573
4300     // XXX
4301     // Identifier si l'instruction est lié à une tâche depuis le champ object_id (mais aussi voir le log car object_id peut être modifié)
4302     // Si cette tâche identifiée est DONE alors la suppression/modification de cette intruction est impossible
4303    
4304 softime 6864 // Contrôle si l'utilisateur possède un bypass intégral
4305 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass");
4306 mbroquet 3730 //
4307     if ($bypass == true) {
4308    
4309     //
4310     return true;
4311     }
4312    
4313     // Si l'utilisateur est un intructeur qui ne correspond pas à la
4314 softime 6864 // division du dossier et si l'utilisateur n'a pas la permission bypass
4315     // de la division
4316     if ($this->is_instructeur_from_division_dossier() === false
4317 softime 7996 && $this->f->isAccredited($this->get_absolute_class_name()."_supprimer_bypass_division") === false) {
4318 mbroquet 3730
4319     //
4320     return false;
4321     }
4322 softime 5024
4323     // l'événement est-il le dernier ?
4324     $dernier_evenement = false;
4325     // instanciation dossier
4326 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4327     "obj" => "dossier",
4328     "idx" => $this->getVal('dossier'),
4329     ));
4330 softime 5024 // récupération dernier événement
4331     $id_dernier_evenement = $dossier->get_dernier_evenement();
4332     if ($id_dernier_evenement == $this->getVal($this->clePrimaire)) {
4333     $dernier_evenement = true;
4334     }
4335 mbroquet 3730
4336 softime 5024 // Si dossier cloturé ou si pas dernier événement
4337     // ou de type retour ou si une date est renseignée
4338     // ET utilisateur non administrateur
4339     if ($this->getStatutAutorisationDossier($this->getVal('dossier')) == 'cloture'
4340     || $dernier_evenement == false
4341     || $this->is_evenement_retour($this->getVal("evenement")) == true
4342     || $this->getVal('date_envoi_signature') != ''
4343     || $this->getVal('date_retour_signature') != ''
4344     || $this->getVal('date_envoi_rar') != ''
4345     || $this->getVal('date_retour_rar') != ''
4346     || $this->getVal('date_envoi_controle_legalite') != ''
4347     || $this->getVal('date_retour_controle_legalite') != '') {
4348     // pas le droit de supprimer
4349     return false;;
4350     }
4351    
4352 mbroquet 3730 //
4353     return true;
4354     }
4355 softime 6565
4356    
4357 mbroquet 3730 /**
4358 softime 6565 * Vérifie que l'utilisateur est instructeur et qu'il est de la division du
4359     * dossier.
4360     *
4361     * @return, boolean true/false
4362     */
4363     function is_instructeur_from_collectivite_dossier() {
4364     if ($this->f->isUserInstructeur() === true and
4365     $this->f->om_utilisateur["om_collectivite"] == $this->get_dossier_instruction_om_collectivite()) {
4366     return true;
4367     }
4368     return false;
4369     }
4370    
4371     /**
4372 mbroquet 3730 * CONDITION - is_addable.
4373     *
4374     * Condition pour afficher les boutons modifier et supprimer.
4375     *
4376     * @return boolean
4377     */
4378     function is_addable() {
4379     // Contrôle si l'utilisateur possède un bypass
4380 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_ajouter_bypass");
4381 mbroquet 3730 //
4382     if ($bypass == true) {
4383    
4384     //
4385     return true;
4386     }
4387 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la
4388     // division du dossier ou qu'il peut changer la décision
4389     if ($this->is_instructeur_from_division_dossier() === true or
4390     $this->isInstrCanChangeDecision($this->getParameter('idxformulaire')) === true) {
4391 mbroquet 3730 //
4392 softime 6565 return true;
4393 mbroquet 3730 }
4394    
4395     //
4396 softime 6565 return false;
4397 mbroquet 3730 }
4398    
4399     /**
4400     * CONDITION - is_finalizable.
4401     *
4402     * Condition pour afficher le bouton.
4403     *
4404     * @return boolean
4405     */
4406     function is_finalizable() {
4407     // Contrôle si l'utilisateur possède un bypass
4408 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_finaliser_bypass");
4409 mbroquet 3730 //
4410     if ($bypass == true) {
4411     //
4412     return true;
4413     }
4414 softime 6565
4415 mbroquet 3730 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
4416     // que l'événement n'est pas identifié comme non verrouillable
4417     if ($this->f->isUserInstructeur()
4418     && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
4419     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
4420     //
4421     return false;
4422     }
4423 softime 6565
4424     // Si l'utilisateur est un intructeur qui correspond à la division du
4425     // dossier
4426     if ($this->is_instructeur_from_division_dossier() === true) {
4427     //
4428     return true;
4429     }
4430 mbroquet 3730
4431 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que
4432     // l'instruction est créée par un instructeur de la commune
4433     if ($this->is_instructeur_from_collectivite_dossier() === true and
4434     $this->getVal('created_by_commune') === 't') {
4435     return true;
4436     }
4437    
4438 mbroquet 3730 //
4439 softime 6565 return false;
4440 mbroquet 3730 }
4441    
4442     /**
4443     * CONDITION - is_finalize_without_bypass.
4444     *
4445     * Condition pour afficher le bouton sans le bypass.
4446     *
4447     * @return boolean [description]
4448     */
4449     function is_finalizable_without_bypass() {
4450     // Récupère la valeur du champ finalisé
4451     $om_final_instruction = $this->getVal('om_final_instruction');
4452    
4453     // Si le rapport n'est pas finalisé
4454     if (empty($om_final_instruction)
4455     || $om_final_instruction == 'f') {
4456     //
4457     return true;
4458     }
4459    
4460     //
4461     return false;
4462     }
4463    
4464     /**
4465     * CONDITION - is_unfinalizable.
4466     *
4467     * Condition pour afficher le bouton.
4468     *
4469     * @return boolean
4470     */
4471     function is_unfinalizable(){
4472     // Contrôle si l'utilisateur possède un bypass
4473 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_definaliser_bypass");
4474 mbroquet 3730 //
4475     if ($bypass == true) {
4476     //
4477     return true;
4478     }
4479 softime 6565
4480     // Si l'utilisateur est un instructeur, que le dossier est cloturé et
4481     // que l'événement n'est pas identifié comme non verrouillable
4482 mbroquet 3730 if ($this->f->isUserInstructeur()
4483 softime 6565 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
4484     && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
4485 mbroquet 3730 //
4486     return false;
4487     }
4488    
4489 softime 6565 // Si l'utilisateur est un intructeur qui correspond à la division du
4490     // dossier
4491     if ($this->is_instructeur_from_division_dossier() === true) {
4492     //
4493     return true;
4494 mbroquet 3730 }
4495    
4496 softime 6565 // Si l'utilisateur est instructeur de la commune du dossier et que
4497     // l'instruction est créée par un instructeur de la commune
4498     if ($this->is_instructeur_from_collectivite_dossier() === true and
4499     $this->getVal('created_by_commune') === 't') {
4500     return true;
4501 mbroquet 3730 }
4502    
4503     //
4504 softime 6565 return false;
4505 mbroquet 3730 }
4506    
4507     /**
4508     * CONDITION - is_unfinalizable_without_bypass.
4509     *
4510     * Condition pour afficher le bouton sans le bypass.
4511     *
4512     * @return boolean
4513     */
4514     function is_unfinalizable_without_bypass() {
4515     // Récupère la valeur du champ finalisé
4516     $om_final_instruction = $this->getVal('om_final_instruction');
4517    
4518     // Si l'instruction est finalisée
4519     if ($om_final_instruction == 't') {
4520     //
4521     return true;
4522     }
4523    
4524     //
4525     return false;
4526     }
4527    
4528 softime 5169
4529 mbroquet 3730 /**
4530 softime 6565 * Permet de définir si un instructeur commune peut editer une instruction
4531     *
4532     * @return boolean true si il peut
4533     */
4534     function isInstrCanChangeDecision($idx) {
4535    
4536     if ($this->f->isAccredited(array("instruction", "instruction_changer_decision"), "OR") !== true or
4537     $this->f->isUserInstructeur() !== true) {
4538     return false;
4539     }
4540    
4541    
4542    
4543     // Sinon on vérifie l'éligibilité du dossier au changement de décision
4544     $sql =
4545     "SELECT
4546     dossier.dossier
4547     FROM
4548     ".DB_PREFIXE."dossier
4549     JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
4550     SELECT instruction
4551     FROM ".DB_PREFIXE."instruction
4552     JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement
4553     WHERE instruction.dossier = dossier.dossier
4554     AND evenement.retour IS FALSE
4555     ORDER BY date_evenement DESC, instruction DESC
4556     LIMIT 1
4557     )
4558     JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement
4559     JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
4560     JOIN ".DB_PREFIXE."om_utilisateur ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4561     JOIN ".DB_PREFIXE."om_collectivite ON om_collectivite.om_collectivite=om_utilisateur.om_collectivite
4562     JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat
4563     WHERE
4564    
4565     (
4566     evenement.type = 'arrete' AND
4567     (
4568     instruction.om_final_instruction IS TRUE
4569     OR instruction.created_by_commune IS TRUE
4570     ) OR
4571     evenement.type = 'changement_decision'
4572     )
4573     AND evenement.retour IS FALSE
4574     AND instruction.date_retour_signature IS NULL
4575     AND instruction.date_envoi_rar IS NULL
4576     AND instruction.date_retour_rar IS NULL
4577     AND instruction.date_envoi_controle_legalite IS NULL
4578     AND instruction.date_retour_controle_legalite IS NULL
4579     AND etat.statut = 'encours'
4580     AND dossier.dossier = '".$idx."'
4581     AND om_collectivite.niveau = '2'
4582     ";
4583    
4584    
4585     // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
4586     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4587     $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
4588     }
4589 softime 8989 $res = $this->f->db->getone($sql);
4590 softime 6565 if (database::isError($res)) {
4591     die();
4592     }
4593     // Si le dossier n'est pas sujet au changement de decision
4594     if($res == null) {
4595     return false;
4596     }
4597     return true;
4598     }
4599    
4600    
4601     /**
4602 softime 5169 * CONDITION - can_monitoring_dates.
4603     *
4604     * Condition pour afficher le bouton de suivi des dates.
4605     *
4606     * @return boolean
4607     */
4608     public function can_monitoring_dates() {
4609     // Récupère la valeur du champ finalisé
4610     $om_final_instruction = $this->getVal('om_final_instruction');
4611    
4612     // Si l'instruction n'est pas finalisée
4613     if ($om_final_instruction !== 't') {
4614     //
4615     return false;
4616     }
4617    
4618     // Contrôle si l'utilisateur possède un bypass
4619 softime 7996 $bypass = $this->f->isAccredited($this->get_absolute_class_name()."_modification_dates_bypass");
4620 softime 5169 if ($bypass === true) {
4621     return true;
4622     }
4623    
4624 softime 8989 // Permission de modifier le suivi des dates sur un dossier cloturé pour
4625     // un utilisateur lié à un instructeur
4626     $perm_moni_dates_d_closed = $this->f->isAccredited($this->get_absolute_class_name()."_modification_dates_cloture");
4627    
4628     // On vérifie en premier lieu que le DI n'est pas clôturé et que
4629     // l'utilisateur ne possède pas la permission de modifier le suivi des
4630     // dates sur un dossier clôturé
4631 softime 5169 $inst_dossier = $this->get_inst_dossier();
4632 softime 8989 if ($inst_dossier->getStatut() === 'cloture'
4633     && $perm_moni_dates_d_closed === false) {
4634 softime 5169 //
4635     return false;
4636     }
4637     // On récupère ses infos
4638     $coll_di = $inst_dossier->getVal('om_collectivite');
4639     $div_di = $this->getDivisionFromDossier();
4640     // et celles de son éventuel instructeur
4641     $instr_di = $inst_dossier->getVal('instructeur');
4642    
4643 softime 6565 // Il faut disposer d'une entrée instructeur
4644     if ($this->f->isUserInstructeur() === false) {
4645     return false;
4646     }
4647    
4648 softime 5169 // Par défaut on prétend que l'instructeur n'est pas multi
4649     $instr_di_coll_multi = false;
4650     // Si un instructeur est affecté au dossier
4651     if ($instr_di !== '' && $instr_di !== null) {
4652     // Vérifie si l'instructeur est de la collectivité de niveau 2
4653 softime 5295 $instr_di_coll = $this->get_instructeur_om_collectivite($instr_di);
4654 softime 5169 if ($this->f->isCollectiviteMono($instr_di_coll) === false) {
4655     //
4656     $instr_di_coll_multi = true;
4657     }
4658     }
4659    
4660 softime 6565 // Il faut qu'il instruise le dossier ou soit de la même division
4661     if ($this->f->om_utilisateur['instructeur'] === $instr_di
4662     || $this->f->om_utilisateur['division'] === $div_di) {
4663 softime 5169 //
4664     return true;
4665     }
4666    
4667 softime 6565 // On donne également le droit s'il est de la même collectivité que
4668     // le dossier ET si l'instruction est déléguée à la communauté
4669     if ($this->f->isCollectiviteMono($this->f->om_utilisateur['om_collectivite']) === true
4670     && $this->f->om_utilisateur['om_collectivite'] === $coll_di
4671     && $instr_di_coll_multi === true) {
4672 softime 5169 //
4673     return true;
4674     }
4675    
4676 softime 6565 // Si l'instructeur ne rentre pas dans les deux cas précédents
4677 softime 5169 return false;
4678     }
4679    
4680    
4681     /**
4682 mbroquet 3730 * TREATMENT - finalize.
4683     *
4684     * Permet de finaliser un enregistrement.
4685     *
4686     * @param array $val valeurs soumises par le formulaire
4687     *
4688     * @return boolean
4689     */
4690     function finalize($val = array()) {
4691    
4692     // Cette méthode permet d'exécuter une routine en début des méthodes
4693     // dites de TREATMENT.
4694     $this->begin_treatment(__METHOD__);
4695    
4696     // Traitement de la finalisation
4697     $ret = $this->manage_finalizing("finalize", $val);
4698    
4699     // Si le traitement retourne une erreur
4700     if ($ret !== true) {
4701    
4702     // Termine le traitement
4703 softime 5024 return $this->end_treatment(__METHOD__, false);
4704 mbroquet 3730 }
4705    
4706     // Termine le traitement
4707     return $this->end_treatment(__METHOD__, true);
4708     }
4709    
4710     /**
4711     * TREATMENT - unfinalize.
4712     *
4713     * Permet de définaliser un enregistrement.
4714     *
4715     * @param array $val valeurs soumises par le formulaire
4716     *
4717     * @return boolean
4718     */
4719     function unfinalize($val = array()) {
4720    
4721     // Cette méthode permet d'exécuter une routine en début des méthodes
4722     // dites de TREATMENT.
4723     $this->begin_treatment(__METHOD__);
4724    
4725     // Traitement de la finalisation
4726     $ret = $this->manage_finalizing("unfinalize", $val);
4727    
4728     // Si le traitement retourne une erreur
4729     if ($ret !== true) {
4730    
4731     // Termine le traitement
4732 softime 5024 return $this->end_treatment(__METHOD__, false);
4733 mbroquet 3730 }
4734    
4735     // Termine le traitement
4736     return $this->end_treatment(__METHOD__, true);
4737     }
4738    
4739     /**
4740     * VIEW - view_edition
4741     *
4742     * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
4743     *
4744     * @return null Si l'action est incorrecte
4745     */
4746     function view_edition() {
4747    
4748     // Si l'instruction est finalisée
4749     if($this->getVal("om_final_instruction") == 't'
4750     && $this->getVal("om_final_instruction") != null) {
4751    
4752     // Ouvre le document
4753 softime 7996 $lien = '../app/index.php?module=form&snippet=file&obj='.$this->table.'&'.
4754 mbroquet 3730 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
4755     //
4756     header("Location: ".$lien);
4757     } else {
4758    
4759     // Récupère la collectivite du dossier d'instruction
4760     $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
4761    
4762     //
4763     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
4764    
4765     // Paramètre du PDF
4766     $params = array(
4767     "watermark" => true,
4768     "specific" => array(
4769     "mode" => "previsualisation",
4770     ),
4771     );
4772 softime 8593 // Si la rédaction libre est activée sur l'instruction
4773     if ($this->getVal("flag_edition_integrale") == 't') {
4774     $params["specific"]["corps"] = array(
4775     "mode" => "set",
4776     "value" => $this->getVal("corps_om_htmletatex"),
4777     );
4778     $params["specific"]["titre"] = array(
4779     "mode" => "set",
4780     "value" => $this->getVal("titre_om_htmletat"),
4781     );
4782     }
4783 mbroquet 3730
4784     // Génération du PDF
4785     $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
4786     // Affichage du PDF
4787     $this->expose_pdf_output(
4788     $result['pdf_output'],
4789     $result['filename']
4790     );
4791     }
4792     }
4793    
4794     /**
4795     * Récupère la collectivité du dossier d'instruction.
4796     *
4797 softime 7685 * @param string $dossier_instruction_id Identifiant du DI.
4798     *
4799 mbroquet 3730 * @return integer
4800     */
4801 softime 7685 function get_dossier_instruction_om_collectivite($dossier_instruction_id = null) {
4802 mbroquet 3730
4803 softime 7685 // Si l'identifiant n'est pas renseigné
4804     if ($dossier_instruction_id === null) {
4805 softime 8593 // Récupère la valeur
4806     if ($this->getVal('dossier') !== null && $this->getVal('dossier') !== '') {
4807     $dossier_instruction_id = $this->getVal('dossier');
4808     } elseif ($this->getParameter('idxformulaire') !== null
4809     && $this->getParameter('idxformulaire') !== '') {
4810     //
4811     $dossier_instruction_id = $this->getParameter('idxformulaire');
4812     } elseif ($this->f->get_submitted_get_value('idxformulaire') !== null
4813     && $this->f->get_submitted_get_value('idxformulaire') !== '') {
4814     //
4815     $dossier_instruction_id = $this->f->get_submitted_get_value('idxformulaire');
4816     }
4817 softime 7685 }
4818    
4819 mbroquet 3730 //
4820 softime 7996 $dossier_instruction = $this->f->get_inst__om_dbform(array(
4821     "obj" => "dossier_instruction",
4822     "idx" => $dossier_instruction_id,
4823     ));
4824 mbroquet 3730
4825     //
4826     return $dossier_instruction->getVal('om_collectivite');
4827     }
4828    
4829     /**
4830     * VIEW - view_bible
4831     *
4832     * Affiche la bible manuelle.
4833     *
4834     * @return void
4835     */
4836     function view_bible() {
4837     // Vérification de l'accessibilité sur l'élément
4838     $this->checkAccessibility();
4839    
4840     /**
4841     * Affichage de la structure HTML
4842     */
4843     //
4844 softime 8989 if ($this->f->isAjaxRequest()) {
4845 mbroquet 3730 //
4846     header("Content-type: text/html; charset=".HTTPCHARSET."");
4847     } else {
4848     //
4849 softime 8989 $this->f->setFlag("htmlonly");
4850     $this->f->display();
4851 mbroquet 3730 }
4852     //
4853 softime 8989 $this->f->displayStartContent();
4854 mbroquet 3730 //
4855 softime 8989 $this->f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
4856     $this->f->displayTitle();
4857 mbroquet 3730
4858     /**
4859     *
4860     */
4861     //
4862 softime 8989 ($this->f->get_submitted_get_value("ev") ? $evenement = $this->f->get_submitted_get_value("ev") : $evenement = "");
4863 mbroquet 3730 $evenement = intval($evenement);
4864     //
4865 softime 8989 ($this->f->get_submitted_get_value("idx") ? $idx = $this->f->get_submitted_get_value("idx") : $idx = "");
4866 softime 5169 // Récupération du code du type de DA
4867     $code_da_type = '';
4868     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
4869     $code_da_type = $matches[0];
4870     }
4871 mbroquet 3730 //
4872 softime 8989 ($this->f->get_submitted_get_value("complement") ? $complement = $this->f->get_submitted_get_value("complement") : $complement = "1");
4873 mbroquet 3730
4874     // Récupération de la collectivité du dossier
4875 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
4876     "obj" => "dossier",
4877     "idx" => $idx,
4878     ));
4879 mbroquet 3730
4880     /**
4881     *
4882     */
4883     //
4884     $sql = "SELECT *, bible.libelle as bible_lib
4885     FROM ".DB_PREFIXE."bible
4886     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
4887     ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
4888     LEFT JOIN ".DB_PREFIXE."om_collectivite
4889     ON bible.om_collectivite = om_collectivite.om_collectivite
4890 softime 7366 WHERE (evenement=".$evenement." OR evenement IS NULL)
4891 softime 8989 AND (complement=".$complement." OR complement IS NULL)
4892 mbroquet 3730 AND (bible.dossier_autorisation_type IS NULL
4893 softime 5169 OR dossier_autorisation_type.code ='".$code_da_type."')
4894 mbroquet 3730 AND (om_collectivite.niveau = '2'
4895     OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
4896     ORDER BY bible_lib ASC";
4897 softime 8989 $res = $this->f->db->query($sql);
4898     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
4899     $this->f->isDatabaseError($res);
4900 mbroquet 3730 //
4901     echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
4902     //
4903     if ($res->numrows() > 0) {
4904     //
4905     echo "\t<table id='tab-bible' width='100%'>\n";
4906     //
4907     echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
4908     echo "<th>"._("Choisir")."</th>";
4909     echo "<th>"._("Libelle")."</th>";
4910     echo "</tr>\n";
4911     //
4912     $i = 0;
4913     //
4914     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4915     //
4916     echo "\t\t<tr";
4917     echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
4918     echo ">";
4919     //
4920     echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
4921     // XXX utilisation de l'attribut titre pour afficher une infobulle
4922     echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
4923     //
4924     echo "</tr>\n";
4925     //
4926     $i++;
4927     }
4928     echo "\t</table>\n";
4929     //
4930     echo "<div class=\"formControls\">\n";
4931 softime 8989 $this->f->layout->display_form_button(array(
4932 mbroquet 3730 "value" => _("Valider"),
4933     "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
4934     ));
4935 softime 8989 $this->f->displayLinkJsCloseWindow();
4936 mbroquet 3730 echo "</div>\n";
4937    
4938     } else {
4939     //
4940     $message_class = "error";
4941     $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
4942 softime 8989 $this->f->displayMessage($message_class, $message);
4943 mbroquet 3730 //
4944     echo "<div class=\"formControls\">\n";
4945 softime 8989 $this->f->displayLinkJsCloseWindow();
4946 mbroquet 3730 echo "</div>\n";
4947     }
4948     //
4949     echo "</form>\n";
4950    
4951     /**
4952     * Affichage de la structure HTML
4953     */
4954     //
4955 softime 8989 $this->f->displayEndContent();
4956 mbroquet 3730 }
4957    
4958     /**
4959 softime 5169 * VIEW - view_bible_auto
4960 mbroquet 3730 *
4961 softime 5169 * Renvoie les valeurs de la bible à placer dans les compléments de l'instruction.
4962 mbroquet 3730 *
4963     * @return void
4964     */
4965     function view_bible_auto() {
4966     // Vérification de l'accessibilité sur l'élément
4967     $this->checkAccessibility();
4968     //
4969 softime 8989 $this->f->disableLog();
4970 mbroquet 3730
4971     $formatDate="AAAA-MM-JJ";
4972    
4973     // Récupération des paramètres
4974 softime 8989 $idx = $this->f->get_submitted_get_value('idx');
4975     $evenement = $this->f->get_submitted_get_value('ev');
4976 mbroquet 3730
4977     // Initialisation de la variable de retour
4978     $retour['complement_om_html'] = '';
4979     $retour['complement2_om_html'] = '';
4980     $retour['complement3_om_html'] = '';
4981     $retour['complement4_om_html'] = '';
4982     // Vérification d'une consultation liée à l'événement
4983 softime 8989 $consultation = $this->f->db->getOne(
4984 mbroquet 3730 "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
4985     );
4986 softime 8989 $this->f->isDatabaseError($consultation);
4987 mbroquet 3730 // Si consultation liée, récupération du retour d'avis
4988     if($consultation=='Oui'){
4989     $sql="select date_retour,avis_consultation.libelle as avis_consultation,
4990     service.libelle as service
4991     from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
4992     on consultation.service =service.service
4993     left join ".DB_PREFIXE."avis_consultation on
4994     consultation.avis_consultation = avis_consultation.avis_consultation
4995 softime 8989 where dossier ='".$idx."' and consultation.visible";
4996     $res = $this->f->db->query($sql);
4997     $this->f->isDatabaseError($res);
4998 mbroquet 3730 // Récupération des consultations
4999     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
5000     $correct=false;
5001     // date retour
5002     if ($row['date_retour']<>""){
5003     if ($formatDate=="AAAA-MM-JJ"){
5004     $date = explode("-", $row['date_retour']);
5005     // controle de date
5006     if (count($date) == 3 and
5007     checkdate($date[1], $date[2], $date[0])) {
5008     $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
5009     $correct=true;
5010     }else{
5011     $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
5012     $correct=false;
5013     }
5014     }
5015     }
5016     //
5017     $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
5018     if($correct == true){
5019     $temp=$temp." du ".$date_retour_f;
5020     }
5021     // Concaténation des retours d'avis de consultation
5022 softime 7067 $retour['complement_om_html'] .= $temp . "<br/><br/>";
5023 mbroquet 3730 } // while
5024    
5025     } // consultation
5026     // Récupération des bibles automatiques pour le champ complement_om_html
5027 softime 8989 $retour['complement_om_html'] .= $this->getBible($evenement, $idx, '1');
5028 mbroquet 3730 // Récupération des bibles automatiques pour le champ complement2_om_html
5029 softime 8989 $retour['complement2_om_html'] .= $this->getBible($evenement, $idx, '2');
5030 mbroquet 3730 // Récupération des bibles automatiques pour le champ complement3_om_html
5031 softime 8989 $retour['complement3_om_html'] .= $this->getBible($evenement, $idx, '3');
5032 mbroquet 3730 // Récupération des bibles automatiques pour le champ complement4_om_html
5033 softime 8989 $retour['complement4_om_html'] .= $this->getBible($evenement, $idx, '4');
5034 mbroquet 3730
5035    
5036    
5037     echo json_encode($retour);
5038     }
5039    
5040     /**
5041 softime 7521 * VIEW - view_pdf_temp
5042     *
5043     * @return void
5044     */
5045     function view_pdf_temp() {
5046     $this->checkAccessibility();
5047 softime 8593 // Utilisation de $_POST pour ne pas que les textes soient altérés.
5048 softime 7521 $this->f->set_submitted_value();
5049 softime 8593 $merge_fields = array();
5050     //
5051     if (array_key_exists('c1', $_POST) === true) {
5052     $merge_fields['[complement_instruction]'] = urldecode($_POST['c1']);
5053     $merge_fields['[complement1_instruction]'] = urldecode($_POST['c1']);
5054     }
5055     if (array_key_exists('c2', $_POST) === true) {
5056     $merge_fields['[complement2_instruction]'] = urldecode($_POST['c2']);
5057     }
5058     if (array_key_exists('c3', $_POST) === true) {
5059     $merge_fields['[complement3_instruction]'] = urldecode($_POST['c3']);
5060     }
5061     if (array_key_exists('c4', $_POST) === true) {
5062     $merge_fields['[complement4_instruction]'] = urldecode($_POST['c4']);
5063     }
5064 softime 7521 $params = array(
5065     "watermark" => true,
5066     "specific" => array(
5067     "merge_fields" => $merge_fields,
5068     ),
5069     );
5070 softime 8593 //
5071     if (array_key_exists('corps', $_POST) === true) {
5072     $params["specific"]["corps"] = array(
5073     "mode" => "set",
5074     "value" => urldecode($_POST['corps']),
5075     );
5076     }
5077     if (array_key_exists('titre', $_POST) === true) {
5078     $params["specific"]["titre"] = array(
5079     "mode" => "set",
5080     "value" => urldecode($_POST['titre']),
5081     );
5082     }
5083 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
5084     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
5085     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
5086     $retour = array(
5087     'base' => base64_encode($result['pdf_output']),
5088     );
5089     echo json_encode($retour);
5090     }
5091    
5092     /**
5093     * Dans le contexte de prévisualisation des éditions, génère le rendu du
5094     * PDF sans prise en compte de la valeur des compléments et le retourne en
5095     * base 64.
5096     *
5097     * @return string Rendu PDF converti en base 64.
5098     */
5099     function init_pdf_temp() {
5100     $params = array(
5101     "watermark" => true,
5102     );
5103 softime 8593 // Si la rédaction libre est activée sur l'instruction
5104     if ($this->getVal("flag_edition_integrale") == 't') {
5105     $params["specific"]["corps"] = array(
5106     "mode" => "set",
5107     "value" => $this->getVal("corps_om_htmletatex"),
5108     );
5109     $params["specific"]["titre"] = array(
5110     "mode" => "set",
5111     "value" => $this->getVal("titre_om_htmletat"),
5112     );
5113     }
5114 softime 7521 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
5115     $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
5116     $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite, null, $params);
5117    
5118     return base64_encode($result['pdf_output']);
5119     }
5120    
5121     /**
5122 mbroquet 3730 * Récupération des éléments de bible.
5123     *
5124     * @param integer $event id de l'événement
5125     * @param string $idx id du dossier
5126     * @param integer $compnb numéro du champ complement
5127     *
5128     * @return string Chaîne de texte à insérer dans le champ complement
5129     */
5130 softime 8989 function getBible($event, $idx, $compnb) {
5131 mbroquet 3730 // Récupération de la collectivité du dossier
5132 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
5133     "obj" => "dossier",
5134     "idx" => $idx,
5135     ));
5136 softime 5169 // Récupération du code du type de DA
5137     $code_da_type = '';
5138     if (preg_match('/[A-Za-z]{2,3}/', $idx, $matches) !== false) {
5139     $code_da_type = $matches[0];
5140     }
5141 mbroquet 3730 //
5142     $sql = "SELECT * FROM ".DB_PREFIXE."bible
5143     LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
5144     ON bible.dossier_autorisation_type=
5145     dossier_autorisation_type.dossier_autorisation_type
5146     LEFT JOIN
5147     ".DB_PREFIXE."om_collectivite
5148     ON bible.om_collectivite = om_collectivite.om_collectivite
5149 softime 7366 WHERE (evenement =".$event." or evenement IS NULL) and
5150 softime 8989 (complement=".$compnb." OR complement IS NULL) and
5151 mbroquet 3730 automatique='Oui' and
5152 softime 5169 (dossier_autorisation_type.code ='".$code_da_type."' or
5153 mbroquet 3730 bible.dossier_autorisation_type IS NULL) and
5154     (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
5155    
5156 softime 8989 $res = $this->f->db->query($sql);
5157     $this->f->isDatabaseError($res);
5158 mbroquet 3730 $temp = "";
5159     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
5160     // Remplacement des retours à la ligne par des br
5161     $temp .= preg_replace(
5162     '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
5163     );
5164 softime 7521 // Ajout d'un saut de ligne entre chaque bible.
5165     $temp .= '<br/>';
5166 mbroquet 3730 } // fin while
5167     return $temp;
5168     }
5169    
5170     /**
5171     * VIEW - view_suivi_bordereaux.
5172     *
5173 nmeucci 4317 * Formulaire de choix du bordereau de suivi, permettant de générer les 4 bordereaux.
5174     * Si l'utilisateur est d'une collectivité de niveau 2 il a le choix de la
5175     * collectivité des dossiers affichés.
5176 mbroquet 3730 *
5177     * @return void
5178     */
5179     function view_suivi_bordereaux() {
5180     // Vérification de l'accessibilité sur l'élément
5181     $this->checkAccessibility();
5182    
5183     /**
5184     * Validation du formulaire
5185     */
5186     // Si le formulaire a été validé
5187 softime 8989 if ($this->f->get_submitted_post_value("validation") !== null) {
5188 mbroquet 3730 // Si un bordereau à été sélectionné
5189 softime 8989 if ($this->f->get_submitted_post_value("bordereau") !== null && $this->f->get_submitted_post_value("bordereau") == "" ) {
5190 mbroquet 3730 // Si aucun bordereau n'a été sélectionné
5191     $message_class = "error";
5192     $message = _("Veuillez selectionner un bordereau.");
5193     }
5194     // Sinon si les dates ne sont pas valide
5195 softime 8989 elseif (($this->f->get_submitted_post_value("date_bordereau_debut") !== null
5196     && $this->f->get_submitted_post_value("date_bordereau_debut") == "")
5197     || ($this->f->get_submitted_post_value("date_bordereau_fin") !== null
5198     && $this->f->get_submitted_post_value("date_bordereau_fin") == "")) {
5199 mbroquet 3730 // Si aucune date n'a été saisie
5200     $message_class = "error";
5201     $message = _("Veuillez saisir une date valide.");
5202     }
5203 softime 7366 // Sinon si les dates ne sont pas valides
5204 softime 8989 elseif ($this->f->get_submitted_post_value("bordereau") === "bordereau_avis_maire_prefet"
5205     && $this->f->getParameter("id_evenement_bordereau_avis_maire_prefet") == null) {
5206 softime 7366 // Si aucune date n'a été saisie
5207     $message_class = "error";
5208     $message = _("Erreur de parametrage. Contactez votre administrateur.");
5209     }
5210 mbroquet 3730 // Affiche le message de validation
5211     else {
5212     // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
5213     $sql = "SELECT om_etat.libelle
5214     FROM ".DB_PREFIXE."om_etat
5215 softime 8989 WHERE om_etat.id = '".$this->f->get_submitted_post_value("bordereau")."'";
5216     $res = $this->f->db->getone($sql);
5217     $this->f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
5218     $this->f->isDatabaseError($res);
5219 mbroquet 3730 //
5220     $message_class = "valid";
5221     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
5222     $message .= " : <br/><br/>";
5223     $message .= "<a class='om-prev-icon pdf-16'";
5224     $message .= " title=\""._("Bordereau")."\"";
5225 softime 7996 $message .= "href='".OM_ROUTE_FORM."&obj=instruction";
5226 nmeucci 4317 $message .= "&action=220";
5227     $message .= "&idx=0";
5228 softime 8989 $message .= "&type_bordereau=".$this->f->get_submitted_post_value("bordereau");
5229     $message .= "&date_bordereau_debut=".$this->f->get_submitted_post_value("date_bordereau_debut");
5230     $message .= "&date_bordereau_fin=".$this->f->get_submitted_post_value("date_bordereau_fin");
5231 mbroquet 3730 // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
5232 softime 8989 if ($this->f->get_submitted_post_value("om_collectivite") !== null) {
5233     $message .= "&collectivite=".$this->f->get_submitted_post_value("om_collectivite");
5234 mbroquet 3730 }
5235     $message .= "'"." target='_blank'>";
5236 softime 8989 $message .= $res." "._("du")." ".$this->f->get_submitted_post_value("date_bordereau_debut")
5237     ." "._("au")." ".$this->f->get_submitted_post_value("date_bordereau_fin");
5238 mbroquet 3730 $message .= "</a>";
5239     }
5240     }
5241    
5242     /**
5243     * Affichage des messages et du formulaire
5244     */
5245     // Affichage du message de validation ou d'erreur
5246     if (isset($message) && isset($message_class) && $message != "") {
5247 softime 8989 $this->f->displayMessage($message_class, $message);
5248 mbroquet 3730 }
5249     // Ouverture du formulaire
5250     printf("\t<form");
5251     printf(" method=\"post\"");
5252     printf(" id=\"suivi_bordereaux_form\"");
5253     printf(" action=\"\"");
5254     printf(">\n");
5255     // Paramétrage des champs du formulaire
5256     $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
5257 softime 8989 // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
5258 mbroquet 3730 // collectivité dans le formulaire
5259 softime 8989 if ($_SESSION["niveau"] == 2) {
5260 mbroquet 3730 array_push($champs, "om_collectivite");
5261     }
5262     // Création d'un nouvel objet de type formulaire
5263 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5264     "validation" => 0,
5265     "maj" => 0,
5266     "champs" => $champs,
5267     ));
5268 mbroquet 3730 // Paramétrage du champ date_bordereau_debut
5269     $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
5270     $form->setType("date_bordereau_debut", "date");
5271     $form->setTaille("date_bordereau_debut", 12);
5272     $form->setMax("date_bordereau_debut", 12);
5273     $form->setRequired("date_bordereau_debut");
5274     $form->setOnchange("date_bordereau_debut", "fdate(this)");
5275     $form->setVal("date_bordereau_debut", date("d/m/Y"));
5276     // Paramétrage du champ date_bordereau_fin
5277     $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
5278     $form->setType("date_bordereau_fin", "date");
5279     $form->setTaille("date_bordereau_fin", 12);
5280     $form->setMax("date_bordereau_fin", 12);
5281     $form->setRequired("date_bordereau_fin");
5282     $form->setOnchange("date_bordereau_fin", "fdate(this)");
5283     $form->setVal("date_bordereau_fin", date("d/m/Y"));
5284     // Paramétrage du champ bordereau
5285     $form->setLib("bordereau", _("bordereau"));
5286     $form->setType("bordereau", "select");
5287     $form->setRequired("bordereau");
5288     // Valeurs des champs
5289 softime 8989 if ($this->f->get_submitted_post_value("validation") !== null) {
5290     $form->setVal("date_bordereau_debut", $this->f->get_submitted_post_value("date_bordereau_debut"));
5291     $form->setVal("date_bordereau_fin", $this->f->get_submitted_post_value("date_bordereau_fin"));
5292     $form->setVal("bordereau", $this->f->get_submitted_post_value("bordereau"));
5293     $form->setVal("om_collectivite", $this->f->get_submitted_post_value("om_collectivite"));
5294 mbroquet 3730 }
5295     // Données du select - On récupère ici la liste de tous les états disponibles
5296     // dans la table om_etat qui ont un id qui commence par la cahine de caractères
5297     // 'bordereau_'
5298     $sql = "SELECT om_etat.id, om_etat.libelle
5299     FROM ".DB_PREFIXE."om_etat
5300     WHERE om_etat.id LIKE 'bordereau_%'
5301     ORDER BY om_etat.id";
5302 softime 8989 $res = $this->f->db->query($sql);
5303     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5304     $this->f->isDatabaseError($res);
5305 mbroquet 3730 // Données du select
5306     $contenu = array(
5307     0 => array("", ),
5308     1 => array(_("choisir bordereau")),
5309     );
5310     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5311     $contenu[0][] = $row['id'];
5312     $contenu[1][] = $row['libelle'];
5313     }
5314     $form->setSelect("bordereau", $contenu);
5315 softime 8989 //
5316     if ($_SESSION["niveau"] == 2) {
5317     $form->setLib("om_collectivite", _("collectivite"));
5318     $form->setType("om_collectivite", "select");
5319 mbroquet 3730
5320 softime 8989 // Données du select - On récupère ici la liste de tous toutes les collectivités
5321     // de niveau 1
5322     $sql = "SELECT om_collectivite, libelle
5323     FROM ".DB_PREFIXE."om_collectivite
5324     WHERE niveau = '1' ORDER BY libelle";
5325     $res = $this->f->db->query($sql);
5326     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5327     $this->f->isDatabaseError($res);
5328     // La valeur par défaut du select est Toutes
5329     $list_collectivites = array(
5330     0 => array("", ),
5331     1 => array(_("toutes"))
5332     );
5333 mbroquet 3730
5334 softime 8989 $id_colls = "";
5335     // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
5336     // par des virgules, pour un traitement plus facile dans la requête de sous-état
5337     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5338     if ($id_colls != "") {
5339     $id_colls .= ",";
5340     }
5341     $id_colls .= $row['om_collectivite'];
5342     $list_collectivites[0][] = $row['om_collectivite'];
5343     $list_collectivites[1][] = $row['libelle'];
5344 mbroquet 3730 }
5345 softime 8989 // On affecte la liste d'identifiants à l'option Toutes
5346     $list_collectivites[0][0] = $id_colls ;
5347     $form->setSelect("om_collectivite", $list_collectivites);
5348 mbroquet 3730 }
5349     // Affichage du formulaire
5350     $form->entete();
5351     $form->afficher($champs, 0, false, false);
5352     $form->enpied();
5353     // Affichage du bouton
5354     printf("\t<div class=\"formControls\">\n");
5355 softime 8989 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5356 mbroquet 3730 printf("\t</div>\n");
5357     // Fermeture du formulaire
5358     printf("\t</form>\n");
5359     }
5360    
5361 nmeucci 4317
5362     /**
5363     * VIEW - view_generate_suivi_bordereaux.
5364     *
5365     * Génère et affiche les bordereaux de suivi.
5366     *
5367     * @return [void]
5368     */
5369     function view_generate_suivi_bordereaux() {
5370     // Vérification de l'accessibilité sur l'élément
5371     $this->checkAccessibility();
5372     // Récupération du type de bordereau
5373     $bordereau = $this->f->get_submitted_get_value('type_bordereau');
5374     // Génération du PDF
5375     $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
5376     // Affichage du PDF
5377     $this->expose_pdf_output(
5378     $result['pdf_output'],
5379     $result['filename']
5380     );
5381     }
5382    
5383    
5384 mbroquet 3730 /**
5385     * VIEW - view_suivi_envoi_lettre_rar.
5386     *
5387 softime 8989 * Vue pour imprimer les AR.
5388 mbroquet 3730 *
5389     * @return void
5390     */
5391     function view_suivi_envoi_lettre_rar() {
5392     // Vérification de l'accessibilité sur l'élément
5393     $this->checkAccessibility();
5394    
5395     //
5396 softime 8989 if ($this->f->get_submitted_post_value("date") !== null) {
5397     $date = $this->f->get_submitted_post_value("date");
5398 mbroquet 3730 } else {
5399     $date = "";
5400     }
5401     //
5402 softime 8989 if ($this->f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
5403     $liste_code_barres_instruction = $this->f->get_submitted_post_value("liste_code_barres_instruction");
5404 mbroquet 3730 } else {
5405     $liste_code_barres_instruction = "";
5406     }
5407    
5408     // Compteur du nombre de page générées
5409     $nbLettres = 0;
5410     // Liste d'id des instructions
5411     $id4Gen = array();
5412     //
5413     $error = "";
5414    
5415 softime 5504 // Initialisation du tableau qui va contenir les DI pour lister les liens
5416     $dossierTab = array();
5417     // On vérifie que l'utilisateur ait les droits pour afficher des consultations
5418     $isAccredited = $this->f->isAccredited(array("dossier_instruction","dossier_instruction_consulter"), "OR");
5419     $hasHidden = true;
5420     // S'il ne peut pas les consulter il aura des dossiers caché
5421     if ($isAccredited === true) {
5422     $hasHidden = false;
5423     }
5424    
5425 mbroquet 3730 /**
5426     * Validation du formulaire
5427     */
5428     // Si le formulaire a été validé
5429 softime 8989 if ($this->f->get_submitted_post_value('validation') !== null) {
5430 mbroquet 3730 //
5431     if (empty($date) || empty($liste_code_barres_instruction)) {
5432     //
5433     $message_class = "error";
5434     $message = _("Tous les champs doivent etre remplis.");
5435     } else {
5436     // Création d'un tableau d'instruction
5437 softime 8989 $liste = explode("\r\n", $this->f->get_submitted_post_value("liste_code_barres_instruction"));
5438 mbroquet 3730 //
5439     foreach ($liste as $code_barres) {
5440     // On enlève les éventuels espaces saisis
5441     $code_barres = trim($code_barres);
5442     // Vérification de l'existence de l'instruction
5443     if ($code_barres != "") {
5444     // Si la valeur transmise est numérique
5445     if (is_numeric($code_barres)) {
5446     //
5447 softime 6565 $sql = "SELECT count(*)
5448     FROM ".DB_PREFIXE."instruction
5449     INNER JOIN ".DB_PREFIXE."dossier
5450     ON dossier.dossier=instruction.dossier
5451     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5452     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5453     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5454     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5455     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5456     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5457     INNER JOIN ".DB_PREFIXE."groupe
5458     ON dossier_autorisation_type.groupe = groupe.groupe
5459     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
5460 softime 7067
5461     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
5462     $group_clause = array();
5463     foreach ($_SESSION["groupe"] as $key => $value) {
5464     $group_clause[$key] = "(groupe.code = '".$key."'";
5465     if($value["confidentiel"] !== true) {
5466     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
5467     }
5468     $group_clause[$key] .= ")";
5469     }
5470     $conditions = implode(" OR ", $group_clause);
5471     $sql .= " AND (" . $conditions . ")";
5472    
5473 softime 8989 $nbInstr = $this->f->db->getone($sql);
5474     $this->f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
5475     $this->f->isDatabaseError($nbInstr);
5476 mbroquet 3730 //
5477     if ($nbInstr == "1") {
5478     // Récupération de la date d'envoi de l'instruction bippé
5479     $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
5480 softime 8989 $res = $this->f->db->query($sql);
5481     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5482     $this->f->isDatabaseError($res);
5483 mbroquet 3730 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
5484     // Si pas de date ou correspond à la date du formulaire on
5485     // effectue le traitement
5486     if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
5487 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
5488     "obj" => "instruction",
5489     "idx" => $row['instruction'],
5490     ));
5491 mbroquet 3730 $valF = array();
5492     foreach($instr->champs as $id => $champ) {
5493     $valF[$champ] = $instr->val[$id];
5494     }
5495 softime 5504
5496     # Si on peut consulter les dossiers et que le dossier n'existe pas déjà dans la liste
5497     if ($isAccredited === true
5498     && array_key_exists($instr->getVal("dossier"), $dossierTab) === false) {
5499 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
5500     "obj" => "dossier",
5501     "idx" => $instr->getVal("dossier"),
5502     ));
5503 softime 5504 if ($dossier->is_user_from_allowed_collectivite()){
5504     $dossierTab[$instr->getVal("dossier")] = $dossier;
5505     } else {
5506     $hasHidden = true;
5507     }
5508     }
5509    
5510 mbroquet 3730 $valF['date_evenement']=
5511     $instr->dateDBToForm($valF['date_evenement']);
5512     $valF['archive_date_complet']=
5513     $instr->dateDBToForm($valF['archive_date_complet']);
5514     $valF['archive_date_rejet']=
5515     $instr->dateDBToForm($valF['archive_date_rejet']);
5516     $valF['archive_date_limite']=
5517     $instr->dateDBToForm($valF['archive_date_limite']);
5518     $valF['archive_date_notification_delai']=
5519     $instr->dateDBToForm($valF['archive_date_notification_delai']);
5520     $valF['archive_date_decision']=
5521     $instr->dateDBToForm($valF['archive_date_decision']);
5522     $valF['archive_date_validite']=
5523     $instr->dateDBToForm($valF['archive_date_validite']);
5524     $valF['archive_date_achevement']=
5525     $instr->dateDBToForm($valF['archive_date_achevement']);
5526     $valF['archive_date_chantier']=
5527     $instr->dateDBToForm($valF['archive_date_chantier']);
5528     $valF['archive_date_conformite']=
5529     $instr->dateDBToForm($valF['archive_date_conformite']);
5530     $valF['archive_date_dernier_depot']=
5531     $instr->dateDBToForm($valF['archive_date_dernier_depot']);
5532     $valF['archive_date_limite_incompletude']=
5533     $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
5534     $valF['date_finalisation_courrier']=
5535     $instr->dateDBToForm($valF['date_finalisation_courrier']);
5536     $valF['date_envoi_signature']=
5537     $instr->dateDBToForm($valF['date_envoi_signature']);
5538     $valF['date_retour_signature']=
5539     $instr->dateDBToForm($valF['date_retour_signature']);
5540     $valF['date_envoi_rar']=
5541     $instr->dateDBToForm($valF['date_envoi_rar']);
5542     $valF['date_retour_rar']=
5543     $instr->dateDBToForm($valF['date_retour_rar']);
5544     $valF['date_envoi_controle_legalite']=
5545     $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
5546     $valF['date_retour_controle_legalite']=
5547     $instr->dateDBToForm($valF['date_retour_controle_legalite']);
5548     $valF['date_envoi_rar'] = $date;
5549    
5550     // Vérification de la finalisation du document
5551     // correspondant au code barres
5552     if($instr->getVal("om_final_instruction") === 't') {
5553     $instr->setParameter('maj', 1);
5554 nmeucci 3971 $instr->class_actions[1]["identifier"] =
5555     "envoi lettre RAR (depuis le menu suivi des pièces)";
5556 softime 8989 if ($instr->modifier($valF) == true) {
5557 mbroquet 3730 $id4Gen[] = $code_barres;
5558     $nbLettres ++;
5559     } else {
5560     //
5561     if ($error != "") {
5562     $error .= "<br/>";
5563     }
5564     $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
5565     $code_barres);
5566     $error .= " ";
5567     $error .= _("Veuillez contacter votre administrateur.");
5568     }
5569     } else {
5570     //
5571     if ($error != "") {
5572     $error .= "<br/>";
5573     }
5574     $error .= sprintf(_("Le document correspondant au
5575     code barres %s n'est pas finalise,
5576     le bordereau ne sera pas genere."),
5577     $code_barres);
5578     }
5579    
5580     } else {
5581     //
5582     if ($error != "") {
5583     $error .= "<br/>";
5584     }
5585     $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
5586     }
5587     } else {
5588     //
5589     if ($error != "") {
5590     $error .= "<br/>";
5591     }
5592     $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
5593     }
5594     } else {
5595     //
5596     if ($error != "") {
5597     $error .= "<br/>";
5598     }
5599     $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
5600     }
5601     }
5602     }
5603     }
5604     }
5605    
5606     /**
5607     * Affichage des messages et du formulaire
5608     */
5609     // Affichage du message de validation ou d'erreur
5610     if (isset($message) && isset($message_class) && $message != "") {
5611 softime 8989 $this->f->displayMessage($message_class, $message);
5612 mbroquet 3730 }
5613     // Affichage du message d'erreur
5614     if(!empty($error)) {
5615 softime 8989 $this->f->displayMessage("error", $error);
5616 mbroquet 3730 }
5617     // Affichage du message de validation de la saisie
5618     if ($nbLettres > 0) {
5619     //
5620 softime 5504 echo "\n<div class=\"message ui-widget ui-corner-all ui-state-highlight ui-state-valid\" >";
5621     echo "\n<p>";
5622     echo "\n<span class=\"ui-icon ui-icon-info\"></span>";
5623     echo "\n<span class=\"text\">";
5624     echo _("Cliquez sur le lien ci-dessous pour telecharger votre document");
5625     echo " : \n<br/><br/>";
5626     echo "\n<a class='om-prev-icon pdf-16'";
5627 softime 8989 echo "\n title=\""._("imprimer les AR")."\"";
5628 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
5629 softime 5504 echo "\n target='_blank'>";
5630 softime 8989 echo _("Telecharger le document pour")." ".$nbLettres." "._("AR");
5631 softime 5504 echo "\n</a>";
5632     echo "\n</span>";
5633     echo "\n</p>";
5634     echo "\n<br/>\n";
5635     if ($isAccredited === true) {
5636     echo '<fieldset id="fieldset-form-rar-lien_di" class="cadre ui-corner-all startClosed" style="background-color: inherite;">';
5637     echo "\n<legend class=\"ui-corner-all ui-widget-content ui-state-active\" style=\"background-color: transparent; color: inherit;\">\n";
5638     echo _('Dossiers concernés par ce traitement');
5639     echo "\n</legend>";
5640     echo "\n<div class=\"fieldsetContent\" style=\"display: none;background-color: inherite\">";
5641    
5642     if ($hasHidden === true) {
5643     echo "\n<br/>";
5644     echo "\n<p>";
5645     echo "\n<span class='text'>";
5646     echo _("Certains dossiers ont été omis de la liste ci-dessous car vous ne possédez pas les permissions nécessaires pour y accéder.");
5647     echo "</span>";
5648     echo "\n</p>";
5649     echo "\n<br/>";
5650     }
5651     foreach ($dossierTab as $dossier) {
5652 softime 7067
5653     $inst_da = $this->get_inst_common("dossier_autorisation", $dossier->getVal('dossier_autorisation'));
5654     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $inst_da->getVal('dossier_autorisation_type_detaille'));
5655     $code_datd = $inst_datd->getVal('code');
5656    
5657     $obj = "dossier_instruction";
5658     if ($code_datd === 'REC' OR $code_datd === 'REG') {
5659     $obj = "dossier_contentieux_tous_recours";
5660     }
5661     if ($code_datd === 'IN') {
5662     $obj = "dossier_contentieux_toutes_infractions";
5663     }
5664    
5665 softime 5504 echo "\n<div class=\"bloc group\">";
5666     echo "\n<div class=\"field field-type-text\">";
5667    
5668     echo "\n<p>";
5669     echo "\n<span class='text'>";
5670     echo "\n<a class=\"om-icon om-icon-16 consult-16\" title=\"" . _('Consulter') . "\"";
5671 softime 7996 echo "\n href=\"".OM_ROUTE_FORM."&obj=dossier_instruction&action=3&idx=";
5672 softime 5504 echo $dossier->getVal("dossier");
5673     echo "\">";
5674     echo "\n</a>";
5675    
5676     echo "\n<a title=\""._("Consulter")."\" style=\"vertical-align:middle;\"";
5677 softime 7996 echo " href=\"".OM_ROUTE_FORM."&obj=";
5678 softime 7067 echo $obj;
5679     echo "&action=3&idx=";
5680 softime 5504 echo $dossier->getVal("dossier");
5681     echo "\">";
5682     echo $dossier->getVal("dossier_libelle");
5683     echo "\n</a>";
5684     echo "\n</span>";
5685     echo "\n</p>";
5686    
5687     echo "\n</div>";
5688     echo "\n</div>";
5689     }
5690     echo "\n</div>";
5691     echo "\n</fieldset>";
5692     }
5693     echo "\n</div>";
5694     echo "\n</div>";
5695 mbroquet 3730 }
5696     // Ouverture du formulaire
5697     echo "\t<form";
5698     echo " method=\"post\"";
5699     echo " id=\"suivi_envoi_lettre_rar_form\"";
5700     echo " action=\"\"";
5701     echo ">\n";
5702     // Paramétrage des champs du formulaire
5703     $champs = array("date", "liste_code_barres_instruction");
5704     // Création d'un nouvel objet de type formulaire
5705 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5706     "validation" => 0,
5707     "maj" => 0,
5708     "champs" => $champs,
5709     ));
5710 mbroquet 3730 // Paramétrage du champ date du formulaire
5711     $form->setLib("date", _("Date")."* :");
5712     $form->setType("date", "date");
5713     $form->setOnchange("date", "fdate(this)");
5714     $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
5715     $form->setTaille("date", 10);
5716     $form->setMax("date", 10);
5717     // Paramétrage du champ liste_code_barres_instruction du formulaire
5718     $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
5719     $form->setType("liste_code_barres_instruction", "textarea");
5720     $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
5721     $form->setTaille("liste_code_barres_instruction", 20);
5722     $form->setMax("liste_code_barres_instruction", 20);
5723     // Affichage du formulaire
5724     $form->entete();
5725     $form->afficher($champs, 0, false, false);
5726     $form->enpied();
5727     // Affichage du bouton
5728     echo "\t<div class=\"formControls\">\n";
5729 softime 8989 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
5730 mbroquet 3730 echo "\t</div>\n";
5731     // Fermeture du formulaire
5732     echo "\t</form>\n";
5733     }
5734    
5735     /**
5736     * VIEW - view_suivi_mise_a_jour_des_dates.
5737     *
5738     * Vu pour mettre à jour les dates de suivi de l'instruction.
5739     *
5740     * @return void
5741     */
5742     function view_suivi_mise_a_jour_des_dates() {
5743     // Vérification de l'accessibilité sur l'élément
5744     $this->checkAccessibility();
5745    
5746     // Récupération des valeur passées en POST ou GET
5747 softime 8989 if($this->f->get_submitted_post_value("type_mise_a_jour") !== null) {
5748     $type_mise_a_jour = $this->f->get_submitted_post_value("type_mise_a_jour");
5749     } elseif($this->f->get_submitted_get_value('type_mise_a_jour') !== null) {
5750     $type_mise_a_jour = $this->f->get_submitted_get_value('type_mise_a_jour');
5751 mbroquet 3730 } else {
5752     $type_mise_a_jour = "";
5753     }
5754 softime 8989 if($this->f->get_submitted_post_value('date') !== null) {
5755     $date = $this->f->get_submitted_post_value('date');
5756     } elseif($this->f->get_submitted_get_value('date') !== null) {
5757     $date = $this->f->get_submitted_get_value('date');
5758 mbroquet 3730 } else {
5759     $date = "";
5760     }
5761 softime 8989 if($this->f->get_submitted_post_value('code_barres') !== null) {
5762     $code_barres = $this->f->get_submitted_post_value('code_barres');
5763     } elseif($this->f->get_submitted_get_value('code_barres') !== null) {
5764     $code_barres = $this->f->get_submitted_get_value('code_barres');
5765 mbroquet 3730 } else {
5766     $code_barres = "";
5767     }
5768     // Booléen permettant de définir si un enregistrement à eu lieu
5769     $correct = false;
5770     // Booléen permettant de définir si les dates peuvent êtres enregistrées
5771     $date_error = false;
5772     // Champs date à mettre à jour
5773     $liste_champs=array();
5774    
5775     // Si le formulaire a été validé
5776 softime 8989 if ($this->f->get_submitted_post_value('validation') !== null) {
5777 mbroquet 3730 if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
5778    
5779 softime 6565 // Vérification de l'existence de l'instruction
5780     $sql = "SELECT instruction
5781     FROM ".DB_PREFIXE."instruction
5782     INNER JOIN ".DB_PREFIXE."dossier
5783     ON dossier.dossier=instruction.dossier
5784     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
5785     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
5786     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5787     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5788     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
5789     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5790     INNER JOIN ".DB_PREFIXE."groupe
5791     ON dossier_autorisation_type.groupe = groupe.groupe
5792     WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
5793 softime 7067
5794     // Ajout d'un filtre sur les groupes auxquels l'utilisateur a accès
5795     $group_clause = array();
5796     foreach ($_SESSION["groupe"] as $key => $value) {
5797     $group_clause[$key] = "(groupe.code = '".$key."'";
5798     if($value["confidentiel"] !== true) {
5799     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
5800     }
5801     $group_clause[$key] .= ")";
5802     }
5803     $conditions = implode(" OR ", $group_clause);
5804     $sql .= " AND (" . $conditions . ")";
5805    
5806    
5807 softime 8989 $res = $this->f->db->query($sql);
5808     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
5809     $this->f->isDatabaseError($res);
5810 mbroquet 3730
5811     if($res->numrows() == 1) {
5812     $liste_champs = explode(";", $type_mise_a_jour);
5813     // Mise à jour des dates après l'écran de verification
5814 softime 8989 if($this->f->get_submitted_post_value('is_valid') !== null and $this->f->get_submitted_post_value('is_valid') == "true") {
5815 mbroquet 3730 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
5816 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
5817     "obj" => "instruction",
5818     "idx" => $row['instruction'],
5819     ));
5820 mbroquet 3730 $valF = array();
5821     foreach($instr->champs as $id => $champ) {
5822     $valF[$champ] = $instr->val[$id];
5823     }
5824 softime 6565 $valF['date_evenement'] = $instr->dateDBToForm($valF['date_evenement']);
5825     $valF['archive_date_complet'] = $instr->dateDBToForm($valF['archive_date_complet']);
5826     $valF['archive_date_rejet'] = $instr->dateDBToForm($valF['archive_date_rejet']);
5827     $valF['archive_date_limite'] = $instr->dateDBToForm($valF['archive_date_limite']);
5828     $valF['archive_date_notification_delai'] = $instr->dateDBToForm($valF['archive_date_notification_delai']);
5829     $valF['archive_date_decision'] = $instr->dateDBToForm($valF['archive_date_decision']);
5830     $valF['archive_date_validite'] = $instr->dateDBToForm($valF['archive_date_validite']);
5831     $valF['archive_date_achevement'] = $instr->dateDBToForm($valF['archive_date_achevement']);
5832     $valF['archive_date_chantier'] = $instr->dateDBToForm($valF['archive_date_chantier']);
5833     $valF['archive_date_conformite'] = $instr->dateDBToForm($valF['archive_date_conformite']);
5834     $valF['archive_date_dernier_depot'] = $instr->dateDBToForm($valF['archive_date_dernier_depot']);
5835     $valF['archive_date_limite_incompletude'] = $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
5836     $valF['date_finalisation_courrier'] = $instr->dateDBToForm($valF['date_finalisation_courrier']);
5837     $valF['date_envoi_signature'] = $instr->dateDBToForm($valF['date_envoi_signature']);
5838     $valF['date_retour_signature'] = $instr->dateDBToForm($valF['date_retour_signature']);
5839     $valF['date_envoi_rar'] = $instr->dateDBToForm($valF['date_envoi_rar']);
5840     $valF['date_retour_rar'] = $instr->dateDBToForm($valF['date_retour_rar']);
5841     $valF['date_envoi_controle_legalite'] = $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
5842     $valF['date_retour_controle_legalite'] = $instr->dateDBToForm($valF['date_retour_controle_legalite']);
5843     $valF['archive_date_cloture_instruction'] = $instr->dateDBToForm($valF['archive_date_cloture_instruction']);
5844     $valF['archive_date_premiere_visite'] = $instr->dateDBToForm($valF['archive_date_premiere_visite']);
5845     $valF['archive_date_derniere_visite'] = $instr->dateDBToForm($valF['archive_date_derniere_visite']);
5846     $valF['archive_date_contradictoire'] = $instr->dateDBToForm($valF['archive_date_contradictoire']);
5847     $valF['archive_date_retour_contradictoire'] = $instr->dateDBToForm($valF['archive_date_retour_contradictoire']);
5848     $valF['archive_date_ait'] = $instr->dateDBToForm($valF['archive_date_ait']);
5849     $valF['archive_date_transmission_parquet'] = $instr->dateDBToForm($valF['archive_date_transmission_parquet']);
5850 mbroquet 3730
5851     foreach(explode(";", $type_mise_a_jour) as $maj_date) {
5852     $valF[$maj_date]=$date;
5853     }
5854    
5855     // Vérification de la finalisation du document
5856     // correspondant au code barres
5857     if($valF["om_final_instruction"] === 't' or
5858     $valF["lettretype"] == '') {
5859     $code_barres = "";
5860    
5861     //Désactivation de l'autocommit
5862 softime 8989 $this->f->db->autoCommit(false);
5863 mbroquet 3730
5864     //On modifie les valeurs de l'instruction
5865     $instr->setParameter('maj', 170);
5866 nmeucci 3965 $instr->class_actions[170]["identifier"] =
5867 nmeucci 3972 "mise à jour des dates (depuis le menu suivi des pièces)";
5868 softime 8989 $retour = $instr->modifier($valF);
5869 mbroquet 3730
5870     //Si une erreur s'est produite, on défait les modifications
5871     //qui ont été faites
5872     if (!$retour){
5873     $instr->undoValidation();
5874     }
5875     //Sinon, on valide en base de données les modifications
5876     else {
5877 softime 8989 $this->f->db->commit();
5878 mbroquet 3730 }
5879    
5880     // Variable correct retourné depuis la classe instruction
5881     $correct = $instr->correct;
5882    
5883     // Si la modification sur l'instruction a échoué
5884     if ($correct === false) {
5885    
5886     // Message d'erreur de la classe instruction
5887     $error = $instr->msg;
5888     }
5889    
5890     } else {
5891     // Indique que le traitement est en erreur
5892     $correct = false;
5893     // Message d'erreur
5894     $error = sprintf(_("Le document n'est pas finalise."),
5895     "<span class='bold'>".$code_barres."</span>");
5896     }
5897     } else {
5898     // Récupération des infos du dossier
5899     $sqlInfo = "SELECT dossier.dossier_libelle,
5900     evenement.libelle as evenement,
5901     autorite_competente.code as autorite_competente_code,
5902     autorite_competente.libelle as autorite_competente,
5903     evenement.type as evenement_type,
5904     to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
5905     to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
5906     to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
5907     to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
5908     to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
5909     to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
5910     FROM ".DB_PREFIXE."instruction
5911     INNER JOIN ".DB_PREFIXE."dossier ON
5912     dossier.dossier=instruction.dossier
5913     LEFT JOIN ".DB_PREFIXE."autorite_competente ON
5914     dossier.autorite_competente=autorite_competente.autorite_competente
5915     INNER JOIN ".DB_PREFIXE."evenement ON
5916     instruction.evenement=evenement.evenement
5917     WHERE code_barres='".$code_barres."'";
5918 softime 8989 $resInfo = $this->f->db->query($sqlInfo);
5919     $this->f->isDatabaseError($resInfo);
5920 mbroquet 3730 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
5921    
5922     // Vérification de la non modification des dates de suivi
5923     foreach(explode(";", $type_mise_a_jour) as $champ) {
5924     if($infos[$champ] != "" AND $infos[$champ] != $date) {
5925     $error = _("Les dates de suivis ne peuvent etre modifiees");
5926     $date_error = true;
5927     }
5928     }
5929     }
5930     } else {
5931     $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
5932     }
5933    
5934     } else {
5935     $error = _("Tous les champs doivent etre remplis.");
5936     }
5937     }
5938    
5939     /**
5940     * Affichage des messages et du formulaire
5941     */
5942     // Affichage du message de validation ou d'erreur
5943     if (isset($message) && isset($message_class) && $message != "") {
5944 softime 8989 $this->f->displayMessage($message_class, $message);
5945 mbroquet 3730 }
5946     // Affichage du message d'erreur
5947     if(!empty($error)) {
5948 softime 8989 $this->f->displayMessage("error", $error);
5949 mbroquet 3730 }
5950    
5951     // Affichage du message de validation de la saisie
5952     if($correct === true) {
5953 softime 8989 $this->f->displayMessage("ok", _("Saisie enregistree"));
5954 mbroquet 3730 }
5955     // Ouverture du formulaire
5956     echo "\t<form";
5957     echo " method=\"post\"";
5958     echo " id=\"suivi_mise_a_jour_des_dates_form\"";
5959     echo " action=\"\"";
5960     echo ">\n";
5961     // Paramétrage des champs du formulaire
5962     if(isset($infos)) {
5963     $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
5964     , "autorite_competente", "date_envoi_signature",
5965     "date_retour_signature", "date_envoi_controle_legalite",
5966     "date_retour_controle_legalite", "date_envoi_rar",
5967     "date_retour_rar", "is_valid");
5968     } else {
5969     $champs = array("type_mise_a_jour", "date", "code_barres");
5970     }
5971     // Création d'un nouvel objet de type formulaire
5972 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
5973     "validation" => 0,
5974     "maj" => 0,
5975     "champs" => $champs,
5976     ));
5977 mbroquet 3730 // Paramétrage des champs du formulaire
5978     // Parametrage du champ type_mise_a_jour
5979     $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
5980     if(isset($infos)) {
5981     $form->setType("type_mise_a_jour", "selecthiddenstatic");
5982    
5983     } else {
5984     $form->setType("type_mise_a_jour", "select");
5985    
5986     }
5987     $form->setVal("type_mise_a_jour", $type_mise_a_jour);
5988     $contenu = array();
5989    
5990     $contenu[0][0] = "date_envoi_signature";
5991     $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
5992    
5993     $contenu[0][1] = "date_retour_signature";
5994     $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
5995    
5996     $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
5997     $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
5998    
5999     $contenu[0][3] = "date_envoi_controle_legalite";
6000     $contenu[1][3] = _("date d'envoi au controle de legalite");
6001    
6002     $contenu[0][4] = "date_retour_controle_legalite";
6003     $contenu[1][4] = _("date de retour de controle de legalite");
6004    
6005     $contenu[0][5] = "date_retour_rar";
6006 softime 8989 $contenu[1][5] = __("date de notification du correspondant");
6007 mbroquet 3730
6008     $form->setSelect("type_mise_a_jour", $contenu);
6009    
6010     // Parametrage du champ date
6011     $form->setLib("date", _("Date")."* :");
6012     if(isset($infos)) {
6013     $form->setType("date", "hiddenstaticdate");
6014    
6015     } else {
6016     $form->setType("date", "date");
6017     }
6018     $form->setVal("date", $date);
6019     $form->setTaille("date", 10);
6020     $form->setMax("date", 10);
6021    
6022     // Parametrage du champ code_barres
6023     $form->setLib("code_barres", _("Code barres d'instruction")."* :");
6024     if(isset($infos)) {
6025     $form->setType("code_barres", "hiddenstatic");
6026     } else {
6027     $form->setType("code_barres", "text");
6028     }
6029     $form->setVal("code_barres", $code_barres);
6030     $form->setTaille("code_barres", 20);
6031     $form->setMax("code_barres", 20);
6032    
6033     // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
6034     if(isset($infos)) {
6035    
6036     // Tous les champs sont défini par defaut à static
6037     foreach ($infos as $key => $value) {
6038     $form->setType($key, "static");
6039     if(in_array($key, $liste_champs)) {
6040     $form->setVal($key, $date);
6041     } else {
6042     $form->setVal($key, $value);
6043     }
6044     }
6045    
6046     // Les champs dont on viens de définir la valeur sont en gras
6047     foreach ($liste_champs as $value) {
6048     $form->setBloc($value,'DF',"",'bold');
6049     }
6050    
6051     // Parametrage du champ dossier
6052     $form->setLib("dossier_libelle", _("dossier_libelle")." :");
6053     $form->setType("dossier_libelle", "static");
6054     $form->setVal("dossier_libelle", $infos['dossier_libelle']);
6055    
6056     // Parametrage du champ evenement
6057     $form->setLib("evenement", _("evenement")." :");
6058     $form->setType("evenement", "static");
6059     $form->setVal("evenement", $infos['evenement']);
6060    
6061     // Parametrage du champ autorite_competente
6062     $form->setLib("autorite_competente", _("Autorite competente")." :");
6063     $form->setType("autorite_competente", "static");
6064     $form->setVal("autorite_competente", $infos['autorite_competente']);
6065    
6066 softime 8989 // Parametrage des libellés d'envoi avec AR
6067     $form->setLib("date_envoi_rar", __("date_envoi_ar")." :");
6068     $form->setLib("date_retour_rar", __("date_notification")." :");
6069 mbroquet 3730
6070     $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
6071     $form->setLib("date_retour_signature", _("date_retour_signature")." :");
6072     $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
6073     $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
6074     // Configuration des libellé en fonction de l'autorité compétente
6075     if($infos['autorite_competente_code'] == 'ETAT') {
6076     $form->setType("date_envoi_controle_legalite", "hiddendate");
6077     $form->setType("date_retour_controle_legalite", "hiddendate");
6078     }
6079    
6080     // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
6081     $form->setLib("is_valid", _("Valide")." :");
6082     $form->setType("is_valid", "hidden");
6083     $form->setVal("is_valid", 'true');
6084    
6085     $form->setFieldset('dossier_libelle','D',_('Synthese'));
6086     $form->setFieldset('is_valid','F');
6087    
6088     }
6089    
6090    
6091     // Création du fieldset regroupant les champs permettant la mise à jour des date
6092     $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
6093     $form->setFieldset('code_barres','F');
6094     // Affichage du formulaire
6095     $form->entete();
6096     $form->afficher($champs, 0, false, false);
6097     $form->enpied();
6098     // Affichage du bouton
6099     echo "\t<div class=\"formControls\">\n";
6100     //
6101     if(!$date_error) {
6102 softime 8989 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
6103 mbroquet 3730 }
6104     // Si pas sur l'écran de validation
6105     if(isset($infos)) {
6106 softime 7996 echo "<a class=\"retour\" href=\"".OM_ROUTE_FORM."&obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
6107 mbroquet 3730 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
6108     echo "\">Retour</a>";
6109     }
6110     echo "\t</div>\n";
6111     // Fermeture du formulaire
6112     echo "\t</form>\n";
6113     }
6114    
6115     /**
6116     * [view_pdf_lettre_rar description]
6117     *
6118     * @return [type] [description]
6119     */
6120     function view_pdf_lettre_rar() {
6121     // Vérification de l'accessibilité sur l'élément
6122     $this->checkAccessibility();
6123 softime 8989 //
6124     $this->f->disableLog();
6125 mbroquet 3730
6126 softime 8989 if($this->f->get_submitted_get_value('liste') != null) {
6127     $listeCodeBarres = explode(',',$this->f->get_submitted_get_value('liste'));
6128 mbroquet 3730
6129     // Classe permettant la mise en page de l'édition pdf
6130     require_once "../obj/pdf_lettre_rar.class.php";
6131     $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
6132     // Initialisation de la mise en page
6133 softime 8989 $pdf_lettre_rar->init($this->f);
6134 mbroquet 3730
6135     foreach ($listeCodeBarres as $code_barres) {
6136    
6137 softime 7067 // On récupère le dossier
6138     $sql = "SELECT dossier
6139     FROM " . DB_PREFIXE . "instruction
6140     WHERE code_barres = '" . $code_barres . "'";
6141 softime 8989 $dossier = $this->f->db->getOne($sql);
6142 softime 7067 $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
6143     $this->f->isDatabaseError($dossier);
6144 softime 7996 $inst_dossier = $this->f->get_inst__om_dbform(array(
6145     "obj" => "dossier",
6146     "idx" => $dossier,
6147     ));
6148 softime 7067
6149     // En fonction du type de dossier, on récupère un demandeur différent dans les requêtes
6150     $groupe = $inst_dossier->get_type_affichage_formulaire();
6151     switch ($groupe) {
6152     case 'CTX IN':
6153     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='plaignant')";
6154     break;
6155     case 'CTX RE':
6156     $sql_demandeur = "(lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='requerant')";
6157     break;
6158     case 'ADS':
6159     case 'DPC':
6160 softime 10573 case 'CONSULTATION ENTRANTE':
6161 softime 7067 default:
6162     $sql_demandeur = "((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire') OR demandeur.type_demandeur='delegataire')";
6163     break;
6164     }
6165    
6166 mbroquet 3730 // Test si l'evenement est de type arrete et si un délégataire a été nommé
6167     $sql = "SELECT
6168     dossier.dossier_libelle,
6169     evenement.type,
6170 softime 3834 count(lien_dossier_demandeur) as nbdemandeur,
6171     CASE
6172     WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
6173     THEN CONCAT(phase.code, ' - ', division.libelle)
6174     ELSE
6175     phase.code
6176     END AS code_phase
6177 mbroquet 3730 FROM ".DB_PREFIXE."instruction
6178     LEFT JOIN ".DB_PREFIXE."dossier
6179     ON instruction.dossier = dossier.dossier
6180 softime 3834 LEFT JOIN ".DB_PREFIXE."division
6181     ON dossier.division = division.division
6182 mbroquet 3730 INNER JOIN ".DB_PREFIXE."evenement ON
6183 softime 3834 instruction.evenement=evenement.evenement
6184     LEFT JOIN ".DB_PREFIXE."phase
6185     ON evenement.phase = phase.phase
6186 mbroquet 3730 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
6187     instruction.dossier=lien_dossier_demandeur.dossier
6188     inner join ".DB_PREFIXE."demandeur on
6189     demandeur.demandeur=lien_dossier_demandeur.demandeur
6190     WHERE code_barres='".$code_barres."'
6191 softime 7067 AND " . $sql_demandeur . "
6192 softime 3834 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
6193 mbroquet 3730
6194 softime 8989 $res = $this->f->db->query($sql);
6195     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
6196     $this->f->isDatabaseError($res);
6197 mbroquet 3730 $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
6198    
6199    
6200     // Recuperation de l'adresse de destination
6201     $sqlAdresse = "SELECT
6202     CASE WHEN demandeur.qualite='particulier'
6203     THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
6204     ELSE TRIM(demandeur.personne_morale_denomination)
6205     END as ligne1,
6206     CASE WHEN demandeur.qualite='personne_morale'
6207     THEN TRIM(demandeur.personne_morale_raison_sociale)
6208     ELSE ''
6209     END as ligne1_1,
6210     CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
6211     THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
6212     ELSE ''
6213     END as ligne1_2,
6214     trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
6215     CASE demandeur.complement
6216     WHEN null THEN ''
6217     ELSE trim(demandeur.complement)
6218     END as ligne3,
6219     CASE demandeur.lieu_dit
6220     WHEN null THEN ''
6221     ELSE trim(demandeur.lieu_dit)
6222     END as ligne4,
6223     CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
6224     (CASE WHEN demandeur.bp IS NOT NULL
6225     THEN CONCAT_WS(' ', 'BP', demandeur.bp)
6226     ELSE ''
6227     END),
6228     (CASE WHEN demandeur.cedex IS NOT NULL
6229     THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
6230     ELSE ''
6231     END))
6232     as ligne5,
6233     code_barres as code_barres
6234     FROM ".DB_PREFIXE."instruction
6235     INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
6236     INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
6237     INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
6238     LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
6239     WHERE instruction.code_barres ='".$code_barres."'";
6240    
6241     // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
6242     if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
6243     $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
6244     } else {
6245 softime 7996 $sqlAdresse .= " AND demandeur.type_demandeur='petitionnaire' AND lien_dossier_demandeur.petitionnaire_principal IS TRUE";
6246 mbroquet 3730 }
6247    
6248 softime 8989 $resAdresse = $this->f->db->query($sqlAdresse);
6249 mbroquet 3730 $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
6250 softime 8989 $this->f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
6251     $this->f->isDatabaseError($resAdresse);
6252 mbroquet 3730
6253     // Création adresse destinataire sans ligne vide
6254     $adresse_destinataire = array();
6255     if (!empty($adresse_dest['ligne1'])) {
6256     $adresse_destinataire[] = $adresse_dest['ligne1'];
6257     }
6258     if (!empty($adresse_dest['ligne1_1'])) {
6259     $adresse_destinataire[] = $adresse_dest['ligne1_1'];
6260     }
6261     if (!empty($adresse_dest['ligne1_2'])) {
6262     $adresse_destinataire[] = $adresse_dest['ligne1_2'];
6263     }
6264     $adresse_destinataire[] = $adresse_dest['ligne2'];
6265     if (!empty($adresse_dest['ligne3'])) {
6266     $adresse_destinataire[] = $adresse_dest['ligne3'];
6267     }
6268     if (!empty($adresse_dest['ligne4'])) {
6269     $adresse_destinataire[] = $adresse_dest['ligne4'];
6270     }
6271     $adresse_destinataire[] = $adresse_dest['ligne5'];
6272    
6273     // Création du champ specifique
6274     $specifique_content = array();
6275     $specifique_content[] = $adresse_dest['ligne1'];
6276     $specifique_content[] = $adresse_dest['ligne1_1'];
6277     $specifique_content[] = $adresse_dest['ligne1_2'];
6278     $specifique_content[] = $testDemandeur['dossier_libelle'];
6279     $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
6280     unset($adresse_dest['code_barres']);
6281     // Ajout d'une page aux pdf
6282 softime 3834 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
6283 mbroquet 3730
6284     }
6285     $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
6286 softime 7685 $om_edition = $this->f->get_inst__om_edition();
6287 mbroquet 3730 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
6288     }
6289     }
6290    
6291     /**
6292     * VIEW - view_bordereau_envoi_maire.
6293     *
6294     * Formulaire demandant :
6295     * - le code-barres de l'événement d'instruction
6296     * - la date d'envoi du courrier pour signature par le maire
6297     *
6298     * Lors de la validation :
6299     * => met à jour cette date dans l'événement d'instruction
6300     * => crée un lien permettant de générer en PDF le bordereau
6301     *
6302     * @return void
6303     */
6304     function view_bordereau_envoi_maire() {
6305     // Vérification de l'accessibilité sur l'élément
6306     $this->checkAccessibility();
6307    
6308     // Récupération des valeur passées en POST ou GET
6309     $code_barres = "";
6310     if($this->f->get_submitted_post_value('code_barres') !== null) {
6311     $code_barres = $this->f->get_submitted_post_value('code_barres');
6312     } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
6313     $code_barres = $this->f->get_submitted_get_value('code_barres');
6314     }
6315     $date = "";
6316     if($this->f->get_submitted_post_value('date') !== null) {
6317     $date = $this->f->get_submitted_post_value('date');
6318     } elseif($this->f->get_submitted_get_value('date') !== null) {
6319     $date = $this->f->get_submitted_get_value('date');
6320     }
6321     $validation = 0;
6322     if($this->f->get_submitted_post_value('validation') !== null) {
6323     $validation = $this->f->get_submitted_post_value('validation');
6324     } elseif($this->f->get_submitted_get_value('validation') !== null) {
6325     $validation = $this->f->get_submitted_get_value('validation');
6326     }
6327    
6328     // Si le formulaire a été validé
6329     if ($this->f->get_submitted_post_value('validation') !== null) {
6330     // Tous les champs doivent obligatoirement être remplis
6331     if (!empty($date) && !empty($code_barres)) {
6332     $date_en = $this->dateDB($date);
6333     // Si date valide
6334     if ($date_en != "") {
6335     $id_instruction = $this->get_instruction_by_barcode($code_barres);
6336     // Si un événement d'instruction a été trouvé pour ce code-barres
6337     if ($id_instruction !== null) {
6338     $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
6339     // Si mise à jour réussie de la date d'envoi du courrier
6340     // pour signature par l'autorité compétente
6341     if($ret === true) {
6342     // Message de validation avec lien PDF
6343     $message_class = "valid";
6344     $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
6345     $message .= " : <br/><br/>";
6346     $message .= "<a class='om-prev-icon pdf-16'";
6347     $message .= " id=\"generer_bordereau_envoi_maire\"";
6348     $message .= " title=\""._("Bordereau")."\"";
6349 softime 7996 $message .= " href='".OM_ROUTE_FORM."&obj=instruction";
6350 mbroquet 3730 $message .= "&action=200";
6351     $message .= "&idx=".$id_instruction."'";
6352     $message .= " target='_blank'>";
6353     $message .= _("Bordereau d'envoi au maire");
6354     $message .= "</a><br/><br/>";
6355     $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
6356     $message .= _("Code du courrier")." : ".$code_barres."<br/>";
6357     $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
6358    
6359     } else {
6360     // Message d'erreur
6361     $message_class = "error";
6362     $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
6363     $code_barres);
6364     }
6365     }
6366     else {
6367     $message_class = "error";
6368     $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
6369     }
6370     }
6371     else {
6372     $message_class = "error";
6373     $message = _("La date est invalide.");
6374     }
6375     } else {
6376     $message_class = "error";
6377     $message = _("Tous les champs doivent etre remplis.");
6378     }
6379     }
6380    
6381     /**
6382     * Affichage des messages et du formulaire
6383     */
6384    
6385     // Affichage du message de validation ou d'erreur
6386     if (isset($message) && isset($message_class) && $message != "") {
6387     $this->f->displayMessage($message_class, $message);
6388     }
6389    
6390     // Ouverture du formulaire
6391     $datasubmit = $this->getDataSubmit();
6392     echo "\n<!-- ########## START DBFORM ########## -->\n";
6393     echo "<form";
6394     echo " id=\"bordereau_envoi_maire\"";
6395     echo " method=\"post\"";
6396     echo " name=\"f1\"";
6397     echo " action=\"";
6398     echo $datasubmit;
6399     echo "\"";
6400     echo ">\n";
6401    
6402     // Paramétrage des champs du formulaire
6403     $champs = array("code_barres","date");
6404    
6405     // Création d'un nouvel objet de type formulaire
6406 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
6407     "validation" => 0,
6408     "maj" => 0,
6409     "champs" => $champs,
6410     ));
6411 mbroquet 3730
6412     $template_required_label = '%s *';
6413     // Parametrage du champ code_barres
6414     $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
6415     $form->setType("code_barres", "text");
6416     $form->setVal("code_barres", $code_barres);
6417     $form->setTaille("code_barres", 20);
6418     $form->setMax("code_barres", 20);
6419     // Parametrage du champ date
6420     $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
6421     $form->setType("date", "date") ;
6422     if (empty($date)) {
6423     $date = date('d/m/Y');
6424     }
6425     $form->setVal("date", $date);
6426     $form->setTaille("date", 10);
6427     $form->setMax("date", 10);
6428    
6429     // Création du bloc regroupant les champs
6430     $form->setBloc('code_barres','D');
6431     $form->setBloc('date','F');
6432     // Affichage du formulaire
6433     $form->entete();
6434     $form->afficher($champs, 0, false, false);
6435     $form->enpied();
6436     // Affichage du bouton
6437     printf("\t<div class=\"formControls\">\n");
6438     //
6439     $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
6440     printf("\t</div>\n");
6441     // Fermeture du formulaire
6442     printf("\t</form>\n");
6443     }
6444    
6445     /**
6446     * VIEW - view_bordereau_envoi_maire.
6447     *
6448     * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
6449     *
6450     * @return [void]
6451     */
6452     function view_generate_bordereau_envoi_maire() {
6453     // Vérification de l'accessibilité sur l'élément
6454     $this->checkAccessibility();
6455     // Récupération de la collectivité du dossier d'instruction
6456     $collectivite_di = $this->get_dossier_instruction_om_collectivite();
6457     // Récupération de ses paramètres
6458     $collectivite = $this->f->getCollectivite($collectivite_di);
6459     // Génération du PDF
6460     $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
6461     // Affichage du PDF
6462     $this->expose_pdf_output(
6463     $result['pdf_output'],
6464     $result['filename']
6465     );
6466     }
6467    
6468     /**
6469 softime 6565 * Retourne l'événement d'instruction dont on donne le code-barres, avec un filtre
6470     * pour exclure les dossiers du groupe contentieux.
6471 mbroquet 3730 *
6472     * @param [string] $barcode numéro du code-barres
6473     * @return [mixed] ID de son instruction ou null si aucun code
6474     */
6475     function get_instruction_by_barcode($barcode) {
6476     // Begin
6477     $this->begin_treatment(__METHOD__);
6478     // Vérification de l'existence de l'événement d'instruction
6479 softime 6565 // pour le code-barres donné, en excluant les dossiers liés au groupe CTX
6480 mbroquet 3730 $sql = "SELECT instruction
6481 softime 6565 FROM ".DB_PREFIXE."instruction
6482     INNER JOIN ".DB_PREFIXE."dossier
6483     ON dossier.dossier=instruction.dossier
6484     INNER JOIN ".DB_PREFIXE."dossier_instruction_type
6485     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
6486     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6487     ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
6488     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
6489     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
6490     INNER JOIN ".DB_PREFIXE."groupe
6491     ON dossier_autorisation_type.groupe = groupe.groupe
6492     AND groupe.code != 'CTX'
6493     WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
6494 mbroquet 3730 $res = $this->f->db->getOne($sql);
6495     $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
6496     $this->f->isDatabaseError($res);
6497     // Retourne résultat
6498     return $this->end_treatment(__METHOD__, $res);
6499     }
6500    
6501     /**
6502     * Met à jour le champ date d'envoi signature
6503     * avec la date fournie et pour l'instruction donnée
6504     *
6505     * @param [string] $id ID de l'événement d'instruction
6506     * @param [string] $date date au format EN
6507     * @return [boolean] true si mise à jour avec succès
6508     */
6509     function update_date_envoi_signature($id, $date) {
6510     // Préparation du tableau
6511     $valF = array();
6512     $valF['date_envoi_signature'] = $date;
6513     // Begin
6514     $this->begin_treatment(__METHOD__);
6515     // Requête
6516 softime 8989 $res = $this->f->db->autoExecute(
6517 mbroquet 3730 DB_PREFIXE.$this->table,
6518     $valF,
6519     DB_AUTOQUERY_UPDATE,
6520     $this->getCle($id)
6521     );
6522     // S'il y a eu une erreur
6523     if (database::isError($res, true)) {
6524     $this->end_treatment(__METHOD__, false);
6525     }
6526     //
6527     return $this->end_treatment(__METHOD__, true);
6528     }
6529    
6530     /**
6531     * Méthode permettant de définir des valeurs à envoyer en base après
6532     * validation du formulaire d'ajout.
6533     * @param array $val tableau des valeurs retournées par le formulaire
6534     */
6535 softime 6929 function setValFAjout($val = array()) {
6536 mbroquet 3730 // Mise à jour du flag created_by_commune lors d'un changement de décision
6537     // par un utilisateur de commune sur un dossier instruit par la comcom
6538 softime 6565 if ($this->isInstrCanChangeDecision($this->valF["dossier"])) {
6539 mbroquet 3730 $this->valF['created_by_commune'] = true;
6540     }
6541 softime 8593
6542     //
6543     if ($this->evenement_has_an_edition($this->valF['evenement']) === false) {
6544     if (isset($this->valF['flag_edition_integrale']) === true) {
6545     unset($this->valF['flag_edition_integrale']);
6546     }
6547     if (isset($this->valF['signataire_arrete']) === true) {
6548     unset($this->valF['signataire_arrete']);
6549     }
6550     }
6551 mbroquet 3730 }
6552 nmeucci 3876
6553 fmichon 3892
6554 fmichon 4708 /**
6555     * Récupère l'instance d'un événement de workflow.
6556     *
6557     * @param mixed $evenement Identifiant de l'événement.
6558     *
6559     * @return object
6560     */
6561     function get_inst_evenement($evenement = null) {
6562     //
6563     return $this->get_inst_common("evenement", $evenement);
6564     }
6565 softime 3976
6566 fmichon 3892 /**
6567 softime 3976 * Logue l'action de l'instruction dans son DI.
6568 nmeucci 3933 *
6569 softime 3976 * @param string $id Clé primaire de l'instruction.
6570     * @param array $val Valeurs de l'instruction.
6571     *
6572     * @return bool Vrai si traitement effectué avec succès
6573 nmeucci 3876 */
6574 softime 3976 private function add_log_to_dossier($id, array $val) {
6575 nmeucci 3933 $maj = $this->getParameter("maj");
6576 nmeucci 3943 // Action = Trace par défaut
6577     $action = $this->get_backtrace();
6578     // Action = Identifant de l'action si contexte connu
6579     if (empty($maj) === false
6580     || (empty($maj) === true && $maj === 0)) {
6581     $action = $this->get_action_param($maj, 'identifier');
6582 nmeucci 3965 if ($action === 'modifier_suivi') {
6583     $action = "modifier (via l'action suivi des dates)";
6584     }
6585 nmeucci 4108 if ($action === 'notifier_commune'
6586     && isset($val['mails_destinataires']) === true) {
6587     $action = "notification de la commune (courriels : ";
6588     $action .= $val['mails_destinataires'].")";
6589     }
6590 nmeucci 3943 }
6591 nmeucci 3876 // Création du log
6592     $log = array(
6593     'date' => date('Y-m-d H:i:s'),
6594     'user' => $_SESSION['login'],
6595     'action' => $action,
6596     'values' => array(
6597     'date_evenement' => $this->dateDB($val['date_evenement']),
6598     'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
6599     'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
6600     'evenement' => $val['evenement'],
6601     'action' => $val['action'],
6602 nmeucci 3963 'instruction' => $id,
6603 nmeucci 3876 'etat' => $val['etat'],
6604     ),
6605     );
6606     // Ajout du log
6607 softime 3976 $di = $this->get_inst_dossier($val['dossier']);
6608 nmeucci 3876 $ret = $di->add_log_instructions($log);
6609     if ($ret === false) {
6610     $this->correct = false;
6611     $this->msg = '';
6612     $this->addToMessage($di->msg);
6613     }
6614     return $ret;
6615     }
6616 nmeucci 3943
6617 softime 3976
6618 nmeucci 3943 /**
6619 softime 3976 * Retourne le contexte de déboguage formaté en HTML.
6620 nmeucci 3943 *
6621 softime 3976 * @return string Une ligne par trace
6622 nmeucci 3943 */
6623     private function get_backtrace() {
6624     $trace = debug_backtrace();
6625 nmeucci 3957 $backtrace = '';
6626     $i = 1;
6627 nmeucci 3943 foreach ($trace as $key => $value) {
6628 nmeucci 3957 $func = $trace[$key]['function'];
6629     // On ne s'autolog pas
6630     if ($func === 'get_backtrace'
6631     || $func === 'add_log_to_dossier') {
6632     continue;
6633     }
6634     $backtrace .= $i.') ';
6635     // Si dans une classe
6636     if (isset($trace[$key]['class']) === true
6637     && empty($trace[$key]['class']) === false) {
6638 nmeucci 3963 $backtrace .= $trace[$key]['class'].'->'.$func;
6639 nmeucci 3957 }
6640     // Si procédural
6641     else {
6642     $file = $trace[$key]['file'];
6643 nmeucci 3963 $line = $trace[$key]['line'];
6644 softime 3976 $truncated_file = $this->f->get_relative_path($file);
6645 nmeucci 3963 if ($truncated_file !== false) {
6646     $file = $truncated_file;
6647     }
6648     $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
6649 nmeucci 3957 }
6650     $backtrace .= '<br/>';
6651     $i++;
6652 nmeucci 3943 }
6653 nmeucci 3957 return $backtrace;
6654 nmeucci 3943 }
6655 nmeucci 3963
6656 nmeucci 4108 /**
6657     * CONDITION - is_notifiable.
6658     *
6659     * Condition pour afficher l'action notifier_commune.
6660     *
6661     * @return boolean
6662     */
6663     public function is_notifiable() {
6664     // L'instruction doit être finalisée, ce qui revient à dire
6665     // définalisable sans bypass
6666     if ($this->is_unfinalizable_without_bypass() === false) {
6667     return false;
6668     }
6669     // La collectivité de l'utilisateur doit être de niveau multi
6670     if ($this->f->has_collectivite_multi() === false) {
6671     return false;
6672     }
6673     // Le paramètre multi de l'objet du courriel doit exister
6674     if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
6675     return false;
6676     }
6677     // Le paramètre multi du modèle du courriel doit exister
6678     if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
6679     return false;
6680     }
6681     // A ce stade toutes les conditions sont satisfaites
6682     return true;
6683     }
6684 nmeucci 3963
6685 nmeucci 4108 /**
6686     * TREATMENT - notifier_commune.
6687     *
6688     * Notifie aux communes et par courriel la finalisation d'une instruction.
6689     *
6690     * @return boolean
6691     */
6692     public function notifier_commune() {
6693     // Cette méthode permet d'exécuter une routine en début des méthodes
6694     // dites de TREATMENT.
6695     $this->begin_treatment(__METHOD__);
6696     // Définition des paramètres
6697     $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
6698     $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
6699     $p_courriel = 'param_courriel_de_notification_commune';
6700     // Définition des variables de substitution
6701     $id_di = $this->getVal('dossier');
6702     $id_inst = $this->getVal($this->clePrimaire);
6703     // Instanciation du DI
6704     $di = $this->get_inst_dossier($id_di);
6705     // Récupération du paramétrage de la collectivité du dossier
6706     $collectivite_di = $di->getVal('om_collectivite');
6707     $params_mono = $this->f->getCollectivite($collectivite_di);
6708     // Récupération du paramétrage de la collectivité multi
6709     $collectivite_multi = $this->f->get_idx_collectivite_multi();
6710     $params_multi = $this->f->getCollectivite($collectivite_multi);
6711     // Vérification de l'objet (obligatoirement multi)
6712     $objet = null;
6713     if (isset($params_multi[$p_objet]) === true
6714     && $params_multi[$p_objet] !== '') {
6715     $objet = $params_multi[$p_objet];
6716     }
6717     // Vérification du modèle mono en priorité
6718     $modele = null;
6719     if (isset($params_mono[$p_modele]) === true
6720     && $params_mono[$p_modele] !== '') {
6721     $modele = $params_mono[$p_modele];
6722    
6723     }
6724     // Sinon vérification du modèle multi
6725     if ($modele === null
6726     && isset($params_multi[$p_modele]) === true
6727     && $params_multi[$p_modele] !== '') {
6728     $modele = $params_multi[$p_modele];
6729     }
6730     // Vérification des adresses de courriel mono
6731     $courriels_valides = array();
6732     $courriels_invalides = array();
6733     if (isset($params_mono[$p_courriel]) === true
6734     && $params_mono[$p_courriel] !== '') {
6735     // Un mail par ligne
6736     $adresses = explode("\n", $params_mono[$p_courriel]);
6737     // Vérification de la validité de chaque mail avec preg_match
6738     foreach ($adresses as $adresse) {
6739     $adresse = trim($adresse);
6740     if ($this->f->checkValidEmailAddress($adresse) === 1) {
6741     $courriels_valides[] = $adresse;
6742     } else {
6743     $courriels_invalides[] = $adresse;
6744     }
6745     }
6746     }
6747     // Vérification du paramétrage global :
6748     // on stoppe le traitement si au moins un paramètre est incorrect
6749     if ($objet === null
6750     || $modele === null
6751     || count($courriels_valides) === 0
6752     || count($courriels_invalides) > 0) {
6753     // On construit le message d'erreur adéquat
6754     $this->addToMessage(_('Erreur de paramétrage :'));
6755     if ($objet === null) {
6756     $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
6757     }
6758     if ($modele === null) {
6759     $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
6760     }
6761     if (count($courriels_valides) === 0) {
6762     $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
6763     }
6764     if (count($courriels_invalides) > 0) {
6765     $courriels_invalides = implode(', ', $courriels_invalides);
6766     $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
6767     }
6768     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6769     return $this->end_treatment(__METHOD__, false);
6770     }
6771     // Remplacement des variables de substitution
6772     $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
6773     $modele = $this->formater_modele($modele, $id_di, $id_inst);
6774     // Exécution du traitement d'envoi du/des mail(s)
6775     $fails = array();
6776     foreach ($courriels_valides as $email) {
6777     if ($this->f->sendMail(
6778     iconv("UTF-8", "CP1252", $objet),
6779     iconv("UTF-8", "CP1252", $modele),
6780     iconv("UTF-8", "CP1252", $email)) === false) {
6781     $fails[] = $email;
6782     }
6783     }
6784     // Si échec message d'erreur et arrêt du traitement
6785     if (count($fails) > 0) {
6786     $fails = implode(', ', $fails);
6787     $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
6788     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6789     return $this->end_treatment(__METHOD__, false);
6790     }
6791     // Ajout du log
6792     $this->setValFFromVal();
6793     $val_inst = $this->valF;
6794     $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
6795     if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
6796     $this->addToMessage(_("Erreur lors de la notification."));
6797     $this->addToMessage(_("Veuillez contacter votre administrateur."));
6798     return $this->end_treatment(__METHOD__, false);
6799     }
6800     // Message de validation
6801     $this->addToMessage(_('La commune a été notifiée.'));
6802     return $this->end_treatment(__METHOD__, true);
6803     }
6804    
6805     /**
6806     * Formatte le corps du courriel notifié aux communes
6807     *
6808     * @param string $modele template du modèle du courriel
6809     * @param string $id_di clé primaire du DI
6810     * @param string $id_inst clé primaire de l'instruction
6811     * @return string corps du mail au format HTML
6812     */
6813     public function formater_modele($modele, $id_di, $id_inst) {
6814     // Création du lien d'accès direct à l'instruction
6815 softime 7996 $url_inst = PATH_BASE_URL.'app/index.php?module=form&direct_link=true&obj=dossier_instruction&action=3'.
6816 nmeucci 4108 '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
6817     $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
6818     // Remplacement des champs de fusion
6819     $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
6820     $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
6821     $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
6822     // Encodage HTML des sauts de ligne
6823     $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
6824     //
6825     return $modele;
6826     }
6827 softime 5169
6828    
6829     /**
6830     * Récupère l'instance de l'instructeur
6831     *
6832     * @param integer $instructeur Identifiant de l'instructeur.
6833     *
6834     * @return object
6835     */
6836     protected function get_inst_instructeur($instructeur) {
6837     //
6838     return $this->get_inst_common("instructeur", $instructeur);
6839     }
6840    
6841    
6842     /**
6843     * Récupère l'instance de l'utilisateur
6844     *
6845     * @param integer $om_utilisateur Identifiant de l'utilisateur.
6846     *
6847     * @return object
6848     */
6849     protected function get_inst_om_utilisateur($om_utilisateur) {
6850     //
6851     return $this->get_inst_common("om_utilisateur", $om_utilisateur);
6852     }
6853    
6854    
6855 softime 6565 /**
6856 softime 5295 * Récupère l'instance de la division.
6857     *
6858     * @param integer $division Identifiant de la division.
6859     *
6860     * @return object
6861     */
6862     protected function get_inst_division($division) {
6863     //
6864     return $this->get_inst_common("division", $division);
6865     }
6866    
6867    
6868     /**
6869     * Récupère l'instance de la direction.
6870     *
6871     * @param integer $direction Identifiant de la direction.
6872     *
6873     * @return object
6874     */
6875     protected function get_inst_direction($direction) {
6876     //
6877     return $this->get_inst_common("direction", $direction);
6878     }
6879    
6880    
6881     /**
6882     * Récupère la collectivité d'un instructeur en passant par sa division puis
6883     * par sa direction.
6884     *
6885     * @param integer $instructeur Identifiant de l'instructeur.
6886     *
6887     * @return integer
6888     */
6889     protected function get_instructeur_om_collectivite($instructeur) {
6890     // Chemin vers la collectivité d'un instructeur
6891     $inst_instr = $this->get_inst_instructeur($instructeur);
6892     $inst_division = $this->get_inst_division($inst_instr->getVal('division'));
6893     $inst_direction = $this->get_inst_direction($inst_division->getVal('direction'));
6894    
6895     // Collectivité
6896     $om_collectivite = $inst_direction->getVal('om_collectivite');
6897    
6898     //
6899     return $om_collectivite;
6900     }
6901    
6902 softime 6565 /*
6903     * CONDITION - can_user_access_dossier_contexte_ajout
6904     *
6905     * Vérifie que l'utilisateur a bien accès au dossier d'instruction passé dans le
6906     * formulaire d'ajout.
6907     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6908     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6909     *
6910     */
6911     function can_user_access_dossier_contexte_ajout() {
6912 softime 5295
6913 softime 6565 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
6914     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
6915     //
6916     if ($id_dossier !== "") {
6917 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6918     "obj" => "dossier_instruction",
6919     "idx" => $id_dossier,
6920     ));
6921 softime 6565 //
6922     return $dossier->can_user_access_dossier();
6923     }
6924     return false;
6925     }
6926    
6927     /*
6928     * CONDITION - can_user_access_dossier
6929     *
6930     * Vérifie que l'utilisateur a bien accès au dossier lié à l'instruction instanciée.
6931     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
6932     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
6933     *
6934     */
6935     function can_user_access_dossier_contexte_modification() {
6936    
6937     $id_dossier = $this->getVal('dossier');
6938     //
6939     if ($id_dossier !== "" && $id_dossier !== null) {
6940 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
6941     "obj" => "dossier_instruction",
6942     "idx" => $id_dossier,
6943     ));
6944 softime 6565 //
6945     return $dossier->can_user_access_dossier();
6946     }
6947     return false;
6948     }
6949    
6950 softime 8593 /**
6951 softime 10713 * TREATMENT - envoyer_a_signature_sans_relecture
6952     *
6953     * Permet d'envoyer le document de l'instruction au parapheur pour signature sans relecture
6954     *
6955     * @return boolean true si l'envoi a été effectué avec succès false sinon
6956     */
6957     function envoyer_a_signature_sans_relecture() {
6958     return $this->envoyer_a_signature();
6959     }
6960    
6961     /**
6962     * TREATMENT - envoyer_a_signature_avec_relecture
6963     *
6964     * Permet d'envoyer le document de l'instruction au parapheur pour signature avec relecture
6965     *
6966     * @return boolean true si l'envoi a été effectué avec succès false sinon
6967     */
6968     function envoyer_a_signature_avec_relecture() {
6969     return $this->envoyer_a_signature(true);
6970     }
6971    
6972     /**
6973 softime 10573 * TREATMENT - envoyer_a_signature
6974     *
6975     * Permet d'envoyer le document de l'instruction au parapheur pour signature
6976 softime 10713 *
6977     * @param boolean $is_forced_view_files Indique si il y a une relecture (true) ou non (false)
6978 softime 10573 *
6979     * @return boolean true si l'envoi a été effectué avec succès false sinon
6980     */
6981 softime 10713 function envoyer_a_signature($is_forced_view_files = false) {
6982 softime 10573 $this->begin_treatment(__METHOD__);
6983     $this->correct = true;
6984    
6985     // Instanciation de l'objet signataire_arrete
6986     $inst_signataire_arrete = $this->f->get_inst__om_dbform(array(
6987     'obj' => 'signataire_arrete',
6988     'idx' => $this->getVal('signataire_arrete'),
6989     ));
6990    
6991     // Instanciation de l'objet dossier
6992     $inst_dossier = $this->f->get_inst__om_dbform(array(
6993     'obj' => 'dossier',
6994     'idx' => $this->getVal('dossier'),
6995     ));
6996    
6997     // Récupération du document à signer
6998     $file = $this->f->storage->get($this->getVal('om_fichier_instruction'));
6999     if ($file === OP_FAILURE) {
7000     $this->correct = false;
7001     $this->addToMessage(__("Une erreur est survenue lors de la récupération du contenu du document de l'instruction."));
7002     // Termine le traitement
7003     return $this->end_treatment(__METHOD__, false);
7004     }
7005    
7006     // Initialisation des paramètre à passer pour l'envoi en signature
7007     $datas = array(
7008     "om_utilisateur_email" => $this->f->om_utilisateur['email'],
7009     "om_utilisateur_nom" => $this->f->om_utilisateur['nom'],
7010     "mimetype" => $file['metadata']['mimetype'],
7011     "filename" => $file['metadata']['filename'],
7012     "signataire_arrete_email" => $inst_signataire_arrete->getVal('email'),
7013     "signataire_arrete_nom" => $inst_signataire_arrete->getVal('nom'),
7014     "signataire_arrete_prenom" => $inst_signataire_arrete->getVal('prenom'),
7015     "date_limite_instruction" => $inst_dossier->getVal('incomplet_notifie') === 't' ? $inst_dossier->getVal('date_limite_incompletude') : $inst_dossier->getVal('date_limite'),
7016     "dossier" => $this->getVal('dossier'),
7017 softime 10713 "is_forced_view_files" => $is_forced_view_files,
7018     'commentaire_signature' => $is_forced_view_files === true ? __('relecture demandee.') : null
7019 softime 10573 );
7020    
7021     //Instanciation de la classe electronicsignature
7022     $inst_es = $this->get_electronicsignature_instance();
7023     if ($inst_es === false) {
7024     $this->correct = false;
7025     return $this->end_treatment(__METHOD__, false);
7026     }
7027    
7028     // Appel de la méthode de l'abstracteur send_for_signature()
7029     // Cette méthode doit retourner un tableau de valeur
7030     try {
7031     $result = $inst_es->send_for_signature($datas, $file['file_content']);
7032     } catch (electronicsignature_exception $e) {
7033     $this->handle_electronicsignature_exception($e);
7034     return $this->end_treatment(__METHOD__, false);
7035     }
7036    
7037     // Après avoir reçu le résultat du parapheur, il faut mettre à jour les champs
7038     $valF = array();
7039    
7040     // Pour appeler la fonction modifier il faut traiter tous les champs de l'objet
7041     foreach($this->champs as $identifiant => $champ) {
7042     $valF[$champ] = $this->val[$identifiant];
7043     }
7044     // On fait ensuite nos modifications spécifiques
7045     $valF['id_parapheur_signature'] = $result['id_parapheur_signature'];
7046     $valF['statut_signature'] = $result['statut'];
7047     $valF['commentaire_signature'] = isset($result['commentaire_signature']) == true ? $result['commentaire_signature'] : null;
7048     $valF['date_envoi_signature'] = date("Y-m-d", strtotime($result['date_envoi_signature']));
7049     $valF['historique_signature'] = $this->get_updated_historique_signature($result);
7050    
7051     $ret = $this->modifier($valF);
7052    
7053     if ($ret === false) {
7054     $this->correct = false;
7055     $this->addToMessage(__("Une erreur est survenue lors de la mise à jour des champs."));
7056     // Termine le traitement
7057     return $this->end_treatment(__METHOD__, false);
7058     }
7059    
7060     // Message
7061     $this->addToMessage(__("Le document a été envoyé pour signature dans le parapheur."));
7062     if (array_key_exists('signature_page_url', $result) === true) {
7063     $link_text = $result['signature_page_url'];
7064     if (strlen($link_text) > 300) {
7065     $link_text = substr($link_text, 0, 300).'…';
7066     }
7067     $this->addToMessage(sprintf(
7068     __("Lien vers la page de signature : %s"),
7069     '<a href="'.$result['signature_page_url'].'" title="'.__("Signer le document").'" target="_blank">'.$link_text.'</a>'
7070     ));
7071     }
7072    
7073     // Tout s'est bien passé, on termine le traitement
7074     return $this->end_treatment(__METHOD__, true);
7075     }
7076    
7077     /**
7078     * Permet de récupérer la traduction de la valeur de statut_signature
7079     *
7080     * @return string la valeur de statut_signature traduite | false
7081     */
7082     function get_trad_for_statut($value_to_trad){
7083     $statut_signature_tab = array(
7084     'waiting' => __('en préparation'),
7085     'in_progress' => __('en cours de signature'),
7086     'canceled' => __('signature annulée'),
7087     'expired' => __('délai de signature expirée'),
7088     'finished' => __('signé')
7089     );
7090     if (array_key_exists($value_to_trad, $statut_signature_tab) === true) {
7091     return $statut_signature_tab[$value_to_trad];
7092     }
7093    
7094     return false;
7095     }
7096    
7097     /**
7098     * Permet de mettre à jour le tableau json sotcké dans le champ historique_signature
7099     *
7100     * @return string (json) la valeur de historique_signature mis à jour | false
7101     */
7102     function get_updated_historique_signature($historique_signature_values) {
7103    
7104     $historique_signature_value_tab = $this->get_historique_signature_decoded();
7105    
7106     if ($historique_signature_value_tab === false) {
7107     $this->addToLog(__METHOD__."(): erreur historique signature", DEBUG_MODE);
7108     return false;
7109     }
7110    
7111     $last_val_historique_signature = array();
7112    
7113     // Si la tableau récupéré n'est pas vide alors
7114     // on récupère la dernière ligne du tableau
7115     if (empty($historique_signature_value_tab) === false) {
7116     $last_val_historique_signature = end($historique_signature_value_tab);
7117     }
7118    
7119     $format_date = '';
7120     $format_date_hour = '';
7121     $date_converted=array();
7122    
7123     $date_to_convert = array(
7124     'date_envoi_signature' => $historique_signature_values['date_envoi_signature'],
7125     'date_limite_instruction' => $historique_signature_values['date_limite_instruction'],
7126     'date_retour_signature' => $historique_signature_values['date_retour_signature']
7127     );
7128    
7129     // Conversion des dates en fonction de leur format
7130     foreach ($date_to_convert as $key => $value) {
7131     $date_converted[$key] = null;
7132     if ($value != null) {
7133     $format_date = 'd/m/Y';
7134     $format_date_hour = 'd/m/Y H:i:s';
7135     $date_converted[$key] = empty(date_parse($value)['hour']) === false ? date($format_date_hour, strtotime($value)) : date($format_date, strtotime($value));
7136     }
7137     }
7138    
7139     // Ce tableau permet de lister les colonnes de historique_signature et de les rendre traduisibles.
7140     // Il faut en effet mettre les gettext avec l'intitulé explicite au moins
7141     // une fois afin qu'il puisse être reconnu par le logiciel de traduction.
7142     $tab_for_columns_trad = array(
7143     __('entry_date'),
7144     __('id_parapheur_signature'),
7145     __('emetteur'),
7146     __('signataire'),
7147     __('date_envoi'),
7148     __('date_limite'),
7149     __('date_retour'),
7150     __('statut_signature'),
7151     __('commentaire_signature')
7152     );
7153    
7154     array_push($historique_signature_value_tab, array(
7155     'entry_date' => date('d/m/Y H:i:s'),
7156     'id_parapheur_signature' => $historique_signature_values['id_parapheur_signature'] == null ? (isset($last_val_historique_signature['id_parapheur_signature']) === true ? $last_val_historique_signature['id_parapheur_signature'] : null) : $historique_signature_values['id_parapheur_signature'],
7157     'emetteur' => $historique_signature_values['om_utilisateur_email'] == null ? (isset($last_val_historique_signature['emetteur']) === true ? $last_val_historique_signature['emetteur'] : null) : $historique_signature_values['om_utilisateur_email'],
7158     'signataire' => $historique_signature_values['signataire_arrete_email'] == null ? (isset($last_val_historique_signature['signataire']) === true ? $last_val_historique_signature['signataire'] : null) : $historique_signature_values['signataire_arrete_email'],
7159     'date_envoi' => $historique_signature_values['date_envoi_signature'] == null ? (isset($last_val_historique_signature['date_envoi']) === true ? $last_val_historique_signature['date_envoi'] : null) : $date_converted['date_envoi_signature'],
7160     'date_limite' => $historique_signature_values['date_limite_instruction'] == null ? (isset($last_val_historique_signature['date_limite']) === true ? $last_val_historique_signature['date_limite'] : null) : $date_converted['date_limite_instruction'],
7161     'date_retour' => $historique_signature_values['date_retour_signature'] == null ? (isset($last_val_historique_signature['date_retour']) === true ? $last_val_historique_signature['date_retour'] : null) : $date_converted['date_retour_signature'],
7162     'statut_signature' => $historique_signature_values['statut'] == null ? (isset($last_val_historique_signature['statut_signature']) === true ? $last_val_historique_signature['statut_signature'] : null) : $this->get_trad_for_statut($historique_signature_values['statut']),
7163     'commentaire_signature' => isset($historique_signature_values['commentaire_signature']) === false || $historique_signature_values['commentaire_signature'] == null ? null : $historique_signature_values['commentaire_signature'],
7164     ));
7165    
7166     return json_encode($historique_signature_value_tab, JSON_HEX_APOS);
7167     }
7168    
7169    
7170     /**
7171     * Récupère le contenu du champ historique_signature et le converti en tableau
7172     *
7173     * @return array sinon false en cas d'erreur
7174     */
7175     protected function get_historique_signature_decoded() {
7176     $val = $this->getVal('historique_signature');
7177     if ($val === '') {
7178     $val = json_encode(array());
7179     }
7180     if($this->isJson($val) === false) {
7181     return false;
7182     }
7183     return json_decode($val, true);
7184     }
7185    
7186    
7187     /**
7188     * Traitement des erreurs retournées par l'abstracteur electronicsignature.
7189     *
7190     * @param electronicsignature_exception $exception Exception retournée par l'abstracteur.
7191     *
7192     * @return void
7193     */
7194     public function handle_electronicsignature_exception(electronicsignature_exception $exception) {
7195     $this->f->displayMessage('error', $exception->getMessage());
7196     }
7197    
7198    
7199     /**
7200     * Retourne une instance du connecteur electronicsignature, et la créer si elle n'existe pas.
7201     *
7202     * @param boolean $with_handle_error Flag pour afficher ou non le message d'erreur à l'utilisateur.
7203     * @return electronicsignature Instance de l'abstracteur.
7204     */
7205     public function get_electronicsignature_instance($with_handle_error = true) {
7206     if(isset($this->electronicsignature_instance)) {
7207     return $this->electronicsignature_instance;
7208     }
7209     // Instanciation du connecteur electronicsignature
7210     try {
7211     require_once "electronicsignature.class.php";
7212     $collectivites = array("collectivite_idx" => $this->get_dossier_instruction_om_collectivite(), "collectivite_multi_idx" => $this->f->get_idx_collectivite_multi());
7213     $this->electronicsignature_instance = new electronicsignature($collectivites);
7214     } catch (electronicsignature_exception $e) {
7215     if ($with_handle_error === true) {
7216     $this->handle_electronicsignature_exception($e);
7217     }
7218     return false;
7219     }
7220     return $this->electronicsignature_instance;
7221     }
7222    
7223     /**
7224 softime 8593 * Retourne le lien de retour (VIEW formulaire et VIEW sousformulaire).
7225     *
7226     * @param string $view Appel dans le contexte de la vue 'formulaire' ou de
7227     * la vue 'sousformulaire'.
7228     *
7229     * @return string
7230     */
7231     function get_back_link($view = "formulaire") {
7232     //
7233     $href = parent::get_back_link($view);
7234     //
7235     $crud = $this->get_action_crud();
7236 mbroquet 3730
7237 softime 8593 // Redirection vers le formulaire de modification à la validation du
7238     // formulaire d'ajout si l'événement associé possède une lettre type
7239     if (($crud === 'create'
7240     || ($crud === null
7241     && $this->getParameter('maj') == 0))
7242     && $this->correct == true
7243     && $this->evenement_has_an_edition($this->valF['evenement']) === true) {
7244 softime 7996
7245 softime 8593 // On instancie l'instruction
7246     $inst_instruction = $this->f->get_inst__om_dbform(array(
7247     "obj" => "instruction",
7248     "idx" => $this->valF[$this->clePrimaire],
7249     ));
7250    
7251     // Si l'instruction n'est pas finalisée automatiquement
7252     if ($inst_instruction->getVal('om_final_instruction') !== 't') {
7253     $href = str_replace("&action=3", "&action=1", $href);
7254     //
7255     if (strpos($href, "&retour=tab") !== false) {
7256     $href = str_replace("&retour=tab", "&retour= form", $href);
7257     } else {
7258     $href .= "&retour=form";
7259     }
7260     }
7261     }
7262    
7263     //
7264     return $href;
7265     }
7266    
7267 softime 10573 public function view_json_data() {
7268     $this->checkAccessibility();
7269     $this->f->disableLog();
7270     $view = $this->get_json_data();
7271     printf(json_encode($view));
7272     }
7273    
7274     public function get_json_data() {
7275     $val = array_combine($this->champs, $this->val);
7276     foreach ($val as $key => $value) {
7277     $val[$key] = strip_tags($value);
7278     }
7279     $val['tacite'] = 'f';
7280     $inst_ad = $this->f->get_inst__om_dbform(array(
7281     "obj" => "avis_decision",
7282     "idx" => $val['avis_decision'],
7283     ));
7284     if (preg_match('/[tT]acite/', $inst_ad->getVal('libelle')) === 1) {
7285     $val['tacite'] = 't';
7286     }
7287     return $val;
7288     }
7289    
7290     public function get_related_instructions($instruction = null) {
7291     $result = array();
7292     $evenements = array();
7293     if ($instruction === null) {
7294     $instruction = $this->getVal($this->clePrimaire);
7295     $evenement = $this->getVal('evenement');
7296     $dossier = $this->getVal('dossier');
7297     } else {
7298     $inst = $this->f->get_inst__om_dbform(array(
7299     "obj" => "instruction",
7300     "idx" => $instruction,
7301     ));
7302     $evenement = $inst->getVal('evenement');
7303     $dossier = $inst->getVal('dossier');
7304     }
7305     //
7306     $query = sprintf('
7307     SELECT evenement
7308     FROM %1$sevenement
7309     WHERE evenement_retour_ar = %2$s
7310     OR evenement_retour_signature = %2$s
7311     ',
7312     DB_PREFIXE,
7313     $evenement
7314     );
7315     $res = $this->f->get_one_result_from_db_query($query, true);
7316     if ($res['code'] === 'KO') {
7317     return false;
7318     }
7319     $ev_parent = $res['result'];
7320     //
7321     $query = sprintf('
7322     SELECT MAX(instruction.instruction) as instruction
7323     FROM %1$sinstruction
7324     WHERE dossier = \'%3$s\'
7325     AND evenement = %2$s
7326     ',
7327     DB_PREFIXE,
7328     $ev_parent,
7329     $dossier
7330     );
7331     $res = $this->f->get_one_result_from_db_query($query, true);
7332     if ($res['code'] === 'KO') {
7333     return false;
7334     }
7335     $result[] = $res['result'];
7336     //
7337     $query = sprintf('
7338     SELECT evenement_retour_ar
7339     FROM %1$sevenement
7340     WHERE evenement = %2$s
7341     AND evenement_retour_ar != %3$s
7342     ',
7343     DB_PREFIXE,
7344     $ev_parent,
7345     $evenement
7346     );
7347     $res = $this->f->get_one_result_from_db_query($query, true);
7348     if ($res['code'] === 'KO') {
7349     return false;
7350     }
7351     $evenements[] = $res['result'];
7352     //
7353     $query = sprintf('
7354     SELECT evenement_retour_signature
7355     FROM %1$sevenement
7356     WHERE evenement = %2$s
7357     AND evenement_retour_signature != %3$s
7358     ',
7359     DB_PREFIXE,
7360     $ev_parent,
7361     $evenement
7362     );
7363     $res = $this->f->get_one_result_from_db_query($query, true);
7364     if ($res['code'] === 'KO') {
7365     return false;
7366     }
7367     $evenements[] = $res['result'];
7368     foreach ($evenements as $value) {
7369     if ($value !== null) {
7370     $query = sprintf('
7371     SELECT MAX(instruction.instruction) as instruction
7372     FROM %1$sinstruction
7373     WHERE dossier = \'%3$s\'
7374     AND evenement = %2$s
7375     ',
7376     DB_PREFIXE,
7377     $value,
7378     $dossier
7379     );
7380     $res = $this->f->get_one_result_from_db_query($query, true);
7381     if ($res['code'] === 'KO') {
7382     return false;
7383     }
7384     $result[] = $res['result'];
7385     }
7386     }
7387     return $result;
7388     }
7389    
7390     protected function getDocumentType($champ = null) {
7391     $evenementId = $this->getVal('evenement');
7392     if (! empty($evenementId)) {
7393     $evenement = $this->f->findObjectById('evenement', $evenementId);
7394     if (! empty($evenement)) {
7395     return __("Instruction").':'.$evenement->getVal('libelle');
7396     }
7397     }
7398     return parent::getDocumentType();
7399     }
7400    
7401 softime 8593 }// fin classe

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26