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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 19307 - (show annotations)
Wed Nov 6 10:57:56 2024 UTC (2 months, 3 weeks ago) by softime
File size: 21183 byte(s)
merge: fusion de la branche d'intégration 6.9.0-develop dans le trunk

1 <?php
2 /**
3 * DBFORM - 'action' - Surcharge gen.
4 *
5 * Ce script permet de définir la classe 'action'.
6 *
7 * @package openads
8 * @version SVN : $Id$
9 */
10
11 require_once "../gen/obj/action.class.php";
12
13 class action extends action_gen {
14
15 // Handler d'un objet de classe dossier
16 var $dossier;
17
18 // Liste des regles de dates
19 var $date_rules = array(
20 'regle_delai',
21 'regle_delai_incompletude',
22 'regle_date_limite',
23 'regle_date_notification_delai',
24 'regle_date_complet',
25 'regle_date_validite',
26 'regle_date_decision',
27 'regle_date_chantier',
28 'regle_date_achevement',
29 'regle_date_conformite',
30 'regle_date_rejet',
31 'regle_date_dernier_depot',
32 'regle_date_limite_incompletude',
33 'regle_date_cloture_instruction',
34 'regle_date_premiere_visite',
35 'regle_date_derniere_visite',
36 'regle_date_contradictoire',
37 'regle_date_retour_contradictoire',
38 'regle_date_ait',
39 'regle_date_transmission_parquet',
40 'regle_date_affichage',
41 );
42
43 const EVENEMENT_FIELDS = array(
44 'etat',
45 'delai',
46 'accord_tacite',
47 'avis_decision',
48 'delai_notification',
49 'date_evenement',
50 'autorite_competente',
51 'pec_metier',
52 'complement_om_html',
53 'complement2_om_html',
54 'complement3_om_html',
55 'complement4_om_html',
56 );
57
58 function setValF($val = array()) {
59 parent::setValF($val);
60 foreach ($this->date_rules as $key => $rule){
61 $this->valF[$rule] = $this->f->formatage_regles($this->valF[$rule]);
62 }
63 }
64
65 function setType(&$form, $maj) {
66 parent::setType($form, $maj);
67
68 if ($maj == 0 || $maj == 1) {
69 $form->setType("regle_donnees_techniques1", "regle_donnees_techniques");
70 $form->setType("regle_donnees_techniques2", "regle_donnees_techniques");
71 $form->setType("regle_donnees_techniques3", "regle_donnees_techniques");
72 $form->setType("regle_donnees_techniques4", "regle_donnees_techniques");
73 $form->setType("regle_donnees_techniques5", "regle_donnees_techniques");
74 $form->setType("cible_regle_donnees_techniques1", "nodisplay");
75 $form->setType("cible_regle_donnees_techniques2", "nodisplay");
76 $form->setType("cible_regle_donnees_techniques3", "nodisplay");
77 $form->setType("cible_regle_donnees_techniques4", "nodisplay");
78 $form->setType("cible_regle_donnees_techniques5", "nodisplay");
79 }
80 if ($maj == 2 || $maj == 3) {
81 $form->setType("regle_donnees_techniques1", "regle_donnees_techniques_static");
82 $form->setType("regle_donnees_techniques2", "regle_donnees_techniques_static");
83 $form->setType("regle_donnees_techniques3", "regle_donnees_techniques_static");
84 $form->setType("regle_donnees_techniques4", "regle_donnees_techniques_static");
85 $form->setType("regle_donnees_techniques5", "regle_donnees_techniques_static");
86 $form->setType("cible_regle_donnees_techniques1", "nodisplay");
87 $form->setType("cible_regle_donnees_techniques2", "nodisplay");
88 $form->setType("cible_regle_donnees_techniques3", "nodisplay");
89 $form->setType("cible_regle_donnees_techniques4", "nodisplay");
90 $form->setType("cible_regle_donnees_techniques5", "nodisplay");
91 }
92 }
93
94 function setLib(&$form, $maj) {
95 parent::setLib($form, $maj);
96 $form->setLib('regle_etat',__('Règle état'));
97 $form->setLib('regle_delai',__('Règle delai (DATE)'));
98 $form->setLib('regle_accord_tacite',__('Règle accord tacite (UNIQUE)'));
99 $form->setLib('regle_avis',__('Règle avis'));
100 $form->setLib('regle_date_limite',__('Règle date limite (DATE)'));
101 $form->setLib('regle_date_notification_delai',__('Règle date de délai de notification (DATE)'));
102 $form->setLib('regle_date_complet',__('Règle date complet (DATE)'));
103 $form->setLib('regle_date_validite',__('Règle date de validite (DATE)'));
104 $form->setLib('regle_date_decision',__('Règle date de décision (DATE)'));
105 $form->setLib('regle_date_chantier',__('Règle date de chantier (DATE)'));
106 $form->setLib('regle_date_achevement',__("Règle date d'achevement (DATE)"));
107 $form->setLib('regle_date_conformite',__('Règle date de conformite (DATE)'));
108 $form->setLib('regle_date_rejet',__('Règle date rejet (DATE)'));
109 $form->setLib('regle_date_dernier_depot',__('règle date de dernier dépot (DATE)'));
110 $form->setLib('regle_date_limite_incompletude',__("Règle date limite d'incomplétude (DATE)"));
111 $form->setLib('regle_delai_incompletude',__("Règle delai d'incomplétude (DATE)"));
112 $form->setLib('regle_autorite_competente',__('Règle autorité compétente (UNIQUE)'));
113 $form->setLib('regle_date_cloture_instruction',__("Règle date de clôture de l'instruction (DATE)"));
114 $form->setLib('regle_date_premiere_visite',__("Règle date de première visite (DATE)"));
115 $form->setLib('regle_date_derniere_visite',__("Règle date de dernière visite (DATE)"));
116 $form->setLib('regle_date_contradictoire',__("Règle date de contradictoire (DATE)"));
117 $form->setLib('regle_date_retour_contradictoire',__("Règle date de retour de contradictoire (DATE)"));
118 $form->setLib('regle_date_ait',__("Règle date AIT (DATE)"));
119 $form->setLib('regle_date_transmission_parquet',__("Règle date de transmission au Parquet (DATE)"));
120
121 $form->setLib('regle_donnees_techniques1',__('Règle donnée techniques / CERFA n°1'));
122 $form->setLib('regle_donnees_techniques2',__('Règle donnée techniques / CERFA n°2'));
123 $form->setLib('regle_donnees_techniques3',__('Règle donnée techniques / CERFA n°3'));
124 $form->setLib('regle_donnees_techniques4',__('Règle donnée techniques / CERFA n°4'));
125 $form->setLib('regle_donnees_techniques5',__('Règle donnée techniques / CERFA n°5'));
126
127 $form->setLib('cible_regle_donnees_techniques1',__('Champ cible de la règle donnée technique n°1'));
128 $form->setLib('cible_regle_donnees_techniques2',__('Champ cible de la règle donnée technique n°2'));
129 $form->setLib('cible_regle_donnees_techniques3',__('Champ cible de la règle donnée technique n°3'));
130 $form->setLib('cible_regle_donnees_techniques4',__('Champ cible de la règle donnée technique n°4'));
131 $form->setLib('cible_regle_donnees_techniques5',__('Champ cible de la règle donnée technique n°5'));
132
133 $form->setLib('regle_dossier_instruction_type',__("Règle type de dossier d'instruction (NUMERIQUE)"));
134 $form->setLib('regle_date_affichage',__("Règle date d'affichage (DATE)"));
135 $form->setLib('regle_pec_metier',__("Règle prise en compte métier (UNIQUE)"));
136 $form->setLib('regle_a_qualifier',__("Règle à qualifier (BOOLEAN)"));
137 $form->setLib('regle_incompletude',__("Règle incomplétude (BOOLEAN)"));
138 $form->setLib('regle_incomplet_notifie',__("Règle incomplétude notifiée (BOOLEAN)"));
139 $form->setLib('regle_etat_pendant_incompletude',__("Règle état du dossier pendant l'incomplétude (UNIQUE)"));
140 $form->setLib('regle_evenement_suivant_tacite_incompletude',__("Règle événement suivant tacite de l'événement s'applique lors de
141 l'incomplétude notifiée (BOOLEAN)"));
142 }
143
144 /**
145 * @return void
146 */
147 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
148 parent::verifier($val);
149 //
150 $list_column = array();
151 // Mot-clés à rechercher
152 $search_field = "regle_";
153 // Pour chaque champs du formulaire
154 foreach ($this->champs as $champ) {
155 // Si le mot-clés est présent dans l'identifiant du champ
156 if (strpos($champ, $search_field) !== false) {
157 // Ajoute le champ à la liste
158 $list_column[] = $champ;
159 }
160 }
161
162 //
163 $list_fields = array();
164 // Pour chaque colonne
165 foreach ($list_column as $value) {
166
167 // Vérifie que le champs existe dans le formulaire et qu'il n'est
168 // pas vide
169 if (isset($this->valF[$value])
170 && $this->valF[$value] != ''
171 && $this->valF[$value] != null) {
172 //
173 $list_fields[$value] = $this->valF[$value];
174 }
175 }
176
177 // Si le tableau contenant les champs à tester n'est pas vide
178 if (count($list_fields) > 0) {
179
180 //
181 foreach ($list_fields as $key => $value) {
182
183 // Vérification de la possibilité des champs de la table dossier
184 // correspondants aux règles d'être mis à null
185 if($this->valF[$key] == "NULL" || $this->valF[$key] == "null") {
186 //
187 if($this->fieldCanBeNull(substr($key, 6)) === false) {
188 // Affiche l'erreur
189 $this->correct=false;
190 $error_message = __("Le champ %s des dossiers ne peut etre mis a NULL.");
191 $this->addToMessage(sprintf($error_message, "<b>".__(substr($key, 6))."</b>"));
192
193 }
194 }
195
196 // Vérifie que la règle est valide
197 $this->rule_is_valid($value, $key);
198 }
199 }
200
201 // Vérification de la présence du couple cible règle pour les DT
202 for ($i = 1; $i < 6; $i++) {
203 if ($this->valF["regle_donnees_techniques".$i] === null XOR
204 $this->valF["cible_regle_donnees_techniques".$i] === null) {
205
206 $this->correct=false;
207 $this->addToMessage(
208 sprintf(
209 __("Le champ <b>Règle données techniques / CERFA</b> %s ne peut comporter un champ rempli et un champ vide"),
210 $i
211 )
212 );
213 }
214 }
215
216
217 }
218
219 /**
220 * Vérification que les champs ciblés par les règles contenant NULL peuvent
221 * l'être.
222 * @param string $field champ impacté par la règle
223 * @return boolean peut être null = true else false
224 */
225 function fieldCanBeNull($field) {
226 // Instantiation de la classe dossier si pas déjà fait
227 if(!isset($this->dossier) || empty($this->dossier)) {
228 $this->dossier = $this->f->get_inst__om_dbform(array(
229 "obj" => "dossier",
230 "idx" => "]",
231 ));
232 }
233 // Si le champ passé en param est dans la liste des champs obligatoires
234 // de la table dossier return false
235 if(array_search($field, $this->dossier->required_field) !== false) {
236 return false;
237 }
238 return true;
239 }
240
241 /**
242 * Vérifie la validité d'une règle d'action.
243 *
244 * @param string $rule Règle d'action.
245 * @param string $rule_name Nom de la règle.
246 */
247 function rule_is_valid($rule, $rule_name) {
248 // Liste des régles de type 'champ de BDD'
249 $cible_donnees_techniques_rules = array(
250 'cible_regle_donnees_techniques1',
251 'cible_regle_donnees_techniques2',
252 'cible_regle_donnees_techniques3',
253 'cible_regle_donnees_techniques4',
254 'cible_regle_donnees_techniques5',
255 );
256
257 // Liste des régles a Opérateur unique
258 $unique_operand_rules = array(
259 'regle_autorite_competente',
260 'regle_etat',
261 'regle_accord_tacite',
262 'regle_pec_metier',
263 'regle_etat_pendant_incompletude',
264 );
265
266 $common_rules = array(
267 'regle_etat',
268 'regle_accord_tacite',
269 'regle_avis',
270 'regle_autorite_competente',
271 'regle_donnees_techniques1',
272 'regle_donnees_techniques2',
273 'regle_donnees_techniques3',
274 'regle_donnees_techniques4',
275 'regle_donnees_techniques5',
276 'regle_pec_metier',
277 'regle_etat_pendant_incompletude',
278 );
279
280 $boolean_rules = array_merge(
281 $common_rules,
282 array(
283 'regle_a_qualifier',
284 'regle_incompletude',
285 'regle_incomplet_notifie',
286 'regle_evenement_suivant_tacite_incompletude',
287 )
288 );
289
290 $numeric_rules = array_merge(
291 $common_rules,
292 array(
293 'regle_dossier_instruction_type',
294 )
295 );
296
297 // Si la règle à vérifier concerne les données techniques, il faut
298 // récupérer le type du champ des données techniques sélectionné.
299 if (in_array($rule_name, $cible_donnees_techniques_rules, true) === true) {
300 // Récupération du type de champ de la cible de la règle
301 $type = $this->f->get_type_from_db(
302 'donnees_techniques',
303 $this->valF[$rule_name]
304 );
305 if (isset($type[$this->valF[$rule_name]]) === false
306 || $type[$this->valF[$rule_name]] !== 'text') {
307 $this->correct=false;
308 $this->addToMessage(
309 sprintf(
310 __('Le champ %s ne peut être que de type texte.'),
311 '<b>'.__($rule_name).'</b>'
312 )
313 );
314 }
315 }
316
317 // Gestion du null
318 $is_null_result = $this->f->rule_null_is_valid($rule, $rule_name);
319 if ( is_array($is_null_result) === true ){
320 if ( $is_null_result[0] === false ){
321 // Affiche l'erreur
322 $this->correct=$is_null_result[0];
323 $this->addToMessage($is_null_result[1]);
324 }
325 return null;
326 }
327
328 // Supprime tous les espaces de la chaîne de caractère
329 $rule = str_replace(' ', '', $rule);
330 // Coupe la chaîne au niveau de l'opérateur
331 $operands = explode('+', $rule);
332 // Nombre d'opérande
333 $nb_operands = count($operands);
334
335 // Si c'est une règle spécifique unique
336 if (in_array($rule_name, $unique_operand_rules, true) === true) {
337 // S'il y à plus d'une opérande
338 if ($nb_operands > 1) {
339 // Message d'erreur
340 $this->correct=false;
341 $this->addToMessage(
342 sprintf(__("Le champ %s ne peut pas avoir plus d'un opérande."),
343 '<b>'.__($rule_name).'</b>')
344 );
345 return null;
346 }
347 }
348
349 // Pour chaque opérande
350 foreach ($operands as $key => $operand) {
351 // si on as une chaine +xmois ou +xjour(s) pour une regle de type date
352 if (in_array($rule_name, $this->date_rules, true) === true) {
353 $is_date_result = $this->f->rule_date_is_valid($operand, $rule_name);
354 if ( is_array($is_date_result) === true ){
355 if ( $is_date_result[0] === false ){
356 // Affiche l'erreur
357 $this->correct=$is_date_result[0];
358 $this->addToMessage($is_date_result[1]);
359 return null;
360 }
361 // Supprime l'opérande
362 unset($operands[$key]);
363 }
364 }
365
366 // Supprime les numériques pour les regles acceptant le numérique
367 if (
368 in_array($rule_name, $numeric_rules, true) === true
369 && is_numeric($operand)
370 ) {
371 // Supprime l'opérande
372 unset($operands[$key]);
373 }
374
375 // Supprime également les booléens pour les regles acceptant les booleans
376 if (
377 in_array($rule_name, $boolean_rules, true) === true
378 && ($operand == 'f' || $operand == 't'
379 || $operand == 'false' || $operand == 'true')
380 ) {
381 // Supprime l'opérande
382 unset($operands[$key]);
383 }
384 }
385
386 $rules = array(
387 'regle_donnees_techniques1',
388 'regle_donnees_techniques2',
389 'regle_donnees_techniques3',
390 'regle_donnees_techniques4',
391 'regle_donnees_techniques5',
392 'cible_regle_donnees_techniques1',
393 'cible_regle_donnees_techniques2',
394 'cible_regle_donnees_techniques3',
395 'cible_regle_donnees_techniques4',
396 'cible_regle_donnees_techniques5',
397 );
398
399 if (in_array($rule_name, $rules, true) === true) {
400
401 // Vérification de l'existance des champs de règle dans les données
402 // technique
403 $check_field_dt_exist = $this->f->check_field_exist(
404 $operands,
405 'donnees_techniques'
406 );
407
408 $check_field_instr_exist = $this->f->check_field_exist(
409 $operands,
410 'instruction'
411 );
412
413 if ($check_field_dt_exist !== true &&
414 $check_field_instr_exist !== true) {
415
416 $check_field_exist = array_intersect(
417 $check_field_dt_exist,
418 $check_field_instr_exist
419 );
420 if (count($check_field_exist) === 0) {
421 $check_field_exist = true;
422 }
423 } else {
424 $check_field_exist = true;
425 }
426
427 } else {
428 // Vérifie les champs utilisés pour la règle
429 $check_field_exist = $this->f->check_field_exist($operands, 'instruction');
430 }
431
432 if ($check_field_exist !== true) {
433
434 // Liste des champs en erreur
435 $string_error_fields = implode(', ', $check_field_exist);
436
437 // Message d'erreur
438 $error_msg = __("Le champ %s n'est pas utilisable pour le champ %s.");
439 // Si plusieurs champs sont en erreur
440 if (count($check_field_exist) > 1) {
441 $error_msg = __("Les champs %s ne sont pas utilisables pour le champ %s.");
442 }
443
444 // Affiche l'erreur
445 $this->correct=false;
446 $this->addToMessage(
447 sprintf(
448 $error_msg,
449 '<b>'.$string_error_fields.'</b>',
450 '<b>'.__($rule_name).'</b>'
451 )
452 );
453 }
454 }
455
456 /**
457 *
458 */
459 function formSpecificContent($maj) {
460 /**
461 * Affichage des champs qu'il est possible d'utiliser dans les règles
462 */
463 // Archives du dossier
464 echo '<h4>'.__("Valeurs du dossier avant l'evenement").'</h4>';
465 echo '[archive_etat] [archive_delai] [archive_accord_tacite]
466 [archive_avis]';
467 echo '<br/>';
468 echo '[archive_date_dernier_depot] [archive_date_complet]
469 [archive_date_rejet] [archive_date_limite]
470 [archive_date_notification_delai] [archive_date_decision]
471 [archive_date_validite] [archive_date_achevement]
472 [archive_date_conformite] [archive_date_chantier]
473 [archive_etat_pendant_incompletude] [archive_date_limite_incompletude]
474 [archive_delai_incompletude] [archive_autorite_competente]
475 [archive_date_cloture_instruction] [archive_date_premiere_visite]
476 [archive_date_derniere_visite] [archive_date_contradictoire]
477 [archive_date_retour_contradictoire] [archive_date_ait]
478 [archive_date_transmission_parquet]
479 [archive_incompletude] [archive_incomplet_notifie]
480 [duree_validite][date_depot][date_depot_mairie]';
481 // Champs de l'événement
482 echo '<h4>'.__("Parametres de l'evenement").'</h4>';
483 echo '[' . implode('] [', self::EVENEMENT_FIELDS) . ']';
484 // Champs récupérés depuis l'événement d'instruction principal
485 echo '<h4>'.__("Valeurs de l'evenement d'instruction principal").'</h4>';
486 echo '[date_envoi_signature] [date_retour_signature] [date_envoi_rar] [date_retour_rar] [date_envoi_rar] [date_retour_rar] [date_envoi_controle_legalite] [date_retour_controle_legalite]';
487 // Champs du type détaillé du dossier d'autorisation
488 echo '<h4>'.__("Parametres du type detaille du dossier d'autorisation")
489 .'</h4>';
490 echo '[duree_validite_parametrage]';
491 // Champs du type détaillé du dossier d'autorisation
492 echo '<h4>'.__('Valeurs des données techniques')
493 .'</h4>';
494 echo '[ctx_nature_travaux_infra_om_html] [ctx_article_non_resp_om_html]';
495 echo '<h4>'.__('Suppression de la valeur').'</h4>';
496 echo '[null]';
497 echo '<h4>'.__('Valeurs pour les booléens').'</h4>';
498 echo '[f] ou [false] [t] ou [true]';
499 }
500
501 }
502
503

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26