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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26