/[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 2558 - (show annotations)
Thu Nov 28 17:29:09 2013 UTC (11 years, 2 months ago) by nhaye
File size: 38471 byte(s)
Correction d'une erreur PHP lors du recalcul des données du DA si aucun DI n'est accepté.

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 le delegataire").
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 // On sort de cette méthode si pas de dossier accepté
399 if($nbDossierAccepte <= 0) {
400 return;
401 }
402 // Initialisation des requêtes
403 $sql_terrain = "SELECT dossier.terrain_references_cadastrales,
404 dossier.terrain_adresse_voie_numero,
405 dossier.terrain_adresse_voie,
406 dossier.terrain_adresse_lieu_dit,
407 dossier.terrain_adresse_localite,
408 dossier.terrain_adresse_code_postal,
409 dossier.terrain_adresse_bp,
410 dossier.terrain_adresse_cedex,
411 dossier.terrain_superficie
412 FROM ".DB_PREFIXE."dossier";
413
414 $sql_lots = "SELECT lot.lot
415 FROM ".DB_PREFIXE."lot
416 JOIN ".DB_PREFIXE."dossier ON dossier.dossier = lot.dossier";
417
418 $sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal,
419 lien_dossier_demandeur.lien_dossier_demandeur, lien_dossier_demandeur.dossier
420 FROM ".DB_PREFIXE."lien_dossier_demandeur
421 LEFT JOIN ".DB_PREFIXE."dossier ON
422 lien_dossier_demandeur.dossier = dossier.dossier";
423 $sql_etat = "SELECT avis_decision.typeavis
424 FROM ".DB_PREFIXE."dossier";
425 // Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation
426 $sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di
427 WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
428
429 $count_di = $this->db->getOne($sql_count_di);
430 $this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE);
431 if(database::isError($count_di)) {
432 // Appel de la methode de recuperation des erreurs
433 $this->erreur_db($count_di->getDebugInfo(), $count_di->getMessage(), '');
434 return false;
435 }
436 // Si pas de dossier : erreur
437 if ($count_di == 0) {
438 return false;
439 } elseif ($count_di == 1) { // Cas P0 (en cours ou non) ou de plusieurs DI en cours
440 $sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
441 } else { // Cas ou un dossier d'instruction est soumis à arrété
442 $sql_where = " WHERE dossier.dossier = (
443 SELECT dossier.dossier
444 FROM ".DB_PREFIXE."dossier
445 JOIN ".DB_PREFIXE."avis_decision
446 ON dossier.avis_decision = avis_decision.avis_decision
447 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
448 AND date_decision IS NOT NULL
449 AND avis_decision.typeavis='F'
450 ORDER BY version DESC
451 LIMIT 1
452 )";
453 }
454
455 //terrain
456 $res_terrain = $this->db->query($sql_terrain.$sql_where);
457 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE);
458 if(database::isError($res_terrain)) {
459 // Appel de la methode de recuperation des erreurs
460 $this->erreur_db($res_terrain->getDebugInfo(), $res_terrain->getMessage(), '');
461 return false;
462 }
463 $row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC);
464 // Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update
465 foreach ($row_terrain as $key => $champ) {
466 if ($champ == "") {
467 $row_terrain[$key] = NULL;
468 }
469 }
470 $res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
471 $row_terrain,
472 DB_AUTOQUERY_UPDATE,
473 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
474 if(database::isError($res_update_terrain)) {
475 // Appel de la methode de recuperation des erreurs
476 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
477 return false;
478 }
479
480 // Lots / demandeur
481 // Suppression des anciens liens entre les lots et le DA
482 $valLot['dossier_autorisation'] = NULL;
483 $res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot",
484 $valLot,
485 DB_AUTOQUERY_UPDATE,
486 "dossier_autorisation='".$this->getVal("dossier_autorisation")."'");
487 $sql = "SELECT count(*) FROM ".DB_PREFIXE."lot WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
488 if(database::isError($res_update_lots)) {
489 // Appel de la methode de recuperation des erreurs
490 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
491 return false;
492 }
493 // Suppression des anciens liens dossier_autorisation/demandeurs
494 $sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
495 WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
496 $res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur);
497 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE);
498 if(database::isError($res_delete_liens_da_demandeur)) {
499 // Appel de la methode de recuperation des erreurs
500 $this->erreur_db($res_delete_liens_da_demandeur->getDebugInfo(), $res_delete_liens_da_demandeur->getMessage(), '');
501 return false;
502 }
503 // Si il ya des lots liés on les remonte au DA et on omet les demandeurs
504 // car ils sont liés aux lots
505 $res_lots = $this->db->query($sql_lots.$sql_where);
506 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE);
507 if(database::isError($res_lots)) {
508 // Appel de la methode de recuperation des erreurs
509 $this->erreur_db($res_lots->getDebugInfo(), $res_lots->getMessage(), '');
510 return false;
511 }
512
513 // XXX Si il existe des lots (auxquels les demandeurs sont lié) faut-il recupérer la liste des demandeurs liés au DI ?
514 //if ($res_lots->numRows() > 0) {
515 // Définition du lien entre lot et dossier_autorisation pour chaque lot
516 $valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
517 // On lie chaque lot en définissant l'id du dossier d'autorisation
518 while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) {
519 $res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot",
520 $valLotUpdate,
521 DB_AUTOQUERY_UPDATE,
522 "lot=".$rowlot['lot']);
523 if(database::isError($res_lots_update)) {
524 // Appel de la methode de recuperation des erreurs
525 $this->erreur_db($res_lots_update->getDebugInfo(), $res_lots_update->getMessage(), '');
526 return false;
527 }
528 }
529 //} else { // Si pas de lot liaison avec les demandeurs
530 // Récupération de la liste des demandeurs
531 $res_demandeurs = $this->db->query($sql_demandeurs.$sql_where);
532 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE);
533 if(database::isError($res_demandeurs)) {
534 // Appel de la methode de recuperation des erreurs
535 $this->erreur_db($res_demandeurs->getDebugInfo(), $res_demandeurs->getMessage(), '');
536 return false;
537 }
538 // Définition de l'id du DA
539 $valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL;
540 $valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
541 // Pour chaque demandeur on créer un lien avec le DA
542 while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) {
543 // Ajout de l'id du demandeur et du flag petitionnaire_principal
544 // aux données à insérer
545 $valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"];
546 $valDemandeurUpdate["petitionnaire_principal"] = $rowDemandeur["petitionnaire_principal"];
547 // Instanciation d'un lien dossier_autorisation/demandeur en ajout
548 require_once "../obj/lien_dossier_autorisation_demandeur.class.php";
549 $ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG);
550 // Ajout d'un enregistrement avec les données des liens
551 $ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG);
552 }
553 //}
554
555
556 /**
557 * Mise à jour des dates
558 */
559 // Requêtes permettant de les recupérer
560 $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
561 WHERE dossier.dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
562
563 $sql_date_doc_daact = "SELECT MAX(dossier.date_chantier) as date_chantier, MAX(dossier.date_achevement) as date_achevement FROM ".DB_PREFIXE."dossier
564 LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON
565 dossier.avis_decision = avis_decision.avis_decision
566 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
567 AND date_decision IS NOT NULL AND avis_decision.typeavis='F'";
568 // Récupération des infos avec la 1ere requête
569 $res_date_depot_decision_validite = $this->db->query($sql_date_depot_decision_validite);
570 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_depot_decision_validite."\")", VERBOSE_MODE);
571 if(database::isError($res_date_depot_decision_validite)) {
572 // Appel de la methode de recuperation des erreurs
573 $this->erreur_db($res_date_depot_decision_validite->getDebugInfo(), $res_date_depot_decision_validite->getMessage(), '');
574 return false;
575 }
576 $row_date_depot_decision_validite = $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC);
577 // Récupération des infos avec la 2nd requête
578 $res_date_doc_daact = $this->db->query($sql_date_doc_daact);
579 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_doc_daact."\")", VERBOSE_MODE);
580 if(database::isError($res_date_doc_daact)) {
581 // Appel de la methode de recuperation des erreurs
582 $this->erreur_db($res_date_doc_daact->getDebugInfo(), $res_date_doc_daact->getMessage(), '');
583 return false;
584 }
585 $row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC);
586 // Fusion des 2 résultats
587 $row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact);
588 // Si pas de date on remplace "" par NULL pour éviter les erreurs de base de données
589 foreach($row_date as $key => $date) {
590 if($date == "") {
591 $row_date[$key] = NULL;
592 }
593 }
594 // Mise à jour du DA avec ces nouvelles dates
595 $res_update_date = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
596 $row_date,
597 DB_AUTOQUERY_UPDATE,
598 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
599 if(database::isError($res_update_date)) {
600 // Appel de la methode de recuperation des erreurs
601 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
602 return false;
603 }
604
605 /**
606 * Mise à jour de l'état
607 */
608 $sql_etat = "SELECT avis_decision.typeavis, avis_decision.avis_decision
609 FROM ".DB_PREFIXE."dossier
610 LEFT JOIN ".DB_PREFIXE."avis_decision ON
611 dossier.avis_decision = avis_decision.avis_decision";
612
613 // Récupération de le décision du dernier dossier en cours ou non
614 $sql_encours = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' ORDER BY dossier.version DESC";
615
616 // Récupération de la décision du dernier dossier accepté
617 $sql_cloture = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
618 AND date_decision IS NOT NULL AND avis_decision.typeavis='F'
619 ORDER BY dossier.version DESC";
620
621 $res_encours = $this->db->query($sql_encours);
622 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_encours."\")", VERBOSE_MODE);
623 if(database::isError($res_encours)) {
624 // Appel de la methode de recuperation des erreurs
625 $this->erreur_db($res_encours->getDebugInfo(), $res_encours->getMessage(), '');
626 return false;
627 }
628
629 $row_encours = $res_encours->fetchRow(DB_FETCHMODE_ASSOC);
630 $etatDA = array();
631
632 // Cas initial : on défini les trois valeurs par défaut
633 // (elles seront écrasées si $res_encours->numRows() > 1)
634
635 // Correspondance entre typeavis et etat_dossier_autorisation
636 switch ($row_encours['typeavis']) {
637 case 'F':
638 // typeavis F => Accordé
639 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
640 $etatDA['etat_dossier_autorisation'] = 2;
641 break;
642 case 'D':
643 // typeavis D => Refusé
644 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
645 $etatDA['etat_dossier_autorisation'] = 4;
646 break;
647 case 'A':
648 // typeavis A => Abandonné
649 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
650 $etatDA['etat_dossier_autorisation'] = 3;
651 break;
652 default:
653 // typeavis '' => En cours
654 $etatDA['etat_dernier_dossier_instruction_accepte'] = NULL;
655 $etatDA['etat_dossier_autorisation'] = 1;
656 break;
657 }
658 $etatDA['avis_decision'] = $row_encours['avis_decision'];
659
660 // Si plus d'un dossier d'instruction
661 if($res_encours->numRows() > 1) {
662 $res_cloture = $this->db->query($sql_cloture);
663 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_cloture."\")", VERBOSE_MODE);
664 if(database::isError($res_cloture)) {
665 // Appel de la methode de recuperation des erreurs
666 $this->erreur_db($res_cloture->getDebugInfo(), $res_cloture->getMessage(), '');
667 return false;
668 }
669
670 $row_cloture = $res_cloture->fetchRow(DB_FETCHMODE_ASSOC);
671 // Correspondance entre typeavis et etat_dossier_autorisation
672 switch ($row_cloture['typeavis']) {
673 case 'F':
674 // typeavis F => Accordé
675 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
676 break;
677 case 'D':
678 // typeavis D => Refusé
679 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
680 break;
681 case 'A':
682 // typeavis A => Abandonné
683 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
684 break;
685 default:
686 // typeavis '' => En cours
687 $etatDA['etat_dernier_dossier_instruction_accepte'] = NULL;
688 break;
689 }
690 $etatDA['avis_decision'] = $row_cloture['avis_decision'];
691 }
692 foreach($etatDA as $key=>$val) {
693 if($val=="") {
694 $etatDA[$key] = NULL;
695 }
696 }
697
698 // Mise à jour du DA avec ces nouvelles dates
699 $res_update_etat = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
700 $etatDA,
701 DB_AUTOQUERY_UPDATE,
702 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
703 if(database::isError($res_update_date)) {
704 // Appel de la methode de recuperation des erreurs
705 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
706 return false;
707 }
708
709 // Si le champ des références cadastrales n'est pas vide
710 if ($this->getVal('terrain_references_cadastrales')
711 != $row_terrain['terrain_references_cadastrales']) {
712
713 // On supprime toutes les lignes de la table
714 // dossier_autorisation_parcelle qui font référence au
715 // dossier d'autorisation en cours de suppression
716 $this->supprimer_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'));
717
718 // Ajout des parcelles dans la table dossier_autorisation_parcelle
719 $this->ajouter_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'),
720 $row_terrain['terrain_references_cadastrales']);
721
722 }
723 }
724
725 /**
726 * Ajoute les parcelles du dossier d'autorisation passé en paramètre
727 * @param string $dossier_autorisation Identifiant du dossier
728 * @param string $terrain_references_cadastrales Références cadastrales du
729 * dossier
730 */
731 function ajouter_dossier_autorisation_parcelle($dossier_autorisation, $terrain_references_cadastrales) {
732
733 // Parse les parcelles
734 $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales);
735
736 // Fichier requis
737 require_once "../obj/dossier_autorisation_parcelle.class.php";
738
739 // A chaque parcelle une nouvelle ligne est créée dans la table
740 // dossier_parcelle
741 foreach ($list_parcelles as $parcelle) {
742
743 // Instance de la classe dossier_parcelle
744 $dossier_autorisation_parcelle = new dossier_autorisation_parcelle("]", $this->db, DEBUG);
745
746 // Valeurs à sauvegarder
747 $value = array(
748 'dossier_autorisation_parcelle' => '',
749 'dossier_autorisation' => $dossier_autorisation,
750 'parcelle' => '',
751 'libelle' => $parcelle['quartier']
752 .$parcelle['section']
753 .$parcelle['parcelle']
754 );
755
756 // Ajout de la ligne
757 $dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG);
758 }
759
760 }
761
762 /**
763 * Supprime les parcelles du dossier d'autorisation passé en paramètre
764 * @param string $dossier_autorisation Identifiant du dossier
765 */
766 function supprimer_dossier_autorisation_parcelle($dossier_autorisation) {
767
768 // Suppression des parcelles du dossier d'autorisation
769 $sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle
770 WHERE dossier_autorisation='".$dossier_autorisation."'";
771 $res = $this->db->query($sql);
772 $this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE);
773 database::isError($res);
774
775 }
776
777 /**
778 * Permet d’effectuer des actions après l’insertion des données dans la base
779 */
780 function triggerajouterapres($id, &$db, $val, $DEBUG) {
781
782 // Si le champ des références cadastrales n'est pas vide
783 if ($this->valF['terrain_references_cadastrales'] != '') {
784
785 // Ajout des parcelles dans la table dossier_autorisation_parcelle
786 $this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'],
787 $this->valF['terrain_references_cadastrales']);
788
789 }
790
791 }
792
793 }// fin classe
794 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26