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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3957 - (show annotations)
Wed Apr 13 15:50:18 2016 UTC (8 years, 7 months ago) by nmeucci
File size: 212526 byte(s)
Error occurred while calculating annotation data.
* Correction du log des événements d'instructions d'un DI.
  Une NOTICE PHP était levée si trace en contexte procédural.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26