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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3971 - (show annotations)
Thu Apr 14 15:38:36 2016 UTC (8 years, 7 months ago) by nmeucci
File size: 214442 byte(s)
Error occurred while calculating annotation data.
Corrections des logs des événements d'instruction dans le DI :
 * ajout contexte envoi lettre RAR depuis le menu suivi des pièces

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, array_merge($val, $this->valF));
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 $current_id = $this->getVal($this->clePrimaire);
1667 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1668 // Si la date de retour signature est éditée on vérifie si il existe un événement automatique
1669 if ($this->getVal('date_retour_signature') == "" AND
1670 $this->valF['date_retour_signature'] != "" AND
1671 $row['evenement_retour_signature'] != "") {
1672 $new_instruction = new instruction("]", $db, $DEBUG);
1673 // Création d'un tableau avec la liste des champs de l'instruction
1674 foreach($new_instruction->champs as $champ) {
1675 $valNewInstr[$champ] = "";
1676 }
1677 // Définition des valeurs de la nouvelle instruction
1678 $valNewInstr["evenement"] = $row['evenement_retour_signature'];
1679 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1680 $valNewInstr["dossier"] = $this->valF['dossier'];
1681 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_signature']);
1682 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1683 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1684 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1685 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1686 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1687 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1688 $new_instruction->setParameter("maj", 0);
1689 $new_instruction->class_actions[0]["identifier"] =
1690 "retour signature de l'instruction $current_id";
1691 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1692
1693 //Si une erreur s'est produite et qu'il s'agit d'un problème
1694 //de restriction
1695 if ($retour == false && !$new_instruction->restriction_valid){
1696 $error_message = $this->get_restriction_error_message($restriction);
1697 $this->f->displayMessage("error", $error_message);
1698 $this->addToLog("triggermodifierapres() : evenement retour ".
1699 "instruction ".$this->valF[$this->clePrimaire]." : ".
1700 $new_instruction->msg);
1701 }
1702 //Si une erreur s'est produite après le test de la restriction
1703 elseif ($retour == false && $new_instruction->restriction_valid){
1704 $this->correct = false ;
1705 $this->msg .= $new_instruction->msg;
1706 return false;
1707 }
1708 }
1709 // Si la date de retour AR est éditée on vérifie si il existe un événement automatique
1710 if ($this->getVal('date_retour_rar') == "" AND
1711 $this->valF['date_retour_rar'] != "") {
1712
1713 if($row['evenement_retour_ar'] != "") {
1714 $new_instruction = new instruction("]", $db, $DEBUG);
1715 // Création d'un tableau avec la liste des champs de l'instruction
1716 foreach($new_instruction->champs as $champ) {
1717 $valNewInstr[$champ] = "";
1718 }
1719 // Définition des valeurs de la nouvelle instruction
1720 $valNewInstr["evenement"] = $row['evenement_retour_ar'];
1721 $valNewInstr["destinataire"] = $this->valF['destinataire'];
1722 $valNewInstr["dossier"] = $this->valF['dossier'];
1723 $valNewInstr["date_evenement"] = $this->f->formatDate($this->valF['date_retour_rar']);
1724 $valNewInstr["date_envoi_signature"] = $this->f->formatDate($this->valF['date_envoi_signature']);
1725 $valNewInstr["date_retour_signature"] = $this->f->formatDate($this->valF['date_retour_signature']);
1726 $valNewInstr["date_envoi_rar"] = $this->f->formatDate($this->valF['date_envoi_rar']);
1727 $valNewInstr["date_retour_rar"] = $this->f->formatDate($this->valF['date_retour_rar']);
1728 $valNewInstr["date_envoi_controle_legalite"] = $this->f->formatDate($this->valF['date_envoi_controle_legalite']);
1729 $valNewInstr["date_retour_controle_legalite"] = $this->f->formatDate($this->valF['date_retour_controle_legalite']);
1730 $new_instruction->setParameter("maj", 0);
1731 $new_instruction->class_actions[0]["identifier"] =
1732 "retour RAR de l'instruction $current_id";
1733 $retour = $new_instruction->ajouter($valNewInstr,$db, $DEBUG);
1734
1735 //Si une erreur s'est produite et qu'il s'agit d'un problème
1736 //de restriction
1737 if ($retour == false && !$new_instruction->restriction_valid) {
1738 $error_message = $this->get_restriction_error_message($restriction);
1739 $this->f->displayMessage("error", $error_message);
1740 $this->addToLog(
1741 "triggermodifierapres() : evenement retour instruction ".
1742 $this->valF[$this->clePrimaire]." : ".
1743 $new_instruction->msg
1744 );
1745 }
1746 //Si une erreur s'est produite après le test de la restriction
1747 elseif ($retour == false && $new_instruction->restriction_valid){
1748 $this->correct = false ;
1749 $this->msg .= $new_instruction->msg;
1750 return false;
1751 }
1752 }
1753 // Mise à jour du flag incomplet_notifie dans dossier si la
1754 // date limite d'instruction n'est pas dépassée
1755 if($row['type']=='incompletude' &&
1756 ($this->valF['archive_date_notification_delai'] >= $this->valF['date_retour_rar'] ||
1757 $this->valF['archive_date_notification_delai'] == "")) {
1758 $valFIncomp['incomplet_notifie'] = true;
1759 $cle = " dossier='".$val['dossier']."'";
1760 $resIncomp = $db->autoExecute(
1761 DB_PREFIXE.'dossier',
1762 $valFIncomp,
1763 DB_AUTOQUERY_UPDATE,
1764 $cle
1765 );
1766 $this->addToLog(
1767 "triggersupprimer(): db->autoexecute(\"".
1768 DB_PREFIXE."dossier\", ".print_r($valFIncomp, true).
1769 ", DB_AUTOQUERY_UPDATE, \"".$cle."\");",
1770 VERBOSE_MODE
1771 );
1772 if (database::isError($resIncomp)) {
1773 die($resIncomp->getMessage());
1774 }
1775 }
1776 }
1777 }
1778 }
1779
1780 //Récupération du type de l'événement
1781 $sql = "SELECT type
1782 FROM ".DB_PREFIXE."evenement
1783 WHERE evenement=".$this->valF['evenement'];
1784 $type_evmt = $db->getOne($sql);
1785 $this->addToLog("triggermodifierapres(): db->getone(\"".$sql."\");", VERBOSE_MODE);
1786 if (database::isError($type_evmt)) {
1787 die($type_evmt->getMessage());
1788 }
1789
1790 /**
1791 * REFERENTIEL ARRETE
1792 */
1793 // Si l'option référentiel arrêté est activé et l'événement est de type
1794 // arrêté
1795
1796 if ($this->f->getParameter('option_referentiel_arrete') === 'true' AND
1797 $type_evmt == "arrete") {
1798 if ($this->valF['date_retour_signature'] != $this->getVal('date_retour_signature')) {
1799 $msgenque = new MessageEnqueuer();
1800 $sqlArrete = "SELECT instruction.signataire_arrete as \"ws_DA_In_Signataire\",
1801 signataire_arrete.nom as \"ws_DA_In_Sign_Nom\",
1802 signataire_arrete.prenom as \"ws_DA_In_Sign_Prenom\",
1803 signataire_arrete.qualite as \"ws_DA_In_Sign_Qualite\",
1804 instruction.date_evenement as \"ws_DA_In_Dte_Redac\",
1805 '' as \"ws_DA_In_lieu_Redac\",
1806 instruction.dossier as \"ws_DA_In_N_Doss_DAS\",
1807 '' as \"ws_DA_In_Sigle\",
1808 instruction.etat as \"ws_DA_In_Decision\",
1809 dossier.date_depot as \"ws_DA_In_Dte_Depot_Dem\",
1810 dossier.terrain_adresse_voie_numero as \"ws_DA_In_N_Voie\",
1811 '' as \"ws_DA_In_Type_Voie\",
1812 dossier.terrain_adresse_voie as \"ws_DA_In_Adresse1\",
1813 dossier.terrain_adresse_lieu_dit as \"ws_DA_In_Adresse2\",
1814 dossier.terrain_adresse_code_postal as \"ws_DA_In_CP\",
1815 dossier.terrain_adresse_localite as \"ws_DA_In_Ville\",
1816 dossier.terrain_references_cadastrales as \"ws_DA_In_Nb_Parcelle\",
1817 '' as \"ws_DA_In_Detail_Parcelle\",
1818 CONCAT(donnees_techniques.am_projet_desc,' ',donnees_techniques.co_projet_desc) as \"ws_DA_In_Nature_Trvx\",
1819 '' as \"ws_DA_In_Destination_Trvx\",
1820 dossier_autorisation_type_detaille.code as \"ws_DA_In_Type_Dos_Autoris\",
1821 COALESCE(particulier_nom,personne_morale_raison_sociale) as \"ws_DA_In_Nom_Petition\",
1822 COALESCE(particulier_prenom, personne_morale_denomination) as \"ws_DA_In_Prenom_Petition\",
1823 '' as \"ws_DA_In_Piece_GED\",
1824 instruction.date_retour_signature as \"ws_DA_In_Dte_Signature\"
1825 FROM ".DB_PREFIXE."instruction
1826 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
1827 instruction.signataire_arrete = signataire_arrete.signataire_arrete
1828 LEFT JOIN ".DB_PREFIXE."dossier ON
1829 instruction.dossier = dossier.dossier
1830 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
1831 lien_dossier_demandeur.dossier = dossier.dossier
1832 LEFT JOIN ".DB_PREFIXE."demandeur ON
1833 lien_dossier_demandeur.demandeur = demandeur.demandeur
1834 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type ON
1835 dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1836 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille ON
1837 dossier_instruction_type.dossier_autorisation_type_detaille =
1838 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1839 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
1840 donnees_techniques.dossier_instruction = dossier.dossier
1841 WHERE instruction.instruction = ".$this->valF['instruction'];
1842 $resArrete = $this->db->query($sqlArrete);
1843 $this->f->addToLog("triggermodifierapres(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
1844 if ( database::isError($resArrete)){
1845 die();
1846 }
1847
1848 $rowArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
1849 $msgenque->setArreteInfo($rowArrete);
1850 $return = $msgenque->enqueueMessage($msgenque::$ARRETE_ENVOI);
1851 //Si une erreur s'est produite on arrête le traitement et on
1852 //retourne une erreur
1853 if ($return !== 0){
1854
1855 //On supprime les messages précédents
1856 $this->msg = '';
1857 $this->addToMessage(_("Une erreur s'est produite lors de ".
1858 "l'envoi du message au referentiel arrêté. Merci de ".
1859 "contacter votre administrateur."));
1860 //On ne valide pas le formulaire
1861 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
1862 $this->correct = false;
1863 return false;
1864 }
1865 else {
1866 $this->addToMessage(_("Le message a ete transmis au ".
1867 "referentiel arrêté."));
1868 }
1869 }
1870 }
1871
1872 // Mise à jour des données du dossier d'autorisation
1873 require_once "../obj/dossier_autorisation.class.php";
1874 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($this->valF['dossier']), $this->db, DEBUG);
1875 if($da->majDossierAutorisation() === false) {
1876 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
1877 $this->correct = false;
1878 return false;
1879 }
1880 return $this->add_log_to_dossier($id, $val);
1881 }
1882
1883 function triggersupprimer($id,&$db,$val,$DEBUG) {
1884 /**
1885 * L'objectif ici est de repositionner les valeurs récupérées en
1886 * archive dans le dossier d'instruction avant de supprimer l'événement
1887 * d'instruction
1888 */
1889
1890 // Mise à jour des 4 valeurs modifiées par l'action
1891 $valF['delai'] = $val['archive_delai'];
1892 $valF['accord_tacite'] = $val['archive_accord_tacite'];
1893 $valF['etat'] = $val['archive_etat'];
1894 if ($val['archive_avis'] != '') {
1895 $valF['avis_decision'] = $val['archive_avis'];
1896 } else {
1897 $valF['avis_decision'] = NULL;
1898 }
1899 // Mise à jour des 10 dates avec la valeur présente dans le formulaire
1900 // de suppression. Si la valeur de la date est vide alors on fixe
1901 // à la valeur NULL
1902 //
1903 if ($val['archive_date_complet'] != '') {
1904 $valF['date_complet'] = $val['archive_date_complet'];
1905 } else {
1906 $valF['date_complet'] = NULL;
1907 }
1908 if ($val['archive_date_dernier_depot'] != '') {
1909 $valF['date_dernier_depot'] = $val['archive_date_dernier_depot'];
1910 } else {
1911 $valF['date_dernier_depot'] = NULL;
1912 }
1913 if ($val['archive_date_rejet'] != '') {
1914 $valF['date_rejet'] = $val['archive_date_rejet'];
1915 } else {
1916 $valF['date_rejet'] = NULL;
1917 }
1918 if ($val['archive_date_limite'] != '') {
1919 $valF['date_limite'] = $val['archive_date_limite'];
1920 } else {
1921 $valF['date_limite'] = NULL;
1922 }
1923 if ($val['archive_date_notification_delai'] != '') {
1924 $valF['date_notification_delai'] = $val['archive_date_notification_delai'];
1925 } else {
1926 $valF['date_notification_delai'] = NULL;
1927 }
1928 if ($val['archive_date_decision'] != '') {
1929 $valF['date_decision'] = $val['archive_date_decision'];
1930 } else {
1931 $valF['date_decision'] = NULL;
1932 }
1933 if ($val['archive_date_validite'] != '') {
1934 $valF['date_validite'] = $val['archive_date_validite'];
1935 } else {
1936 $valF['date_validite'] = NULL;
1937 }
1938 if ($val['archive_date_achevement'] != '') {
1939 $valF['date_achevement'] = $val['archive_date_achevement'];
1940 } else {
1941 $valF['date_achevement'] = NULL;
1942 }
1943 if ($val['archive_date_chantier'] != '') {
1944 $valF['date_chantier'] = $val['archive_date_chantier'];
1945 } else {
1946 $valF['date_chantier'] = NULL;
1947 }
1948 if ($val['archive_date_conformite'] != '') {
1949 $valF['date_conformite'] = $val['archive_date_conformite'];
1950 } else {
1951 $valF['date_conformite'] = NULL;
1952 }
1953 if ($val['archive_incompletude'] != '') {
1954 $valF['incompletude'] = $val['archive_incompletude'];
1955 } else {
1956 $valF['incompletude'] = NULL;
1957 }
1958 if ($val['archive_incomplet_notifie'] != '') {
1959 $valF['incomplet_notifie'] = $val['archive_incomplet_notifie'];
1960 } else {
1961 $valF['incomplet_notifie'] = NULL;
1962 }
1963 if ($val['archive_evenement_suivant_tacite'] != '') {
1964 $valF['evenement_suivant_tacite'] = $val['archive_evenement_suivant_tacite'];
1965 } else {
1966 $valF['evenement_suivant_tacite'] = NULL;
1967 }
1968 if ($val['archive_evenement_suivant_tacite_incompletude'] != '') {
1969 $valF['evenement_suivant_tacite_incompletude'] = $val['archive_evenement_suivant_tacite_incompletude'];
1970 } else {
1971 $valF['evenement_suivant_tacite_incompletude'] = NULL;
1972 }
1973 if ($val['archive_etat_pendant_incompletude'] != '') {
1974 $valF['etat_pendant_incompletude'] = $val['archive_etat_pendant_incompletude'];
1975 } else {
1976 $valF['etat_pendant_incompletude'] = NULL;
1977 }
1978 if ($val['archive_date_limite_incompletude'] != '') {
1979 $valF['date_limite_incompletude'] = $val['archive_date_limite_incompletude'];
1980 } else {
1981 $valF['date_limite_incompletude'] = NULL;
1982 }
1983 if ($val['archive_delai_incompletude'] != '') {
1984 $valF['delai_incompletude'] = $val['archive_delai_incompletude'];
1985 } else {
1986 $valF['delai_incompletude'] = NULL;
1987 }
1988 if ($val['archive_autorite_competente'] != '') {
1989 $valF['autorite_competente'] = $val['archive_autorite_competente'];
1990 } else {
1991 $valF['autorite_competente'] = NULL;
1992 }
1993 // On met à jour le dossier
1994 $cle = " dossier='".$val['dossier']."'";
1995 $res = $db->autoExecute(DB_PREFIXE.'dossier', $valF, DB_AUTOQUERY_UPDATE, $cle);
1996 $this->addToLog("triggersupprimer(): db->autoexecute(\"".DB_PREFIXE."dossier\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$cle."\");", VERBOSE_MODE);
1997 if (database::isError($res)) {
1998 die($res->getMessage());
1999 }
2000 // Affichage d'informations à l'utilisateur
2001 $this->addToMessage(_("Suppression de l'instruction")." [".$db->affectedRows()." "._('enregistrement')." "._('mis_a_jour')."]");
2002
2003 // Mise à jour de la demande si un récépissé d'instruction correspond à l'instruction à supprimer
2004 }
2005
2006 function triggersupprimerapres($id,&$db,$val,$DEBUG) {
2007
2008 // Mise à jour des données du dossier d'autorisation
2009 require_once "../obj/dossier_autorisation.class.php";
2010 $da = new dossier_autorisation($this->getNumDemandeAutorFromDossier($val["dossier"]), $this->db, DEBUG);
2011 if($da->majDossierAutorisation() === false) {
2012 $this->addToMessage(_("Erreur lors de la mise a jour des donnees du dossier d'autorisation. Contactez votre administrateur."));
2013 $this->correct = false;
2014 return false;
2015 }
2016 $val['evenement'] = $this->getVal('evenement');
2017 return $this->add_log_to_dossier($id, $val);
2018 }
2019
2020 /**
2021 * Permet de composer un message d'erreur sur restriction non valide en
2022 * fonction du contexte.
2023 *
2024 * @param string $restriction formule de la restriction
2025 *
2026 * @return string message d'erreur
2027 */
2028 function get_restriction_error_message($restriction) {
2029 // Affichage du message si la restriction s'applique
2030 // Contexte du suivi des dates (message simple)
2031 $message_restrict = _("Probleme de dates :");
2032 // Split restriction
2033 $champs_restrict = preg_split(
2034 '/(\W+)/',
2035 $restriction,
2036 null,
2037 PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE
2038 );
2039 $formated_restrict = "";
2040 // Ajout des chaînes à traduire
2041 foreach ($champs_restrict as $value) {
2042 $formated_restrict .= _($value)." ";
2043 }
2044 $formated_restrict = substr($formated_restrict, 0, -1);
2045 // Message d'erreur dans le contexte du suivi des dates
2046 if($this->getParameter("maj") == 170) {
2047 $message_restrict .= " "._("contactez l'instructeur du dossier");
2048 $message_restrict .= "<br/>(".$formated_restrict.")";
2049 } else {
2050 // Affichage du message si la restriction s'applique
2051 // Contexte instruction
2052 $message_restrict .= "<br/>".$formated_restrict;
2053 }
2054
2055 return $message_restrict;
2056 }
2057
2058 /**
2059 * Vérifie la restriction sur l'événement.
2060 *
2061 * @param array $val valeurs du formulaire
2062 * @param database $db handler database
2063 * @param boolean $DEBUG NA
2064 *
2065 * @return [type] [description]
2066 */
2067 function verifier($val = array(), &$db, $DEBUG) {
2068 parent::verifier($val, $db, $DEBUG);
2069
2070 if ( isset($val['evenement']) && is_numeric($val['evenement'])){
2071 $restriction = $this->get_restriction($val['evenement']);
2072
2073 //Test qu'une restriction est présente
2074 if ($restriction != "" ){
2075
2076 //Test si la restriction est valide
2077 $this->restriction_valid = $this->restrictionIsValid($restriction);
2078 if ( !$this->restriction_valid ){
2079
2080 // Affichage du message si la restriction s'applique
2081 $this->addToMessage(
2082 $this->get_restriction_error_message($restriction)
2083 );
2084 $this->correct=false;
2085 return false;
2086 }
2087
2088 // Liste des opérateurs possible
2089 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
2090 // Supprime tous les espaces de la chaîne de caractère
2091 $restriction = str_replace(' ', '', $restriction);
2092
2093 // Met des espace avant et après les opérateurs puis transforme la
2094 // chaine en un tableau
2095 $tabRestriction = str_replace($operateurs, " ", $restriction);
2096 // Tableau des champ
2097 $tabRestriction = explode(" ", $tabRestriction);
2098 // Supprime les numériques du tableau
2099 foreach ($tabRestriction as $key => $value) {
2100 if (is_numeric($value)) {
2101 unset($tabRestriction[$key]);
2102 }
2103 }
2104
2105 // Vérifie les champs utilisés pour la restriction
2106 $check_field_exist = $this->f->check_field_exist($tabRestriction, 'instruction');
2107 if ($check_field_exist !== true) {
2108
2109 // Liste des champs en erreur
2110 $string_error_fields = implode(", ", $check_field_exist);
2111
2112 // Message d'erreur
2113 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
2114 if (count($check_field_exist) > 1) {
2115 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
2116 }
2117
2118 // Affiche l'erreur
2119 $this->correct=false;
2120 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
2121 $this->addToMessage(_("Veuillez contacter votre administrateur."));
2122 }
2123 }
2124
2125 }
2126 if(!$this->updateDate("date_envoi_signature")) {
2127 return false;
2128 }
2129 if(!$this->updateDate("date_retour_signature")) {
2130 return false;
2131 }
2132 if(!$this->updateDate("date_envoi_rar")) {
2133 return false;
2134 }
2135 if(!$this->updateDate("date_retour_rar")) {
2136 return false;
2137 }
2138 if(!$this->updateDate("date_envoi_controle_legalite")) {
2139 return false;
2140 }
2141 if(!$this->updateDate("date_retour_controle_legalite")) {
2142 return false;
2143 }
2144
2145 }
2146
2147 /**
2148 * Méthode permettant de récupérer toutes les valeurs de l'événement
2149 * sélectionné après validation du formulaire d'instruction
2150 *
2151 * @return array() veleurs de l'événement lié
2152 */
2153
2154 private function getValEvenement() {
2155 if(!empty($this->valEvenement)) {
2156 return $this->valEvenement;
2157 } else {
2158 $sql = "SELECT * FROM ".DB_PREFIXE."evenement
2159 WHERE evenement=".$this->valF['evenement'];
2160 $res = $this->db->query($sql);
2161 $this->addToLog("getValEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
2162 if (database::isError($res)) {
2163 die($res->getMessage());
2164 }
2165 $this->valEvenement = $res->fetchRow(DB_FETCHMODE_ASSOC);
2166 return $this->valEvenement;
2167 }
2168 }
2169
2170 /**
2171 * Méthode permettant de savoir si le dossier lié à l'instruction à le flag
2172 * incompletude à true après validation du formulaire d'instruction
2173 *
2174 * @return boolean
2175 */
2176 private function dossierIncomplet() {
2177 $sql = "SELECT incompletude FROM ".DB_PREFIXE."dossier
2178 WHERE dossier='".$this->valF['dossier']."'";
2179 $incompletude = $this->db->getOne($sql);
2180 $this->addToLog("dossierIncomplet(): db->query(\"".$sql."\");", VERBOSE_MODE);
2181 if (database::isError($incompletude)) {
2182 die($incompletude->getMessage());
2183 }
2184 if ($incompletude == 't') {
2185 return true;
2186 } else {
2187 return false;
2188 }
2189 }
2190
2191 /**
2192 * Finalisation des documents.
2193 * @param string $champ champ du fichier à finaliser
2194 * @param booleen $status permet de définir si on finalise ou définalise
2195 * @param string $sousform permet de savoir si se trouve dans un sousformulaire (passé au javascript)
2196 */
2197 function manage_finalizing($mode = null, $val = array()) {
2198
2199 // Si le mode n'existe pas on retourne false
2200 if ($mode != "finalize" && $mode != "unfinalize") {
2201 return false;
2202 }
2203
2204 // Recuperation de la valeur de la cle primaire de l'objet
2205 $id = $this->getVal($this->clePrimaire);
2206
2207 // Si on finalise le document
2208 if ($mode == "finalize"){
2209
2210 // Récupère la collectivite du dossier d'instruction
2211 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
2212
2213 //
2214 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
2215
2216 // Génération du PDF
2217 $result = $this->compute_pdf_output('lettretype', $this->getVal('lettretype'), $collectivite);
2218 $pdf_output = $result['pdf_output'];
2219
2220 //Métadonnées du document
2221 $metadata = array(
2222 'filename' => 'instruction_'.$id.'.pdf',
2223 'mimetype' => 'application/pdf',
2224 'size' => strlen($pdf_output)
2225 );
2226
2227 // Récupération des métadonnées calculées après validation
2228 $spe_metadata = $this->getMetadata("om_fichier_instruction");
2229
2230 //On vérifie si l'instruction à finaliser a un événement de type arrete
2231 $sql = "SELECT type
2232 FROM ".DB_PREFIXE."evenement
2233 WHERE evenement = ".$this->getVal("evenement");
2234 $typeEvenement = $this->db->getOne($sql);
2235 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2236 if (database::isError($typeEvenement, true)) {
2237 die();
2238 }
2239
2240 //Initialisation de la variable
2241 $arrete_metadata = array();
2242 // Si l'événement est de type arrete, on ajoute les métadonnées spécifiques
2243 if ( $typeEvenement === 'arrete' ){
2244 $arrete_metadata = $this->getMetadata("arrete");
2245 }
2246
2247 $metadata = array_merge($metadata, $spe_metadata, $arrete_metadata);
2248
2249 // Si le document a déjà été finalisé
2250 // met à jour le document mais pas son uid
2251 if ($this->getVal("om_fichier_instruction") != ''){
2252
2253 // Met à jour le document
2254 $uid = $this->f->storage->update(
2255 $this->getVal("om_fichier_instruction"), $pdf_output, $metadata);
2256 }
2257 //Sinon, ajoute le document et récupère son uid
2258 else {
2259
2260 //Stockage du PDF
2261 $uid = $this->f->storage->create($pdf_output, $metadata);
2262 }
2263 }
2264
2265 // Si on finalise le document
2266 if ($mode == "unfinalize") {
2267
2268 // Récupération de l'uid du document finalisé
2269 $uid = $this->getVal("om_fichier_instruction");
2270 }
2271
2272 //
2273 if ($uid == '' || $uid == 'OP_FAILURE' ) {
2274 // Stop le traitement
2275 return false;
2276
2277 // Message d'echec (saut d'une ligne supplementaire avant le
2278 // message pour qu'il soit mis en evidence)
2279 $this->addToLog(
2280 _("Finalisation non enregistree")." - ".
2281 _("id instruction")." = ".$id." - ".
2282 _("uid fichier")." = ".$uid
2283 );
2284 }
2285
2286 // Logger
2287 $this->addToLog(__METHOD__."() - begin", EXTRA_VERBOSE_MODE);
2288
2289 //
2290 foreach ($this->champs as $key => $champ) {
2291 //
2292 $val[$champ] = $this->val[$key];
2293 }
2294
2295 //
2296 $val['date_evenement']=$this->dateDBToForm($val['date_evenement']);
2297 $val['archive_date_complet']=$this->dateDBToForm($val['archive_date_complet']);
2298 $val['archive_date_rejet']=$this->dateDBToForm($val['archive_date_rejet']);
2299 $val['archive_date_limite']=$this->dateDBToForm($val['archive_date_limite']);
2300 $val['archive_date_notification_delai']=$this->dateDBToForm($val['archive_date_notification_delai']);
2301 $val['archive_date_decision']=$this->dateDBToForm($val['archive_date_decision']);
2302 $val['archive_date_validite']=$this->dateDBToForm($val['archive_date_validite']);
2303 $val['archive_date_achevement']=$this->dateDBToForm($val['archive_date_achevement']);
2304 $val['archive_date_chantier']=$this->dateDBToForm($val['archive_date_chantier']);
2305 $val['archive_date_conformite']=$this->dateDBToForm($val['archive_date_conformite']);
2306 $val['archive_date_dernier_depot']=$this->dateDBToForm($val['archive_date_dernier_depot']);
2307 $val['archive_date_limite_incompletude']=$this->dateDBToForm($val['archive_date_limite_incompletude']);
2308 $val['date_finalisation_courrier']=$this->dateDBToForm($val['date_finalisation_courrier']);
2309 $val['date_envoi_signature']=$this->dateDBToForm($val['date_envoi_signature']);
2310 $val['date_retour_signature']=$this->dateDBToForm($val['date_retour_signature']);
2311 $val['date_envoi_rar']=$this->dateDBToForm($val['date_envoi_rar']);
2312 $val['date_retour_rar']=$this->dateDBToForm($val['date_retour_rar']);
2313 $val['date_envoi_controle_legalite']=$this->dateDBToForm($val['date_envoi_controle_legalite']);
2314 $val['date_retour_controle_legalite']=$this->dateDBToForm($val['date_retour_controle_legalite']);
2315
2316 $this->setvalF($val);
2317
2318 // Verification de la validite des donnees
2319 $this->verifier($this->val, $this->db, DEBUG);
2320 // Verification du verrou
2321 $this->testverrou();
2322 // Si les verifications precedentes sont correctes, on procede a
2323 // la modification, sinon on ne fait rien et on retourne une erreur
2324 if ($this->correct) {
2325 // Execution du trigger 'before' specifique au MODE 'update'
2326 $this->triggermodifier($id, $this->db, $this->val, DEBUG);
2327
2328 //
2329 $valF = array(
2330 "om_fichier_instruction" => $uid,
2331 "date_finalisation_courrier" => date('Y-m-d')
2332 );
2333 //
2334 if($mode=="finalize") {
2335 // état finalisé vrai
2336 $valF["om_final_instruction"] = 't';
2337 // ajout log utilisateur
2338 $login = $_SESSION['login'];
2339 $nom = "";
2340 $this->f->getUserInfos();
2341 if (isset($this->f->om_utilisateur["nom"])
2342 && !empty($this->f->om_utilisateur["nom"])) {
2343 $nom = $this->f->om_utilisateur["nom"];
2344 }
2345 $valF["om_final_instruction_utilisateur"] = $_SESSION['login'];
2346 if ($nom != "") {
2347 $valF["om_final_instruction_utilisateur"] .= " (".$nom.")";
2348 }
2349 } else {
2350 // état finalisé faux
2351 $valF["om_final_instruction"] = 'f';
2352 // suppression log utilisateur
2353 $valF["om_final_instruction_utilisateur"] = '';
2354 }
2355
2356 // Execution de la requête de modification des donnees de l'attribut
2357 // valF de l'objet dans l'attribut table de l'objet
2358 $res = $this->db->autoExecute(DB_PREFIXE.$this->table, $valF,
2359 DB_AUTOQUERY_UPDATE, $this->getCle($id));
2360 $this->addToLog(__METHOD__."() : db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($valF, true).", DB_AUTOQUERY_UPDATE, \"".$this->getCle($id)."\")", VERBOSE_MODE);
2361 // Si une erreur survient
2362 if (database::isError($res, true)) {
2363 // Appel de la methode de recuperation des erreurs
2364 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2365 } else {
2366 // Log
2367 $this->addToLog(_("Requete executee"), VERBOSE_MODE);
2368 // Log
2369 $message = _("Enregistrement")."&nbsp;".$id."&nbsp;";
2370 $message .= _("de la table")."&nbsp;\"".$this->table."\"&nbsp;";
2371 $message .= "[&nbsp;".$this->db->affectedRows()."&nbsp;";
2372 $message .= _("enregistrement(s) mis a jour")."&nbsp;]";
2373 $this->addToLog($message, VERBOSE_MODE);
2374 // Mise en place du verrou pour ne pas finaliser plusieurs fois
2375 // le meme document
2376 $this->verrouille();
2377 // Execution du trigger 'after' specifique au MODE 'update'
2378 //$this->triggermodifierapres($id, $this->db, $val, DEBUG);
2379
2380 if($mode == "finalize") {
2381 $etat = _('finalisation');
2382 } else {
2383 $etat = _('definalisation');
2384 }
2385 $this->msg = "";
2386 $this->addToMessage(sprintf(_("La %s du document s'est effectuee avec succes."), $etat));
2387
2388 return $this->add_log_to_dossier($id, $val);
2389 }
2390 } else {
2391 // Message d'echec (saut d'une ligne supplementaire avant le
2392 // message pour qu'il soit mis en evidence)
2393 $this->addToLog(
2394 _("Finalisation non enregistree")." - ".
2395 _("id instruction")." = ".$id." - ".
2396 _("uid fichier")." = ".$uid
2397 );
2398 return false;
2399 }
2400 }
2401
2402 /**
2403 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
2404 * @return string numéro de dossier d'instruction
2405 */
2406 protected function getDossier() {
2407 if(empty($this->specificMetadata)) {
2408 $this->getSpecificMetadata();
2409 }
2410 return $this->specificMetadata->dossier;
2411 }
2412 /**
2413 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
2414 * @return int Version
2415 */
2416 protected function getDossierVersion() {
2417 if(empty($this->specificMetadata)) {
2418 $this->getSpecificMetadata();
2419 }
2420 return $this->specificMetadata->version;
2421 }
2422 /**
2423 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
2424 * @return string numéro de dossier d'autorisation
2425 */
2426 protected function getNumDemandeAutor() {
2427 if(empty($this->specificMetadata)) {
2428 $this->getSpecificMetadata();
2429 }
2430 return $this->specificMetadata->dossier_autorisation;
2431 }
2432 /**
2433 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
2434 * @return date de la demande initiale
2435 */
2436 protected function getAnneemoisDemandeAutor() {
2437 if(empty($this->specificMetadata)) {
2438 $this->getSpecificMetadata();
2439 }
2440 return $this->specificMetadata->date_demande_initiale;
2441 }
2442 /**
2443 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
2444 * @return string type du dossier d'instruction
2445 */
2446 protected function getTypeInstruction() {
2447 if(empty($this->specificMetadata)) {
2448 $this->getSpecificMetadata();
2449 }
2450 return $this->specificMetadata->dossier_instruction_type;
2451 }
2452 /**
2453 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
2454 * @return string avis
2455 */
2456 protected function getStatutAutorisation() {
2457 if(empty($this->specificMetadata)) {
2458 $this->getSpecificMetadata();
2459 }
2460 return $this->specificMetadata->statut;
2461 }
2462 /**
2463 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
2464 * @return string type du dossier d'autorisation
2465 */
2466 protected function getTypeAutorisation() {
2467 if(empty($this->specificMetadata)) {
2468 $this->getSpecificMetadata();
2469 }
2470 return $this->specificMetadata->dossier_autorisation_type;
2471 }
2472 /**
2473 * Récupération de la date d'ajout de document à ajouter aux métadonnées
2474 * @return date de l'évènement
2475 */
2476 protected function getDateEvenementDocument() {
2477 return date("Y-m-d");
2478 }
2479 /**
2480 * Récupération du groupe d'instruction à ajouter aux métadonnées
2481 * @return string Groupe d'instruction
2482 */
2483 protected function getGroupeInstruction() {
2484 if(empty($this->specificMetadata)) {
2485 $this->getSpecificMetadata();
2486 }
2487 return $this->specificMetadata->groupe_instruction;
2488 }
2489 /**
2490 * Récupération du libellé du type du document à ajouter aux métadonnées
2491 * @return string Groupe d'instruction
2492 */
2493 protected function getTitle() {
2494
2495 // Récupère le champ événement
2496 if (isset($this->valF["evenement"]) AND $this->valF["evenement"] != "") {
2497 $evenement = $this->valF["evenement"];
2498 } else {
2499 $evenement = $this->getVal("evenement");
2500 }
2501
2502 // Requête sql
2503 $sql = "SELECT libelle FROM ".DB_PREFIXE."evenement
2504 WHERE evenement=".$evenement;
2505 $evenement_libelle = $this->db->getOne($sql);
2506 $this->addToLog("getTitle(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2507 if (database::isError($evenement_libelle)) {
2508 die();
2509 }
2510
2511 // Retourne le libelle de l'événement
2512 return $evenement_libelle;
2513 }
2514
2515 /**
2516 * Cette méthode permet de stocker en attribut toutes les métadonnées
2517 * nécessaire à l'ajout d'un document.
2518 */
2519 public function getSpecificMetadata() {
2520 if (isset($this->valF["dossier"]) AND $this->valF["dossier"] != "") {
2521 $dossier = $this->valF["dossier"];
2522 } else {
2523 $dossier = $this->getVal("dossier");
2524 }
2525 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
2526 $sql = "SELECT dossier.dossier as dossier,
2527 dossier_autorisation.dossier_autorisation as dossier_autorisation,
2528 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
2529 dossier_instruction_type.code as dossier_instruction_type,
2530 etat_dossier_autorisation.libelle as statut,
2531 dossier_autorisation_type.code as dossier_autorisation_type,
2532 groupe.code as groupe_instruction
2533 FROM ".DB_PREFIXE."dossier
2534 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2535 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2536 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2537 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
2538 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
2539 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
2540 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2541 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
2542 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
2543 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
2544 LEFT JOIN ".DB_PREFIXE."groupe
2545 ON dossier_autorisation_type.groupe = groupe.groupe
2546 WHERE dossier.dossier = '".$dossier."'";
2547 $res = $this->db->query($sql);
2548 $this->f->addToLog("getSpecificMetadata() : db->query(".$sql.")", VERBOSE_MODE);
2549 if ( database::isError($res)){
2550 die();
2551 }
2552
2553 //Le résultat est récupéré dans un objet
2554 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
2555
2556 //Si il y a un résultat
2557 if ($row !== null) {
2558
2559 // Instrance de la classe dossier
2560 $inst_dossier = $this->get_inst_dossier($dossier);
2561
2562 // Insère l'attribut version à l'objet
2563 $row->version = $inst_dossier->get_dossier_instruction_version();
2564
2565 //Alors on créé l'objet dossier_instruction
2566 $this->specificMetadata = $row;
2567
2568 }
2569 }
2570
2571 /**
2572 * Retourne le statut du dossier d'instruction
2573 * @param string $idx Identifiant du dossier d'instruction
2574 * @return string Le statut du dossier d'instruction
2575 */
2576 function getStatutAutorisationDossier($idx){
2577
2578 $statut = '';
2579
2580 //Si l'identifiant du dossier d'instruction fourni est correct
2581 if ( $idx != '' ){
2582
2583 //On récupère le statut de l'état du dossier à partir de l'identifiant du
2584 //dossier
2585 $sql = "SELECT etat.statut
2586 FROM ".DB_PREFIXE."dossier
2587 LEFT JOIN
2588 ".DB_PREFIXE."etat
2589 ON
2590 dossier.etat = etat.etat
2591 WHERE dossier ='".$idx."'";
2592 $statut = $this->db->getOne($sql);
2593 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2594 if ( database::isError($statut)){
2595 die();
2596 }
2597 }
2598 return $statut;
2599 }
2600
2601 /**
2602 * Récupère les données du dossier
2603 * @return array
2604 */
2605 function get_dossier_actual() {
2606
2607 // Initialisation de la valeur de retour
2608 $return = array();
2609
2610 // Récupération de toutes les valeurs du dossier d'instruction en cours
2611 $sql = "SELECT * FROM ".DB_PREFIXE."dossier
2612 WHERE dossier='".$this->valF['dossier']."'";
2613 $res = $this->db->query($sql);
2614 $this->addToLog("get_dossier_actual(): db->query(\"".$sql."\");", VERBOSE_MODE);
2615 $this->f->isDatabaseError($res);
2616
2617 //
2618 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2619
2620 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2621 // de l'état et de l'avis du dossier d'instruction
2622 $return['archive_delai']=$row['delai'];
2623 $return['archive_accord_tacite']=$row['accord_tacite'];
2624 $return['archive_etat']=$row['etat'];
2625 $return['archive_avis']=$row['avis_decision'];
2626 // Récupération de la valeur actuelle des 9 dates du dossier
2627 // d'instruction
2628 $return['archive_date_complet']=$row['date_complet'];
2629 $return['archive_date_dernier_depot']=$row['date_dernier_depot'];
2630 $return['archive_date_rejet']= $row['date_rejet'];
2631 $return['archive_date_limite']= $row['date_limite'];
2632 $return['archive_date_notification_delai']= $row['date_notification_delai'];
2633 $return['archive_date_decision']= $row['date_decision'];
2634 $return['archive_date_validite']= $row['date_validite'];
2635 $return['archive_date_achevement']= $row['date_achevement'];
2636 $return['archive_date_chantier']= $row['date_chantier'];
2637 $return['archive_date_conformite']= $row['date_conformite'];
2638 $return['archive_incompletude']= $row['incompletude'];
2639 $return['archive_incomplet_notifie']= $row['incomplet_notifie'];
2640 $return['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2641 $return['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2642 $return['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2643 $return['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2644 $return['archive_delai_incompletude']= $row['delai_incompletude'];
2645 $return['archive_autorite_competente']= $row['autorite_competente'];
2646 $return['duree_validite']= $row['duree_validite'];
2647 $return['date_depot']= $row['date_depot'];
2648 }
2649
2650 // Retour de la fonction
2651 return $return;
2652
2653 }
2654
2655 /**
2656 * Permet de vérifier qu'un événement est verrouillable
2657 * @param integer $idx Identifiant de l'instruction
2658 * @return boolean
2659 */
2660 function checkEvenementNonVerrouillable($idx) {
2661
2662 // Initialisation du résultat
2663 $non_verrouillable = false;
2664
2665 // Si la condition n'est pas vide
2666 if ($idx != "") {
2667
2668 // Requête SQL
2669 $sql = "SELECT evenement.non_verrouillable
2670 FROM ".DB_PREFIXE."evenement
2671 LEFT JOIN ".DB_PREFIXE."instruction
2672 ON instruction.evenement = evenement.evenement
2673 WHERE instruction.instruction = $idx";
2674 $this->f->addToLog("checkEvenementNonVerrouillable() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
2675 $res = $this->db->getOne($sql);
2676 $this->f->isDatabaseError($res);
2677
2678 // Si le retour de la requête est true
2679 if ($res == 't') {
2680 //
2681 $non_verrouillable = true;
2682 }
2683 }
2684
2685 // Retourne résultat
2686 return $non_verrouillable;
2687 }
2688
2689 /**
2690 * Mise à jour des champs archive_*
2691 * @param mixed $row La ligne de données
2692 */
2693 public function updateArchiveData($row){
2694
2695 // Récupération de la valeur actuelle du délai, de l'accord tacite,
2696 // de l'état et de l'avis du dossier d'instruction
2697 $this->valF['archive_delai']=$row['delai'];
2698 $this->valF['archive_accord_tacite']=$row['accord_tacite'];
2699 $this->valF['archive_etat']=$row['etat'];
2700 $this->valF['archive_avis']=$row['avis_decision'];
2701 // Récupération de la valeur actuelle des 9 dates du dossier
2702 // d'instruction
2703 if ($row['date_complet'] != '') {
2704 $this->valF['archive_date_complet']=$row['date_complet'];
2705 }
2706 if ($row['date_dernier_depot'] != '') {
2707 $this->valF['archive_date_dernier_depot']=$row['date_dernier_depot'];
2708 }
2709 if ($row['date_rejet']!='') {
2710 $this->valF['archive_date_rejet']= $row['date_rejet'];
2711 }
2712 if ($row['date_limite']!='') {
2713 $this->valF['archive_date_limite']= $row['date_limite'];
2714 }
2715 if ($row['date_notification_delai']!='') {
2716 $this->valF['archive_date_notification_delai']= $row['date_notification_delai'];
2717 }
2718 if ($row['date_decision']!='') {
2719 $this->valF['archive_date_decision']= $row['date_decision'];
2720 }
2721 if ($row['date_validite']!='') {
2722 $this->valF['archive_date_validite']= $row['date_validite'];
2723 }
2724 if ($row['date_achevement']!='') {
2725 $this->valF['archive_date_achevement']= $row['date_achevement'];
2726 }
2727 if ($row['date_chantier']!='') {
2728 $this->valF['archive_date_chantier']= $row['date_chantier'];
2729 }
2730 if ($row['date_conformite']!='') {
2731 $this->valF['archive_date_conformite']= $row['date_conformite'];
2732 }
2733 if ($row['incompletude']!='') {
2734 $this->valF['archive_incompletude']= $row['incompletude'];
2735 }
2736 if ($row['incomplet_notifie']!='') {
2737 $this->valF['archive_incomplet_notifie']= $row['incomplet_notifie'];
2738 }
2739 if ($row['evenement_suivant_tacite']!='') {
2740 $this->valF['archive_evenement_suivant_tacite']= $row['evenement_suivant_tacite'];
2741 }
2742 if ($row['evenement_suivant_tacite_incompletude']!='') {
2743 $this->valF['archive_evenement_suivant_tacite_incompletude']= $row['evenement_suivant_tacite_incompletude'];
2744 }
2745 if ($row['etat_pendant_incompletude']!='') {
2746 $this->valF['archive_etat_pendant_incompletude']= $row['etat_pendant_incompletude'];
2747 }
2748 if ($row['date_limite_incompletude']!='') {
2749 $this->valF['archive_date_limite_incompletude']= $row['date_limite_incompletude'];
2750 }
2751 if ($row['delai_incompletude']!='') {
2752 $this->valF['archive_delai_incompletude']= $row['delai_incompletude'];
2753 }
2754 if ($row['autorite_competente']!='') {
2755 $this->valF['archive_autorite_competente']= $row['autorite_competente'];
2756 }
2757 if ($row['duree_validite']!='') {
2758 $this->valF['duree_validite']= $row['duree_validite'];
2759 }
2760 if ($row['date_depot']!='') {
2761 $this->valF['date_depot']= $row['date_depot'];
2762 }
2763 }
2764
2765 // {{{
2766 // Méthodes de récupération des métadonnées arrêté
2767 /**
2768 * @return string Retourne le numéro d'arrêté
2769 */
2770 function getNumArrete() {
2771 return $this->getVal("numero_arrete");
2772 }
2773 /**
2774 * @return chaîne vide
2775 */
2776 function getReglementaireArrete() {
2777 return 'true';
2778 }
2779 /**
2780 * @return boolean de notification au pétitionnaire
2781 */
2782 function getNotificationArrete() {
2783 return 'true';
2784 }
2785 /**
2786 * @return date de notification au pétitionnaire
2787 */
2788 function getDateNotificationArrete() {
2789 if (empty($this->metadonneesArrete)) {
2790 $this->getArreteMetadata();
2791 }
2792 return $this->metadonneesArrete["datenotification"];
2793 }
2794 /**
2795 * @return boolean check si le document est passé au contrôle de légalité
2796 */
2797 function getControleLegalite() {
2798 return 'true';
2799 }
2800 /**
2801 * @return date de signature de l'arrêté
2802 */
2803 function getDateSignature() {
2804 if (empty($this->metadonneesArrete)) {
2805 $this->getArreteMetadata();
2806 }
2807 return $this->metadonneesArrete["datesignaturearrete"];
2808 }
2809 /**
2810 * @return string nom du signataire
2811 */
2812 function getNomSignataire() {
2813 if (empty($this->metadonneesArrete)) {
2814 $this->getArreteMetadata();
2815 }
2816 return $this->metadonneesArrete["nomsignataire"];
2817 }
2818 /**
2819 * @return string qualité du signataire
2820 */
2821 function getQualiteSignataire() {
2822 if (empty($this->metadonneesArrete)) {
2823 $this->getArreteMetadata();
2824 }
2825 return $this->metadonneesArrete["qualitesignataire"];
2826 }
2827 /**
2828 * @return string numéro du terrain
2829 */
2830 function getAp_numRue() {
2831 if (empty($this->metadonneesArrete)) {
2832 $this->getArreteMetadata();
2833 }
2834 return $this->metadonneesArrete["ap_numrue"];
2835 }
2836 /**
2837 * @return string nom de la rue du terrain
2838 */
2839 function getAp_nomDeLaVoie() {
2840 if (empty($this->metadonneesArrete)) {
2841 $this->getArreteMetadata();
2842 }
2843 return $this->metadonneesArrete["ap_nomdelavoie"];
2844 }
2845 /**
2846 * @return string code postal du terrain
2847 */
2848 function getAp_codePostal() {
2849 if (empty($this->metadonneesArrete)) {
2850 $this->getArreteMetadata();
2851 }
2852 return $this->metadonneesArrete["ap_codepostal"];
2853 }
2854 /**
2855 * @return string ville du terrain
2856 */
2857 function getAp_ville() {
2858 if (empty($this->metadonneesArrete)) {
2859 $this->getArreteMetadata();
2860 }
2861 return $this->metadonneesArrete["ap_ville"];
2862 }
2863 /**
2864 * @return string activité
2865 */
2866 function getActivite() {
2867 return "Droit du sol";
2868 }
2869 /**
2870 * @return string date du retour de controle légalité
2871 */
2872 function getDateControleLegalite() {
2873 if (empty($this->metadonneesArrete)) {
2874 $this->getArreteMetadata();
2875 }
2876 return $this->metadonneesArrete["datecontrolelegalite"];
2877 }
2878
2879 // Fin des méthodes de récupération des métadonnées
2880 // }}}
2881
2882 /**
2883 * Méthode de récupération des métadonnées arrêtés dans la base de données,
2884 * les données sont stockés dans l'attribut $this->metadonneesArrete
2885 */
2886 function getArreteMetadata() {
2887
2888 //Récupération de la dernière instruction dont l'événement est de type 'arrete'
2889 $this->metadonneesArrete = array("nomsignataire"=>"", "qualitesignataire"=>"",
2890 "decisionarrete"=>"", "datenotification"=>"", "datesignaturearrete"=>"",
2891 "datecontrolelegalite"=>"", "ap_numrue"=>"", "ap_nomdelavoie"=>"",
2892 "ap_codepostal"=>"", "ap_ville"=>"");
2893
2894 $sqlArrete = "SELECT signataire_arrete.nom as \"nomsignataire\",
2895 signataire_arrete.qualite as \"qualitesignataire\",
2896 instruction.etat as \"decisionarrete\",
2897 instruction.date_retour_rar as \"datenotification\",
2898 instruction.date_retour_signature as \"datesignaturearrete\",
2899 instruction.date_retour_controle_legalite as \"datecontrolelegalite\",
2900 dossier.terrain_adresse_voie_numero as \"ap_numrue\",
2901 dossier.terrain_adresse_voie as \"ap_nomdelavoie\",
2902 dossier.terrain_adresse_code_postal as \"ap_codepostal\",
2903 dossier.terrain_adresse_localite as \"ap_ville\"
2904 FROM ".DB_PREFIXE."instruction
2905 LEFT JOIN ".DB_PREFIXE."signataire_arrete ON
2906 instruction.signataire_arrete = signataire_arrete.signataire_arrete
2907 LEFT JOIN ".DB_PREFIXE."dossier ON
2908 instruction.dossier = dossier.dossier
2909 LEFT JOIN ".DB_PREFIXE."donnees_techniques ON
2910 donnees_techniques.dossier_instruction = dossier.dossier
2911 WHERE instruction.instruction = ".$this->getVal("instruction");
2912 $resArrete = $this->db->query($sqlArrete);
2913 $this->f->addToLog("getArreteMetadata(): db->query(\"".$sqlArrete."\");", VERBOSE_MODE);
2914 if ( database::isError($resArrete)){
2915 die();
2916 }
2917
2918 $this->metadonneesArrete = $resArrete->fetchRow(DB_FETCHMODE_ASSOC);
2919 }
2920
2921 /**
2922 * CONDITION - has_an_edition.
2923 *
2924 * Condition pour afficher le bouton de visualisation de l'édition.
2925 *
2926 * @return boolean
2927 */
2928 function has_an_edition() {
2929 // Récupère la valeur du champ lettretype
2930 $lettretype = $this->getVal("lettretype");
2931 // Si le champ est vide
2932 if (empty($lettretype)) {
2933 //
2934 return false;
2935 }
2936
2937 //
2938 return true;
2939 }
2940
2941 /**
2942 * CONDITION - is_editable.
2943 *
2944 * Condition pour la modification.
2945 *
2946 * @return boolean
2947 */
2948 function is_editable() {
2949 // Contrôle si l'utilisateur possède un bypass
2950 $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
2951 //
2952 if ($bypass == true) {
2953
2954 //
2955 return true;
2956 }
2957
2958 // Si l'utilisateur est un intructeur qui ne correspond pas à la
2959 // division du dossier
2960 if ($this->f->isUserInstructeur()
2961 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
2962 && $this->f->isAccredited("instruction_changer_decision") === false) {
2963
2964 //
2965 return false;
2966 }
2967
2968 // si instructeur commune
2969 if($this->f->isAccredited("instruction_changer_decision") === true
2970 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
2971 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
2972 || $this->getVal('created_by_commune') !== 't')) {
2973 return false;
2974 }
2975 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
2976 // que l'événement n'est pas identifié comme non verrouillable
2977 if ($this->f->isUserInstructeur()
2978 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
2979 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
2980
2981 //
2982 return false;
2983 }
2984
2985 //
2986 return true;
2987 }
2988
2989 /**
2990 * CONDITION - is_deletable.
2991 *
2992 * Condition pour lma modification.
2993 *
2994 * @return boolean
2995 */
2996 function is_deletable() {
2997 // Contrôle si l'utilisateur possède un bypass
2998 $bypass = $this->f->isAccredited(get_class()."_supprimer_bypass");
2999 //
3000 if ($bypass == true) {
3001
3002 //
3003 return true;
3004 }
3005
3006 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3007 // division du dossier
3008 if ($this->f->isUserInstructeur()
3009 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
3010
3011 //
3012 return false;
3013 }
3014
3015 //
3016 return true;
3017 }
3018
3019 /**
3020 * CONDITION - is_addable.
3021 *
3022 * Condition pour afficher les boutons modifier et supprimer.
3023 *
3024 * @return boolean
3025 */
3026 function is_addable() {
3027 // Contrôle si l'utilisateur possède un bypass
3028 $bypass = $this->f->isAccredited(get_class()."_ajouter_bypass");
3029 //
3030 if ($bypass == true) {
3031
3032 //
3033 return true;
3034 }
3035
3036 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3037 // division du dossier
3038 if ($this->f->isUserInstructeur()
3039 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3040 && $this->f->isAccredited("instruction_changer_decision") === false) {
3041
3042 //
3043 return false;
3044 }
3045
3046 // si instructeur commune
3047 if($this->f->isAccredited("instruction_changer_decision") === false
3048 && $this->f->isInstrCanChangeDecision($this->getVal('dossier')) === true) {
3049 return false;
3050 }
3051
3052
3053 //
3054 return true;
3055 }
3056
3057 /**
3058 * CONDITION - is_finalizable.
3059 *
3060 * Condition pour afficher le bouton.
3061 *
3062 * @return boolean
3063 */
3064 function is_finalizable() {
3065 // Contrôle si l'utilisateur possède un bypass
3066 $bypass = $this->f->isAccredited(get_class()."_finaliser_bypass");
3067 //
3068 if ($bypass == true) {
3069
3070 //
3071 return true;
3072 }
3073
3074 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3075 // division du dossier
3076 if ($this->f->isUserInstructeur()
3077 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3078 && $this->f->isAccredited("instruction_changer_decision") === false) {
3079
3080 //
3081 return false;
3082 }
3083
3084 // si instructeur commune
3085 if($this->f->isAccredited("instruction_changer_decision") === true
3086 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3087 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
3088 || $this->getVal('created_by_commune') !== 't')) {
3089 return false;
3090 }
3091
3092 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3093 // que l'événement n'est pas identifié comme non verrouillable
3094 if ($this->f->isUserInstructeur()
3095 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3096 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3097
3098 //
3099 return false;
3100 }
3101
3102 //
3103 return true;
3104 }
3105
3106 /**
3107 * CONDITION - is_finalize_without_bypass.
3108 *
3109 * Condition pour afficher le bouton sans le bypass.
3110 *
3111 * @return boolean [description]
3112 */
3113 function is_finalizable_without_bypass() {
3114 // Récupère la valeur du champ finalisé
3115 $om_final_instruction = $this->getVal('om_final_instruction');
3116
3117 // Si le rapport n'est pas finalisé
3118 if (empty($om_final_instruction)
3119 || $om_final_instruction == 'f') {
3120 //
3121 return true;
3122 }
3123
3124 //
3125 return false;
3126 }
3127
3128 /**
3129 * CONDITION - is_unfinalizable.
3130 *
3131 * Condition pour afficher le bouton.
3132 *
3133 * @return boolean
3134 */
3135 function is_unfinalizable(){
3136 // Contrôle si l'utilisateur possède un bypass
3137 $bypass = $this->f->isAccredited(get_class()."_definaliser_bypass");
3138 //
3139 if ($bypass == true) {
3140
3141 //
3142 return true;
3143 }
3144
3145 // Si l'utilisateur est un intructeur qui ne correspond pas à la
3146 // division du dossier
3147 if ($this->f->isUserInstructeur()
3148 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3149 && $this->f->isAccredited("instruction_changer_decision") === false) {
3150
3151 //
3152 return false;
3153 }
3154
3155 // si instructeur commune
3156 if($this->f->isAccredited("instruction_changer_decision") === true
3157 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
3158 && ($this->f->isInstrCanChangeDecision($this->getVal('dossier')) !== true
3159 || $this->getVal('created_by_commune') !== 't')) {
3160 return false;
3161 }
3162
3163 // Si l'utilisateur est un instructeur, que le dossier est cloturé et
3164 // que l'événement n'est pas identifié comme non verrouillable
3165 if ($this->f->isUserInstructeur()
3166 && $this->getStatutAutorisationDossier($this->getParameter("idxformulaire")) == "cloture"
3167 && $this->checkEvenementNonVerrouillable($this->getVal("instruction")) === false) {
3168
3169 //
3170 return false;
3171 }
3172
3173 //
3174 return true;
3175 }
3176
3177 /**
3178 * CONDITION - is_unfinalizable_without_bypass.
3179 *
3180 * Condition pour afficher le bouton sans le bypass.
3181 *
3182 * @return boolean
3183 */
3184 function is_unfinalizable_without_bypass() {
3185 // Récupère la valeur du champ finalisé
3186 $om_final_instruction = $this->getVal('om_final_instruction');
3187
3188 // Si l'instruction est finalisée
3189 if ($om_final_instruction == 't') {
3190 //
3191 return true;
3192 }
3193
3194 //
3195 return false;
3196 }
3197
3198 /**
3199 * TREATMENT - finalize.
3200 *
3201 * Permet de finaliser un enregistrement.
3202 *
3203 * @param array $val valeurs soumises par le formulaire
3204 *
3205 * @return boolean
3206 */
3207 function finalize($val = array()) {
3208
3209 // Cette méthode permet d'exécuter une routine en début des méthodes
3210 // dites de TREATMENT.
3211 $this->begin_treatment(__METHOD__);
3212
3213 // Traitement de la finalisation
3214 $ret = $this->manage_finalizing("finalize", $val);
3215
3216 // Si le traitement retourne une erreur
3217 if ($ret !== true) {
3218
3219 // Termine le traitement
3220 $this->end_treatment(__METHOD__, false);
3221 }
3222
3223 // Termine le traitement
3224 return $this->end_treatment(__METHOD__, true);
3225 }
3226
3227 /**
3228 * TREATMENT - unfinalize.
3229 *
3230 * Permet de définaliser un enregistrement.
3231 *
3232 * @param array $val valeurs soumises par le formulaire
3233 *
3234 * @return boolean
3235 */
3236 function unfinalize($val = array()) {
3237
3238 // Cette méthode permet d'exécuter une routine en début des méthodes
3239 // dites de TREATMENT.
3240 $this->begin_treatment(__METHOD__);
3241
3242 // Traitement de la finalisation
3243 $ret = $this->manage_finalizing("unfinalize", $val);
3244
3245 // Si le traitement retourne une erreur
3246 if ($ret !== true) {
3247
3248 // Termine le traitement
3249 $this->end_treatment(__METHOD__, false);
3250 }
3251
3252 // Termine le traitement
3253 return $this->end_treatment(__METHOD__, true);
3254 }
3255
3256 /**
3257 * VIEW - view_edition
3258 *
3259 * Edite l'édition de l'instruction ou affiche celle contenue dans le stockage.
3260 *
3261 * @return null Si l'action est incorrecte
3262 */
3263 function view_edition() {
3264
3265 // Si l'instruction est finalisée
3266 if($this->getVal("om_final_instruction") == 't'
3267 && $this->getVal("om_final_instruction") != null) {
3268
3269 // Ouvre le document
3270 $lien = '../spg/file.php?obj='.$this->table.'&'.
3271 'champ=om_fichier_instruction&id='.$this->getVal($this->clePrimaire);
3272 //
3273 header("Location: ".$lien);
3274 } else {
3275
3276 // Récupère la collectivite du dossier d'instruction
3277 $dossier_instruction_om_collectivite = $this->get_dossier_instruction_om_collectivite();
3278
3279 //
3280 $collectivite = $this->f->getCollectivite($dossier_instruction_om_collectivite);
3281
3282 // Paramètre du PDF
3283 $params = array(
3284 "watermark" => true,
3285 "specific" => array(
3286 "mode" => "previsualisation",
3287 ),
3288 );
3289
3290 // Génération du PDF
3291 $result = $this->compute_pdf_output('lettretype', $this->getVal("lettretype"), $collectivite, null, $params);
3292 // Affichage du PDF
3293 $this->expose_pdf_output(
3294 $result['pdf_output'],
3295 $result['filename']
3296 );
3297 }
3298 }
3299
3300 /**
3301 * Récupère la collectivité du dossier d'instruction.
3302 *
3303 * @return integer
3304 */
3305 function get_dossier_instruction_om_collectivite() {
3306
3307 //
3308 require_once "../obj/dossier_instruction.class.php";
3309 $dossier_instruction = new dossier_instruction($this->getVal('dossier'), $this->f->db, false);
3310
3311 //
3312 return $dossier_instruction->getVal('om_collectivite');
3313 }
3314
3315 /**
3316 * VIEW - view_bible
3317 *
3318 * Affiche la bible manuelle.
3319 *
3320 * @return void
3321 */
3322 function view_bible() {
3323 // Vérification de l'accessibilité sur l'élément
3324 $this->checkAccessibility();
3325
3326 // XXX APP
3327
3328 $f = $this->f;
3329
3330 /**
3331 * Affichage de la structure HTML
3332 */
3333 //
3334 if ($f->isAjaxRequest()) {
3335 //
3336 header("Content-type: text/html; charset=".HTTPCHARSET."");
3337 } else {
3338 //
3339 $f->setFlag("htmlonly");
3340 $f->display();
3341 }
3342 //
3343 $f->displayStartContent();
3344 //
3345 $f->setTitle(_("Liste des éléments de la bible en lien avec un evenement"));
3346 $f->displayTitle();
3347
3348 /**
3349 *
3350 */
3351 //
3352 ($f->get_submitted_get_value("ev") ? $evenement = $f->get_submitted_get_value("ev") : $evenement = "");
3353 $evenement = intval($evenement);
3354 //
3355 ($f->get_submitted_get_value("idx") ? $idx = $f->get_submitted_get_value("idx") : $idx = "");
3356 $nature = substr($idx, 0, 2);
3357 //
3358 ($f->get_submitted_get_value("complement") ? $complement = $f->get_submitted_get_value("complement") : $complement = "1");
3359
3360 // Récupération de la collectivité du dossier
3361 require_once "../obj/dossier.class.php";
3362 $dossier = new dossier($idx, $f->db, DEBUG);
3363
3364 /**
3365 *
3366 */
3367 //
3368 $sql = "SELECT *, bible.libelle as bible_lib
3369 FROM ".DB_PREFIXE."bible
3370 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3371 ON bible.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
3372 LEFT JOIN ".DB_PREFIXE."om_collectivite
3373 ON bible.om_collectivite = om_collectivite.om_collectivite
3374 WHERE evenement=".$evenement."
3375 AND complement=".$complement."
3376 AND (bible.dossier_autorisation_type IS NULL
3377 OR dossier_autorisation_type.code ='".$nature."')
3378 AND (om_collectivite.niveau = '2'
3379 OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")
3380 ORDER BY bible_lib ASC";
3381 $res = $f->db->query($sql);
3382 $f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
3383 $f->isDatabaseError($res);
3384 //
3385 echo "<form method=\"post\" name=\"f3\" action=\"#\">\n";
3386 //
3387 if ($res->numrows() > 0) {
3388 //
3389 echo "\t<table id='tab-bible' width='100%'>\n";
3390 //
3391 echo "\t\t<tr class=\"ui-tabs-nav ui-accordion ui-state-default tab-title\">";
3392 echo "<th>"._("Choisir")."</th>";
3393 echo "<th>"._("Libelle")."</th>";
3394 echo "</tr>\n";
3395 //
3396 $i = 0;
3397 //
3398 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3399 //
3400 echo "\t\t<tr";
3401 echo " class=\"".($i % 2 == 0 ? "odd" : "even")."\"";
3402 echo ">";
3403 //
3404 echo "<td class=\"center\"><input type=\"checkbox\" name=\"choix[]\" value=\"".$i."\" id=\"checkbox".$i."\" /></td>";
3405 // XXX utilisation de l'attribut titre pour afficher une infobulle
3406 echo "<td><span class=\"content\" title=\"".htmlentities($row['contenu'])."\" id=\"content".$i."\">".$row['bible_lib']."</span></td>";
3407 //
3408 echo "</tr>\n";
3409 //
3410 $i++;
3411 }
3412 echo "\t</table>\n";
3413 //
3414 echo "<div class=\"formControls\">\n";
3415 $f->layout->display_form_button(array(
3416 "value" => _("Valider"),
3417 "onclick" => "bible_return('f2', 'complement".($complement == "1" ? "" : $complement)."_om_html'); return false;",
3418 ));
3419 $f->displayLinkJsCloseWindow();
3420 echo "</div>\n";
3421
3422 } else {
3423 //
3424 $message_class = "error";
3425 $message = _("Aucun element dans la bible pour l'evenement")." : ".$evenement;
3426 $f->displayMessage($message_class, $message);
3427 //
3428 echo "<div class=\"formControls\">\n";
3429 $f->displayLinkJsCloseWindow();
3430 echo "</div>\n";
3431 }
3432 //
3433 echo "</form>\n";
3434
3435 /**
3436 * Affichage de la structure HTML
3437 */
3438 //
3439 $f->displayEndContent();
3440 }
3441
3442 /**
3443 * VIEW - view_bible
3444 *
3445 * Affiche la bible manuelle.
3446 *
3447 * @return void
3448 */
3449 function view_bible_auto() {
3450 // Vérification de l'accessibilité sur l'élément
3451 $this->checkAccessibility();
3452
3453 // XXX APP
3454
3455 $f = $this->f;
3456
3457 //
3458 $f->disableLog();
3459
3460 $formatDate="AAAA-MM-JJ";
3461
3462 // Récupération des paramètres
3463 $idx = $f->get_submitted_get_value('idx');
3464 $evenement = $f->get_submitted_get_value('ev');
3465
3466 // Initialisation de la variable de retour
3467 $retour['complement_om_html'] = '';
3468 $retour['complement2_om_html'] = '';
3469 $retour['complement3_om_html'] = '';
3470 $retour['complement4_om_html'] = '';
3471 // Vérification d'une consultation liée à l'événement
3472 $consultation = $f->db->getOne(
3473 "select consultation from ".DB_PREFIXE."evenement where evenement=".$evenement
3474 );
3475 $f->isDatabaseError($consultation);
3476 // Si consultation liée, récupération du retour d'avis
3477 if($consultation=='Oui'){
3478 $sql="select date_retour,avis_consultation.libelle as avis_consultation,
3479 service.libelle as service
3480 from ".DB_PREFIXE."consultation inner join ".DB_PREFIXE."service
3481 on consultation.service =service.service
3482 left join ".DB_PREFIXE."avis_consultation on
3483 consultation.avis_consultation = avis_consultation.avis_consultation
3484 where dossier ='".$idx."'";
3485 $res = $f->db->query($sql);
3486 $f->isDatabaseError($res);
3487 // Récupération des consultations
3488 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3489 $correct=false;
3490 // date retour
3491 if ($row['date_retour']<>""){
3492 if ($formatDate=="AAAA-MM-JJ"){
3493 $date = explode("-", $row['date_retour']);
3494 // controle de date
3495 if (count($date) == 3 and
3496 checkdate($date[1], $date[2], $date[0])) {
3497 $date_retour_f= $date[2]."/".$date[1]."/".$date[0];
3498 $correct=true;
3499 }else{
3500 $msg= $msg."<br>La date ".$row['date_retour']." n'est pas une date.";
3501 $correct=false;
3502 }
3503 }
3504 }
3505 //
3506 $temp="Vu l'avis ".$row['avis_consultation']." du service ".$row['service'];
3507 if($correct == true){
3508 $temp=$temp." du ".$date_retour_f;
3509 }
3510 // Concaténation des retours d'avis de consultation
3511 $retour['complement_om_html'] .= $temp;
3512 } // while
3513
3514 } // consultation
3515 // Récupération des bibles automatiques pour le champ complement_om_html
3516 $retour['complement_om_html'] .= $this->getBible($f, $evenement, $idx, '1');
3517 // Récupération des bibles automatiques pour le champ complement2_om_html
3518 $retour['complement2_om_html'] .= $this->getBible($f, $evenement, $idx, '2');
3519 // Récupération des bibles automatiques pour le champ complement3_om_html
3520 $retour['complement3_om_html'] .= $this->getBible($f, $evenement, $idx, '3');
3521 // Récupération des bibles automatiques pour le champ complement4_om_html
3522 $retour['complement4_om_html'] .= $this->getBible($f, $evenement, $idx, '4');
3523
3524
3525
3526 echo json_encode($retour);
3527 }
3528
3529 /**
3530 * Récupération des éléments de bible.
3531 *
3532 * @param utils $f handler de om_application
3533 * @param integer $event id de l'événement
3534 * @param string $idx id du dossier
3535 * @param integer $compnb numéro du champ complement
3536 *
3537 * @return string Chaîne de texte à insérer dans le champ complement
3538 */
3539 function getBible($f, $event, $idx, $compnb) {
3540 // Récupération de la collectivité du dossier
3541 require_once "../obj/dossier.class.php";
3542 $dossier = new dossier($idx, $f->db, DEBUG);
3543 //
3544 $sql = "SELECT * FROM ".DB_PREFIXE."bible
3545 LEFT OUTER JOIN ".DB_PREFIXE."dossier_autorisation_type
3546 ON bible.dossier_autorisation_type=
3547 dossier_autorisation_type.dossier_autorisation_type
3548 LEFT JOIN
3549 ".DB_PREFIXE."om_collectivite
3550 ON bible.om_collectivite = om_collectivite.om_collectivite
3551 WHERE evenement =".$event." and
3552 complement=".$compnb." and
3553 automatique='Oui' and
3554 (dossier_autorisation_type.code ='".substr($idx, 0, 2)."' or
3555 bible.dossier_autorisation_type IS NULL) and
3556 (om_collectivite.niveau = '2' OR bible.om_collectivite = ".$dossier->getVal("om_collectivite").")";
3557
3558 $res = $f->db->query($sql);
3559 $f->isDatabaseError($res);
3560 $temp = "";
3561 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3562 // Remplacement des retours à la ligne par des br
3563 $temp .= preg_replace(
3564 '#(\\\r|\\\r\\\n|\\\n)#', '<br/>', $row['contenu']
3565 );
3566 } // fin while
3567 return $temp;
3568 }
3569
3570 /**
3571 * VIEW - view_suivi_bordereaux.
3572 *
3573 * Vu pour imprimer un bordereau d'envoi.
3574 *
3575 * @return void
3576 */
3577 function view_suivi_bordereaux() {
3578 // Vérification de l'accessibilité sur l'élément
3579 $this->checkAccessibility();
3580
3581 // XXX APP
3582
3583 $f = $this->f;
3584
3585 /**
3586 * Validation du formulaire
3587 */
3588 // Si le formulaire a été validé
3589 if ($f->get_submitted_post_value("validation") !== null) {
3590 // Si un bordereau à été sélectionné
3591 if ($f->get_submitted_post_value("bordereau") !== null && $f->get_submitted_post_value("bordereau") == "" ) {
3592 // Si aucun bordereau n'a été sélectionné
3593 $message_class = "error";
3594 $message = _("Veuillez selectionner un bordereau.");
3595 }
3596 // Sinon si les dates ne sont pas valide
3597 elseif (($f->get_submitted_post_value("date_bordereau_debut") !== null
3598 && $f->get_submitted_post_value("date_bordereau_debut") == "")
3599 || ($f->get_submitted_post_value("date_bordereau_fin") !== null
3600 && $f->get_submitted_post_value("date_bordereau_fin") == "")) {
3601 // Si aucune date n'a été saisie
3602 $message_class = "error";
3603 $message = _("Veuillez saisir une date valide.");
3604 }
3605 // Affiche le message de validation
3606 else {
3607 // On récupère le libellé du bordereau pour l'afficher à l'utilisateur
3608 $sql = "SELECT om_etat.libelle
3609 FROM ".DB_PREFIXE."om_etat
3610 WHERE om_etat.id = '".$f->get_submitted_post_value("bordereau")."'";
3611 $res = $f->db->getone($sql);
3612 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3613 $f->isDatabaseError($res);
3614 //
3615 $message_class = "valid";
3616 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre bordereau");
3617 $message .= " : <br/><br/>";
3618 $message .= "<a class='om-prev-icon pdf-16'";
3619 $message .= " title=\""._("Bordereau")."\"";
3620 $message .= " href='../pdf/pdfetat.php?obj=".$f->get_submitted_post_value("bordereau")."&date_bordereau_debut=".$f->get_submitted_post_value("date_bordereau_debut");
3621 $message .= "&date_bordereau_fin=".$f->get_submitted_post_value("date_bordereau_fin");
3622 // Si l'utilisateur est MULTI alors on ajoute le paramètre collectivite
3623 if ($f->get_submitted_post_value("om_collectivite") !== null) {
3624 $message .= "&collectivite=".$f->get_submitted_post_value("om_collectivite");
3625 }
3626 $message .= "'"." target='_blank'>";
3627 $message .= $res." "._("du")." ".$f->get_submitted_post_value("date_bordereau_debut")
3628 ." "._("au")." ".$f->get_submitted_post_value("date_bordereau_fin");
3629 $message .= "</a>";
3630 }
3631 }
3632
3633 /**
3634 * Affichage des messages et du formulaire
3635 */
3636 // Affichage du message de validation ou d'erreur
3637 if (isset($message) && isset($message_class) && $message != "") {
3638 $f->displayMessage($message_class, $message);
3639 }
3640 // Inclusion de la classe de gestion des formulaires
3641 require_once "../obj/om_formulaire.class.php";
3642 // Ouverture du formulaire
3643 printf("\t<form");
3644 printf(" method=\"post\"");
3645 printf(" id=\"suivi_bordereaux_form\"");
3646 printf(" action=\"\"");
3647 printf(">\n");
3648 // Paramétrage des champs du formulaire
3649 $champs = array("date_bordereau_debut", "date_bordereau_fin", "bordereau");
3650 // Si l'utilisateur est d'une collectivité de niveau 2 on affiche un select
3651 // collectivité dans le formulaire
3652 if($_SESSION["niveau"] == 2) {
3653 array_push($champs, "om_collectivite");
3654 }
3655 // Création d'un nouvel objet de type formulaire
3656 $form = new formulaire(NULL, 0, 0, $champs);
3657 // Paramétrage du champ date_bordereau_debut
3658 $form->setLib("date_bordereau_debut", _("date_bordereau_debut"));
3659 $form->setType("date_bordereau_debut", "date");
3660 $form->setTaille("date_bordereau_debut", 12);
3661 $form->setMax("date_bordereau_debut", 12);
3662 $form->setRequired("date_bordereau_debut");
3663 $form->setOnchange("date_bordereau_debut", "fdate(this)");
3664 $form->setVal("date_bordereau_debut", date("d/m/Y"));
3665 // Paramétrage du champ date_bordereau_fin
3666 $form->setLib("date_bordereau_fin", _("date_bordereau_fin"));
3667 $form->setType("date_bordereau_fin", "date");
3668 $form->setTaille("date_bordereau_fin", 12);
3669 $form->setMax("date_bordereau_fin", 12);
3670 $form->setRequired("date_bordereau_fin");
3671 $form->setOnchange("date_bordereau_fin", "fdate(this)");
3672 $form->setVal("date_bordereau_fin", date("d/m/Y"));
3673 // Paramétrage du champ bordereau
3674 $form->setLib("bordereau", _("bordereau"));
3675 $form->setType("bordereau", "select");
3676 $form->setRequired("bordereau");
3677 // Valeurs des champs
3678 if ($f->get_submitted_post_value("validation") !== null) {
3679 $form->setVal("date_bordereau_debut", $f->get_submitted_post_value("date_bordereau_debut"));
3680 $form->setVal("date_bordereau_fin", $f->get_submitted_post_value("date_bordereau_fin"));
3681 $form->setVal("bordereau", $f->get_submitted_post_value("bordereau"));
3682 $form->setVal("om_collectivite", $f->get_submitted_post_value("om_collectivite"));
3683 }
3684 // Données du select - On récupère ici la liste de tous les états disponibles
3685 // dans la table om_etat qui ont un id qui commence par la cahine de caractères
3686 // 'bordereau_'
3687 $sql = "SELECT om_etat.id, om_etat.libelle
3688 FROM ".DB_PREFIXE."om_etat
3689 WHERE om_etat.id LIKE 'bordereau_%'
3690 ORDER BY om_etat.id";
3691 $res = $f->db->query($sql);
3692 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3693 $f->isDatabaseError($res);
3694 // Données du select
3695 $contenu = array(
3696 0 => array("", ),
3697 1 => array(_("choisir bordereau")),
3698 );
3699 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3700 $contenu[0][] = $row['id'];
3701 $contenu[1][] = $row['libelle'];
3702 }
3703 $form->setSelect("bordereau", $contenu);
3704 //
3705 if($_SESSION["niveau"] == 2) {
3706 $form->setLib("om_collectivite", _("collectivite"));
3707 $form->setType("om_collectivite", "select");
3708
3709 // Données du select - On récupère ici la liste de tous toutes les collectivités
3710 // de niveau 1
3711 $sql = "SELECT om_collectivite, libelle
3712 FROM ".DB_PREFIXE."om_collectivite
3713 WHERE niveau = '1' ORDER BY libelle";
3714 $res = $f->db->query($sql);
3715 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3716 $f->isDatabaseError($res);
3717 // La valeur par défaut du select est Toutes
3718 $list_collectivites = array(
3719 0 => array("", ),
3720 1 => array(_("toutes"))
3721 );
3722
3723 $id_colls = "";
3724 // On stocke dans $id_colls l'id de toutes les collectivités de niveau 1 séparées
3725 // par des virgules, pour un traitement plus facile dans la requête de sous-état
3726 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3727 if ($id_colls != "") {
3728 $id_colls .= ",";
3729 }
3730 $id_colls .= $row['om_collectivite'];
3731 $list_collectivites[0][] = $row['om_collectivite'];
3732 $list_collectivites[1][] = $row['libelle'];
3733 }
3734 // On affecte la liste d'identifiants à l'option Toutes
3735 $list_collectivites[0][0] = $id_colls ;
3736 $form->setSelect("om_collectivite", $list_collectivites);
3737 }
3738
3739 // Affichage du formulaire
3740 $form->entete();
3741 $form->afficher($champs, 0, false, false);
3742 $form->enpied();
3743 // Affichage du bouton
3744 printf("\t<div class=\"formControls\">\n");
3745 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3746 printf("\t</div>\n");
3747 // Fermeture du formulaire
3748 printf("\t</form>\n");
3749
3750 }
3751
3752 /**
3753 * VIEW - view_suivi_envoi_lettre_rar.
3754 *
3755 * Vu pour imprimer les RAR.
3756 *
3757 * @return void
3758 */
3759 function view_suivi_envoi_lettre_rar() {
3760 // Vérification de l'accessibilité sur l'élément
3761 $this->checkAccessibility();
3762
3763 // XXX APP
3764
3765 $f = $this->f;
3766
3767 //
3768 if ($f->get_submitted_post_value("date") !== null) {
3769 $date = $f->get_submitted_post_value("date");
3770 } else {
3771 $date = "";
3772 }
3773 //
3774 if ($f->get_submitted_post_value("liste_code_barres_instruction") !== null) {
3775 $liste_code_barres_instruction = $f->get_submitted_post_value("liste_code_barres_instruction");
3776 } else {
3777 $liste_code_barres_instruction = "";
3778 }
3779
3780 // Compteur du nombre de page générées
3781 $nbLettres = 0;
3782 // Liste d'id des instructions
3783 $id4Gen = array();
3784 //
3785 $error = "";
3786
3787 /**
3788 * Validation du formulaire
3789 */
3790 // Si le formulaire a été validé
3791 if ($f->get_submitted_post_value('validation') !== null) {
3792 //
3793 if (empty($date) || empty($liste_code_barres_instruction)) {
3794 //
3795 $message_class = "error";
3796 $message = _("Tous les champs doivent etre remplis.");
3797 } else {
3798 // Création d'un tableau d'instruction
3799 $liste = explode("\r\n", $f->get_submitted_post_value("liste_code_barres_instruction"));
3800 //
3801 foreach ($liste as $code_barres) {
3802 // On enlève les éventuels espaces saisis
3803 $code_barres = trim($code_barres);
3804 // Vérification de l'existence de l'instruction
3805 if ($code_barres != "") {
3806 // Si la valeur transmise est numérique
3807 if (is_numeric($code_barres)) {
3808 //
3809 $sql = "SELECT count(*) FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3810 $nbInstr = $f->db->getone($sql);
3811 $f->addToLog(__METHOD__.": db->getone(\"".$sql."\")", VERBOSE_MODE);
3812 $f->isDatabaseError($nbInstr);
3813 //
3814 if ($nbInstr == "1") {
3815 // Récupération de la date d'envoi de l'instruction bippé
3816 $sql = "SELECT to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar, instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$code_barres."'";
3817 $res = $f->db->query($sql);
3818 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
3819 $f->isDatabaseError($res);
3820 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
3821 // Si pas de date ou correspond à la date du formulaire on
3822 // effectue le traitement
3823 if ($row["date_envoi_rar"] == "" || $row["date_envoi_rar"] == $date) {
3824
3825 require_once '../obj/instruction.class.php';
3826
3827 $instr = new instruction($row['instruction'], $f->db, DEBUG);
3828 $valF = array();
3829 foreach($instr->champs as $id => $champ) {
3830 $valF[$champ] = $instr->val[$id];
3831 }
3832 $valF['date_evenement']=
3833 $instr->dateDBToForm($valF['date_evenement']);
3834 $valF['archive_date_complet']=
3835 $instr->dateDBToForm($valF['archive_date_complet']);
3836 $valF['archive_date_rejet']=
3837 $instr->dateDBToForm($valF['archive_date_rejet']);
3838 $valF['archive_date_limite']=
3839 $instr->dateDBToForm($valF['archive_date_limite']);
3840 $valF['archive_date_notification_delai']=
3841 $instr->dateDBToForm($valF['archive_date_notification_delai']);
3842 $valF['archive_date_decision']=
3843 $instr->dateDBToForm($valF['archive_date_decision']);
3844 $valF['archive_date_validite']=
3845 $instr->dateDBToForm($valF['archive_date_validite']);
3846 $valF['archive_date_achevement']=
3847 $instr->dateDBToForm($valF['archive_date_achevement']);
3848 $valF['archive_date_chantier']=
3849 $instr->dateDBToForm($valF['archive_date_chantier']);
3850 $valF['archive_date_conformite']=
3851 $instr->dateDBToForm($valF['archive_date_conformite']);
3852 $valF['archive_date_dernier_depot']=
3853 $instr->dateDBToForm($valF['archive_date_dernier_depot']);
3854 $valF['archive_date_limite_incompletude']=
3855 $instr->dateDBToForm($valF['archive_date_limite_incompletude']);
3856 $valF['date_finalisation_courrier']=
3857 $instr->dateDBToForm($valF['date_finalisation_courrier']);
3858 $valF['date_envoi_signature']=
3859 $instr->dateDBToForm($valF['date_envoi_signature']);
3860 $valF['date_retour_signature']=
3861 $instr->dateDBToForm($valF['date_retour_signature']);
3862 $valF['date_envoi_rar']=
3863 $instr->dateDBToForm($valF['date_envoi_rar']);
3864 $valF['date_retour_rar']=
3865 $instr->dateDBToForm($valF['date_retour_rar']);
3866 $valF['date_envoi_controle_legalite']=
3867 $instr->dateDBToForm($valF['date_envoi_controle_legalite']);
3868 $valF['date_retour_controle_legalite']=
3869 $instr->dateDBToForm($valF['date_retour_controle_legalite']);
3870
3871 $valF['date_envoi_rar'] = $date;
3872
3873 // Vérification de la finalisation du document
3874 // correspondant au code barres
3875 if($instr->getVal("om_final_instruction") === 't') {
3876 $instr->setParameter('maj', 1);
3877 $instr->class_actions[1]["identifier"] =
3878 "envoi lettre RAR (depuis le menu suivi des pièces)";
3879 if ($instr->modifier($valF, $f->db, DEBUG) == true) {
3880 $id4Gen[] = $code_barres;
3881 $nbLettres ++;
3882 } else {
3883 //
3884 if ($error != "") {
3885 $error .= "<br/>";
3886 }
3887 $error .= sprintf(_("Une erreur s'est produite lors de la modification de l'instruction %s."),
3888 $code_barres);
3889 $error .= " ";
3890 $error .= _("Veuillez contacter votre administrateur.");
3891 }
3892 } else {
3893 //
3894 if ($error != "") {
3895 $error .= "<br/>";
3896 }
3897 $error .= sprintf(_("Le document correspondant au
3898 code barres %s n'est pas finalise,
3899 le bordereau ne sera pas genere."),
3900 $code_barres);
3901 }
3902
3903 } else {
3904 //
3905 if ($error != "") {
3906 $error .= "<br/>";
3907 }
3908 $error .= _("Une lettre correspondante a l'instruction ayant pour code barres")." ".$code_barres." "._("a deja ete envoyee, le bordereau ne sera pas genere.");
3909 }
3910 } else {
3911 //
3912 if ($error != "") {
3913 $error .= "<br/>";
3914 }
3915 $error .= _("Le numero")." ".$code_barres." "._("ne correspond a aucun code barres d'instruction.");
3916 }
3917 } else {
3918 //
3919 if ($error != "") {
3920 $error .= "<br/>";
3921 }
3922 $error .= _("Le code barres d'instruction")." ".$code_barres." "._("n'est pas valide.");
3923 }
3924 }
3925 }
3926 }
3927 }
3928
3929 /**
3930 * Affichage des messages et du formulaire
3931 */
3932 // Affichage du message de validation ou d'erreur
3933 if (isset($message) && isset($message_class) && $message != "") {
3934 $f->displayMessage($message_class, $message);
3935 }
3936 // Affichage du message d'erreur
3937 if(!empty($error)) {
3938 $f->displayMessage("error", $error);
3939 }
3940 // Affichage du message de validation de la saisie
3941 if ($nbLettres > 0) {
3942 //
3943 $message_class = "valid";
3944 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre document");
3945 $message .= " : <br/><br/>";
3946 $message .= "<a class='om-prev-icon pdf-16'";
3947 $message .= " title=\""._("imprimer les RAR")."\"";
3948 $message .= " href=\"../scr/form.php?obj=instruction&action=180&idx=0&liste=".implode(",",$id4Gen)."\"";
3949 $message .= " target='_blank'>";
3950 $message .= _("Telecharger le document pour")." ".$nbLettres." "._("RAR");
3951 $message .= "</a>";
3952 $f->displayMessage($message_class, $message);
3953 }
3954 // Inclusion de la classe de gestion des formulaires
3955 require_once "../obj/om_formulaire.class.php";
3956 // Ouverture du formulaire
3957 echo "\t<form";
3958 echo " method=\"post\"";
3959 echo " id=\"suivi_envoi_lettre_rar_form\"";
3960 echo " action=\"\"";
3961 echo ">\n";
3962 // Paramétrage des champs du formulaire
3963 $champs = array("date", "liste_code_barres_instruction");
3964 // Création d'un nouvel objet de type formulaire
3965 $form = new formulaire(NULL, 0, 0, $champs);
3966 // Paramétrage du champ date du formulaire
3967 $form->setLib("date", _("Date")."* :");
3968 $form->setType("date", "date");
3969 $form->setOnchange("date", "fdate(this)");
3970 $form->setVal("date", ($date == "" ? date("d/m/Y") : $date));
3971 $form->setTaille("date", 10);
3972 $form->setMax("date", 10);
3973 // Paramétrage du champ liste_code_barres_instruction du formulaire
3974 $form->setLib("liste_code_barres_instruction", _("Liste des codes barres d'instructions scannes")."* :");
3975 $form->setType("liste_code_barres_instruction", "textarea");
3976 $form->setVal("liste_code_barres_instruction", $liste_code_barres_instruction);
3977 $form->setTaille("liste_code_barres_instruction", 20);
3978 $form->setMax("liste_code_barres_instruction", 20);
3979 // Affichage du formulaire
3980 $form->entete();
3981 $form->afficher($champs, 0, false, false);
3982 $form->enpied();
3983 // Affichage du bouton
3984 echo "\t<div class=\"formControls\">\n";
3985 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
3986 echo "\t</div>\n";
3987 // Fermeture du formulaire
3988 echo "\t</form>\n";
3989 }
3990
3991 /**
3992 * VIEW - view_suivi_mise_a_jour_des_dates.
3993 *
3994 * Vu pour mettre à jour les dates de suivi de l'instruction.
3995 *
3996 * @return void
3997 */
3998 function view_suivi_mise_a_jour_des_dates() {
3999 // Vérification de l'accessibilité sur l'élément
4000 $this->checkAccessibility();
4001
4002 // XXX APP
4003
4004 $f = $this->f;
4005
4006 // Récupération des valeur passées en POST ou GET
4007 if($f->get_submitted_post_value("type_mise_a_jour") !== null) {
4008 $type_mise_a_jour = $f->get_submitted_post_value("type_mise_a_jour");
4009 } elseif($f->get_submitted_get_value('type_mise_a_jour') !== null) {
4010 $type_mise_a_jour = $f->get_submitted_get_value('type_mise_a_jour');
4011 } else {
4012 $type_mise_a_jour = "";
4013 }
4014 if($f->get_submitted_post_value('date') !== null) {
4015 $date = $f->get_submitted_post_value('date');
4016 } elseif($f->get_submitted_get_value('date') !== null) {
4017 $date = $f->get_submitted_get_value('date');
4018 } else {
4019 $date = "";
4020 }
4021 if($f->get_submitted_post_value('code_barres') !== null) {
4022 $code_barres = $f->get_submitted_post_value('code_barres');
4023 } elseif($f->get_submitted_get_value('code_barres') !== null) {
4024 $code_barres = $f->get_submitted_get_value('code_barres');
4025 } else {
4026 $code_barres = "";
4027 }
4028 // Booléen permettant de définir si un enregistrement à eu lieu
4029 $correct = false;
4030 // Booléen permettant de définir si les dates peuvent êtres enregistrées
4031 $date_error = false;
4032 // Champs date à mettre à jour
4033 $liste_champs=array();
4034
4035 // Si le formulaire a été validé
4036 if ($f->get_submitted_post_value('validation') !== null) {
4037 if(!empty($type_mise_a_jour) and !empty($date) and !empty($code_barres)) {
4038
4039 //Vérification de l'existance de l'instruction
4040 $sql = "SELECT instruction FROM ".DB_PREFIXE."instruction WHERE code_barres='".$this->f->db->escapesimple($code_barres)."'";
4041 $res = $f->db->query($sql);
4042 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4043 $f->isDatabaseError($res);
4044
4045 if($res->numrows() == 1) {
4046 $liste_champs = explode(";", $type_mise_a_jour);
4047 // Mise à jour des dates après l'écran de verification
4048 if($f->get_submitted_post_value('is_valid') !== null and $f->get_submitted_post_value('is_valid') == "true") {
4049 require_once '../obj/instruction.class.php';
4050 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
4051 $instr = new instruction($row['instruction'], $f->db, DEBUG);
4052 $valF = array();
4053 foreach($instr->champs as $id => $champ) {
4054 $valF[$champ] = $instr->val[$id];
4055 }
4056 $valF['date_evenement']=$instr->dateDBToForm($valF['date_evenement']);
4057 $valF['archive_date_complet']=$instr->dateDBToForm($valF['archive_date_complet']);
4058 $valF['archive_date_rejet']=$instr->dateDBToForm($valF['archive_date_rejet']);
4059 $valF['archive_date_limite']=$instr->dateDBToForm($valF['archive_date_limite']);
4060 $valF['archive_date_notification_delai']=$instr->dateDBToForm($valF['archive_date_notification_delai']);
4061 $valF['archive_date_decision']=$instr->dateDBToForm($valF['archive_date_decision']);
4062 $valF['archive_date_validite']=$instr->dateDBToForm($valF['archive_date_validite']);
4063 $valF['archive_date_achevement']=$instr->dateDBToForm($valF['archive_date_achevement']);
4064 $valF['archive_date_chantier']=$instr->dateDBToForm($valF['archive_date_chantier']);
4065 $valF['archive_date_conformite']=$instr->dateDBToForm($valF['archive_date_conformite']);
4066 $valF['archive_date_dernier_depot']=$instr->dateDBToForm($valF['archive_date_dernier_depot']);
4067 $valF['archive_date_limite_incompletude']=$instr->dateDBToForm($valF['archive_date_limite_incompletude']);
4068 $valF['date_finalisation_courrier']=$instr->dateDBToForm($valF['date_finalisation_courrier']);
4069 $valF['date_envoi_signature']=$instr->dateDBToForm($valF['date_envoi_signature']);
4070 $valF['date_retour_signature']=$instr->dateDBToForm($valF['date_retour_signature']);
4071 $valF['date_envoi_rar']=$instr->dateDBToForm($valF['date_envoi_rar']);
4072 $valF['date_retour_rar']=$instr->dateDBToForm($valF['date_retour_rar']);
4073 $valF['date_envoi_controle_legalite']=$instr->dateDBToForm($valF['date_envoi_controle_legalite']);
4074 $valF['date_retour_controle_legalite']=$instr->dateDBToForm($valF['date_retour_controle_legalite']);
4075
4076 foreach(explode(";", $type_mise_a_jour) as $maj_date) {
4077 $valF[$maj_date]=$date;
4078 }
4079
4080 // Vérification de la finalisation du document
4081 // correspondant au code barres
4082 if($valF["om_final_instruction"] === 't' or
4083 $valF["lettretype"] == '') {
4084 $code_barres = "";
4085
4086 //Désactivation de l'autocommit
4087 $f->db->autoCommit(false);
4088
4089 //On modifie les valeurs de l'instruction
4090 $instr->setParameter('maj', 170);
4091 $instr->class_actions[170]["identifier"] =
4092 "modifier (depuis le menu suivi des pièces)";
4093 $retour = $instr->modifier($valF, $f->db, DEBUG);
4094
4095 //Si une erreur s'est produite, on défait les modifications
4096 //qui ont été faites
4097 if (!$retour){
4098 $instr->undoValidation();
4099 }
4100 //Sinon, on valide en base de données les modifications
4101 else {
4102 $f->db->commit();
4103 }
4104
4105 // Variable correct retourné depuis la classe instruction
4106 $correct = $instr->correct;
4107
4108 // Si la modification sur l'instruction a échoué
4109 if ($correct === false) {
4110
4111 // Message d'erreur de la classe instruction
4112 $error = $instr->msg;
4113 }
4114
4115 } else {
4116 // Indique que le traitement est en erreur
4117 $correct = false;
4118 // Message d'erreur
4119 $error = sprintf(_("Le document n'est pas finalise."),
4120 "<span class='bold'>".$code_barres."</span>");
4121 }
4122 } else {
4123 // Récupération des infos du dossier
4124 $sqlInfo = "SELECT dossier.dossier_libelle,
4125 evenement.libelle as evenement,
4126 autorite_competente.code as autorite_competente_code,
4127 autorite_competente.libelle as autorite_competente,
4128 evenement.type as evenement_type,
4129 to_char(date_envoi_signature,'DD/MM/YYYY') as date_envoi_signature,
4130 to_char(date_retour_signature,'DD/MM/YYYY') as date_retour_signature,
4131 to_char(date_envoi_controle_legalite,'DD/MM/YYYY') as date_envoi_controle_legalite,
4132 to_char(date_retour_controle_legalite,'DD/MM/YYYY') as date_retour_controle_legalite,
4133 to_char(date_envoi_rar,'DD/MM/YYYY') as date_envoi_rar,
4134 to_char(date_retour_rar,'DD/MM/YYYY') as date_retour_rar
4135 FROM ".DB_PREFIXE."instruction
4136 INNER JOIN ".DB_PREFIXE."dossier ON
4137 dossier.dossier=instruction.dossier
4138 LEFT JOIN ".DB_PREFIXE."autorite_competente ON
4139 dossier.autorite_competente=autorite_competente.autorite_competente
4140 INNER JOIN ".DB_PREFIXE."evenement ON
4141 instruction.evenement=evenement.evenement
4142 WHERE code_barres='".$code_barres."'";
4143 $resInfo = $f->db->query($sqlInfo);
4144 $f->isDatabaseError($resInfo);
4145 $infos = $resInfo->fetchRow(DB_FETCHMODE_ASSOC);
4146
4147 // Vérification de la non modification des dates de suivi
4148 foreach(explode(";", $type_mise_a_jour) as $champ) {
4149 if($infos[$champ] != "" AND $infos[$champ] != $date) {
4150 $error = _("Les dates de suivis ne peuvent etre modifiees");
4151 $date_error = true;
4152 }
4153 }
4154 }
4155 } else {
4156 $error = _("Le numero saisi ne correspond a aucun code barres d'instruction.");
4157 }
4158
4159 } else {
4160 $error = _("Tous les champs doivent etre remplis.");
4161 }
4162 }
4163
4164 /**
4165 * Affichage des messages et du formulaire
4166 */
4167 // Affichage du message de validation ou d'erreur
4168 if (isset($message) && isset($message_class) && $message != "") {
4169 $f->displayMessage($message_class, $message);
4170 }
4171 // Affichage du message d'erreur
4172 if(!empty($error)) {
4173 $f->displayMessage("error", $error);
4174 }
4175
4176 // Affichage du message de validation de la saisie
4177 if($correct === true) {
4178 $f->displayMessage("ok", _("Saisie enregistree"));
4179 }
4180 // Inclusion de la classe de gestion des formulaires
4181 require_once "../obj/om_formulaire.class.php";
4182 // Ouverture du formulaire
4183 echo "\t<form";
4184 echo " method=\"post\"";
4185 echo " id=\"suivi_mise_a_jour_des_dates_form\"";
4186 echo " action=\"\"";
4187 echo ">\n";
4188 // Paramétrage des champs du formulaire
4189 if(isset($infos)) {
4190 $champs = array("type_mise_a_jour", "date", "code_barres", "dossier_libelle", "evenement"
4191 , "autorite_competente", "date_envoi_signature",
4192 "date_retour_signature", "date_envoi_controle_legalite",
4193 "date_retour_controle_legalite", "date_envoi_rar",
4194 "date_retour_rar", "is_valid");
4195 } else {
4196 $champs = array("type_mise_a_jour", "date", "code_barres");
4197 }
4198 // Création d'un nouvel objet de type formulaire
4199 $form = new formulaire(NULL, 0, 0, $champs);
4200 // Paramétrage des champs du formulaire
4201 // Parametrage du champ type_mise_a_jour
4202 $form->setLib("type_mise_a_jour", _("Date a mettre a jour")."* :");
4203 if(isset($infos)) {
4204 $form->setType("type_mise_a_jour", "selecthiddenstatic");
4205
4206 } else {
4207 $form->setType("type_mise_a_jour", "select");
4208
4209 }
4210 $form->setVal("type_mise_a_jour", $type_mise_a_jour);
4211 $contenu = array();
4212
4213 $contenu[0][0] = "date_envoi_signature";
4214 $contenu[1][0] = _("date d'envoi pour signature Mairie/Prefet");
4215
4216 $contenu[0][1] = "date_retour_signature";
4217 $contenu[1][1] = _("date de retour de signature Mairie/Prefet");
4218
4219 $contenu[0][2] = "date_retour_signature;date_envoi_controle_legalite";
4220 $contenu[1][2] = _("date de retour de signature + Envoi controle legalite");
4221
4222 $contenu[0][3] = "date_envoi_controle_legalite";
4223 $contenu[1][3] = _("date d'envoi au controle de legalite");
4224
4225 $contenu[0][4] = "date_retour_controle_legalite";
4226 $contenu[1][4] = _("date de retour de controle de legalite");
4227
4228 $contenu[0][5] = "date_retour_rar";
4229 $contenu[1][5] = _("date de retour de l'AR");
4230
4231 $form->setSelect("type_mise_a_jour", $contenu);
4232
4233 // Parametrage du champ date
4234 $form->setLib("date", _("Date")."* :");
4235 if(isset($infos)) {
4236 $form->setType("date", "hiddenstaticdate");
4237
4238 } else {
4239 $form->setType("date", "date");
4240 }
4241 $form->setVal("date", $date);
4242 $form->setTaille("date", 10);
4243 $form->setMax("date", 10);
4244
4245 // Parametrage du champ code_barres
4246 $form->setLib("code_barres", _("Code barres d'instruction")."* :");
4247 if(isset($infos)) {
4248 $form->setType("code_barres", "hiddenstatic");
4249 } else {
4250 $form->setType("code_barres", "text");
4251 }
4252 $form->setVal("code_barres", $code_barres);
4253 $form->setTaille("code_barres", 20);
4254 $form->setMax("code_barres", 20);
4255
4256 // Ajout des infos du dossier correspondantes à l'instruction séléctionnée
4257 if(isset($infos)) {
4258
4259 // Tous les champs sont défini par defaut à static
4260 foreach ($infos as $key => $value) {
4261 $form->setType($key, "static");
4262 if(in_array($key, $liste_champs)) {
4263 $form->setVal($key, $date);
4264 } else {
4265 $form->setVal($key, $value);
4266 }
4267 }
4268
4269 // Les champs dont on viens de définir la valeur sont en gras
4270 foreach ($liste_champs as $value) {
4271 $form->setBloc($value,'DF',"",'bold');
4272 }
4273
4274 // Parametrage du champ dossier
4275 $form->setLib("dossier_libelle", _("dossier_libelle")." :");
4276 $form->setType("dossier_libelle", "static");
4277 $form->setVal("dossier_libelle", $infos['dossier_libelle']);
4278
4279 // Parametrage du champ evenement
4280 $form->setLib("evenement", _("evenement")." :");
4281 $form->setType("evenement", "static");
4282 $form->setVal("evenement", $infos['evenement']);
4283
4284 // Parametrage du champ autorite_competente
4285 $form->setLib("autorite_competente", _("Autorite competente")." :");
4286 $form->setType("autorite_competente", "static");
4287 $form->setVal("autorite_competente", $infos['autorite_competente']);
4288
4289 // Parametrage des libellés d'envoi avec RAR
4290 $form->setLib("date_envoi_rar", _("date_envoi_rar")." :");
4291 $form->setLib("date_retour_rar", _("date_retour_rar")." :");
4292
4293 $form->setLib("date_envoi_signature", _("date_envoi_signature")." :");
4294 $form->setLib("date_retour_signature", _("date_retour_signature")." :");
4295 $form->setLib("date_envoi_controle_legalite", _("date_envoi_controle_legalite")." :");
4296 $form->setLib("date_retour_controle_legalite", _("date_retour_controle_legalite")." :");
4297 // Configuration des libellé en fonction de l'autorité compétente
4298 if($infos['autorite_competente_code'] == 'ETAT') {
4299 $form->setType("date_envoi_controle_legalite", "hiddendate");
4300 $form->setType("date_retour_controle_legalite", "hiddendate");
4301 }
4302
4303 // Ajout d'un champ hidden permettant de savoir que le formulaire précédant est celui de vérification
4304 $form->setLib("is_valid", _("Valide")." :");
4305 $form->setType("is_valid", "hidden");
4306 $form->setVal("is_valid", 'true');
4307
4308 $form->setFieldset('dossier_libelle','D',_('Synthese'));
4309 $form->setFieldset('is_valid','F');
4310
4311 }
4312
4313
4314 // Création du fieldset regroupant les champs permettant la mise à jour des date
4315 $form->setFieldset('type_mise_a_jour','D',_('Mise a jour'));
4316 $form->setFieldset('code_barres','F');
4317 // Affichage du formulaire
4318 $form->entete();
4319 $form->afficher($champs, 0, false, false);
4320 $form->enpied();
4321 // Affichage du bouton
4322 echo "\t<div class=\"formControls\">\n";
4323 //
4324 if(!$date_error) {
4325 $f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4326 }
4327 // Si pas sur l'écran de validation
4328 if(isset($infos)) {
4329 echo "<a class=\"retour\" href=\"../scr/form.php?obj=instruction_suivi_mise_a_jour_des_dates&action=170&idx=0";
4330 echo "&amp;type_mise_a_jour=".$type_mise_a_jour."&amp;date=".$date."&amp;code_barres=".$code_barres;
4331 echo "\">Retour</a>";
4332 }
4333 echo "\t</div>\n";
4334 // Fermeture du formulaire
4335 echo "\t</form>\n";
4336 }
4337
4338 /**
4339 * [view_pdf_lettre_rar description]
4340 *
4341 * @return [type] [description]
4342 */
4343 function view_pdf_lettre_rar() {
4344 // Vérification de l'accessibilité sur l'élément
4345 $this->checkAccessibility();
4346
4347 // XXX APP
4348
4349 $f = $this->f;
4350
4351 $f->disableLog();
4352
4353 if($f->get_submitted_get_value('liste') != null) {
4354 $listeCodeBarres = explode(',',$f->get_submitted_get_value('liste'));
4355
4356 // Classe permettant la mise en page de l'édition pdf
4357 require_once "../obj/pdf_lettre_rar.class.php";
4358 $pdf_lettre_rar = new pdf_lettre_rar('P', 'mm', 'A4');
4359 // Initialisation de la mise en page
4360 $pdf_lettre_rar->init($f);
4361
4362 foreach ($listeCodeBarres as $code_barres) {
4363
4364 // Test si l'evenement est de type arrete et si un délégataire a été nommé
4365 $sql = "SELECT
4366 dossier.dossier_libelle,
4367 evenement.type,
4368 count(lien_dossier_demandeur) as nbdemandeur,
4369 CASE
4370 WHEN division.libelle IS NOT NULL AND phase.code IS NOT NULL
4371 THEN CONCAT(phase.code, ' - ', division.libelle)
4372 ELSE
4373 phase.code
4374 END AS code_phase
4375 FROM ".DB_PREFIXE."instruction
4376 LEFT JOIN ".DB_PREFIXE."dossier
4377 ON instruction.dossier = dossier.dossier
4378 LEFT JOIN ".DB_PREFIXE."division
4379 ON dossier.division = division.division
4380 INNER JOIN ".DB_PREFIXE."evenement ON
4381 instruction.evenement=evenement.evenement
4382 LEFT JOIN ".DB_PREFIXE."phase
4383 ON evenement.phase = phase.phase
4384 inner JOIN ".DB_PREFIXE."lien_dossier_demandeur ON
4385 instruction.dossier=lien_dossier_demandeur.dossier
4386 inner join ".DB_PREFIXE."demandeur on
4387 demandeur.demandeur=lien_dossier_demandeur.demandeur
4388 WHERE code_barres='".$code_barres."'
4389 AND ((lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire')
4390 OR demandeur.type_demandeur='delegataire')
4391 GROUP BY dossier.dossier_libelle, evenement.type, phase.code, division.libelle";
4392
4393 $res = $f->db->query($sql);
4394 $f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
4395 $f->isDatabaseError($res);
4396 $testDemandeur = $res->fetchrow(DB_FETCHMODE_ASSOC);
4397
4398
4399 // Recuperation de l'adresse de destination
4400 $sqlAdresse = "SELECT
4401 CASE WHEN demandeur.qualite='particulier'
4402 THEN TRIM(CONCAT_WS(' ', pc.libelle, demandeur.particulier_nom, demandeur.particulier_prenom))
4403 ELSE TRIM(demandeur.personne_morale_denomination)
4404 END as ligne1,
4405 CASE WHEN demandeur.qualite='personne_morale'
4406 THEN TRIM(demandeur.personne_morale_raison_sociale)
4407 ELSE ''
4408 END as ligne1_1,
4409 CASE WHEN demandeur.qualite='personne_morale' AND (demandeur.personne_morale_nom IS NOT NULL OR demandeur.personne_morale_prenom IS NOT NULL)
4410 THEN TRIM(CONCAT_WS(' ', 'rep. par', demandeur.personne_morale_nom, demandeur.personne_morale_prenom))
4411 ELSE ''
4412 END as ligne1_2,
4413 trim(concat(demandeur.numero,' ',demandeur.voie)) as ligne2,
4414 CASE demandeur.complement
4415 WHEN null THEN ''
4416 ELSE trim(demandeur.complement)
4417 END as ligne3,
4418 CASE demandeur.lieu_dit
4419 WHEN null THEN ''
4420 ELSE trim(demandeur.lieu_dit)
4421 END as ligne4,
4422 CONCAT_WS(' ', demandeur.code_postal, demandeur.localite,
4423 (CASE WHEN demandeur.bp IS NOT NULL
4424 THEN CONCAT_WS(' ', 'BP', demandeur.bp)
4425 ELSE ''
4426 END),
4427 (CASE WHEN demandeur.cedex IS NOT NULL
4428 THEN CONCAT_WS(' ', 'CEDEX', demandeur.cedex)
4429 ELSE ''
4430 END))
4431 as ligne5,
4432 code_barres as code_barres
4433 FROM ".DB_PREFIXE."instruction
4434 INNER JOIN ".DB_PREFIXE."dossier ON dossier.dossier = instruction.dossier
4435 INNER JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier
4436 INNER JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
4437 LEFT OUTER JOIN ".DB_PREFIXE."civilite as pc ON demandeur.particulier_civilite = pc.civilite OR demandeur.personne_morale_civilite = pc.civilite
4438 WHERE instruction.code_barres ='".$code_barres."'";
4439
4440 // Envoi pour delegataire ou petitionnaire principal selon le type d'evenement
4441 if($testDemandeur['type'] != 'arrete' AND $testDemandeur['nbdemandeur'] > 1) {
4442 $sqlAdresse .= " AND demandeur.type_demandeur='delegataire'";
4443 } else {
4444 $sqlAdresse .= " AND lien_dossier_demandeur.petitionnaire_principal IS TRUE AND demandeur.type_demandeur='petitionnaire'";
4445 }
4446
4447 $resAdresse = $f->db->query($sqlAdresse);
4448 $adresse_dest = $resAdresse->fetchrow(DB_FETCHMODE_ASSOC);
4449 $f->addToLog(__METHOD__.": db->query(\"".$sqlAdresse."\")", VERBOSE_MODE);
4450 $f->isDatabaseError($resAdresse);
4451
4452 // Création adresse destinataire sans ligne vide
4453 $adresse_destinataire = array();
4454 if (!empty($adresse_dest['ligne1'])) {
4455 $adresse_destinataire[] = $adresse_dest['ligne1'];
4456 }
4457 if (!empty($adresse_dest['ligne1_1'])) {
4458 $adresse_destinataire[] = $adresse_dest['ligne1_1'];
4459 }
4460 if (!empty($adresse_dest['ligne1_2'])) {
4461 $adresse_destinataire[] = $adresse_dest['ligne1_2'];
4462 }
4463 $adresse_destinataire[] = $adresse_dest['ligne2'];
4464 if (!empty($adresse_dest['ligne3'])) {
4465 $adresse_destinataire[] = $adresse_dest['ligne3'];
4466 }
4467 if (!empty($adresse_dest['ligne4'])) {
4468 $adresse_destinataire[] = $adresse_dest['ligne4'];
4469 }
4470 $adresse_destinataire[] = $adresse_dest['ligne5'];
4471
4472 // Création du champ specifique
4473 $specifique_content = array();
4474 $specifique_content[] = $adresse_dest['ligne1'];
4475 $specifique_content[] = $adresse_dest['ligne1_1'];
4476 $specifique_content[] = $adresse_dest['ligne1_2'];
4477 $specifique_content[] = $testDemandeur['dossier_libelle'];
4478 $specifique_content[] = "|||||".$adresse_dest['code_barres']."|||||";
4479 unset($adresse_dest['code_barres']);
4480
4481 // Ajout d'une page aux pdf
4482 $pdf_lettre_rar->addLetter($adresse_destinataire, $specifique_content, $testDemandeur['code_phase']);
4483
4484 }
4485 $pdf_output = $pdf_lettre_rar->output("lettre_rar".date("dmYHis").".pdf","S");
4486 require_once PATH_OPENMAIRIE."om_edition.class.php";
4487 $om_edition = new edition();
4488 $om_edition->expose_pdf_output($pdf_output, "lettre_rar".date("dmYHis").".pdf");
4489 }
4490 }
4491
4492 /**
4493 * VIEW - view_bordereau_envoi_maire.
4494 *
4495 * Formulaire demandant :
4496 * - le code-barres de l'événement d'instruction
4497 * - la date d'envoi du courrier pour signature par le maire
4498 *
4499 * Lors de la validation :
4500 * => met à jour cette date dans l'événement d'instruction
4501 * => crée un lien permettant de générer en PDF le bordereau
4502 *
4503 * @return void
4504 */
4505 function view_bordereau_envoi_maire() {
4506 // Vérification de l'accessibilité sur l'élément
4507 $this->checkAccessibility();
4508
4509 // Récupération des valeur passées en POST ou GET
4510 $code_barres = "";
4511 if($this->f->get_submitted_post_value('code_barres') !== null) {
4512 $code_barres = $this->f->get_submitted_post_value('code_barres');
4513 } elseif($this->f->get_submitted_get_value('code_barres')!==null) {
4514 $code_barres = $this->f->get_submitted_get_value('code_barres');
4515 }
4516 $date = "";
4517 if($this->f->get_submitted_post_value('date') !== null) {
4518 $date = $this->f->get_submitted_post_value('date');
4519 } elseif($this->f->get_submitted_get_value('date') !== null) {
4520 $date = $this->f->get_submitted_get_value('date');
4521 }
4522 $validation = 0;
4523 if($this->f->get_submitted_post_value('validation') !== null) {
4524 $validation = $this->f->get_submitted_post_value('validation');
4525 } elseif($this->f->get_submitted_get_value('validation') !== null) {
4526 $validation = $this->f->get_submitted_get_value('validation');
4527 }
4528
4529 // Si le formulaire a été validé
4530 if ($this->f->get_submitted_post_value('validation') !== null) {
4531 // Tous les champs doivent obligatoirement être remplis
4532 if (!empty($date) && !empty($code_barres)) {
4533 $date_en = $this->dateDB($date);
4534 // Si date valide
4535 if ($date_en != "") {
4536 $id_instruction = $this->get_instruction_by_barcode($code_barres);
4537 // Si un événement d'instruction a été trouvé pour ce code-barres
4538 if ($id_instruction !== null) {
4539 $ret = $this->update_date_envoi_signature($id_instruction, $date_en);
4540 // Si mise à jour réussie de la date d'envoi du courrier
4541 // pour signature par l'autorité compétente
4542 if($ret === true) {
4543 // Message de validation avec lien PDF
4544 $message_class = "valid";
4545 $message = '&bullet; '._("Veuillez cliquer sur le lien ci-dessous pour telecharger votre bordereau");
4546 $message .= " : <br/><br/>";
4547 $message .= "<a class='om-prev-icon pdf-16'";
4548 $message .= " id=\"generer_bordereau_envoi_maire\"";
4549 $message .= " title=\""._("Bordereau")."\"";
4550 $message .= " href='../scr/form.php?obj=instruction";
4551 $message .= "&action=200";
4552 $message .= "&idx=".$id_instruction."'";
4553 $message .= " target='_blank'>";
4554 $message .= _("Bordereau d'envoi au maire");
4555 $message .= "</a><br/><br/>";
4556 $message .= '&bullet; '._("Rappel des informations saisies")." :<br/><br/>";
4557 $message .= _("Code du courrier")." : ".$code_barres."<br/>";
4558 $message .= _("Date d'envoi du courrier pour signature par le maire")." : ".$date;
4559
4560 } else {
4561 // Message d'erreur
4562 $message_class = "error";
4563 $message = sprintf(_("Erreur lors de la mise a jour de l'evenement d'instruction correspondant au code barres %s."),
4564 $code_barres);
4565 }
4566 }
4567 else {
4568 $message_class = "error";
4569 $message = _("Le numero saisi ne correspond a aucun code-barres d'evenement d'instruction.");
4570 }
4571 }
4572 else {
4573 $message_class = "error";
4574 $message = _("La date est invalide.");
4575 }
4576 } else {
4577 $message_class = "error";
4578 $message = _("Tous les champs doivent etre remplis.");
4579 }
4580 }
4581
4582 /**
4583 * Affichage des messages et du formulaire
4584 */
4585
4586 // Affichage du message de validation ou d'erreur
4587 if (isset($message) && isset($message_class) && $message != "") {
4588 $this->f->displayMessage($message_class, $message);
4589 }
4590
4591 // Inclusion de la classe de gestion des formulaires
4592 require_once "../obj/om_formulaire.class.php";
4593 // Ouverture du formulaire
4594 $datasubmit = $this->getDataSubmit();
4595 echo "\n<!-- ########## START DBFORM ########## -->\n";
4596 echo "<form";
4597 echo " id=\"bordereau_envoi_maire\"";
4598 echo " method=\"post\"";
4599 echo " name=\"f1\"";
4600 echo " action=\"";
4601 echo $datasubmit;
4602 echo "\"";
4603 echo ">\n";
4604
4605 // Paramétrage des champs du formulaire
4606 $champs = array("code_barres","date");
4607
4608 // Création d'un nouvel objet de type formulaire
4609 $form = new formulaire(NULL, 0, 0, $champs);
4610
4611 $template_required_label = '%s *';
4612 // Parametrage du champ code_barres
4613 $form->setLib("code_barres", sprintf($template_required_label,_("Code du courrier")));
4614 $form->setType("code_barres", "text");
4615 $form->setVal("code_barres", $code_barres);
4616 $form->setTaille("code_barres", 20);
4617 $form->setMax("code_barres", 20);
4618 // Parametrage du champ date
4619 $form->setLib("date", sprintf($template_required_label,_("Date d'envoi du courrier pour signature par le maire")));
4620 $form->setType("date", "date") ;
4621 if (empty($date)) {
4622 $date = date('d/m/Y');
4623 }
4624 $form->setVal("date", $date);
4625 $form->setTaille("date", 10);
4626 $form->setMax("date", 10);
4627
4628 // Création du bloc regroupant les champs
4629 $form->setBloc('code_barres','D');
4630 $form->setBloc('date','F');
4631 // Affichage du formulaire
4632 $form->entete();
4633 $form->afficher($champs, 0, false, false);
4634 $form->enpied();
4635 // Affichage du bouton
4636 printf("\t<div class=\"formControls\">\n");
4637 //
4638 $this->f->layout->display_form_button(array("value" => _("Valider"), "name" => "validation"));
4639 printf("\t</div>\n");
4640 // Fermeture du formulaire
4641 printf("\t</form>\n");
4642 }
4643
4644 /**
4645 * VIEW - view_bordereau_envoi_maire.
4646 *
4647 * PDF de bordereau d'envoi au maire pour l'événement d'instruction instancié
4648 *
4649 * @return [void]
4650 */
4651 function view_generate_bordereau_envoi_maire() {
4652 // Vérification de l'accessibilité sur l'élément
4653 $this->checkAccessibility();
4654 // Récupération de la collectivité du dossier d'instruction
4655 $collectivite_di = $this->get_dossier_instruction_om_collectivite();
4656 // Récupération de ses paramètres
4657 $collectivite = $this->f->getCollectivite($collectivite_di);
4658 // Génération du PDF
4659 $result = $this->compute_pdf_output('etat', 'communaute_bordereau_envoi_maire', $collectivite, $this->getVal(($this->clePrimaire)));
4660 // Affichage du PDF
4661 $this->expose_pdf_output(
4662 $result['pdf_output'],
4663 $result['filename']
4664 );
4665 }
4666
4667 /**
4668 * Retourne l'événement d'instruction dont on donne le code-barres
4669 *
4670 * @param [string] $barcode numéro du code-barres
4671 * @return [mixed] ID de son instruction ou null si aucun code
4672 */
4673 function get_instruction_by_barcode($barcode) {
4674 // Begin
4675 $this->begin_treatment(__METHOD__);
4676 // Vérification de l'existence de l'événement d'instruction
4677 // pour le code-barres donné
4678 $sql = "SELECT instruction
4679 FROM ".DB_PREFIXE."instruction
4680 WHERE code_barres = '".$this->f->db->escapesimple($barcode)."'";
4681 $res = $this->f->db->getOne($sql);
4682 $this->f->addToLog(__METHOD__." : db->getOne(\"".$sql."\")", VERBOSE_MODE);
4683 $this->f->isDatabaseError($res);
4684 // Retourne résultat
4685 return $this->end_treatment(__METHOD__, $res);
4686 }
4687
4688 /**
4689 * Met à jour le champ date d'envoi signature
4690 * avec la date fournie et pour l'instruction donnée
4691 *
4692 * @param [string] $id ID de l'événement d'instruction
4693 * @param [string] $date date au format EN
4694 * @return [boolean] true si mise à jour avec succès
4695 */
4696 function update_date_envoi_signature($id, $date) {
4697 // Préparation du tableau
4698 $valF = array();
4699 $valF['date_envoi_signature'] = $date;
4700 // Begin
4701 $this->begin_treatment(__METHOD__);
4702 // Requête
4703 $res = $this->db->autoExecute(
4704 DB_PREFIXE.$this->table,
4705 $valF,
4706 DB_AUTOQUERY_UPDATE,
4707 $this->getCle($id)
4708 );
4709 // S'il y a eu une erreur
4710 if (database::isError($res, true)) {
4711 $this->end_treatment(__METHOD__, false);
4712 }
4713 //
4714 return $this->end_treatment(__METHOD__, true);
4715 }
4716
4717 /**
4718 * Méthode permettant de définir des valeurs à envoyer en base après
4719 * validation du formulaire d'ajout.
4720 * @param array $val tableau des valeurs retournées par le formulaire
4721 */
4722 function setValFAjout($val) {
4723 // Mise à jour du flag created_by_commune lors d'un changement de décision
4724 // par un utilisateur de commune sur un dossier instruit par la comcom
4725 if($this->f->isInstrCanChangeDecision($this->valF["dossier"])) {
4726 $this->valF['created_by_commune'] = true;
4727 }
4728 }
4729
4730 /**
4731 * Récupère l'instance du dossier d'instruction
4732 *
4733 * @param mixed Identifiant du dossier d'instruction
4734 *
4735 * @return object
4736 */
4737 function get_inst_dossier($dossier = null) {
4738 //
4739 return $this->get_inst_common("dossier", $dossier);
4740 }
4741
4742 /**
4743 * Logue l'action de l'instruction dans son DI
4744 *
4745 * @param string $id clé primaire de l'instruction
4746 * @param array $val valeurs de l'instruction
4747 * @return bool vrai si traitement effectué avec succès
4748 */
4749 private function add_log_to_dossier($id, $val) {
4750 $maj = $this->getParameter("maj");
4751 // Action = Trace par défaut
4752 $action = $this->get_backtrace();
4753 // Action = Identifant de l'action si contexte connu
4754 if (empty($maj) === false
4755 || (empty($maj) === true && $maj === 0)) {
4756 $action = $this->get_action_param($maj, 'identifier');
4757 if ($action === 'modifier_suivi') {
4758 $action = "modifier (via l'action suivi des dates)";
4759 }
4760 }
4761 // Création du log
4762 $log = array(
4763 'date' => date('Y-m-d H:i:s'),
4764 'user' => $_SESSION['login'],
4765 'action' => $action,
4766 'values' => array(
4767 'date_evenement' => $this->dateDB($val['date_evenement']),
4768 'date_retour_rar' => $this->dateDB($val['date_retour_rar']),
4769 'date_retour_signature' => $this->dateDB($val['date_retour_signature']),
4770 'evenement' => $val['evenement'],
4771 'action' => $val['action'],
4772 'instruction' => $id,
4773 'etat' => $val['etat'],
4774 ),
4775 );
4776 // Ajout du log
4777 $di = $this->get_inst_common("dossier", $val['dossier']);
4778 $ret = $di->add_log_instructions($log);
4779 if ($ret === false) {
4780 $this->correct = false;
4781 $this->msg = '';
4782 $this->addToMessage($di->msg);
4783 }
4784 return $ret;
4785 }
4786
4787 /**
4788 * Retourne le contexte de déboguage formaté en HTML
4789 *
4790 * @return string une ligne par trace
4791 */
4792 private function get_backtrace() {
4793 $trace = debug_backtrace();
4794 $backtrace = '';
4795 $i = 1;
4796 foreach ($trace as $key => $value) {
4797 $func = $trace[$key]['function'];
4798 // On ne s'autolog pas
4799 if ($func === 'get_backtrace'
4800 || $func === 'add_log_to_dossier') {
4801 continue;
4802 }
4803 $backtrace .= $i.') ';
4804 // Si dans une classe
4805 if (isset($trace[$key]['class']) === true
4806 && empty($trace[$key]['class']) === false) {
4807 $backtrace .= $trace[$key]['class'].'->'.$func;
4808 }
4809 // Si procédural
4810 else {
4811 $file = $trace[$key]['file'];
4812 $line = $trace[$key]['line'];
4813 $truncated_file = $this->get_relative_path($file);
4814 if ($truncated_file !== false) {
4815 $file = $truncated_file;
4816 }
4817 $backtrace .= $func.' IN<br/>&nbsp;&nbsp;&nbsp;&nbsp; '.$file.':'.$line;
4818 }
4819 $backtrace .= '<br/>';
4820 $i++;
4821 }
4822 return $backtrace;
4823 }
4824
4825 /**
4826 * Pour un path absolu donné, retourne le relatif à la racine de l'application
4827 *
4828 * @param string $path chemin absolu
4829 * @return mixed false si échec sinon chemin relatif
4830 */
4831 private function get_relative_path($absolute) {
4832 if ($this->get_path_app() === false) {
4833 return false;
4834 }
4835 $path_app = $this->get_path_app();
4836 return str_replace($path_app, '', $absolute);
4837 }
4838
4839 /**
4840 * Retourne le path absolu de la racine de l'application
4841 *
4842 * @return mixed false si échec sinon chemin absolu
4843 */
4844 private function get_path_app() {
4845 $match = array();
4846 preg_match( '/(.*)\/[a-zA-Z0-9]+\/\.\.\/core\/$/', PATH_OPENMAIRIE, $match);
4847 // On vérifie qu'il n'y a pas d'erreur
4848 if (isset($match[1]) === false) {
4849 return false;
4850 }
4851 return $match[1];
4852 }
4853 }// fin classe
4854
4855 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26