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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 789 by mlimic, Wed Nov 21 11:25:04 2012 UTC revision 1639 by nhaye, Wed Apr 10 09:40:44 2013 UTC
# Line 6  require_once ("../gen/obj/dossier_autori Line 6  require_once ("../gen/obj/dossier_autori
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
# Line 44  class dossier_autorisation extends dossi Line 49  class dossier_autorisation extends dossi
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  ?>  ?>

Legend:
Removed from v.789  
changed lines
  Added in v.1639

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26