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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4081 - (show annotations)
Tue May 10 09:57:34 2016 UTC (8 years, 6 months ago) by jymadier
File size: 213325 byte(s)
Error occurred while calculating annotation data.
Merge de la branche framework-ticket-6624-form-soumission-multiple

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26