/[openfoncier]/branches/lien-openaria/obj/instruction.class.php
ViewVC logotype

Contents of /branches/lien-openaria/obj/instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4369 - (show annotations)
Wed Jun 1 05:51:19 2016 UTC (8 years, 8 months ago) by fmichon
File size: 221425 byte(s)
* Rebase

1 <?php
2 /**
3 * specific :
4 * - cle secondaire
5 * destruction autorisée que pour le dernier evenement
6 * [delete the last event ]
7 * - variable globale [global variables]
8 * var $retourformulaire;
9 * var $idxformulaire;
10 * - modification des données dans dossier trigger avant
11 * [modify dossier data with trigger function]
12 * - function mois_date : pour ajouter des mois a une date
13 * [add months (delay) and calculation final date]
14 * - voir script_lang.js : bible ...
15 *
16 * @package openfoncier
17 * @version SVN : $Id: instruction.class.php 6178 2016-03-15 10:56:43Z nmeucci $
18 */
19
20 //
21 require_once "../gen/obj/instruction.class.php";
22
23 //
24 class instruction extends instruction_gen {
25
26 // Champs contenant les UID des fichiers
27 var $abstract_type = array(
28 "om_fichier_instruction" => "file",
29 );
30
31 var $retourformulaire; // specific
32 var $idxformulaire; // specific
33 var $valEvenement;
34 var $restriction_valid = null;
35 // Tableau contenant une partie des métadonnées arrêtés
36 var $metadonneesArrete;
37
38 /**
39 * Instance de la classe dossier
40 *
41 * @var mixed
42 */
43 var $inst_dossier = null;
44
45 var $metadata = array(
46 "om_fichier_instruction" => array(
47 "dossier" => "getDossier",
48 "dossier_version" => "getDossierVersion",
49 "numDemandeAutor" => "getNumDemandeAutor",
50 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
51 "typeInstruction" => "getTypeInstruction",
52 "statutAutorisation" => "getStatutAutorisation",
53 "typeAutorisation" => "getTypeAutorisation",
54 "dateEvenementDocument" => "getDateEvenementDocument",
55 "groupeInstruction" => 'getGroupeInstruction',
56 "title" => 'getTitle',
57 ),
58 "arrete" => array(
59 "numArrete" => "getNumArrete",
60 "ReglementaireArrete" => "getReglementaireArrete",
61 "NotificationArrete" => "getNotificationArrete",
62 "dateNotificationArrete" => "getDateNotificationArrete",
63 "controleLegalite" => "getControleLegalite",
64 "dateSignature" => "getDateSignature",
65 "nomSignataire" => "getNomSignataire",
66 "qualiteSignataire" => "getQualiteSignataire",
67 "ap_numRue" => "getAp_numRue",
68 "ap_nomDeLaVoie" => "getAp_nomDeLaVoie",
69 "ap_codePostal" => "getAp_codePostal",
70 "ap_ville" => "getAp_ville",
71 "activite" => "getActivite",
72 "dateControleLegalite" => "getDateControleLegalite",
73 ),
74 );
75 /** @var boolean Les nouvelles actions sont activées sur cet objet */
76 var $activate_class_action;
77
78 function __construct($id, &$db, $debug) {
79 //On active les nouvelles actions
80 $this->activate_class_action = true;
81 $this->constructeur($id, $db, $debug);
82 }
83
84 // {{{ Gestion de la confidentialité des données spécifiques
85
86 /**
87 * Définition des actions disponibles sur la classe.
88 *
89 * @return void
90 */
91 function init_class_actions() {
92
93 parent::init_class_actions();
94
95 // ACTION - 000 - ajouter
96 // Modifie la condition d'affichage du bouton ajouter
97 $this->class_actions[0]["condition"] = "is_addable_editable_and_deletable";
98
99 // ACTION - 001 - modifier
100 // Modifie la condition et le libellé du bouton modifier
101 $this->class_actions[1]["condition"] = array("is_editable", "is_finalizable_without_bypass");
102 $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
103
104 // ACTION - 002 - supprimer
105 // Modifie la condition et le libellé du bouton supprimer
106 $this->class_actions[2]["condition"] = array("is_deletable", "is_finalizable_without_bypass");
107 $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
108
109 // ACTION - 100 - finaliser
110 // Finalise l'enregistrement
111 $this->class_actions[100] = array(
112 "identifier" => "finaliser",
113 "portlet" => array(
114 "type" => "action-direct",
115 "libelle" => _("Finaliser le document"),
116 "order" => 110,
117 "class" => "finalise",
118 ),
119 "view" => "formulaire",
120 "method" => "finalize",
121 "button" => "finaliser",
122 "permission_suffix" => "finaliser",
123 "condition" => array("is_finalizable", "is_finalizable_without_bypass", "has_an_edition"),
124 );
125
126 // ACTION - 110 - definaliser
127 // Finalise l'enregistrement
128 $this->class_actions[110] = array(
129 "identifier" => "definaliser",
130 "portlet" => array(
131 "type" => "action-direct",
132 "libelle" => _("Reprendre la redaction du document"),
133 "order" => 110,
134 "class" => "definalise",
135 ),
136 "view" => "formulaire",
137 "method" => "unfinalize",
138 "button" => "definaliser",
139 "permission_suffix" => "definaliser",
140 "condition" => array("is_unfinalizable", "is_unfinalizable_without_bypass"),
141 );
142
143 // ACTION - 120 - edition
144 // Affiche l'édition
145 $this->class_actions[120] = array(
146 "identifier" => "edition",
147 "portlet" => array(
148 "type" => "action-blank",
149 "libelle" => _("Edition"),
150 "order" => 100,
151 "class" => "pdf-16",
152 ),
153 "view" => "view_edition",
154 "condition" => "has_an_edition",
155 "permission_suffix" => "om_fichier_instruction_telecharger",
156 );
157
158 // ACTION - 125 - modifier_suivi
159 // Suivi des dates
160 $this->class_actions[125] = array(
161 "identifier" => "modifier_suivi",
162 "portlet" => array(
163 "type" => "action-self",
164 "libelle" => _("Suivi des dates"),
165 "order" => 125,
166 "class" => "suivi-dates-16",
167 ),
168 "crud" => "update",
169 "condition" => array("is_unfinalizable", "is_unfinalizable_without_bypass"),
170 "permission_suffix" => "modification_dates",
171 );
172
173 // ACTION - 130 - bible
174 // Affiche la bible
175 $this->class_actions[130] = array(
176 "identifier" => "bible",
177 "view" => "view_bible",
178 "permission_suffix" => "modifier",
179 );
180
181 // ACTION - 140 - bible_auto
182 // Active la bible automatique
183 $this->class_actions[140] = array(
184 "identifier" => "bible_auto",
185 "view" => "view_bible_auto",
186 "permission_suffix" => "modifier",
187 );
188
189 // ACTION - 150 - suivi_bordereaux
190 // Imprimer un bordereau d'envoi
191 $this->class_actions[150] = array(
192 "identifier" => "suivi_bordereaux",
193 "view" => "view_suivi_bordereaux",
194 "permission_suffix" => "consulter",
195 );
196
197 // ACTION - 160 - suivi_envoi_lettre_rar
198 // Imprimer un bordereau d'envoi
199 $this->class_actions[160] = array(
200 "identifier" => "suivi_envoi_lettre_rar",
201 "view" => "view_suivi_envoi_lettre_rar",
202 "permission_suffix" => "consulter",
203 );
204
205 // ACTION - 170 - suivi_mise_a_jour_des_dates
206 // Mettre à jour les dates de l'instruction
207 $this->class_actions[170] = array(
208 "identifier" => "suivi_mise_a_jour_des_dates",
209 "view" => "view_suivi_mise_a_jour_des_dates",
210 "permission_suffix" => "consulter",
211 );
212
213 // ACTION - 180 - pdf_lettre_rar
214 // Génère PDF sur bordereaux de lettres RAR
215 $this->class_actions[180] = array(
216 "identifier" => "pdf_lettre_rar",
217 "view" => "view_pdf_lettre_rar",
218 "permission_suffix" => "consulter",
219 );
220
221 // ACTION - 190 - bordereau_envoi_maire
222 // Formulaire pour générer le bordereau d'envoi au maire
223 // Met à jour la date d'envoi à signature du maire
224 $this->class_actions[190] = array(
225 "identifier" => "bordereau_envoi_maire",
226 "view" => "view_bordereau_envoi_maire",
227 "permission_suffix" => "bordereau_envoi_maire",
228 );
229
230 // ACTION - 200 - generate_bordereau_envoi_maire
231 // Génère PDF bordereau d'envoi au maire
232 $this->class_actions[200] = array(
233 "identifier" => "generate_bordereau_envoi_maire",
234 "view" => "view_generate_bordereau_envoi_maire",
235 "permission_suffix" => "bordereau_envoi_maire",
236 );
237
238 // ACTION - 210 - notifier_commune
239 // Notifie la commune par mail d'un évément d'instruction finalisé
240 $this->class_actions[210] = array(
241 "identifier" => "notifier_commune",
242 "portlet" => array(
243 "type" => "action-direct-with-confirmation",
244 "libelle" => _("Notifier la commune par courriel"),
245 "order" => 210,
246 "class" => "notifier_commune-16",
247 ),
248 "view" => "formulaire",
249 "method" => "notifier_commune",
250 "permission_suffix" => "notifier_commune",
251 "condition" => "is_notifiable",
252 );
253
254 // ACTION - 220 - generate_suivi_bordereaux
255 // GénÚre PDF bordereaux
256 $this->class_actions[220] = array(
257 "identifier" => "generate_suivi_bordereaux",
258 "view" => "view_generate_suivi_bordereaux",
259 "permission_suffix" => "consulter",
260 );
261 }
262
263 /**
264 * Cette variable permet de stocker le résultat de la méthode
265 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
266 * ces appels.
267 * @var string Code de la division du dossier en cours
268 */
269 var $_division_from_dossier = NULL;
270
271 /**
272 * Cette méthode permet de récupérer le code de division correspondant
273 * au dossier sur lequel on se trouve.
274 *
275 * @return string Code de la division du dossier en cours
276 */
277 function getDivisionFromDossier() {
278
279 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
280 // Pour éviter de refaire le traitement de recherche de la division
281 // alors on vérifie si nous ne l'avons pas déjà calculé.
282 if ($this->_division_from_dossier != NULL) {
283 // Logger
284 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
285 // On retourne la valeur déjà calculée
286 return $this->_division_from_dossier;
287 }
288
289 // Par défaut, on définit la valeur du dossier à NULL
290 $dossier = NULL;
291 // Test sur le mode et le contexte du formulaire
292 if ($this->getParameter("maj") == 0
293 && ($this->getParameter("retourformulaire") == "dossier"
294 || $this->getParameter("retourformulaire") == "dossier_instruction"
295 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
296 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
297 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
298 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
299 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
300 // n'existe pas en base de données) ET que nous nous trouvons
301 // dans le contexte d'un dossier d'instruction alors on récupère
302 // le numéro de dossier depuis le paramètre 'idxformulaire'
303 $dossier = $this->getParameter("idxformulaire");
304 } else {
305 // Sinon on récupère le numéro de dossier dans le champs dossier de
306 // l'enregistrement (en base de données)
307 $dossier = $this->getVal("dossier");
308 }
309
310 // On appelle la méthode de la classe utils qui renvoi le code de la
311 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
312 // prochain appel de cette méthode
313 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
314 // Logger
315 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
316 // On retourne la valeur retournée
317 return $this->_division_from_dossier;
318
319 }
320
321 /**
322 * Cette méthode permet de récupérer le dossier d'autorisation d'un dossier
323 */
324 function getNumDemandeAutorFromDossier($id) {
325 //
326 if (!isset($id)) {
327 return NULL;
328 }
329 //
330 $sql = "select dossier_autorisation from ".DB_PREFIXE."dossier ";
331 $sql .= " where dossier='".$id."'";
332 //
333 $dossier_autorisation = $this->db->getOne($sql);
334 $this->addToLog("getNumDemandeAutorFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
335 database::isError($dossier_autorisation);
336 //
337 return $dossier_autorisation;
338 }
339
340 // }}}
341
342 function setType(&$form, $maj) {
343 //
344 parent::setType($form, $maj);
345 // On cache tous les champs
346 // XXX
347 $form->setType('complement5_om_html', 'hidden');
348 $form->setType('bible5', 'hidden');
349 $form->setType('complement6_om_html', 'hidden');
350 $form->setType('bible6', 'hidden');
351 $form->setType('complement7_om_html', 'hidden');
352 $form->setType('bible7', 'hidden');
353 $form->setType('complement8_om_html', 'hidden');
354 $form->setType('bible8', 'hidden');
355 $form->setType('complement9_om_html', 'hidden');
356 $form->setType('bible9', 'hidden');
357 $form->setType('complement10_om_html', 'hidden');
358 $form->setType('bible10', 'hidden');
359 $form->setType('complement11_om_html', 'hidden');
360 $form->setType('bible11', 'hidden');
361 $form->setType('complement12_om_html', 'hidden');
362 $form->setType('bible12', 'hidden');
363 $form->setType('complement13_om_html', 'hidden');
364 $form->setType('bible13', 'hidden');
365 $form->setType('complement14_om_html', 'hidden');
366 $form->setType('bible14', 'hidden');
367 $form->setType('complement15_om_html', 'hidden');
368 $form->setType('bible15', 'hidden');
369 //
370 $form->setType('delai', 'hidden');
371 $form->setType('etat', 'hidden');
372 $form->setType('accord_tacite', 'hidden');
373 $form->setType('action', 'hidden');
374 $form->setType('delai_notification', 'hidden');
375 $form->setType('avis_decision', 'hidden');
376 $form->setType('autorite_competente', 'hidden');
377 //
378 $form->setType('archive_delai', 'hidden');
379 $form->setType('archive_etat', 'hidden');
380 $form->setType('archive_accord_tacite', 'hidden');
381 $form->setType('archive_avis', 'hidden');
382 $form->setType('archive_date_complet', 'hiddendate');
383 $form->setType('archive_date_dernier_depot', 'hiddendate');
384 $form->setType('archive_date_rejet', 'hiddendate');
385 $form->setType('archive_date_limite', 'hiddendate');
386 $form->setType('archive_date_notification_delai', 'hiddendate');
387 $form->setType('archive_date_decision', 'hiddendate');
388 $form->setType('archive_date_validite', 'hiddendate');
389 $form->setType('archive_date_achevement', 'hiddendate');
390 $form->setType('archive_date_conformite', 'hiddendate');
391 $form->setType('archive_date_chantier', 'hiddendate');
392 $form->setType('archive_autorite_competente','hidden');
393 $form->setType('date_depot','hidden');
394 //
395 $form->setType('numero_arrete', 'hidden');
396 //
397 $form->setType('code_barres', 'hidden');
398
399 //
400 $form->setType('archive_incompletude','hidden');
401 $form->setType('archive_incomplet_notifie','hidden');
402 $form->setType('archive_evenement_suivant_tacite','hidden');
403 $form->setType('archive_evenement_suivant_tacite_incompletude','hidden');
404 $form->setType('archive_etat_pendant_incompletude','hidden');
405 $form->setType('archive_date_limite_incompletude','hiddendate');
406 $form->setType('archive_delai_incompletude','hidden');
407
408 //
409 $form->setType('duree_validite','hidden');
410 $form->setType('duree_validite_parametrage','hidden');
411
412 //
413 $form->setType('created_by_commune','hidden');
414 //
415 // gestion du champ "finalisé par"
416 if ($this->getVal("om_final_instruction") == 't') {
417 $form->setType('om_final_instruction_utilisateur', 'static');
418 } else {
419 $form->setType('om_final_instruction_utilisateur', 'hidden');
420 }
421 //
422 if ($maj < 2 || $maj == 125) { //ajouter, modifier et suivi des dates
423 $form->setType('destinataire', 'hidden');
424 $form->setType('lettretype', 'hiddenstatic');
425 $form->setType('complement_om_html', 'html');
426 $form->setType('complement2_om_html', 'html');
427 $form->setType('complement3_om_html', 'html');
428 $form->setType('complement4_om_html', 'html');
429 $form->setType('bible_auto', 'httpclick');
430 $form->setType('bible', 'httpclick');
431 $form->setType('bible2', 'httpclick');
432 $form->setType('bible3', 'httpclick');
433 $form->setType('bible4', 'httpclick');
434 $form->setType('dossier', 'hidden');
435 $form->setType('libelle', 'hiddenstatic');
436 $form->setType('signataire_arrete','select');
437 $form->setType('date_envoi_signature','datedisabled');
438 $form->setType('date_retour_signature','datedisabled');
439 $form->setType('date_envoi_rar','datedisabled');
440 $form->setType('date_retour_rar','datedisabled');
441 $form->setType('date_envoi_controle_legalite','datedisabled');
442 $form->setType('date_retour_controle_legalite','datedisabled');
443 $form->setType('date_finalisation_courrier','datedisabled');
444
445 if($maj==0){ // ajouter
446 $form->setType('instruction', 'hidden');
447 $form->setType('lettretype', 'hidden');
448 $form->setType('evenement', 'select');
449 $form->setType('date_evenement', 'date2');
450 }else{ // modifier et suivi des dates
451 $form->setType('instruction', 'hiddenstatic');
452 $form->setType('evenement', 'selecthiddenstatic');
453 //$form->setType('date_evenement', 'hiddenstaticdate');
454 $form->setType('date_evenement', 'date2');
455 // necessaire pour calcul de date en modification
456 //$form->setType('delai', 'hiddenstatic');
457 // les administrateurs technique et fonctionnel peuvent
458 // modifier tous les champs de date
459 // si l'instruction a déjà été finalisée au moins une fois
460 if ($this->f->isAccredited("instruction_modification_dates")
461 && $this->getVal("date_finalisation_courrier") != '') {
462 $form->setType('date_envoi_signature', 'date');
463 $form->setType('date_retour_signature', 'date');
464 $form->setType('date_envoi_rar', 'date');
465 $form->setType('date_retour_rar', 'date');
466 $form->setType('date_envoi_controle_legalite', 'date');
467 $form->setType('date_retour_controle_legalite', 'date');
468 $form->setType('date_finalisation_courrier', 'date');
469 // suivi des dates
470 if ($maj == 125) {
471 $form->setType('date_evenement', 'hiddenstaticdate');
472 $form->setType('complement_om_html', 'hiddenstatic');
473 $form->setType('complement2_om_html', 'hiddenstatic');
474 $form->setType('complement3_om_html', 'hiddenstatic');
475 $form->setType('complement4_om_html', 'hiddenstatic');
476 $form->setType('bible_auto', 'hidden');
477 $form->setType('bible', 'hidden');
478 $form->setType('bible2', 'hidden');
479 $form->setType('bible3', 'hidden');
480 $form->setType('bible4', 'hidden');
481 $form->setType('signataire_arrete','selecthiddenstatic');
482 $form->setType('om_final_instruction_utilisateur', 'hiddenstatic');
483 }
484 }
485 }
486 } elseif($maj==2){
487 $form->setType('dossier', 'hidden');
488 $form->setType('bible_auto', 'hidden');
489 $form->setType('bible', 'hidden');
490 $form->setType('bible2', 'hidden');
491 $form->setType('bible3', 'hidden');
492 $form->setType('bible4', 'hidden');
493 }else {
494 $form->setType('destinataire', 'hidden');
495 $form->setType('dossier', 'hidden');
496 $form->setType('bible_auto', 'hidden');
497 $form->setType('bible', 'hidden');
498 $form->setType('bible2', 'hidden');
499 $form->setType('bible3', 'hidden');
500 $form->setType('bible4', 'hidden');
501 }
502
503 //Cache les champs pour la finalisation
504 $form->setType('om_fichier_instruction', 'hidden');
505 $form->setType('om_final_instruction', 'hidden');
506 // Cache le document arrêté
507 $form->setType('document_numerise', 'hidden');
508
509 //Masquer les champs date_envoi_controle_legalite et
510 //date_retour_controle_legalite si ce n'est pas un arrêté et si ce n'est
511 //pas un utilisateur ayant le droit spécifique
512 if ( !is_numeric($this->getVal("avis_decision"))&&
513 !$this->f->isAccredited("instruction_modification_dates")){
514
515 $form->setType("date_envoi_controle_legalite", "hiddendate");
516 $form->setType("date_retour_controle_legalite", "hiddendate");
517 }
518
519 // Pour les actions finalize, unfinalize et notifier_commune
520 if($maj == 100 || $maj == 110 || $maj == 210) {
521 //
522 foreach ($this->champs as $value) {
523 // Cache tous les champs
524 $form->setType($value, 'hidden');
525 }
526 }
527 }
528
529 function setSelect(&$form, $maj,&$db,$debug) {
530 /**
531 * On ne surcharge pas la méthode parent car une requête sur la table
532 * dossier est mauvaise pour les performances, car la requête qui
533 * concerne evenement est plus complexe que celle générée et car les
534 * champs action, avis_decision et etat ne sont pas utilisés comme des
535 * select
536 */
537 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
538 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
539 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
540 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
541
542 //// action
543 //$this->init_select($form, $db, $maj, $debug, "action",
544 // $sql_action, $sql_action_by_id, false);
545
546 //// avis_decision
547 //$this->init_select($form, $db, $maj, $debug, "avis_decision",
548 // $sql_avis_decision, $sql_avis_decision_by_id, false);
549
550 //// dossier
551 //$this->init_select($form, $db, $maj, $debug, "dossier",
552 // $sql_dossier, $sql_dossier_by_id, false);
553
554 //// etat
555 //$this->init_select($form, $db, $maj, $debug, "etat",
556 // $sql_etat, $sql_etat_by_id, false);
557
558 //// evenement
559 //$this->init_select($form, $db, $maj, $debug, "evenement",
560 // $sql_evenement, $sql_evenement_by_id, false);
561
562 // signataire_arrete
563 // si contexte DI
564 if ($this->getParameter("retourformulaire") == "dossier"
565 || $this->getParameter("retourformulaire") == "dossier_instruction"
566 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
567 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
568 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
569 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
570 // on recupère les signataires de la multicollectivité et de celle du DI
571 require_once "../obj/dossier_instruction.class.php";
572 $di = new dossier_instruction($this->getParameter('idxformulaire'), $db, $debug);
573 $sql_signataire_arrete_by_di = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_by_di);
574 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
575 $sql_signataire_arrete_by_di, $sql_signataire_arrete_by_id, true);
576 } else {
577 $this->init_select($form, $db, $maj, $debug, "signataire_arrete",
578 $sql_signataire_arrete, $sql_signataire_arrete_by_id, true);
579 }
580
581 /**
582 * Gestion du filtre sur les événements de workflow disponibles
583 * On récupère ici en fonction de l'état du dossier d'instruction en
584 * cours et du type du dossier d'instruction en cours la liste
585 * événements disponibles.
586 */
587 if ($maj == 0) {
588 // Récupération des événements par une jointure entre la table dossier
589 // et la table transition et la table evenement et la table
590 // lien_dossier_instruction_type_evenement en fonction de l'identifiant
591 // du dossier d'instruction en cours
592 $sql = "SELECT
593 evenement.evenement,
594 evenement.libelle as lib
595 FROM ".DB_PREFIXE."dossier
596 INNER JOIN ".DB_PREFIXE."lien_dossier_instruction_type_evenement
597 ON dossier.dossier_instruction_type=lien_dossier_instruction_type_evenement.dossier_instruction_type
598 INNER JOIN ".DB_PREFIXE."evenement
599 ON evenement.evenement=lien_dossier_instruction_type_evenement.evenement
600 INNER JOIN ".DB_PREFIXE."transition
601 ON evenement.evenement = transition.evenement
602 AND dossier.etat=transition.etat
603 WHERE dossier.dossier='".$this->idxformulaire."' ";
604
605 // Si changement de décision par instructeur commune
606 if($this->f->isUserInstructeur() === true
607 && $this->f->getDivisionFromDossier($this->idxformulaire) != $_SESSION["division"]
608 && $this->f->isInstrCanChangeDecision($this->idxformulaire) === true) {
609 $sql .= "AND evenement.type IN ('arrete', 'changement_decision') ";
610 }
611 $sql .= "ORDER BY evenement.libelle, evenement.action";
612 $res = $db->query($sql);
613 $this->addToLog("setSelect(): db->query(\"".$sql."\");", VERBOSE_MODE);
614 if (database::isError($res)) {
615 die($res->getMessage());
616 }
617 // Remplissage du tableau du select
618 $contenu = array(
619 0 => array("",),
620 1 => array(_('choisir')." "._('evenement'),)
621 );
622 while ($row=& $res->fetchRow()) {
623 $contenu[0][] = $row[0];
624 $contenu[1][] = $row[1];
625 }
626 $form->setSelect("evenement", $contenu);
627 } else {
628 $sql = "SELECT
629 evenement.libelle as lib
630 FROM ".DB_PREFIXE."evenement
631 WHERE evenement.evenement=".$this->getVal("evenement")."";
632 $res = $db->getone($sql);
633 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
634 if (database::isError($res)) {
635 die($res->getMessage());
636 }
637 //
638 $contenu = array(
639 0 => array($this->getVal("evenement"),),
640 1 => array($res,)
641 );
642 $form->setSelect("evenement", $contenu);
643 }
644
645 /**
646 * Gesion des liens vers la bible
647 */
648 // lien bible_auto
649 $contenu = array(_("automatique"));
650 $form->setSelect("bible_auto",$contenu);
651 // lien bible1
652 $contenu = array(_("bible"));
653 $form->setSelect("bible",$contenu);
654 // lien bible2
655 $contenu = array(_("bible"));
656 $form->setSelect("bible2",$contenu);
657 // lien bible3
658 $contenu = array(_("bible"));
659 $form->setSelect("bible3",$contenu);
660 // lien bible4
661 $contenu = array(_("bible"));
662 $form->setSelect("bible4",$contenu);
663 }
664
665 function cleSecondaire($id, &$db, $val, $DEBUG) {
666 //
667 parent::cleSecondaire($id, $db, $val, $DEBUG);
668
669 $id = $this->getVal($this->clePrimaire);
670
671
672 //Requête de vérification que cet événement d'instruction n'est pas lié
673 //à la création d'un dossier d'instruction
674 $sql = "SELECT demande_type.dossier_instruction_type
675 FROM ".DB_PREFIXE."demande_type
676 LEFT JOIN ".DB_PREFIXE."demande
677 ON demande.demande_type = demande_type.demande_type
678 WHERE demande.instruction_recepisse = ".$id;
679 $res = $this->db->getOne($sql);
680 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
681 if (database::isError($res)) {
682 die($res->getMessage());
683 }
684
685 // Aucune clé secondaire n'a été trouvée ou c'est un événement sans
686 //création de dossier d'instruction, l'événement d'instruction peut être
687 //supprimé
688 if ( $this->correct !== false || $res == null || $res == ""){
689
690 // Requête de vérification que cet événement d'instruction est lié
691 // à une demande
692 $sql = "SELECT demande
693 FROM ".DB_PREFIXE."demande
694 WHERE instruction_recepisse = ".$id;
695 $res = $this->db->getOne($sql);
696 $this->addToLog("cleSecondaire(): db->getone(\"".$sql."\");", VERBOSE_MODE);
697 if (database::isError($res)) {
698 die($res->getMessage());
699 }
700
701 //Si c'est un événement d'instruction lié à une demande
702 if ($res != null || $res != ""){
703
704 require_once "../obj/demande.class.php";
705 $demande = new demande($res, $this->db, DEBUG);
706
707 //On met à jour la demande en supprimant la liaison vers
708 //l'événement d'instruction
709 $demande->setParameter("maj", 1);
710 $valF = array();
711 foreach($demande->champs as $identifiant => $champ) {
712 $valF[$champ] = $demande->val[$identifiant];
713 }
714 $valF['date_demande']=$demande->dateDBToForm($valF['date_demande']);
715 $valF['instruction_recepisse']=NULL;
716 $ret = $demande->modifier($valF, $this->db, DEBUG);
717 }
718
719 /**
720 * Vérification que l'élément supprimé est le dernier pour pouvoir
721 * remodifier les données de manière itérative.
722 */
723 // Initialisation
724 $dernierevenement = "";
725 // Récupération du dernier élément de la table d'instruction qui
726 // concerne le dossier en cours
727 $sql = "SELECT max(instruction)
728 FROM ".DB_PREFIXE."instruction
729 WHERE dossier ='".$this->idxformulaire."'";
730 $dernierevenement = $db->getOne($sql);
731 $this->addToLog("setSelect(): db->getone(\"".$sql."\");", VERBOSE_MODE);
732 if (database::isError($dernierevenement)) {
733 die($dernierevenement->getMessage());
734 }
735 // Si on se trouve effectivement sur le dernier evenement d'instruction
736 if ($dernierevenement == $id) {
737 // Alors on valide la suppression
738 $this->correct = true;
739 $this->addToMessage(_('Destruction_chronologique'));
740 } else {
741 // Alors on annule la suppression
742 $this->correct = false;
743 $this->addToMessage(_("Seul le dernier evenement d'instruction peut etre supprime."));
744 }
745 }
746 }
747
748 /**
749 * Vérification de la possibilité ou non de modifier des dates de suivi
750 * @param string $champ champ date à vérifier
751 */
752 function updateDate($champ) {
753
754 //Si le retourformulaire est "dossier_instruction"
755 if ($this->getParameter("retourformulaire") == "dossier"
756 || $this->getParameter("retourformulaire") == "dossier_instruction"
757 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
758 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
759 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
760 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
761
762 // Vérification de la possibilité de modifier les dates si déjà éditées
763 if($this->valF[$champ] != "" AND !$this->f->user_is_admin) {
764 // si l'utilisateur n'est pas un admin
765 if($this->getVal($champ) != "" AND $this->getVal($champ) != $this->valF[$champ]) {
766 $this->correct = false;
767 $this->addToMessage(_("Les dates de suivis ne peuvent etre modifiees"));
768 }
769 }
770 }
771
772 //
773 return true;
774 }
775
776 /*Met des valeurs par défaut dans certains des sous-formulaire*/
777 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
778
779 //
780 $this->retourformulaire=$retourformulaire;
781 $this->idxformulaire=$idxformulaire;
782 // Ajout
783 if ($maj == 0) {
784 $form->setVal("destinataire", $idxformulaire);
785 $form->setVal("dossier", $idxformulaire);
786 }
787 //
788 $this->set_form_default_values($form, $maj, $validation);
789 }
790
791 /**
792 * Permet de pré-remplir les valeurs des formulaires.
793 *
794 * @param [object] $form formulaire
795 * @param [integer] $maj mode
796 * @param [integer] $validation validation
797 */
798 function set_form_default_values(&$form, $maj, $validation) {
799
800 // Ajout
801 if ($maj == 0) {
802 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
803 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
804 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
805 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
806 // si contexte DI
807 if ($this->getParameter("retourformulaire") == "dossier"
808 || $this->getParameter("retourformulaire") == "dossier_instruction"
809 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
810 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
811 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
812 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
813 // on recupère les signataires de la multicollectivité et de celle du DI
814 require_once "../obj/dossier_instruction.class.php";
815 $di = new dossier_instruction($this->getParameter('idxformulaire'), $db, DEBUG);
816 $sql = str_replace('<collectivite_di>', $di->getVal("om_collectivite"), $sql_signataire_arrete_defaut_by_di);
817 } else {
818 $sql = $sql_signataire_arrete_defaut;
819 }
820 // Date du jour
821 $form->setVal("date_evenement", date('Y-m-d'));
822
823 // Exécution de la requête
824 $res = $this->f->db->query($sql);
825 $this->f->addToLog("setVal(): db->query(\"".$sql."\");", VERBOSE_MODE);
826 if ( database::isError($res)){
827 die();
828 }
829
830 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
831
832 if (isset($row['signataire_arrete']) && is_numeric($row['signataire_arrete'])){
833 $form->setVal("signataire_arrete",$row['signataire_arrete']);
834 }
835 }
836
837 // Ajout et modification
838 if ($maj == 0 || $maj == 1 || $maj == 125) {
839 $form->setVal("bible_auto","bible_auto()");
840 $form->setVal("bible","bible(1)");
841 $form->setVal("bible2","bible(2)");
842 $form->setVal("bible3","bible(3)");
843 $form->setVal("bible4","bible(4)");
844 }
845 }
846
847
848 function setLayout(&$form, $maj){
849 if ( $maj < 2 OR $maj == 3 OR $maj == 125 ) {
850 /*Champ sur lequel s'ouvre le bloc 1 */
851 $form->setBloc('evenement','D',"","col_12");
852
853 $form->setFieldset('evenement','D',_('Evenement'));
854 $form->setFieldset('om_final_instruction_utilisateur','F','');
855
856 $form->setBloc('om_final_instruction_utilisateur','F');
857
858 $form->setBloc('date_finalisation_courrier','D',"","col_12");
859
860 $form->setFieldset('date_finalisation_courrier','D',_('Dates'));
861 $form->setBloc('date_finalisation_courrier','D',"","col_6");
862 $form->setBloc('date_envoi_controle_legalite','F');
863
864 $form->setBloc('signataire_arrete','D',"","col_6");
865 $form->setBloc('date_retour_controle_legalite','F');
866 $form->setFieldset('date_retour_controle_legalite','F','');
867
868 $form->setBloc('date_retour_controle_legalite','F');
869
870 $form->setBloc('complement_om_html','D',"","col_12");
871 $form->setFieldset('complement_om_html','D',_('Complement'));
872 $form->setFieldset('bible','F','');
873 $form->setBloc('bible','F');
874
875 $form->setBloc('complement2_om_html','D',"","col_12");
876 $form->setFieldset('complement2_om_html','D',_('Complement 2'));
877 $form->setFieldset('bible2','F','');
878 $form->setBloc('bible2','F');
879
880 $form->setBloc('complement3_om_html','D',"","col_12");
881 $form->setFieldset('complement3_om_html','D',_('Complement 3'));
882 $form->setFieldset('bible3','F','');
883 $form->setBloc('bible3','F');
884
885 $form->setBloc('complement4_om_html','D',"","col_12");
886 $form->setFieldset('complement4_om_html','D',_('Complement 4'));
887 $form->setFieldset('bible4','F','');
888 $form->setBloc('bible4','F');
889 }
890 }
891
892 function setLib(&$form, $maj) {
893 //
894 parent::setLib($form, $maj);
895 //
896 $form->setLib('bible_auto', "");
897 $form->setLib('bible', "");
898 $form->setLib('bible2', "");
899 $form->setLib('bible3', "");
900 $form->setLib('bible4', "");
901 $form->setLib('om_final_instruction_utilisateur', _("finalise par"));
902 }
903
904 function triggerajouter($id, &$db, $val, $DEBUG) {
905 /**
906 * Le code suivant permet de récupérer des valeurs des tables evenement
907 * et dossier pour les stocker dans l'instruction :
908 * DEPUIS L'EVENEMENT
909 * - action
910 * - delai
911 * - accord_tacite
912 * - etat
913 * - avis_decision
914 * - delai_notification
915 * - lettretype
916 * - autorite_competente
917 * DEPUIS LE DOSSIER D'INSTRUCTION
918 * - archive_delai
919 * - archive_accord_tacite
920 * - archive_etat
921 * - archive_avis
922 * - date_complet
923 * - date_rejet
924 * - date_limite
925 * - date_notification_delai
926 * - date_decision
927 * - date_validite
928 * - date_achevement
929 * - date_chantier
930 * - date_conformite
931 * - avis_decision
932 */
933 // Récupération de tous les paramètres de l'événement sélectionné
934 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
935 WHERE evenement=".$this->valF['evenement'];
936 $res = $db->query($sql);
937 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
938 if (database::isError($res)) {
939 die($res->getMessage());
940 }
941 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
942 // Récupération de l'identifiant de l'action
943 // si une action est paramétrée dans l'événement
944 $this->valF['action'] = NULL;
945 if (isset($row['action']) and !empty($row['action'])) {
946 $this->valF['action']=$row['action'];
947 }
948 // Récupération de la valeur du délai
949 $this->valF['delai'] = $row['delai'];
950 // Récupération de l'identifiant de l'état
951 // si un état est paramétré dans l'événement
952 $this->valF['etat']=NULL;
953 if (isset($row['etat']) and !empty($row['etat'])) {
954 $this->valF['etat']=$row['etat'];
955 }
956 // Récupération de la valeur d'accord tacite
957 $this->valF['accord_tacite']=$row['accord_tacite'];
958 // Récupération de la valeur du délai de notification
959 $this->valF['delai_notification']=$row['delai_notification'];
960 // Récupération de l'identifiant de l'avis
961 // si un avis est paramétré dans l'événement
962 $this->valF['avis_decision'] = NULL;
963 if(isset($row['avis_decision']) and !empty($row['avis_decision'])) {
964 $this->valF['avis_decision']=$row['avis_decision'];
965 }
966 // Récupération de la valeur de l'autorité compétente
967 // si l'autorité compétente est paramétré dans l'événement
968 $this->valF['autorite_competente'] = NULL;
969 if(isset($row['autorite_competente']) and !empty($row['autorite_competente'])) {
970 $this->valF['autorite_competente']=$row['autorite_competente'];
971 }
972 // Récupération de la valeur de la lettre type
973 $this->valF['lettretype']=$row['lettretype'];
974 }
975 // Récupération de toutes les valeurs du dossier d'instruction en cours
976 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
977 WHERE dossier='".$this->valF['dossier']."'";
978 $res = $db->query($sql);
979 $this->addToLog("triggerajouter(): db->query(\"".$sql."\");", VERBOSE_MODE);
980 if (database::isError($res)) {
981 die($res->getMessage());
982 }
983 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
984 $this->updateArchiveData($row);
985
986 // Récupération de la duree de validite du dossier d'autorisation
987 $sql = "SELECT duree_validite_parametrage
988 FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
989 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
990 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
991 LEFT JOIN ".DB_PREFIXE."dossier
992 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
993 WHERE dossier.dossier='".$this->valF['dossier']."'";
994 $duree_validite_parametrage = $db->getOne($sql);
995 $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
996 database::isError($duree_validite_parametrage);
997 if ($duree_validite_parametrage != '') {
998 $this->valF['duree_validite_parametrage']= $duree_validite_parametrage;
999 }
1000
1001 // Identifiant du type de courrier
1002 $idTypeCourrier = '11';
1003 $idCourrier = str_pad($this->valF["instruction"], 10, "0", STR_PAD_LEFT);
1004 // Code barres
1005 $this->valF["code_barres"] = $idTypeCourrier . $idCourrier;
1006 }
1007
1008 // Test si une restriction est valide
1009 // return boolean
1010 function restrictionIsValid($restriction){
1011 if($this->restriction_valid != null) {
1012 return $this->restriction_valid;
1013 }
1014 if(empty($restriction)) {
1015 $this->restriction_valid = true;
1016 return $this->restriction_valid;
1017 }
1018 // Liste des opérateurs possibles sans espace
1019 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
1020 // Liste identique mais avec le marqueur §
1021 $mark = "§";
1022 $operateurs_marked = array();
1023 foreach ($operateurs as $operateur) {
1024 $operateurs_marked[] = $mark.$operateur.$mark;
1025 }
1026
1027 // Supprime tous les espaces de la chaîne de caractère
1028 $restriction = preg_replace('/\s+/', '', $restriction);
1029
1030 // Met un marqueur avant et après les opérateurs
1031 // puis transforme la chaine en un tableau
1032 $restriction = str_replace($operateurs, $operateurs_marked,
1033 $restriction);
1034
1035 // Pour chaque opérateur logique
1036 foreach (array('&&', '||') as $operator) {
1037
1038 // S'il est absent on ne fait aucun traitement
1039 if (strpos($restriction, $mark.$operator.$mark) === false) {
1040 continue;
1041 }
1042 // Sinon on vérifie les deux conditions avec le OU/ET logique
1043 $restrictions = explode($mark.$operator.$mark, $restriction);
1044 $restrictions[0] = explode($mark, $restrictions[0]);
1045 $restrictions[1] = explode($mark, $restrictions[1]);
1046 $res_bool = false;
1047 if ($operator == '&&') {
1048 if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1049 && $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1050 $res_bool = true;
1051 }
1052 }
1053 if ($operator == '||') {
1054 if ($this->is_restriction_satisfied($restrictions[0], $operateurs)
1055 || $this->is_restriction_satisfied($restrictions[1], $operateurs)) {
1056 $res_bool = true;
1057 }
1058 }
1059 return $res_bool;
1060 }
1061 $tabRestriction = explode($mark, $restriction);
1062 return $this->is_restriction_satisfied($tabRestriction, $operateurs);
1063
1064 }
1065
1066 function is_restriction_satisfied($restriction, $operateurs) {
1067 // Tableau comprenant les résultat
1068 $res = array();
1069 // Compteur pour les résultat
1070 // commence à 1 car le 0 doit rester inchangé tout au long du traitement
1071 $j = 1;
1072 // Comparateur du calcul
1073 $comparateur = '';
1074 // Booléen retourné
1075 $res_bool = true;
1076
1077 // S'il y a un comparateur
1078 if (in_array(">=", $restriction)
1079 || in_array("<=", $restriction)
1080 || in_array("==", $restriction)
1081 || in_array("!=", $restriction)) {
1082
1083 // Si le tableau n'est pas vide
1084 if (count($restriction) > 0) {
1085
1086 // Boucle dans le tableau pour récupérer seulement les valeurs
1087 foreach ($restriction as $key => $value) {
1088 //
1089 if (!in_array($value, $operateurs)) {
1090 if ($this->getRestrictionValue($value) != false) {
1091 $res[] = $this->getRestrictionValue($value);
1092 } else {
1093 // Message d'erreur
1094 $error_message = sprintf(_("Le champ %s de l'instruction %s est vide"), "<span class='bold'>".$value."</span>", "<span class='bold'>".$this->valF["instruction"]."</span>");
1095 $this->addToMessage($error_message);
1096 // Arrête le traitement
1097 return false;
1098 }
1099 }
1100 }
1101
1102 // Boucle dans le tableau
1103 // commence à 1 car le 0 doit rester inchangé tout au long du
1104 // traitement
1105 for ($i = 1; $i<count($restriction); $i++) {
1106
1107 // Récupère le comparateur
1108 if ($restriction[$i] === ">="
1109 || $restriction[$i] === "<="
1110 || $restriction[$i] === "=="
1111 || $restriction[$i] === "!=") {
1112 $comparateur = $restriction[$i];
1113 }
1114
1115 // Si l'opérateur qui suit est un "+"
1116 if ($restriction[$i] === "+") {
1117 $dateDep = $res[$j];
1118 unset($res[$j]);$j++;
1119 $duree = $res[$j];
1120 unset($res[$j]);
1121 $res[$j] = $this->f->mois_date($dateDep, $duree, "+");
1122 }
1123
1124 // Si l'opérateur qui suit est un "-"
1125 if ($restriction[$i] === "-") {
1126 $dateDep = $res[$j];
1127 unset($res[$j]);$j++;
1128 $duree = $res[$j];
1129 unset($res[$j]);
1130 $res[$j] = $this->f->mois_date($dateDep, $duree, "-");
1131 }
1132 }
1133
1134 }
1135
1136 // Si les tableau des résultats n'est pas vide
1137 if (count($res) > 0) {
1138 //
1139 $res_bool = false;
1140 // Effectue le test
1141 if ($comparateur === ">=") {
1142 //
1143 if (strtotime($res[0]) >= strtotime($res[$j])) {
1144 $res_bool = true;
1145 }
1146 }
1147 if ($comparateur === "<=") {
1148 //
1149 if (strtotime($res[0]) <= strtotime($res[$j])) {
1150 $res_bool = true;
1151 }
1152 }
1153 if ($comparateur === "==") {
1154 //
1155 if (strtotime($res[0]) == strtotime($res[$j])) {
1156 $res_bool = true;
1157 }
1158 }
1159 if ($comparateur === "!=") {
1160 //
1161 if (strtotime($res[0]) != strtotime($res[$j])) {
1162 $res_bool = true;
1163 }
1164 }
1165 }
1166 // Sinon une erreur s'affiche
1167 } else {
1168
1169 // Message d'erreur
1170 $error_message = _("Mauvais parametrage de la restriction.")." ".
1171 _("Contactez votre administrateur");
1172 $this->addToMessage($error_message);
1173 // Arrête le traitement
1174 return false;
1175 }
1176
1177 return $res_bool;
1178
1179 }
1180
1181 /**
1182 * Permet de définir si l'événement passé en paramètre est un événement retour.
1183 * @param integer $evenement événement à tester
1184 *
1185 * @return boolean retourne true si événement retour sinon false
1186 */
1187 function is_evenement_retour($evenement) {
1188 if(empty($evenement) || !is_numeric($evenement)) {
1189 return "";
1190 }
1191 $sql = "SELECT retour
1192 FROM ".DB_PREFIXE."evenement
1193 WHERE evenement = ".$evenement;
1194 $retour = $this->db->getOne($sql);
1195 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1196 if (database::isError($retour)) {
1197 die($retour->getMessage());
1198 }
1199 if ($retour == 't') {
1200 return true;
1201 } else {
1202 return false;
1203 }
1204 }
1205
1206 /**
1207 * Retourne le champ restriction de l'événement passé en paramètre.
1208 *
1209 * @param integer $evenement id de l'événement sur lequel récupérer la restriction
1210 *
1211 * @return string contenu du champ restriction
1212 */
1213 function get_restriction($evenement) {
1214 if(empty($evenement) || !is_numeric($evenement)) {
1215 return "";
1216 }
1217 //Récupère la restriction
1218 $sql= "SELECT
1219 restriction
1220 FROM
1221 ".DB_PREFIXE."evenement
1222 WHERE
1223 evenement =".$evenement;
1224
1225 $restriction = $this->db->getOne($sql);
1226 $this->addToLog("verifier(): db->query(\"".$sql."\");", VERBOSE_MODE);
1227 if (database::isError($restriction)) {
1228 die($restriction->getMessage());
1229 }
1230 return $restriction;
1231 }
1232
1233 /**
1234 * Récupère la valeur du champ dans la restriction
1235 * @param string $restrictionValue Nom du champ
1236 * @return mixed Valeur du champ
1237 */
1238 function getRestrictionValue($restrictionValue){
1239
1240 // Initialisation de la valeur de retour
1241 $return = false;
1242
1243 // Récupére les valeurs du dossier
1244 $value_dossier = $this->get_dossier_actual();
1245
1246 //
1247 if (is_numeric($restrictionValue)) {
1248 $return = $restrictionValue;
1249 }elseif (isset($value_dossier[$restrictionValue])) {
1250 $return = $value_dossier[$restrictionValue];
1251 }elseif (isset($this->valF[$restrictionValue])) {
1252 $return = $this->valF[$restrictionValue];
1253 }
1254
1255 // Retourne la valeur du champ
1256 return $return;
1257 }
1258
1259 /**
1260 * Calcul des règle d'action.
1261 * @param string $rule Règle d'action
1262 * @param string $rule_name Nom de la règle
1263 * @param string $type Type de la règle
1264 *
1265 * @return mixed Résultat de la règle
1266 */
1267 function regle($rule, $rule_name, $type = null) {
1268
1269 // Supprime tous les espaces de la chaîne de caractère
1270 $rule = str_replace(' ', '', $rule);
1271 // Coupe la chaîne au niveau de l'opérateur
1272 $operands = explode ("+", $rule);
1273 // Nombre d'opérande
1274 $nb_operands = count($operands);
1275
1276 // Règle à null
1277 if ($rule == "null") {
1278 return null;
1279 }
1280
1281 // Si c'est une règle spécifique
1282 if ($rule_name == "regle_autorite_competente"
1283 || $rule_name == "regle_etat"
1284 || $rule_name == "regle_accord_tacite"
1285 || $rule_name == "regle_avis") {
1286 //
1287 return $this->valF[$rule];
1288 }
1289
1290 // Tableau des champs de type date
1291 $rule_type_date = array(
1292 "regle_date_limite",
1293 "regle_date_notification_delai",
1294 "regle_date_complet",
1295 "regle_date_validite",
1296 "regle_date_decision",
1297 "regle_date_chantier",
1298 "regle_date_achevement",
1299 "regle_date_conformite",
1300 "regle_date_rejet",
1301 "regle_date_dernier_depot",
1302 "regle_date_limite_incompletude",
1303 );
1304 // Tableau des champs de type numérique
1305 $rule_type_numeric = array(
1306 "regle_delai",
1307 "regle_delai_incompletude",
1308 );
1309
1310 // Définit le type du champ
1311 if (in_array($rule_name, $rule_type_date) == true) {
1312 $type = "date";
1313 }
1314 if (in_array($rule_name, $rule_type_numeric) == true) {
1315 $type = "numeric";
1316 }
1317
1318 // Initialisation des variables
1319 $key_date = 0;
1320 $total_numeric = 0;
1321
1322 // Pour chaque opérande
1323 foreach ($operands as $key => $operand) {
1324
1325 // Si c'est une règle de type date
1326 if ($type == 'date') {
1327 // Vérifie si au moins une des opérandes est une date
1328 if (!is_numeric($operand)
1329 && isset($this->valF[$operand])
1330 && $this->f->check_date($this->valF[$operand]) == true) {
1331 // Récupère la position de la date
1332 $key_date = $key;
1333 }
1334 // Les autres opérandes doivent être que des numériques
1335 if (is_numeric($operand) == true) {
1336 // Ajoute l'opérande au total
1337 $total_numeric += $operand;
1338 }
1339 if (!is_numeric($operand)
1340 && isset($this->valF[$operand])
1341 && is_numeric($this->valF[$operand]) == true) {
1342 // Ajoute l'opérande au total
1343 $total_numeric += $this->valF[$operand];
1344 }
1345 }
1346
1347 // Si c'est une règle de type numérique
1348 if ($type == 'numeric') {
1349 // Les opérandes doivent être que des numériques
1350 if (is_numeric($operand) == true) {
1351 // Ajoute l'opérande au total
1352 $total_numeric += $operand;
1353 }
1354 if (!is_numeric($operand)
1355 && isset($this->valF[$operand])
1356 && is_numeric($this->valF[$operand]) == true) {
1357 // Ajoute l'opérande au total
1358 $total_numeric += $this->valF[$operand];
1359 }
1360 }
1361 }
1362
1363 // Résultat pour une règle de type date
1364 if ($type == 'date') {
1365 // Retourne le calcul de la date
1366 return $this->f->mois_date($this->valF[$operands[$key_date]],
1367 $total_numeric, "+");
1368 }
1369
1370 // Résultat pour une règle de type numérique
1371 if ($type == 'numeric') {
1372 // Retourne le calcul
1373 return $total_numeric;
1374 }
1375
1376 }
1377
1378 function triggerajouterapres($id,&$db,$val,$DEBUG) {
1379 /**
1380 * Mise à jour des valeurs du dossier en fonction des valeurs calculées
1381 * par l'action
1382 */
1383 $this->getValEvenement();
1384 // Initialisation
1385 $valF = "";
1386 // état de complétude actuel du dossier
1387 $incompletude = $this->dossierIncomplet();
1388
1389 if($incompletude === FALSE) {
1390 // Si l'événement d'instruction est de type incompletude
1391 if($this->valEvenement['type'] == "incompletude") {
1392 // On marque le dossier en incomplétude pour application des actions
1393 $incompletude = TRUE;
1394 // Set du flag incomplétude de la table dossier
1395 $valF['incompletude'] = TRUE;
1396 // Enregistrement de l'état dans la variable provisoire
1397 $valF['etat_pendant_incompletude'] = $this->valF['archive_etat'];
1398 }
1399 } else {
1400 // Si l'evenement d'instruction est de type retour ou contient une
1401 // decision, on sort d'incomplétude
1402 if($this->valEvenement['type'] == "retour" OR
1403 $this->valEvenement['avis_decision'] != NULL) {
1404 // On enlève la marque d'incomplétude pour application des actions
1405 $incompletude = FALSE;
1406 // On enlève le flag d'incomplétude sur l'enregistrement de la table dossier
1407 $valF['incompletude'] = FALSE;
1408 $valF['incomplet_notifie'] = FALSE;
1409 // Restauration de l'état depuis l'état provisoire
1410 $valF['etat'] = $this->valF['archive_etat_pendant_incompletude'];
1411 // On vide la variable provisoire ainsi que le délai de complétude
1412 // et la date limite de complétude
1413 $valF['etat_pendant_incompletude'] = NULL;
1414 $valF['delai_incompletude'] = NULL;
1415 $valF['date_limite_incompletude'] = NULL;
1416 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1417 }
1418 }
1419 // Récupération des paramètres de l'action
1420 $sql = "SELECT * FROM ".DB_PREFIXE."action
1421 WHERE action='".$this->valF['action']."'";
1422 $res = $db->query($sql);
1423 $this->addToLog("triggerajouterapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1424 if (database::isError($res)) {
1425 die($res->getMessage());
1426 }
1427 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1428
1429 // pour chacune des regles, on applique la regle
1430 if($row['regle_delai']!=''){
1431 $valF['delai'] = $this->regle($row['regle_delai'], 'regle_delai');
1432 }
1433 if($row['regle_accord_tacite']!=''){
1434 $valF['accord_tacite'] = $this->regle($row['regle_accord_tacite'], 'regle_accord_tacite');
1435 }
1436 if($row['regle_avis']!=''){
1437 $valF['avis_decision'] = $this->regle($row['regle_avis'], 'regle_avis');
1438 }
1439 if($row['regle_date_limite']!=''){
1440 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1441 }
1442 if($row['regle_date_complet']!=''){
1443 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1444 }
1445 if($row['regle_date_dernier_depot']!=''){
1446 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1447 }
1448 if($row['regle_date_notification_delai']!=''){
1449 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1450 }
1451 if($row['regle_date_decision']!=''){
1452 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1453 }
1454 if($row['regle_date_rejet']!=''){
1455 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1456 }
1457 if($row['regle_date_validite']!=''){
1458 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1459 }
1460 if($row['regle_date_chantier']!=''){
1461 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1462 }
1463 if($row['regle_date_achevement']!=''){
1464 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1465 }
1466 if($row['regle_date_conformite']!=''){
1467 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1468 }
1469 if($row['regle_date_limite_incompletude']!=''){
1470 $valF['date_limite_incompletude']= $this->regle($row['regle_date_limite_incompletude'], 'regle_date_limite_incompletude');
1471 }
1472 if($row['regle_delai_incompletude']!=''){
1473 $valF['delai_incompletude']= $this->regle($row['regle_delai_incompletude'], 'regle_delai_incompletude');
1474 }
1475 if($row['regle_autorite_competente']!=''){
1476 $valF['autorite_competente']= $this->regle($row['regle_autorite_competente'], 'regle_autorite_competente');
1477 }
1478 if($row['regle_etat']!=''){
1479 // Si on est dans le cas général ou qu'on est en incomplétude et
1480 // qu'on a un événement de type incomplétude alors : on stocke
1481 // l'état dans la variable courante
1482 if ($incompletude == FALSE OR $this->valEvenement['type'] == "incompletude") {
1483 $valF['etat'] = $this->regle($row['regle_etat'], 'regle_etat');
1484 } else {
1485 $valF['etat_pendant_incompletude'] = $this->regle($row['regle_etat'], 'regle_etat');
1486 }
1487 }
1488 }
1489 if($this->valEvenement['evenement_suivant_tacite'] != '') {
1490 // Si on est pas en incomplétude on stocke l'événement tacite
1491 //de l'événement dans la variable courante
1492
1493 if ($incompletude == FALSE OR $this->valEvenement['type'] != "incompletude") {
1494 $valF['evenement_suivant_tacite'] = $this->valEvenement['evenement_suivant_tacite'];
1495 } else {
1496 $valF['evenement_suivant_tacite_incompletude'] = $this->valEvenement['evenement_suivant_tacite'];
1497 }
1498 }
1499 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1500 if ($valF != "") {
1501 // On met à jour le dossier
1502 $cle = " dossier='".$this->valF['dossier']."'";
1503 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1504 $this->addToLog("triggerajouterapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1505 if (database::isError($res1)) {
1506 die($res->getMessage());
1507 }
1508 // Affichage d'informations à l'utilisateur
1509 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1510 }
1511
1512 /**
1513 * Interface avec le référentiel ERP.
1514 *
1515 * On récupère la valeur du champ erp dans le dossier lié à la consultation
1516 * uniquement si l'option_erp est activée.
1517 */
1518 //
1519 $dossier_erp = null;
1520 $evenement_libelle = null;
1521 if ($this->f->is_option_referentiel_erp_enabled() === true) {
1522 //
1523 $sql = "SELECT erp
1524 FROM ".DB_PREFIXE."dossier
1525 WHERE dossier='".$this->valF['dossier']."'";
1526 $dossier_erp = $this->db->getone($sql);
1527 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1528 if (database::isError($res)) {
1529 die($res->getMessage());
1530 }
1531 //
1532 $sql = "SELECT libelle
1533 FROM ".DB_PREFIXE."evenement
1534 WHERE evenement='".$this->valF['evenement']."'";
1535 $evenement_libelle = $this->db->getone($sql);
1536 $this->addToLog("triggerajouterapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1537 if (database::isError($res)) {
1538 die($res->getMessage());
1539 }
1540 }
1541
1542 /**
1543 * Interface avec le référentiel ERP.
1544 *
1545 * (WS->ERP)[105] Arrêté d'un dossier PC effectué -> PC qui concerne un ERP
1546 * (WS->ERP)[111] Décision de conformité effectuée -> PC qui concerne un ERP
1547 *
1548 * envoi du message en cas d'un PC qui est ERP et sur lequel un evenement
1549 * d'acceptation etait fait
1550 */
1551 //
1552 if ($this->f->is_option_referentiel_erp_enabled() === true
1553 && $this->f->getDATCode($this->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
1554 && $dossier_erp == 't'
1555 && in_array($this->valF['evenement'], explode(";", $this->f->getParameter('erp__evenements__decision__pc')))) {
1556 //
1557 $infos = array(
1558 "dossier_instruction" => $this->valF['dossier'],
1559 "decision" => $evenement_libelle,
1560 );
1561 //
1562 $ret = $this->f->send_message_to_referentiel_erp(105, $infos);
1563 if ($ret !== true) {
1564 $this->cleanMessage();
1565 $this->addToMessage(_("Une erreur s'est produite lors de la notification (105) du référentiel ERP. Contactez votre administrateur."));
1566 return false;
1567 } else {
1568 $this->addToMessage(_("Notification (105) du référentiel ERP OK."));
1569 }
1570 }
1571
1572 // Mise à jour des données du dossier d'autorisation
1573 require_once "../obj/dossier_autorisation.class.php";
1574 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1575 if($da->majDossierAutorisation() === false) {
1576 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1577 $this->correct = false;
1578 return false;
1579 }
1580 return $this->add_log_to_dossier($id, array_merge($val, $this->valF));
1581 }
1582
1583 function triggermodifierapres($id,&$db,$val,$DEBUG) {
1584 /**
1585 * L'objectif ici est d'effectuer les recalculs de date dans le dossier
1586 * si la date de l'evenement est modifiee
1587 */
1588 // Initialisation
1589 $valF = "";
1590 // Initialisation du type d'événement
1591 $type_evmt = "";
1592 // Récupération de l'action correspondante à l'événement
1593 $sql = "SELECT action
1594 FROM ".DB_PREFIXE."evenement
1595 WHERE evenement=".$this->valF['evenement'];
1596 $action = $db->getOne($sql);
1597 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1598 if (database::isError($action)) {
1599 die($action->getMessage());
1600 }
1601
1602 // Récupération des paramètres de l'action
1603 $sql = "SELECT * FROM ".DB_PREFIXE."action
1604 WHERE action='".$action."'";
1605 $res = $db->query($sql);
1606 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1607 if (database::isError($res)) {
1608 die($res->getMessage());
1609 }
1610 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1611 // application des regles sur le courrier + delai
1612 if(preg_match("/date_evenement/",$row['regle_date_limite'])){
1613 $valF['date_limite']= $this->regle($row['regle_date_limite'], 'regle_date_limite');
1614 }
1615 if(preg_match("/date_evenement/",$row['regle_date_complet'])){
1616 $valF['date_complet']= $this->regle($row['regle_date_complet'], 'regle_date_complet');
1617 }
1618 if(preg_match("/date_evenement/",$row['regle_date_dernier_depot'])){
1619 $valF['date_dernier_depot']= $this->regle($row['regle_date_dernier_depot'], 'regle_date_dernier_depot');
1620 }
1621 if(preg_match("/date_evenement/",$row['regle_date_notification_delai'])){
1622 $valF['date_notification_delai']= $this->regle($row['regle_date_notification_delai'], 'regle_date_notification_delai');
1623 }
1624 if(preg_match("/date_evenement/",$row['regle_date_decision'])){
1625 $valF['date_decision']= $this->regle($row['regle_date_decision'], 'regle_date_decision');
1626 }
1627 if(preg_match("/date_evenement/",$row['regle_date_rejet'])){
1628 $valF['date_rejet']= $this->regle($row['regle_date_rejet'], 'regle_date_rejet');
1629 }
1630 if(preg_match("/date_evenement/",$row['regle_date_validite'])){
1631 $valF['date_validite']= $this->regle($row['regle_date_validite'], 'regle_date_validite');
1632 }
1633 if(preg_match("/date_evenement/",$row['regle_date_chantier'])){
1634 $valF['date_chantier']= $this->regle($row['regle_date_chantier'], 'regle_date_chantier');
1635 }
1636 if(preg_match("/date_evenement/",$row['regle_date_achevement'])){
1637 $valF['date_achevement']= $this->regle($row['regle_date_achevement'], 'regle_date_achevement');
1638 }
1639 if(preg_match("/date_evenement/",$row['regle_date_conformite'])){
1640 $valF['date_conformite']= $this->regle($row['regle_date_conformite'], 'regle_date_conformite');
1641 }
1642 }
1643 // Si des valeurs ont été calculées alors on met à jour l'enregistrement
1644 if ($valF != "") {
1645 // On met à jour le dossier
1646 $cle = " dossier='".$this->valF['dossier']."'";
1647 $res1 = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1648 $this->addToLog("triggermodifierapres(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1649 if (database::isError($res1)) {
1650 die($res->getMessage());
1651 }
1652 // Affichage d'informations à l'utilisateur
1653 $this->addToMessage(_('enregistrement')." ".$this->valF['dossier']." "._('table')." dossier [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1654 }
1655
1656 $restriction = $this->get_restriction($val['evenement']);
1657 $this->restriction_valid = $this->restrictionIsValid($restriction);
1658
1659 if($restriction == "" || $this->restriction_valid ){
1660 // Récupération de tous les paramètres de l'événement sélectionné
1661 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
1662 WHERE evenement=".$this->valF['evenement'];
1663 $res = $db->query($sql);
1664 $this->addToLog("triggermodifierapres(): db->query(\"".$sql."\");", VERBOSE_MODE);
1665 if (database::isError($res)) {
1666 die($res->getMessage());
1667 }
1668 $current_id = $this->getVal($this->clePrimaire);
1669 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1670 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1671 if ($this->getVal('date_retour_signature') == "" AND
1672 $this->valF['date_retour_signature'] != "" AND
1673 $row['evenement_retour_signature'] != "") {
1674 $new_instruction = new instruction("]", $db, $DEBUG);
1675 // Création d'un tableau avec la liste des champs de l'instruction
1676 foreach($new_instruction->champs as $champ) {
1677 $valNewInstr[$champ] = "";
1678 }
1679 // Définition des valeurs de la nouvelle instruction
1680 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1681 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1682 $valNewInstr["dossier"] = $this->valF['dossier'];
1683 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1684 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1685 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1686 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1687 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1688 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1689 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1690 $new_instruction->setParameter("maj", 0);
1691 $new_instruction->class_actions[0]["identifier"] =
1692 "retour signature de l'instruction $current_id";
1693 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1694
1695 //Si une erreur s'est produite et qu'il s'agit d'un problème
1696 //de restriction
1697 if ($retour == false && !$new_instruction->restriction_valid){
1698 $error_message = $this->get_restriction_error_message($restriction);
1699 $this->f->displayMessage("error", $error_message);
1700 $this->addToLog("triggermodifierapres() : evenement retour ".
1701 "instruction ".$this->valF[$this->clePrimaire]." : ".
1702 $new_instruction->msg);
1703 }
1704 //Si une erreur s'est produite après le test de la restriction
1705 elseif ($retour == false && $new_instruction->restriction_valid){
1706 $this->correct = false ;
1707 $this->msg .= $new_instruction->msg;
1708 return false;
1709 }
1710 }
1711 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1712 if ($this->getVal('date_retour_rar') == "" AND
1713 $this->valF['date_retour_rar'] != "") {
1714
1715 if($row['evenement_retour_ar'] != "") {
1716 $new_instruction = new instruction("]", $db, $DEBUG);
1717 // Création d'un tableau avec la liste des champs de l'instruction
1718 foreach($new_instruction->champs as $champ) {
1719 $valNewInstr[$champ] = "";
1720 }
1721 // Définition des valeurs de la nouvelle instruction
1722 $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1723 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1724 $valNewInstr["dossier"] = $this->valF['dossier'];
1725 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1726 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1727 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1728 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1729 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1730 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1731 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1732 $new_instruction->setParameter("maj", 0);
1733 $new_instruction->class_actions[0]["identifier"] =
1734 "retour RAR de l'instruction $current_id";
1735 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1736
1737 //Si une erreur s'est produite et qu'il s'agit d'un problème
1738 //de restriction
1739 if ($retour == false && !$new_instruction->restriction_valid) {
1740 $error_message = $this->get_restriction_error_message($restriction);
1741 $this->f->displayMessage("error", $error_message);
1742 $this->addToLog(
1743 "triggermodifierapres() : evenement retour instruction ".
1744 $this->valF[$this->clePrimaire]." : ".
1745 $new_instruction->msg
1746 );
1747 }
1748 //Si une erreur s'est produite après le test de la restriction
1749 elseif ($retour == false && $new_instruction->restriction_valid){
1750 $this->correct = false ;
1751 $this->msg .= $new_instruction->msg;
1752 return false;
1753 }
1754 }
1755 // Mise à jour du flag incomplet_notifie dans dossier si la
1756 // date limite d'instruction n'est pas dépassée
1757 if($row['type']=='incompletude' &&
1758 ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
1759 $this->valF['archive_date_notification_delai'] == "")) {
1760 $valFIncomp['incomplet_notifie'] = true;
1761 $cle = " dossier='".$val['dossier']."'";
1762 $resIncomp = $db->autoExecute(
1763 DB_PREFIXE.'dossier',
1764 $valFIncomp,
1765 DB_AUTOQUERY_UPDATE,
1766 $cle
1767 );
1768 $this->addToLog(
1769 "triggersupprimer(): db->autoexecute(\"".
1770 DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
1771 ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
1772 VERBOSE_MODE
1773 );
1774 if (database::isError($resIncomp)) {
1775 die($resIncomp->getMessage());
1776 }
1777 }
1778 }
1779 }
1780 }
1781
1782 //Récupération du type de l'événement
1783 $sql = "SELECT type
1784 FROM ".DB_PREFIXE."evenement
1785 WHERE evenement=".$this->valF['evenement'];
1786 $type_evmt = $db->getOne($sql);
1787 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1788 if (database::isError($type_evmt)) {
1789 die($type_evmt->getMessage());
1790 }
1791
1792 /**
1793 * REFERENTIEL ARRETE
1794 */
1795 // Si l'option référentiel arrêté est activé et l'événement est de type
1796 // arrêté
1797 if ($this->f->is_option_referentiel_arrete_enabled() === true
1798 && $type_evmt === "arrete"
1799 && $this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1800 //
1801 $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1802 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1803 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1804 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1805 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1806 '' as \"ws_DA_In_lieu_Redac\",
1807 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1808 '' as \"ws_DA_In_Sigle\",
1809 instruction.etat as \"ws_DA_In_Decision\",
1810 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1811 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1812 '' as \"ws_DA_In_Type_Voie\",
1813 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1814 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1815 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1816 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1817 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1818 '' as \"ws_DA_In_Detail_Parcelle\",
1819 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1820 '' as \"ws_DA_In_Destination_Trvx\",
1821 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1822 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1823 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1824 '' as \"ws_DA_In_Piece_GED\",
1825 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1826 FROM ".DB_PREFIXE."instruction
1827 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1828 instruction.signataire_arrete = signataire_arrete.signataire_arrete
1829 LEFT JOIN ".DB_PREFIXE."dossier ON
1830 instruction.dossier = dossier.dossier
1831 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1832 lien_dossier_demandeur.dossier = dossier.dossier
1833 LEFT JOIN ".DB_PREFIXE."demandeur ON
1834 lien_dossier_demandeur.demandeur = demandeur.demandeur
1835 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1836 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1837 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1838 dossier_instruction_type.dossier_autorisation_type_detaille =
1839 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1840 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1841 donnees_techniques.dossier_instruction = dossier.dossier
1842 WHERE instruction.instruction = ".$this->valF['instruction'];
1843 $resArrete = $this->db->query($sqlArrete);
1844 $this->f->addToLog(__METHOD__."(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1845 if (database::isError($resArrete)) {
1846 die();
1847 }
1848 $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1849 $ret = $this->send_message_to_referentiel_arrete($rowArrete);
1850 if ($ret !== true) {
1851 //On supprime les messages précédents
1852 $this->cleanMessage();
1853 $this->addToMessage(_("Une erreur s'est produite lors de ".
1854 "l'envoi du message au referentiel arrêté. Merci de ".
1855 "contacter votre administrateur."));
1856 //On ne valide pas le formulaire
1857 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1858 $this->correct = false;
1859 return false;
1860 } else {
1861 //
1862 $this->addToMessage(_("Le message a été transmis au référentiel arrêté."));
1863 }
1864 }
1865
1866 // Mise à jour des données du dossier d'autorisation
1867 require_once "../obj/dossier_autorisation.class.php";
1868 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1869 if($da->majDossierAutorisation() === false) {
1870 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1871 $this->correct = false;
1872 return false;
1873 }
1874 return $this->add_log_to_dossier($id, $val);
1875 }
1876
1877 function triggersupprimer($id,&$db,$val,$DEBUG) {
1878 /**
1879 * L'objectif ici est de repositionner les valeurs récupérées en
1880 * archive dans le dossier d'instruction avant de supprimer l'événement
1881 * d'instruction
1882 */
1883
1884 // Mise à jour des 4 valeurs modifiées par l'action
1885 $valF['delai'] = $val['archive_delai'];
1886 $valF['accord_tacite'] = $val['archive_accord_tacite'];
1887 $valF['etat'] = $val['archive_etat'];
1888 if ($val['archive_avis'] != '') {
1889 $valF['avis_decision'] = $val['archive_avis'];
1890 } else {
1891 $valF['avis_decision'] = NULL;
1892 }
1893 // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1894 // de suppression. Si la valeur de la date est vide alors on fixe
1895 // à la valeur NULL
1896 //
1897 if ($val['archive_date_complet'] != '') {
1898 $valF['date_complet'] = $val['archive_date_complet'];
1899 } else {
1900 $valF['date_complet'] = NULL;
1901 }
1902 if ($val['archive_date_dernier_depot'] != '') {
1903 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1904 } else {
1905 $valF['date_dernier_depot'] = NULL;
1906 }
1907 if ($val['archive_date_rejet'] != '') {
1908 $valF['date_rejet'] = $val['archive_date_rejet'];
1909 } else {
1910 $valF['date_rejet'] = NULL;
1911 }
1912 if ($val['archive_date_limite'] != '') {
1913 $valF['date_limite'] = $val['archive_date_limite'];
1914 } else {
1915 $valF['date_limite'] = NULL;
1916 }
1917 if ($val['archive_date_notification_delai'] != '') {
1918 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1919 } else {
1920 $valF['date_notification_delai'] = NULL;
1921 }
1922 if ($val['archive_date_decision'] != '') {
1923 $valF['date_decision'] = $val['archive_date_decision'];
1924 } else {
1925 $valF['date_decision'] = NULL;
1926 }
1927 if ($val['archive_date_validite'] != '') {
1928 $valF['date_validite'] = $val['archive_date_validite'];
1929 } else {
1930 $valF['date_validite'] = NULL;
1931 }
1932 if ($val['archive_date_achevement'] != '') {
1933 $valF['date_achevement'] = $val['archive_date_achevement'];
1934 } else {
1935 $valF['date_achevement'] = NULL;
1936 }
1937 if ($val['archive_date_chantier'] != '') {
1938 $valF['date_chantier'] = $val['archive_date_chantier'];
1939 } else {
1940 $valF['date_chantier'] = NULL;
1941 }
1942 if ($val['archive_date_conformite'] != '') {
1943 $valF['date_conformite'] = $val['archive_date_conformite'];
1944 } else {
1945 $valF['date_conformite'] = NULL;
1946 }
1947 if ($val['archive_incompletude'] != '') {
1948 $valF['incompletude'] = $val['archive_incompletude'];
1949 } else {
1950 $valF['incompletude'] = NULL;
1951 }
1952 if ($val['archive_incomplet_notifie'] != '') {
1953 $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
1954 } else {
1955 $valF['incomplet_notifie'] = NULL;
1956 }
1957 if ($val['archive_evenement_suivant_tacite'] != '') {
1958 $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1959 } else {
1960 $valF['evenement_suivant_tacite'] = NULL;
1961 }
1962 if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1963 $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1964 } else {
1965 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1966 }
1967 if ($val['archive_etat_pendant_incompletude'] != '') {
1968 $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1969 } else {
1970 $valF['etat_pendant_incompletude'] = NULL;
1971 }
1972 if ($val['archive_date_limite_incompletude'] != '') {
1973 $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1974 } else {
1975 $valF['date_limite_incompletude'] = NULL;
1976 }
1977 if ($val['archive_delai_incompletude'] != '') {
1978 $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1979 } else {
1980 $valF['delai_incompletude'] = NULL;
1981 }
1982 if ($val['archive_autorite_competente'] != '') {
1983 $valF['autorite_competente'] = $val['archive_autorite_competente'];
1984 } else {
1985 $valF['autorite_competente'] = NULL;
1986 }
1987 // On met à jour le dossier
1988 $cle = " dossier='".$val['dossier']."'";
1989 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1990 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1991 if (database::isError($res)) {
1992 die($res->getMessage());
1993 }
1994 // Affichage d'informations à l'utilisateur
1995 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
1996
1997 // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
1998 }
1999
2000 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
2001
2002 // Mise à jour des données du dossier d'autorisation
2003 require_once "../obj/dossier_autorisation.class.php";
2004 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
2005 if($da->majDossierAutorisation() === false) {
2006 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2007 $this->correct = false;
2008 return false;
2009 }
2010 $val['evenement'] = $this->getVal('evenement');
2011 return $this->add_log_to_dossier($id, $val);
2012 }
2013
2014 /**
2015 * Permet de composer un message d'erreur sur restriction non valide en
2016 * fonction du contexte.
2017 *
2018 * @param string $restriction formule de la restriction
2019 *
2020 * @return string message d'erreur
2021 */
2022 function get_restriction_error_message($restriction) {
2023 // Affichage du message si la restriction s'applique
2024 // Contexte du suivi des dates (message simple)
2025 $message_restrict = _("Probleme de dates :");
2026 // Split restriction
2027 $champs_restrict = preg_split(
2028 '/(\W+)/',
2029 $restriction,
2030 null,
2031 PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
2032 );
2033 $formated_restrict = "";
2034 // Ajout des chaînes à traduire
2035 foreach ($champs_restrict as $value) {
2036 $formated_restrict .= _($value)." ";
2037 }
2038 $formated_restrict = substr($formated_restrict, 0, -1);
2039 // Message d'erreur dans le contexte du suivi des dates
2040 if($this->getParameter("maj") == 170) {
2041 $message_restrict .= " "._("contactez l'instructeur du dossier");
2042 $message_restrict .= "<br/>(".$formated_restrict.")";
2043 } else {
2044 // Affichage du message si la restriction s'applique
2045 // Contexte instruction
2046 $message_restrict .= "<br/>".$formated_restrict;
2047 }
2048
2049 return $message_restrict;
2050 }
2051
2052 /**
2053 * Vérifie la restriction sur l'événement.
2054 *
2055 * @param array $val valeurs du formulaire
2056 * @param database $db handler database
2057 * @param boolean $DEBUG NA
2058 *
2059 * @return [type] [description]
2060 */
2061 function verifier($val = array(), &$db, $DEBUG) {
2062 parent::verifier($val, $db, $DEBUG);
2063
2064 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
2065 $restriction = $this->get_restriction($val['evenement']);
2066
2067 //Test qu'une restriction est présente
2068 if ($restriction != "" ){
2069
2070 //Test si la restriction est valide
2071 $this->restriction_valid = $this->restrictionIsValid($restriction);
2072 if ( !$this->restriction_valid ){
2073
2074 // Affichage du message si la restriction s'applique
2075 $this->addToMessage(
2076 $this->get_restriction_error_message($restriction)
2077 );
2078 $this->correct=false;
2079 return false;
2080 }
2081
2082 // Liste des opérateurs possible
2083 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
2084 // Supprime tous les espaces de la chaîne de caractère
2085 $restriction = str_replace(' ', '', $restriction);
2086
2087 // Met des espace avant et après les opérateurs puis transforme la
2088 // chaine en un tableau
2089 $tabRestriction = str_replace($operateurs, " ", $restriction);
2090 // Tableau des champ
2091 $tabRestriction = explode(" ", $tabRestriction);
2092 // Supprime les numériques du tableau
2093 foreach ($tabRestriction as $key => $value) {
2094 if (is_numeric($value)) {
2095 unset($tabRestriction[$key]);
2096 }
2097 }
2098
2099 // Vérifie les champs utilisés pour la restriction
2100 $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
2101 if ($check_field_exist !== true) {
2102
2103 // Liste des champs en erreur
2104 $string_error_fields = implode(", ", $check_field_exist);
2105
2106 // Message d'erreur
2107 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
2108 if (count($check_field_exist) > 1) {
2109 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
2110 }
2111
2112 // Affiche l'erreur
2113 $this->correct=false;
2114 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
2115 $this->addToMessage(_("Veuillez contacter votre administrateur."));
2116 }
2117 }
2118
2119 }
2120 if(!$this->updateDate("date_envoi_signature")) {
2121 return false;
2122 }
2123 if(!$this->updateDate("date_retour_signature")) {
2124 return false;
2125 }
2126 if(!$this->updateDate("date_envoi_rar")) {
2127 return false;
2128 }
2129 if(!$this->updateDate("date_retour_rar")) {
2130 return false;
2131 }
2132 if(!$this->updateDate("date_envoi_controle_legalite")) {
2133 return false;
2134 }
2135 if(!$this->updateDate("date_retour_controle_legalite")) {
2136 return false;
2137 }
2138
2139 }
2140
2141 /**
2142 * Méthode permettant de récupérer toutes les valeurs de l'événement
2143 * sélectionné après validation du formulaire d'instruction
2144 *
2145 * @return array() veleurs de l'événement lié
2146 */
2147
2148 private function getValEvenement() {
2149 if(!empty($this->valEvenement)) {
2150 return $this->valEvenement;
2151 } else {
2152 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2153 WHERE evenement=".$this->valF['evenement'];
2154 $res = $this->db->query($sql);
2155 $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
2156 if (database::isError($res)) {
2157 die($res->getMessage());
2158 }
2159 $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
2160 return $this->valEvenement;
2161 }
2162 }
2163
2164 /**
2165 * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
2166 * incompletude à true après validation du formulaire d'instruction
2167 *
2168 * @return boolean
2169 */
2170 private function dossierIncomplet() {
2171 $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
2172 WHERE dossier='".$this->valF['dossier']."'";
2173 $incompletude = $this->db->getOne($sql);
2174 $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
2175 if (database::isError($incompletude)) {
2176 die($incompletude->getMessage());
2177 }
2178 if ($incompletude == 't') {
2179 return true;
2180 } else {
2181 return false;
2182 }
2183 }
2184
2185 /**
2186 * Finalisation des documents.
2187 * @param string $champ champ du fichier à finaliser
2188 * @param booleen $status permet de définir si on finalise ou définalise
2189 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
2190 */
2191 function manage_finalizing($mode = null, $val = array()) {
2192
2193 // Si le mode n'existe pas on retourne false
2194 if ($mode != "finalize" && $mode != "unfinalize") {
2195 return false;
2196 }
2197
2198 // Recuperation de la valeur de la cle primaire de l'objet
2199 $id = $this->getVal($this->clePrimaire);
2200
2201 // Si on finalise le document
2202 if ($mode == "finalize"){
2203
2204 // Récupère la collectivite du dossier d'instruction
2205 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2206
2207 //
2208 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2209
2210 // Génération du PDF
2211 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite);
2212 $pdf_output = $result['pdf_output'];
2213
2214 //Métadonnées du document
2215 $metadata = array(
2216 'filename' => 'instruction_'.$id.'.pdf',
2217 'mimetype' => 'application/pdf',
2218 'size' => strlen($pdf_output)
2219 );
2220
2221 // Récupération des métadonnées calculées après validation
2222 $spe_metadata = $this->getMetadata("om_fichier_instruction");
2223
2224 //On vérifie si l'instruction à finaliser a un événement de type arrete
2225 $sql = "SELECT type
2226 FROM ".DB_PREFIXE."evenement
2227 WHERE evenement = ".$this->getVal("evenement");
2228 $typeEvenement = $this->db->getOne($sql);
2229 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2230 if (database::isError($typeEvenement, true)) {
2231 die();
2232 }
2233
2234 //Initialisation de la variable
2235 $arrete_metadata = array();
2236 // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2237 if ( $typeEvenement === 'arrete' ){
2238 $arrete_metadata = $this->getMetadata("arrete");
2239 }
2240
2241 $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2242
2243 // Si le document a déjà été finalisé
2244 // met à jour le document mais pas son uid
2245 if ($this->getVal("om_fichier_instruction") != ''){
2246
2247 // Met à jour le document
2248 $uid = $this->f->storage->update(
2249 $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2250 }
2251 //Sinon, ajoute le document et récupère son uid
2252 else {
2253
2254 //Stockage du PDF
2255 $uid = $this->f->storage->create($pdf_output, $metadata);
2256 }
2257 }
2258
2259 // Si on finalise le document
2260 if ($mode == "unfinalize") {
2261
2262 // Récupération de l'uid du document finalisé
2263 $uid = $this->getVal("om_fichier_instruction");
2264 }
2265
2266 //
2267 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2268 // Stop le traitement
2269 return false;
2270
2271 // Message d'echec (saut d'une ligne supplementaire avant le
2272 // message pour qu'il soit mis en evidence)
2273 $this->addToLog(
2274 _("Finalisation non enregistree")." - ".
2275 _("id instruction")." = ".$id." - ".
2276 _("uid fichier")." = ".$uid
2277 );
2278 }
2279
2280 // Logger
2281 $this->addToLog(__METHOD__."() - begin", EXTRA_VERBOSE_MODE);
2282
2283 //
2284 foreach ($this->champs as $key => $champ) {
2285 //
2286 $val[$champ] = $this->val[$key];
2287 }
2288
2289 //
2290 $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2291 $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2292 $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2293 $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2294 $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2295 $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2296 $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2297 $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2298 $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2299 $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2300 $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2301 $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2302 $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2303 $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2304 $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2305 $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2306 $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2307 $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2308 $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2309
2310 $this->setvalF($val);
2311
2312 // Verification de la validite des donnees
2313 $this->verifier($this->val, $this->db, DEBUG);
2314 // Si les verifications precedentes sont correctes, on procede a
2315 // la modification, sinon on ne fait rien et on retourne une erreur
2316 if ($this->correct) {
2317 // Execution du trigger 'before' specifique au MODE 'update'
2318 $this->triggermodifier($id, $this->db, $this->val, DEBUG);
2319
2320 //
2321 $valF = array(
2322 "om_fichier_instruction" => $uid,
2323 "date_finalisation_courrier" => date('Y-m-d')
2324 );
2325 //
2326 if($mode=="finalize") {
2327 // état finalisé vrai
2328 $valF["om_final_instruction"] = 't';
2329 // ajout log utilisateur
2330 $login = $_SESSION['login'];
2331 $nom = "";
2332 $this->f->getUserInfos();
2333 if (isset($this->f->om_utilisateur["nom"])
2334 && !empty($this->f->om_utilisateur["nom"])) {
2335 $nom = $this->f->om_utilisateur["nom"];
2336 }
2337 $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
2338 if ($nom != "") {
2339 $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
2340 }
2341 } else {
2342 // état finalisé faux
2343 $valF["om_final_instruction"] = 'f';
2344 // suppression log utilisateur
2345 $valF["om_final_instruction_utilisateur"] = '';
2346 }
2347
2348 // Execution de la requête de modification des donnees de l'attribut
2349 // valF de l'objet dans l'attribut table de l'objet
2350 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2351 DB_AUTOQUERY_UPDATE, $this->getCle($id));
2352 $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2353 // Si une erreur survient
2354 if (database::isError($res, true)) {
2355 // Appel de la methode de recuperation des erreurs
2356 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2357 } else {
2358 // Log
2359 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2360 // Log
2361 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2362 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2363 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2364 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2365 $this->addToLog($message, VERBOSE_MODE);
2366 // Execution du trigger 'after' specifique au MODE 'update'
2367 //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2368
2369 if($mode == "finalize") {
2370 $etat = _('finalisation');
2371 } else {
2372 $etat = _('definalisation');
2373 }
2374 $this->msg = "";
2375 $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2376
2377 return $this->add_log_to_dossier($id, $val);
2378 }
2379 } else {
2380 // Message d'echec (saut d'une ligne supplementaire avant le
2381 // message pour qu'il soit mis en evidence)
2382 $this->addToLog(
2383 _("Finalisation non enregistree")." - ".
2384 _("id instruction")." = ".$id." - ".
2385 _("uid fichier")." = ".$uid
2386 );
2387 return false;
2388 }
2389 }
2390
2391 /**
2392 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2393 * @return string numéro de dossier d'instruction
2394 */
2395 protected function getDossier() {
2396 if(empty($this->specificMetadata)) {
2397 $this->getSpecificMetadata();
2398 }
2399 return $this->specificMetadata->dossier;
2400 }
2401 /**
2402 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2403 * @return int Version
2404 */
2405 protected function getDossierVersion() {
2406 if(empty($this->specificMetadata)) {
2407 $this->getSpecificMetadata();
2408 }
2409 return $this->specificMetadata->version;
2410 }
2411 /**
2412 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2413 * @return string numéro de dossier d'autorisation
2414 */
2415 protected function getNumDemandeAutor() {
2416 if(empty($this->specificMetadata)) {
2417 $this->getSpecificMetadata();
2418 }
2419 return $this->specificMetadata->dossier_autorisation;
2420 }
2421 /**
2422 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2423 * @return date de la demande initiale
2424 */
2425 protected function getAnneemoisDemandeAutor() {
2426 if(empty($this->specificMetadata)) {
2427 $this->getSpecificMetadata();
2428 }
2429 return $this->specificMetadata->date_demande_initiale;
2430 }
2431 /**
2432 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2433 * @return string type du dossier d'instruction
2434 */
2435 protected function getTypeInstruction() {
2436 if(empty($this->specificMetadata)) {
2437 $this->getSpecificMetadata();
2438 }
2439 return $this->specificMetadata->dossier_instruction_type;
2440 }
2441 /**
2442 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2443 * @return string avis
2444 */
2445 protected function getStatutAutorisation() {
2446 if(empty($this->specificMetadata)) {
2447 $this->getSpecificMetadata();
2448 }
2449 return $this->specificMetadata->statut;
2450 }
2451 /**
2452 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2453 * @return string type du dossier d'autorisation
2454 */
2455 protected function getTypeAutorisation() {
2456 if(empty($this->specificMetadata)) {
2457 $this->getSpecificMetadata();
2458 }
2459 return $this->specificMetadata->dossier_autorisation_type;
2460 }
2461 /**
2462 * Récupération de la date d'ajout de document à ajouter aux métadonnées
2463 * @return date de l'évènement
2464 */
2465 protected function getDateEvenementDocument() {
2466 return date("Y-m-d");
2467 }
2468 /**
2469 * Récupération du groupe d'instruction à ajouter aux métadonnées
2470 * @return string Groupe d'instruction
2471 */
2472 protected function getGroupeInstruction() {
2473 if(empty($this->specificMetadata)) {
2474 $this->getSpecificMetadata();
2475 }
2476 return $this->specificMetadata->groupe_instruction;
2477 }
2478 /**
2479 * Récupération du libellé du type du document à ajouter aux métadonnées
2480 * @return string Groupe d'instruction
2481 */
2482 protected function getTitle() {
2483
2484 // Récupère le champ événement
2485 if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2486 $evenement = $this->valF["evenement"];
2487 } else {
2488 $evenement = $this->getVal("evenement");
2489 }
2490
2491 // Requête sql
2492 $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2493 WHERE evenement=".$evenement;
2494 $evenement_libelle = $this->db->getOne($sql);
2495 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2496 if (database::isError($evenement_libelle)) {
2497 die();
2498 }
2499
2500 // Retourne le libelle de l'événement
2501 return $evenement_libelle;
2502 }
2503
2504 /**
2505 * Cette méthode permet de stocker en attribut toutes les métadonnées
2506 * nécessaire à l'ajout d'un document.
2507 */
2508 public function getSpecificMetadata() {
2509 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2510 $dossier = $this->valF["dossier"];
2511 } else {
2512 $dossier = $this->getVal("dossier");
2513 }
2514 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2515 $sql = "SELECT dossier.dossier as dossier,
2516 dossier_autorisation.dossier_autorisation as dossier_autorisation,
2517 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2518 dossier_instruction_type.code as dossier_instruction_type,
2519 etat_dossier_autorisation.libelle as statut,
2520 dossier_autorisation_type.code as dossier_autorisation_type,
2521 groupe.code as groupe_instruction
2522 FROM ".DB_PREFIXE."dossier
2523 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2524 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2525 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2526 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2527 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2528 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2529 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2530 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2531 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2532 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2533 LEFT JOIN ".DB_PREFIXE."groupe
2534 ON dossier_autorisation_type.groupe = groupe.groupe
2535 WHERE dossier.dossier = '".$dossier."'";
2536 $res = $this->db->query($sql);
2537 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2538 if ( database::isError($res)){
2539 die();
2540 }
2541
2542 //Le résultat est récupéré dans un objet
2543 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2544
2545 //Si il y a un résultat
2546 if ($row !== null) {
2547
2548 // Instrance de la classe dossier
2549 $inst_dossier = $this->get_inst_dossier($dossier);
2550
2551 // Insère l'attribut version à l'objet
2552 $row->version = $inst_dossier->get_dossier_instruction_version();
2553
2554 //Alors on créé l'objet dossier_instruction
2555 $this->specificMetadata = $row;
2556
2557 }
2558 }
2559
2560 /**
2561 * Retourne le statut du dossier d'instruction
2562 * @param string $idx Identifiant du dossier d'instruction
2563 * @return string Le statut du dossier d'instruction
2564 */
2565 function getStatutAutorisationDossier($idx){
2566
2567 $statut = '';
2568
2569 //Si l'identifiant du dossier d'instruction fourni est correct
2570 if ( $idx != '' ){
2571
2572 //On récupère le statut de l'état du dossier à partir de l'identifiant du
2573 //dossier
2574 $sql = "SELECT etat.statut
2575 FROM ".DB_PREFIXE."dossier
2576 LEFT JOIN
2577 ".DB_PREFIXE."etat
2578 ON
2579 dossier.etat = etat.etat
2580 WHERE dossier ='".$idx."'";
2581 $statut = $this->db->getOne($sql);
2582 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2583 if ( database::isError($statut)){
2584 die();
2585 }
2586 }
2587 return $statut;
2588 }
2589
2590 /**
2591 * Récupère les données du dossier
2592 * @return array
2593 */
2594 function get_dossier_actual() {
2595
2596 // Initialisation de la valeur de retour
2597 $return = array();
2598
2599 // Récupération de toutes les valeurs du dossier d'instruction en cours
2600 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2601 WHERE dossier='".$this->valF['dossier']."'";
2602 $res = $this->db->query($sql);
2603 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2604 $this->f->isDatabaseError($res);
2605
2606 //
2607 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2608
2609 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2610 // de l'état et de l'avis du dossier d'instruction
2611 $return['archive_delai']=$row['delai'];
2612 $return['archive_accord_tacite']=$row['accord_tacite'];
2613 $return['archive_etat']=$row['etat'];
2614 $return['archive_avis']=$row['avis_decision'];
2615 // Récupération de la valeur actuelle des 9 dates du dossier
2616 // d'instruction
2617 $return['archive_date_complet']=$row['date_complet'];
2618 $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2619 $return['archive_date_rejet']= $row['date_rejet'];
2620 $return['archive_date_limite']= $row['date_limite'];
2621 $return['archive_date_notification_delai']= $row['date_notification_delai'];
2622 $return['archive_date_decision']= $row['date_decision'];
2623 $return['archive_date_validite']= $row['date_validite'];
2624 $return['archive_date_achevement']= $row['date_achevement'];
2625 $return['archive_date_chantier']= $row['date_chantier'];
2626 $return['archive_date_conformite']= $row['date_conformite'];
2627 $return['archive_incompletude']= $row['incompletude'];
2628 $return['archive_incomplet_notifie']= $row['incomplet_notifie'];
2629 $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2630 $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2631 $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2632 $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2633 $return['archive_delai_incompletude']= $row['delai_incompletude'];
2634 $return['archive_autorite_competente']= $row['autorite_competente'];
2635 $return['duree_validite']= $row['duree_validite'];
2636 $return['date_depot']= $row['date_depot'];
2637 }
2638
2639 // Retour de la fonction
2640 return $return;
2641
2642 }
2643
2644 /**
2645 * Permet de vérifier qu'un événement est verrouillable
2646 * @param integer $idx Identifiant de l'instruction
2647 * @return boolean
2648 */
2649 function checkEvenementNonVerrouillable($idx) {
2650
2651 // Initialisation du résultat
2652 $non_verrouillable = false;
2653
2654 // Si la condition n'est pas vide
2655 if ($idx != "") {
2656
2657 // Requête SQL
2658 $sql = "SELECT evenement.non_verrouillable
2659 FROM ".DB_PREFIXE."evenement
2660 LEFT JOIN ".DB_PREFIXE."instruction
2661 ON instruction.evenement = evenement.evenement
2662 WHERE instruction.instruction = $idx";
2663 $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2664 $res = $this->db->getOne($sql);
2665 $this->f->isDatabaseError($res);
2666
2667 // Si le retour de la requête est true
2668 if ($res == 't') {
2669 //
2670 $non_verrouillable = true;
2671 }
2672 }
2673
2674 // Retourne résultat
2675 return $non_verrouillable;
2676 }
2677
2678 /**
2679 * Mise à jour des champs archive_*
2680 * @param mixed $row La ligne de données
2681 */
2682 public function updateArchiveData($row){
2683
2684 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2685 // de l'état et de l'avis du dossier d'instruction
2686 $this->valF['archive_delai']=$row['delai'];
2687 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2688 $this->valF['archive_etat']=$row['etat'];
2689 $this->valF['archive_avis']=$row['avis_decision'];
2690 // Récupération de la valeur actuelle des 9 dates du dossier
2691 // d'instruction
2692 if ($row['date_complet'] != '') {
2693 $this->valF['archive_date_complet']=$row['date_complet'];
2694 }
2695 if ($row['date_dernier_depot'] != '') {
2696 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2697 }
2698 if ($row['date_rejet']!='') {
2699 $this->valF['archive_date_rejet']= $row['date_rejet'];
2700 }
2701 if ($row['date_limite']!='') {
2702 $this->valF['archive_date_limite']= $row['date_limite'];
2703 }
2704 if ($row['date_notification_delai']!='') {
2705 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2706 }
2707 if ($row['date_decision']!='') {
2708 $this->valF['archive_date_decision']= $row['date_decision'];
2709 }
2710 if ($row['date_validite']!='') {
2711 $this->valF['archive_date_validite']= $row['date_validite'];
2712 }
2713 if ($row['date_achevement']!='') {
2714 $this->valF['archive_date_achevement']= $row['date_achevement'];
2715 }
2716 if ($row['date_chantier']!='') {
2717 $this->valF['archive_date_chantier']= $row['date_chantier'];
2718 }
2719 if ($row['date_conformite']!='') {
2720 $this->valF['archive_date_conformite']= $row['date_conformite'];
2721 }
2722 if ($row['incompletude']!='') {
2723 $this->valF['archive_incompletude']= $row['incompletude'];
2724 }
2725 if ($row['incomplet_notifie']!='') {
2726 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
2727 }
2728 if ($row['evenement_suivant_tacite']!='') {
2729 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2730 }
2731 if ($row['evenement_suivant_tacite_incompletude']!='') {
2732 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2733 }
2734 if ($row['etat_pendant_incompletude']!='') {
2735 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2736 }
2737 if ($row['date_limite_incompletude']!='') {
2738 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2739 }
2740 if ($row['delai_incompletude']!='') {
2741 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
2742 }
2743 if ($row['autorite_competente']!='') {
2744 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
2745 }
2746 if ($row['duree_validite']!='') {
2747 $this->valF['duree_validite']= $row['duree_validite'];
2748 }
2749 if ($row['date_depot']!='') {
2750 $this->valF['date_depot']= $row['date_depot'];
2751 }
2752 }
2753
2754 // {{{
2755 // Méthodes de récupération des métadonnées arrêté
2756 /**
2757 * @return string Retourne le numéro d'arrêté
2758 */
2759 function getNumArrete() {
2760 return $this->getVal("numero_arrete");
2761 }
2762 /**
2763 * @return chaîne vide
2764 */
2765 function getReglementaireArrete() {
2766 return 'true';
2767 }
2768 /**
2769 * @return boolean de notification au pétitionnaire
2770 */
2771 function getNotificationArrete() {
2772 return 'true';
2773 }
2774 /**
2775 * @return date de notification au pétitionnaire
2776 */
2777 function getDateNotificationArrete() {
2778 if (empty($this->metadonneesArrete)) {
2779 $this->getArreteMetadata();
2780 }
2781 return $this->metadonneesArrete["datenotification"];
2782 }
2783 /**
2784 * @return boolean check si le document est passé au contrôle de légalité
2785 */
2786 function getControleLegalite() {
2787 return 'true';
2788 }
2789 /**
2790 * @return date de signature de l'arrêté
2791 */
2792 function getDateSignature() {
2793 if (empty($this->metadonneesArrete)) {
2794 $this->getArreteMetadata();
2795 }
2796 return $this->metadonneesArrete["datesignaturearrete"];
2797 }
2798 /**
2799 * @return string nom du signataire
2800 */
2801 function getNomSignataire() {
2802 if (empty($this->metadonneesArrete)) {
2803 $this->getArreteMetadata();
2804 }
2805 return $this->metadonneesArrete["nomsignataire"];
2806 }
2807 /**
2808 * @return string qualité du signataire
2809 */
2810 function getQualiteSignataire() {
2811 if (empty($this->metadonneesArrete)) {
2812 $this->getArreteMetadata();
2813 }
2814 return $this->metadonneesArrete["qualitesignataire"];
2815 }
2816 /**
2817 * @return string numéro du terrain
2818 */
2819 function getAp_numRue() {
2820 if (empty($this->metadonneesArrete)) {
2821 $this->getArreteMetadata();
2822 }
2823 return $this->metadonneesArrete["ap_numrue"];
2824 }
2825 /**
2826 * @return string nom de la rue du terrain
2827 */
2828 function getAp_nomDeLaVoie() {
2829 if (empty($this->metadonneesArrete)) {
2830 $this->getArreteMetadata();
2831 }
2832 return $this->metadonneesArrete["ap_nomdelavoie"];
2833 }
2834 /**
2835 * @return string code postal du terrain
2836 */
2837 function getAp_codePostal() {
2838 if (empty($this->metadonneesArrete)) {
2839 $this->getArreteMetadata();
2840 }
2841 return $this->metadonneesArrete["ap_codepostal"];
2842 }
2843 /**
2844 * @return string ville du terrain
2845 */
2846 function getAp_ville() {
2847 if (empty($this->metadonneesArrete)) {
2848 $this->getArreteMetadata();
2849 }
2850 return $this->metadonneesArrete["ap_ville"];
2851 }
2852 /**
2853 * @return string activité
2854 */
2855 function getActivite() {
2856 return "Droit du sol";
2857 }
2858 /**
2859 * @return string date du retour de controle légalité
2860 */
2861 function getDateControleLegalite() {
2862 if (empty($this->metadonneesArrete)) {
2863 $this->getArreteMetadata();
2864 }
2865 return $this->metadonneesArrete["datecontrolelegalite"];
2866 }
2867
2868 // Fin des méthodes de récupération des métadonnées
2869 // }}}
2870
2871 /**
2872 * Méthode de récupération des métadonnées arrêtés dans la base de données,
2873 * les données sont stockés dans l'attribut $this->metadonneesArrete
2874 */
2875 function getArreteMetadata() {
2876
2877 //Récupération de la dernière instruction dont l'événement est de type 'arrete'
2878 $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
2879 "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
2880 "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
2881 "ap_codepostal"=>"", "ap_ville"=>"");
2882
2883 $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
2884 signataire_arrete.qualite as \"qualitesignataire\",
2885 instruction.etat as \"decisionarrete\",
2886 instruction.date_retour_rar as \"datenotification\",
2887 instruction.date_retour_signature as \"datesignaturearrete\",
2888 instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
2889 dossier.terrain_adresse_voie_numero as \"ap_numrue\",
2890 dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
2891 dossier.terrain_adresse_code_postal as \"ap_codepostal\",
2892 dossier.terrain_adresse_localite as \"ap_ville\"
2893 FROM ".DB_PREFIXE."instruction
2894 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
2895 instruction.signataire_arrete = signataire_arrete.signataire_arrete
2896 LEFT JOIN ".DB_PREFIXE."dossier ON
2897 instruction.dossier = dossier.dossier
2898 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
2899 donnees_techniques.dossier_instruction = dossier.dossier
2900 WHERE instruction.instruction = ".$this->getVal("instruction");
2901 $resArrete = $this->db->query($sqlArrete);
2902 $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
2903 if ( database::isError($resArrete)){
2904 die();
2905 }
2906
2907 $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
2908 }
2909
2910 /**
2911 * CONDITION - has_an_edition.
2912 *
2913 * Condition pour afficher le bouton de visualisation de l'édition.
2914 *
2915 * @return boolean
2916 */
2917 function has_an_edition() {
2918 // Récupère la valeur du champ lettretype
2919 $lettretype = $this->getVal("lettretype");
2920 // Si le champ est vide
2921 if (empty($lettretype)) {
2922 //
2923 return false;
2924 }
2925
2926 //
2927 return true;
2928 }
2929
2930 /**
2931 * CONDITION - is_editable.
2932 *
2933 * Condition pour la modification.
2934 *
2935 * @return boolean
2936 */
2937 function is_editable() {
2938 // Contrôle si l'utilisateur possède un bypass
2939 $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
2940 //
2941 if ($bypass == true) {
2942
2943 //
2944 return true;
2945 }
2946
2947 // Si l'utilisateur est un intructeur qui ne correspond pas à la
2948 // division du dossier
2949 if ($this->f->isUserInstructeur()
2950 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
2951 && $this->f->isAccredited("instruction_changer_decision") === false) {
2952
2953 //
2954 return false;
2955 }
2956
2957 // si instructeur commune
2958 if($this->f->isAccredited("instruction_changer_decision") === true
2959 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
2960 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
2961 || $this->getVal('created_by_commune') !== 't')) {
2962 return false;
2963 }
2964 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
2965 // que l'événement n'est pas identifié comme non verrouillable
2966 if ($this->f->isUserInstructeur()
2967 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
2968 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
2969
2970 //
2971 return false;
2972 }
2973
2974 //
2975 return true;
2976 }
2977
2978 /**
2979 * CONDITION - is_deletable.
2980 *
2981 * Condition pour lma modification.
2982 *
2983 * @return boolean
2984 */
2985 function is_deletable() {
2986 // Contrôle si l'utilisateur possède un bypass
2987 $bypass = $this->f->isAccredited(get_class()."_supprimer_bypass");
2988 //
2989 if ($bypass == true) {
2990
2991 //
2992 return true;
2993 }
2994
2995 // Si l'utilisateur est un intructeur qui ne correspond pas à la
2996 // division du dossier
2997 if ($this->f->isUserInstructeur()
2998 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
2999
3000 //
3001 return false;
3002 }
3003
3004 //
3005 return true;
3006 }
3007
3008 /**
3009 * CONDITION - is_addable.
3010 *
3011 * Condition pour afficher les boutons modifier et supprimer.
3012 *
3013 * @return boolean
3014 */
3015 function is_addable() {
3016 // Contrôle si l'utilisateur possède un bypass
3017 $bypass = $this->f->isAccredited(get_class()."_ajouter_bypass");
3018 //
3019 if ($bypass == true) {
3020
3021 //
3022 return true;
3023 }
3024
3025 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3026 // division du dossier
3027 if ($this->f->isUserInstructeur()
3028 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3029 && $this->f->isAccredited("instruction_changer_decision") === false) {
3030
3031 //
3032 return false;
3033 }
3034
3035 // si instructeur commune
3036 if($this->f->isAccredited("instruction_changer_decision") === false
3037 && $this->f->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3038 return false;
3039 }
3040
3041
3042 //
3043 return true;
3044 }
3045
3046 /**
3047 * CONDITION - is_finalizable.
3048 *
3049 * Condition pour afficher le bouton.
3050 *
3051 * @return boolean
3052 */
3053 function is_finalizable() {
3054 // Contrôle si l'utilisateur possède un bypass
3055 $bypass = $this->f->isAccredited(get_class()."_finaliser_bypass");
3056 //
3057 if ($bypass == true) {
3058
3059 //
3060 return true;
3061 }
3062
3063 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3064 // division du dossier
3065 if ($this->f->isUserInstructeur()
3066 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3067 && $this->f->isAccredited("instruction_changer_decision") === false) {
3068
3069 //
3070 return false;
3071 }
3072
3073 // si instructeur commune
3074 if($this->f->isAccredited("instruction_changer_decision") === true
3075 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3076 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
3077 || $this->getVal('created_by_commune') !== 't')) {
3078 return false;
3079 }
3080
3081 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3082 // que l'événement n'est pas identifié comme non verrouillable
3083 if ($this->f->isUserInstructeur()
3084 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3085 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3086
3087 //
3088 return false;
3089 }
3090
3091 //
3092 return true;
3093 }
3094
3095 /**
3096 * CONDITION - is_finalize_without_bypass.
3097 *
3098 * Condition pour afficher le bouton sans le bypass.
3099 *
3100 * @return boolean [description]
3101 */
3102 function is_finalizable_without_bypass() {
3103 // Récupère la valeur du champ finalisé
3104 $om_final_instruction = $this->getVal('om_final_instruction');
3105
3106 // Si le rapport n'est pas finalisé
3107 if (empty($om_final_instruction)
3108 || $om_final_instruction == 'f') {
3109 //
3110 return true;
3111 }
3112
3113 //
3114 return false;
3115 }
3116
3117 /**
3118 * CONDITION - is_unfinalizable.
3119 *
3120 * Condition pour afficher le bouton.
3121 *
3122 * @return boolean
3123 */
3124 function is_unfinalizable(){
3125 // Contrôle si l'utilisateur possède un bypass
3126 $bypass = $this->f->isAccredited(get_class()."_definaliser_bypass");
3127 //
3128 if ($bypass == true) {
3129
3130 //
3131 return true;
3132 }
3133
3134 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3135 // division du dossier
3136 if ($this->f->isUserInstructeur()
3137 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3138 && $this->f->isAccredited("instruction_changer_decision") === false) {
3139
3140 //
3141 return false;
3142 }
3143
3144 // si instructeur commune
3145 if($this->f->isAccredited("instruction_changer_decision") === true
3146 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3147 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
3148 || $this->getVal('created_by_commune') !== 't')) {
3149 return false;
3150 }
3151
3152 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3153 // que l'événement n'est pas identifié comme non verrouillable
3154 if ($this->f->isUserInstructeur()
3155 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3156 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3157
3158 //
3159 return false;
3160 }
3161
3162 //
3163 return true;
3164 }
3165
3166 /**
3167 * CONDITION - is_unfinalizable_without_bypass.
3168 *
3169 * Condition pour afficher le bouton sans le bypass.
3170 *
3171 * @return boolean
3172 */
3173 function is_unfinalizable_without_bypass() {
3174 // Récupère la valeur du champ finalisé
3175 $om_final_instruction = $this->getVal('om_final_instruction');
3176
3177 // Si l'instruction est finalisée
3178 if ($om_final_instruction == 't') {
3179 //
3180 return true;
3181 }
3182
3183 //
3184 return false;
3185 }
3186
3187 /**
3188 * TREATMENT - finalize.
3189 *
3190 * Permet de finaliser un enregistrement.
3191 *
3192 * @param array $val valeurs soumises par le formulaire
3193 *
3194 * @return boolean
3195 */
3196 function finalize($val = array()) {
3197
3198 // Cette méthode permet d'exécuter une routine en début des méthodes
3199 // dites de TREATMENT.
3200 $this->begin_treatment(__METHOD__);
3201
3202 // Traitement de la finalisation
3203 $ret = $this->manage_finalizing("finalize", $val);
3204
3205 // Si le traitement retourne une erreur
3206 if ($ret !== true) {
3207
3208 // Termine le traitement
3209 $this->end_treatment(__METHOD__, false);
3210 }
3211
3212 // Termine le traitement
3213 return $this->end_treatment(__METHOD__, true);
3214 }
3215
3216 /**
3217 * TREATMENT - unfinalize.
3218 *
3219 * Permet de définaliser un enregistrement.
3220 *
3221 * @param array $val valeurs soumises par le formulaire
3222 *
3223 * @return boolean
3224 */
3225 function unfinalize($val = array()) {
3226
3227 // Cette méthode permet d'exécuter une routine en début des méthodes
3228 // dites de TREATMENT.
3229 $this->begin_treatment(__METHOD__);
3230
3231 // Traitement de la finalisation
3232 $ret = $this->manage_finalizing("unfinalize", $val);
3233
3234 // Si le traitement retourne une erreur
3235 if ($ret !== true) {
3236
3237 // Termine le traitement
3238 $this->end_treatment(__METHOD__, false);
3239 }
3240
3241 // Termine le traitement
3242 return $this->end_treatment(__METHOD__, true);
3243 }
3244
3245 /**
3246 * VIEW - view_edition
3247 *
3248 * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
3249 *
3250 * @return null Si l'action est incorrecte
3251 */
3252 function view_edition() {
3253
3254 // Si l'instruction est finalisée
3255 if($this->getVal("om_final_instruction") == 't'
3256 && $this->getVal("om_final_instruction") != null) {
3257
3258 // Ouvre le document
3259 $lien = '../spg/file.php?obj='.$this->table.'&'.
3260 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
3261 //
3262 header("Location: ".$lien);
3263 } else {
3264
3265 // Récupère la collectivite du dossier d'instruction
3266 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
3267
3268 //
3269 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
3270
3271 // Paramètre du PDF
3272 $params = array(
3273 "watermark" => true,
3274 "specific" => array(
3275 "mode" => "previsualisation",
3276 ),
3277 );
3278
3279 // Génération du PDF
3280 $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
3281 // Affichage du PDF
3282 $this->expose_pdf_output(
3283 $result['pdf_output'],
3284 $result['filename']
3285 );
3286 }
3287 }
3288
3289 /**
3290 * Récupère la collectivité du dossier d'instruction.
3291 *
3292 * @return integer
3293 */
3294 function get_dossier_instruction_om_collectivite() {
3295
3296 //
3297 require_once "../obj/dossier_instruction.class.php";
3298 $dossier_instruction = new dossier_instruction($this->getVal('dossier'), $this->f->db, false);
3299
3300 //
3301 return $dossier_instruction->getVal('om_collectivite');
3302 }
3303
3304 /**
3305 * VIEW - view_bible
3306 *
3307 * Affiche la bible manuelle.
3308 *
3309 * @return void
3310 */
3311 function view_bible() {
3312 // Vérification de l'accessibilité sur l'élément
3313 $this->checkAccessibility();
3314
3315 // XXX APP
3316
3317 $f = $this->f;
3318
3319 /**
3320 * Affichage de la structure HTML
3321 */
3322 //
3323 if ($f->isAjaxRequest()) {
3324 //
3325 header("Content-type: text/html; charset=".HTTPCHARSET."");
3326 } else {
3327 //
3328 $f->setFlag("htmlonly");
3329 $f->display();
3330 }
3331 //
3332 $f->displayStartContent();
3333 //
3334 $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
3335 $f->displayTitle();
3336
3337 /**
3338 *
3339 */
3340 //
3341 ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
3342 $evenement = intval($evenement);
3343 //
3344 ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
3345 $nature = substr($idx, 0, 2);
3346 //
3347 ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
3348
3349 // Récupération de la collectivité du dossier
3350 require_once "../obj/dossier.class.php";
3351 $dossier = new dossier($idx, $f->db, DEBUG);
3352
3353 /**
3354 *
3355 */
3356 //
3357 $sql = "SELECT *, bible.libelle as bible_lib
3358 FROM ".DB_PREFIXE."bible
3359 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3360 ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
3361 LEFT JOIN ".DB_PREFIXE."om_collectivite
3362 ON bible.om_collectivite = om_collectivite.om_collectivite
3363 WHERE evenement=".$evenement."
3364 AND complement=".$complement."
3365 AND (bible.dossier_autorisation_type IS NULL
3366 OR dossier_autorisation_type.code ='".$nature."')
3367 AND (om_collectivite.niveau = '2'
3368 OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
3369 ORDER BY bible_lib ASC";
3370 $res = $f->db->query($sql);
3371 $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
3372 $f->isDatabaseError($res);
3373 //
3374 echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
3375 //
3376 if ($res->numrows() > 0) {
3377 //
3378 echo "\t<table id='tab-bible' width='100%'>\n";
3379 //
3380 echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
3381 echo "<th>"._("Choisir")."</th>";
3382 echo "<th>"._("Libelle")."</th>";
3383 echo "</tr>\n";
3384 //
3385 $i = 0;
3386 //
3387 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3388 //
3389 echo "\t\t<tr";
3390 echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
3391 echo ">";
3392 //
3393 echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
3394 // XXX utilisation de l'attribut titre pour afficher une infobulle
3395 echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
3396 //
3397 echo "</tr>\n";
3398 //
3399 $i++;
3400 }
3401 echo "\t</table>\n";
3402 //
3403 echo "<div class=\"formControls\">\n";
3404 $f->layout->display_form_button(array(
3405 "value" => _("Valider"),
3406 "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
3407 ));
3408 $f->displayLinkJsCloseWindow();
3409 echo "</div>\n";
3410
3411 } else {
3412 //
3413 $message_class = "error";
3414 $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
3415 $f->displayMessage($message_class, $message);
3416 //
3417 echo "<div class=\"formControls\">\n";
3418 $f->displayLinkJsCloseWindow();
3419 echo "</div>\n";
3420 }
3421 //
3422 echo "</form>\n";
3423
3424 /**
3425 * Affichage de la structure HTML
3426 */
3427 //
3428 $f->displayEndContent();
3429 }
3430
3431 /**
3432 * VIEW - view_bible
3433 *
3434 * Affiche la bible manuelle.
3435 *
3436 * @return void
3437 */
3438 function view_bible_auto() {
3439 // Vérification de l'accessibilité sur l'élément
3440 $this->checkAccessibility();
3441
3442 // XXX APP
3443
3444 $f = $this->f;
3445
3446 //
3447 $f->disableLog();
3448
3449 $formatDate="AAAA-MM-JJ";
3450
3451 // Récupération des paramètres
3452 $idx = $f->get_submitted_get_value('idx');
3453 $evenement = $f->get_submitted_get_value('ev');
3454
3455 // Initialisation de la variable de retour
3456 $retour['complement_om_html'] = '';
3457 $retour['complement2_om_html'] = '';
3458 $retour['complement3_om_html'] = '';
3459 $retour['complement4_om_html'] = '';
3460 // Vérification d'une consultation liée à l'événement
3461 $consultation = $f->db->getOne(
3462 "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
3463 );
3464 $f->isDatabaseError($consultation);
3465 // Si consultation liée, récupération du retour d'avis
3466 if($consultation=='Oui'){
3467 $sql="select date_retour,avis_consultation.libelle as avis_consultation,
3468 service.libelle as service
3469 from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
3470 on consultation.service =service.service
3471 left join ".DB_PREFIXE."avis_consultation on
3472 consultation.avis_consultation = avis_consultation.avis_consultation
3473 where dossier ='".$idx."'";
3474 $res = $f->db->query($sql);
3475 $f->isDatabaseError($res);
3476 // Récupération des consultations
3477 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3478 $correct=false;
3479 // date retour
3480 if ($row['date_retour']<>""){
3481 if ($formatDate=="AAAA-MM-JJ"){
3482 $date = explode("-", $row['date_retour']);
3483 // controle de date
3484 if (count($date) == 3 and
3485 checkdate($date[1], $date[2], $date[0])) {
3486 $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
3487 $correct=true;
3488 }else{
3489 $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
3490 $correct=false;
3491 }
3492 }
3493 }
3494 //
3495 $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
3496 if($correct == true){
3497 $temp=$temp." du ".$date_retour_f;
3498 }
3499 // Concaténation des retours d'avis de consultation
3500 $retour['complement_om_html'] .= $temp;
3501 } // while
3502
3503 } // consultation
3504 // Récupération des bibles automatiques pour le champ complement_om_html
3505 $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
3506 // Récupération des bibles automatiques pour le champ complement2_om_html
3507 $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
3508 // Récupération des bibles automatiques pour le champ complement3_om_html
3509 $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
3510 // Récupération des bibles automatiques pour le champ complement4_om_html
3511 $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
3512
3513
3514
3515 echo json_encode($retour);
3516 }
3517
3518 /**
3519 * Récupération des éléments de bible.
3520 *
3521 * @param utils $f handler de om_application
3522 * @param integer $event id de l'événement
3523 * @param string $idx id du dossier
3524 * @param integer $compnb numéro du champ complement
3525 *
3526 * @return string Chaîne de texte à insérer dans le champ complement
3527 */
3528 function getBible($f, $event, $idx, $compnb) {
3529 // Récupération de la collectivité du dossier
3530 require_once "../obj/dossier.class.php";
3531 $dossier = new dossier($idx, $f->db, DEBUG);
3532 //
3533 $sql = "SELECT * FROM ".DB_PREFIXE."bible
3534 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3535 ON bible.dossier_autorisation_type=
3536 dossier_autorisation_type.dossier_autorisation_type
3537 LEFT JOIN
3538 ".DB_PREFIXE."om_collectivite
3539 ON bible.om_collectivite = om_collectivite.om_collectivite
3540 WHERE evenement =".$event." and
3541 complement=".$compnb." and
3542 automatique='Oui' and
3543 (dossier_autorisation_type.code ='".substr($idx, 0, 2)."' or
3544 bible.dossier_autorisation_type IS NULL) and
3545 (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
3546
3547 $res = $f->db->query($sql);
3548 $f->isDatabaseError($res);
3549 $temp = "";
3550 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3551 // Remplacement des retours à la ligne par des br
3552 $temp .= preg_replace(
3553 '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
3554 );
3555 } // fin while
3556 return $temp;
3557 }
3558
3559 /**
3560 * VIEW - view_suivi_bordereaux.
3561 *
3562 * Formulaire de choix du bordereau de suivi, permettant de générer les 4 bordereaux.
3563 * Si l'utilisateur est d'une collectivité de niveau 2 il a le choix de la
3564 * collectivité des dossiers affichés.
3565 *
3566 * @return void
3567 */
3568 function view_suivi_bordereaux() {
3569 // Vérification de l'accessibilité sur l'élément
3570 $this->checkAccessibility();
3571
3572 // XXX APP
3573
3574 $f = $this->f;
3575
3576 /**
3577 * Validation du formulaire
3578 */
3579 // Si le formulaire a été validé
3580 if ($f->get_submitted_post_value("validation") !== null) {
3581 // Si un bordereau à été sélectionné
3582 if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
3583 // Si aucun bordereau n'a été sélectionné
3584 $message_class = "error";
3585 $message = _("Veuillez selectionner un bordereau.");
3586 }
3587 // Sinon si les dates ne sont pas valide
3588 elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
3589 && $f->get_submitted_post_value("date_bordereau_debut") == "")
3590 || ($f->get_submitted_post_value("date_bordereau_fin") !== null
3591 && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
3592 // Si aucune date n'a été saisie
3593 $message_class = "error";
3594 $message = _("Veuillez saisir une date valide.");
3595 }
3596 // Affiche le message de validation
3597 else {
3598 // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
3599 $sql = "SELECT om_etat.libelle
3600 FROM ".DB_PREFIXE."om_etat
3601 WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
3602 $res = $f->db->getone($sql);
3603 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3604 $f->isDatabaseError($res);
3605 //
3606 $message_class = "valid";
3607 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
3608 $message .= " : <br/><br/>";
3609 $message .= "<a class='om-prev-icon pdf-16'";
3610 $message .= " title=\""._("Bordereau")."\"";
3611 $message .= "href='../scr/form.php?obj=instruction";
3612 $message .= "&action=220";
3613 $message .= "&idx=0";
3614 $message .= "&type_bordereau=".$f->get_submitted_post_value("bordereau");
3615 $message .= "&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
3616 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
3617 // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
3618 if ($f->get_submitted_post_value("om_collectivite") !== null) {
3619 $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
3620 }
3621 $message .= "'"." target='_blank'>";
3622 $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
3623 ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
3624 $message .= "</a>";
3625 }
3626 }
3627
3628 /**
3629 * Affichage des messages et du formulaire
3630 */
3631 // Affichage du message de validation ou d'erreur
3632 if (isset($message) && isset($message_class) && $message != "") {
3633 $f->displayMessage($message_class, $message);
3634 }
3635 // Inclusion de la classe de gestion des formulaires
3636 require_once "../obj/om_formulaire.class.php";
3637 // Ouverture du formulaire
3638 printf("\t<form");
3639 printf(" method=\"post\"");
3640 printf(" id=\"suivi_bordereaux_form\"");
3641 printf(" action=\"\"");
3642 printf(">\n");
3643 // Paramétrage des champs du formulaire
3644 $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
3645 // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
3646 // collectivité dans le formulaire
3647 if($_SESSION["niveau"] == 2) {
3648 array_push($champs, "om_collectivite");
3649 }
3650 // Création d'un nouvel objet de type formulaire
3651 $form = new formulaire(NULL, 0, 0, $champs);
3652 // Paramétrage du champ date_bordereau_debut
3653 $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
3654 $form->setType("date_bordereau_debut", "date");
3655 $form->setTaille("date_bordereau_debut", 12);
3656 $form->setMax("date_bordereau_debut", 12);
3657 $form->setRequired("date_bordereau_debut");
3658 $form->setOnchange("date_bordereau_debut", "fdate(this)");
3659 $form->setVal("date_bordereau_debut", date("d/m/Y"));
3660 // Paramétrage du champ date_bordereau_fin
3661 $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
3662 $form->setType("date_bordereau_fin", "date");
3663 $form->setTaille("date_bordereau_fin", 12);
3664 $form->setMax("date_bordereau_fin", 12);
3665 $form->setRequired("date_bordereau_fin");
3666 $form->setOnchange("date_bordereau_fin", "fdate(this)");
3667 $form->setVal("date_bordereau_fin", date("d/m/Y"));
3668 // Paramétrage du champ bordereau
3669 $form->setLib("bordereau", _("bordereau"));
3670 $form->setType("bordereau", "select");
3671 $form->setRequired("bordereau");
3672 // Valeurs des champs
3673 if ($f->get_submitted_post_value("validation") !== null) {
3674 $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
3675 $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
3676 $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
3677 $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
3678 }
3679 // Données du select - On récupère ici la liste de tous les états disponibles
3680 // dans la table om_etat qui ont un id qui commence par la cahine de caractères
3681 // 'bordereau_'
3682 $sql = "SELECT om_etat.id, om_etat.libelle
3683 FROM ".DB_PREFIXE."om_etat
3684 WHERE om_etat.id LIKE 'bordereau_%'
3685 ORDER BY om_etat.id";
3686 $res = $f->db->query($sql);
3687 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3688 $f->isDatabaseError($res);
3689 // Données du select
3690 $contenu = array(
3691 0 => array("", ),
3692 1 => array(_("choisir bordereau")),
3693 );
3694 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3695 $contenu[0][] = $row['id'];
3696 $contenu[1][] = $row['libelle'];
3697 }
3698 $form->setSelect("bordereau", $contenu);
3699 //
3700 if($_SESSION["niveau"] == 2) {
3701 $form->setLib("om_collectivite", _("collectivite"));
3702 $form->setType("om_collectivite", "select");
3703
3704 // Données du select - On récupère ici la liste de tous toutes les collectivités
3705 // de niveau 1
3706 $sql = "SELECT om_collectivite, libelle
3707 FROM ".DB_PREFIXE."om_collectivite
3708 WHERE niveau = '1' ORDER BY libelle";
3709 $res = $f->db->query($sql);
3710 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3711 $f->isDatabaseError($res);
3712 // La valeur par défaut du select est Toutes
3713 $list_collectivites = array(
3714 0 => array("", ),
3715 1 => array(_("toutes"))
3716 );
3717
3718 $id_colls = "";
3719 // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
3720 // par des virgules, pour un traitement plus facile dans la requête de sous-état
3721 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3722 if ($id_colls != "") {
3723 $id_colls .= ",";
3724 }
3725 $id_colls .= $row['om_collectivite'];
3726 $list_collectivites[0][] = $row['om_collectivite'];
3727 $list_collectivites[1][] = $row['libelle'];
3728 }
3729 // On affecte la liste d'identifiants à l'option Toutes
3730 $list_collectivites[0][0] = $id_colls ;
3731 $form->setSelect("om_collectivite", $list_collectivites);
3732 }
3733
3734 // Affichage du formulaire
3735 $form->entete();
3736 $form->afficher($champs, 0, false, false);
3737 $form->enpied();
3738 // Affichage du bouton
3739 printf("\t<div class=\"formControls\">\n");
3740 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3741 printf("\t</div>\n");
3742 // Fermeture du formulaire
3743 printf("\t</form>\n");
3744
3745 }
3746
3747
3748 /**
3749 * VIEW - view_generate_suivi_bordereaux.
3750 *
3751 * Génère et affiche les bordereaux de suivi.
3752 *
3753 * @return [void]
3754 */
3755 function view_generate_suivi_bordereaux() {
3756 // Vérification de l'accessibilité sur l'élément
3757 $this->checkAccessibility();
3758 // Récupération du type de bordereau
3759 $bordereau = $this->f->get_submitted_get_value('type_bordereau');
3760 // Génération du PDF
3761 $result = $this->compute_pdf_output('etat', $bordereau, null, $this->getVal($this->clePrimaire));
3762 // Affichage du PDF
3763 $this->expose_pdf_output(
3764 $result['pdf_output'],
3765 $result['filename']
3766 );
3767 }
3768
3769
3770 /**
3771 * VIEW - view_suivi_envoi_lettre_rar.
3772 *
3773 * Vu pour imprimer les RAR.
3774 *
3775 * @return void
3776 */
3777 function view_suivi_envoi_lettre_rar() {
3778 // Vérification de l'accessibilité sur l'élément
3779 $this->checkAccessibility();
3780
3781 // XXX APP
3782
3783 $f = $this->f;
3784
3785 //
3786 if ($f->get_submitted_post_value("date") !== null) {
3787 $date = $f->get_submitted_post_value("date");
3788 } else {
3789 $date = "";
3790 }
3791 //
3792 if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
3793 $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
3794 } else {
3795 $liste_code_barres_instruction = "";
3796 }
3797
3798 // Compteur du nombre de page générées
3799 $nbLettres = 0;
3800 // Liste d'id des instructions
3801 $id4Gen = array();
3802 //
3803 $error = "";
3804
3805 /**
3806 * Validation du formulaire
3807 */
3808 // Si le formulaire a été validé
3809 if ($f->get_submitted_post_value('validation') !== null) {
3810 //
3811 if (empty($date) || empty($liste_code_barres_instruction)) {
3812 //
3813 $message_class = "error";
3814 $message = _("Tous les champs doivent etre remplis.");
3815 } else {
3816 // Création d'un tableau d'instruction
3817 $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
3818 //
3819 foreach ($liste as $code_barres) {
3820 // On enlève les éventuels espaces saisis
3821 $code_barres = trim($code_barres);
3822 // Vérification de l'existence de l'instruction
3823 if ($code_barres != "") {
3824 // Si la valeur transmise est numérique
3825 if (is_numeric($code_barres)) {
3826 //
3827 $sql = "SELECT count(*) FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3828 $nbInstr = $f->db->getone($sql);
3829 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3830 $f->isDatabaseError($nbInstr);
3831 //
3832 if ($nbInstr == "1") {
3833 // Récupération de la date d'envoi de l'instruction bippé
3834 $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3835 $res = $f->db->query($sql);
3836 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3837 $f->isDatabaseError($res);
3838 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
3839 // Si pas de date ou correspond à la date du formulaire on
3840 // effectue le traitement
3841 if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
3842
3843 require_once '../obj/instruction.class.php';
3844
3845 $instr = new instruction($row['instruction'], $f->db, DEBUG);
3846 $valF = array();
3847 foreach($instr->champs as $id => $champ) {
3848 $valF[$champ] = $instr->val[$id];
3849 }
3850 $valF['date_evenement']=
3851 $instr->dateDBToForm($valF['date_evenement']);
3852 $valF['archive_date_complet']=
3853 $instr->dateDBToForm($valF['archive_date_complet']);
3854 $valF['archive_date_rejet']=
3855 $instr->dateDBToForm($valF['archive_date_rejet']);
3856 $valF['archive_date_limite']=
3857 $instr->dateDBToForm($valF['archive_date_limite']);
3858 $valF['archive_date_notification_delai']=
3859 $instr->dateDBToForm($valF['archive_date_notification_delai']);
3860 $valF['archive_date_decision']=
3861 $instr->dateDBToForm($valF['archive_date_decision']);
3862 $valF['archive_date_validite']=
3863 $instr->dateDBToForm($valF['archive_date_validite']);
3864 $valF['archive_date_achevement']=
3865 $instr->dateDBToForm($valF['archive_date_achevement']);
3866 $valF['archive_date_chantier']=
3867 $instr->dateDBToForm($valF['archive_date_chantier']);
3868 $valF['archive_date_conformite']=
3869 $instr->dateDBToForm($valF['archive_date_conformite']);
3870 $valF['archive_date_dernier_depot']=
3871 $instr->dateDBToForm($valF['archive_date_dernier_depot']);
3872 $valF['archive_date_limite_incompletude']=
3873 $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
3874 $valF['date_finalisation_courrier']=
3875 $instr->dateDBToForm($valF['date_finalisation_courrier']);
3876 $valF['date_envoi_signature']=
3877 $instr->dateDBToForm($valF['date_envoi_signature']);
3878 $valF['date_retour_signature']=
3879 $instr->dateDBToForm($valF['date_retour_signature']);
3880 $valF['date_envoi_rar']=
3881 $instr->dateDBToForm($valF['date_envoi_rar']);
3882 $valF['date_retour_rar']=
3883 $instr->dateDBToForm($valF['date_retour_rar']);
3884 $valF['date_envoi_controle_legalite']=
3885 $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
3886 $valF['date_retour_controle_legalite']=
3887 $instr->dateDBToForm($valF['date_retour_controle_legalite']);
3888
3889 $valF['date_envoi_rar'] = $date;
3890
3891 // Vérification de la finalisation du document
3892 // correspondant au code barres
3893 if($instr->getVal("om_final_instruction") === 't') {
3894 $instr->setParameter('maj', 1);
3895 $instr->class_actions[1]["identifier"] =
3896 "envoi lettre RAR (depuis le menu suivi des pièces)";
3897 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
3898 $id4Gen[] = $code_barres;
3899 $nbLettres ++;
3900 } else {
3901 //
3902 if ($error != "") {
3903 $error .= "<br/>";
3904 }
3905 $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
3906 $code_barres);
3907 $error .= " ";
3908 $error .= _("Veuillez contacter votre administrateur.");
3909 }
3910 } else {
3911 //
3912 if ($error != "") {
3913 $error .= "<br/>";
3914 }
3915 $error .= sprintf(_("Le document correspondant au
3916 code barres %s n'est pas finalise,
3917 le bordereau ne sera pas genere."),
3918 $code_barres);
3919 }
3920
3921 } else {
3922 //
3923 if ($error != "") {
3924 $error .= "<br/>";
3925 }
3926 $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
3927 }
3928 } else {
3929 //
3930 if ($error != "") {
3931 $error .= "<br/>";
3932 }
3933 $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
3934 }
3935 } else {
3936 //
3937 if ($error != "") {
3938 $error .= "<br/>";
3939 }
3940 $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
3941 }
3942 }
3943 }
3944 }
3945 }
3946
3947 /**
3948 * Affichage des messages et du formulaire
3949 */
3950 // Affichage du message de validation ou d'erreur
3951 if (isset($message) && isset($message_class) && $message != "") {
3952 $f->displayMessage($message_class, $message);
3953 }
3954 // Affichage du message d'erreur
3955 if(!empty($error)) {
3956 $f->displayMessage("error", $error);
3957 }
3958 // Affichage du message de validation de la saisie
3959 if ($nbLettres > 0) {
3960 //
3961 $message_class = "valid";
3962 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre document");
3963 $message .= " : <br/><br/>";
3964 $message .= "<a class='om-prev-icon pdf-16'";
3965 $message .= " title=\""._("imprimer les RAR")."\"";
3966 $message .= " href=\"../scr/form.php?obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
3967 $message .= " target='_blank'>";
3968 $message .= _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
3969 $message .= "</a>";
3970 $f->displayMessage($message_class, $message);
3971 }
3972 // Inclusion de la classe de gestion des formulaires
3973 require_once "../obj/om_formulaire.class.php";
3974 // Ouverture du formulaire
3975 echo "\t<form";
3976 echo " method=\"post\"";
3977 echo " id=\"suivi_envoi_lettre_rar_form\"";
3978 echo " action=\"\"";
3979 echo ">\n";
3980 // Paramétrage des champs du formulaire
3981 $champs = array("date", "liste_code_barres_instruction");
3982 // Création d'un nouvel objet de type formulaire
3983 $form = new formulaire(NULL, 0, 0, $champs);
3984 // Paramétrage du champ date du formulaire
3985 $form->setLib("date", _("Date")."* :");
3986 $form->setType("date", "date");
3987 $form->setOnchange("date", "fdate(this)");
3988 $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
3989 $form->setTaille("date", 10);
3990 $form->setMax("date", 10);
3991 // Paramétrage du champ liste_code_barres_instruction du formulaire
3992 $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
3993 $form->setType("liste_code_barres_instruction", "textarea");
3994 $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
3995 $form->setTaille("liste_code_barres_instruction", 20);
3996 $form->setMax("liste_code_barres_instruction", 20);
3997 // Affichage du formulaire
3998 $form->entete();
3999 $form->afficher($champs, 0, false, false);
4000 $form->enpied();
4001 // Affichage du bouton
4002 echo "\t<div class=\"formControls\">\n";
4003 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4004 echo "\t</div>\n";
4005 // Fermeture du formulaire
4006 echo "\t</form>\n";
4007 }
4008
4009 /**
4010 * VIEW - view_suivi_mise_a_jour_des_dates.
4011 *
4012 * Vu pour mettre à jour les dates de suivi de l'instruction.
4013 *
4014 * @return void
4015 */
4016 function view_suivi_mise_a_jour_des_dates() {
4017 // Vérification de l'accessibilité sur l'élément
4018 $this->checkAccessibility();
4019
4020 // XXX APP
4021
4022 $f = $this->f;
4023
4024 // Récupération des valeur passées en POST ou GET
4025 if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
4026 $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
4027 } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
4028 $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
4029 } else {
4030 $type_mise_a_jour = "";
4031 }
4032 if($f->get_submitted_post_value('date') !== null) {
4033 $date = $f->get_submitted_post_value('date');
4034 } elseif($f->get_submitted_get_value('date') !== null) {
4035 $date = $f->get_submitted_get_value('date');
4036 } else {
4037 $date = "";
4038 }
4039 if($f->get_submitted_post_value('code_barres') !== null) {
4040 $code_barres = $f->get_submitted_post_value('code_barres');
4041 } elseif($f->get_submitted_get_value('code_barres') !== null) {
4042 $code_barres = $f->get_submitted_get_value('code_barres');
4043 } else {
4044 $code_barres = "";
4045 }
4046 // Booléen permettant de définir si un enregistrement à eu lieu
4047 $correct = false;
4048 // Booléen permettant de définir si les dates peuvent êtres enregistrées
4049 $date_error = false;
4050 // Champs date à mettre à jour
4051 $liste_champs=array();
4052
4053 // Si le formulaire a été validé
4054 if ($f->get_submitted_post_value('validation') !== null) {
4055 if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
4056
4057 //Vérification de l'existance de l'instruction
4058 $sql = "SELECT instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4059 $res = $f->db->query($sql);
4060 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4061 $f->isDatabaseError($res);
4062
4063 if($res->numrows() == 1) {
4064 $liste_champs = explode(";", $type_mise_a_jour);
4065 // Mise à jour des dates après l'écran de verification
4066 if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
4067 require_once '../obj/instruction.class.php';
4068 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4069 $instr = new instruction($row['instruction'], $f->db, DEBUG);
4070 $valF = array();
4071 foreach($instr->champs as $id => $champ) {
4072 $valF[$champ] = $instr->val[$id];
4073 }
4074 $valF['date_evenement']=$instr->dateDBToForm($valF['date_evenement']);
4075 $valF['archive_date_complet']=$instr->dateDBToForm($valF['archive_date_complet']);
4076 $valF['archive_date_rejet']=$instr->dateDBToForm($valF['archive_date_rejet']);
4077 $valF['archive_date_limite']=$instr->dateDBToForm($valF['archive_date_limite']);
4078 $valF['archive_date_notification_delai']=$instr->dateDBToForm($valF['archive_date_notification_delai']);
4079 $valF['archive_date_decision']=$instr->dateDBToForm($valF['archive_date_decision']);
4080 $valF['archive_date_validite']=$instr->dateDBToForm($valF['archive_date_validite']);
4081 $valF['archive_date_achevement']=$instr->dateDBToForm($valF['archive_date_achevement']);
4082 $valF['archive_date_chantier']=$instr->dateDBToForm($valF['archive_date_chantier']);
4083 $valF['archive_date_conformite']=$instr->dateDBToForm($valF['archive_date_conformite']);
4084 $valF['archive_date_dernier_depot']=$instr->dateDBToForm($valF['archive_date_dernier_depot']);
4085 $valF['archive_date_limite_incompletude']=$instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4086 $valF['date_finalisation_courrier']=$instr->dateDBToForm($valF['date_finalisation_courrier']);
4087 $valF['date_envoi_signature']=$instr->dateDBToForm($valF['date_envoi_signature']);
4088 $valF['date_retour_signature']=$instr->dateDBToForm($valF['date_retour_signature']);
4089 $valF['date_envoi_rar']=$instr->dateDBToForm($valF['date_envoi_rar']);
4090 $valF['date_retour_rar']=$instr->dateDBToForm($valF['date_retour_rar']);
4091 $valF['date_envoi_controle_legalite']=$instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4092 $valF['date_retour_controle_legalite']=$instr->dateDBToForm($valF['date_retour_controle_legalite']);
4093
4094 foreach(explode(";", $type_mise_a_jour) as $maj_date) {
4095 $valF[$maj_date]=$date;
4096 }
4097
4098 // Vérification de la finalisation du document
4099 // correspondant au code barres
4100 if($valF["om_final_instruction"] === 't' or
4101 $valF["lettretype"] == '') {
4102 $code_barres = "";
4103
4104 //Désactivation de l'autocommit
4105 $f->db->autoCommit(false);
4106
4107 //On modifie les valeurs de l'instruction
4108 $instr->setParameter('maj', 170);
4109 $instr->class_actions[170]["identifier"] =
4110 "mise à jour des dates (depuis le menu suivi des pièces)";
4111 $retour = $instr->modifier($valF, $f->db, DEBUG);
4112
4113 //Si une erreur s'est produite, on défait les modifications
4114 //qui ont été faites
4115 if (!$retour){
4116 $instr->undoValidation();
4117 }
4118 //Sinon, on valide en base de données les modifications
4119 else {
4120 $f->db->commit();
4121 }
4122
4123 // Variable correct retourné depuis la classe instruction
4124 $correct = $instr->correct;
4125
4126 // Si la modification sur l'instruction a échoué
4127 if ($correct === false) {
4128
4129 // Message d'erreur de la classe instruction
4130 $error = $instr->msg;
4131 }
4132
4133 } else {
4134 // Indique que le traitement est en erreur
4135 $correct = false;
4136 // Message d'erreur
4137 $error = sprintf(_("Le document n'est pas finalise."),
4138 "<span class='bold'>".$code_barres."</span>");
4139 }
4140 } else {
4141 // Récupération des infos du dossier
4142 $sqlInfo = "SELECT dossier.dossier_libelle,
4143 evenement.libelle as evenement,
4144 autorite_competente.code as autorite_competente_code,
4145 autorite_competente.libelle as autorite_competente,
4146 evenement.type as evenement_type,
4147 to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
4148 to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
4149 to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
4150 to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
4151 to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
4152 to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
4153 FROM ".DB_PREFIXE."instruction
4154 INNER JOIN ".DB_PREFIXE."dossier ON
4155 dossier.dossier=instruction.dossier
4156 LEFT JOIN ".DB_PREFIXE."autorite_competente ON
4157 dossier.autorite_competente=autorite_competente.autorite_competente
4158 INNER JOIN ".DB_PREFIXE."evenement ON
4159 instruction.evenement=evenement.evenement
4160 WHERE code_barres='".$code_barres."'";
4161 $resInfo = $f->db->query($sqlInfo);
4162 $f->isDatabaseError($resInfo);
4163 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
4164
4165 // Vérification de la non modification des dates de suivi
4166 foreach(explode(";", $type_mise_a_jour) as $champ) {
4167 if($infos[$champ] != "" AND $infos[$champ] != $date) {
4168 $error = _("Les dates de suivis ne peuvent etre modifiees");
4169 $date_error = true;
4170 }
4171 }
4172 }
4173 } else {
4174 $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
4175 }
4176
4177 } else {
4178 $error = _("Tous les champs doivent etre remplis.");
4179 }
4180 }
4181
4182 /**
4183 * Affichage des messages et du formulaire
4184 */
4185 // Affichage du message de validation ou d'erreur
4186 if (isset($message) && isset($message_class) && $message != "") {
4187 $f->displayMessage($message_class, $message);
4188 }
4189 // Affichage du message d'erreur
4190 if(!empty($error)) {
4191 $f->displayMessage("error", $error);
4192 }
4193
4194 // Affichage du message de validation de la saisie
4195 if($correct === true) {
4196 $f->displayMessage("ok", _("Saisie enregistree"));
4197 }
4198 // Inclusion de la classe de gestion des formulaires
4199 require_once "../obj/om_formulaire.class.php";
4200 // Ouverture du formulaire
4201 echo "\t<form";
4202 echo " method=\"post\"";
4203 echo " id=\"suivi_mise_a_jour_des_dates_form\"";
4204 echo " action=\"\"";
4205 echo ">\n";
4206 // Paramétrage des champs du formulaire
4207 if(isset($infos)) {
4208 $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
4209 , "autorite_competente", "date_envoi_signature",
4210 "date_retour_signature", "date_envoi_controle_legalite",
4211 "date_retour_controle_legalite", "date_envoi_rar",
4212 "date_retour_rar", "is_valid");
4213 } else {
4214 $champs = array("type_mise_a_jour", "date", "code_barres");
4215 }
4216 // Création d'un nouvel objet de type formulaire
4217 $form = new formulaire(NULL, 0, 0, $champs);
4218 // Paramétrage des champs du formulaire
4219 // Parametrage du champ type_mise_a_jour
4220 $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
4221 if(isset($infos)) {
4222 $form->setType("type_mise_a_jour", "selecthiddenstatic");
4223
4224 } else {
4225 $form->setType("type_mise_a_jour", "select");
4226
4227 }
4228 $form->setVal("type_mise_a_jour", $type_mise_a_jour);
4229 $contenu = array();
4230
4231 $contenu[0][0] = "date_envoi_signature";
4232 $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
4233
4234 $contenu[0][1] = "date_retour_signature";
4235 $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
4236
4237 $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
4238 $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
4239
4240 $contenu[0][3] = "date_envoi_controle_legalite";
4241 $contenu[1][3] = _("date d'envoi au controle de legalite");
4242
4243 $contenu[0][4] = "date_retour_controle_legalite";
4244 $contenu[1][4] = _("date de retour de controle de legalite");
4245
4246 $contenu[0][5] = "date_retour_rar";
4247 $contenu[1][5] = _("date de retour de l'AR");
4248
4249 $form->setSelect("type_mise_a_jour", $contenu);
4250
4251 // Parametrage du champ date
4252 $form->setLib("date", _("Date")."* :");
4253 if(isset($infos)) {
4254 $form->setType("date", "hiddenstaticdate");
4255
4256 } else {
4257 $form->setType("date", "date");
4258 }
4259 $form->setVal("date", $date);
4260 $form->setTaille("date", 10);
4261 $form->setMax("date", 10);
4262
4263 // Parametrage du champ code_barres
4264 $form->setLib("code_barres", _("Code barres d'instruction")."* :");
4265 if(isset($infos)) {
4266 $form->setType("code_barres", "hiddenstatic");
4267 } else {
4268 $form->setType("code_barres", "text");
4269 }
4270 $form->setVal("code_barres", $code_barres);
4271 $form->setTaille("code_barres", 20);
4272 $form->setMax("code_barres", 20);
4273
4274 // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
4275 if(isset($infos)) {
4276
4277 // Tous les champs sont défini par defaut à static
4278 foreach ($infos as $key => $value) {
4279 $form->setType($key, "static");
4280 if(in_array($key, $liste_champs)) {
4281 $form->setVal($key, $date);
4282 } else {
4283 $form->setVal($key, $value);
4284 }
4285 }
4286
4287 // Les champs dont on viens de définir la valeur sont en gras
4288 foreach ($liste_champs as $value) {
4289 $form->setBloc($value,'DF',"",'bold');
4290 }
4291
4292 // Parametrage du champ dossier
4293 $form->setLib("dossier_libelle", _("dossier_libelle")." :");
4294 $form->setType("dossier_libelle", "static");
4295 $form->setVal("dossier_libelle", $infos['dossier_libelle']);
4296
4297 // Parametrage du champ evenement
4298 $form->setLib("evenement", _("evenement")." :");
4299 $form->setType("evenement", "static");
4300 $form->setVal("evenement", $infos['evenement']);
4301
4302 // Parametrage du champ autorite_competente
4303 $form->setLib("autorite_competente", _("Autorite competente")." :");
4304 $form->setType("autorite_competente", "static");
4305 $form->setVal("autorite_competente", $infos['autorite_competente']);
4306
4307 // Parametrage des libellés d'envoi avec RAR
4308 $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
4309 $form->setLib("date_retour_rar", _("date_retour_rar")." :");
4310
4311 $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
4312 $form->setLib("date_retour_signature", _("date_retour_signature")." :");
4313 $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
4314 $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
4315 // Configuration des libellé en fonction de l'autorité compétente
4316 if($infos['autorite_competente_code'] == 'ETAT') {
4317 $form->setType("date_envoi_controle_legalite", "hiddendate");
4318 $form->setType("date_retour_controle_legalite", "hiddendate");
4319 }
4320
4321 // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
4322 $form->setLib("is_valid", _("Valide")." :");
4323 $form->setType("is_valid", "hidden");
4324 $form->setVal("is_valid", 'true');
4325
4326 $form->setFieldset('dossier_libelle','D',_('Synthese'));
4327 $form->setFieldset('is_valid','F');
4328
4329 }
4330
4331
4332 // Création du fieldset regroupant les champs permettant la mise à jour des date
4333 $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
4334 $form->setFieldset('code_barres','F');
4335 // Affichage du formulaire
4336 $form->entete();
4337 $form->afficher($champs, 0, false, false);
4338 $form->enpied();
4339 // Affichage du bouton
4340 echo "\t<div class=\"formControls\">\n";
4341 //
4342 if(!$date_error) {
4343 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4344 }
4345 // Si pas sur l'écran de validation
4346 if(isset($infos)) {
4347 echo "<a class=\"retour\" href=\"../scr/form.php?obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
4348 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
4349 echo "\">Retour</a>";
4350 }
4351 echo "\t</div>\n";
4352 // Fermeture du formulaire
4353 echo "\t</form>\n";
4354 }
4355
4356 /**
4357 * [view_pdf_lettre_rar description]
4358 *
4359 * @return [type] [description]
4360 */
4361 function view_pdf_lettre_rar() {
4362 // Vérification de l'accessibilité sur l'élément
4363 $this->checkAccessibility();
4364
4365 // XXX APP
4366
4367 $f = $this->f;
4368
4369 $f->disableLog();
4370
4371 if($f->get_submitted_get_value('liste') != null) {
4372 $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
4373
4374 // Classe permettant la mise en page de l'édition pdf
4375 require_once "../obj/pdf_lettre_rar.class.php";
4376 $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
4377 // Initialisation de la mise en page
4378 $pdf_lettre_rar->init($f);
4379
4380 foreach ($listeCodeBarres as $code_barres) {
4381
4382 // Test si l'evenement est de type arrete et si un délégataire a été nommé
4383 $sql = "SELECT
4384 dossier.dossier_libelle,
4385 evenement.type,
4386 count(lien_dossier_demandeur) as nbdemandeur,
4387 CASE
4388 WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
4389 THEN CONCAT(phase.code, ' - ', division.libelle)
4390 ELSE
4391 phase.code
4392 END AS code_phase
4393 FROM ".DB_PREFIXE."instruction
4394 LEFT JOIN ".DB_PREFIXE."dossier
4395 ON instruction.dossier = dossier.dossier
4396 LEFT JOIN ".DB_PREFIXE."division
4397 ON dossier.division = division.division
4398 INNER JOIN ".DB_PREFIXE."evenement ON
4399 instruction.evenement=evenement.evenement
4400 LEFT JOIN ".DB_PREFIXE."phase
4401 ON evenement.phase = phase.phase
4402 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
4403 instruction.dossier=lien_dossier_demandeur.dossier
4404 inner join ".DB_PREFIXE."demandeur on
4405 demandeur.demandeur=lien_dossier_demandeur.demandeur
4406 WHERE code_barres='".$code_barres."'
4407 AND ((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire')
4408 OR demandeur.type_demandeur='delegataire')
4409 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
4410
4411 $res = $f->db->query($sql);
4412 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4413 $f->isDatabaseError($res);
4414 $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
4415
4416
4417 // Recuperation de l'adresse de destination
4418 $sqlAdresse = "SELECT
4419 CASE WHEN demandeur.qualite='particulier'
4420 THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
4421 ELSE TRIM(demandeur.personne_morale_denomination)
4422 END as ligne1,
4423 CASE WHEN demandeur.qualite='personne_morale'
4424 THEN TRIM(demandeur.personne_morale_raison_sociale)
4425 ELSE ''
4426 END as ligne1_1,
4427 CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
4428 THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
4429 ELSE ''
4430 END as ligne1_2,
4431 trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
4432 CASE demandeur.complement
4433 WHEN null THEN ''
4434 ELSE trim(demandeur.complement)
4435 END as ligne3,
4436 CASE demandeur.lieu_dit
4437 WHEN null THEN ''
4438 ELSE trim(demandeur.lieu_dit)
4439 END as ligne4,
4440 CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
4441 (CASE WHEN demandeur.bp IS NOT NULL
4442 THEN CONCAT_WS(' ', 'BP', demandeur.bp)
4443 ELSE ''
4444 END),
4445 (CASE WHEN demandeur.cedex IS NOT NULL
4446 THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
4447 ELSE ''
4448 END))
4449 as ligne5,
4450 code_barres as code_barres
4451 FROM ".DB_PREFIXE."instruction
4452 INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
4453 INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
4454 INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
4455 LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
4456 WHERE instruction.code_barres ='".$code_barres."'";
4457
4458 // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
4459 if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
4460 $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
4461 } else {
4462 $sqlAdresse .= " AND lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire'";
4463 }
4464
4465 $resAdresse = $f->db->query($sqlAdresse);
4466 $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
4467 $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
4468 $f->isDatabaseError($resAdresse);
4469
4470 // Création adresse destinataire sans ligne vide
4471 $adresse_destinataire = array();
4472 if (!empty($adresse_dest['ligne1'])) {
4473 $adresse_destinataire[] = $adresse_dest['ligne1'];
4474 }
4475 if (!empty($adresse_dest['ligne1_1'])) {
4476 $adresse_destinataire[] = $adresse_dest['ligne1_1'];
4477 }
4478 if (!empty($adresse_dest['ligne1_2'])) {
4479 $adresse_destinataire[] = $adresse_dest['ligne1_2'];
4480 }
4481 $adresse_destinataire[] = $adresse_dest['ligne2'];
4482 if (!empty($adresse_dest['ligne3'])) {
4483 $adresse_destinataire[] = $adresse_dest['ligne3'];
4484 }
4485 if (!empty($adresse_dest['ligne4'])) {
4486 $adresse_destinataire[] = $adresse_dest['ligne4'];
4487 }
4488 $adresse_destinataire[] = $adresse_dest['ligne5'];
4489
4490 // Création du champ specifique
4491 $specifique_content = array();
4492 $specifique_content[] = $adresse_dest['ligne1'];
4493 $specifique_content[] = $adresse_dest['ligne1_1'];
4494 $specifique_content[] = $adresse_dest['ligne1_2'];
4495 $specifique_content[] = $testDemandeur['dossier_libelle'];
4496 $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
4497 unset($adresse_dest['code_barres']);
4498
4499 // Ajout d'une page aux pdf
4500 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
4501
4502 }
4503 $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
4504 require_once PATH_OPENMAIRIE."om_edition.class.php";
4505 $om_edition = new edition();
4506 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
4507 }
4508 }
4509
4510 /**
4511 * VIEW - view_bordereau_envoi_maire.
4512 *
4513 * Formulaire demandant :
4514 * - le code-barres de l'événement d'instruction
4515 * - la date d'envoi du courrier pour signature par le maire
4516 *
4517 * Lors de la validation :
4518 * => met à jour cette date dans l'événement d'instruction
4519 * => crée un lien permettant de générer en PDF le bordereau
4520 *
4521 * @return void
4522 */
4523 function view_bordereau_envoi_maire() {
4524 // Vérification de l'accessibilité sur l'élément
4525 $this->checkAccessibility();
4526
4527 // Récupération des valeur passées en POST ou GET
4528 $code_barres = "";
4529 if($this->f->get_submitted_post_value('code_barres') !== null) {
4530 $code_barres = $this->f->get_submitted_post_value('code_barres');
4531 } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
4532 $code_barres = $this->f->get_submitted_get_value('code_barres');
4533 }
4534 $date = "";
4535 if($this->f->get_submitted_post_value('date') !== null) {
4536 $date = $this->f->get_submitted_post_value('date');
4537 } elseif($this->f->get_submitted_get_value('date') !== null) {
4538 $date = $this->f->get_submitted_get_value('date');
4539 }
4540 $validation = 0;
4541 if($this->f->get_submitted_post_value('validation') !== null) {
4542 $validation = $this->f->get_submitted_post_value('validation');
4543 } elseif($this->f->get_submitted_get_value('validation') !== null) {
4544 $validation = $this->f->get_submitted_get_value('validation');
4545 }
4546
4547 // Si le formulaire a été validé
4548 if ($this->f->get_submitted_post_value('validation') !== null) {
4549 // Tous les champs doivent obligatoirement être remplis
4550 if (!empty($date) && !empty($code_barres)) {
4551 $date_en = $this->dateDB($date);
4552 // Si date valide
4553 if ($date_en != "") {
4554 $id_instruction = $this->get_instruction_by_barcode($code_barres);
4555 // Si un événement d'instruction a été trouvé pour ce code-barres
4556 if ($id_instruction !== null) {
4557 $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
4558 // Si mise à jour réussie de la date d'envoi du courrier
4559 // pour signature par l'autorité compétente
4560 if($ret === true) {
4561 // Message de validation avec lien PDF
4562 $message_class = "valid";
4563 $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
4564 $message .= " : <br/><br/>";
4565 $message .= "<a class='om-prev-icon pdf-16'";
4566 $message .= " id=\"generer_bordereau_envoi_maire\"";
4567 $message .= " title=\""._("Bordereau")."\"";
4568 $message .= " href='../scr/form.php?obj=instruction";
4569 $message .= "&action=200";
4570 $message .= "&idx=".$id_instruction."'";
4571 $message .= " target='_blank'>";
4572 $message .= _("Bordereau d'envoi au maire");
4573 $message .= "</a><br/><br/>";
4574 $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
4575 $message .= _("Code du courrier")." : ".$code_barres."<br/>";
4576 $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
4577
4578 } else {
4579 // Message d'erreur
4580 $message_class = "error";
4581 $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
4582 $code_barres);
4583 }
4584 }
4585 else {
4586 $message_class = "error";
4587 $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
4588 }
4589 }
4590 else {
4591 $message_class = "error";
4592 $message = _("La date est invalide.");
4593 }
4594 } else {
4595 $message_class = "error";
4596 $message = _("Tous les champs doivent etre remplis.");
4597 }
4598 }
4599
4600 /**
4601 * Affichage des messages et du formulaire
4602 */
4603
4604 // Affichage du message de validation ou d'erreur
4605 if (isset($message) && isset($message_class) && $message != "") {
4606 $this->f->displayMessage($message_class, $message);
4607 }
4608
4609 // Inclusion de la classe de gestion des formulaires
4610 require_once "../obj/om_formulaire.class.php";
4611 // Ouverture du formulaire
4612 $datasubmit = $this->getDataSubmit();
4613 echo "\n<!-- ########## START DBFORM ########## -->\n";
4614 echo "<form";
4615 echo " id=\"bordereau_envoi_maire\"";
4616 echo " method=\"post\"";
4617 echo " name=\"f1\"";
4618 echo " action=\"";
4619 echo $datasubmit;
4620 echo "\"";
4621 echo ">\n";
4622
4623 // Paramétrage des champs du formulaire
4624 $champs = array("code_barres","date");
4625
4626 // Création d'un nouvel objet de type formulaire
4627 $form = new formulaire(NULL, 0, 0, $champs);
4628
4629 $template_required_label = '%s *';
4630 // Parametrage du champ code_barres
4631 $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
4632 $form->setType("code_barres", "text");
4633 $form->setVal("code_barres", $code_barres);
4634 $form->setTaille("code_barres", 20);
4635 $form->setMax("code_barres", 20);
4636 // Parametrage du champ date
4637 $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
4638 $form->setType("date", "date") ;
4639 if (empty($date)) {
4640 $date = date('d/m/Y');
4641 }
4642 $form->setVal("date", $date);
4643 $form->setTaille("date", 10);
4644 $form->setMax("date", 10);
4645
4646 // Création du bloc regroupant les champs
4647 $form->setBloc('code_barres','D');
4648 $form->setBloc('date','F');
4649 // Affichage du formulaire
4650 $form->entete();
4651 $form->afficher($champs, 0, false, false);
4652 $form->enpied();
4653 // Affichage du bouton
4654 printf("\t<div class=\"formControls\">\n");
4655 //
4656 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4657 printf("\t</div>\n");
4658 // Fermeture du formulaire
4659 printf("\t</form>\n");
4660 }
4661
4662 /**
4663 * VIEW - view_bordereau_envoi_maire.
4664 *
4665 * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
4666 *
4667 * @return [void]
4668 */
4669 function view_generate_bordereau_envoi_maire() {
4670 // Vérification de l'accessibilité sur l'élément
4671 $this->checkAccessibility();
4672 // Récupération de la collectivité du dossier d'instruction
4673 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
4674 // Récupération de ses paramètres
4675 $collectivite = $this->f->getCollectivite($collectivite_di);
4676 // Génération du PDF
4677 $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
4678 // Affichage du PDF
4679 $this->expose_pdf_output(
4680 $result['pdf_output'],
4681 $result['filename']
4682 );
4683 }
4684
4685 /**
4686 * Retourne l'événement d'instruction dont on donne le code-barres
4687 *
4688 * @param [string] $barcode numéro du code-barres
4689 * @return [mixed] ID de son instruction ou null si aucun code
4690 */
4691 function get_instruction_by_barcode($barcode) {
4692 // Begin
4693 $this->begin_treatment(__METHOD__);
4694 // Vérification de l'existence de l'événement d'instruction
4695 // pour le code-barres donné
4696 $sql = "SELECT instruction
4697 FROM ".DB_PREFIXE."instruction
4698 WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
4699 $res = $this->f->db->getOne($sql);
4700 $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4701 $this->f->isDatabaseError($res);
4702 // Retourne résultat
4703 return $this->end_treatment(__METHOD__, $res);
4704 }
4705
4706 /**
4707 * Met à jour le champ date d'envoi signature
4708 * avec la date fournie et pour l'instruction donnée
4709 *
4710 * @param [string] $id ID de l'événement d'instruction
4711 * @param [string] $date date au format EN
4712 * @return [boolean] true si mise à jour avec succès
4713 */
4714 function update_date_envoi_signature($id, $date) {
4715 // Préparation du tableau
4716 $valF = array();
4717 $valF['date_envoi_signature'] = $date;
4718 // Begin
4719 $this->begin_treatment(__METHOD__);
4720 // Requête
4721 $res = $this->db->autoExecute(
4722 DB_PREFIXE.$this->table,
4723 $valF,
4724 DB_AUTOQUERY_UPDATE,
4725 $this->getCle($id)
4726 );
4727 // S'il y a eu une erreur
4728 if (database::isError($res, true)) {
4729 $this->end_treatment(__METHOD__, false);
4730 }
4731 //
4732 return $this->end_treatment(__METHOD__, true);
4733 }
4734
4735 /**
4736 * Méthode permettant de définir des valeurs à envoyer en base après
4737 * validation du formulaire d'ajout.
4738 * @param array $val tableau des valeurs retournées par le formulaire
4739 */
4740 function setValFAjout($val) {
4741 // Mise à jour du flag created_by_commune lors d'un changement de décision
4742 // par un utilisateur de commune sur un dossier instruit par la comcom
4743 if($this->f->isInstrCanChangeDecision($this->valF["dossier"])) {
4744 $this->valF['created_by_commune'] = true;
4745 }
4746 }
4747
4748 /**
4749 * Récupère l'instance du dossier d'instruction
4750 *
4751 * @param mixed Identifiant du dossier d'instruction
4752 *
4753 * @return object
4754 */
4755 function get_inst_dossier($dossier = null) {
4756 //
4757 return $this->get_inst_common("dossier", $dossier);
4758 }
4759
4760
4761 /**
4762 * Logue l'action de l'instruction dans son DI.
4763 *
4764 * @param string $id Clé primaire de l'instruction.
4765 * @param array $val Valeurs de l'instruction.
4766 *
4767 * @return bool Vrai si traitement effectué avec succès
4768 */
4769 private function add_log_to_dossier($id, array $val) {
4770 $maj = $this->getParameter("maj");
4771 // Action = Trace par défaut
4772 $action = $this->get_backtrace();
4773 // Action = Identifant de l'action si contexte connu
4774 if (empty($maj) === false
4775 || (empty($maj) === true && $maj === 0)) {
4776 $action = $this->get_action_param($maj, 'identifier');
4777 if ($action === 'modifier_suivi') {
4778 $action = "modifier (via l'action suivi des dates)";
4779 }
4780 if ($action === 'notifier_commune'
4781 && isset($val['mails_destinataires']) === true) {
4782 $action = "notification de la commune (courriels : ";
4783 $action .= $val['mails_destinataires'].")";
4784 }
4785 }
4786 // Création du log
4787 $log = array(
4788 'date' => date('Y-m-d H:i:s'),
4789 'user' => $_SESSION['login'],
4790 'action' => $action,
4791 'values' => array(
4792 'date_evenement' => $this->dateDB($val['date_evenement']),
4793 'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
4794 'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
4795 'evenement' => $val['evenement'],
4796 'action' => $val['action'],
4797 'instruction' => $id,
4798 'etat' => $val['etat'],
4799 ),
4800 );
4801 // Ajout du log
4802 $di = $this->get_inst_dossier($val['dossier']);
4803 $ret = $di->add_log_instructions($log);
4804 if ($ret === false) {
4805 $this->correct = false;
4806 $this->msg = '';
4807 $this->addToMessage($di->msg);
4808 }
4809 return $ret;
4810 }
4811
4812
4813 /**
4814 * Retourne le contexte de déboguage formaté en HTML.
4815 *
4816 * @return string Une ligne par trace
4817 */
4818 private function get_backtrace() {
4819 $trace = debug_backtrace();
4820 $backtrace = '';
4821 $i = 1;
4822 foreach ($trace as $key => $value) {
4823 $func = $trace[$key]['function'];
4824 // On ne s'autolog pas
4825 if ($func === 'get_backtrace'
4826 || $func === 'add_log_to_dossier') {
4827 continue;
4828 }
4829 $backtrace .= $i.') ';
4830 // Si dans une classe
4831 if (isset($trace[$key]['class']) === true
4832 && empty($trace[$key]['class']) === false) {
4833 $backtrace .= $trace[$key]['class'].'->'.$func;
4834 }
4835 // Si procédural
4836 else {
4837 $file = $trace[$key]['file'];
4838 $line = $trace[$key]['line'];
4839 $truncated_file = $this->f->get_relative_path($file);
4840 if ($truncated_file !== false) {
4841 $file = $truncated_file;
4842 }
4843 $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
4844 }
4845 $backtrace .= '<br/>';
4846 $i++;
4847 }
4848 return $backtrace;
4849 }
4850
4851 /**
4852 * CONDITION - is_notifiable.
4853 *
4854 * Condition pour afficher l'action notifier_commune.
4855 *
4856 * @return boolean
4857 */
4858 public function is_notifiable() {
4859 // L'instruction doit être finalisée, ce qui revient à dire
4860 // définalisable sans bypass
4861 if ($this->is_unfinalizable_without_bypass() === false) {
4862 return false;
4863 }
4864 // La collectivité de l'utilisateur doit être de niveau multi
4865 if ($this->f->has_collectivite_multi() === false) {
4866 return false;
4867 }
4868 // Le paramètre multi de l'objet du courriel doit exister
4869 if ($this->f->getParameter('param_courriel_de_notification_commune_objet_depuis_instruction') === NULL) {
4870 return false;
4871 }
4872 // Le paramètre multi du modèle du courriel doit exister
4873 if ($this->f->getParameter('param_courriel_de_notification_commune_modele_depuis_instruction') === NULL) {
4874 return false;
4875 }
4876 // A ce stade toutes les conditions sont satisfaites
4877 return true;
4878 }
4879
4880 /**
4881 * TREATMENT - notifier_commune.
4882 *
4883 * Notifie aux communes et par courriel la finalisation d'une instruction.
4884 *
4885 * @return boolean
4886 */
4887 public function notifier_commune() {
4888 // Cette méthode permet d'exécuter une routine en début des méthodes
4889 // dites de TREATMENT.
4890 $this->begin_treatment(__METHOD__);
4891 // Définition des paramètres
4892 $p_objet = 'param_courriel_de_notification_commune_objet_depuis_instruction';
4893 $p_modele = 'param_courriel_de_notification_commune_modele_depuis_instruction';
4894 $p_courriel = 'param_courriel_de_notification_commune';
4895 // Définition des variables de substitution
4896 $id_di = $this->getVal('dossier');
4897 $id_inst = $this->getVal($this->clePrimaire);
4898 // Instanciation du DI
4899 $di = $this->get_inst_dossier($id_di);
4900 // Récupération du paramétrage de la collectivité du dossier
4901 $collectivite_di = $di->getVal('om_collectivite');
4902 $params_mono = $this->f->getCollectivite($collectivite_di);
4903 // Récupération du paramétrage de la collectivité multi
4904 $collectivite_multi = $this->f->get_idx_collectivite_multi();
4905 $params_multi = $this->f->getCollectivite($collectivite_multi);
4906 // Vérification de l'objet (obligatoirement multi)
4907 $objet = null;
4908 if (isset($params_multi[$p_objet]) === true
4909 && $params_multi[$p_objet] !== '') {
4910 $objet = $params_multi[$p_objet];
4911 }
4912 // Vérification du modèle mono en priorité
4913 $modele = null;
4914 if (isset($params_mono[$p_modele]) === true
4915 && $params_mono[$p_modele] !== '') {
4916 $modele = $params_mono[$p_modele];
4917
4918 }
4919 // Sinon vérification du modèle multi
4920 if ($modele === null
4921 && isset($params_multi[$p_modele]) === true
4922 && $params_multi[$p_modele] !== '') {
4923 $modele = $params_multi[$p_modele];
4924 }
4925 // Vérification des adresses de courriel mono
4926 $courriels_valides = array();
4927 $courriels_invalides = array();
4928 if (isset($params_mono[$p_courriel]) === true
4929 && $params_mono[$p_courriel] !== '') {
4930 // Un mail par ligne
4931 $adresses = explode("\n", $params_mono[$p_courriel]);
4932 // Vérification de la validité de chaque mail avec preg_match
4933 foreach ($adresses as $adresse) {
4934 $adresse = trim($adresse);
4935 if ($this->f->checkValidEmailAddress($adresse) === 1) {
4936 $courriels_valides[] = $adresse;
4937 } else {
4938 $courriels_invalides[] = $adresse;
4939 }
4940 }
4941 }
4942 // Vérification du paramétrage global :
4943 // on stoppe le traitement si au moins un paramètre est incorrect
4944 if ($objet === null
4945 || $modele === null
4946 || count($courriels_valides) === 0
4947 || count($courriels_invalides) > 0) {
4948 // On construit le message d'erreur adéquat
4949 $this->addToMessage(_('Erreur de paramétrage :'));
4950 if ($objet === null) {
4951 $this->addToMessage(_("* l'objet du courriel envoyé aux communes est vide"));
4952 }
4953 if ($modele === null) {
4954 $this->addToMessage(_("* le modèle du courriel envoyé aux communes est vide"));
4955 }
4956 if (count($courriels_valides) === 0) {
4957 $this->addToMessage(_("* aucun courriel valide de destinataire de la commune"));
4958 }
4959 if (count($courriels_invalides) > 0) {
4960 $courriels_invalides = implode(', ', $courriels_invalides);
4961 $this->addToMessage(_("* un ou plusieurs courriels des destinataires de la commune sont invalides : ").$courriels_invalides);
4962 }
4963 $this->addToMessage(_("Veuillez contacter votre administrateur."));
4964 return $this->end_treatment(__METHOD__, false);
4965 }
4966 // Remplacement des variables de substitution
4967 $objet = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $objet);
4968 $modele = $this->formater_modele($modele, $id_di, $id_inst);
4969 // Exécution du traitement d'envoi du/des mail(s)
4970 $fails = array();
4971 foreach ($courriels_valides as $email) {
4972 if ($this->f->sendMail(
4973 iconv("UTF-8", "CP1252", $objet),
4974 iconv("UTF-8", "CP1252", $modele),
4975 iconv("UTF-8", "CP1252", $email)) === false) {
4976 $fails[] = $email;
4977 }
4978 }
4979 // Si échec message d'erreur et arrêt du traitement
4980 if (count($fails) > 0) {
4981 $fails = implode(', ', $fails);
4982 $this->addToMessage(_("Erreur lors de l'envoi du courriel aux destinataires : ").$fails);
4983 $this->addToMessage(_("Veuillez contacter votre administrateur."));
4984 return $this->end_treatment(__METHOD__, false);
4985 }
4986 // Ajout du log
4987 $this->setValFFromVal();
4988 $val_inst = $this->valF;
4989 $val_inst['mails_destinataires'] = implode(', ', $courriels_valides);
4990 if ($this->add_log_to_dossier($id_inst, $val_inst) === false) {
4991 $this->addToMessage(_("Erreur lors de la notification."));
4992 $this->addToMessage(_("Veuillez contacter votre administrateur."));
4993 return $this->end_treatment(__METHOD__, false);
4994 }
4995 // Message de validation
4996 $this->addToMessage(_('La commune a été notifiée.'));
4997 return $this->end_treatment(__METHOD__, true);
4998 }
4999
5000 /**
5001 * Formatte le corps du courriel notifié aux communes
5002 *
5003 * @param string $modele template du modèle du courriel
5004 * @param string $id_di clé primaire du DI
5005 * @param string $id_inst clé primaire de l'instruction
5006 * @return string corps du mail au format HTML
5007 */
5008 public function formater_modele($modele, $id_di, $id_inst) {
5009 // Création du lien d'accès direct à l'instruction
5010 $url_inst = PATH_BASE_URL.'spg/direct_link.php?obj=dossier_instruction&action=3'.
5011 '&direct_field=dossier&direct_form=instruction&direct_action=3&direct_idx='.$id_inst;
5012 $url_inst = '<a href="'.$url_inst.'">'.$url_inst.'</a>';
5013 // Remplacement des champs de fusion
5014 $modele = str_replace('<DOSSIER_INSTRUCTION>', $id_di, $modele);
5015 $modele = str_replace('<URL_INSTRUCTION>', $url_inst, $modele);
5016 $modele = str_replace('<ID_INSTRUCTION>', $id_inst, $modele);
5017 // Encodage HTML des sauts de ligne
5018 $modele = preg_replace("/\r\n|\r|\n/",'<br/>',$modele);
5019 //
5020 return $modele;
5021 }
5022 }// fin classe
5023
5024 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26