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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2896 - (show annotations)
Mon Mar 31 09:14:14 2014 UTC (10 years, 10 months ago) by nhaye
File size: 39063 byte(s)
Correction du mauvais recalcul de l'état du DA

1 <?php
2 //$Id$
3 //gen openMairie le 14/11/2012 12:54
4
5 require_once ("../gen/obj/dossier_autorisation.class.php");
6
7 class dossier_autorisation extends dossier_autorisation_gen {
8
9
10 var $valIdDemandeur = array("petitionnaire_principal" => "",
11 "delegataire" => "",
12 "petitionnaire" => array());
13
14 function dossier_autorisation($id,&$db,$debug) {
15 $this->constructeur($id,$db,$debug);
16 }// fin constructeur
17
18
19 /**
20 * Assure que la date passee par reference soit en
21 * format attendu par la fonction dateDB du fichier
22 * core/om_dbform.class.php. Change le format de la
23 * date si necessaire.
24 * @param $string $field Le date dans format DB, ou
25 * celui attendu par setvalF
26 */
27 private function changeDateFormat(&$field) {
28 if (preg_match('/([0-9]{4})-([0-9]{2})-([0-9]{2})/',
29 $field, $matches)) {
30 $field = $matches[3].'/'.$matches[2].'/'.$matches[1];
31 }
32 }
33
34 function setvalF($val) {
35 // verifie que les dates envoyes au parent::setvalF sont ont
36 // bon format, et change le format si necessaire
37 $this->changeDateFormat($val['erp_date_ouverture']);
38 $this->changeDateFormat($val['erp_date_arrete_decision']);
39
40 parent::setvalF($val);
41
42 // si la valeur d'erp_arrete_decision n'etait pas set, laisse elle a null
43 if ($val['erp_arrete_decision'] == null) {
44 $this->valF['erp_arrete_decision'] = null;
45 }
46 // si la valeur d'erp_ouvert n'etait pas set, laisse elle a null
47 if ($val['erp_ouvert'] == null) {
48 $this->valF['erp_ouvert'] = null;
49 }
50 }
51
52 /**
53 * Méthode permettant de définir des valeurs à envoyer en base après
54 * validation du formulaire d'ajout.
55 * @param array $val tableau des valeurs retournées par le formulaire
56 */
57 function setValFAjout($val) {
58
59 // Récupération du type de dossier ou série
60 $sql = "SELECT da_t.code
61 FROM ".DB_PREFIXE."dossier_autorisation_type as da_t
62 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d
63 ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type
64 WHERE da_t_d.dossier_autorisation_type_detaille=".
65 $val['dossier_autorisation_type_detaille'].";";
66 //
67 $da_type_code = $this->db->getone($sql);
68 $this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE);
69 database::isError($da_type_code);
70 // Récupération du code département
71 $departement = $this->f->getParameter("departement");
72 // Récupération du code commune
73 $commune = $this->f->getParameter("commune");
74 // Récupération du numéro du dossier
75 $numero_dossier = $this->createNumeroDossier($da_type_code);
76 if($numero_dossier === false) {
77 return false;
78 }
79 $annee = date('y', strtotime($this->valF["depot_initial"]));
80 /// IDENTIFIANT DU DOSSIER
81 // PC 013 055 12 00001
82 $this->valF[$this->clePrimaire] =
83 $da_type_code.$departement.$commune.$annee.$numero_dossier;
84
85 // Identifiant du dossier d'autorisation lisible
86 // Ex : DP 013055 13 00002
87 $this->valF["dossier_autorisation_libelle"] =
88 $da_type_code." ".$departement.$commune." ".$annee." ".$numero_dossier;
89
90 }
91
92 // {{{
93 // getter
94 function getValIdDemandeur() {
95 return $this->valIdDemandeur;
96 }
97 // setter
98 function setValIdDemandeur($valIdDemandeur) {
99 $this->valIdDemandeur = $valIdDemandeur;
100 }
101 // }}}
102
103 /**
104 * Créée une numérotation pour le dossier à partir d'un numéro dans un séquence
105 * définie par le code du dossier_autorisation_type.
106 *
107 * @param string $datc type de dossier d'autorisation
108 * @return string numéro de dossier ou false.
109 */
110 function createNumeroDossier($datc) {
111
112 // Créer le code du dossier_autorisation_type associé au code du
113 // dossier_autorisation_type_detaille passé en paramètre.
114 if ( isset($datc) && is_string($datc) ){
115
116 // Récupère l'identifiant suivant dans la séquence correspondant au
117 // code passé en paramètre
118 $annee = date('y', strtotime($this->valF["depot_initial"]));
119 try {
120 $nextID = $this->db->nextId(
121 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee,
122 false);
123
124 if (PEAR::isError($nextID)) {
125 throw new Exception(
126 _("La sequence n'a pas ete mise a jour.")
127 );
128 }
129 $this->addToLog("createNumeroDossier(): db->nextId(
130 \"".DB_PREFIXE."dossier_".strtolower($datc).'_'.$annee."\");",
131 VERBOSE_MODE);
132 } catch (Exception $e) {
133 // Création de la sequence si elle n'existe pas
134 $res = $this->db->createSequence(
135 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee);
136 // Affichage du debug
137 $this->f->addToLog(
138 "createNumeroDossier(): db->createSequence(".DB_PREFIXE.
139 "\"dossier_".strtolower($datc).'_'.$annee."_seq\"
140 );", VERBOSE_MODE);
141
142 // Si une erreur est levé pour la création.
143 if (PEAR::isError($res)) {
144
145 // Appel de la methode de recuperation des erreurs
146 $this->erreur_db(
147 $res->getDebugInfo(),
148 $res->getMessage(),
149 'dossier_autorisation'
150 );
151 return false;
152 }
153
154 // Mise à jour de la sequence
155 // Récupération du code département
156 $dep = $this->f->getParameter("departement");
157 // Récupération du code commune
158 $com = $this->f->getParameter("commune");
159 // Vérification de la bonne configuration des paramètres
160 if($dep == "" or $com == "") {
161 $this->correct = false;
162 $this->addToMessage(
163 _("Erreur de parametrage. Contactez votre administrateur."));
164 }
165 // Récupération du dernier DA du typeDA passé en paramètre de
166 // l'année de dépôt
167 $sql_max_DA = "SELECT dossier_autorisation
168 FROM ".DB_PREFIXE."dossier_autorisation
169 WHERE dossier_autorisation
170 LIKE '".$datc.$dep.$com.$annee."%'
171 ORDER BY dossier_autorisation DESC";
172 $last_DA = $this->db->getone($sql_max_DA);
173 $this->f->addToLog(
174 "createNumeroDossier(): db->getone(\"".$sql_max_DA."\"
175 );", VERBOSE_MODE);
176 // Si une erreur est levé pour la création.
177 if (database::isError($last_DA)) {
178
179 // Appel de la methode de recuperation des erreurs
180 $this->erreur_db(
181 $nb_DA->getDebugInfo(),
182 $nb_DA->getMessage(),
183 'dossier_autorisation'
184 );
185 return false;
186 }
187 // Si au moins un dossier on récupère son id
188 if($last_DA != "") {
189 $id = intval(substr($last_DA, -5));
190
191 // Mise à jour de la sequence avec l'id recalculé
192 $sql_maj_seq = "SELECT setval('".DB_PREFIXE."dossier_".
193 strtolower($datc)."_".$annee."_seq',".$id.")";
194 $res_seq = $this->db->query($sql_maj_seq);
195 $this->f->addToLog(
196 "createNumeroDossier(): db->query(\"".$sql_maj_seq."\"
197 );", VERBOSE_MODE);
198 // Gestion d'erreurs
199 if (database::isError($res_seq)) {
200
201 // Appel de la methode de recuperation des erreurs
202 $this->erreur_db(
203 $res_seq->getDebugInfo(),
204 $res_seq->getMessage(),
205 'dossier_autorisation'
206 );
207 return false;
208 }
209 }
210
211 // Création du numéro de dossier
212 $nextID = $this->db->nextId(
213 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee,
214 false);
215 $this->f->addToLog(
216 "createNumeroDossier(): db->nextId(\"".
217 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee."\"
218 );", VERBOSE_MODE);
219 // Gestion des erreurs
220 if (PEAR::isError($nextID)) {
221 // Appel de la methode de recuperation des erreurs
222 $this->erreur_db(
223 $res_seq->getDebugInfo(),
224 $res_seq->getMessage(),
225 'dossier_autorisation'
226 );
227 return false;
228 }
229 }
230
231 $numero_dossier = str_pad($nextID, 5, "0", STR_PAD_LEFT);
232 }
233
234 return $numero_dossier;
235 }
236
237 /**
238 * Méthode permettant de récupérer les id des demandeur liés à la demande ou
239 * liés au dossier d'autorisation
240 **/
241 function listeDemandeur($from, $id) {
242 // Récupération des demandeurs de la base
243 $sql = "SELECT demandeur.demandeur,
244 demandeur.type_demandeur,
245 lien_".$from."_demandeur.petitionnaire_principal
246 FROM ".DB_PREFIXE."lien_".$from."_demandeur
247 INNER JOIN ".DB_PREFIXE."demandeur
248 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
249 WHERE ".$from." = '".$id."'";
250 $res = $this->f->db->query($sql);
251 $this->f->addToLog("listeDemandeur() : db->query(\"".$sql."\")", VERBOSE_MODE);
252 if ( database::isError($res)){
253 die();
254 }
255 // Stoquage du résultat dans un tableau
256 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
257 if ($row['petitionnaire_principal'] == 't' AND
258 $row['type_demandeur']=="petitionnaire") {
259 $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
260 } elseif ($row['petitionnaire_principal'] == 'f' AND
261 $row['type_demandeur']=="petitionnaire"){
262 $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
263 } elseif ($row['type_demandeur']=="delegataire"){
264 $this->valIdDemandeur['delegataire']=$row['demandeur'];
265 }
266 }
267 }
268
269 /**
270 * Ajout de la liste des demandeurs
271 */
272 function formSpecificContent($maj) {
273 if(!$this->correct AND $maj != 0) {
274 $this->listeDemandeur("dossier_autorisation", $this->val[array_search('dossier_autorisation', $this->champs)]);
275 }
276 if($maj < 2 AND !$this->correct) {
277 $linkable = true;
278 } else {
279 $linkable = false;
280 }
281
282 // Conteneur de la listes des demandeurs
283 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
284 echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
285 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
286 ._("Petitionnaire")."</legend>";
287 // Si des demandeurs sont liés à la demande
288 require_once "../obj/petitionnaire.class.php";
289 require_once "../obj/delegataire.class.php";
290
291 // Affichage du bloc pétitionnaire principal / délégataire
292 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
293 echo "<div id=\"petitionnaire_principal_delegataire\">";
294 // Affichage de la synthèse
295 if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
296 !empty($this->valIdDemandeur["petitionnaire_principal"])) {
297 $demandeur = new petitionnaire(
298 $this->valIdDemandeur["petitionnaire_principal"],
299 $this->f->db,false);
300 $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
301 $demandeur -> __destruct();
302 }
303 // Si en édition de formulaire
304 if($maj < 2) {
305 // Bouton d'ajout du pétitionnaire principal
306 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
307 echo "<span id=\"add_petitionnaire_principal\"
308 class=\"om-form-button add-16\">".
309 _("Saisir le petitionnaire principal").
310 "</span>";
311 }
312 // Bouton d'ajout du delegataire
313 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
314 echo "<div id=\"delegataire\">";
315 if ($maj < 2 OR ($maj == 3 AND !empty($this->valIdDemandeur["delegataire"]))) {
316 echo " <span class=\"om-icon om-icon-16 om-icon-fix arrow-right-16\">
317 <!-- -->
318 </span> ";
319 }
320 // Affichage de la synthèse
321 if (isset ($this->valIdDemandeur["delegataire"]) AND
322 !empty($this->valIdDemandeur["delegataire"])) {
323 $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
324 $this->f->db,false);
325 $demandeur -> afficherSynthese("delegataire", $linkable);
326 $demandeur -> __destruct();
327 }
328 if($maj < 2) {
329 echo "<span id=\"add_delegataire\"
330 class=\"om-form-button add-16\">".
331 _("Saisir un autre correspondant").
332 "</span>";
333 }
334 echo "</div>";
335
336 echo "</div>";
337 // Bloc des pétitionnaires secondaires
338 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
339 echo "<div id=\"listePetitionnaires\">";
340
341 // Affichage de la synthèse
342 if (isset ($this->valIdDemandeur["petitionnaire"]) AND
343 !empty($this->valIdDemandeur["petitionnaire"])) {
344
345 foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
346 $demandeur = new petitionnaire($petitionnaire,
347 $this->f->db,false);
348 $demandeur -> afficherSynthese("petitionnaire", $linkable);
349 $demandeur -> __destruct();
350 }
351
352 }
353 if ($maj < 2) {
354 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
355 echo "<span id=\"add_petitionnaire\"
356 class=\"om-form-button add-16\">".
357 _("Ajouter un petitionnaire")
358 ."</span>";
359 }
360 echo "</div>";
361 echo "</fieldset>";
362 echo "</div>";
363 }
364
365
366 /**
367 * Méthode permettant de recalculer à tout moment les données en cours de
368 * validité d'un dossier d'autorisation
369 */
370 function majDossierAutorisation() {
371
372 /*
373 * Mise à jour des données (terrain, ref. cadastrales, demandeurs, lots)
374 * si au moins un dossier a été accepté
375 */
376 // Requête de vérification du nombre de dossiers acceptés
377 $sqlDossierAccepte = "SELECT count(*)
378 FROM ".DB_PREFIXE."dossier
379 JOIN ".DB_PREFIXE."avis_decision
380 ON dossier.avis_decision
381 = avis_decision.avis_decision
382 WHERE dossier.dossier_autorisation
383 = '".$this->getVal("dossier_autorisation")."'
384 AND date_decision IS NOT NULL
385 AND avis_decision.typeavis='F'
386 GROUP BY version
387 ORDER BY version DESC
388 LIMIT 1";
389 $nbDossierAccepte = $this->db->getOne($sqlDossierAccepte);
390 $this->addToLog("majDossierAutorisation(): db->getone(\"".
391 $sqlDossierAccepte."\")", VERBOSE_MODE);
392 if(database::isError($nbDossierAccepte)) {
393 // Appel de la methode de recuperation des erreurs
394 $this->erreur_db($nbDossierAccepte->getDebugInfo(),
395 $nbDossierAccepte->getMessage(), '');
396 return false;
397 }
398 // Initialisation des requêtes
399 $sql_terrain = "SELECT dossier.terrain_references_cadastrales,
400 dossier.terrain_adresse_voie_numero,
401 dossier.terrain_adresse_voie,
402 dossier.terrain_adresse_lieu_dit,
403 dossier.terrain_adresse_localite,
404 dossier.terrain_adresse_code_postal,
405 dossier.terrain_adresse_bp,
406 dossier.terrain_adresse_cedex,
407 dossier.terrain_superficie
408 FROM ".DB_PREFIXE."dossier";
409
410 $sql_lots = "SELECT lot.lot
411 FROM ".DB_PREFIXE."lot
412 JOIN ".DB_PREFIXE."dossier ON dossier.dossier = lot.dossier";
413
414 $sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal,
415 lien_dossier_demandeur.lien_dossier_demandeur, lien_dossier_demandeur.dossier
416 FROM ".DB_PREFIXE."lien_dossier_demandeur
417 LEFT JOIN ".DB_PREFIXE."dossier ON
418 lien_dossier_demandeur.dossier = dossier.dossier";
419 $sql_etat = "SELECT avis_decision.typeavis, avis_decision.avis_decision
420 FROM ".DB_PREFIXE."dossier
421 LEFT JOIN ".DB_PREFIXE."avis_decision ON
422 dossier.avis_decision = avis_decision.avis_decision";
423 // Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation
424 $sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di
425 WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
426
427 $count_di = $this->db->getOne($sql_count_di);
428 $this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE);
429 if(database::isError($count_di)) {
430 // Appel de la methode de recuperation des erreurs
431 $this->erreur_db($count_di->getDebugInfo(), $count_di->getMessage(), '');
432 return false;
433 }
434 // Si pas de dossier : erreur
435 if ($count_di == 0) {
436 return false;
437 } elseif ($count_di == 1) { // Cas P0 (en cours ou non) ou de plusieurs DI en cours
438 $sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
439 } else { // Cas ou un dossier d'instruction est soumis à arrété
440 $sql_where = " WHERE dossier.dossier = (
441 SELECT dossier.dossier
442 FROM ".DB_PREFIXE."dossier
443 JOIN ".DB_PREFIXE."avis_decision
444 ON dossier.avis_decision = avis_decision.avis_decision
445 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
446 AND date_decision IS NOT NULL
447 AND avis_decision.typeavis='F'
448 ORDER BY version DESC
449 LIMIT 1
450 )";
451 }
452
453 //terrain
454 $res_terrain = $this->db->query($sql_terrain.$sql_where);
455 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE);
456 if(database::isError($res_terrain)) {
457 // Appel de la methode de recuperation des erreurs
458 $this->erreur_db($res_terrain->getDebugInfo(), $res_terrain->getMessage(), '');
459 return false;
460 }
461 $row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC);
462 // Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update
463 foreach ($row_terrain as $key => $champ) {
464 if ($champ == "") {
465 $row_terrain[$key] = NULL;
466 }
467 }
468 $res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
469 $row_terrain,
470 DB_AUTOQUERY_UPDATE,
471 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
472 if(database::isError($res_update_terrain)) {
473 // Appel de la methode de recuperation des erreurs
474 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
475 return false;
476 }
477
478 // Lots / demandeur
479 // Suppression des anciens liens entre les lots et le DA
480 $valLot['dossier_autorisation'] = NULL;
481 $res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot",
482 $valLot,
483 DB_AUTOQUERY_UPDATE,
484 "dossier_autorisation='".$this->getVal("dossier_autorisation")."'");
485 $sql = "SELECT count(*) FROM ".DB_PREFIXE."lot WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
486 if(database::isError($res_update_lots)) {
487 // Appel de la methode de recuperation des erreurs
488 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
489 return false;
490 }
491 // Suppression des anciens liens dossier_autorisation/demandeurs
492 $sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
493 WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
494 $res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur);
495 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE);
496 if(database::isError($res_delete_liens_da_demandeur)) {
497 // Appel de la methode de recuperation des erreurs
498 $this->erreur_db($res_delete_liens_da_demandeur->getDebugInfo(), $res_delete_liens_da_demandeur->getMessage(), '');
499 return false;
500 }
501 // Si il ya des lots liés on les remonte au DA et on omet les demandeurs
502 // car ils sont liés aux lots
503 $res_lots = $this->db->query($sql_lots.$sql_where);
504 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE);
505 if(database::isError($res_lots)) {
506 // Appel de la methode de recuperation des erreurs
507 $this->erreur_db($res_lots->getDebugInfo(), $res_lots->getMessage(), '');
508 return false;
509 }
510
511 // XXX Si il existe des lots (auxquels les demandeurs sont lié) faut-il recupérer la liste des demandeurs liés au DI ?
512 //if ($res_lots->numRows() > 0) {
513 // Définition du lien entre lot et dossier_autorisation pour chaque lot
514 $valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
515 // XXX Sauvegarde des id des lots pour traitement ultérieur
516 // les lots ne devraient pas être liés au DA mais une copie de ces lots
517 // devraient l'être.
518 $liste_lots = array();
519 // On lie chaque lot en définissant l'id du dossier d'autorisation
520 while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) {
521 $res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot",
522 $valLotUpdate,
523 DB_AUTOQUERY_UPDATE,
524 "lot=".$rowlot['lot']);
525 $liste_lots[] = $rowlot['lot'];
526 if(database::isError($res_lots_update)) {
527 // Appel de la methode de recuperation des erreurs
528 $this->erreur_db($res_lots_update->getDebugInfo(), $res_lots_update->getMessage(), '');
529 return false;
530 }
531 }
532 //} else { // Si pas de lot liaison avec les demandeurs
533 // Récupération de la liste des demandeurs
534 $res_demandeurs = $this->db->query($sql_demandeurs.$sql_where);
535 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE);
536 if(database::isError($res_demandeurs)) {
537 // Appel de la methode de recuperation des erreurs
538 $this->erreur_db($res_demandeurs->getDebugInfo(), $res_demandeurs->getMessage(), '');
539 return false;
540 }
541 // Définition de l'id du DA
542 $valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL;
543 $valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
544 // Pour chaque demandeur on créer un lien avec le DA
545 while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) {
546 // Ajout de l'id du demandeur et du flag petitionnaire_principal
547 // aux données à insérer
548 $valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"];
549 $valDemandeurUpdate["petitionnaire_principal"] = $rowDemandeur["petitionnaire_principal"];
550 // Instanciation d'un lien dossier_autorisation/demandeur en ajout
551 require_once "../obj/lien_dossier_autorisation_demandeur.class.php";
552 $ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG);
553 // Ajout d'un enregistrement avec les données des liens
554 $ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG);
555 }
556 //}
557
558
559 /**
560 * Mise à jour des dates
561 */
562 // Requêtes permettant de les recupérer
563 $sql_date_depot_decision_validite = "SELECT MIN(dossier.date_depot) as date_depot, MIN(dossier.date_decision) as date_decision, MAX(dossier.date_validite) as date_validite FROM ".DB_PREFIXE."dossier
564 WHERE dossier.dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
565
566 $sql_date_doc_daact = "SELECT MAX(dossier.date_chantier) as date_chantier, MAX(dossier.date_achevement) as date_achevement FROM ".DB_PREFIXE."dossier
567 LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON
568 dossier.avis_decision = avis_decision.avis_decision
569 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
570 AND date_decision IS NOT NULL AND avis_decision.typeavis='F'";
571 // Récupération des infos avec la 1ere requête
572 $res_date_depot_decision_validite = $this->db->query($sql_date_depot_decision_validite);
573 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_depot_decision_validite."\")", VERBOSE_MODE);
574 if(database::isError($res_date_depot_decision_validite)) {
575 // Appel de la methode de recuperation des erreurs
576 $this->erreur_db($res_date_depot_decision_validite->getDebugInfo(), $res_date_depot_decision_validite->getMessage(), '');
577 return false;
578 }
579 $row_date_depot_decision_validite = $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC);
580 // Récupération des infos avec la 2nd requête
581 $res_date_doc_daact = $this->db->query($sql_date_doc_daact);
582 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_doc_daact."\")", VERBOSE_MODE);
583 if(database::isError($res_date_doc_daact)) {
584 // Appel de la methode de recuperation des erreurs
585 $this->erreur_db($res_date_doc_daact->getDebugInfo(), $res_date_doc_daact->getMessage(), '');
586 return false;
587 }
588 $row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC);
589 // Fusion des 2 résultats
590 $row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact);
591 // Si pas de date on remplace "" par NULL pour éviter les erreurs de base de données
592 foreach($row_date as $key => $date) {
593 if($date == "") {
594 $row_date[$key] = NULL;
595 }
596 }
597 // Mise à jour du DA avec ces nouvelles dates
598 $res_update_date = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
599 $row_date,
600 DB_AUTOQUERY_UPDATE,
601 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
602 if(database::isError($res_update_date)) {
603 // Appel de la methode de recuperation des erreurs
604 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
605 return false;
606 }
607
608 /**
609 * Mise à jour de l'état
610 */
611 $sql_etat .= " ".$sql_where;
612
613 $res_etat = $this->db->query($sql_etat);
614 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_etat."\")", VERBOSE_MODE);
615 if(database::isError($res_etat)) {
616 // Appel de la methode de recuperation des erreurs
617 $this->erreur_db($res_etat->getDebugInfo(), $res_etat->getMessage(), '');
618 return false;
619 }
620
621 $row_etat = $res_etat->fetchRow(DB_FETCHMODE_ASSOC);
622 $etatDA = array();
623
624 // Cas initial : on défini les trois valeurs par défaut
625 // (elles seront écrasées si $res_encours->numRows() > 1)
626
627 // Correspondance entre typeavis et etat_dossier_autorisation
628 switch ($row_etat['typeavis']) {
629 case 'F':
630 // typeavis F => Accordé
631 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
632 $etatDA['etat_dossier_autorisation'] = 2;
633 break;
634 case 'D':
635 // typeavis D => Refusé
636 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
637 $etatDA['etat_dossier_autorisation'] = 4;
638 break;
639 case 'A':
640 // typeavis A => Abandonné
641 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
642 $etatDA['etat_dossier_autorisation'] = 3;
643 break;
644 default:
645 // typeavis '' => En cours
646 $etatDA['etat_dernier_dossier_instruction_accepte'] = NULL;
647 $etatDA['etat_dossier_autorisation'] = 1;
648 break;
649 }
650 $etatDA['avis_decision'] = $row_etat['avis_decision'];
651
652
653 foreach($etatDA as $key=>$val) {
654 if($val=="") {
655 $etatDA[$key] = NULL;
656 }
657 }
658
659 // Mise à jour du DA avec ces nouvelles dates
660 $res_update_etat = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
661 $etatDA,
662 DB_AUTOQUERY_UPDATE,
663 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
664 if(database::isError($res_update_date)) {
665 // Appel de la methode de recuperation des erreurs
666 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
667 return false;
668 }
669
670 // Si le champ des références cadastrales n'est pas vide
671 if ($this->getVal('terrain_references_cadastrales')
672 != $row_terrain['terrain_references_cadastrales']) {
673
674 // On supprime toutes les lignes de la table
675 // dossier_autorisation_parcelle qui font référence au
676 // dossier d'autorisation en cours de suppression
677 $this->supprimer_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'));
678
679 // Ajout des parcelles dans la table dossier_autorisation_parcelle
680 $this->ajouter_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'),
681 $row_terrain['terrain_references_cadastrales']);
682
683 }
684
685 // Mise à jour des données techniques du dossier d'instruction
686 $sql_donnees_techniques = "SELECT donnees_techniques
687 FROM ".DB_PREFIXE."donnees_techniques
688 INNER JOIN ".DB_PREFIXE."dossier ON
689 dossier.dossier=donnees_techniques.dossier_instruction ".$sql_where;
690 $donnees_techniques = $this->db->getOne($sql_donnees_techniques);
691 $this->addToLog(
692 "majDossierAutorisation(): db->query(\"".$sql_donnees_techniques."\")",
693 VERBOSE_MODE
694 );
695 if(database::isError($donnees_techniques)) {
696 // Appel de la methode de recuperation des erreurs
697 $this->erreur_db(
698 $donnees_techniques->getDebugInfo(),
699 $donnees_techniques->getMessage(),
700 ''
701 );
702 return false;
703 }
704 // Suppression des liens entre ce DA est d'autres données techniques
705 $res_update_dt = $this->db->autoExecute(
706 DB_PREFIXE."donnees_techniques",
707 array("dossier_autorisation"=>null),
708 DB_AUTOQUERY_UPDATE,
709 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"
710 );
711 if(database::isError($res_update_dt)) {
712 // Appel de la methode de recuperation des erreurs
713 $this->erreur_db($res_update_dt->getDebugInfo(), $res_update_dt->getMessage(), '');
714 return false;
715 }
716 // Liaison des nouvelles données données techniques au DA
717 require_once "../obj/donnees_techniques.class.php";
718 if($donnees_techniques === null) {
719 $donnees_techniques = "]";
720 }
721 $dt = new donnees_techniques($donnees_techniques, $this->db, DEBUG);
722
723 // Création du tableau de valeurs pour duplication de l'enregistrement
724 $dt->setValFFromVal();
725 $dt->valF["dossier_autorisation"] = $this->getVal('dossier_autorisation');
726 unset($dt->valF["tab_surface"]);
727 unset($dt->valF["tab_tax_su_princ"]);
728 unset($dt->valF["tab_tax_su_heber"]);
729 unset($dt->valF["tab_tax_su_secon"]);
730 unset($dt->valF["tab_tax_su_tot"]);
731 unset($dt->valF["tab_tax_su_non_habit_surf"]);
732 unset($dt->valF["tab_tax_am"]);
733
734 if($donnees_techniques != "]") {
735 if($dt->modifier($dt->valF, $this->db, DEBUG) === false) {
736 return false;
737 }
738 } else {
739 if($dt->ajouter($dt->valF, $this->db, DEBUG) === false) {
740 return false;
741 }
742 }
743
744 return true;
745 }
746
747 /**
748 * Ajoute les parcelles du dossier d'autorisation passé en paramètre
749 * @param string $dossier_autorisation Identifiant du dossier
750 * @param string $terrain_references_cadastrales Références cadastrales du
751 * dossier
752 */
753 function ajouter_dossier_autorisation_parcelle($dossier_autorisation, $terrain_references_cadastrales) {
754
755 // Parse les parcelles
756 $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales);
757
758 // Fichier requis
759 require_once "../obj/dossier_autorisation_parcelle.class.php";
760
761 // A chaque parcelle une nouvelle ligne est créée dans la table
762 // dossier_parcelle
763 foreach ($list_parcelles as $parcelle) {
764
765 // Instance de la classe dossier_parcelle
766 $dossier_autorisation_parcelle = new dossier_autorisation_parcelle("]", $this->db, DEBUG);
767
768 // Valeurs à sauvegarder
769 $value = array(
770 'dossier_autorisation_parcelle' => '',
771 'dossier_autorisation' => $dossier_autorisation,
772 'parcelle' => '',
773 'libelle' => $parcelle['quartier']
774 .$parcelle['section']
775 .$parcelle['parcelle']
776 );
777
778 // Ajout de la ligne
779 $dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG);
780 }
781
782 }
783
784 /**
785 * Supprime les parcelles du dossier d'autorisation passé en paramètre
786 * @param string $dossier_autorisation Identifiant du dossier
787 */
788 function supprimer_dossier_autorisation_parcelle($dossier_autorisation) {
789
790 // Suppression des parcelles du dossier d'autorisation
791 $sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle
792 WHERE dossier_autorisation='".$dossier_autorisation."'";
793 $res = $this->db->query($sql);
794 $this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE);
795 database::isError($res);
796
797 }
798
799 /**
800 * Permet d’effectuer des actions après l’insertion des données dans la base
801 */
802 function triggerajouterapres($id, &$db, $val, $DEBUG) {
803
804 // Si le champ des références cadastrales n'est pas vide
805 if ($this->valF['terrain_references_cadastrales'] != '') {
806
807 // Ajout des parcelles dans la table dossier_autorisation_parcelle
808 $this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'],
809 $this->valF['terrain_references_cadastrales']);
810
811 }
812
813 }
814
815 }// fin classe
816 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26