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

Annotation of /trunk/obj/lien_dossier_dossier.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6395 - (hide annotations)
Wed Mar 22 14:40:25 2017 UTC (7 years, 10 months ago) by nhaye
Original Path: branches/contentieux/obj/lien_dossier_dossier.class.php
File size: 17561 byte(s)
Traductions

1 softime 4927 <?php
2     //$Id$
3     //gen openMairie le 10/10/2016 10:56
4    
5     require_once "../gen/obj/lien_dossier_dossier.class.php";
6    
7     class lien_dossier_dossier extends lien_dossier_dossier_gen {
8    
9     function __construct($id, &$dnu1 = null, $dnu2 = null) {
10     $this->constructeur($id);
11     }
12    
13 jymadier 4940 /**
14     *
15     */
16     var $activate_class_action = true;
17    
18     /**
19     * Définition des actions disponibles sur la classe.
20     *
21     * @return void
22     */
23     function init_class_actions() {
24     //
25     parent::init_class_actions();
26    
27 jymadier 4945 // ACTION - 001 - modifier
28     // Désactivation de l'action modifier
29     $this->class_actions[1] = null;
30    
31     // ACTION - 002 - supprimer
32     // Désactivation de l'action supprimer
33     $this->class_actions[2] = null;
34    
35     // ACTION - 003 - consulter
36     // Désactivation de l'action consulter
37     $this->class_actions[3] = null;
38    
39 jymadier 4940 // ACTION - 4 - view_tab
40     // Interface spécifique des l'onglet des dossiers liés
41     $this->class_actions[4] = array(
42     "identifier" => "view_tab",
43     "view" => "view_tab",
44     "permission_suffix" => "tab",
45     );
46 jymadier 5017
47     // ACTION - 5 - view_add
48     // Interface spécifique des l'onglet des dossiers liés
49     $this->class_actions[5] = array(
50     "identifier" => "view_ajouter_liaison",
51     "method" => "ajouter_liaison",
52     "permission_suffix" => "gestion_defaut",
53     "crud" => "create",
54 nmeucci 6289 "condition" => "is_ajoutable",
55 jymadier 5017 );
56 jymadier 4940 }
57    
58 nmeucci 6289 /**
59     * CONDITION - is_ajoutable.
60     *
61     * Condition pour pouvoir ajouter
62     *
63     * @return boolean
64     */
65     function is_ajoutable() {
66     // Si bypass
67     if ($this->f->can_bypass(get_class($this), "gestion_defaut")) {
68     return true;
69     }
70     // Teste si le dossier n'est pas cloturé
71     // et si l'instructeur est de la même division
72     if ($this->is_dossier_instruction_not_closed() === true
73     && $this->is_instructeur_from_division_dossier() === true) {
74     return true;
75     }
76 jymadier 5017
77 nmeucci 6289 return false;
78     }
79    
80 jymadier 4940 /**
81     * VIEW - view_tab
82     *
83     * Cette vue permet d'afficher l'interface spécifique du tableau
84 jymadier 5017 * des dossiers liés.
85 jymadier 4940 *
86     * @return void
87     */
88     function view_tab() {
89    
90     // Vérification de l'accessibilité sur l'élément
91     $this->checkAccessibility();
92    
93 nmeucci 6054 // Si le paramètre 'idxformulaire' n'est pas vide
94     // (idxformulaire est la valeur de la clé primaire du DI)
95 jymadier 4941 if ($this->f->get_submitted_get_value('idxformulaire') !== null and $this->f->get_submitted_get_value('idxformulaire') != '') {
96 nmeucci 4942
97 jymadier 4940 // Initialisation des variables
98 jymadier 4941 $idx = $this->f->get_submitted_get_value('idxformulaire');
99 jymadier 4940 $retourformulaire = ($this->f->get_submitted_get_value('retourformulaire') !== null) ? $this->f->get_submitted_get_value('retourformulaire') : "";
100 nmeucci 6082 if ($retourformulaire == "") {
101     // Valeur par défaut de $retourformulaire
102     $retourformulaire = 'dossier_instruction';
103     }
104 nmeucci 4942
105 nmeucci 6054 // Vérification de la visibilité du DA
106     $da = $this->get_inst_dossier_instruction($idx);
107    
108 nmeucci 5063 echo "<div id=\"sousform-href\"></div>";
109     echo "<div id=\"sousform-lien_dossier_dossier\">";
110     echo "<div class=\"soustab-message\"></div>";
111     echo "<div class=\"soustab-container\">";
112 nmeucci 4942
113 jymadier 4940 // Affichage du tableau des dossiers d'autorisation
114 nmeucci 6054 if ($da->is_dossier_autorisation_visible() === true) {
115 nhaye 6378 $link_tab_dossier_autorisation = '../scr/soustab.php?obj=dossier_autorisation&idxformulaire='.$idx.'&retour=tab&retourformulaire='.$retourformulaire;
116 nmeucci 6054 printf('<div id="sousform-dossier_autorisation"></div>
117     <script type="text/javascript" >
118     ajaxIt(\'dossier_autorisation\', \'%1$s\');
119     </script>
120     ', $link_tab_dossier_autorisation);
121     }
122 nmeucci 4942
123     // Affichage du tableau des dossiers d'instruction
124 nhaye 6378 $link_tab_dossier_lies = '../scr/soustab.php?obj=dossier_lies&idxformulaire='.$idx.'&retour=tab&retourformulaire='.$retourformulaire;
125 nmeucci 5123 printf('<div id="tab_dossier_lies_href" data-href="%1$s"></div><div id="sousform-dossier_lies"></div>
126 nmeucci 5063 <script type="text/javascript" >
127 nmeucci 5070 ajaxIt(\'dossier_lies\', \'%1$s\');
128 nmeucci 5063 </script>
129 nmeucci 5070 ', $link_tab_dossier_lies);
130 jymadier 4940
131 nmeucci 4942 // Affichage du tableau des dossiers d'autorisation liés géographiquement
132 nhaye 6378 $link_tab_dossier_lies_geographiquement = '../scr/soustab.php?obj=dossier_lies_geographiquement&idxformulaire='.$idx.'&retour=tab&retourformulaire='.$retourformulaire;
133 nmeucci 5123 printf('<div id="sousform-dossier_lies_geographiquement"></div>
134 nmeucci 5063 <script type="text/javascript" >
135 nmeucci 5070 ajaxIt(\'dossier_lies_geographiquement\', \'%1$s\');
136 nmeucci 5063 </script>
137 nmeucci 5070 ', $link_tab_dossier_lies_geographiquement);
138 nmeucci 4942
139     echo '</div></div>';
140     }
141 jymadier 4940 }
142    
143 jymadier 5017
144     /**
145     * VIEW - ajouter_liaison
146     *
147     * Cette vue permet de traiter les contraintes postées et d'afficher
148     * le résultat de ce traitement en AJAX.
149     *
150     * @return void
151     */
152     function ajouter_liaison($val = array()) {
153     // Begin
154     $this->begin_treatment(__METHOD__);
155     // Mutateur de valF
156     $this->setValF($val);
157     // Mutateur de valF specifique a l'ajout
158     $this->setValFAjout($val);
159     // Verification de la validite des donnees
160     $this->verifier($val, $this->f->db, null);
161     // Verification specifique au MODE 'insert' de la validite des donnees
162     $this->verifierAjout($val, $this->f->db);
163     // Si les verifications precedentes sont correctes, on procede a
164     // l'ajout, sinon on ne fait rien et on affiche un message d'echec
165     if ($this->correct) {
166     // Appel au mutateur pour le calcul de la cle primaire (si la cle
167     // est automatique) specifique au MODE 'insert'
168     $this->setId($this->f->db);
169     // Execution du trigger 'before' specifique au MODE 'insert'
170     // Le premier parametre est vide car en MODE 'insert'
171     // l'enregistrement n'existe pas encore donc il n'a pas
172     // d'identifiant
173     if($this->triggerajouter("", $this->f->db, $val, null) === false) {
174     $this->correct = false;
175     $this->addToLog(__METHOD__."(): ERROR", DEBUG_MODE);
176     // Return
177     return $this->end_treatment(__METHOD__, false);
178     }
179     // Execution de la requete d'insertion des donnees de l'attribut
180     // valF de l'objet dans l'attribut table de l'objet
181     $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);
182     // Logger
183     $this->addToLog(__METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($this->valF, true).", DB_AUTOQUERY_INSERT);", VERBOSE_MODE);
184     // Si une erreur survient
185     if (database::isError($res, true)) {
186     // Appel de la methode de recuperation des erreurs
187     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
188     $this->correct = false;
189     // Return
190     return $this->end_treatment(__METHOD__, false);
191     } else {
192     //
193     $main_res_affected_rows = $this->f->db->affectedRows();
194     // Log
195     $this->addToLog(__METHOD__."(): "._("Requete executee"), VERBOSE_MODE);
196     // Execution du trigger 'after' specifique au MODE 'insert'
197     // Le premier parametre est vide car en MODE 'insert'
198     // l'enregistrement n'existe pas encore donc il n'a pas
199     // d'identifiant
200     if($this->triggerajouterapres($this->valF[$this->clePrimaire], $this->f->db, $val, null) === false) {
201     $this->correct = false;
202     $this->addToLog(__METHOD__."(): ERROR", DEBUG_MODE);
203     // Return
204     return $this->end_treatment(__METHOD__, false);
205     }
206 nmeucci 6050 $messageAddSuccess = _("Le dossier %s a été lié.");
207 nmeucci 5141 $this->addToMessage(sprintf($messageAddSuccess, $this->valF['dossier_cible']));
208 jymadier 5017
209     // Template du lien vers le DI
210 nmeucci 5839 $template_link_di = "<a id='link_dossier_instruction_lie' title=\"%s\" class='lien' href='../scr/form.php?obj=dossier_instruction&action=777&idx=%s'>
211 nmeucci 5141 <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s</a>";
212 jymadier 5017
213     // Lien vers le DI
214 nmeucci 5141 $link_di = sprintf(
215     $template_link_di,
216     _("Acceder au dossier d'instruction"),
217     $this->valF['dossier_cible'],
218     _("Acceder au dossier d'instruction")
219     );
220 jymadier 5017
221     // Message affiché à l'utilisateur
222 nmeucci 5141 $this->addToMessage('<br/>'.$link_di);
223 jymadier 5017 }
224     } else {
225     // Return
226     return $this->end_treatment(__METHOD__, false);
227     }
228     // Return
229     return $this->end_treatment(__METHOD__, true);
230     }
231    
232    
233 jymadier 4945 function setType(&$form,$maj) {
234     parent::setType($form,$maj);
235    
236     //type
237 jymadier 5017 $form->setType('lien_dossier_dossier','hidden');
238 jymadier 4945 $form->setType('dossier_src','hidden');
239 jymadier 5017 $form->setType('dossier_cible', 'text');
240 jymadier 4945 $form->setType('type_lien','hidden');
241     }
242    
243 nmeucci 5227 function setLib(&$form,$maj) {
244     parent::setLib($form,$maj);
245     $form->setLib('dossier_cible', _("dossier cible"));
246     }
247 jymadier 5017
248 nmeucci 5227
249 jymadier 5017 function setLayout(&$form, $maj) {
250    
251    
252     // Col1 : Fieldset "Dossier d'Instruction"
253     // $form->setBloc('dossier_cible', 'D', '', 'col_9');
254    
255     $form->setFieldset('dossier_cible', 'D', _("Lier un Dossier"));
256     $form->setFieldset('dossier_cible', 'F');
257    
258    
259     // $form->setBloc('dossier_cible', 'F');
260    
261     }
262    
263    
264     function setvalF($val) {
265     //
266     parent::setValF($val);
267     //
268     if ($this->getParameter('maj') == 5) {
269     //
270     $dossier = $this->getParameter("idxformulaire");
271     //
272     $this->valF["dossier_src"] = $dossier;
273     $this->valF["dossier_cible"] = strtoupper(str_replace(" ", "", $this->f->db->escapesimple($this->valF["dossier_cible"])));
274     $this->valF["type_lien"] = "manuel";
275     }
276     }
277    
278     function retoursousformulaire($idxformulaire, $retourformulaire, $val,
279     $objsf, $premiersf, $tricolsf, $validation,
280     $idx, $maj, $retour) {
281    
282     // Si le formulaire parent est dossier
283     if($retourformulaire === "dossier_instruction") {
284     //
285     echo "\n<a class=\"retour\" ";
286     echo "href=\"#\" ";
287    
288 nmeucci 5067 echo "onclick=\"ajaxIt('lien_dossier_dossier', '";
289     echo "../scr/sousform.php"
290 jymadier 5017 ."?obj=lien_dossier_dossier"
291     ."&action=4"
292 nmeucci 5067 ."&idx=0"
293 jymadier 5017 ."&retourformulaire=$retourformulaire"
294     ."&idxformulaire=$idxformulaire');\"";
295     echo "\" ";
296     echo ">";
297     //
298     echo _("Retour");
299     //
300     echo "</a>\n";
301    
302     } else {
303     //
304     parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
305     $objsf, $premiersf, $tricolsf, $validation,
306     $idx, $maj, $retour);
307     }
308     }
309    
310    
311     /**
312     * Surcharge de la méthode de vérification
313     **/
314     function verifier($val, &$db, $DEBUG) {
315 nmeucci 5141 // Vérification des champs obligatoires
316 jymadier 5017 $this->checkRequired();
317     if ($this->correct === false) {
318     return false;
319     }
320 nmeucci 5141
321     // Un DI ne peut pas s'auto-lier
322 jymadier 5017 $id_dossier_cible = str_replace(" ", "", $this->valF['dossier_cible']);
323 nmeucci 5141 if ($id_dossier_cible == $this->getParameter("idxformulaire")) {
324 jymadier 5017 $this->correct = false;
325 nhaye 6395 $this->addToMessage(_("Vous ne pouvez pas lier un dossier à lui-même. Saisissez un nouveau numéro puis recommencez."));
326 jymadier 5017 return false;
327     }
328    
329 nmeucci 5141 // Vérification de l'existence du DI cible (avec gestion multi)
330     $where_collectivite = "";
331     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
332     $where_collectivite = "
333     AND dossier.om_collectivite=".$_SESSION['collectivite']."
334 jymadier 5017 ";
335 nmeucci 5141 }
336     $sql = "
337     SELECT
338     count(*)
339     FROM
340     ".DB_PREFIXE."dossier
341     WHERE
342     dossier.dossier = '".strtoupper($id_dossier_cible)."'
343     ".$where_collectivite;
344     $count = $this->f->db->getOne($sql);
345     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
346     $this->f->isDatabaseError($count);
347     if ($count === '0') {
348     $this->correct = false;
349 nhaye 6395 $this->addToMessage(sprintf(_("Il n'existe aucun dossier correspondant au numéro %s. Saisissez un nouveau numéro puis recommencez."), $id_dossier_cible));
350 nmeucci 6051 $this->form->setVal('dossier_cible', '');
351 nmeucci 5141 return false;
352     }
353 jymadier 5017
354 nmeucci 5141 // Vérification de l'existence d'un lien
355     $type_link = $this->get_type_link($this->valF['dossier_src'], $this->valF['dossier_cible']);
356     if ($type_link !== null) {
357     switch ($type_link) {
358     case 'manuel':
359     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant.");
360     break;
361     case 'auto_recours':
362     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant (lien automatique).");
363     break;
364     case 'lien_par_da':
365     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant (même dossier d'autorisation).");
366     break;
367     default:
368     $message_deja_lie = _("L'existence d'une liaison entre le dossier courant et le %s n'a pas pu être vérifiée.");
369     $message_deja_lie .= '<br/>';
370     $message_deja_lie .= _("Veuillez contacter votre administrateur.");
371     break;
372 jymadier 5017 }
373 nmeucci 5141 $this->addToMessage(sprintf($message_deja_lie, $id_dossier_cible));
374     $this->correct = false;
375     return false;
376 jymadier 5017 }
377     }
378    
379 nmeucci 5141 /**
380     * Récupère, s'il existe, le type du lien entre deux DI.
381     *
382     * Le lien peut être implicite (les DI ont le même DA) ou créé :
383     * - manuellement (lors de l'ajout par l'utilisateur) ;
384     * - automatiquement (lors de la création d'un DI contentieux).
385     *
386     * S'il s'agit d'une liaison implicite par le DA,
387     * la notion de DI cible / source ne s'applique pas.
388     *
389     * Sinon elle s'applique et le lien est directionnel :
390     * inverser les DI cible et source est susceptible de modifier le résultat.
391     *
392     * @param string $dossier_src ID du DI source
393     * @param string $dossier_cible ID du DI cible
394     * @return mixed NULL si aucune liaison sinon type du lien (STRING)
395     */
396     function get_type_link($dossier_src, $dossier_cible) {
397 jymadier 5017
398 nmeucci 5141 // On vérifie s'il y a une entrée dans la table de liaison pour le sens
399     // indiqué en paramètres : si c'est le cas on retourne le type du lien trouvé.
400 jymadier 5017 $sql = "
401     SELECT
402     type_lien
403     FROM
404     ".DB_PREFIXE."lien_dossier_dossier
405     WHERE
406     dossier_src = '".strtoupper($dossier_src)."'
407     AND dossier_cible = '".strtoupper($dossier_cible)."'
408     ";
409     $type_lien = $this->f->db->getOne($sql);
410     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
411 nmeucci 5141 $this->f->isDatabaseError($type_lien);
412 jymadier 5017 if ($type_lien !== null AND $type_lien !== '') {
413     return $type_lien;
414     }
415 nmeucci 5141
416     // Sinon on vérifie la présence d'une éventuelle liaison implicite par le DA.
417     $sql = "
418     SELECT
419     count(*)
420     FROM
421     ".DB_PREFIXE."dossier
422     WHERE
423     dossier = '".strtoupper($dossier_cible)."'
424     AND dossier_autorisation = (SELECT dossier_autorisation
425     FROM ".DB_PREFIXE."dossier
426     WHERE dossier = '".strtoupper($dossier_src)."')
427     ";
428     $res = $this->f->db->getOne($sql);
429     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
430     $this->f->isDatabaseError($res);
431     if ($res === '1') {
432     return 'lien_par_da';
433     }
434    
435     // Sinon aucun lien n'a été trouvé.
436     return null;
437 jymadier 5017 }
438 nmeucci 6054
439     /**
440     * Récupère l'instance du dossier d'instruction.
441     *
442     * @param string $dossier_instruction Identifiant du dossier d'instruction.
443     *
444     * @return object
445     */
446     function get_inst_dossier_instruction($dossier_instruction = null) {
447     //
448     return $this->get_inst_common("dossier_instruction", $dossier_instruction);
449     }
450 softime 4927 }
451    
452     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26