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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26