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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9245 - (hide annotations)
Fri Apr 3 09:21:03 2020 UTC (4 years, 9 months ago) by softime
File size: 158726 byte(s)
* Merge de la branche d'intégration 4.13.0-develop dans le trunk

1 mbroquet 3730 <?php
2     /**
3     * DBFORM - 'demande' - Surcharge gen.
4     *
5     * Ce script permet de définir la classe 'demande'.
6     *
7     * @package openads
8 nhaye 5254 * @version SVN : $Id$
9 mbroquet 3730 */
10    
11     require_once "../gen/obj/demande.class.php";
12 nhaye 5254
13 mbroquet 3730 require_once "../obj/geoads.class.php";
14    
15     /**
16     * Définition de la classe 'demande'.
17     *
18     * Cette classe permet d'interfacer la demande, c'est-à-dire l'enregistrement
19     * représentant une demande faite par un pétitionnaire pour un nouveau dossier
20     * ou pour un dossier existant.
21     */
22     class demande extends demande_gen {
23    
24 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
25     "delegataire" => array(),
26     "petitionnaire" => array(),
27     "plaignant_principal" => array(),
28     "plaignant" => array(),
29     "contrevenant_principal" => array(),
30     "contrevenant" => array(),
31     "requerant_principal" => array(),
32     "requerant" => array(),
33     "avocat_principal" => array(),
34     "avocat" => array(),
35 softime 7067 "bailleur_principal" => array(),
36     "bailleur" => array(),
37 softime 6565 );
38     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
39     "delegataire" => array(),
40     "petitionnaire" => array(),
41     "plaignant_principal" => array(),
42     "plaignant" => array(),
43     "contrevenant_principal" => array(),
44     "contrevenant" => array(),
45     "requerant_principal" => array(),
46     "requerant" => array(),
47     "avocat_principal" => array(),
48     "avocat" => array(),
49 softime 7067 "bailleur_principal" => array(),
50     "bailleur" => array(),
51 softime 6565 );
52 mbroquet 3730
53     var $autreDossierEnCour;
54    
55     var $cerfa = null;
56    
57     /**
58     * Instance du paramétrage de la taxe d'aménagement
59     *
60     * @var null
61     */
62     var $inst_taxe_amenagement = null;
63    
64     /**
65     * Instance de la classe dossier_autorisation.
66     *
67     * @var mixed (resource | null)
68     */
69     var $inst_dossier_autorisation = null;
70    
71     /**
72 softime 6929 * Instance de la classe cerfa.
73     *
74     * @var mixed (resource | null)
75     */
76     var $inst_cerfa = null;
77    
78     /**
79 softime 7996 *
80     * @return string
81     */
82     function get_default_libelle() {
83     return $this->get_dossier_libelle($this->getVal('dossier_instruction'));
84     }
85    
86     /**
87 mbroquet 3730 * Définition des actions disponibles sur la classe.
88     *
89     * @return void
90     */
91     function init_class_actions() {
92    
93     // On récupère les actions génériques définies dans la méthode
94     // d'initialisation de la classe parente
95     parent::init_class_actions();
96    
97 softime 6929 // ACTION - 003 - consulter
98     //
99     $this->class_actions[3]["condition"] = "is_user_from_allowed_collectivite";
100    
101 mbroquet 3730 // ACTION - 100 - pdfetat
102     // Permet de visualiser le récépissé de la demande
103     $this->class_actions[100] = array(
104     "identifier" => "pdfetat",
105     "portlet" => array(
106     "type" => "action-blank",
107     "libelle" => _("Editer le recepisse PDF"),
108     "order" => 100,
109     "class" => "pdf-16",
110     ),
111     "view" => "view_pdfetat",
112     "permission_suffix" => "consulter",
113     );
114    
115     // ACTION - 110 - affichage_reglementaire_registre
116     // Affiche un formulaire pour visualiser le registre réglementaire
117     $this->class_actions[110] = array(
118     "identifier" => "affichage_reglementaire_registre",
119     "view" => "view_reglementaire_registre",
120     "permission_suffix" => "consulter",
121     );
122    
123 jymadier 4588 // ACTION - 111 - generate_affichage_reglementaire_registre
124     // Génère et affiche le PDF registre d'affichage réglementaire
125     $this->class_actions[111] = array(
126     "identifier" => "generate_affichage_reglementaire_registre",
127     "view" => "view_generate_affichage_reglementaire_registre",
128     "permission_suffix" => "consulter",
129     );
130    
131 mbroquet 3730 // ACTION - 120 - affichage_reglementaire_attestation
132     // Affiche un formulaire pour visualiser l'attestation réglementaire
133     $this->class_actions[120] = array(
134     "identifier" => "affichage_reglementaire_attestation",
135     "view" => "view_reglementaire_attestation",
136     "permission_suffix" => "consulter",
137     );
138    
139     // ACTION - 130 - Récupération de l'adresse
140     $this->class_actions[130] = array(
141     "identifier" => "get_adresse",
142     "view" => "view_get_adresse_by_cadastre",
143     "permission_suffix" => "recuperer_adresse",
144     );
145     }
146    
147 softime 8989 /**
148     * Clause select pour la requête de sélection des données de l'enregistrement.
149     *
150     * @return array
151     */
152     function get_var_sql_forminc__champs() {
153     return array(
154     "demande",
155     "demande.om_collectivite",
156     "dossier_autorisation_type_detaille",
157     "demande.depot_electronique",
158     "demande_type",
159     "dossier_instruction",
160     "demande.dossier_autorisation",
161     "dossier.etat as \"etat\"",
162     "demande.autorisation_contestee",
163     "demande.date_demande",
164     "demande.parcelle_temporaire",
165     "demande.terrain_references_cadastrales",
166     "demande.terrain_adresse_voie_numero",
167     "demande.terrain_adresse_voie",
168     "demande.terrain_adresse_lieu_dit",
169     "demande.terrain_adresse_localite",
170     "demande.terrain_adresse_code_postal",
171     "demande.terrain_adresse_bp",
172     "demande.terrain_adresse_cedex",
173     "demande.terrain_superficie",
174     "instruction_recepisse",
175     "arrondissement",
176     );
177     }
178 softime 6929
179 mbroquet 3730 /**
180 softime 8989 * Clause from pour la requête de sélection des données de l'enregistrement.
181     *
182     * @return string
183     */
184     function get_var_sql_forminc__tableSelect() {
185     return sprintf(
186     '%1$s%2$s
187     LEFT JOIN %1$sdossier
188     ON demande.dossier_instruction = dossier.dossier',
189     DB_PREFIXE,
190     $this->table
191     );
192     }
193    
194     /**
195 softime 6929 * CONDITION - is_user_from_allowed_collectivite.
196 mbroquet 3730 *
197 softime 6929 * Cette condition permet de vérifier si l'utilisateur connecté appartient
198     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
199     * la collectivité de l'enregistrement sur lequel on se trouve.
200     *
201     * @return boolean
202 mbroquet 3730 */
203 softime 6929 public function is_user_from_allowed_collectivite() {
204    
205     // Si l'utilisateur est de niveau 2
206     if ($this->f->isCollectiviteMono() === false) {
207     // Alors l'utilisateur fait partie d'une collectivité autorisée
208     return true;
209     }
210    
211     // L'utilisateur est donc de niveau 1
212     // On vérifie donc si la collectivité de l'utilisateur est la même
213     // que la collectivité de l'élément sur lequel on se trouve
214     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
215     // Alors l'utilisateur fait partie d'une collectivité autorisée
216     return true;
217     }
218    
219     // L'utilisateur ne fait pas partie d'une collectivité autorisée
220     return false;
221     }
222    
223    
224     /**
225     *
226     */
227 mbroquet 3730 function get_inst_dossier_instruction($dossier_instruction = null) {
228     //
229     return $this->get_inst_common(
230     "dossier_instruction",
231     $dossier_instruction,
232     "dossier"
233     );
234     }
235    
236     /**
237     * VIEW - view_pdfetat
238     *
239     * Génère un récépissé PDF de la demande.
240     *
241     * @return void
242     */
243     function view_pdfetat() {
244     // Identifiant de la demande
245     $idx = $this->getVal($this->clePrimaire);
246    
247     // Requête qui récupère le type de lettre type
248     $sql = " SELECT instruction.instruction, instruction.lettretype,";
249     $sql .= " demande.om_collectivite, demande.dossier_instruction";
250     $sql .= " FROM ".DB_PREFIXE."demande ";
251     $sql .= " LEFT JOIN ".DB_PREFIXE."instruction ";
252     $sql .= " ON demande.instruction_recepisse=instruction.instruction ";
253     $sql .= " WHERE demande.demande=".intval($idx);
254     $res = $this->f->db->query($sql);
255     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
256     $this->f->isDatabaseError($res);
257     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
258    
259     // Si la requête nous retourne un résultat
260     if (isset($row["instruction"])
261     && !empty($row["instruction"])
262     && isset($row["lettretype"])
263     && !empty($row["lettretype"])) {
264    
265     // récupération des paramètres de la collectivité
266     $coll_param = $this->f->getCollectivite($row["om_collectivite"]);
267    
268     // Génération du récépissé
269     $pdf_output = $this->compute_pdf_output(
270     "lettretype",
271     $row["lettretype"],
272     $coll_param,
273     $row["instruction"]
274     );
275     // Mise à disposition du récépissé
276     $this->expose_pdf_output(
277     $pdf_output['pdf_output'],
278     "recepisse_depot_".$row["dossier_instruction"].".pdf"
279     );
280     } else {
281     // On indique à l'utilisateur que le récépissé n'existe pas
282     $this->f->displayMessage("error", _("Le recepisse demande n'existe pas."));
283     }
284     }
285    
286     /**
287     * VIEW - view_reglementaire_registre
288     *
289     * Affiche un formulaire pour génèrer le registre d'affichage réglementaire.
290     *
291     * @return void
292     */
293     function view_reglementaire_registre() {
294    
295     // Vérification de l'accessibilité sur l'élément
296     $this->checkAccessibility();
297    
298     /**
299     * Gestion des erreurs : vérification du paramétrage
300     */
301 softime 8989 $error = false;
302 mbroquet 3730 // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
303     $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
304     // Si le paramétrage est vide ou pas numérique
305     if ($aff_obli == "" or !is_numeric($aff_obli)) {
306 softime 8989 $error = true;
307 mbroquet 3730 } else {
308     // Vérification de l'existance de l'événement
309     $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
310     $res_verif = $this->f->db->getOne($sql_verif);
311     $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
312     $this->f->isDatabaseError($res_verif);
313     // Si pas de correspondance d'événement dans la base
314     if ($res_verif === '0') {
315 softime 8989 $error = true;
316 mbroquet 3730 }
317     }
318     // Affichage d'un message si en erreur
319 softime 8989 if ($error == true) {
320     $error_msg = sprintf(
321     "%s %s",
322     sprintf(
323     __("Erreur de paramétrage, le paramètre %s n'est pas renseigné ou sa valeur n'est pas compatible."),
324     "<b>id_affichage_obligatoire</b>"
325     ),
326     __("Veuillez contacter votre administrateur.")
327     );
328     $this->f->displayMessage("error", $error_msg);
329 mbroquet 3730 return;
330     }
331    
332     // Si un affichage réglementaire des dossiers est demandé (appel en ajax)
333 softime 8989 if ($this->f->get_submitted_post_value('submit') !== null) {
334 mbroquet 3730 // Désactivation des logs car appel en ajax
335     $this->f->disableLog();
336     // Récupère la collectivité de l'utilisateur
337     $this->f->getCollectivite();
338     // Récupération de la liste des dossiers d'instruction dont l'état est
339     // "encours" et le groupe est 'ADS'. Une jointure avec la table instruction
340     // permet de savoir si le dossier a déjà été affiché ou non en récupérant
341     // l'id de l'événement qui représente l'attestion de l'affichage
342     // réglementaire dans le paramétrage.
343     $sql = "SELECT dossier.dossier, instruction.instruction, dossier.om_collectivite
344     FROM
345     ".DB_PREFIXE."dossier
346     LEFT JOIN ".DB_PREFIXE."instruction
347     ON dossier.dossier=instruction.dossier
348     AND instruction.evenement=".$aff_obli."
349     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
350     ON dossier.dossier_autorisation =
351     dossier_autorisation.dossier_autorisation
352     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
353     ON dossier_autorisation.dossier_autorisation_type_detaille =
354     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
355     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
356     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
357     dossier_autorisation_type.dossier_autorisation_type
358     LEFT JOIN ".DB_PREFIXE."groupe
359     ON dossier_autorisation_type.groupe = groupe.groupe
360     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
361     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
362     WHERE
363     (select
364     e.statut
365     from
366     ".DB_PREFIXE."etat e
367     where
368     e.etat = dossier.etat
369     ) = 'encours'
370     AND groupe.code = 'ADS'
371     AND LOWER(dossier_instruction_type.code) IN ('p','m','t')
372     AND dossier.om_collectivite = ".$this->f->getParameter('om_collectivite_idx');
373     $res = $this->f->db->query($sql);
374     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
375 softime 8989 if ($this->f->isDatabaseError($res, true) === true) {
376     $error_msg = sprintf(
377     "%s %s",
378     __("Impossible de récupérer les dossiers d'instruction en cours."),
379     __("Veuillez contacter votre administrateur.")
380     );
381     $this->f->displayMessage("error", $error_msg);
382     $this->f->addToLog(__METHOD__."(): ".$error_msg, DEBUG_MODE);
383     return;
384     }
385 mbroquet 3730 // Boucle sur les dossiers
386     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
387     // Si aucune instruction n'a d'événement de type "affichage_obligatoire"
388     // on créé une nouvelle instruction avec cet événement.
389     if ($row["instruction"] == "") {
390     // Instanciation d'instruction pour ajout
391 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
392     "obj" => "instruction",
393     "idx" => "]",
394     ));
395 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
396     foreach($instr->champs as $champ) {
397     $valF[$champ] = "";
398     }
399     $valF["destinataire"] = $row['dossier'];
400     $valF["date_evenement"] = date("d/m/Y");
401     $valF["evenement"] = $aff_obli;
402     $valF["dossier"] = $row['dossier'];
403    
404     // Définition des valeurs de la nouvelle instruction
405     $instr->valF = array();
406     // Insertion dans la base
407 softime 8989 $res_ajout = $instr->ajouter($valF);
408     if ($res_ajout === false) {
409     $error_msg = sprintf(
410     "%s %s",
411     __("Erreur lors de l'ajout de l'instruction d'affichage obligatoire."),
412     __("Veuillez contacter votre administrateur.")
413     );
414     $this->f->displayMessage("error", $error_msg);
415     $this->f->addToLog(__METHOD__."(): ".$error_msg, DEBUG_MODE);
416     return;
417     }
418    
419 mbroquet 3730 //Finalisation du document
420     $_GET['obj']='instruction';
421     $_GET['idx']=$instr->valF[$instr->clePrimaire];
422 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
423     "obj" => "instruction",
424     "idx" => $_GET['idx'],
425     ));
426 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
427     $instr->setParameter('maj',100);
428 softime 8989 $finalise_instr = $instr->finalize();
429     if ($finalise_instr === false) {
430     $error_msg = sprintf(
431     "%s %s",
432     __("Erreur lors de la finalisation de l'instruction d'affichage obligatoire."),
433     __("Veuillez contacter votre administrateur.")
434     );
435     $this->f->displayMessage("error", $error_msg);
436     $this->f->addToLog(__METHOD__."(): ".$error_msg, DEBUG_MODE);
437     return;
438     }
439 mbroquet 3730 }
440     }
441 softime 8989 //
442     $valid_msg = sprintf(
443     "%s<br/><br/>%s",
444     __("Traitement terminé. Le registre a été généré."),
445     sprintf(
446     '<a href="%1$s&obj=demande_affichage_reglementaire_registre&action=111&idx=0" id="%2$s" target="_blank"><span class="om-icon om-icon-16 om-icon-fix reqmo-16" title="%3$s"></span> %3$s</a>',
447     OM_ROUTE_FORM,
448     "registre-form-download",
449     __("Télécharger le registre")
450     )
451     );
452     $this->f->displayMessage("valid", $valid_msg);
453    
454 mbroquet 3730 } else { // Sinon affichage standard
455     // Affichage de la description de l'écran
456 softime 8989 $description = sprintf(
457     '<div id="registre-form-fonctionnement" class="registre-form-bloc"><h3>%s</h3><p>%s :</p><ul><li>%s</li><li>%s</li><li>%s</li></ul><br/><p>%s :</p><ul><li>%s</li><li>%s</li></ul></div>',
458     __("Fonctionnement"),
459     __("Le traitement de génération du registre d'affichage réglementaire va"),
460     __("générer le registre que vous devez imprimer et afficher en mairie"),
461     __("créer une instruction d'<i>attestation d'affichage suite au dépôt</i> sur chaque dossier d'instruction en cours"),
462     __("mettre à jour la <i>date d'affichage</i> de chaque dossier d'instruction en cours"),
463     __("Nota bene"),
464     __("la <i>date d'affichage</i> est mise à jour uniquement sur les dossiers d'instruction pour lesquels elle n'avait pas été renseignée"),
465     __("l'instruction d'<i>attestation d'affichage suite au dépôt</i> est générée uniquement sur les dossiers d'instruction pour lesquels elle n'existe pas déjà")
466     );
467     $this->f->displayDescription($description);
468 mbroquet 3730 // Ouverture du formulaire
469     echo "\t<form";
470     echo " method=\"post\"";
471     echo " id=\"affichage_reglementaire_registre_form\"";
472     echo " action=\"#\"";
473     echo ">\n";
474     //
475     echo "<div id=\"msg\"></div>";
476     // Affichage du bouton
477     echo "\t<div class=\"formControls\">\n";
478 softime 8989 printf(
479     "<input id=\"registre-form-submit\" class=\"class=\"om-button\" type=\"button\" value=\"%s\" onClick=\"registre_form_confirmation_action('form', this, '%s')\" data-href=\"%s&obj=demande_affichage_reglementaire_registre&action=110&idx=0\" />",
480     __("Déclencher le traitement"),
481     addslashes(sprintf(
482     "<b>%s</b><br/><br/>%s",
483     __("Important à lire avant de confirmer le message de validation."),
484     __("Ce traitement n'est pas réversible.")
485     )),
486     OM_ROUTE_FORM
487     );
488 mbroquet 3730 echo "\t</div>\n";
489     // Fermeture du fomulaire
490     echo "\t</form>\n";
491     }
492     }
493    
494     /**
495 jymadier 4588 * VIEW - view_generate_affichage_reglementaire_registre
496     *
497     * Génère et affiche l'édition PDF registre d'affichage
498     * réglementaire.
499     *
500     * @return void
501     */
502     function view_generate_affichage_reglementaire_registre() {
503    
504     // Vérification de l'accessibilité sur l'élément
505     $this->checkAccessibility();
506     // Génération du PDF
507     $result = $this->compute_pdf_output('etat', 'registre_dossiers_affichage_reglementaire', null, $this->getVal($this->clePrimaire));
508     // Affichage du PDF
509     $this->expose_pdf_output(
510     $result['pdf_output'],
511     $result['filename']
512     );
513     }
514    
515     /**
516 mbroquet 3730 * VIEW - view_reglementaire_attestation
517     *
518     * Affiche un formulaire pour génèrer l'attestation d'affichage
519     * réglementaire.
520     *
521     * @return void
522     */
523     function view_reglementaire_attestation() {
524    
525     // Vérification de l'accessibilité sur l'élément
526     $this->checkAccessibility();
527    
528     /**
529     * Gestion des erreurs : vérification du paramétrage
530     */
531     $erreur = false;
532     // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
533     $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
534     // Si le paramétrage est vide ou pas numérique
535     if ($aff_obli == "" or !is_numeric($aff_obli)) {
536     $erreur = true;
537     } else {
538     // Vérification de l'existance de l'événement
539     $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
540     $res_verif = $this->f->db->getOne($sql_verif);
541     $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
542     $this->f->isDatabaseError($res_verif);
543     // Si pas de correspondance d'événement dans la base
544     if ($res_verif === '0') {
545     $erreur = true;
546     }
547     }
548     // Affichage d'un message si en erreur
549     if ($erreur == true) {
550     // Affichage de l'erreur et sortie de la vue
551     $this->f->displayMessage("error", _("Erreur de parametrage. Contactez votre administrateur."));
552     return;
553     }
554    
555     /**
556     * Validation du formulaire
557     */
558     // Si le formulaire a été validé
559     if ($this->f->get_submitted_post_value("dossier") !== null) {
560     // Si une valeur a été saisie dans le champs dossier
561     if ($this->f->get_submitted_post_value("dossier") != "") {
562 jymadier 4102 // On récupère la valeur postée :
563     // - on l'échappe pour la base de données
564     // - on supprime les espaces pour faciliter la saisie
565     // - on le positionne en minuscule pour être sûr de la correspondance
566     $posted_dossier = $this->f->db->escapesimple(strtolower(str_replace(' ', '', $this->f->get_submitted_post_value("dossier"))));
567 mbroquet 3730 // Récupération des informations sur le dossier et l'étape d'instruction
568     $sql = "SELECT
569     dossier.dossier, instruction.instruction, instruction.lettretype,
570     instruction.om_final_instruction, instruction.om_fichier_instruction
571     FROM
572     ".DB_PREFIXE."dossier
573     LEFT JOIN ".DB_PREFIXE."instruction
574     ON dossier.dossier=instruction.dossier
575     AND instruction.evenement=".$this->f->getParameter('id_affichage_obligatoire')."
576     WHERE
577 jymadier 4102 LOWER(dossier.dossier)='".$posted_dossier."' ";
578 mbroquet 3730 $res = $this->f->db->query($sql);
579     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
580     $this->f->isDatabaseError($res);
581     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
582     // Si il y a un dossier et une étape d'instrcution correspondante à
583 jymadier 4588 // l'événement affichage obligatoire et que l'instruction est bien finalisée
584     if ($res->numrows() != 0
585     && $row["instruction"] != ""
586     && isset($row['om_fichier_instruction'])
587     && isset($row['om_final_instruction'])
588     && $row['om_fichier_instruction'] != ''
589     && $row['om_final_instruction'] == 't') {
590     //
591 mbroquet 3730 $message_class = "valid";
592     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre attestation d'affichage");
593     $message .= " : <br/><br/>";
594     $message .= "<a class='om-prev-icon pdf-16'";
595     $message .= " title=\""._("Attestation d'affichage")."\"";
596 softime 7996 $message .= " href='../app/index.php?module=form&snippet=file&obj=instruction&amp;"
597 mbroquet 3730 ."champ=om_fichier_instruction&amp;id=".$row['instruction']."'";
598     $message .= " target='_blank'>";
599     $message .= _("Attestation d'affichage");
600     $message .= "</a>";
601 jymadier 4588 } elseif ($res->numrows() != 0
602     && $row["instruction"] != ""
603     && isset($row['om_fichier_instruction'])
604     && isset($row['om_final_instruction'])
605     && $row['om_fichier_instruction'] != ''
606     && $row['om_final_instruction'] == 'f') {
607     // Si l'instruction n'est pas finalisée on indique à l'utilisateur que l'édition n'est pas possible
608     $message_class = "error";
609     $message = _("L'attestation de ce dossier existe mais n'est pas finalisée.");
610 mbroquet 3730 } elseif ($res->numrows() != 0 && $row["instruction"] == "") {
611     // Si aucune instruction avec l'événement affichage obligatoire n'a
612     // été trouvée
613     $message_class = "error";
614     $message = _("Ce dossier n'a jamais ete affiche.");
615     } else {
616     // Si aucun dossier n'est trouvé
617     $message_class = "error";
618     $message = _("Ce dossier n'existe pas.");
619     }
620     } else {
621     // Si aucune valeur n'a été saisie dans le champs dossier
622     $message_class = "error";
623     $message = _("Veuiller saisir un No de dossier.");
624     }
625     }
626    
627     /**
628     * Affichage des messages et du formulaire
629     */
630     // Affichage de la description de l'écran
631     $this->f->displayDescription(_("Cet ecran permet d'imprimer l'attestation d'affichage ".
632     "reglementaire d'un dossier d'instruction. Il suffit de ".
633     "saisir le numero du dossier d'instruction puis de ".
634     "valider pour obtenir le lien de telechargement de ".
635     "l'attestation permettant de l'imprimer."));
636     // Affichage du message de validation ou d'erreur
637     if (isset($message) && isset($message_class) && $message != "") {
638     $this->f->displayMessage($message_class, $message);
639     }
640     // Ouverture du formulaire
641     echo "\t<form";
642     echo " method=\"post\"";
643     echo " id=\"affichage_reglementaire_attestation_form\"";
644     echo " action=\"\"";
645     echo ">\n";
646     // Paramétrage des champs du formulaire
647     $champs = array("dossier");
648     // Création d'un nouvel objet de type formulaire
649 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
650     "validation" => 0,
651     "maj" => 0,
652     "champs" => $champs,
653     ));
654 mbroquet 3730 // Paramétrage des champs du formulaire
655     $form->setLib("dossier", _("No de dossier"));
656     $form->setType("dossier", "text");
657     $form->setTaille("dossier", 25);
658     $form->setMax("dossier", 25);
659     // Affichage du formulaire
660     $form->entete();
661     $form->afficher($champs, 0, false, false);
662     $form->enpied();
663     // Affichage du bouton
664     echo "\t<div class=\"formControls\">\n";
665     $this->f->layout->display_form_button(array("value" => _("Valider")));
666     echo "\t</div>\n";
667     // Fermeture du fomulaire
668     echo "\t</form>\n";
669     }
670    
671    
672     /**
673     * VIEW - view_get_adresse_by_cadastre
674     *
675     * Permet de récupérer l'adresse de la première référence cadastrale via le sig.
676     *
677     * @return void
678     */
679     public function view_get_adresse_by_cadastre() {
680     //
681     $this->f->disableLog();
682     $refcads = "";
683     // Récupération des références cadastrales passées en paramètre
684     if ($this->f->get_submitted_post_value("refcad") != null) {
685     $refcads = $this->f->get_submitted_post_value("refcad");
686     }
687     // Si ce n'est pas un tableau de références
688     if (is_array($refcads) === false){
689     printf(json_encode(_("Aucune reference cadastrale fournie")));
690     return;
691     }
692     // TODO : Ajouter les tests
693     // XXX
694     // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
695     // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
696     // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
697     $collectivite_idx = $_SESSION["collectivite"];
698     if ($this->f->get_submitted_post_value("om_collectivite") != null) {
699     $collectivite_idx = $this->f->get_submitted_post_value("om_collectivite");
700     }
701     $collectivite_param = $this->f->getCollectivite($collectivite_idx);
702     // Si le paramètre option_sig de la commune n'a pas la valeur 'sig_externe', on
703     // affiche une erreur.
704     if ($collectivite_param['option_sig'] != 'sig_externe') {
705     printf(json_encode(_("La localisation SIG n'est pas activee pour cette commune.")));
706     return;
707     }
708    
709     $wParcelle = "";
710     //Formatage des références cadastrales pour l'envoi
711     foreach ($refcads as $refcad) {
712     //Pour chaque ligne
713     foreach ($refcad as $value) {
714     //On ajoute les données dans le tableau que si quartier + section + parcelle
715     //a été fourni
716     if ($value["quartier"] !== "" && $value["section"] !== "" &&
717     $value["parcelle"] !== "") {
718     //
719     $wParcelle .= $value["quartier"].$value["section"].$value["parcelle"];
720     //Si on a des délimiteurs
721     if (isset($value["delimit"][0])) {
722    
723     //Pour chaque délimiteur
724     for($i = 0; $i < count($value["delimit"][0]); $i++) {
725     //
726     $wParcelle .= $value["delimit"][0][$i];
727     }
728     }
729     // Séparateur
730     $wParcelle .= ";";
731     }
732     }
733     }
734    
735     try {
736     $geoads = new geoads($collectivite_param);
737     } catch (geoads_exception $e) {
738     printf(json_encode($e->getMessage()));
739     return;
740     }
741     // XXX
742     // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
743     // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
744     // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
745     // Formatage des parcelles pour l'envoi au webservice
746     $liste_parcelles = $this->f->parseParcelles($wParcelle, $collectivite_idx);
747     try {
748     //On lance la requête SOAP
749     $execute = $geoads->verif_parcelle($liste_parcelles);
750     } catch (geoads_exception $e) {
751     printf(json_encode($e->getMessage()));
752     return;
753     }
754    
755     // Vérifie l'existence de la 1ere parcelles
756     if (!isset($execute[0]) or $execute[0]['existe'] != true) {
757     printf(json_encode(_("Aucune adresse ne correspond a la reference cadastrale fournie")));
758     return;
759     }
760    
761     $response['return_addr'] = array();
762     // Si plusieurs parcelles sont retournées on n'utilise que la première pour
763     // récupérer l'adresse
764     if (isset($execute[0]) && is_array($execute[0])) {
765     $adresse_ws = $execute[0];
766     }
767     //Récupération du nom de la collectivité
768     $sql = "SELECT UPPER(
769     valeur)
770     FROM
771     ".DB_PREFIXE."om_parametre
772     WHERE
773     libelle = 'ville' and om_collectivite = ".$collectivite_idx;
774     $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
775    
776     $ville = $this->f->db->getOne($sql);
777     $this->f->isDatabaseError($ville);
778    
779     $response["return_addr"]["localite"] = $ville;
780    
781     // Formate le code postal
782     $code_postal = '';
783     // On vérifie que l'arrondissement retourné est bien une valeur
784     // cohérente avant d'essayer de récupérer son code postal en base de
785     // données
786     if (isset($adresse_ws["adresse"]['arrondissement']) === true
787     && $adresse_ws["adresse"]['arrondissement'] != ""
788     && is_numeric($adresse_ws["adresse"]['arrondissement']) === true) {
789     // Requête sql
790     $sqlDonneesArrdt = "SELECT code_postal
791     FROM ".DB_PREFIXE."arrondissement
792     WHERE arrondissement = ".$adresse_ws["adresse"]['arrondissement'];
793     $code_postal = $this->f->db->getOne($sqlDonneesArrdt);
794     $this->f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesArrdt."\")", VERBOSE_MODE);
795     $this->f->isDatabaseError($code_postal);
796     } else {
797     //Récupération du code postal
798     $sql = "SELECT
799     valeur
800     FROM
801     ".DB_PREFIXE."om_parametre
802     WHERE
803     libelle = 'cp' and om_collectivite = ".$collectivite_idx;
804     $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
805    
806     $code_postal = $this->f->db->getOne($sql);
807     $this->f->isDatabaseError($code_postal);
808     }
809    
810     $response['return_addr']['code_postal'] = $code_postal;
811    
812     // On coupe les chaînes retournées afin que leurs tailles
813     // correspondent aux tailles des champs en base de données
814     if ($adresse_ws["adresse"]['numero_voie'] !== '') {
815     $response['return_addr']['numero_voie'] = substr($adresse_ws["adresse"]['numero_voie'], 0, 20);
816     }
817 softime 7685 // cas où le type de voie n'est pas fourni par le SIG
818     if ($adresse_ws["adresse"]['nom_voie'] !== '') {
819 mbroquet 3730 $response['return_addr']['nom_voie'] = substr(
820 softime 7685 $adresse_ws["adresse"]['nom_voie'],
821     0,
822     30
823     );
824     }
825     // cas où le type de voie est fourni
826     if (isset($adresse_ws["adresse"]['type_voie'])
827     AND $adresse_ws["adresse"]['type_voie'] !== ''
828     AND $adresse_ws["adresse"]['nom_voie'] !== '') {
829     $response['return_addr']['nom_voie'] = substr(
830 mbroquet 3730 $adresse_ws["adresse"]['type_voie']." ".$adresse_ws["adresse"]['nom_voie'],
831     0,
832     30
833     );
834     }
835     //
836     printf(json_encode($response));
837     return;
838     }
839    
840    
841 softime 6929 function setValF($val = array()) {
842 mbroquet 3730 parent::setValF($val);
843     // Récupération des id demandeurs postés
844     $this->getPostedValues();
845     //$this->valIdDemandeur=$this->postedIdDemandeur;
846 softime 6565
847     // On retraite le texte saisie pour jointure en BDD.
848     // Traitement identique à celui effectué en JavaScript
849     // dans la fonction lookingForAutorisationContestee().
850     if ($this->valF['autorisation_contestee'] !== NULL) {
851     $val = trim($this->valF['autorisation_contestee']);
852     $this->valF['autorisation_contestee'] = preg_replace(
853     '/\s+/',
854     '',
855     $val
856     );
857     }
858    
859 mbroquet 3730 }
860    
861 softime 8989 /**
862     *
863     * @return string
864     */
865     function get_var_sql_forminc__sql_infos_dossier() {
866     return "SELECT
867     dossier_autorisation.dossier_autorisation,
868     dossier_autorisation.dossier_autorisation_type_detaille,
869     dossier_autorisation.depot_initial,
870     dossier_autorisation.terrain_references_cadastrales,
871     dossier_autorisation.terrain_adresse_voie_numero,
872     dossier_autorisation.terrain_adresse_voie,
873     dossier_autorisation.terrain_adresse_lieu_dit,
874     dossier_autorisation.terrain_adresse_localite,
875     dossier_autorisation.terrain_adresse_code_postal,
876     dossier_autorisation.terrain_adresse_bp,
877     dossier_autorisation.terrain_adresse_cedex,
878     dossier_autorisation.terrain_superficie,
879     etat.libelle as etat
880     FROM ".DB_PREFIXE."dossier_autorisation
881     INNER JOIN ".DB_PREFIXE."dossier
882     ON dossier_autorisation.dossier_autorisation=dossier.dossier_autorisation
883     LEFT JOIN ".DB_PREFIXE."etat
884     ON dossier.etat = etat.etat
885     WHERE dossier = '<idx>'";
886     }
887 mbroquet 3730
888     /**
889     * Méthode permettant de récupérer les valeurs du dossier d'autorisation
890     * correspondant à la nouvelle demande
891     */
892     function getValFromDossier($dossier_autorisation) {
893 softime 8989 $sql = str_replace(
894     "<idx>",
895     $this->getParameter("idx_dossier"),
896     $this->get_var_sql_forminc__sql("infos_dossier")
897     );
898     $res = $this->f->db->query($sql);
899 mbroquet 3730 $this->f->addToLog("getValFromDossier(): db->query(\"".$sql."\")", VERBOSE_MODE);
900     $this->f->isDatabaseError($res);
901 softime 8989 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
902 mbroquet 3730 return $row;
903     }
904 softime 8989
905     /**
906     * SETTER_FORM - setVal (setVal).
907     *
908     * @return void
909     */
910     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
911     parent::setVal($form, $maj, $validation);
912 softime 8329 // Sur le formulaire de modification, depot_electronique
913     // n'est pas modifiable et affiche Oui/Non.
914 softime 8989 if ($maj == 1) {
915     if ($this->getVal('depot_electronique') === 't'
916     || $this->getVal('depot_electronique') === true
917     || $this->getVal('depot_electronique') === 1) {
918     //
919     $form->setVal('depot_electronique', "Oui");
920     } else {
921     $form->setVal('depot_electronique', "Non");
922     }
923 softime 8329 }
924 softime 8989 //
925     if ($maj == 0) {
926 mbroquet 3730 // Définition de la date de dépôt par défaut
927 softime 8989 // La date du jour par défaut dans le champs date_demande
928     if ($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
929 mbroquet 3730 $form->setVal("date_demande", date('d/m/Y'));
930     }
931     // Récupération des valeurs du dossier d'autorisation correspondant
932 softime 8989 if ($this->getParameter("idx_dossier") != "") {
933     $val_autorisation = $this->getValFromDossier($this->getParameter("idx_dossier"));
934     foreach ($val_autorisation as $champ => $value) {
935     $form->setVal($champ, $value);
936 mbroquet 3730 }
937     }
938     }
939     }
940 softime 8989
941 mbroquet 3730 function getDataSubmit() {
942    
943     $datasubmit = parent::getDataSubmit();
944     if($this->getParameter("idx_dossier") != "") {
945     $datasubmit .= "&idx_dossier=".$this->getParameter("idx_dossier");
946     }
947     return $datasubmit;
948     }
949    
950     /**
951 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
952 softime 6565 *
953     * @return, string Type de formulaire.
954     */
955     function get_type_affichage_formulaire() {
956    
957     $sql = "SELECT dossier_autorisation_type.affichage_form
958     FROM ".DB_PREFIXE."demande_type
959     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
960     ON demande_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
961     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
962     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
963     WHERE demande_type.demande_type=".$this->valF["demande_type"];
964 softime 8989 $type_aff_form = $this->f->db->getOne($sql);
965 softime 6565 $this->f->addToLog(__METHOD__ . " : db->getOne(\"".$sql."\")", VERBOSE_MODE);
966     if($this->f->isDatabaseError($type_aff_form, true) === true) {
967     return false;
968     }
969     return $type_aff_form;
970     }
971 softime 8989
972 softime 6565 /**
973 softime 8989 * @return void
974 mbroquet 3730 */
975 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
976     parent::verifier($val);
977 mbroquet 3730
978 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
979     if ($type_aff_form ===false) {
980 mbroquet 3730 $this->correct = false;
981 softime 6565 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
982 mbroquet 3730 }
983 softime 6565 switch ($type_aff_form) {
984     case 'ADS':
985     case 'CTX RE':
986     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
987     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
988     !is_null($this->form)) {
989     $this->correct = false;
990     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
991     }
992     break;
993     case 'CTX IN':
994     if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
995     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
996     !is_null($this->form)) {
997     $this->correct = false;
998     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
999     }
1000     break;
1001 softime 7067 case 'DPC':
1002     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1003     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1004     !is_null($this->form)) {
1005     $this->correct = false;
1006     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1007     }
1008     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
1009     empty($this->postedIdDemandeur["bailleur_principal"]) AND
1010     !is_null($this->form)) {
1011     $this->correct = false;
1012     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
1013     }
1014     break;
1015 softime 6565
1016     }
1017    
1018 mbroquet 3730 }
1019    
1020     /**
1021 softime 8989 *
1022     * @return string
1023 mbroquet 3730 */
1024 softime 8989 function get_var_sql_forminc__sql_demande_type_details_by_id() {
1025     return "SELECT demande_type.demande_type, demande_type.libelle, demande_type.dossier_autorisation_type_detaille, demande_type. dossier_instruction_type FROM ".DB_PREFIXE."demande_type WHERE demande_type = <idx>";
1026     }
1027 mbroquet 3730
1028 softime 8989 /**
1029     *
1030     * @return string
1031     */
1032     function get_var_sql_forminc__sql_lien_demande_demandeur() {
1033     return "SELECT petitionnaire_principal, demandeur, demande FROM ".DB_PREFIXE."lien_demande_demandeur WHERE demande = <demande>";
1034     }
1035    
1036     /**
1037     *
1038     * @return string
1039     */
1040     function get_var_sql_forminc__sql_arrondissement() {
1041     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY NULLIF(arrondissement.libelle,'')::int ASC NULLS LAST";
1042     }
1043    
1044     /**
1045     *
1046     * @return string
1047     */
1048     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
1049     return "SELECT
1050     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille,
1051     dossier_autorisation_type_detaille.libelle
1052     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1053     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1054     ON dossier_autorisation_type_detaille.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
1055     LEFT JOIN ".DB_PREFIXE."groupe
1056     ON dossier_autorisation_type.groupe=groupe.groupe
1057     LEFT JOIN ".DB_PREFIXE."cerfa ON dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1058     WHERE ((now()<=om_validite_fin AND now()>=om_validite_debut) OR
1059     dossier_autorisation_type_detaille.cerfa IS NULL OR
1060     (om_validite_fin IS NULL and om_validite_debut IS NULL) OR
1061     (now()<=om_validite_fin and om_validite_debut IS NULL) OR
1062     (om_validite_fin IS NULL AND now()>=om_validite_debut))
1063     <ajout_condition_requete>
1064     ORDER BY dossier_autorisation_type_detaille.libelle ASC";
1065     }
1066    
1067     /**
1068     * SETTER_FORM - setSelect.
1069     *
1070     * @return void
1071     */
1072     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
1073     //parent::setSelect($form, $maj);
1074 mbroquet 3730 // Méthode de récupération des valeurs du select "demande_type"
1075     if ($maj < 2
1076     && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
1077     OR ($this->f->get_submitted_get_value('obj') === null))) {
1078     // demande_type
1079 softime 8989 $form->setSelect(
1080     'demande_type',
1081     $this->loadSelectDemandeType($form, $maj, "dossier_autorisation_type_detaille")
1082     );
1083 mbroquet 3730 } else {
1084     // demande_type
1085 softime 8989 $this->init_select(
1086     $form,
1087     $this->f->db,
1088     $maj,
1089     null,
1090     "demande_type",
1091     $this->get_var_sql_forminc__sql("demande_type"),
1092     $this->get_var_sql_forminc__sql("demande_type_by_id"),
1093     false
1094     );
1095 mbroquet 3730 }
1096     // arrondissement
1097 softime 8989 $this->init_select(
1098     $form,
1099     $this->f->db,
1100     $maj,
1101     null,
1102     "arrondissement",
1103     $this->get_var_sql_forminc__sql("arrondissement"),
1104     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
1105     false
1106     );
1107 softime 6565 // Filtre des demandes par groupes
1108     $group_clause = array();
1109     $ajout_condition_requete = "";
1110     foreach ($_SESSION["groupe"] as $key => $value) {
1111     if($value["enregistrement_demande"] !== true) {
1112     continue;
1113     }
1114     $group_clause[$key] = "(groupe.code = '".$key."'";
1115     if($value["confidentiel"] !== true) {
1116     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
1117     }
1118     $group_clause[$key] .= ")";
1119     }
1120     // Mise en chaîne des clauses
1121     $conditions = implode(" OR ", $group_clause);
1122     if($conditions !== "") {
1123     $ajout_condition_requete .= " AND (".$conditions.")";
1124     }
1125     // Les clauses sont une white list. Cela qui signifie que l'on
1126     // rajoute une condition irréalisable si absence de clause.
1127     if ($ajout_condition_requete === '') {
1128     $ajout_condition_requete = 'AND false';
1129     }
1130 softime 8989 $sql_dossier_autorisation_type_detaille = str_replace(
1131     '<ajout_condition_requete>',
1132     $ajout_condition_requete,
1133     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille")
1134     );
1135     $this->init_select(
1136     $form,
1137     $this->f->db,
1138     $maj,
1139     null,
1140     "dossier_autorisation_type_detaille",
1141     $sql_dossier_autorisation_type_detaille,
1142     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
1143     false
1144     );
1145 mbroquet 3730 // om_collectivite
1146 softime 8989 $this->init_select(
1147     $form,
1148     $this->f->db,
1149     $maj,
1150     null,
1151     "om_collectivite",
1152     $this->get_var_sql_forminc__sql("om_collectivite"),
1153     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
1154     false
1155     );
1156 mbroquet 3730 }
1157    
1158     /**
1159     * Charge le select du champ type de demande
1160     * @param object $form Formulaire
1161     * @param int $maj Mode d'insertion
1162     * @param string $champ champ activant le filtre
1163     * @return array Contenu du select
1164     */
1165 softime 8989 function loadSelectDemandeType(&$form, $maj, $champ) {
1166 mbroquet 3730
1167     // Contenu de la liste à choix
1168     $contenu=array();
1169     $contenu[0][0]='';
1170     $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
1171    
1172     //Récupère l'id du type de dossier d'autorisation détaillé
1173     $id_dossier_autorisation_type_detaille = "";
1174     if ($this->f->get_submitted_post_value($champ) !== null) {
1175     $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
1176     } elseif($this->getParameter($champ) != "") {
1177     $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
1178     } elseif(isset($form->val[$champ])) {
1179     $id_dossier_autorisation_type_detaille = $form->val[$champ];
1180     }
1181 softime 8640 //
1182     if ($id_dossier_autorisation_type_detaille === '') {
1183     return $contenu;
1184     }
1185 mbroquet 3730
1186     // Récupération de paramètre pour le rechargement ajax du select
1187     $idx_dossier = $this->getParameter("idx_dossier");
1188    
1189     // Récupère l'id de la nature de la demande
1190     $id_demande_nature = "1";
1191     if (isset($idx_dossier) AND $idx_dossier != "") {
1192     $id_demande_nature = '2';
1193     }
1194    
1195 softime 8640
1196     // Requête récupération type demande pour les nouveaux DA
1197     $sql = sprintf('
1198     SELECT demande_type.demande_type, demande_type.libelle as lib
1199     FROM %1$sdemande_type
1200     INNER JOIN %1$sdossier_autorisation_type_detaille
1201     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1202     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = %2$s
1203     WHERE demande_type.demande_nature = %3$s
1204     ORDER BY demande_type.libelle, demande_type.demande_type
1205     ',
1206     DB_PREFIXE,
1207     $id_dossier_autorisation_type_detaille,
1208     intval($id_demande_nature)
1209     );
1210     // Requêtes de récupération des types de demande pour les DA existants
1211 mbroquet 3730 if ($id_demande_nature == '2') {
1212 softime 8640
1213     // Unification de trois résultats de réquête pour récupèrer les
1214     // types de demande possibles :
1215     // - les types de demande qui ne créé pas de nouveau DI et dont
1216     // l'état du DI ciblé fait partie des états autorisés,
1217     // - les types de demande qui créé de nouveau DI, dont l'état du DI
1218     // ciblé fait partie des états autorisés et dont le DA du DI ciblé
1219     // est accordé,
1220     // - les types de demande qui créé de nouveau DI, dont les types
1221     // de(s) DI en cours sur le DA ciblé accordé, sont identique(s) à
1222     // la liste des types de DI compatibles,
1223     // - les types de demande qui créé de nouveau DI, dont les types
1224     // de(s) DI en cours sur le DA ciblé en cours d'instruction sont
1225     // identique(s) à la liste des types de DI compatibles et dont le
1226 softime 9245 // DI initial n'est pas de compétence SITADEL "au nom de la commune".
1227 softime 8640 $sql = sprintf('
1228     SELECT DISTINCT demande_type.demande_type as dt, demande_type.libelle as lib
1229     FROM %1$sdemande_type
1230     INNER JOIN %1$sdossier_autorisation_type_detaille
1231     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1232     INNER JOIN %1$slien_demande_type_etat
1233     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1234     INNER JOIN %1$setat
1235     ON lien_demande_type_etat.etat = etat.etat
1236     INNER JOIN %1$sdossier
1237     ON dossier.dossier = \'%2$s\'
1238     AND etat.etat = dossier.etat
1239     INNER JOIN %1$sdossier_autorisation
1240     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1241     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1242     WHERE demande_type.dossier_instruction_type IS NULL
1243     AND demande_type.demande_nature = %3$s
1244     UNION
1245     SELECT demande_type.demande_type, demande_type.libelle as lib
1246     FROM %1$sdemande_type
1247     INNER JOIN %1$sdossier_autorisation_type_detaille
1248     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1249     INNER JOIN %1$slien_demande_type_etat
1250     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1251     INNER JOIN %1$setat
1252     ON lien_demande_type_etat.etat = etat.etat
1253     INNER JOIN %1$sdossier
1254     ON dossier.dossier = \'%2$s\'
1255     AND etat.etat = dossier.etat
1256     INNER JOIN %1$sdossier_autorisation as da
1257     ON da.dossier_autorisation = dossier.dossier_autorisation
1258     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = da.dossier_autorisation_type_detaille
1259     WHERE demande_type.dossier_instruction_type IS NOT NULL
1260     AND demande_type.demande_nature = %3$s
1261     AND da.etat_dossier_autorisation = %4$s
1262     AND (
1263     SELECT count(dossier)
1264     FROM %1$sdossier
1265     INNER JOIN %1$sdossier_autorisation
1266     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1267     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1268     INNER JOIN %1$setat
1269     ON dossier.etat = etat.etat
1270     AND etat.statut = \'encours\'
1271     ) = 0
1272     UNION
1273     SELECT demande_type.demande_type, demande_type.libelle as lib
1274     FROM %1$sdemande_type
1275     INNER JOIN %1$sdossier
1276     ON dossier.dossier = \'%2$s\'
1277     INNER JOIN %1$sdossier_autorisation as da
1278     ON da.dossier_autorisation = dossier.dossier_autorisation
1279 softime 9245 INNER JOIN %1$sautorite_competente
1280     ON autorite_competente.autorite_competente = dossier.autorite_competente
1281 softime 8640 WHERE demande_type.dossier_instruction_type IS NOT NULL
1282     AND (
1283     SELECT array_agg(DISTINCT(dossier_instruction_type))
1284     FROM %1$sdossier
1285     INNER JOIN %1$sdossier_autorisation
1286     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1287     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1288     INNER JOIN %1$setat
1289     ON dossier.etat = etat.etat
1290     AND etat.statut = \'encours\'
1291     ) <@ (
1292     SELECT array_agg(DISTINCT(dossier_instruction_type))
1293     FROM %1$slien_demande_type_dossier_instruction_type
1294     WHERE lien_demande_type_dossier_instruction_type.demande_type = demande_type.demande_type
1295     )
1296     AND demande_type.demande_nature = %3$s
1297     AND (
1298     da.etat_dossier_autorisation = %4$s
1299     OR (
1300     da.etat_dossier_autorisation = %5$s
1301 softime 9245 AND autorite_competente.autorite_competente_sitadel != %6$s
1302 softime 8640 ))
1303     ORDER BY lib, dt
1304     ',
1305     DB_PREFIXE,
1306     $idx_dossier,
1307     intval($id_demande_nature),
1308     2, // Identifiant de l'état de dossier d'autorisation : Accordé
1309     1, // Identifiant de l'état de dossier d'autorisation : En cours
1310 softime 9245 1 // Identifiant de l'autorité compétente SITADEL : 1 - au nom de la commune
1311 mbroquet 3730 );
1312     }
1313    
1314     //
1315 softime 8989 $res = $this->f->db->query($sql);
1316 softime 8640 $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
1317     $this->f->isDatabaseError($res);
1318     //Les résultats de la requête sont stocké dans le tableau contenu
1319     $k=1;
1320     while ($row=& $res->fetchRow()){
1321     $contenu[0][$k]=$row[0];
1322     $contenu[1][$k]=$row[1];
1323     $k++;
1324 mbroquet 3730 }
1325    
1326     // Retourne le contenu de la liste
1327     return $contenu;
1328     }
1329    
1330     /*
1331     * Ajout du fielset
1332     * Add fieldset
1333     */
1334     function setLayout(&$form, $maj){
1335 softime 6565 if ( $maj < 2) {
1336 mbroquet 3730
1337 softime 6565 // Type de dossier/demande
1338     $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1339     $form->setFieldset('om_collectivite','D'
1340 mbroquet 3730 ,_('Type de dossier/demande'));
1341 softime 6565 $form->setFieldset('etat','F','');
1342     $form->setBloc('etat','F');
1343    
1344     // Autorisation contestée
1345     $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1346     $form->setFieldset('autorisation_contestee','D'
1347     ,_('Autorisation contestée'));
1348     $form->setFieldset('autorisation_contestee','F','');
1349     $form->setBloc('autorisation_contestee','F');
1350    
1351     // Date de la demande
1352     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1353     $form->setFieldset('date_demande','D',_('Date de la demande'));
1354     $form->setFieldset('date_demande','F','');
1355     $form->setBloc('date_demande','F');
1356    
1357 softime 8989 // En mode ajout et si l'option de saisie manuelle est activée
1358     if ($maj == 0
1359     && $this->f->is_option_dossier_saisie_numero_enabled() === true) {
1360    
1361     // Numéro de dossier
1362     $form->setBloc('num_doss_manuel','D',"","col_8 demande_hidden_bloc bloc_numero_dossier");
1363     $form->setBloc('num_doss_manuel','DF','', 'col_3 bloc_activ_num_manu saisie_manuelle');
1364     $form->setBloc('num_doss_type_da','D',"","col_8 bloc_num_manu");
1365     $form->setFieldset('num_doss_type_da','D',__("Numéro de dossier"));
1366     $form->setBloc('num_doss_type_da','DF','','type-da');
1367     $form->setBloc('num_doss_code_depcom','DF','','depcom');
1368     $form->setBloc('num_doss_annee','DF','','annee');
1369     $form->setBloc('num_doss_division','DF','','division');
1370     $form->setBloc('num_doss_sequence','DF','','sequence');
1371     $form->setFieldset('num_doss_sequence','F');
1372     $form->setBloc('num_doss_sequence','F');
1373     $form->setBloc('num_doss_sequence','F');
1374     }
1375    
1376 softime 7067 // Localisation
1377 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1378 softime 6565 "col_12 localisation demande_hidden_bloc");
1379 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1380 softime 6565 $form->setFieldset('terrain_superficie','F','');
1381     $form->setBloc('terrain_superficie','F');
1382    
1383     // Demandeurs
1384     // → cf. formSpecificContent()
1385     }
1386     if ( $maj == 3 ) {
1387     $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1388     $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1389     $form->setFieldset('om_collectivite','D'
1390     ,_('Type de dossier/demande'));
1391     $form->setFieldset('dossier_autorisation','F','');
1392     $form->setBloc('dossier_autorisation','F');
1393 mbroquet 3730 /*Fin bloc 1*/
1394    
1395     // Affichage de l'état du dossier d'instruction
1396     $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1397     $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1398     $form->setFieldset('etat','F','');
1399     $form->setBloc('etat','F');
1400     $form->setBloc('etat','F');
1401    
1402 softime 6565 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1403    
1404 mbroquet 3730 /*Champ sur lequel s'ouvre le bloc 2 */
1405     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1406     $form->setFieldset('date_demande','D',_('Date de la demande'));
1407     $form->setFieldset('date_demande','F','');
1408     $form->setBloc('date_demande','F');
1409     /*Fin bloc 2*/
1410    
1411     /*Champ sur lequel s'ouvre le bloc 3 */
1412 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1413 mbroquet 3730 "localisation col_12 demande_hidden_bloc");
1414 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1415 mbroquet 3730 $form->setFieldset('terrain_superficie','F','');
1416     $form->setBloc('terrain_superficie','F');
1417     /*Fin bloc 4*/
1418     }
1419     }
1420    
1421     /*
1422     * Ajoute des actions sur les deux premiers select
1423     * Add actions on the two first select
1424     */
1425     function setOnchange(&$form,$maj){
1426     parent::setOnchange($form,$maj);
1427    
1428     $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1429 softime 6565 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1430 mbroquet 3730 }
1431    
1432     function setLib(&$form,$maj) {
1433     parent::setLib($form,$maj);
1434     //libelle des champs
1435    
1436     $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1437 softime 6565 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1438 mbroquet 3730 }
1439 softime 6565
1440 mbroquet 3730 /*
1441     * Cache le champ terrain_references_cadastrales
1442     * Hide the fiels terrain_references_cadastrales
1443     */
1444     function setType(&$form,$maj) {
1445     parent::setType($form,$maj);
1446    
1447     $form->setType('dossier_instruction', 'hidden');
1448     $form->setType('dossier_autorisation', 'hidden');
1449 softime 6565 $form->setType('autorisation_contestee', 'autorisation_contestee');
1450 mbroquet 3730
1451     $form->setType('instruction_recepisse', 'hidden');
1452     $form->setType('arrondissement', 'hidden');
1453    
1454     $form->setType('etat', 'hidden');
1455 softime 8329
1456     //Le paramètre "dépôt électronique" n'est pas modifiable manuellement
1457     if ($maj == 0) {
1458     $form->setType('depot_electronique', 'hidden');
1459     }
1460 mbroquet 3730
1461     // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1462     // sauf demande_type
1463     if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1464     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1465     $form->setType('etat', 'hiddenstatic');
1466     $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1467     $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1468     $form->setType('terrain_adresse_voie', 'hiddenstatic');
1469     $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1470     $form->setType('terrain_adresse_localite', 'hiddenstatic');
1471     $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1472     $form->setType('terrain_adresse_bp', 'hiddenstatic');
1473     $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1474     $form->setType('terrain_superficie', 'hiddenstatic');
1475     }
1476     if($maj == 1) {
1477 softime 8329 $form->setType('depot_electronique', 'hiddenstatic');
1478 mbroquet 3730 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1479     $form->setType('demande_type', 'selecthiddenstatic');
1480     }
1481     if($maj == 3) {
1482     $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1483     }
1484    
1485     }
1486    
1487     /**
1488     * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1489     * par l'utilisateur.
1490     *
1491     * @return integer identifiant du cerfa
1492     */
1493     function getIdCerfa() {
1494     if($this->cerfa != null) {
1495     return $this->cerfa;
1496     }
1497     // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1498     $sql = "SELECT
1499     dossier_autorisation_type_detaille.cerfa
1500     FROM
1501     ".DB_PREFIXE."dossier_autorisation_type_detaille
1502     JOIN
1503     ".DB_PREFIXE."cerfa
1504     ON
1505     dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1506     WHERE
1507     now()<=om_validite_fin
1508     AND now()>=om_validite_debut
1509     AND dossier_autorisation_type_detaille=".
1510     $this->valF['dossier_autorisation_type_detaille'];
1511 softime 8989 $this->cerfa = $this->f->db->getOne($sql);
1512 mbroquet 3730 $this->f->addToLog(
1513 softime 8989 __METHOD__."(): db->getone(\"".$sql."\");",
1514 mbroquet 3730 VERBOSE_MODE
1515     );
1516     $this->f->isDatabaseError($this->cerfa);
1517     return $this->cerfa;
1518     }
1519    
1520    
1521     /**
1522     * Méthode permettant d'ajouter un dossier d'autorisation.
1523     *
1524     * @param integer $id identifiant de la demande
1525     * @param array $val tableau de valeurs postées via le formulaire
1526     *
1527     * @return boolean false si erreur
1528     */
1529 softime 8989 function ajoutDossierAutorisation($id, $val) {
1530 softime 7996 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1531     "obj" => "dossier_autorisation",
1532     "idx" => "]",
1533     ));
1534 mbroquet 3730 $id_etat_initial_da =
1535     $this->f->getParameter('id_etat_initial_dossier_autorisation');
1536    
1537     // Vérification de l'existance d'un état initial des DA dans la table
1538     // om_parametre afin d'éviter d'eventuelle erreur de base de données
1539     if(isset($id_etat_initial_da)) {
1540     $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1541     WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1542 softime 8989 $count = $this->f->db->getOne($sql);
1543 mbroquet 3730 $this->f->addToLog(
1544 softime 8989 __METHOD__."(): db->getOne(\"".$sql."\")",
1545 mbroquet 3730 VERBOSE_MODE
1546     );
1547     if ($this->f->isDatabaseError($count, true)){
1548     $this->f->addToLog(
1549 softime 8989 __METHOD__."(): ERROR db->getOne(\"".$sql."\")",
1550 mbroquet 3730 DEBUG_MODE
1551     );
1552 softime 6565
1553 mbroquet 3730 return false;
1554     }
1555     if($count != 1) {
1556     $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1557 softime 6565
1558 mbroquet 3730 return false;
1559 softime 6565 }
1560 mbroquet 3730
1561 softime 6565 // On récupère les paramètres de la collectivité concernée
1562     // par la demande.
1563     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1564     // Le paramètre 'insee' est obligatoire si il n'est pas présent
1565     // dans le tableau des paramètres alors on stoppe le traitement.
1566     if (!isset($collectivite_parameters['insee'])) {
1567     $this->f->addToLog(
1568     __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1569     DEBUG_MODE
1570     );
1571 mbroquet 3730
1572 softime 6565 return false;
1573     }
1574 mbroquet 3730
1575 softime 6565 // La méthode ajouter prend en paramètre un tableau associatif
1576     // contenant toutes les champs de la classe instanciée,
1577     // d'où l'initialisation du tableau en bouclant sur la liste des
1578     // champs du DA
1579     foreach($dossier_autorisation->champs as $value) {
1580     $valAuto[$value] = null;
1581 mbroquet 3730 }
1582 softime 6565
1583     // Définition des valeurs à insérer
1584     $valAuto['om_collectivite']=
1585     $this->valF['om_collectivite'];
1586     $valAuto['dossier_autorisation']="";
1587     $valAuto['exercice']=null;
1588     $valAuto['insee']= $collectivite_parameters['insee'];
1589     $valAuto['arrondissement']=
1590     $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1591     $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1592     $valAuto['erp_numero_batiment']=null;
1593     $valAuto['erp_ouvert']=null;
1594     $valAuto['erp_arrete_decision']=null;
1595     $valAuto['dossier_autorisation_type_detaille']=
1596     $this->valF['dossier_autorisation_type_detaille'];
1597     $valAuto['depot_initial']=
1598     $this->dateDBToForm($this->valF['date_demande']);
1599     $valAuto['terrain_references_cadastrales']=
1600     $this->valF['terrain_references_cadastrales'];
1601     $valAuto['terrain_adresse_voie_numero']=
1602     $this->valF['terrain_adresse_voie_numero'];
1603     $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1604     $valAuto['terrain_adresse_lieu_dit']=
1605     $this->valF['terrain_adresse_lieu_dit'];
1606     $valAuto['terrain_adresse_localite']=
1607     $this->valF['terrain_adresse_localite'];
1608     $valAuto['terrain_adresse_code_postal']=
1609     $this->valF['terrain_adresse_code_postal'];
1610     $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1611     $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1612     $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1613     $valAuto['numero_version']=-1;
1614 softime 8989
1615     // saisie manuelle du numéro de dossier et division instructeur
1616     if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1617     isset($val['num_doss_sequence']) && !empty($val['num_doss_sequence'])) {
1618    
1619     $valAuto['numero_dossier_seq'] = $val['num_doss_sequence'];
1620    
1621     if (isset($val['num_doss_division'])) {
1622     $valAuto['division_instructeur'] = $val['num_doss_division'];
1623     }
1624     }
1625    
1626 softime 6565 // Ajout du dossier dans la base
1627 softime 8989 if($dossier_autorisation->ajouter($valAuto) === false) {
1628 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1629 softime 8989 if (!empty($dossier_autorisation->msg)) {
1630     $this->f->addToLog(__METHOD__."() : ERROR - ".$dossier_autorisation->msg, DEBUG_MODE);
1631     $this->addToMessage($dossier_autorisation->msg.'<br/>');
1632     }
1633 softime 6565 return false;
1634     }
1635 softime 8989
1636 softime 6565 // Liaison du dossier ajouter à la demande
1637     $this->valF['dossier_autorisation'] =
1638     $dossier_autorisation->valF['dossier_autorisation'];
1639    
1640     return true;
1641 mbroquet 3730 }
1642    
1643 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1644    
1645     return false;
1646 mbroquet 3730 }
1647    
1648     /**
1649     * Méthode permettant d'ajouter un dossier d'instruction.
1650     *
1651     * @param integer $id identifiant de la demande
1652     * @param array $val tableau de valeurs postées via
1653     * le formulaire
1654     * @param integer $dossier_instruction_type identifiant du DI type
1655     *
1656     * @return boolean false si erreur
1657     */
1658 softime 8989 function ajoutDossierInstruction($id, $val, $dossier_instruction_type) {
1659 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
1660     "obj" => "dossier",
1661     "idx" => "]",
1662     ));
1663 mbroquet 3730 foreach($dossier->champs as $value) {
1664     $valInstr[$value] = null;
1665     }
1666 softime 7996 $datd = $this->f->get_inst__om_dbform(array(
1667     "obj" => "dossier_autorisation_type_detaille",
1668     "idx" => $this->valF['dossier_autorisation_type_detaille'],
1669     ));
1670 mbroquet 3730
1671     /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1672     * versionning
1673     */
1674     $dossier->setDossierInstructionType($dossier_instruction_type);
1675    
1676     // Définition des valeurs à entrée dans la table
1677     $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1678     $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1679     $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1680     $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1681     $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1682     $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1683     $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1684     $valInstr['annee']=$annee->format("y");
1685 softime 8329 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
1686     $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
1687 mbroquet 3730 $valInstr['terrain_references_cadastrales']=
1688     $this->valF['terrain_references_cadastrales'];
1689     $valInstr['terrain_adresse_voie_numero']=
1690     $this->valF['terrain_adresse_voie_numero'];
1691     $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1692     $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1693     $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1694     $valInstr['terrain_adresse_code_postal']=
1695     $this->valF['terrain_adresse_code_postal'];
1696     $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1697     $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1698     $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
1699     $valInstr['description']="";
1700     $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
1701 softime 6565 if ($this->valF["autorisation_contestee"] != "") {
1702     $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
1703     }
1704 mbroquet 3730
1705     /*
1706     * Gestion de la qualification
1707     * */
1708     // Initialise le champ à false
1709     $valInstr['a_qualifier'] = false;
1710    
1711     // Récupère l'information depuis le type de la demande
1712     $qualification = $this->get_qualification($val['demande_type']);
1713    
1714     // Si le dossier doit être à qualifier
1715     if ($qualification === 't') {
1716     // Met le champ à true
1717     $valInstr['a_qualifier'] = true;
1718     }
1719    
1720 softime 6929 /*
1721     * Gestion de la simulation des taxes
1722     */
1723     // Récupère l'instance du cerfa lié au type détaillé du DA
1724     $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
1725    
1726     // Si l'option de simulation est activée pour la collectivité du dossier
1727     // et que le cerfa du dossier à les champs requis
1728     if ($this->f->is_option_simulation_taxes_enabled($val['om_collectivite']) === true
1729     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
1730    
1731     // Récupère le paramétrage des taxes
1732     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
1733     // Si un paramétrage des taxes est récupéré pour la collectivité
1734     if ($inst_taxe_amenagement !== null) {
1735    
1736     // Si la taxe d'aménagement à un seul secteur
1737     if ($inst_taxe_amenagement->has_one_secteur() == true) {
1738     // Sélectionne l'unique secteur automatiquement
1739     $valInstr['tax_secteur'] = 1;
1740     }
1741 mbroquet 3730 }
1742     }
1743    
1744     //
1745 softime 8989 if($dossier->ajouter($valInstr) === false) {
1746 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
1747     return false;
1748     }
1749    
1750     //Affichage de message à l'utilisateur concernant un problème lors de
1751     //l'affectation de l'instructeur au dossier d'instruction
1752     if ($dossier->valF['dossier_autorisation'] === '' &&
1753     $dossier->valF['instructeur'] === null){
1754     $this->addToMessage(
1755     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1756     );
1757     }
1758     elseif ( $dossier->valF['instructeur'] === null ){
1759     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
1760     $this->addToMessage("<br/> ".
1761     _("Pensez a assigner un instructeur a ce dossier.")
1762     );
1763     } else {
1764     $this->addToMessage(
1765     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1766     );
1767     }
1768     }
1769    
1770     // Liaison du dossier ajouter à la demande
1771     $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
1772    
1773     //
1774     return true;
1775     }
1776    
1777     /**
1778     * Méthode permettant d'ajouter les données techniques d'un DA.
1779     *
1780     * @param integer $id identifiant de la demande
1781     * @param array $val tableau de valeurs postées via le formulaire
1782     *
1783     * @return boolean false si erreur
1784     */
1785 softime 8989 function ajoutDonneesTechniquesDA($id, $val) {
1786 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
1787     "obj" => "donnees_techniques",
1788     "idx" => "]",
1789     ));
1790 mbroquet 3730
1791     // Champs tous à NULL car seul le champ concernant le dossier
1792     // d'autorisation sera rempli
1793     foreach($this->DTDA->champs as $value) {
1794     $valF[$value] = null;
1795     }
1796     // Ajout du numéro de dossier d'instruction
1797     $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
1798     // Identifiant du cerfa
1799     $valF['cerfa'] = $this->getIdCerfa();
1800     //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
1801     if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
1802     // Ajout des données techniques
1803 softime 8989 if($this->DTDA->ajouter($valF) === false) {
1804 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
1805     return false;
1806     }
1807     }
1808     else {
1809     //On indique que le dossier d'autorisation n'a pas de données techniques
1810     $this->DTDA = null;
1811     //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
1812     $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
1813     return -1;
1814     }
1815    
1816     //
1817     return true;
1818     }
1819    
1820     /**
1821     * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
1822     **/
1823 softime 8989 function ajoutLiensDossierAutorisation($id, $val) {
1824 mbroquet 3730 // Création des liens entre le dossier autorisation et les demandeurs
1825 softime 7996 $ldad = $this->f->get_inst__om_dbform(array(
1826     "obj" => "lien_dossier_autorisation_demandeur",
1827     "idx" => "]",
1828     ));
1829 mbroquet 3730 // Recupération des demandeurs liés à la demande
1830 softime 8989 $sql = str_replace(
1831     "<demande>",
1832     $this->valF['demande'],
1833     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
1834     );
1835     $sql .= " AND lien_demande_demandeur.demandeur NOT IN (
1836 mbroquet 3730 SELECT lien_dossier_autorisation_demandeur.demandeur
1837     FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
1838     WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
1839 softime 8989 '".$this->valF['dossier_autorisation']."')";
1840     $res = $this->f->db->query($sql);
1841     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
1842 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
1843     return false;
1844     }
1845     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1846     $row['lien_dossier_autorisation_demandeur'] = NULL;
1847     $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
1848 softime 8989 if ($ldad->ajouter($row) === false) {
1849 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
1850     return false;
1851     }
1852     }
1853    
1854     //
1855     return true;
1856     }
1857    
1858     /**
1859     * Ajout des liens demandeurs / dossier d'autorisation
1860     **/
1861 softime 8989 function ajoutLiensDossierInstruction($id, $val) {
1862 mbroquet 3730 // Création des liens entre le dossier instruction et les demandeurs
1863 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
1864     "obj" => "lien_dossier_demandeur",
1865     "idx" => "]",
1866     ));
1867 mbroquet 3730 // Recupération des demandeurs liés à la demande
1868 softime 8989 $sql = str_replace(
1869     "<demande>",
1870     $this->valF['demande'],
1871     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
1872     );
1873     $res = $this->f->db->query($sql);
1874     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
1875 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
1876     return false;
1877     }
1878     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1879     $row['lien_dossier_demandeur'] = NULL;
1880     $row['dossier'] = $this->valF['dossier_instruction'];
1881 softime 8989 if ($ldd->ajouter($row) === false) {
1882 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
1883     return false;
1884     }
1885     }
1886    
1887     //
1888     return true;
1889     }
1890    
1891     /*
1892     * Récupère l'identifiant d'un arrondissement à partir d'un code postal
1893     */
1894     function getArrondissement($terrain_adresse_code_postal){
1895    
1896     $arrondissement = NULL;
1897    
1898     $sql = "SELECT
1899     arrondissement
1900     FROM
1901     ".DB_PREFIXE."arrondissement
1902     WHERE
1903     code_postal = '$terrain_adresse_code_postal' ";
1904     $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
1905    
1906 softime 8989 $res = $this->f->db->query($sql);
1907 mbroquet 3730 $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1908     $this->f->isDatabaseError($res);
1909    
1910     if( $res->numrows() > 0 ) {
1911    
1912     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1913     $arrondissement = $row['arrondissement'];
1914     }
1915    
1916     return $arrondissement;
1917     }
1918    
1919     /*
1920     * Récupère l'évènement lié à un type de demande
1921     */
1922     function getEvenement($demande_type){
1923    
1924     $evenement = null;
1925    
1926     $sql =
1927     "SELECT
1928     evenement
1929     FROM
1930     ".DB_PREFIXE."demande_type
1931     WHERE
1932     demande_type = $demande_type";
1933    
1934 softime 8989 $res = $this->f->db->query($sql);
1935 mbroquet 3730 $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1936     $this->f->isDatabaseError($res);
1937    
1938     if ( $res->numrows() > 0 ){
1939    
1940     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1941     $evenement = $row['evenement'];
1942     }
1943    
1944     return $evenement;
1945     }
1946    
1947    
1948    
1949     /**
1950     * Retourne le libellé du dossier d'autorisation
1951     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1952     * @return string Libellé dossier d'autorisation
1953     */
1954     function get_dossier_autorisation_libelle($dossier_autorisation) {
1955    
1956     $dossier_autorisation_libelle = "";
1957    
1958     // Requête SQL
1959     $sql = "SELECT
1960     dossier_autorisation_libelle
1961     FROM
1962     ".DB_PREFIXE."dossier_autorisation
1963     WHERE
1964     dossier_autorisation = '$dossier_autorisation'";
1965    
1966 softime 8989 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
1967 mbroquet 3730 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1968     $this->f->isDatabaseError($dossier_autorisation_libelle);
1969    
1970     // Retourne le résultat
1971     return $dossier_autorisation_libelle;
1972     }
1973    
1974     /**
1975     * Retourne le libellé du dossier d'autorisation.
1976     * @param string $dossier Identifiant du dossier d'autorisation
1977     *
1978     * @return string Libellé dossier d'autorisation
1979     */
1980     function get_dossier_libelle($dossier) {
1981    
1982     $dossier_libelle = "";
1983    
1984     // Requête SQL
1985     $sql = "SELECT
1986     dossier_libelle
1987     FROM
1988     ".DB_PREFIXE."dossier
1989     WHERE
1990     dossier = '$dossier'";
1991    
1992 softime 8989 $dossier_libelle = $this->f->db->getOne($sql);
1993 mbroquet 3730 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1994     $this->f->isDatabaseError($dossier_libelle);
1995    
1996     // Retourne le résultat
1997     return $dossier_libelle;
1998     }
1999 softime 8989
2000 mbroquet 3730 /**
2001 softime 8989 * TRIGGER - triggerajouter.
2002     *
2003     * - Ajout des dossiers
2004     *
2005     * @return boolean
2006     */
2007     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2008     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2009     //
2010 mbroquet 3730 if($this->valF["demande_type"] != null) {
2011 softime 8989 $res = $this->f->db->query(
2012 mbroquet 3730 str_replace(
2013     '<idx>',
2014     $this->valF['demande_type'],
2015 softime 8989 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2016 mbroquet 3730 )
2017     );
2018     $this->f->addToLog(
2019 softime 8989 __METHOD__."(): db->query(\"".
2020 mbroquet 3730 str_replace(
2021     '<idx>',
2022     $this->valF['demande_type'],
2023 softime 8989 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2024 mbroquet 3730 )."\")",
2025     VERBOSE_MODE
2026     );
2027     if ($this->f->isDatabaseError($res, true)) {
2028     return false;
2029     }
2030     // Attribut permettant de définir si un dossier a été créé
2031     $this->ajoutDI = false;
2032     $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
2033     // Création du dossier_autorisation
2034     if($this->valF['dossier_autorisation'] == "") {
2035 softime 6565 //
2036 softime 8989 if($this->ajoutDossierAutorisation($id, $val) === false) {
2037     if(empty($this->msg)) {
2038     $this -> addToMessage(
2039     _("Erreur lors de l'enregistrement de la demande.")." ".
2040     _("Contactez votre administrateur.")
2041     );
2042     }
2043 mbroquet 3730 $this->correct = false;
2044     return false;
2045     }
2046 softime 6565 //
2047     $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2048     if ($inst_da->is_dossier_autorisation_visible()) {
2049     $this -> addToMessage(
2050     _("Creation du dossier d'autorisation no").
2051     '<span id="new_da">'.
2052     $this->get_dossier_autorisation_libelle(
2053     $this->valF['dossier_autorisation']
2054     ).'</span>'
2055     );
2056     }
2057     // Ajout des données techniques au dossier d'autorisation
2058 softime 8989 if($this->ajoutDonneesTechniquesDA($id, $val) === false) {
2059 mbroquet 3730 $this -> addToMessage(
2060     _("Erreur lors de l'enregistrement de la demande.")." ".
2061     _("Contactez votre administrateur.")
2062     );
2063     $this->correct = false;
2064     return false;
2065     }
2066     } else {
2067     $sqlIdDTDA = "SELECT donnees_techniques
2068     FROM ".DB_PREFIXE."donnees_techniques
2069     WHERE dossier_autorisation='".
2070     $this->valF['dossier_autorisation']."'";
2071 softime 8989 $idDTDA = $this->f->db->getOne($sqlIdDTDA);
2072 mbroquet 3730 $this->addToLog(
2073 softime 8989 __METHOD__."(): db->getOne(\"".$sqlIdDTDA."\")",
2074 mbroquet 3730 VERBOSE_MODE
2075     );
2076     if ($this->f->isDatabaseError($idDTDA, true)) {
2077     return false;
2078     }
2079    
2080     $this->DTDA = null;
2081     if ($idDTDA!=="" && is_numeric($idDTDA)){
2082 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
2083     "obj" => "donnees_techniques",
2084     "idx" => $idDTDA,
2085     ));
2086 mbroquet 3730 $this->DTDA->setValFFromVal();
2087     }
2088     }
2089 softime 8329
2090 mbroquet 3730 // Enregistrement du numéro dossier existant
2091     // (il sera écrasé si un DI est créé)
2092     if ($this->getParameter("idx_dossier") != "") {
2093     $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
2094     }
2095     // Création du dossier d'instruction
2096     if($dossier_type['dossier_instruction_type'] != null) {
2097 softime 8989 if($this->ajoutDossierInstruction($id, $val, $dossier_type['dossier_instruction_type']) === false ) {
2098     $this->addToMessage(
2099 mbroquet 3730 _("Erreur lors de l'enregistrement de la demande.")." ".
2100     _("Contactez votre administrateur.")
2101     );
2102     $this->correct = false;
2103     return false;
2104     }
2105     // Libellé du dossier
2106     $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
2107     // Message de validation
2108 softime 8989 $this->addToMessage(
2109 softime 4631 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
2110 mbroquet 3730 );
2111 softime 4631
2112 mbroquet 3730 // Attribut permettant de définir si un dossier a été créé.
2113     $this->ajoutDI = true;
2114     }
2115    
2116 softime 6565 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
2117     $code_datd = $inst_datd->getVal('code');
2118    
2119     $obj = "dossier_instruction";
2120     if ($code_datd === 'REC' OR $code_datd === 'REG') {
2121     $obj = "dossier_contentieux_tous_recours";
2122     }
2123     if ($code_datd === 'IN') {
2124     $obj = "dossier_contentieux_toutes_infractions";
2125     }
2126    
2127 softime 4631 // Template du lien vers le DI
2128 softime 7996 $template_link_di = "<a id='link_demande_dossier_instruction' title=\"%s\" class='lien' href='".OM_ROUTE_FORM."&obj=" . $obj . "&action=3&idx=%s'><span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s</a>";
2129 softime 4631
2130     // Lien vers le DI
2131     $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
2132    
2133     // Message affiché à l'utilisateur
2134     $this->addToMessage($link_di."<br/>");
2135    
2136 mbroquet 3730 /*Ajout de l'arrondissement à partir du code postal*/
2137     if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
2138    
2139     $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
2140     }
2141     }
2142    
2143     //
2144     return true;
2145     }
2146    
2147     /**
2148 fmichon 4708 * TRIGGER - triggerajouterapres.
2149     *
2150     * - Ajout des délégataires et pétitionnaires
2151     * - ...
2152     * - Option de numérisation
2153     * - Interface avec le référentiel ERP [109]
2154     * - Interface avec le référentiel ERP [112]
2155     * - Interface avec le référentiel ERP [110]
2156     * - Interface avec le référentiel ERP [107]
2157     *
2158     * @return boolean
2159     */
2160 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2161     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2162 softime 6391 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
2163 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2164 softime 6391 // Instanciation du dossier d'instruction concerné par la demande en
2165     // cours d'ajout avant modification éventuelle par l'instruction
2166     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2167     // Récupère l'état du dossier avant l'exécution d'une éventuelle action
2168     // associée à l'événement d'instruction : utile pour le message 112 vers
2169     // le référentiel ERP
2170     $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
2171     }
2172    
2173 fmichon 4708 /**
2174     *
2175     */
2176 softime 8989 if ($this->insertLinkDemandeDemandeur() == false) {
2177 mbroquet 3730 return false;
2178     }
2179    
2180     // Ajout des lliens entre dossier_autorisation et demandeur
2181     if(!empty($this->valF['dossier_autorisation'])) {
2182 softime 8989 if ($this->ajoutLiensDossierAutorisation($id, $val) == false) {
2183 mbroquet 3730 return false;
2184     }
2185     }
2186 softime 6565 // Ajout des liens entre dossier et demandeur
2187 mbroquet 3730 if($this->ajoutDI === TRUE) {
2188 softime 8989 if ($this->ajoutLiensDossierInstruction($id, $val) == false) {
2189 mbroquet 3730 return false;
2190     }
2191     }
2192 softime 6565
2193     // Création d'un lien entre le nouveau DI et le dossier contesté
2194     if ($this->valF["autorisation_contestee"] != "") {
2195     if ($this->ajoutLienDossierConteste() === false) {
2196     return false;
2197     }
2198     }
2199 mbroquet 3730
2200     // Duplication des lots (et leurs données techniques) et
2201     // liaison au nouveau dossier_d'instruction
2202     if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
2203 softime 8989 $this->lienLotDossierInstruction($id, $val);
2204 mbroquet 3730 }
2205    
2206     /*Création du lien de téléchargement de récépissé de demande*/
2207     if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
2208     && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
2209    
2210     /*Récupérer l'événement lié à ce type de demande*/
2211     $evenement = $this->getEvenement($this->valF['demande_type']);
2212    
2213     /*Récupération de la lettre type de l'événement*/
2214     $lettretype = $this->f->getLettreType($evenement);
2215    
2216     /*Création d'une nouvelle instruction avec cet événement*/
2217     /*Données*/
2218     $valInstr['instruction']=NULL;
2219    
2220     $valInstr['destinataire']=$this->valF['dossier_instruction'];
2221     $valInstr['dossier']=$this->valF['dossier_instruction'];
2222     // Récupère la date de la demande
2223     $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
2224     $valInstr['evenement']=$evenement;
2225     $valInstr['lettretype']=$lettretype;
2226     $valInstr['complement_om_html']="";
2227     $valInstr['complement2_om_html']="";
2228    
2229     $valInstr['action']="initialisation";
2230     $valInstr['delai']="2";
2231     $valInstr['etat']="notifier";
2232     $valInstr['accord_tacite']="Oui";
2233     $valInstr['delai_notification']="1";
2234     $valInstr['archive_delai']="0";
2235     $valInstr['archive_date_complet']=NULL;
2236     $valInstr['archive_date_dernier_depot']=NULL;
2237     $valInstr['archive_date_rejet']=NULL;
2238     $valInstr['archive_date_limite']=NULL;
2239     $valInstr['archive_date_notification_delai']=NULL;
2240     $valInstr['archive_accord_tacite']="Non";
2241     $valInstr['archive_etat']="initialiser";
2242     $valInstr['archive_date_decision']=NULL;
2243     $valInstr['archive_avis']="";
2244     $valInstr['archive_date_validite']=NULL;
2245     $valInstr['archive_date_achevement']=NULL;
2246     $valInstr['archive_date_chantier']=NULL;
2247     $valInstr['archive_date_conformite']=NULL;
2248     $valInstr['archive_incompletude']=NULL;
2249     $valInstr['archive_incomplet_notifie']=NULL;
2250     $valInstr['archive_evenement_suivant_tacite']="";
2251     $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
2252     $valInstr['archive_etat_pendant_incompletude']=NULL;
2253     $valInstr['archive_date_limite_incompletude']=NULL;
2254     $valInstr['archive_delai_incompletude']=NULL;
2255     $valInstr['archive_autorite_competente']=NULL;
2256     $valInstr['complement3_om_html']="";
2257     $valInstr['complement4_om_html']="";
2258     $valInstr['complement5_om_html']="";
2259     $valInstr['complement6_om_html']="";
2260     $valInstr['complement7_om_html']="";
2261     $valInstr['complement8_om_html']="";
2262     $valInstr['complement9_om_html']="";
2263     $valInstr['complement10_om_html']="";
2264     $valInstr['complement11_om_html']="";
2265     $valInstr['complement12_om_html']="";
2266     $valInstr['complement13_om_html']="";
2267     $valInstr['complement14_om_html']="";
2268     $valInstr['complement15_om_html']="";
2269     $valInstr['avis_decision']=NULL;
2270     $valInstr['date_finalisation_courrier']=NULL;
2271     $valInstr['date_envoi_signature']=NULL;
2272     $valInstr['date_retour_signature']=NULL;
2273     $valInstr['date_envoi_rar']=NULL;
2274     $valInstr['date_retour_rar']=NULL;
2275     $valInstr['date_envoi_controle_legalite']=NULL;
2276     $valInstr['date_retour_controle_legalite']=NULL;
2277     $valInstr['signataire_arrete']=NULL;
2278     $valInstr['numero_arrete']=NULL;
2279     $valInstr['code_barres']=NULL;
2280     $valInstr['om_fichier_instruction']=NULL;
2281     $valInstr['om_final_instruction']=NULL;
2282     $valInstr['document_numerise']=NULL;
2283     $valInstr['autorite_competente']=NULL;
2284     $valInstr['duree_validite_parametrage']="0";
2285     $valInstr['duree_validite']="0";
2286 nmeucci 3873 $valInstr['date_depot']=NULL;
2287 mbroquet 3730 $valInstr['om_final_instruction_utilisateur']= "f";
2288 softime 8329 $valInstr['om_fichier_instruction_dossier_final']= "f";
2289 mbroquet 3730 $valInstr['created_by_commune']= "f";
2290 softime 6565 $valInstr['archive_date_cloture_instruction'] = null;
2291     $valInstr['archive_date_premiere_visite'] = null;
2292     $valInstr['archive_date_derniere_visite'] = null;
2293     $valInstr['archive_date_contradictoire'] = null;
2294     $valInstr['archive_date_retour_contradictoire'] = null;
2295     $valInstr['archive_date_ait'] = null;
2296     $valInstr['archive_date_transmission_parquet'] = null;
2297 softime 8593 $valInstr['flag_edition_integrale'] = 'f';
2298     $valInstr['titre_om_htmletat'] = null;
2299     $valInstr['corps_om_htmletatex'] = null;
2300     $valInstr['archive_dossier_instruction_type'] = null;
2301 softime 8989 $valInstr['archive_date_affichage'] = null;
2302 mbroquet 3730
2303     // Récupération des champs archive si cette demande a créée un dossier
2304     // d'instruction mais pas un P0
2305     if (!is_null($this->valF['dossier_instruction']) &&
2306     $this->valF['dossier_instruction'] !== "" ){
2307    
2308     // Requête
2309     $sql = "SELECT dossier_instruction_type.code
2310     FROM ".DB_PREFIXE."demande_type
2311     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2312     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2313     WHERE demande_type.demande_type = ".$this->valF['demande_type'];
2314 softime 8989 $res = $this->f->db->getOne($sql);
2315     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2316 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2317     return false;
2318     }
2319    
2320     // On vérifie que ce n'est pas un P0
2321     if ( strcmp($res, "P") !== 0 ){
2322    
2323     $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
2324    
2325     if ($res == false) {
2326     return false;
2327     }
2328    
2329     if (isset($res['archive_delai'])) {
2330     $valInstr['archive_delai']=$res["archive_delai"];
2331     }
2332     if (isset($res['archive_date_complet'])) {
2333     $valInstr['archive_date_complet']=$res["archive_date_complet"];
2334     }
2335     if (isset($res['archive_date_dernier_depot'])) {
2336     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
2337     }
2338     if (isset($res['archive_date_rejet'])) {
2339     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
2340     }
2341     if (isset($res['archive_date_limite'])) {
2342     $valInstr['archive_date_limite']=$res["archive_date_limite"];
2343     }
2344     if (isset($res['archive_date_notification_delai'])) {
2345     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
2346     }
2347     if (isset($res['archive_accord_tacite'])) {
2348     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
2349     }
2350     if (isset($res['archive_etat'])) {
2351     $valInstr['archive_etat']=$res["archive_etat"];
2352     }
2353     if (isset($res['archive_date_decision'])) {
2354     $valInstr['archive_date_decision']=$res["archive_date_decision"];
2355     }
2356     if (isset($res['archive_avis'])) {
2357     $valInstr['archive_avis']=$res["archive_avis"];
2358     }
2359     if (isset($res['archive_date_validite'])) {
2360     $valInstr['archive_date_validite']=$res["archive_date_validite"];
2361     }
2362     if (isset($res['archive_date_achevement'])) {
2363     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2364     }
2365     if (isset($res['archive_date_chantier'])) {
2366     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2367     }
2368     if (isset($res['archive_date_conformite'])) {
2369     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2370     }
2371     if (isset($res['archive_incompletude'])) {
2372     $valInstr['archive_incompletude']=$res["archive_incompletude"];
2373     }
2374     if (isset($res['archive_incomplet_notifie'])) {
2375     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2376     }
2377     if (isset($res['archive_evenement_suivant_tacite'])) {
2378     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2379     }
2380     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2381     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2382     }
2383     if (isset($res['archive_etat_pendant_incompletude'])) {
2384     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2385     }
2386     if (isset($res['archive_date_limite_incompletude'])) {
2387     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2388     }
2389     if (isset($res['archive_delai_incompletude'])) {
2390     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2391     }
2392     if (isset($res['archive_autorite_competente'])) {
2393     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2394     }
2395 softime 6565 if (isset($res['archive_date_cloture_instruction'])) {
2396     $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2397     }
2398     if (isset($res['archive_date_premiere_visite'])) {
2399     $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2400     }
2401     if (isset($res['archive_date_derniere_visite'])) {
2402     $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2403     }
2404     if (isset($res['archive_date_contradictoire'])) {
2405     $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2406     }
2407     if (isset($res['archive_date_retour_contradictoire'])) {
2408     $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2409     }
2410     if (isset($res['archive_date_ait'])) {
2411     $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2412     }
2413     if (isset($res['archive_date_transmission_parquet'])) {
2414     $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2415     }
2416 softime 8989 if (isset($res['archive_date_affichage'])) {
2417     $valInstr['archive_date_affichage'] = $res['archive_date_affichage'];
2418     }
2419 mbroquet 3730 }
2420     }
2421    
2422     // Création d'un nouveau dossier
2423 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
2424     "obj" => "instruction",
2425     "idx" => "]",
2426     ));
2427 softime 9245 $instruction->valF = array();
2428 softime 8989 if ($instruction->ajouter($valInstr) === false) {
2429 nmeucci 3876 // Suppression des messages valides puisque erreur
2430     $this->msg = '';
2431     $this -> addToMessage($instruction->msg);
2432 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2433     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2434     return false;
2435     }
2436    
2437     // Finalisation du document
2438     $_GET['obj']='instruction';
2439     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2440 softime 7996 $instruction_final = $this->f->get_inst__om_dbform(array(
2441     "obj" => "instruction",
2442     "idx" => $_GET['idx'],
2443     ));
2444    
2445     // Si l'instruction a une lettre type associée
2446     // ET si elle n'est pas déjà finalisée
2447     if($instruction_final->getVal('lettretype') != ""
2448     && $instruction_final->getVal('om_final_instruction') !== 't') {
2449 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
2450     $instruction_final->setParameter('maj',100);
2451     // On finalise l'événement d'instruction
2452     $res = $instruction_final->finalize();
2453 softime 5024 // Si échec cela ne stoppe pas la création du dossier
2454     // et l'utilisateur n'en est pas informé dans l'IHM
2455     // mais l'erreur est loguée
2456 mbroquet 3730 if ($res === false) {
2457     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2458     }
2459     }
2460    
2461     // Mise à jour de la demande
2462     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2463     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2464 softime 7996 $demande_instance = $this->f->get_inst__om_dbform(array(
2465     "obj" => "demande",
2466     "idx" => $this->valF['demande'],
2467     ));
2468 softime 8989 if ($demande_instance->modifier($this->valF) === false) {
2469 mbroquet 3730 $this -> addToMessage($demande_instance->msg);
2470     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2471     return false;
2472     }
2473    
2474 softime 8329 // Instance du dossier d'autorisation
2475 softime 6565 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2476    
2477 softime 8329 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
2478 softime 7366 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2479 softime 8329 && $inst_da->is_dossier_autorisation_visible() === true) {
2480    
2481     // Permet de forcer la regénération de la clé citoyen
2482     $force = false;
2483    
2484     // Regénération de la clé citoyen si le type de demande le demande
2485     $regeneration_cle_citoyen = $this->get_demande_type_regeneration_cle_citoyen($val['demande_type']);
2486     if ($regeneration_cle_citoyen === true) {
2487     $force = true;
2488     }
2489    
2490 mbroquet 3730 // Met à jour la clé d'accès au portail citoyen dans le dossier
2491     // d'autorisation
2492 softime 8329 $update = $inst_da->update_citizen_access_key($force);
2493 mbroquet 3730 //
2494     if ($update !== true) {
2495     //
2496     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2497     return false;
2498     }
2499     }
2500    
2501 jymadier 4441 // Si l'instruction initiale a une lettre type liée
2502     if ($instruction->valF['lettretype'] !== ''
2503     && $instruction->valF['lettretype'] !== null) {
2504    
2505     // Affichage du récépissé de la demande
2506     $this -> addToMessage("<a
2507     class='lien' id='link_demande_recepisse'
2508     title=\""._("Telecharger le recepisse de la demande")."\"
2509 softime 7996 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
2510 jymadier 4441 $this->valF[$this->clePrimaire]."' target='_blank'>
2511     <span
2512     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2513     title=\""._("Telecharger le recepisse de la demande")."\">".
2514     _("Telecharger le recepisse de la demande").
2515     "</span>".
2516     _("Telecharger le recepisse de la demande")."
2517     </a><br/>");
2518     }
2519     }
2520    
2521 fmichon 4708 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2522     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2523    
2524     /**
2525     * Option de numérisation.
2526     */
2527     // Si l'option est activée
2528     if ($this->f->is_option_digitalization_folder_enabled() === true) {
2529 mbroquet 3730 // Création du répertoire de numérisation pour le dossier en
2530     // question.
2531     $ret = $inst_di->create_or_touch_digitalization_folder();
2532     // Si la création a échouée
2533     if ($ret !== true) {
2534     //
2535     $this->msg = "";
2536     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
2537     return false;
2538     }
2539     }
2540    
2541 fmichon 4708 /**
2542     * Interface avec le référentiel ERP.
2543     *
2544     * (WS->ERP)[109] Retrait de la demande -> AT
2545     * Déclencheur :
2546     * - L'option ERP est activée
2547     * - Le dossier est de type AT
2548     * - Le dossier est marqué comme "connecté au référentiel ERP"
2549     * - Le formulaire d'ajout de demande est validé avec un type de
2550     * demande correspondant à une demande de retrait
2551     */
2552 mbroquet 3730 //
2553 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2554 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2555     && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2556     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
2557     //
2558     $infos = array(
2559     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2560     );
2561     //
2562     $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
2563     if ($ret !== true) {
2564     $this->cleanMessage();
2565     $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
2566     return false;
2567     }
2568     $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
2569     }
2570    
2571     /**
2572     * Interface avec le référentiel ERP.
2573     *
2574     * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
2575     * Déclencheur :
2576     * - L'option ERP est activée
2577     * - Le dossier est de type AT
2578     * - Le dossier est marqué comme "connecté au référentiel ERP"
2579     * - Le formulaire d'ajout de demande est validé avec un type de
2580     * demande correspondant à un dépôt de pièces
2581     */
2582     //
2583 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2584 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2585     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2586     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
2587 softime 6391 // Définit le type de pièce par l'état du dossier
2588     $type_piece = "supplementaire";
2589     if ($etat_di_before_instr === 'incomplet') {
2590     $type_piece = "complementaire";
2591     }
2592 fmichon 4708 //
2593     $infos = array(
2594     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2595 softime 6391 "type_piece" => $type_piece,
2596 fmichon 4708 );
2597     //
2598     $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
2599     if ($ret !== true) {
2600     $this->cleanMessage();
2601     $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
2602     return false;
2603     }
2604     $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
2605     }
2606    
2607     /**
2608     * Interface avec le référentiel ERP.
2609     *
2610     * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
2611     * Déclencheur :
2612     * - L'option ERP est activée
2613     * - Le dossier est de type AT
2614     * - Le dossier est marqué comme "connecté au référentiel ERP"
2615     * - Le formulaire d'ajout de demande est validé avec un type de
2616     * demande correspondant à une demande de visite d'ouverture ERP
2617     */
2618     //
2619 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2620 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2621     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2622     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
2623     //
2624     $infos = array(
2625     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2626     );
2627     //
2628     $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
2629     if ($ret !== true) {
2630     $this->cleanMessage();
2631     $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
2632     return false;
2633     }
2634     $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
2635     }
2636    
2637     /**
2638     * Interface avec le référentiel ERP.
2639     *
2640     * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
2641     * Déclencheur :
2642     * - L'option ERP est activée
2643     * - Le dossier est de type PC
2644     * - Le dossier est marqué comme "connecté au référentiel ERP"
2645     * - Le formulaire d'ajout de demande est validé avec un type de
2646     * demande correspondant à une demande de visite d'ouverture ERP
2647     */
2648     //
2649 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2650 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2651     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2652     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
2653     //
2654     $infos = array(
2655     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2656     );
2657     //
2658     $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
2659     if ($ret !== true) {
2660     $this->cleanMessage();
2661     $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
2662     return false;
2663     }
2664     $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
2665     }
2666    
2667     //
2668 mbroquet 3730 return true;
2669     }
2670 fmichon 4708
2671     /**
2672     * Récupère l'état d'un dossier d'instruction
2673     * @param $idxDossier L'identifiant du dossier d'instruction
2674     * @return L'état du dossier d'instruction
2675     */
2676     function getEtatDossier($idxDossier){
2677    
2678     $etat = "";
2679    
2680     $sql = "SELECT etat.etat
2681     FROM ".DB_PREFIXE."etat
2682     LEFT JOIN
2683     ".DB_PREFIXE."dossier
2684     ON
2685     dossier.etat = etat.etat
2686     WHERE dossier.dossier = '".$idxDossier."'";
2687 softime 8989 $etat = $this->f->db->getOne($sql);
2688 fmichon 4708 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2689     // Si une erreur survient on die
2690     if (database::isError($etat, true)) {
2691     // Appel de la methode de recuperation des erreurs
2692     $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
2693     }
2694    
2695     return $etat;
2696     }
2697    
2698 softime 8989 /**
2699     * TRIGGER - triggermodifierapres.
2700     *
2701     * - Ajout du lien demande / demandeur(s)
2702     *
2703     * @return boolean
2704     */
2705     function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2706     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2707     //
2708     $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
2709     if ($this->insertLinkDemandeDemandeur() == false) {
2710 mbroquet 3730 return false;
2711     }
2712     $this->valIdDemandeur=$this->postedIdDemandeur;
2713    
2714     //
2715     return true;
2716     }
2717    
2718 softime 6565
2719 mbroquet 3730 /**
2720 softime 6565 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
2721     * dossier de recours.
2722     *
2723     * @return, [type] [description]
2724     */
2725     function ajoutLienDossierConteste() {
2726     // Création des liens entre le dossier instruction créé et le dossier
2727     // contesté
2728 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
2729     "obj" => "lien_dossier_dossier",
2730     "idx" => "]",
2731     ));
2732 softime 6565 // Préparation des valeurs à mettre en base
2733     $val['lien_dossier_dossier'] = "";
2734     $val['dossier_src'] = $this->valF['dossier_instruction'];
2735     $val['dossier_cible'] = $this->valF["autorisation_contestee"];
2736     $val['type_lien'] = 'auto_recours';
2737    
2738 softime 8989 return $ldd->ajouter($val);
2739 softime 6565 }
2740    
2741    
2742     /**
2743 mbroquet 3730 * Gestion des liens entre les lots du DA et le nouveau dossier
2744     **/
2745 softime 8989 function lienLotDossierInstruction($id, $val) {
2746 softime 7996 $lot = $this->f->get_inst__om_dbform(array(
2747     "obj" => "lot",
2748     "idx" => "]",
2749     ));
2750     $lld = $this->f->get_inst__om_dbform(array(
2751     "obj" => "lien_lot_demandeur",
2752     "idx" => "]",
2753     ));
2754 mbroquet 3730
2755    
2756     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
2757     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
2758 softime 8989 $resLot = $this->f->db->query($sqlLots);
2759 mbroquet 3730 $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
2760     $this->f->isDatabaseError($resLot);
2761     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
2762     // Insertion du nouveau lot
2763     $valLot['lot'] = "";
2764     $valLot['libelle'] = $rowLot['libelle'];
2765     $valLot['dossier_autorisation'] = null;
2766     $valLot['dossier'] = $this->valF['dossier_instruction'];
2767 softime 8989 $lot->ajouter($valLot);
2768 mbroquet 3730
2769     //Insertion des liens entre dossier et les lots
2770     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
2771     WHERE lot = ".$rowLot['lot'];
2772 softime 8989 $res = $this->f->db->query($sqlDemandeurs);
2773 mbroquet 3730 $this->f->addToLog(
2774 softime 8989 __METHOD__."(): db->query(\"".$sqlDemandeurs."\");",
2775 mbroquet 3730 VERBOSE_MODE
2776     );
2777     if ($this->f->isDatabaseError($res, true)) {
2778     return false;
2779     }
2780    
2781     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2782     $valLld["lien_lot_demandeur"] = "";
2783     $valLld["lot"]=$lot->valF['lot'];
2784     $valLld["demandeur"] = $row['demandeur'];
2785     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
2786 softime 8989 if ($lld->ajouter($valLld) === false) {
2787 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
2788     return false;
2789     }
2790     }
2791    
2792     // Récupération des données techniques du nouveau lots
2793 softime 8989 if ($this->ajoutDonneesTechniquesLots($id, $val, $rowLot['lot'], $lot->valF['lot']) === false) {
2794     $this->addToMessage(
2795 mbroquet 3730 _("Erreur lors de l'enregistrement de la demande.")." ".
2796     _("Contactez votre administrateur.")
2797     );
2798     $this->correct = false;
2799     $this->f->addToLog(
2800 softime 8989 __METHOD__."(): ERROR ajoutDonneesTechniquesLots",
2801 mbroquet 3730 DEBUG_MODE
2802 softime 8989 );
2803 mbroquet 3730 return false;
2804     }
2805    
2806     }
2807    
2808     //
2809     return true;
2810     }
2811    
2812    
2813     /**
2814     * Méthode permettant d'ajouter les données techniques d'un lot.
2815     *
2816     * @param integer $id identifiant de la demande
2817     * @param array $val tableau de valeurs postées via le formulaire
2818     * @param integer $lotInit identifiant de lot initial
2819     * @param integer $lotDest identifiant du lot qui va recevoir les données
2820     *
2821     * @return boolean false si erreur
2822     */
2823 softime 8989 function ajoutDonneesTechniquesLots($id, $val, $lotInit, $lotDest) {
2824 mbroquet 3730 // Requete permettant de recupérer les données techniques du lot passé
2825     // en paramètre ($lotInit)
2826     $sql_get_dt = "
2827     SELECT donnees_techniques
2828     FROM ".DB_PREFIXE."donnees_techniques
2829     WHERE lot=".$lotInit;
2830     $id_dt = $this->f->db->getOne($sql_get_dt);
2831     // Si des données techniques sont liées au lots on les "copie" et
2832     // on les lies au lot passé en paramètre (lotDest)
2833     if(isset($id_dt) and !empty($id_dt)) {
2834     $this->f->addToLog(
2835 softime 8989 __METHOD__."(): db->getone(\"".$sql_get_dt."\");",
2836 mbroquet 3730 VERBOSE_MODE
2837     );
2838     if ($this->f->isDatabaseError($id_dt, true)){
2839     $this->f->addToLog(
2840 softime 8989 __METHOD__."(): ERROR",
2841 mbroquet 3730 DEBUG_MODE
2842 softime 8989 );
2843 mbroquet 3730 return false;
2844     }
2845 softime 7996 $donnees_techniques = $this->f->get_inst__om_dbform(array(
2846     "obj" => "donnees_techniques",
2847     "idx" => $id_dt,
2848     ));
2849 mbroquet 3730
2850     // Récupération des données dans le tableau des valeurs à insérer
2851     foreach($donnees_techniques->champs as $value) {
2852     $val[$value] = $donnees_techniques->getVal($value);
2853     }
2854     // Modification du lien vers le nouveau lot
2855     $val["lot"] = $lotDest;
2856     // Identifiant du cerfa
2857     $val['cerfa'] = $this->getIdCerfa();
2858     // Ajout des données techniques
2859 softime 8989 if($donnees_techniques->ajouter($val) === false) {
2860 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
2861     return false;
2862     }
2863     }
2864    
2865     //
2866     return true;
2867     }
2868    
2869     /**
2870     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2871     **/
2872 softime 8989 function insertLinkDemandeDemandeur() {
2873 mbroquet 3730
2874     //
2875 softime 6565 $types_demandeur = array(
2876     "petitionnaire_principal",
2877     "delegataire",
2878     "petitionnaire",
2879     "plaignant_principal",
2880     "plaignant",
2881     "contrevenant_principal",
2882     "contrevenant",
2883     "requerant_principal",
2884     "requerant",
2885     "avocat_principal",
2886     "avocat",
2887 softime 7067 "bailleur_principal",
2888     "bailleur",
2889 softime 6565 );
2890     foreach ($types_demandeur as $type) {
2891     // Comparaison des autres demandeurs
2892     if(isset($this->postedIdDemandeur[$type]) === true) {
2893     // Suppression des liens non valides
2894     foreach ($this->valIdDemandeur[$type] as $demandeur) {
2895     // Demandeur
2896     if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
2897 softime 8989 if ($this->deleteLinkDemandeDemandeur($demandeur) == false) {
2898 softime 6565 //
2899     return false;
2900     }
2901 mbroquet 3730 }
2902 softime 6565
2903 mbroquet 3730 }
2904 softime 6565 // Ajout des nouveaux liens
2905     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
2906     if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
2907     $principal = false;
2908     if(strpos($type, '_principal') !== false) {
2909     $principal = true;
2910     }
2911 softime 8989 if ($this->addLinkDemandeDemandeur($demandeur, $principal) == false) {
2912 softime 6565 //
2913     return false;
2914     }
2915 mbroquet 3730 }
2916     }
2917     }
2918     }
2919    
2920     //
2921     return true;
2922     }
2923    
2924    
2925     /**
2926     * Fonction permettant d'ajouter un lien
2927     * entre la table demande et demandeur
2928     **/
2929 softime 8989 function addLinkDemandeDemandeur($id, $principal) {
2930 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
2931     "obj" => "lien_demande_demandeur",
2932     "idx" => "]",
2933     ));
2934 mbroquet 3730 $lien = array('lien_demande_demandeur' => "",
2935     'petitionnaire_principal' => (($principal)?"t":"f"),
2936     'demande' => $this->valF['demande'],
2937     'demandeur' => $id);
2938 softime 8989 if ($lienAjout->ajouter($lien) === false) {
2939 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
2940     return false;
2941     }
2942    
2943     //
2944     return true;
2945     }
2946    
2947     /**
2948     * Fonction permettant de supprimer un lien
2949     * entre la table demande et demandeur
2950     **/
2951 softime 8989 function deleteLinkDemandeDemandeur($id) {
2952 mbroquet 3730 // Suppression
2953     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
2954     "WHERE demande=".$this->valF['demande'].
2955     " AND demandeur=".$id;
2956     // Execution de la requete de suppression de l'objet
2957 softime 8989 $res = $this->f->db->query($sql);
2958 mbroquet 3730 // Logger
2959 softime 8989 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
2960 mbroquet 3730 if ($this->f->isDatabaseError($res, true)){
2961     return false;
2962     }
2963    
2964     //
2965     return true;
2966     }
2967    
2968     /*
2969     * Teste si le lien entre une demande et un demandeur existe
2970     * */
2971     function isLinkDemandeDemandeurExist($idDemandeur) {
2972     $sql = "SELECT count(*)
2973     FROM ".DB_PREFIXE."lien_demande_demandeur
2974     WHERE demande = ".$this->valF['demande'].
2975     "AND demandeur = ".$idDemandeur;
2976     $count = $this->f->db->getOne($sql);
2977 softime 8989 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
2978 mbroquet 3730 $this->f->isDatabaseError($count);
2979     if ($count === 0) {
2980 softime 8989 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
2981 mbroquet 3730 return false;
2982     } else {
2983     return true;
2984     }
2985    
2986     }
2987    
2988     /**
2989     * Methode de recupération des valeurs postées
2990     **/
2991     function getPostedValues() {
2992     // Récupération des demandeurs dans POST
2993 softime 6565 $types_demandeur = array(
2994     "petitionnaire_principal",
2995     "delegataire",
2996     "petitionnaire",
2997     "plaignant_principal",
2998     "plaignant",
2999     "contrevenant_principal",
3000     "contrevenant",
3001     "requerant_principal",
3002     "requerant",
3003     "avocat_principal",
3004     "avocat",
3005 softime 7067 "bailleur_principal",
3006     "bailleur",
3007 softime 6565 );
3008     foreach ($types_demandeur as $type) {
3009     if($this->f->get_submitted_post_value($type) !== null AND
3010     $this->f->get_submitted_post_value($type) != '') {
3011     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
3012 mbroquet 3730 }
3013     }
3014     }
3015    
3016     /**
3017     * Méthode permettant de récupérer les id des demandeurs liés à la table
3018     * liée passée en paramètre
3019     *
3020     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
3021     * @param string $id Identifiant (clé primaire de la table liée en question)
3022     */
3023     function listeDemandeur($from, $id) {
3024     // Récupération des demandeurs de la base
3025     $sql = "SELECT demandeur.demandeur,
3026     demandeur.type_demandeur,
3027     lien_".$from."_demandeur.petitionnaire_principal
3028     FROM ".DB_PREFIXE."lien_".$from."_demandeur
3029     INNER JOIN ".DB_PREFIXE."demandeur
3030     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
3031     WHERE ".$from." = '".$id."'";
3032     $res = $this->f->db->query($sql);
3033     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
3034     $this->f->isDatabaseError($res);
3035     // Stockage du résultat dans un tableau
3036     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3037 softime 6565 $demandeur_type = $row['type_demandeur'];
3038     if ($row['petitionnaire_principal'] == 't'){
3039     $demandeur_type .= "_principal";
3040 mbroquet 3730 }
3041 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
3042 mbroquet 3730 }
3043     }
3044    
3045    
3046     /**
3047     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3048     * d'instruction existant
3049     */
3050     function retour($premier = 0, $recherche = "", $tricol = "") {
3051    
3052     echo "\n<a class=\"retour\" ";
3053     echo "href=\"";
3054     //
3055     if($this->getParameter("idx_dossier") != "") {
3056 softime 7996 echo OM_ROUTE_TAB;
3057     echo "&obj=recherche_dossier";
3058 mbroquet 3730
3059     } else {
3060     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3061 softime 7996 echo OM_ROUTE_FORM;
3062 mbroquet 3730 } else {
3063 softime 7996 echo OM_ROUTE_TAB;
3064 mbroquet 3730 }
3065 softime 7996 echo "&obj=".$this->get_absolute_class_name();
3066 mbroquet 3730 if($this->getParameter("retour")=="form") {
3067     echo "&amp;idx=".$this->getParameter("idx");
3068     echo "&amp;action=3";
3069     }
3070     }
3071     echo "&amp;premier=".$this->getParameter("premier");
3072     echo "&amp;tricol=".$this->getParameter("tricol");
3073     echo "&amp;advs_id=".$this->getParameter("advs_id");
3074     echo "&amp;valide=".$this->getParameter("valide");
3075     //
3076     echo "\"";
3077     echo ">";
3078     //
3079     echo _("Retour");
3080     //
3081     echo "</a>\n";
3082    
3083     }
3084    
3085    
3086     /**
3087     * Cette méthode permet d'afficher des informations spécifiques dans le
3088     * formulaire de l'objet
3089     *
3090     * @param integer $maj Mode de mise à jour
3091     */
3092     function formSpecificContent($maj) {
3093 softime 6565 // Tableau des demandeurs selon le contexte
3094     $listeDemandeur = $this->valIdDemandeur;
3095 mbroquet 3730 /**
3096     * Gestion du bloc des demandeurs
3097     */
3098     // Si le mode est (modification ou suppression ou consultation) ET que
3099     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
3100     // actif)
3101 softime 6565 if ($this->correct !== true AND
3102 softime 7996 $this->getParameter('validation') == 0 AND
3103     $this->getParameter("maj") != 0) {
3104 mbroquet 3730 // Alors on récupère les demandeurs dans la table lien pour
3105 softime 6565 // affectation des résultats dans $this->valIdDemandeur
3106 mbroquet 3730 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3107 softime 6565 $listeDemandeur = $this->valIdDemandeur;
3108 mbroquet 3730 }
3109    
3110 softime 6565 // Récupération des valeurs postées
3111 softime 7996 if ($this->getParameter('validation') != 0) {
3112 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
3113     }
3114    
3115 mbroquet 3730 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3116     // correct (c'est-à-dire que le formulaire est actif)
3117 softime 6565 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3118 mbroquet 3730 // Alors on positionne le marqueur linkable a true qui permet
3119     // d'afficher ou non les actions de gestion des demandeurs
3120     $linkable = true;
3121     } else {
3122     // Sinon on positionne le marqueur linkable a false qui permet
3123     // d'afficher ou non les actions de gestion des demandeurs
3124     $linkable = false;
3125     }
3126    
3127     // Affichage des demandeurs et des actions
3128     // Conteneur de la listes des demandeurs
3129     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3130     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
3131     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3132 softime 6565 ._("Demandeurs")."</legend>";
3133    
3134 mbroquet 3730 // Affichage du bloc pétitionnaire principal / délégataire
3135     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3136     echo "<div id=\"petitionnaire_principal_delegataire\">";
3137 softime 6565 // Affichage de la synthèse du pétitionnaire principal
3138     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
3139 mbroquet 3730 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3140     echo "<div id=\"delegataire\">";
3141 softime 6565 // Affichage de la synthèse du délégataire
3142     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
3143 mbroquet 3730 echo "</div>";
3144     echo "<div class=\"both\"></div>";
3145     echo "</div>";
3146     // Bloc des pétitionnaires secondaires
3147     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3148     echo "<div id=\"listePetitionnaires\">";
3149 softime 6565 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
3150 mbroquet 3730 echo "</div>";
3151 softime 7067
3152     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
3153     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3154     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
3155     // Doit être utilisé avec la div petitionnaire_principal_delegataire
3156     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
3157     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3158     echo "<div id=\"bailleur_principal\">";
3159     // Affichage de la synthèse
3160     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
3161     echo "</div>";
3162     echo "<div id=\"listeAutresBailleurs\">";
3163     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
3164     echo "</div>";
3165     echo "</div>";
3166     echo "</div>";
3167 softime 6565
3168     echo "<div id=\"plaignant_contrevenant\">";
3169     // Affichage du bloc contrevenant
3170     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3171     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
3172     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3173     echo "<div id=\"contrevenant_principal\">";
3174     // Affichage de la synthèse
3175     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
3176     echo "</div>";
3177     echo "<div id=\"listeAutresContrevenants\">";
3178     // Affichage de la synthèse
3179     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
3180     echo "</div>";
3181     echo "</div>";
3182     // Affichage du bloc plaignant
3183     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3184     echo "<div id=\"listePlaignants\" class=\"col_12\">";
3185     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3186     echo "<div id=\"plaignant_principal\">";
3187     // Affichage de la synthèse
3188     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
3189     echo "</div>";
3190     echo "<div id=\"listeAutresPlaignants\">";
3191     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
3192     echo "</div>";
3193     echo "</div>";
3194     echo "</div>";
3195     echo "<div id=\"requerant_avocat\">";
3196     // Affichage du bloc requérant
3197     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3198     echo "<div id=\"listeRequerants\" class=\"col_12\">";
3199     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3200     echo "<div id=\"requerant_principal\">";
3201     // Affichage de la synthèse
3202     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
3203     echo "</div>";
3204     echo "<div id=\"listeAutresRequerants\">";
3205     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
3206     echo "</div>";
3207     echo "</div>";
3208     // Affichage du bloc avocat
3209     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3210     echo "<div id=\"listeAvocat\" class=\"col_12\">";
3211     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3212     echo "<div id=\"avocat_principal\">";
3213     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
3214     echo "</div>";
3215     echo "<div id=\"listeAutresAvocats\">";
3216     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
3217     echo "</div>";
3218     echo "</div>";
3219     echo "</div>";
3220 mbroquet 3730 echo "</fieldset>";
3221     // Champ flag permettant de récupérer la valeur de l'option sig pour
3222     // l'utiliser en javascript, notamment lors du chargement de l'interface
3223     // pour les références cadastrales
3224     // XXX Si un widget pour les références cadastrales existait, il n'y
3225     // aurait pas besoin de faire cela
3226     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
3227     echo "</div>";
3228     }
3229 softime 6565
3230     function displaySyntheseDemandeur($listeDemandeur, $type) {
3231     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3232     // correct (c'est-à-dire que le formulaire est actif)
3233 softime 7366 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3234 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
3235     // d'afficher ou non les actions de gestion des demandeurs
3236     $linkable = true;
3237     } else {
3238     // Sinon on positionne le marqueur linkable a false qui permet
3239     // d'afficher ou non les actions de gestion des demandeurs
3240     $linkable = false;
3241     }
3242     // Récupération du type de demandeur pour l'affichage
3243     switch ($type) {
3244     case 'petitionnaire_principal':
3245     $legend = _("Petitionnaire principal");
3246     break;
3247 mbroquet 3730
3248 softime 6565 case 'delegataire':
3249     $legend = _("Autre correspondant");
3250     break;
3251    
3252     case 'petitionnaire':
3253     $legend = _("Petitionnaire");
3254     break;
3255    
3256     case 'contrevenant_principal':
3257     $legend = _("Contrevenant principal");
3258     break;
3259    
3260     case 'contrevenant':
3261     $legend = _("Autre contrevenant");
3262     break;
3263    
3264     case 'plaignant_principal':
3265     $legend = _("Plaignant principal");
3266     break;
3267    
3268     case 'plaignant':
3269     $legend = _("Autre plaignant");
3270     break;
3271    
3272     case 'requerant_principal':
3273     $legend = _("Requérant principal");
3274     break;
3275    
3276     case 'requerant':
3277     $legend = _("Autre requérant");
3278     break;
3279    
3280     case 'avocat_principal':
3281     $legend = _("Avocat principal");
3282     break;
3283    
3284     case 'avocat':
3285     $legend = _("Autre avocat");
3286     break;
3287 softime 7067
3288     case 'bailleur_principal':
3289     $legend = _("Bailleur principal");
3290     break;
3291    
3292     case 'bailleur':
3293     $legend = _("Autre bailleur");
3294     break;
3295 softime 6565 }
3296     foreach ($listeDemandeur[$type] as $demandeur_id) {
3297     $obj = str_replace('_principal', '', $type);
3298 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
3299     "obj" => $obj,
3300     "idx" => $demandeur_id,
3301     ));
3302 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
3303     $demandeur -> __destruct();
3304     }
3305     // Si en édition de formulaire
3306     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3307     // Bouton d'ajout du avocat
3308     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3309     echo "<span id=\"add_".$type."\"
3310     class=\"om-form-button add-16\">".
3311     $legend.
3312     "</span>";
3313     }
3314     }
3315    
3316 mbroquet 3730 // {{{
3317    
3318     // getter
3319     function getValIdDemandeur() {
3320     return $this->valIdDemandeur;
3321     }
3322     // setter
3323     function setValIdDemandeur($valIdDemandeur) {
3324     $this->valIdDemandeur = $valIdDemandeur;
3325     }
3326 softime 8989
3327     /**
3328     * TRIGGER - triggersupprimer.
3329     *
3330     * - Supression du lien entre la demandeur et le(s) demandeur(s)
3331     *
3332     * @return boolean
3333     */
3334     function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3335     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3336 mbroquet 3730 //Création de la requête
3337     $sql = "DELETE FROM
3338     ".DB_PREFIXE."lien_demande_demandeur
3339     WHERE
3340     demande = $id";
3341    
3342     $res = $this->f->db->query($sql);
3343 softime 8989 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")", VERBOSE_MODE);
3344 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
3345     return false;
3346     }
3347    
3348     //
3349     return true;
3350     }
3351 softime 8989
3352 mbroquet 3730 // }}}
3353    
3354     /**
3355     * Récupère le champ "qualification" du type de la demande
3356     * @param integer $demande_type Identifiant du type de la demande
3357     * @return boolean
3358     */
3359     function get_qualification($demande_type) {
3360    
3361     // Initialise le résultat
3362     $qualification = "";
3363    
3364     // Si la condition existe
3365     if (is_numeric($demande_type)) {
3366    
3367     // Requête SQL
3368     $sql = "SELECT qualification
3369     FROM ".DB_PREFIXE."demande_type
3370     WHERE demande_type = $demande_type";
3371 softime 8989 $qualification = $this->f->db->getOne($sql);
3372 mbroquet 3730 $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
3373     VERBOSE_MODE);
3374     $this->f->isDatabaseError($qualification);
3375     }
3376    
3377     // Retourne le résultat
3378     return $qualification;
3379     }
3380    
3381 softime 8329 /**
3382     * Récupère le champ "regeneration_cle_citoyen" du type de la demande.
3383     *
3384     * @param integer $demande_type Identifiant du type de la demande.
3385     *
3386     * @return boolean
3387     */
3388     function get_demande_type_regeneration_cle_citoyen($demande_type) {
3389     // Initialise le résultat
3390     $regeneration_cle_citoyen = false;
3391    
3392     // Récupère le champ depuis la demande type
3393     $inst_demande_type = $this->f->get_inst__om_dbform(array(
3394     "obj" => "demande_type",
3395     "idx" => $demande_type,
3396     ));
3397     if ($inst_demande_type->getVal('regeneration_cle_citoyen') === 't') {
3398     $regeneration_cle_citoyen = true;
3399     }
3400    
3401     // Retourne le résultat
3402     return $regeneration_cle_citoyen;
3403     }
3404    
3405 mbroquet 3730 /**
3406     * Récupère les champs archive_* d'une instruction
3407     * @param string $dossier L'identifiant du dossier d'instruction
3408     */
3409     public function getArchiveInstruction($dossierID){
3410    
3411     //On récupère les données du dernier DI accordé
3412     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3413     dossier.avis_decision,
3414     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
3415 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
3416 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3417     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3418     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3419     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3420     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3421     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3422     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3423     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3424     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3425     dossier.incompletude,
3426     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3427     dossier.etat_pendant_incompletude,
3428     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3429     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3430 softime 6565 ,dossier.dossier, dossier.incomplet_notifie,
3431     to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3432     to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3433     to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3434     to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3435     to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3436     to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3437 softime 8593 to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet,
3438 softime 8989 dossier.dossier_instruction_type as dossier_instruction_type,
3439     to_char(dossier.date_affichage, 'DD/MM/YYYY') as date_affichage
3440 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3441     LEFT JOIN ".DB_PREFIXE."avis_decision
3442     ON dossier.avis_decision = avis_decision.avis_decision
3443     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3444     AND dossier.dossier_autorisation = (
3445     SELECT dossier_autorisation.dossier_autorisation
3446     FROM ".DB_PREFIXE."dossier_autorisation
3447     LEFT JOIN ".DB_PREFIXE."dossier
3448     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3449     WHERE dossier = '".$dossierID."')
3450     ORDER BY dossier.version DESC";
3451    
3452 softime 8989 $res = $this->f->db->query($sql);
3453 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3454     if ($this->f->isDatabaseError($res, true)) {
3455     return false;
3456     }
3457    
3458     //Un des dosssiers d'instruction a été accordé, on récupère ses données
3459     if ( $res->numrows() != 0 ){
3460    
3461     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3462 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3463     "obj" => "instruction",
3464     "idx" => "]",
3465     ));
3466 mbroquet 3730
3467     $instruction->setParameter("maj", 1);
3468     $instruction->updateArchiveData($row);
3469     return $instruction->valF;
3470     }
3471     //Sinon, on prend les données du P0, si ce n'est pas un P0
3472     else {
3473     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3474     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3475     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3476     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3477     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3478     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3479     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3480     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3481 softime 6565 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot,
3482     dossier.date_cloture_instruction, dossier.date_premiere_visite,
3483     dossier.date_derniere_visite, dossier.date_contradictoire,
3484     dossier.date_retour_contradictoire, dossier.date_ait,
3485 softime 8989 dossier.date_transmission_parquet, dossier.dossier_instruction_type,
3486     dossier.date_affichage
3487 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3488     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3489     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3490     WHERE dossier.dossier_autorisation = (
3491     SELECT dossier_autorisation.dossier_autorisation
3492     FROM ".DB_PREFIXE."dossier_autorisation
3493     LEFT JOIN ".DB_PREFIXE."dossier
3494     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3495     WHERE dossier = '".$dossierID."')
3496     AND dossier_instruction_type.code = 'P'
3497     ORDER BY dossier.version DESC";
3498 softime 8989 $res = $this->f->db->query($sql);
3499 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3500     if ($this->f->isDatabaseError($res, true)) {
3501     return false;
3502     }
3503    
3504     //On est pas dans le cas d'un dépôt d'un P0
3505     if ( $res->numrows() != 0 ){
3506     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3507 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3508     "obj" => "instruction",
3509     "idx" => "]",
3510     ));
3511 mbroquet 3730 $instruction->setParameter("maj", 1);
3512     $instruction->updateArchiveData($row);
3513     return $instruction->valF;
3514     }
3515     }
3516     }
3517    
3518     /**
3519     * Cette methode permet d'afficher le bouton de validation du formulaire
3520     *
3521     * @param integer $maj Mode de mise a jour
3522     * @return void
3523     */
3524     function bouton($maj) {
3525    
3526     if (!$this->correct
3527     && $this->checkActionAvailability() == true) {
3528     //
3529     switch($maj) {
3530     case 0 :
3531     $bouton = _("Ajouter");
3532     break;
3533     case 1 :
3534     $bouton = _("Modifier");
3535     break;
3536     case 2 :
3537     $bouton = _("Supprimer");
3538     break;
3539     default :
3540     // Actions specifiques
3541     if ($this->get_action_param($maj, "button") != null) {
3542     //
3543     $bouton = $this->get_action_param($maj, "button");
3544     } else {
3545     //
3546     $bouton = _("Valider");
3547     }
3548     break;
3549     }
3550     //
3551     $params = array(
3552     "value" => $bouton,
3553     "name" => "submit",
3554     "onclick"=>"return getDataFieldReferenceCadastrale();",
3555     );
3556     //
3557     $this->f->layout->display_form_button($params);
3558     }
3559    
3560     }
3561    
3562     /**
3563     * Récupère l'instance de la classe taxe_amenagement.
3564     *
3565     * @param integer $om_collectivite La collectivité
3566     *
3567     * @return object
3568     */
3569     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
3570     //
3571 softime 6929 if ($this->inst_taxe_amenagement === null) {
3572 mbroquet 3730 //
3573     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
3574 softime 6929
3575     // Si aucun paramétrage de taxe trouvé et que la collectivité
3576     // est mono
3577     if ($taxe_amenagement === null
3578     && $this->f->isCollectiviteMono($om_collectivite) === true) {
3579     // Récupère la collectivité multi
3580     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
3581     //
3582     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
3583     }
3584    
3585 mbroquet 3730 //
3586 softime 6929 if ($taxe_amenagement === null) {
3587     //
3588     return null;
3589     }
3590    
3591     //
3592 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
3593     "obj" => "taxe_amenagement",
3594     "idx" => $taxe_amenagement,
3595     ));
3596 mbroquet 3730 }
3597     //
3598     return $this->inst_taxe_amenagement;
3599     }
3600    
3601     /**
3602     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3603     *
3604     * @param integer $om_collectivite La collectivité
3605     *
3606     * @return integer
3607     */
3608     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3609     //
3610 softime 6929 $taxe_amenagement = null;
3611 mbroquet 3730
3612 softime 6929 // Si la collectivité n'est pas renseigné
3613     if ($om_collectivite !== '' && $om_collectivite !== null) {
3614    
3615     // SQL
3616     $sql = "SELECT taxe_amenagement
3617     FROM ".DB_PREFIXE."taxe_amenagement
3618     WHERE om_collectivite = ".intval($om_collectivite);
3619     $taxe_amenagement = $this->f->db->getOne($sql);
3620     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3621     $this->f->isDatabaseError($taxe_amenagement);
3622     }
3623    
3624 mbroquet 3730 //
3625 softime 6929 return $taxe_amenagement;
3626 mbroquet 3730 }
3627    
3628    
3629     /**
3630 softime 6929 * Récupère l'instance du cerfa par le type détaillé du DA.
3631     *
3632     * @param integer $datd Identifiant du type détaillé du DA.
3633     *
3634     * @return object
3635     */
3636     protected function get_inst_cerfa_by_datd($datd = null) {
3637     //
3638     if ($this->inst_cerfa === null) {
3639     //
3640     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
3641     //
3642     $cerfa = $inst_datd->getVal('cerfa');
3643     //
3644     if ($cerfa !== '' && $cerfa !== null) {
3645     //
3646 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
3647     "obj" => "cerfa",
3648     "idx" => $cerfa,
3649     ));
3650 softime 6929 }
3651     }
3652    
3653     //
3654     return $this->inst_cerfa;
3655     }
3656    
3657    
3658     /**
3659 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
3660     *
3661     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3662     *
3663     * @return object
3664     */
3665 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3666 mbroquet 3730 //
3667     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3668     }
3669    
3670 nhaye 5254 }
3671 mbroquet 3730
3672 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26