6 |
|
|
7 |
class dossier_autorisation extends dossier_autorisation_gen { |
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) { |
function dossier_autorisation($id,&$db,$debug) { |
15 |
$this->constructeur($id,$db,$debug); |
$this->constructeur($id,$db,$debug); |
16 |
}// fin constructeur |
}// fin constructeur |
49 |
} |
} |
50 |
} |
} |
51 |
|
|
52 |
|
function setValFAjout($val) { |
53 |
|
|
54 |
|
// Récupération du type de dossier ou série |
55 |
|
$sql = "SELECT da_t.code |
56 |
|
FROM ".DB_PREFIXE."dossier_autorisation_type as da_t |
57 |
|
INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d |
58 |
|
ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type |
59 |
|
WHERE da_t_d.dossier_autorisation_type_detaille=".$val['dossier_autorisation_type_detaille'].";"; |
60 |
|
// |
61 |
|
$da_type_code = $this->db->getone($sql); |
62 |
|
$this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE); |
63 |
|
database::isError($da_type_code); |
64 |
|
// Récupération du code département |
65 |
|
$departement = $this->f->getParameter("departement"); |
66 |
|
// Récupération du code commune |
67 |
|
$commune = $this->f->getParameter("commune"); |
68 |
|
|
69 |
|
/// IDENTIFIANT DU DOSSIER |
70 |
|
// PC 013 055 12 00001 |
71 |
|
$this->valF[$this->clePrimaire] = $da_type_code.$departement.$commune.date("y").$this->createNumeroDossier($da_type_code); |
72 |
|
|
73 |
|
} |
74 |
|
// {{{ |
75 |
|
|
76 |
|
// getter |
77 |
|
function getValIdDemandeur() { |
78 |
|
return $this->valIdDemandeur; |
79 |
|
} |
80 |
|
// setter |
81 |
|
function setValIdDemandeur($valIdDemandeur) { |
82 |
|
$this->valIdDemandeur = $valIdDemandeur; |
83 |
|
} |
84 |
|
|
85 |
|
// }}} |
86 |
|
/* |
87 |
|
* Créée une numérotation pour le dossier à partir d'un numéro dans un séquence, |
88 |
|
* définie par le code du dossier_autorisation_type. |
89 |
|
* */ |
90 |
|
function createNumeroDossier($datc){ |
91 |
|
|
92 |
|
$numero_dossier = str_pad(rand(1, 9999), 5, "0", STR_PAD_LEFT); |
93 |
|
|
94 |
|
/* Créé le code du dossier_autorisation_type associé au |
95 |
|
* code du dossier_autorisation_type_detaille passé en paramètre.*/ |
96 |
|
if ( isset($datc) && is_string($datc) ){ |
97 |
|
|
98 |
|
/*Récupère l'identifiant suivant dans la séquence correspondant au |
99 |
|
* code passé en paramètre*/ |
100 |
|
$nextID = $this->db->nextId(DB_PREFIXE.'dossier_'.strtolower($datc)); |
101 |
|
|
102 |
|
$this->addToLog("createNumeroDossier(): db->nextId(\"".DB_PREFIXE."dossier_".strtolower($datc)."\");", VERBOSE_MODE); |
103 |
|
if (database :: isError($nextID)) |
104 |
|
die($nextID->getMessage()."erreur ".$sql); |
105 |
|
|
106 |
|
/*Création du numéro de dossier*/ |
107 |
|
$numero_dossier = str_pad($nextID, 5, "0", STR_PAD_LEFT); |
108 |
|
} |
109 |
|
|
110 |
|
return $numero_dossier; |
111 |
|
} |
112 |
|
|
113 |
|
/** |
114 |
|
* Méthode permettant de récupérer les id des demandeur liés à la demande ou |
115 |
|
* liés au dossier d'autorisation |
116 |
|
**/ |
117 |
|
function listeDemandeur($from, $id) { |
118 |
|
// Récupération des demandeurs de la base |
119 |
|
$sql = "SELECT demandeur.demandeur, |
120 |
|
demandeur.type_demandeur, |
121 |
|
lien_".$from."_demandeur.petitionnaire_principal |
122 |
|
FROM ".DB_PREFIXE."lien_".$from."_demandeur |
123 |
|
INNER JOIN ".DB_PREFIXE."demandeur |
124 |
|
ON demandeur.demandeur=lien_".$from."_demandeur.demandeur |
125 |
|
WHERE ".$from." = '".$id."'"; |
126 |
|
$res = $this->f->db->query($sql); |
127 |
|
$this->f->addToLog("listeDemandeur() : ".$sql); |
128 |
|
$this->f->isDatabaseError($res); |
129 |
|
// Stoquage du résultat dans un tableau |
130 |
|
while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){ |
131 |
|
if ($row['petitionnaire_principal'] == 't' AND |
132 |
|
$row['type_demandeur']=="petitionnaire") { |
133 |
|
$this->valIdDemandeur['petitionnaire_principal']=$row['demandeur']; |
134 |
|
} elseif ($row['petitionnaire_principal'] == 'f' AND |
135 |
|
$row['type_demandeur']=="petitionnaire"){ |
136 |
|
$this->valIdDemandeur['petitionnaire'][]=$row['demandeur']; |
137 |
|
} elseif ($row['type_demandeur']=="delegataire"){ |
138 |
|
$this->valIdDemandeur['delegataire']=$row['demandeur']; |
139 |
|
} |
140 |
|
} |
141 |
|
} |
142 |
|
|
143 |
|
/** |
144 |
|
* Ajout de la liste des demandeurs |
145 |
|
*/ |
146 |
|
function formSpecificContent($maj) { |
147 |
|
if(!$this->correct AND $maj != 0) { |
148 |
|
$this->listeDemandeur("dossier_autorisation", $this->val[array_search('dossier_autorisation', $this->champs)]); |
149 |
|
} |
150 |
|
if($maj < 2 AND !$this->correct) { |
151 |
|
$linkable = true; |
152 |
|
} else { |
153 |
|
$linkable = false; |
154 |
|
} |
155 |
|
|
156 |
|
// Conteneur de la listes des demandeurs |
157 |
|
echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">"; |
158 |
|
echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">"; |
159 |
|
echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">" |
160 |
|
._("Petitionnaire")."</legend>"; |
161 |
|
// Si des demandeurs sont liés à la demande |
162 |
|
require_once "../obj/petitionnaire.class.php"; |
163 |
|
require_once "../obj/delegataire.class.php"; |
164 |
|
|
165 |
|
// Affichage du bloc pétitionnaire principal / délégataire |
166 |
|
// L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS |
167 |
|
echo "<div id=\"petitionnaire_principal_delegataire\">"; |
168 |
|
// Affichage de la synthèse |
169 |
|
if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND |
170 |
|
!empty($this->valIdDemandeur["petitionnaire_principal"])) { |
171 |
|
$demandeur = new petitionnaire( |
172 |
|
$this->valIdDemandeur["petitionnaire_principal"], |
173 |
|
$this->f->db,false); |
174 |
|
$demandeur -> afficherSynthese("petitionnaire_principal", $linkable); |
175 |
|
$demandeur -> __destruct(); |
176 |
|
} |
177 |
|
// Si en édition de formulaire |
178 |
|
if($maj < 2) { |
179 |
|
// Bouton d'ajout du pétitionnaire principal |
180 |
|
// L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS |
181 |
|
echo "<span id=\"add_petitionnaire_principal\" |
182 |
|
class=\"om-form-button add-16\">". |
183 |
|
_("Saisir le petitionnaire principal"). |
184 |
|
"</span>"; |
185 |
|
} |
186 |
|
// Bouton d'ajout du delegataire |
187 |
|
// L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS |
188 |
|
echo "<div id=\"delegataire\">"; |
189 |
|
if ($maj < 2 OR ($maj == 3 AND !empty($this->valIdDemandeur["delegataire"]))) { |
190 |
|
echo " <span class=\"om-icon om-icon-16 om-icon-fix arrow-right-16\"> |
191 |
|
<!-- --> |
192 |
|
</span> "; |
193 |
|
} |
194 |
|
// Affichage de la synthèse |
195 |
|
if (isset ($this->valIdDemandeur["delegataire"]) AND |
196 |
|
!empty($this->valIdDemandeur["delegataire"])) { |
197 |
|
$demandeur = new delegataire($this->valIdDemandeur["delegataire"], |
198 |
|
$this->f->db,false); |
199 |
|
$demandeur -> afficherSynthese("delegataire", $linkable); |
200 |
|
$demandeur -> __destruct(); |
201 |
|
} |
202 |
|
if($maj < 2) { |
203 |
|
echo "<span id=\"add_delegataire\" |
204 |
|
class=\"om-form-button add-16\">". |
205 |
|
_("Saisir le delegataire"). |
206 |
|
"</span>"; |
207 |
|
} |
208 |
|
echo "</div>"; |
209 |
|
|
210 |
|
echo "</div>"; |
211 |
|
// Bloc des pétitionnaires secondaires |
212 |
|
// L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS |
213 |
|
echo "<div id=\"listePetitionnaires\">"; |
214 |
|
|
215 |
|
// Affichage de la synthèse |
216 |
|
if (isset ($this->valIdDemandeur["petitionnaire"]) AND |
217 |
|
!empty($this->valIdDemandeur["petitionnaire"])) { |
218 |
|
|
219 |
|
foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) { |
220 |
|
$demandeur = new petitionnaire($petitionnaire, |
221 |
|
$this->f->db,false); |
222 |
|
$demandeur -> afficherSynthese("petitionnaire", $linkable); |
223 |
|
$demandeur -> __destruct(); |
224 |
|
} |
225 |
|
|
226 |
|
} |
227 |
|
if ($maj < 2) { |
228 |
|
// L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS |
229 |
|
echo "<span id=\"add_petitionnaire\" |
230 |
|
class=\"om-form-button add-16\">". |
231 |
|
_("Ajouter un petitionnaire") |
232 |
|
."</span>"; |
233 |
|
} |
234 |
|
echo "</div>"; |
235 |
|
echo "</fieldset>"; |
236 |
|
echo "</div>"; |
237 |
|
} |
238 |
|
|
239 |
|
|
240 |
|
/** |
241 |
|
* Méthode permettant de recalculer à tout moment les données en cours de |
242 |
|
* validité d'un dossier d'autorisation |
243 |
|
*/ |
244 |
|
function majDossierAutorisation() { |
245 |
|
|
246 |
|
/* |
247 |
|
* Mise à jour des données (terrain, ref. cadastrales, demandeurs, lots) |
248 |
|
*/ |
249 |
|
// Initialisation des requêtes |
250 |
|
$sql_terrain = "SELECT dossier.terrain_references_cadastrales, |
251 |
|
dossier.terrain_adresse_voie_numero, |
252 |
|
dossier.complement, |
253 |
|
dossier.terrain_adresse_lieu_dit, |
254 |
|
dossier.terrain_adresse_localite, |
255 |
|
dossier.terrain_adresse_code_postal, |
256 |
|
dossier.terrain_adresse_bp, |
257 |
|
dossier.terrain_adresse_cedex, |
258 |
|
dossier.terrain_superficie |
259 |
|
FROM ".DB_PREFIXE."dossier"; |
260 |
|
|
261 |
|
$sql_lots = "SELECT lien_dossier_lot.lot |
262 |
|
FROM ".DB_PREFIXE."lien_dossier_lot |
263 |
|
LEFT JOIN ".DB_PREFIXE."dossier ON |
264 |
|
dossier.dossier = lien_dossier_lot.dossier"; |
265 |
|
$sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal |
266 |
|
FROM ".DB_PREFIXE."dossier |
267 |
|
LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur ON |
268 |
|
dossier.dossier = lien_dossier_demandeur.dossier"; |
269 |
|
$sql_etat = "SELECT avis_decision.typeavis |
270 |
|
FROM ".DB_PREFIXE."dossier"; |
271 |
|
// Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation |
272 |
|
$sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di |
273 |
|
WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"; |
274 |
|
|
275 |
|
$count_di = $this->db->getOne($sql_count_di); |
276 |
|
$this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE); |
277 |
|
database::isError($count_di); |
278 |
|
// Si pas de dossier : erreur |
279 |
|
if ($count_di == 0) { |
280 |
|
$this->f->displayMessage("error", _("Ce dossier d'autorisation n'est lie a aucun dosser d'instruction")); |
281 |
|
die(); |
282 |
|
} elseif ($count_di == 1) { // Cas P0 (en cours ou non) |
283 |
|
$sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"; |
284 |
|
} else { // Cas ou un dossier d'instruction est soumis à arrété |
285 |
|
$sql_where = " LEFT OUTER JOIN ".DB_PREFIXE."instruction ON |
286 |
|
dossier.dossier=instruction.dossier |
287 |
|
LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON |
288 |
|
dossier.avis_decision = avis_decision.avis_decision |
289 |
|
WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' |
290 |
|
AND date_decision IS NOT NULL AND avis_decision.typeavis='F' AND instruction.date_retour_signature IS NOT NULL"; |
291 |
|
} |
292 |
|
|
293 |
|
//terrain |
294 |
|
$res_terrain = $this->db->query($sql_terrain.$sql_where); |
295 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE); |
296 |
|
database::isError($res_terrain); |
297 |
|
$row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC); |
298 |
|
// Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update |
299 |
|
foreach ($row_terrain as $key => $champ) { |
300 |
|
if ($champ == "") { |
301 |
|
$row_terrain[$key] = NULL; |
302 |
|
} |
303 |
|
} |
304 |
|
$res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation", |
305 |
|
$row_terrain, |
306 |
|
DB_AUTOQUERY_UPDATE, |
307 |
|
"dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"); |
308 |
|
database::isError($res_update_terrain); |
309 |
|
|
310 |
|
// Lots / demandeur |
311 |
|
// Suppression des anciens liens entre les lots et le DA |
312 |
|
$valLot['dossier_autorisation'] = NULL; |
313 |
|
$res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot", |
314 |
|
$valLot, |
315 |
|
DB_AUTOQUERY_UPDATE, |
316 |
|
"dossier_autorisation='".$this->getVal("dossier_autorisation")."'"); |
317 |
|
database::isError($res_update_lots); |
318 |
|
// Suppression des anciens liens dossier_autorisation/demandeurs |
319 |
|
$sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur |
320 |
|
WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'"; |
321 |
|
$res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur); |
322 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE); |
323 |
|
database::isError($res_delete_liens_da_demandeur); |
324 |
|
// Si il ya des lots liés on les remonte au DA et on omet les demandeurs |
325 |
|
// car ils sont liés aux lots |
326 |
|
$res_lots = $this->db->query($sql_lots.$sql_where); |
327 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE); |
328 |
|
database::isError($res_lots); |
329 |
|
|
330 |
|
if ($res_lots->numRows() > 0) { |
331 |
|
// Définition du lien entre lot et dossier_autorisation pour chaque lot |
332 |
|
$valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation"); |
333 |
|
// On lie chaque lot en définissant l'id du dossier d'autorisation |
334 |
|
while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) { |
335 |
|
$res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot", |
336 |
|
$valLotUpdate, |
337 |
|
DB_AUTOQUERY_UPDATE, |
338 |
|
"lot=".$rowlot['lot']); |
339 |
|
database::isError($res_lots_update); |
340 |
|
} |
341 |
|
} else { // Si pas de lot liaison avec les demandeurs |
342 |
|
// Récupération de la liste des demandeurs |
343 |
|
$res_demandeurs = $this->db->query($sql_demandeurs.$sql_where); |
344 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE); |
345 |
|
database::isError($res_demandeurs); |
346 |
|
// Définition de l'id du DA |
347 |
|
$valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL; |
348 |
|
$valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation"); |
349 |
|
// Pour chaque demandeur on créer un lien avec le DA |
350 |
|
while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) { |
351 |
|
// Ajout de l'id du demandeur et du flag petitionnaire_principal |
352 |
|
// aux données à insérer |
353 |
|
$valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"]; |
354 |
|
$valDemandeurUpdate["petitionnaire_principal"] = $rowDemandeur["petitionnaire_principal"]; |
355 |
|
// Instanciation d'un lien dossier_autorisation/demandeur en ajout |
356 |
|
require_once "../obj/lien_dossier_autorisation_demandeur.class.php"; |
357 |
|
$ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG); |
358 |
|
// Ajout d'un enregistrement avec les données des liens |
359 |
|
$ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG); |
360 |
|
} |
361 |
|
} |
362 |
|
|
363 |
|
|
364 |
|
/** |
365 |
|
* Mise à jour des dates |
366 |
|
*/ |
367 |
|
// Requêtes permettant de les recupérer |
368 |
|
$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 |
369 |
|
WHERE dossier.dossier_autorisation='".$this->getVal("dossier_autorisation")."'"; |
370 |
|
|
371 |
|
$sql_date_doc_daact = "SELECT MAX(dossier.date_chantier) as date_chantier, MAX(dossier.date_achevement) as date_achevement FROM ".DB_PREFIXE."dossier |
372 |
|
LEFT OUTER JOIN ".DB_PREFIXE."instruction ON |
373 |
|
dossier.dossier=instruction.dossier |
374 |
|
LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON |
375 |
|
dossier.avis_decision = avis_decision.avis_decision |
376 |
|
WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' |
377 |
|
AND date_decision IS NOT NULL AND avis_decision.typeavis='F' AND instruction.date_retour_signature IS NOT NULL"; |
378 |
|
// Récupération des infos avec la 1ere requête |
379 |
|
$res_date_depot_decision_validite = $this->db->query($sql_date_depot_decision_validite); |
380 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_depot_decision_validite."\")", VERBOSE_MODE); |
381 |
|
database::isError($res_date_depot_decision_validite); |
382 |
|
$row_date_depot_decision_validite = $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC); |
383 |
|
// Récupération des infos avec la 2nd requête |
384 |
|
$res_date_doc_daact = $this->db->query($sql_date_doc_daact); |
385 |
|
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_doc_daact."\")", VERBOSE_MODE); |
386 |
|
database::isError($res_date_doc_daact); |
387 |
|
$row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC); |
388 |
|
// Fusion des 2 résultats |
389 |
|
$row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact); |
390 |
|
// Si pas de date on remplace "" par NULL pour éviter les erreurs de base de données |
391 |
|
foreach($row_date as $key => $date) { |
392 |
|
if($date == "") { |
393 |
|
$row_date[$key] = NULL; |
394 |
|
} |
395 |
|
} |
396 |
|
// Mise à jour du DA avec ces nouvelles dates |
397 |
|
$res_update_date = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation", |
398 |
|
$row_date, |
399 |
|
DB_AUTOQUERY_UPDATE, |
400 |
|
"dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"); |
401 |
|
database::isError($res_update_date); |
402 |
|
|
403 |
|
} |
404 |
}// fin classe |
}// fin classe |
405 |
?> |
?> |