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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3730 - (show annotations)
Fri Mar 18 11:50:26 2016 UTC (8 years, 10 months ago) by mbroquet
File size: 15200 byte(s)
Actualisation du trunk
1 <?php
2 //$Id: lot.class.php 4698 2015-04-30 16:17:47Z nmeucci $
3 //gen openMairie le 08/11/2012 14:59
4
5 require_once ("../gen/obj/lot.class.php");
6
7 class lot extends lot_gen {
8
9 var $donnees_techniques;
10 var $idDT;
11
12 function lot($id,&$db,$debug) {
13 $this->constructeur($id,$db,$debug);
14
15 }// fin constructeur
16
17
18 function triggerAjouterApres($id, &$db, $val, $DEBUG) {
19 parent::triggerAjouterApres($id, $db, $val, $DEBUG);
20
21 if($this->getParameter("idxformulaire") != "") {
22
23 // Insertion du lien demandeur/lot
24 require_once ("../obj/lien_lot_demandeur.class.php");
25 $lld = new lien_lot_demandeur("]", $db, $DEBUG);
26 $sqlDemandeur = "SELECT * FROM ".DB_PREFIXE."lien_dossier_demandeur
27 WHERE dossier='".$this->getParameter("idxformulaire")."'";
28 $res = $db->query($sqlDemandeur);
29 $this->f->addToLog("triggerAjouterApres() : db->query(\"".$sqlDemandeur."\");", VERBOSE_MODE);
30 if ( database::isError($res)){
31 die();
32 }
33 while($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
34 unset($row['lien_dossier_demandeur']);
35 unset($row['dossier']);
36 $row['lien_lot_demandeur'] = "";
37 $row['lot'] = $this->valF["lot"];
38 $lld->ajouter($row, $db, $DEBUG);
39 }
40 }
41 }
42
43 /**
44 * Cache le champ dossier_autorisation
45 */
46 function setType(&$form,$maj) {
47 parent::setType($form,$maj);
48
49 $form->setType('dossier_autorisation', 'hidden');
50 $form->setType('dossier','hidden');
51 }
52
53
54 /**
55 * Permet d'affecter des valeurs aux champs de sous formulaires
56 */
57 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){
58 $this->retourformulaire = $retourformulaire;
59 if($validation == 0) {
60 if($retourformulaire =='dossier'
61 || $this->getParameter("retourformulaire") == "dossier_instruction"
62 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
63 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
64 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
65 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures") {
66 $form->setVal('dossier', $idxformulaire);
67 }
68 if($retourformulaire =='dossier_autorisation')
69 $form->setVal('dossier_autorisation', $idxformulaire);
70 }// fin validation
71 }// fin setValsousformulaire
72
73 /**
74 * Ajout de la liste des demandeurs
75 */
76 function sousformSpecificContent($maj) {
77
78 //En consultation
79 if ( $maj == 3 ){
80
81 //Récupère la liste des demandeurs
82 $sql = "SELECT
83 civilite.code as code,
84 CASE WHEN demandeur.qualite='particulier'
85 THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
86 ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
87 END as nom,
88 lien_lot_demandeur.petitionnaire_principal as petitionnaire_principal,
89 demandeur.type_demandeur as type_demandeur
90 FROM
91 ".DB_PREFIXE."lien_lot_demandeur
92 LEFT JOIN
93 ".DB_PREFIXE."demandeur
94 ON
95 lien_lot_demandeur.demandeur = demandeur.demandeur
96 LEFT JOIN
97 ".DB_PREFIXE."civilite
98 ON
99 demandeur.particulier_civilite = civilite.civilite OR
100 demandeur.personne_morale_civilite = civilite.civilite
101 WHERE lien_lot_demandeur.lot = ".$this->val[array_search('lot', $this->champs)]."
102 ORDER BY demandeur.type_demandeur DESC";
103
104 $res = $this->f->db->query($sql);
105 $this->f->addToLog("sousformSpecificContent() : db->query(\"".$sql."\")");
106 if ( database::isError($res)){
107 die();
108 }
109
110 //Affichage des données
111 echo "<div class=\"field field-type-static\">";
112 echo "<div class=\"form-libelle\">";
113 echo "<label id=\"lib-libelle\" class=\"libelle-demandeur\" for=\"demandeur\">";
114 echo _("demandeur");
115 echo "</label>";
116 echo "</div>";
117 echo "<div class=\"form-content\">";
118 echo "<span id=\"demandeur\" class=\"field_value\">";
119
120 $listDemandeur = "";
121 //La liste des demandeurs
122 while($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
123
124 //Ordonne l'affichage des demandeur
125 if ( $row['petitionnaire_principal'] == 't' ){
126
127 $listDemandeur = $row['code']. " " . $row['nom'] . ", " . _("petitionnaire principal") . "<br/>".$listDemandeur;
128 }
129 else {
130
131 $listDemandeur .= $row['code']. " " . $row['nom'] . ", " . $row['type_demandeur'] . "<br/>";
132 }
133 }
134 echo $listDemandeur;
135 echo "</span>";
136 echo "</div>";
137 echo "</div>";
138 }
139 }
140
141 /**
142 * Surcharge pour gérer les actions disponibles dans le portlet
143 */
144 function checkAccessibility() {
145 //
146 parent::checkAccessibility();
147
148 $idxformulaire = $this->getParameter("idxformulaire");
149 $retourformulaire = $this->getParameter("retourformulaire");
150 //Si le dossier d'instruction auquel est rattaché le lot est
151 //cloturé, on affiche pas les liens du portlet
152 if ( $idxformulaire != '' &&
153 (
154 $retourformulaire == 'dossier' ||
155 $retourformulaire == 'dossier_instruction' ||
156 $retourformulaire == 'dossier_instruction_mes_encours' ||
157 $retourformulaire == 'dossier_instruction_tous_encours' ||
158 $retourformulaire == 'dossier_instruction_mes_clotures' ||
159 $retourformulaire == 'dossier_instruction_tous_clotures'
160 )){
161
162 //On récuppère le statut du dossier d'instruction
163 $statut = $this->f->getStatutDossier($idxformulaire);
164 if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
165
166 //On cache le lien de modification
167 $this->parameters["actions"]["modifier"] = NULL;
168 $this->parameters["actions"]["supprimer"] = NULL;
169 $this->actions_sup["transferer"] = NULL;
170
171 //Si le dossier lié n'a pas de données techniques
172 if ( !$this->hasDonneesTechniquesDossier($idxformulaire) ){
173 $this->actions_sup["editer_donnees"] = NULL;
174 }
175 }
176 }
177
178 /*
179 * Si l'utilisateur est un instructeur sans bypass sur l'action et si
180 * sa division ne correspond pas à celle du dossier alors on n'affiche
181 * pas cette action dans le portlet.
182 */
183
184 $instr_with_different_div = false;
185 if ($this->f->isUserInstructeur()
186 && isset($this->f->om_utilisateur["division"])
187 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
188 $instr_with_different_div = true;
189 }
190
191 // MODIFIER
192 if ($this->f->can_bypass("lot", "modifier") == false
193 && $instr_with_different_div == true) {
194 //
195 $this->parameters["actions"]["modifier"] = NULL;
196 }
197 // SUPPRIMER
198 if ($this->f->can_bypass("lot", "supprimer") == false
199 && $instr_with_different_div == true) {
200 //
201 $this->parameters["actions"]["supprimer"] = NULL;
202 }
203 // TRANSFERER
204 if ($this->f->can_bypass("lot", "transferer") == false
205 && $instr_with_different_div == true) {
206 //
207 unset($this->actions_sup["transferer"]);
208 }
209 // EDITER DONNEES TECHNIQUES
210 if ($this->f->can_bypass("lot", "editer_donnees") == false
211 && $instr_with_different_div == true) {
212 //
213 unset($this->actions_sup["editer_donnees"]);
214 }
215 }
216
217 /**
218 * Cette methode est à surcharger elle permet de tester dans chaque classe
219 * des droits spécifiques en fonction des données
220 */
221 function canAccess() {
222
223 $retourformulaire = $this->getParameter("retourformulaire");
224 // Si l'utilisateur est un instructeur et que le dossier est cloturé
225 if ( $this->f->isUserInstructeur() &&
226 $this->f->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" &&
227 (
228 $retourformulaire == 'dossier' ||
229 $retourformulaire == 'dossier_instruction' ||
230 $retourformulaire == 'dossier_instruction_mes_encours' ||
231 $retourformulaire == 'dossier_instruction_tous_encours' ||
232 $retourformulaire == 'dossier_instruction_mes_clotures' ||
233 $retourformulaire == 'dossier_instruction_tous_clotures'
234 ) && $this->getParameter("maj") != 3) {
235
236 return false;
237 }
238
239 // Récupération du bypass adéquat
240 // XXX - actions spécifiques non testées
241 $bypass = false;
242 if (($this->f->can_bypass("lot", "ajouter") == true && $this->getParameter("maj") == 0)
243 || ($this->f->can_bypass("lot", "modifier") == true && $this->getParameter("maj") == 1)
244 || ($this->f->can_bypass("lot", "supprimer") == true && $this->getParameter("maj") == 2)) {
245 $bypass = true;
246 }
247 // Si, hors mode consulter, l'utilisateur est un instructeur sans bypass
248 // dont la division ne correspond pas à celle du dossier
249 if ($this->getParameter("maj") != 3 && $bypass == false && $this->f->isUserInstructeur()
250 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
251 //
252 return false;
253 }
254 //
255 return true;
256 }
257
258 /**
259 * Retourne true s'il y a des données techniques lié au dossier d'instruction
260 * @param string $idx Identifiant du dossier d'instruction
261 * @return boolean S'il y a des données techniques
262 */
263 function hasDonneesTechniquesDossier($idx){
264
265 //Si l'identifiant du dossier d'instruction founi est correct
266 if ( $idx != '' ){
267
268 //On récupère le statut de l'état du dossier d'instruction à partir de
269 //l'identifiant du dossier
270 $sql = "SELECT donnees_techniques.donnees_techniques
271 FROM ".DB_PREFIXE."donnees_techniques
272 LEFT JOIN
273 ".DB_PREFIXE."dossier
274 ON
275 donnees_techniques.dossier_instruction = dossier.dossier
276 WHERE dossier.dossier = '".$idx."'";
277 $donnees_techniques = $this->db->query($sql);
278 $this->f->addToLog("hasDonneesTechniquesDossier() : db->query(\"".$sql."\")", VERBOSE_MODE);
279 if ( database::isError($donnees_techniques)){
280 die();
281 }
282
283 if ( $donnees_techniques->numRows() > 0 ){
284 return TRUE;
285 }
286 }
287 return FALSE;
288 }
289
290 /**
291 * Cette variable permet de stocker le résultat de la méthode
292 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
293 * ces appels.
294 * @var string Code de la division du dossier en cours
295 */
296 var $_division_from_dossier = NULL;
297
298 /**
299 * Cette méthode permet de récupérer le code de division correspondant
300 * au dossier sur lequel on se trouve.
301 *
302 * @return string Code de la division du dossier en cours
303 */
304 function getDivisionFromDossier() {
305
306 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
307 // Pour éviter de refaire le traitement de recherche de la division
308 // alors on vérifie si nous ne l'avons pas déjà calculé.
309 if ($this->_division_from_dossier != NULL) {
310 // Logger
311 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
312 // On retourne la valeur déjà calculée
313 return $this->_division_from_dossier;
314 }
315
316 // Par défaut, on définit la valeur du dossier à NULL
317 $dossier = NULL;
318 // Test sur le mode et le contexte du formulaire
319 if ($this->getParameter("maj") == 0
320 && ($this->getParameter("retourformulaire") == "dossier"
321 || $this->getParameter("retourformulaire") == "dossier_instruction"
322 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
323 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
324 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
325 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
326 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
327 // n'existe pas en base de données) ET que nous nous trouvons
328 // dans le contexte d'un dossier d'instruction alors on récupère
329 // le numéro de dossier depuis le paramètre 'idxformulaire'
330 $dossier = $this->getParameter("idxformulaire");
331 } else {
332 // Sinon on récupère le numéro de dossier dans le champs dossier de
333 // l'enregistrement (en base de données)
334 $dossier = $this->getVal("dossier");
335 }
336
337 // On appelle la méthode de la classe utils qui renvoi le code de la
338 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
339 // prochain appel de cette méthode
340 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
341 // Logger
342 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
343 // On retourne la valeur retournée
344 return $this->_division_from_dossier;
345
346 }
347 }// fin classe
348 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26