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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3892 - (show annotations)
Fri Apr 8 13:48:30 2016 UTC (8 years, 7 months ago) by fmichon
File size: 211020 byte(s)
Merge de la branche de correctif 'merge_3.14.x' :
* Correction - Les métadonnées des fichiers enregistrés sur le filestorage sont
  désormais correctes.
* Correction - Lorsque l'avis d'une consultation est automatiquement passé à
  tacite, le champ "lu" est désormais positionné à non lu. Cela permet de
  l'afficher dans le widget "consultation" du tableau de bord de l'instructeur.
* Correction - L'aide à la saisie sur le formulaire des pétitionnaires et des
  architectes permettant de chercher dans les "fréquents" prends en compte
  désormais le caractère '*' dans la chaîne recherchée.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26