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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4401 - (show annotations)
Fri Jun 3 16:05:49 2016 UTC (8 years, 6 months ago) by softime
File size: 217563 byte(s)
* Évolution - Suppression de l'interface avec le référentiel Arrêté non
  maintenue.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26