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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26