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 |
?> |