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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3484 - (show annotations)
Wed May 20 14:48:58 2015 UTC (9 years, 8 months ago) by vpihour
File size: 180334 byte(s)
Lors de la suppression des consultations, instructions et commissions, le document finalisé n'était pas supprimé. C'est corrigé.

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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26