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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26