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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10808 - (show annotations)
Wed Nov 24 17:48:35 2021 UTC (3 years, 2 months ago) by softime
File size: 44279 byte(s)
* Fusion de la branche d'intégration 5.2.0-develop dans le trunk

1 <?php
2 /**
3 * DBFORM - 'evenement' - Surcharge gen.
4 *
5 * Ce script permet de définir la classe 'evenement'.
6 *
7 * @package openads
8 * @version SVN : $Id$
9 */
10
11 require_once "../gen/obj/evenement.class.php";
12
13 class evenement extends evenement_gen {
14
15 /**
16 * Définition des actions disponibles sur la classe.
17 *
18 * @return void
19 */
20 public function init_class_actions() {
21
22 parent::init_class_actions();
23
24 // ACTION - 000 - ajouter
25 // Modifie la condition d'affichage du bouton ajouter
26 $this->class_actions[0]["condition"] = "is_addable_editable_and_deletable";
27
28 // ACTION - 001 - modifier
29 // Modifie la condition et le libellé du bouton modifier
30 $this->class_actions[1]["condition"] = "is_addable_editable_and_deletable";
31
32 // ACTION - 002 - supprimer
33 // Modifie la condition et le libellé du bouton supprimer
34 $this->class_actions[2]["condition"] = "is_addable_editable_and_deletable";
35 }
36
37 /**
38 * Clause select pour la requête de sélection des données de l'enregistrement.
39 *
40 * @return array
41 */
42 function get_var_sql_forminc__champs() {
43 return array(
44 "evenement.evenement",
45 "evenement.libelle",
46 "evenement.type",
47 "evenement.commentaire",
48 "evenement.non_verrouillable",
49 "evenement.non_modifiable",
50 "evenement.non_supprimable",
51 "evenement.notification",
52 "evenement.retour",
53 "array_to_string(array_agg(distinct(transition.etat) ORDER BY transition.etat), ';') as etats_depuis_lequel_l_evenement_est_disponible",
54 "array_to_string(array_agg(distinct(dossier_instruction_type) ORDER BY dossier_instruction_type), ';') as dossier_instruction_type",
55 "evenement.restriction",
56 "evenement.action",
57 "evenement.etat",
58 "evenement.delai",
59 "evenement.accord_tacite",
60 "evenement.delai_notification",
61 "evenement.avis_decision",
62 "evenement.autorite_competente",
63 "evenement.pec_metier",
64 "evenement.lettretype",
65 "evenement.consultation",
66 "evenement.phase",
67 "evenement.finaliser_automatiquement",
68 "evenement.evenement_suivant_tacite",
69 "evenement.evenement_retour_ar",
70 "evenement.evenement_retour_signature",
71 );
72 }
73
74 /**
75 * Clause from pour la requête de sélection des données de l'enregistrement.
76 *
77 * @return string
78 */
79 function get_var_sql_forminc__tableSelect() {
80 return sprintf(
81 '%1$s%2$s
82 LEFT JOIN %1$slien_dossier_instruction_type_evenement
83 ON lien_dossier_instruction_type_evenement.evenement=evenement.evenement
84 LEFT JOIN %1$stransition
85 ON transition.evenement=evenement.evenement',
86 DB_PREFIXE,
87 $this->table
88 );
89 }
90
91 /**
92 * Clause where pour la requête de sélection des données de l'enregistrement.
93 *
94 * @return string
95 */
96 function get_var_sql_forminc__selection() {
97 return " GROUP BY evenement.evenement, evenement.libelle ";
98 }
99
100 /**
101 * CONDITION - is_addable_editable_and_deletable.
102 *
103 * Condition pour l'affichage de l'action d'ajout, de modification et de
104 * suppression.
105 *
106 * @return boolean
107 */
108 public function is_addable_editable_and_deletable() {
109
110 // Si evenement est ouvert en sous-formulaire
111 if ($this->getParameter("retourformulaire") !== null) {
112
113 //
114 return false;
115 }
116
117 //
118 return true;
119 }
120
121
122 function setType(&$form, $maj) {
123 //
124 parent::setType($form, $maj);
125 // MODE AJOUTER et MODE MODIFIER
126 if ($maj == 0 || $maj == 1) {
127 //
128 $form->setType('accord_tacite', 'select');
129 $form->setType('delai_notification', 'select');
130 $form->setType('delai', 'select');
131 $form->setType('lettretype', 'select');
132 $form->setType('consultation', 'checkbox');
133 $form->setType('dossier_instruction_type','select_multiple');
134 $form->setType('type','select');
135 $form->setType('etats_depuis_lequel_l_evenement_est_disponible','select_multiple');
136 $form->setType('notification','select');
137 }
138 // MODE SUPPRIMER et MODE CONSULTER
139 if ($maj == 2 || $maj == 3) {
140 //
141 $form->setType('dossier_instruction_type','select_multiple_static');
142 $form->setType('etats_depuis_lequel_l_evenement_est_disponible','select_multiple_static');
143 $form->setType('notification','selecthiddenstatic');
144 }
145
146 // Mode modifier
147 if ($maj == 1) {
148 // Champ non modifiable pour éviter un déréglement du paramètrage
149 // des événements
150 $form->setType('retour', 'checkboxhiddenstatic');
151 }
152
153 // Cache les champs en fonction de la valeur de 'retour'
154 if ($this->getVal("retour") == 't') {
155
156 // Cache les champs "evenement_retour_ar" et
157 // "evenement_retour_signature"
158 $form->setType('evenement_retour_ar', 'hidden');
159 $form->setType('evenement_retour_signature', 'hidden');
160
161 // En mode Ajouter et Modifier
162 if ($maj < 2) {
163 $form->setType('restriction', 'hiddenstatic');
164 $form->setType('delai', 'hiddenstatic');
165 $form->setType('accord_tacite', 'hiddenstatic');
166 $form->setType('delai_notification', 'hiddenstatic');
167 $form->setType('avis_decision', 'hiddenstatic');
168 }
169 }
170 }
171
172 /**
173 *
174 * @return string
175 */
176 function get_var_sql_forminc__sql_dossier_instruction_type() {
177 return "SELECT
178 dossier_instruction_type.dossier_instruction_type,
179 CONCAT(dossier_autorisation_type_detaille.code,' - ',dossier_instruction_type.code,' - ',dossier_instruction_type.libelle) as lib
180 FROM ".DB_PREFIXE."dossier_instruction_type
181 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
182 ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
183 ORDER BY dossier_autorisation_type_detaille.code";
184 }
185
186 /**
187 *
188 * @return string
189 */
190 function get_var_sql_forminc__sql_dossier_instruction_type_by_id() {
191 return "SELECT
192 dossier_instruction_type.dossier_instruction_type,
193 CONCAT(dossier_autorisation_type_detaille.code,' - ',dossier_instruction_type.code,' - ',dossier_instruction_type.libelle) as lib
194 FROM ".DB_PREFIXE."dossier_instruction_type
195 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
196 ON dossier_instruction_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
197 WHERE dossier_instruction_type IN (<idx>)
198 ORDER BY dossier_autorisation_type_detaille.code";
199 }
200
201 /**
202 *
203 * @return string
204 */
205 function get_var_sql_forminc__sql_etats_depuis_lequel_l_evenement_est_disponible() {
206 return "SELECT etat.etat, etat.libelle as lib FROM ".DB_PREFIXE."etat ORDER BY lib";
207 }
208
209 /**
210 *
211 * @return string
212 */
213 function get_var_sql_forminc__sql_etats_depuis_lequel_l_evenement_est_disponible_by_id() {
214 return "SELECT etat.etat, etat.libelle as lib FROM ".DB_PREFIXE."etat WHERE etat.etat IN (<idx>) ORDER BY lib";
215 }
216
217 /**
218 *
219 * @return string
220 */
221 function get_var_sql_forminc__sql_evenement_retour_ar() {
222 return "SELECT evenement.evenement, evenement.libelle FROM ".DB_PREFIXE."evenement WHERE evenement.retour = 't' ORDER BY evenement.libelle ASC";
223 }
224
225 /**
226 *
227 * @return string
228 */
229 function get_var_sql_forminc__sql_evenement_retour_signature() {
230 return "SELECT evenement.evenement, evenement.libelle FROM ".DB_PREFIXE."evenement WHERE evenement.retour = 't' ORDER BY evenement.libelle ASC";
231 }
232
233 /**
234 *
235 * @return string
236 */
237 function get_var_sql_forminc__sql_evenement_suivant_tacite() {
238 return "SELECT evenement.evenement, evenement.libelle FROM ".DB_PREFIXE."evenement WHERE evenement.retour = 'f' ORDER BY evenement.libelle ASC";
239 }
240
241 /**
242 *
243 * @return string
244 */
245 function get_var_sql_forminc__sql_om_lettretype() {
246 return "SELECT id, (id||' '||libelle) as lib FROM ".DB_PREFIXE."om_lettretype ORDER BY lib";
247 }
248
249 /**
250 * SETTER_FORM - setSelect.
251 *
252 * @return void
253 */
254 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
255 parent::setSelect($form, $maj);
256 //
257 if ($maj < 2) {
258 // lettretype
259 $contenu = array();
260 $res = $this->f->db->query($this->get_var_sql_forminc__sql("om_lettretype"));
261 $this->f->isDatabaseError($res);
262 $contenu[0][0]='';
263 $contenu[1][0]=_('choisir')."&nbsp;"._('lettretype');
264 $k = 1;
265 while ($row =& $res->fetchRow()) {
266 $contenu[0][$k]=$row[0];
267 $contenu[1][$k]=$row[1];
268 $k++;
269 }
270 $form->setSelect('lettretype', $contenu);
271 }
272 // accord_tacite
273 $contenu=array();
274 $contenu[0]=array('Non','Oui');
275 $contenu[1]=array(_('Non'), _('Oui'));
276 $form->setSelect("accord_tacite",$contenu);
277 // delai_notification
278 $contenu=array();
279 $contenu[0]=array('0','1');
280 $contenu[1]=array('sans','1 '._("mois"));
281 $form->setSelect("delai_notification",$contenu);
282 // delai
283 $contenu=array();
284 $contenu[0]=array('0','1','2','3','4','5','6','7','8','9','10','11','12','18','24');
285 $contenu[1]=array('sans',
286 '1 '._("mois"),
287 '2 '._("mois"),
288 '3 '._("mois"),
289 '4 '._("mois"),
290 '5 '._("mois"),
291 '6 '._("mois"),
292 '7 '._("mois"),
293 '8 '._("mois"),
294 '9 '._("mois"),
295 '10 '._("mois"),
296 '11 '._("mois"),
297 '12 '._("mois"),
298 '18 '._("mois"),
299 '24 '._("mois")
300 );
301 $form->setSelect("delai",$contenu);
302
303 // type de l'événement
304 $contenu=array();
305 $contenu[0]=array(
306 '',
307 'arrete',
308 'incompletude',
309 'majoration_delai',
310 'retour',
311 'changement_decision',
312 'affichage',
313 'ait',
314 'annul_contradictoire'
315 );
316 $contenu[1]=array(
317 _('choisir type'),
318 _('arrete'),
319 _('incompletude'),
320 _('majoration_delai'),
321 _('retour de pieces'),
322 _('changement de decision'),
323 _('affichage'),
324 _('arrêté interruptif des travaux'),
325 _('annulation de contradictoire'),
326 );
327 $form->setSelect("type",$contenu);
328 // dossier_instruction_type
329 $this->init_select(
330 $form,
331 $this->f->db,
332 $maj,
333 null,
334 "dossier_instruction_type",
335 $this->get_var_sql_forminc__sql("dossier_instruction_type"),
336 $this->get_var_sql_forminc__sql("dossier_instruction_type_by_id"),
337 false,
338 true
339 );
340 // etats_depuis_lequel_l_evenement_est_disponible
341 $this->init_select(
342 $form,
343 $this->f->db,
344 $maj,
345 null,
346 "etats_depuis_lequel_l_evenement_est_disponible",
347 $this->get_var_sql_forminc__sql("etats_depuis_lequel_l_evenement_est_disponible"),
348 $this->get_var_sql_forminc__sql("etats_depuis_lequel_l_evenement_est_disponible_by_id"),
349 false,
350 true
351 );
352 // evenement_retour_ar
353 $this->init_select(
354 $form,
355 $this->f->db,
356 $maj,
357 null,
358 "evenement_retour_ar",
359 $this->get_var_sql_forminc__sql("evenement_retour_ar"),
360 $this->get_var_sql_forminc__sql("evenement_retour_ar_by_id"),
361 false,
362 false,
363 __("l'événement lors de la notification du pétitionnaire")
364 );
365
366 // notification
367 $contenu = array();
368 $contenu[0] = array(
369 '',
370 'notification_automatique',
371 'notification_manuelle',
372 'notification_auto_signature_requise',
373 'notification_manuelle_signature_requise'
374 );
375 $contenu[1] = array(
376 __('Pas de notification'),
377 __('Notification automatique'),
378 __('Notification manuelle'),
379 __('Notification automatique avec signature requise'),
380 __('Notification manuelle avec signature requise')
381 );
382 $form->setSelect('notification', $contenu);
383 }
384
385 function setTaille(&$form, $maj) {
386 //
387 parent::setTaille($form, $maj);
388 //
389 $form->setTaille("dossier_instruction_type", 10);
390 $form->setTaille("etats_depuis_lequel_l_evenement_est_disponible", 10);
391 }
392
393 function setMax(&$form, $maj) {
394 //
395 parent::setMax($form, $maj);
396 //
397 $form->setMax("dossier_instruction_type", 5);
398 $form->setMax("etats_depuis_lequel_l_evenement_est_disponible", 5);
399 }
400
401 function setLib(&$form, $maj) {
402 //
403 parent::setLib($form, $maj);
404 //
405 $form->setLib("dossier_instruction_type", _("type(s) de DI concerne(s)"));
406 $form->setLib("etats_depuis_lequel_l_evenement_est_disponible", _("etat(s) source(s)"));
407 // Change le libellé de retour pour pas qu'il soit confondus avec le
408 // bouton
409 $form->setLib("retour", _("retour_evenement"));
410 // En ajout et en modification
411 if ($maj < 2) {
412 $form->setLib("retour", _("retour_evenement (parametrage non modifiable)"));
413 }
414
415 // Message d'aide à l'utilisateur concernant les événements liés
416 $message_help = _("Les champs suivants seront copies vers l'evenement choisi :");
417 $champs_copy = _('delai') . ", " . _('accord_tacite') . ", " . _('delai_notification') . ", " . _('avis_decision') . ", " . _('restriction');
418 $form->setLib("evenement_retour_ar", __('Événement lors de la notification du correspondant') . "<br> (" . $message_help . " " . $champs_copy . ")");
419 $form->setLib("evenement_retour_signature", _('evenement_retour_signature') . "<br> (" . $message_help . " " . $champs_copy . ")");
420
421 $form->setLib("commentaire", __("Commentaire"));
422 $form->setLib("non_modifiable", __("Non modifiable"));
423 $form->setLib("non_supprimable", __("Non supprimable"));
424 }
425
426 function setLayout(&$form, $maj) {
427 //
428 parent::setLayout($form, $maj);
429 //
430 $form->setFieldset("evenement", "D", _("Evenement"));
431 $form->setFieldset("retour", "F");
432 //
433 $form->setFieldset("etats_depuis_lequel_l_evenement_est_disponible", "D", _("Filtre de selection"));
434 $form->setBloc("etats_depuis_lequel_l_evenement_est_disponible", "D", _("Filtres pour la possibilite de selection a l'ajout d'un evenement d'instruction"));
435 $form->setBloc("dossier_instruction_type", "F");
436 $form->setBloc("restriction", "DF", _("Filtre supplementaire a l'enregistrement de l'evenement d'instruction"));
437 $form->setFieldset("restriction", "F");
438 //
439 $form->setFieldset("action", "D", _("Action"));
440 $form->setBloc("action", "DF");
441 $form->setBloc("etat", "D", _("Parametres de l'action"));
442 $form->setBloc("pec_metier", "F");
443 $form->setFieldset("pec_metier", "F");
444 //
445 $form->setFieldset("lettretype", "D", _("Edition"));
446 $form->setFieldset("finaliser_automatiquement", "F");
447 //
448 $form->setFieldset("evenement_suivant_tacite", "D", _("Evenements lies"), "evenements_lies");
449 $form->setFieldset("evenement_retour_signature", "F");
450 }
451
452 /**
453 * TRIGGER - triggerajouterapres.
454 *
455 * - ...
456 * - Ajoute autant de lien_dossier_instruction_type_evenement que de dossier_instruction_type
457 * - ...
458 *
459 * @return boolean
460 */
461 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
462 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
463 parent::triggerajouterapres($id, $dnu1, $val);
464
465 /**
466 * LIEN ETAT
467 */
468 // Récupération des données du select multiple
469 $etats_depuis_lequel_l_evenement_est_disponible = $this->getEvenementLinks(
470 'etats_depuis_lequel_l_evenement_est_disponible',
471 'transition',
472 'etat'
473 );
474 // Ne traite les données que s'il y en a et qu'elles sont correctes
475 if (is_array($etats_depuis_lequel_l_evenement_est_disponible)
476 && count($etats_depuis_lequel_l_evenement_est_disponible) > 0) {
477 // Initialisation
478 $nb_liens_etat = 0;
479 // Boucle sur la liste des états sélectionnés
480 foreach ($etats_depuis_lequel_l_evenement_est_disponible as $value) {
481 // Test si la valeur par défaut est sélectionnée
482 if ($value != "") {
483 //
484 $data = array(
485 'evenement' => $this->valF['evenement'],
486 'etat' => $value
487 );
488 // On ajoute l'enregistrement
489 $this->addEvenementLinks($data, 'transition');
490 // On compte le nombre d'éléments ajoutés
491 $nb_liens_etat++;
492 }
493 }
494 // Message de confirmation
495 if ($nb_liens_etat > 0) {
496 if ($nb_liens_etat == 1) {
497 $this->addToMessage(_("Creation de ").$nb_liens_etat._(" nouvelle liaison realisee avec succes."));
498 } else {
499 $this->addToMessage(_("Creation de ").$nb_liens_etat._(" nouvelles liaisons realisees avec succes."));
500 }
501 }
502 }
503
504 /**
505 * LIEN DI TYPE
506 */
507 // Récupère les données du select multiple
508 $dossier_instruction_type = $this->getEvenementLinks(
509 'dossier_instruction_type',
510 'lien_dossier_instruction_type_evenement',
511 'dossier_instruction_type'
512 );
513 // Ne traite les données que s'il y en a et qu'elles sont correctes
514 if (is_array($dossier_instruction_type) && count($dossier_instruction_type) > 0) {
515 $nb_tr = 0;
516 // Va créer autant de lien_dossier_instruction_type_evenement
517 // que de dossier_instruction_type choisis
518 foreach ($dossier_instruction_type as $value) {
519 // Test si la valeur par défaut est sélectionnée
520 if ($value != "") {
521 //Données
522 $data = array(
523 'evenement' => $this->valF['evenement'],
524 'dossier_instruction_type' => $value
525 );
526 // Ajoute un nouveau lien_dossier_instruction_type_evenement
527 $this->addEvenementLinks($data, 'lien_dossier_instruction_type_evenement');
528 $nb_tr++;
529 }
530 }
531 // Message de confirmation de création de(s) lien_dossier_instruction_type_evenement(s).
532 if ($nb_tr > 0) {
533 if ($nb_tr == 1) {
534 $this->addToMessage(_("Creation de ").$nb_tr._(" nouvelle liaison
535 realisee avec succes."));
536 } else {
537 $this->addToMessage(_("Creation de ").$nb_tr._(" nouvelles liaisions
538 realisee avec succes."));
539 }
540 }
541 }
542 // Copie les paramètres vers l'événement lié
543 $this->copyParametersToEvenementLink();
544 }
545
546 /**
547 * Récupère les liens de la variable POST ou de la base de données selon le
548 * contexte
549 *
550 * @param $champ Le champ POST à récupérer
551 * @return mixed Les liens
552 */
553 function getEvenementLinks($champ, $table, $champLie){
554
555 $liens = array();
556
557 // Si on est dans le contexte d'un formulaire
558 if ( isset($this->form) && !is_null($this)){
559 // On récupère les données post
560 if ($this->f->get_submitted_post_value($champ) !== null) {
561
562 return $this->f->get_submitted_post_value($champ);
563 }
564 }
565 //Si on n'est pas dans le contexte d'un formulaire
566 else {
567
568 //Requête
569 $sql = "SELECT ".$champLie."
570 FROM ".DB_PREFIXE.$table."
571 WHERE evenement = ".$this->valF['evenement'];
572 $res = $this->f->db->query($sql);
573 $this->addToLog("getLiensEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
574 if (database::isError($res, true)) {
575 // Appel de la methode de recuperation des erreurs
576 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'evenement');
577 }
578
579 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
580
581 $liens[] = $row[$champLie];
582 }
583 }
584
585 return $liens;
586 }
587
588 /**
589 * TRIGGER - triggermodifierapres.
590 *
591 * @return boolean
592 */
593 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
594 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
595 parent::triggermodifierapres($id, $dnu1, $val);
596
597 /**
598 * LIEN ETAT
599 */
600 // On récupère les liens selon le contexte : POST ou base de données
601 $etats_depuis_lequel_l_evenement_est_disponible = $this->getEvenementLinks(
602 'etats_depuis_lequel_l_evenement_est_disponible',
603 'transition',
604 'etat'
605 );
606
607 // Suppression de tous les liens de la table transition (table lien
608 // entre etat et evenement)
609 $this->deleteEvenementLinks($this->valF['evenement'], 'transition');
610 // Ne traite les données que s'il y en a et qu'elles sont correctes
611 if (is_array($etats_depuis_lequel_l_evenement_est_disponible)
612 && count($etats_depuis_lequel_l_evenement_est_disponible) > 0) {
613 // Initialisation
614 $nb_liens_etat = 0;
615 // Boucle sur la liste des états sélectionnés
616 foreach ($etats_depuis_lequel_l_evenement_est_disponible as $value) {
617 // Test si la valeur par défaut est sélectionnée
618 if ($value != "") {
619 //
620 $data = array(
621 'evenement' => $this->valF['evenement'],
622 'etat' => $value
623 );
624 // On ajoute l'enregistrement
625 $this->addEvenementLinks($data, 'transition');
626 // On compte le nombre d'éléments ajoutés
627 $nb_liens_etat++;
628 }
629 }
630 // Message de confirmation
631 if ($nb_liens_etat > 0) {
632 $this->addToMessage(_("Mise a jour des liaisons realisee avec succes."));
633 }
634 }
635
636 /**
637 * LIEN DI TYPE
638 */
639 // On récupère les liens selon le contexte : POST ou base de données
640 $dossier_instruction_type = $this->getEvenementLinks(
641 'dossier_instruction_type',
642 'lien_dossier_instruction_type_evenement',
643 'dossier_instruction_type'
644 );
645 // Supprime toutes les liaisions liées à l'événement
646 $this->deleteEvenementLinks($this->valF['evenement'], 'lien_dossier_instruction_type_evenement');
647 // Ne traite les données que s'il y en a et qu'elles sont correctes
648 if (is_array($dossier_instruction_type) && count($dossier_instruction_type) > 0) {
649 $nb_tr = 0;
650 // Va créer autant de lien_dossier_instruction_type_evenement que de dossier_instruction_type choisis
651 foreach ($dossier_instruction_type as $value) {
652 // Test si la valeur par défaut est sélectionnée
653 if ($value != "") {
654 //Données
655 $data = array(
656 'evenement' => $this->valF['evenement'],
657 'dossier_instruction_type' => $value
658 );
659 //Ajoute un nouveau lien_dossier_instruction_type_evenement
660 $this->addEvenementLinks($data, 'lien_dossier_instruction_type_evenement');
661 $nb_tr++;
662 }
663 }
664 //Message de confirmation de création de(s) lien_dossier_instruction_type_evenement.
665 if ($nb_tr > 0) {
666 $this->addToMessage(_("Mise a jour des liaisons realisee avec succes."));
667 }
668 }
669 // Copie les paramètres vers l'événement lié
670 $this->copyParametersToEvenementLink();
671 }
672
673 /**
674 * Ajout d'un lien dans la table passée en paramètre
675 * @param $data Les données à ajouter
676 * @param $table La table à populer
677 */
678 function addEvenementLinks($data, $table){
679 $linksEvenement = $this->f->get_inst__om_dbform(array(
680 "obj" => $table,
681 "idx" => "]",
682 ));
683
684 $linksEvenement->valF = array();
685 $val[$table] = NULL;
686 //
687 if (is_array($data)) {
688 foreach ($data as $key => $value) {
689 $val[$key]=$value;
690 }
691 }
692 //
693 $linksEvenement->ajouter($val);
694 }
695
696 /**
697 * Suppression des liens de la table passé en paramètre
698 * @param $id L'identifiant de l'événement
699 * @param $table La table à vider
700 */
701 function deleteEvenementLinks($id, $table){
702
703 // Suppression de tous les enregistrements correspondants à l'id de
704 // l'événement
705 $sql = "DELETE
706 FROM ".DB_PREFIXE.$table."
707 WHERE evenement = ".$id;
708 $res = $this->f->db->query($sql);
709 $this->addToLog("deleteLiensEvenement(): db->query(\"".$sql."\");", VERBOSE_MODE);
710 if (database::isError($res, true)) {
711 // Appel de la methode de recuperation des erreurs
712 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'evenement');
713 }
714 }
715
716 /**
717 * TRIGGER - triggersupprimer.
718 *
719 * @return boolean
720 */
721 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
722 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
723 // Suppression de tous les liens de la table transition (table lien
724 // entre etat et evenement)
725 $this->deleteEvenementLinks($this->getVal('evenement'), 'transition');
726 //Supprime toutes les lien_dossier_instruction_type_evenement liées à l'evenement
727 $this->deleteEvenementLinks($this->getVal('evenement'), 'lien_dossier_instruction_type_evenement');
728 }
729
730 /* Surcharge de la fonction cleSecondaire pour qu'elle ne vérifie pas le lien avec
731 * lien_dossier_instruction_type_evenement qui sera supprimé juste après ni avec la table transition*/
732 function cleSecondaire($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
733
734 // Verification de la cle secondaire : bible
735 $this->rechercheTable($dnu1, "bible", "evenement", $id);
736 // Verification de la cle secondaire : demande_type
737 $this->rechercheTable($dnu1, "demande_type", "evenement", $id);
738 // Verification de la cle secondaire : evenement
739 $this->rechercheTable($dnu1, "evenement", "evenement_retour_ar", $id);
740 // Verification de la cle secondaire : evenement
741 $this->rechercheTable($dnu1, "evenement", "evenement_suivant_tacite", $id);
742 // Verification de la cle secondaire : instruction
743 $this->rechercheTable($dnu1, "instruction", "evenement", $id);
744 //// Verification de la cle secondaire : transition
745 //$this->rechercheTable($dnu1, "transition", "evenement", $id);
746 }
747
748 /**
749 * SETTER_FORM - setVal (setVal).
750 *
751 * @return void
752 */
753 function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
754 parent::setVal($form, $maj, $validation);
755 //
756 if ($maj == 2 && $validation == 1) {
757 //Affichage des dossier_instruction_type anciennement liés
758 $form->setVal("dossier_instruction_type", $this->val[count($this->val)-1]);
759 }
760 }
761
762 /**
763 * @return void
764 */
765 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
766 parent::verifier($val);
767 //Test qu'une restriction est présente
768 if (isset($this->valF['restriction']) && $this->valF['restriction'] != ""){
769
770 $restriction = $this->valF['restriction'];
771
772 // Liste des opérateurs possible
773 $operateurs = array(">=", "<=", "+", "-", "&&", "||", "==", "!=");
774
775 // Supprime tous les espaces de la chaîne de caractère
776 $restriction = str_replace(' ', '', $restriction);
777
778 // Met des espace avant et après les opérateurs puis transforme la
779 // chaine en un tableau
780 $tabRestriction = str_replace($operateurs, " ", $restriction);
781 // Tableau des champ
782 $tabRestriction = explode(" ", $tabRestriction);
783 // Supprime les numériques du tableau
784 foreach ($tabRestriction as $key => $value) {
785 if (is_numeric($value)) {
786 unset($tabRestriction[$key]);
787 }
788 }
789
790 // Vérifie les champs utilisés pour la restriction
791 $check_field_exist = $this->f->check_field_exist($tabRestriction,
792 'instruction');
793 if ($check_field_exist !== true) {
794
795 // Liste des champs en erreur
796 $string_error_fields = implode(", ", $check_field_exist);
797
798 // Message d'erreur
799 $error_message = _("Le champ %s n'est pas utilisable pour le champ %s");
800 if (count($check_field_exist) > 1) {
801 $error_message = _("Les champs %s ne sont pas utilisable pour le champ %s");
802 }
803
804 // Affiche l'erreur
805 $this->correct=false;
806 $this->addToMessage(sprintf($error_message, $string_error_fields, _("restriction")));
807 }
808 }
809
810 // Identifiant de l'évenement en cours
811 $evenement_main = "";
812 // Si pas en mode "Ajouter"
813 if ($this->getParameter("maj") != 0) {
814 $evenement_main = $this->valF['evenement'];
815 }
816
817 //
818 $error_retour = false;
819
820 // Si le même événement retour est sélectionné pour le retour ar et le
821 // retour signature
822 if (isset($this->valF['evenement_retour_ar'])
823 && $this->valF['evenement_retour_ar'] != ""
824 && isset($this->valF['evenement_retour_signature'])
825 && $this->valF['evenement_retour_signature'] != "") {
826
827 //
828 if ($this->valF['evenement_retour_ar'] == $this->valF['evenement_retour_signature']) {
829
830 // Récupère l'événement
831 $evenement_retour = $this->valF['evenement_retour_ar'];
832
833 // Récupère le libelle de l'événement
834 $evenement_retour_libelle = $this->getEvenementLibelle($evenement_retour);
835
836 // Message d'erreur
837 $error_message = _("L'evenement \"%s\" ne peut pas etre utilise en tant qu'evenement d'accuse de reception et evenement de retour de signature.");
838
839 // Le formulaire n'est pas validé
840 $this->correct=false;
841 $this->addToMessage(sprintf($error_message, $evenement_retour_libelle));
842 $error_retour = true;
843 }
844 }
845
846 // Si l'erreur concernant la double utilisation d'une événement retour
847 // sur le même formulaire n'est pas activé
848 if ($error_retour === false) {
849
850 // Vérifie que l'événement "evenement_retour_signature" n'est pas
851 // utilisé en evenement retour
852 $this->checkEvenementRetour('evenement_retour_signature', $evenement_main);
853 // Vérifie que l'événement n'est pas déjà utilisé en tant que
854 // "evenement_retour_ar"
855 $this->checkEvenementRetour('evenement_retour_ar', $evenement_main);
856 }
857
858 // Si c'est un événement retour
859 if (isset($this->valF['retour'])
860 && $this->valF['retour'] === true) {
861
862 // Supprime les valeurs des champs
863 unset($this->valF['evenement_retour_ar']);
864 unset($this->valF['evenement_retour_signature']);
865 }
866
867 if (isset($this->valF['lettretype']) &&
868 $this->valF['lettretype'] != '' &&
869 isset($this->valF['non_modifiable']) &&
870 $this->valF['non_modifiable'] == 'Oui')
871 {
872 // Message d'erreur
873 $error_message = __("L'evenement ne peut pas avoir une lettre type et être non modifiable");
874
875 // Le formulaire n'est pas validé
876 $this->correct=false;
877 $this->addToMessage($error_message);
878 }
879 }
880
881 /**
882 * Vérifie que l'événement $champ n'est pas déjà utilisé en événement
883 * 'evenement_retour_ar' et 'evenement_retour_signature'
884 * @param string $champ Champ à tester
885 * @param integer $evenement_main Identifiant de l'événement en cours
886 */
887 function checkEvenementRetour($champ, $evenement_main) {
888
889 // Si un l'évenement est renseigné
890 if (isset($this->valF[$champ])
891 && $this->valF[$champ] != "") {
892
893 // Récupère l'événement
894 $evenement_retour = $this->valF[$champ];
895
896 // Récupère le libelle de l'événement
897 $evenement_libelle = $this->getEvenementLibelle($evenement_retour);
898
899 // Si l'événement est utilisé en tant que "evenement_retour_ar"
900 if ($this->checkEvenementIsUse($evenement_retour, 'evenement_retour_ar', $evenement_main)) {
901
902 // Message d'erreur
903 $error_message = _("L'evenement \"%s\" est deja utilise en tant qu'evenement d'accuse de reception.");
904
905 // Le formulaire n'est pas validé
906 $this->correct=false;
907 $this->addToMessage(sprintf($error_message, $evenement_libelle));
908 }
909
910 // Si l'événement est utilisé en tant que
911 // "evenement_retour_signature"
912 if ($this->checkEvenementIsUse($evenement_retour, 'evenement_retour_signature', $evenement_main)) {
913
914 // Message d'erreur
915 $error_message = _("L'evenement \"%s\" est deja utilise en tant qu'evenement de retour de signature.");
916
917 // Le formulaire n'est pas validé
918 $this->correct=false;
919 $this->addToMessage(sprintf($error_message, $evenement_libelle));
920 }
921 }
922
923 }
924
925 /**
926 * Vérifie si l'événement est déjà utilisé dans un autre champ
927 * @param integer $evenement Identifiant de l'événement
928 * @return boolean
929 */
930 function checkEvenementIsUse($evenement_link, $champ, $evenement_main) {
931
932 // Initialisation du retour de la fonction
933 $return = false;
934
935 // Si les paramètres ne sont pas vide
936 if ($evenement_link != "" && $champ != "") {
937
938 // Requête SQL
939 $sql = "SELECT evenement
940 FROM ".DB_PREFIXE."evenement
941 WHERE $champ = $evenement_link";
942
943 // Si l'événement principal est déjà crée
944 if ($evenement_main != "") {
945 // Il ne faut pas que l'événement principal soit pris en compte
946 $sql .= " AND evenement != $evenement_main";
947 }
948
949 $this->f->addToLog("checkEvenementIsUse() : db->query(\"".$sql."\")", VERBOSE_MODE);
950 $res = $this->f->db->query($sql);
951 $this->f->isDatabaseError($res);
952
953 // Si il y a un résultat à la requête
954 if ($res->numrows() > 0) {
955
956 // Change la valeur de retour
957 $return = true;
958 }
959 }
960
961 // Retourne le résultat de la fonction
962 return $return;
963
964 }
965
966 /**
967 * Récupère le libellé de l'evénement passé en paramètre
968 * @param integer $evenement Identifiant de l'événement
969 * @return string Libellé de l'événement
970 */
971 function getEvenementLibelle($evenement) {
972
973 // Initialisation du résultat
974 $libelle = '';
975
976 // Si la condition n'est pas vide
977 if ($evenement != "") {
978
979 // Requête SQL
980 $sql = "SELECT libelle
981 FROM ".DB_PREFIXE."evenement
982 WHERE evenement = $evenement";
983 $this->f->addToLog("getEvenementLibelle() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
984 $libelle = $this->f->db->getOne($sql);
985 $this->f->isDatabaseError($libelle);
986 }
987
988 // Retourne résultat
989 return $libelle;
990 }
991
992 /**
993 * Copie les paramétres de l'événement principal vers l'évévenement lié
994 */
995 function copyParametersToEvenementLink() {
996 // Si un évenement retour de signature est renseigné
997 if (isset($this->valF['evenement_retour_signature'])
998 && $this->valF['evenement_retour_signature'] != "") {
999
1000 // Instanciation de la classe evenement
1001 $evenement_retour_signature = $this->f->get_inst__om_dbform(array(
1002 "obj" => "evenement",
1003 "idx" => $this->valF['evenement_retour_signature'],
1004 ));
1005 $evenement_retour_signature->setParameter("maj",1);
1006
1007 // Valeurs de l'enregistrement
1008 $value_evenement_retour_signature = array();
1009 foreach($evenement_retour_signature->champs as $key => $champ) {
1010 //
1011 $value_evenement_retour_signature[$champ] = $evenement_retour_signature->val[$key];
1012 }
1013
1014 // Valeurs à modifier
1015 $value_evenement_retour_signature['delai'] = $this->valF['delai'];
1016 $value_evenement_retour_signature['accord_tacite'] = $this->valF['accord_tacite'];
1017 $value_evenement_retour_signature['delai_notification'] = $this->valF['delai_notification'];
1018 $value_evenement_retour_signature['avis_decision'] = $this->valF['avis_decision'];
1019 $value_evenement_retour_signature['restriction'] = $this->valF['restriction'];
1020
1021 // Récupère le libelle de l'événement
1022 $evenement_retour_signature_libelle = $this->getEvenementLibelle($value_evenement_retour_signature['evenement']);
1023
1024 // Message de validation
1025 $valid_message = _("Mise a jour de l'evenement lie \"%s\" realisee avec succes.");
1026
1027 // Modifie l'événement lié pour qu'il ait les mêmes paramètres
1028 // que l'événement principal
1029 if ($evenement_retour_signature->modifier($value_evenement_retour_signature)) {
1030
1031 //
1032 $this->addToMessage(sprintf($valid_message, $evenement_retour_signature_libelle));
1033 }
1034
1035 }
1036
1037 // Si un évenement retour d'accusé de réception est renseigné
1038 if (isset($this->valF['evenement_retour_ar'])
1039 && $this->valF['evenement_retour_ar'] != "") {
1040
1041 // Instanciation de la classe evenement
1042 $evenement_retour_ar = $this->f->get_inst__om_dbform(array(
1043 "obj" => "evenement",
1044 "idx" => $this->valF['evenement_retour_ar'],
1045 ));
1046 $evenement_retour_ar->setParameter("maj",1);
1047
1048 // Valeurs de l'enregistrment
1049 $value_evenement_retour_ar = array();
1050 foreach($evenement_retour_ar->champs as $key => $champ) {
1051 //
1052 $value_evenement_retour_ar[$champ] = $evenement_retour_ar->val[$key];
1053 }
1054
1055 // Valeurs à modifier
1056 $value_evenement_retour_ar['delai'] = $this->valF['delai'];
1057 $value_evenement_retour_ar['accord_tacite'] = $this->valF['accord_tacite'];
1058 $value_evenement_retour_ar['delai_notification'] = $this->valF['delai_notification'];
1059 $value_evenement_retour_ar['avis_decision'] = $this->valF['avis_decision'];
1060 $value_evenement_retour_ar['restriction'] = $this->valF['restriction'];
1061
1062 // Récupère le libelle de l'événement
1063 $evenement_retour_ar_libelle = $this->getEvenementLibelle($value_evenement_retour_ar['evenement']);
1064
1065 // Message de validation
1066 $valid_message = _("Mise a jour de l'evenement lie \"%s\" realisee avec succes.");
1067 // Modifie l'événement lié pour qu'il ait les mêmes paramètres
1068 // que l'événement principal
1069 if ($evenement_retour_ar->modifier($value_evenement_retour_ar)) {
1070
1071 //
1072 $this->addToMessage(sprintf($valid_message, $evenement_retour_ar_libelle));
1073 }
1074
1075 }
1076 }
1077
1078 function setOnchange(&$form, $maj) {
1079 parent::setOnchange($form, $maj);
1080
1081 //
1082 $form->setOnchange('retour','retourOnchangeEvenement(this)');
1083 }
1084
1085 /**
1086 * Fonction appelée lors de la copie d'un enregistrement
1087 * @param array $valCopy Liste des valeurs de l'enregistrement
1088 * @param string $objsf Liste des objets associés
1089 * @param mixed $DEBUG Type du DEBUG
1090 * @return array Liste des valeurs après traitement
1091 */
1092 function update_for_copy($valCopy, $objsf, $DEBUG) {
1093
1094 // Libellé du duplicata
1095 $libelle = _("Copie de %s du %s");
1096 $valCopy['libelle'] = sprintf($libelle, $valCopy['libelle'], date('d/m/Y H:i:s'));
1097 // Tronque le libellé si celui est trop long
1098 $valCopy['libelle'] = mb_substr($valCopy['libelle'], 0, 70, "UTF8");
1099
1100 // Message à retourner
1101 $valCopy['message'] = "";
1102
1103 // S'il y a un événement retour_ar sur l'événement copié
1104 if ($valCopy['evenement_retour_ar'] != '') {
1105 // Copie l'événement retour_ar
1106 $copie = $this->f->copier($valCopy['evenement_retour_ar'], 'evenement', $objsf);
1107 $evenement_retour_ar = $copie['evenement_'.$valCopy['evenement_retour_ar']];
1108 $valCopy['message'] .= $copie['message'];
1109 $valCopy['message_type'] = $copie['message_type'];
1110 $valCopy['evenement_retour_ar'] = $evenement_retour_ar;
1111 }
1112
1113 // S'il y a un événement evenement_retour_signature sur l'événement copié
1114 if ($valCopy['evenement_retour_signature'] != '') {
1115 // Copie l'événement retour_signature
1116 $copie = $this->f->copier($valCopy['evenement_retour_signature'], 'evenement', $objsf);
1117 $evenement_retour_signature = $copie['evenement_'.$valCopy['evenement_retour_signature']];
1118 $valCopy['message'] .= $copie['message'];
1119 $valCopy['message_type'] = $copie['message_type'];
1120 $valCopy['evenement_retour_signature'] = $evenement_retour_signature;
1121 }
1122
1123 // Retourne les valeurs
1124 return $valCopy;
1125 }
1126
1127 }
1128
1129

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26