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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4108 - (show annotations)
Wed May 11 10:26:54 2016 UTC (8 years, 8 months ago) by nmeucci
File size: 222132 byte(s)
Nouvelle action sur l'instruction permettant de notifier par mail les communes.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26