Commit 1b1c5c2bde1d6c26834f8737c2882ef637ca7574
1 parent
a541f625
Exists in
master
and in
1 other branch
Amélioré config des champs matériel obligatoires et readonly
=> certains champs sont readonly dès le départ => renommé les sections pour que ça soit plus compréhensible (BEFORE, AFTER) => (A) Attention: Mettre à jour le fichier config de chaque labo ! v5.2.19-3.7.9
Showing
5 changed files
with
233 additions
and
106 deletions
Show diff stats
CHANGELOG
... | ... | @@ -461,6 +461,13 @@ Commencer à implémenter le nouveau workflow v5 : |
461 | 461 | ======= CHANGES ======= |
462 | 462 | |
463 | 463 | ------- |
464 | +25/10/2021 v5.2.19-3.7.9 | |
465 | + - (i) Amélioré config des champs matériel obligatoires et readonly | |
466 | + => certains champs sont readonly dès le départ | |
467 | + => renommé les sections pour que ça soit plus compréhensible (BEFORE, AFTER) | |
468 | + => (A) Attention: Mettre à jour le fichier config de chaque labo ! | |
469 | + | |
470 | +------- | |
464 | 471 | 23/10/2021 v5.2.18-3.7.9 |
465 | 472 | - (i) changé mot-clé "except" par "sauf" dans fichier config champs readonly (et adapté traitement) |
466 | 473 | - nouvelle exception si mot-clé "sauf" mal utilisé | ... | ... |
README.md
... | ... | @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : |
52 | 52 | |
53 | 53 | -------------------------------------------------------------------------------------------- |
54 | 54 | |
55 | -Date: 23/10/2021 | |
56 | -Version: v5.2.18-3.7.9 | |
55 | +Date: 25/10/2021 | |
56 | +Version: v5.2.19-3.7.9 | |
57 | 57 | |
58 | 58 | |
59 | 59 | ... | ... |
config/app_labinvent_mandatory_fields.default.yml
... | ... | @@ -7,17 +7,108 @@ HAS_ORDER_BUTTON: true |
7 | 7 | |
8 | 8 | |
9 | 9 | |
10 | +# ************************************************************ | |
11 | +# ************** CHAMPS INITIALEMENT READONLY **************** | |
12 | +# ************************************************************ | |
10 | 13 | |
14 | +# Un champ peut etre readonly pour 3 raisons : | |
15 | +# - soit parce qu’il a une valeur par défaut non modifiable (ex: Acheteur = celui qui crée la fiche), | |
16 | +# - soit parce qu’il est réservé à l’Administration (champs administratifs, « Admin only »), | |
17 | +# - soit parce qu’il a servi à valider une étape et ne doit donc plus être changé (sous peine d’invalider l’étape) | |
11 | 18 | |
12 | -# ************************************* | |
13 | -# ************** LOT 0 **************** | |
14 | -# ************************************* | |
19 | +UNEDITABLE_FIELDS: | |
20 | + | |
21 | + # #### CHAMPS GÉNÉRAUX #### | |
22 | + | |
23 | + #- designation | |
24 | + | |
25 | + #- will_stay | |
26 | + | |
27 | + #- description | |
28 | + | |
29 | + #- hors_service | |
30 | + | |
31 | + #- sur_categorie_id | |
32 | + | |
33 | + #- categorie_id | |
34 | + | |
35 | + #- sous_categorie_id | |
36 | + | |
37 | + #- groupes_thematique_id | |
38 | + | |
39 | + #- groupes_metier_id | |
40 | + | |
41 | + #- projet_id | |
42 | + | |
43 | + #- materiel_technique | |
44 | + #- materiel_administratif | |
45 | + | |
46 | + #- metrologie | |
47 | + | |
48 | + #- etiquette | |
49 | + | |
50 | + #- site_id | |
51 | + | |
52 | + #- lieu_detail | |
53 | + | |
54 | + #- date_acquisition | |
55 | + | |
56 | + #- date_reception | |
57 | + | |
58 | + # Garantie | |
59 | + #- duree_garantie | |
60 | + #- unite_duree_garantie | |
61 | + #- date_fin_garantie | |
62 | + | |
63 | + # Super Administrateur only | |
64 | + #- status | |
65 | + | |
66 | + #- numero_serie | |
67 | + | |
68 | + # Utilisateur du materiel (destinataire du bien) | |
69 | + #- nom_user | |
70 | + | |
71 | + # - Acheteur (le Créateur de la fiche) - Un role "Utilisateur" ne peut pas changer ça, c'est par défaut lui-même | |
72 | + - nom_responsable (sauf Responsable, Administration) | |
73 | + | |
74 | + #- nom_ancien_responsable | |
75 | + | |
76 | + #- resp_credit | |
77 | + | |
78 | + #- gestionnaire_id | |
79 | + | |
80 | + #- fournisseur_id | |
81 | + | |
82 | + #- organisme_id | |
83 | + | |
84 | + #- prix_ht | |
85 | + | |
86 | + #- budgets | |
87 | + | |
88 | + | |
89 | + # #### CHAMPS ADMINISTRATIFS : #### | |
90 | + | |
91 | + # Entité(s) dépensière(s) (budget(s)) // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) ?) | |
92 | + - eotp (sauf Administration) | |
93 | + - numero_commande (sauf Administration) | |
94 | + - numero_inventaire_organisme (sauf Administration) | |
95 | + - numero_inventaire_old (sauf Administration) | |
96 | + - numero_laboratoire # READONLY toujours car généré automatiquement | |
97 | + | |
98 | + | |
99 | + | |
100 | + | |
101 | + | |
102 | + | |
103 | +# *************************************************************** | |
104 | +# ************** LOT 0 - CRÉATION FICHE MATÉRIEL **************** | |
105 | +# *************************************************************** | |
15 | 106 | |
16 | 107 | # Champs OBLIGATOIRES pour CRÉER une fiche Matériel |
17 | 108 | # - Aucun champ |
18 | -#MANDATORY_FIELDS_LOT0: [] | |
109 | +#MANDATORY_FIELDS_BEFORE_LOT0: [] | |
19 | 110 | # - Au moins un champ |
20 | -MANDATORY_FIELDS_LOT0: | |
111 | +MANDATORY_FIELDS_BEFORE_LOT0: | |
21 | 112 | |
22 | 113 | # Infos toujours obligatoires (cachées car calculées automatiquement) |
23 | 114 | #'status', |
... | ... | @@ -30,13 +121,13 @@ MANDATORY_FIELDS_LOT0: |
30 | 121 | sur_categorie_id: 'Domaine' |
31 | 122 | categorie_id: 'Catégorie' |
32 | 123 | |
33 | - # - Utilisateur | |
34 | - nom_user: "Nom de l'utilisateur" | |
35 | - | |
36 | 124 | # - Acheteur (le Créateur de la fiche) |
37 | 125 | nom_responsable: "Nom de l'Acheteur" |
38 | 126 | #// (rempli automatiquement) |
39 | 127 | email_responsable: "Email de l'Acheteur" |
128 | + | |
129 | + # - Utilisateur | |
130 | + nom_user: "Nom de l'utilisateur" | |
40 | 131 | |
41 | 132 | # Calculé auto au moment du save() |
42 | 133 | #'numero_laboratoire', |
... | ... | @@ -45,10 +136,13 @@ MANDATORY_FIELDS_LOT0: |
45 | 136 | |
46 | 137 | |
47 | 138 | # Liste des champs qui sont NON MODIFIABLES APRÈS la CRÉATION d'une fiche |
139 | +# Attention, les champs UNEDITABLE_FIELDS (voir au début du fichier) sont aussi pris en compte (donc, inutile de les répéter) | |
140 | + | |
48 | 141 | # - Aucun champ |
49 | -#UNEDITABLE_FIELDS_LOT0: [] | |
142 | +UNEDITABLE_FIELDS_AFTER_LOT0: [] | |
143 | + | |
50 | 144 | # - Au moins un champ |
51 | -UNEDITABLE_FIELDS_LOT0: | |
145 | +#UNEDITABLE_FIELDS_AFTER_LOT0: | |
52 | 146 | |
53 | 147 | # #### CHAMPS GÉNÉRAUX #### |
54 | 148 | |
... | ... | @@ -101,7 +195,7 @@ UNEDITABLE_FIELDS_LOT0: |
101 | 195 | #- nom_user |
102 | 196 | |
103 | 197 | # - Acheteur (le Créateur de la fiche) - Un role "Utilisateur" ne peut pas changer ça, c'est par défaut lui-même |
104 | - - nom_responsable (sauf Responsable, Administration) | |
198 | + #- nom_responsable (sauf Responsable, Administration) | |
105 | 199 | |
106 | 200 | #- nom_ancien_responsable |
107 | 201 | |
... | ... | @@ -118,11 +212,11 @@ UNEDITABLE_FIELDS_LOT0: |
118 | 212 | #- budgets |
119 | 213 | |
120 | 214 | # #### CHAMPS ADMINISTRATIFS : #### |
121 | - - eotp (sauf Administration) | |
122 | - - numero_commande (sauf Administration) | |
123 | - - numero_laboratoire # READONLY toujours car généré automatiquement | |
124 | - - numero_inventaire_organisme (sauf Administration) | |
125 | - - numero_inventaire_old (sauf Administration) | |
215 | + #- eotp (sauf Administration) | |
216 | + #- numero_commande (sauf Administration) | |
217 | + #- numero_laboratoire # READONLY toujours car généré automatiquement | |
218 | + #- numero_inventaire_organisme (sauf Administration) | |
219 | + #- numero_inventaire_old (sauf Administration) | |
126 | 220 | |
127 | 221 | |
128 | 222 | |
... | ... | @@ -132,16 +226,16 @@ UNEDITABLE_FIELDS_LOT0: |
132 | 226 | |
133 | 227 | |
134 | 228 | |
135 | -# ************************************* | |
136 | -# ************** LOT 1 **************** | |
137 | -# ************************************* | |
229 | +# ****************************************************************************** | |
230 | +# ************** LOT 1 - COMMANDE (DEMANDE D'ACHAT) (optionnel) **************** | |
231 | +# ****************************************************************************** | |
138 | 232 | |
139 | 233 | # Champs OBLIGATOIRES POUR passer la COMMANDE (La commande est une action optionnelle) |
140 | -# Attention, les champs MANDATORY_FIELDS_LOT0 sont aussi pris en compte (donc, inutile de les répéter) | |
234 | +# Attention, les champs MANDATORY_FIELDS_XXX définis plus haut sont aussi pris en compte (donc, inutile de les répéter) | |
141 | 235 | # - Aucun champ |
142 | -#MANDATORY_FIELDS_LOT1: [] | |
236 | +#MANDATORY_FIELDS_BEFORE_LOT1: [] | |
143 | 237 | # - Au moins un champ |
144 | -MANDATORY_FIELDS_LOT1: | |
238 | +MANDATORY_FIELDS_BEFORE_LOT1: | |
145 | 239 | |
146 | 240 | # Infos toujours obligatoires (cachées car calculées automatiquement) |
147 | 241 | #'status', |
... | ... | @@ -174,10 +268,10 @@ MANDATORY_FIELDS_LOT1: |
174 | 268 | |
175 | 269 | prix_ht: 'Prix HT' |
176 | 270 | |
177 | - # Optionnel car par défaut = acheteur | |
178 | - #resp_credit: 'Responsable du crédit' | |
271 | + # (par défaut = acheteur) | |
272 | + resp_credit: 'Responsable du crédit' | |
179 | 273 | |
180 | - #TODO: a remettre ? avec "je ne sais pas" | |
274 | + # Gestionnaire de référence (recevra la commande) | |
181 | 275 | gestionnaire_id: 'Gestionnaire de référence' |
182 | 276 | |
183 | 277 | # Fournisseur |
... | ... | @@ -188,10 +282,7 @@ MANDATORY_FIELDS_LOT1: |
188 | 282 | |
189 | 283 | # INFOS ADMINISTRATIVES |
190 | 284 | # - EOTP : obligatoire seulement dans LOT2 |
191 | - #'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) | |
192 | 285 | |
193 | - | |
194 | - # CHAMPS VIRTUELS | |
195 | 286 | # - Devis joint : c'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents) |
196 | 287 | DEVIS: 'Devis' |
197 | 288 | |
... | ... | @@ -199,11 +290,11 @@ MANDATORY_FIELDS_LOT1: |
199 | 290 | |
200 | 291 | |
201 | 292 | # Liste des champs NON MODIFIABLES APRÈS la demande d'ACHAT (c'est à dire APRÈS avoir fait la "COMMANDE") |
202 | -# Attention, les champs UNEDITABLE_FIELDS_LOT0 sont aussi pris en compte (donc, inutile de les répéter) | |
293 | +# Attention, les champs UNEDITABLE_FIELDS_XXX définis plus haut sont aussi pris en compte (donc, inutile de les répéter) | |
203 | 294 | # - Aucun champ |
204 | -#UNEDITABLE_FIELDS_LOT1: [] | |
295 | +#UNEDITABLE_FIELDS_AFTER_LOT1: [] | |
205 | 296 | # - Au moins un champ |
206 | -UNEDITABLE_FIELDS_LOT1: | |
297 | +UNEDITABLE_FIELDS_AFTER_LOT1: | |
207 | 298 | |
208 | 299 | # #### CHAMPS GÉNÉRAUX #### |
209 | 300 | |
... | ... | @@ -261,30 +352,32 @@ UNEDITABLE_FIELDS_LOT1: |
261 | 352 | #- nom_ancien_responsable |
262 | 353 | |
263 | 354 | # (par défaut = acheteur) |
264 | - #- resp_credit | |
355 | + - resp_credit (sauf Administration) | |
265 | 356 | |
266 | - #- gestionnaire_id | |
357 | + - gestionnaire_id (sauf Administration) | |
267 | 358 | |
268 | 359 | # Fournisseur |
269 | 360 | - fournisseur_id (sauf Administration) |
270 | 361 | |
271 | - #- organisme_id | |
362 | + - organisme_id (sauf Administration) | |
272 | 363 | |
273 | 364 | - prix_ht (sauf Administration) |
274 | 365 | |
275 | 366 | # Utilisé par la Gestion pour remplir le champ eotp |
276 | - #- budgets | |
367 | + - budgets (sauf Administration) | |
277 | 368 | |
278 | - # Devis | |
279 | - # (TODO) Non encore configurable : cet aspect est encore géré "en dur" dans le code source | |
369 | + # Devis (CHAMPS VIRTUEL) | |
370 | + # C'est un champ virtuel, il n'existe pas physiquement (sauf dans la table Documents) | |
280 | 371 | # Le devis attaché au matériel commandé n'est ni modifiable ni supprimable |
372 | + # (TODO) Non encore configurable : cet aspect est encore géré "en dur" dans le code source | |
373 | + - DEVIS | |
281 | 374 | |
282 | 375 | # #### CHAMPS ADMINISTRATIFS : #### |
283 | - - eotp (sauf Administration) | |
284 | - - numero_commande (sauf Administration) | |
285 | - - numero_laboratoire # READONLY toujours car généré automatiquement | |
286 | - - numero_inventaire_organisme (sauf Administration) | |
287 | - - numero_inventaire_old (sauf Administration) | |
376 | + #- eotp (sauf Administration) | |
377 | + #- numero_commande (sauf Administration) | |
378 | + #- numero_laboratoire # READONLY toujours car généré automatiquement | |
379 | + #- numero_inventaire_organisme (sauf Administration) | |
380 | + #- numero_inventaire_old (sauf Administration) | |
288 | 381 | |
289 | 382 | |
290 | 383 | |
... | ... | @@ -295,16 +388,16 @@ UNEDITABLE_FIELDS_LOT1: |
295 | 388 | |
296 | 389 | |
297 | 390 | |
298 | -# ************************************* | |
299 | -# ************** LOT 2 **************** | |
300 | -# ************************************* | |
391 | +# *************************************************************************** | |
392 | +# ************** LOT 2 - VALIDATION (matériel livré et payé) **************** | |
393 | +# *************************************************************************** | |
301 | 394 | |
302 | 395 | # Champs OBLIGATOIRES POUR VALIDER la livraison |
303 | -# Attention, les champs MANDATORY_FIELDS_LOT1 sont aussi pris en compte (donc, inutile de les répéter) | |
396 | +# Attention, les champs MANDATORY_FIELDS_XXX définis plus haut sont aussi pris en compte (donc, inutile de les répéter) | |
304 | 397 | # - Aucun champ |
305 | -#MANDATORY_FIELDS_LOT2: [] | |
398 | +#MANDATORY_FIELDS_BEFORE_LOT2: [] | |
306 | 399 | # - Au moins un champ |
307 | -MANDATORY_FIELDS_LOT2: | |
400 | +MANDATORY_FIELDS_BEFORE_LOT2: | |
308 | 401 | |
309 | 402 | #//'fournisseur_id' => 'Fournisseur', |
310 | 403 | #//'fournisseur' => 'Fournisseur', |
... | ... | @@ -327,24 +420,27 @@ MANDATORY_FIELDS_LOT2: |
327 | 420 | |
328 | 421 | numero_commande: 'Num. BC' |
329 | 422 | |
330 | - # Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel | |
423 | + | |
424 | + # #### CHAMPS NON OBLIGATOIRES MAIS FORTEMENT RECOMMANDÉS #### | |
425 | + # Ces champs ne seront pas demandés à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel | |
426 | + | |
427 | + # - Etiquette posée sur le matériel | |
331 | 428 | etiquette: 'Etiquette posée' |
332 | 429 | |
333 | - # PROBLEME : | |
430 | + # - Numéro inventaire tutelles | |
334 | 431 | # On ne peut pas exiger ce numéro au moment de la livraison |
335 | 432 | # car le gestionnaire n'a cette info que lorsque "Service fait CNRS" (il récupère alors le n° inventaire "Tutelle" sur GESLAB) |
336 | - # => Ce champ ne sera pas demandé à la saisie, mais un simple rappel sera affiché sur la vue détaillée du matériel | |
337 | 433 | numero_inventaire_organisme: "N° inventaire de l'organisme" |
338 | 434 | |
339 | 435 | # ******* END OF $MANDATORY_FIELDS_LOT2 ******** |
340 | 436 | |
341 | 437 | |
342 | 438 | # Liste des champs qui sont NON MODIFIABLES APRÈS la VALIDATION (livraison) |
343 | -# Attention, les champs UNEDITABLE_FIELDS_LOT1 sont aussi pris en compte | |
439 | +# Attention, les champs UNEDITABLE_FIELDS_XXX définis plus haut sont aussi pris en compte | |
344 | 440 | # - Aucun champ |
345 | -#UNEDITABLE_FIELDS_LOT2: [] | |
441 | +#UNEDITABLE_FIELDS_AFTER_LOT2: [] | |
346 | 442 | # - Au moins un champ |
347 | -UNEDITABLE_FIELDS_LOT2: | |
443 | +UNEDITABLE_FIELDS_AFTER_LOT2: | |
348 | 444 | |
349 | 445 | # #### CHAMPS GÉNÉRAUX #### |
350 | 446 | |
... | ... | @@ -357,7 +453,6 @@ UNEDITABLE_FIELDS_LOT2: |
357 | 453 | #- hors_service |
358 | 454 | |
359 | 455 | - sur_categorie_id |
360 | - | |
361 | 456 | - categorie_id |
362 | 457 | |
363 | 458 | #- sous_categorie_id |
... | ... | @@ -380,7 +475,6 @@ UNEDITABLE_FIELDS_LOT2: |
380 | 475 | #- lieu_detail |
381 | 476 | |
382 | 477 | - date_acquisition |
383 | - | |
384 | 478 | - date_reception |
385 | 479 | |
386 | 480 | # Garantie |
... | ... | @@ -417,20 +511,38 @@ UNEDITABLE_FIELDS_LOT2: |
417 | 511 | # #### CHAMPS ADMINISTRATIFS #### |
418 | 512 | |
419 | 513 | - eotp |
420 | - | |
421 | 514 | - numero_commande |
422 | - | |
423 | 515 | # READONLY toujours car généré automatiquement |
424 | - - numero_laboratoire | |
425 | - | |
516 | + #- numero_laboratoire | |
426 | 517 | #- numero_inventaire_organisme |
427 | - | |
428 | 518 | #- numero_inventaire_old |
429 | 519 | |
430 | 520 | |
431 | 521 | |
432 | 522 | |
433 | 523 | |
524 | +# ****************************************************************************** | |
525 | +# ************** LOT 3 - ARCHIVAGE (matériel à sortir ou sorti) **************** | |
526 | +# ****************************************************************************** | |
527 | + | |
528 | +# (TODO) Ce 3e niveau n'est pas encore implémenté, il est pour l'instant codé en dur dans le code | |
529 | + | |
530 | +# - Aucun champ | |
531 | +MANDATORY_FIELDS_BEFORE_LOT3: [] | |
532 | + | |
533 | +# - Aucun champ | |
534 | +UNEDITABLE_FIELDS_AFTER_LOT3: [] | |
535 | +# En fait, TOUS LES CHAMPS SONT READONLY SAUF : description, ... | |
536 | + | |
537 | + | |
538 | + | |
539 | + | |
540 | + | |
541 | + | |
542 | + | |
543 | + | |
544 | + | |
545 | + | |
434 | 546 | # Astuce utilisable : |
435 | 547 | # Pour faire : MANDATORY_FIELDS_LOT2 = MANDATORY_FIELDS_LOT1 |
436 | 548 | # On fait comme ceci : | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -2206,11 +2206,11 @@ class MaterielsController extends AppController { |
2206 | 2206 | |
2207 | 2207 | /* |
2208 | 2208 | // Attributs obligatoires pour la phase COMMANDE |
2209 | - //$LOT1 = $this->Materiels->MANDATORY_FIELDS_LOT1; | |
2209 | + //$LOT1 = $this->Materiels->MANDATORY_FIELDS_BEFORE_LOT1; | |
2210 | 2210 | $LOT1 = $this->Materiels->getMandatoryFieldsForLot(1); |
2211 | 2211 | |
2212 | 2212 | // Attributs obligatoires pour la phase VALIDATION (livré et payé) |
2213 | - //$LOT2 = $this->Materiels->MANDATORY_FIELDS_LOT2; | |
2213 | + //$LOT2 = $this->Materiels->MANDATORY_FIELDS_BEFORE_LOT2; | |
2214 | 2214 | $LOT2 = $this->Materiels->getMandatoryFieldsForLot(2); |
2215 | 2215 | |
2216 | 2216 | //TODO 202109 |
... | ... | @@ -2235,7 +2235,7 @@ class MaterielsController extends AppController { |
2235 | 2235 | |
2236 | 2236 | // On vérifie que les infos obligatoires sont présentes |
2237 | 2237 | // Si au moins un champ obligatoire est nul ou vide => ERROR |
2238 | - $ALL_MANDATORY_FIELDS_GIVEN = true; | |
2238 | + $ALL_MANDATORY_FIELDS_BEFORE_GIVEN = true; | |
2239 | 2239 | //foreach ($mandatory_fields as $fname => $fval) { |
2240 | 2240 | //print_r($materiel); |
2241 | 2241 | foreach ($mandatory_fields as $fname=>$fname_nice) { |
... | ... | @@ -2250,7 +2250,7 @@ class MaterielsController extends AppController { |
2250 | 2250 | if ( in_array($fname, ['DEVIS', 'fournisseur_id', 'etiquette', 'numero_inventaire_organisme']) ) continue; |
2251 | 2251 | |
2252 | 2252 | if ($materiel->$fname === null || $materiel->$fname == '') { |
2253 | - $ALL_MANDATORY_FIELDS_GIVEN = false; | |
2253 | + $ALL_MANDATORY_FIELDS_BEFORE_GIVEN = false; | |
2254 | 2254 | /* (EP 2020 03) |
2255 | 2255 | * Ce genre de ligne ($this->Flash->...) affichant un message flash en haut de page, |
2256 | 2256 | * ne fonctionnait plus à cause de bootstrap (css). |
... | ... | @@ -2278,7 +2278,7 @@ class MaterielsController extends AppController { |
2278 | 2278 | } |
2279 | 2279 | } |
2280 | 2280 | |
2281 | - if ($ALL_MANDATORY_FIELDS_GIVEN) { | |
2281 | + if ($ALL_MANDATORY_FIELDS_BEFORE_GIVEN) { | |
2282 | 2282 | |
2283 | 2283 | // (3) On l'ajoute en BD, on envoie un email, et on affiche ok sur page accueil |
2284 | 2284 | //$verb = $IS_ADD ? "ajouté" : "modifié"; |
... | ... | @@ -2350,7 +2350,7 @@ class MaterielsController extends AppController { |
2350 | 2350 | ]); |
2351 | 2351 | } |
2352 | 2352 | |
2353 | - } // $ALL_MANDATORY_FIELDS_GIVEN | |
2353 | + } // $ALL_MANDATORY_FIELDS_BEFORE_GIVEN | |
2354 | 2354 | |
2355 | 2355 | } // if POST... |
2356 | 2356 | |
... | ... | @@ -3054,7 +3054,7 @@ class MaterielsController extends AppController { |
3054 | 3054 | if ($newStatus == 'VALIDATED') { |
3055 | 3055 | // Attributs obligatoires pour la phase VALIDATION (livré et payé) (LOT2) |
3056 | 3056 | $mandatoryFields = $this->Materiels->getMandatoryFieldsForLot(2); |
3057 | - //$mandatoryFields = $this->Materiels->MANDATORY_FIELDS_LOT2; | |
3057 | + //$mandatoryFields = $this->Materiels->MANDATORY_FIELDS_BEFORE_LOT2; | |
3058 | 3058 | //debug($mandatoryFields);exit; |
3059 | 3059 | /* |
3060 | 3060 | $mandatoryFields = array( | ... | ... |
src/Model/Table/MaterielsTable.php
... | ... | @@ -49,7 +49,7 @@ use Cake\Core\Configure; |
49 | 49 | //const MAX_DIFF_YEARS = 10; |
50 | 50 | |
51 | 51 | /* replaced with configuration file (in yaml format) |
52 | -const MANDATORY_FIELDS_LOT1 = [ | |
52 | +const MANDATORY_FIELDS_BEFORE_LOT1 = [ | |
53 | 53 | |
54 | 54 | // Infos toujours obligatoires (cachées car calculées automatiquement) |
55 | 55 | //'status', |
... | ... | @@ -100,9 +100,9 @@ const MANDATORY_FIELDS_LOT1 = [ |
100 | 100 | // - EOTP : obligatoire seulement dans LOT2 |
101 | 101 | //'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) |
102 | 102 | |
103 | -]; // $MANDATORY_FIELDS_LOT1 | |
103 | +]; // $MANDATORY_FIELDS_BEFORE_LOT1 | |
104 | 104 | |
105 | -const MANDATORY_FIELDS_LOT2 = [ | |
105 | +const MANDATORY_FIELDS_BEFORE_LOT2 = [ | |
106 | 106 | |
107 | 107 | //'fournisseur_id' => 'Fournisseur', |
108 | 108 | //'fournisseur' => 'Fournisseur', |
... | ... | @@ -128,8 +128,8 @@ const MANDATORY_FIELDS_LOT2 = [ |
128 | 128 | ]; |
129 | 129 | |
130 | 130 | |
131 | -//const MANDATORY_FIELDS_LOT1_IP2I = [ | |
132 | -define ('MANDATORY_FIELDS_LOT1_IP2I', [ | |
131 | +//const MANDATORY_FIELDS_BEFORE_LOT1_IP2I = [ | |
132 | +define ('MANDATORY_FIELDS_BEFORE_LOT1_IP2I', [ | |
133 | 133 | |
134 | 134 | |
135 | 135 | // Infos toujours obligatoires (cachées car calculées automatiquement) |
... | ... | @@ -200,10 +200,10 @@ define ('MANDATORY_FIELDS_LOT1_IP2I', [ |
200 | 200 | ////'numero_commande' => 'Num. BC', |
201 | 201 | ////'numero_inventaire_organisme' => "N° inventaire de l'organisme", |
202 | 202 | |
203 | -]); // $MANDATORY_FIELDS_LOT1 | |
203 | +]); // $MANDATORY_FIELDS_BEFORE_LOT1 | |
204 | 204 | |
205 | -//const MANDATORY_FIELDS_LOT2_IP2I = MANDATORY_FIELDS_LOT1_IP2I; | |
206 | -define ('MANDATORY_FIELDS_LOT2_IP2I', MANDATORY_FIELDS_LOT1_IP2I); | |
205 | +//const MANDATORY_FIELDS_BEFORE_LOT2_IP2I = MANDATORY_FIELDS_BEFORE_LOT1_IP2I; | |
206 | +define ('MANDATORY_FIELDS_BEFORE_LOT2_IP2I', MANDATORY_FIELDS_BEFORE_LOT1_IP2I); | |
207 | 207 | */ |
208 | 208 | |
209 | 209 | |
... | ... | @@ -255,13 +255,13 @@ class MaterielsTable extends AppTable |
255 | 255 | */ |
256 | 256 | public static function getMandatoryFieldsForLot($lot_num) { |
257 | 257 | /* |
258 | - $specific_constant_name = "MANDATORY_FIELDS_LOT1_".self::getLabName(); | |
259 | - $mandatory_fields_lot1 = defined($specific_constant_name) ? constant($specific_constant_name) : MANDATORY_FIELDS_LOT1; | |
258 | + $specific_constant_name = "MANDATORY_FIELDS_BEFORE_LOT1_".self::getLabName(); | |
259 | + $mandatory_fields_lot1 = defined($specific_constant_name) ? constant($specific_constant_name) : MANDATORY_FIELDS_BEFORE_LOT1; | |
260 | 260 | return $mandatory_fields_lot1; |
261 | 261 | */ |
262 | 262 | if ($lot_num < 0) return []; |
263 | 263 | $base_mandatory_fields = self::getMandatoryFieldsForLot($lot_num-1); |
264 | - $new_mandatory_fields = Configure::readOrFail('MANDATORY_FIELDS_LOT'.$lot_num); | |
264 | + $new_mandatory_fields = Configure::readOrFail('MANDATORY_FIELDS_BEFORE_LOT'.$lot_num); | |
265 | 265 | //debug($new_mandatory_fields); |
266 | 266 | return array_merge($base_mandatory_fields, $new_mandatory_fields); |
267 | 267 | } |
... | ... | @@ -295,40 +295,48 @@ class MaterielsTable extends AppTable |
295 | 295 | return $dict; |
296 | 296 | } |
297 | 297 | |
298 | - // (EP 2021 09) fonction récursive | |
298 | + // (EP 2021 09) fonction récursive : | |
299 | + // => champs readonly pour le lot N = champs readonly pour le lot N-1 + champs readonly pour le lot N : | |
299 | 300 | public static function getUneditableFieldsForLot($lot_num) { |
300 | - /* | |
301 | - $specific_constant_name = "MANDATORY_FIELDS_LOT1_".self::getLabName(); | |
302 | - $mandatory_fields_lot1 = defined($specific_constant_name) ? constant($specific_constant_name) : MANDATORY_FIELDS_LOT1; | |
303 | - return $mandatory_fields_lot1; | |
304 | - */ | |
305 | - if ($lot_num < 0) return []; | |
301 | + | |
302 | + // Si N = -1 => on retourne la liste initiale de champs readonly (fin de la récursivité) | |
303 | + //if ($lot_num < 0) return []; | |
304 | + if ($lot_num < 0) return self::list_to_dict( Configure::readOrFail('UNEDITABLE_FIELDS') ); | |
305 | + | |
306 | + | |
307 | + // - Champs readonly pour le lot N-1 (appel récursif) | |
306 | 308 | $base_uneditable_fields = self::getUneditableFieldsForLot($lot_num-1); |
307 | 309 | //debug($base_uneditable_fields); |
308 | - $new_uneditable_fields = Configure::readOrFail('UNEDITABLE_FIELDS_LOT'.$lot_num); | |
309 | - $new_uneditable_fields = self::list_to_dict($new_uneditable_fields); | |
310 | + | |
311 | + // - Champs readonly pour le lot N | |
312 | + $new_uneditable_fields = self::list_to_dict( Configure::readOrFail('UNEDITABLE_FIELDS_AFTER_LOT'.$lot_num) ); | |
313 | + //$new_uneditable_fields = self::list_to_dict($new_uneditable_fields); | |
310 | 314 | //debug($new_uneditable_fields); |
315 | + | |
316 | + // => Somme des 2 (champs readonly pour le lot N-1 + champs readonly pour le lot N) | |
311 | 317 | //return array_unique(array_merge($base_uneditable_fields, $new_uneditable_fields)); |
312 | 318 | return array_merge($base_uneditable_fields, $new_uneditable_fields); |
319 | + | |
313 | 320 | } |
314 | 321 | |
322 | + | |
315 | 323 | /* |
316 | 324 | public static function getMandatoryFieldsLot1() { |
317 | 325 | /S |
318 | - $specific_constant_name = "MANDATORY_FIELDS_LOT1_".self::getLabName(); | |
319 | - $mandatory_fields_lot1 = defined($specific_constant_name) ? constant($specific_constant_name) : MANDATORY_FIELDS_LOT1; | |
326 | + $specific_constant_name = "MANDATORY_FIELDS_BEFORE_LOT1_".self::getLabName(); | |
327 | + $mandatory_fields_lot1 = defined($specific_constant_name) ? constant($specific_constant_name) : MANDATORY_FIELDS_BEFORE_LOT1; | |
320 | 328 | return $mandatory_fields_lot1; |
321 | 329 | S/ |
322 | - return Configure::readOrFail('MANDATORY_FIELDS_LOT1'); | |
323 | - //return Configure::readOrFail('MANDATORY_FIELDS_LOT1'); | |
330 | + return Configure::readOrFail('MANDATORY_FIELDS_BEFORE_LOT1'); | |
331 | + //return Configure::readOrFail('MANDATORY_FIELDS_BEFORE_LOT1'); | |
324 | 332 | } |
325 | 333 | public static function getMandatoryFieldsLot2() { |
326 | 334 | /S |
327 | - $constantName = "MANDATORY_FIELDS_LOT2_".self::getLabName(); | |
328 | - $mandatory_fields_lot2 = defined($constantName) ? constant($constantName) : MANDATORY_FIELDS_LOT2; | |
335 | + $constantName = "MANDATORY_FIELDS_BEFORE_LOT2_".self::getLabName(); | |
336 | + $mandatory_fields_lot2 = defined($constantName) ? constant($constantName) : MANDATORY_FIELDS_BEFORE_LOT2; | |
329 | 337 | return array_merge(self::getMandatoryFieldsLot1(), $mandatory_fields_lot2); |
330 | 338 | S/ |
331 | - $mandatory_fields_lot2 = Configure::readOrFail('MANDATORY_FIELDS_LOT2'); | |
339 | + $mandatory_fields_lot2 = Configure::readOrFail('MANDATORY_FIELDS_BEFORE_LOT2'); | |
332 | 340 | return array_merge(self::getMandatoryFieldsLot1(), $mandatory_fields_lot2); |
333 | 341 | } |
334 | 342 | */ |
... | ... | @@ -397,15 +405,15 @@ class MaterielsTable extends AppTable |
397 | 405 | |
398 | 406 | // - PHP |
399 | 407 | /* |
400 | - $mf1 = Configure::readOrFail('php_MANDATORY_FIELDS_LOT1'); | |
408 | + $mf1 = Configure::readOrFail('php_MANDATORY_FIELDS_BEFORE_LOT1'); | |
401 | 409 | debug($mf1); |
402 | - $mf1 = Configure::readOrFail('php_MANDATORY_FIELDS_LOT1_IP2I'); | |
410 | + $mf1 = Configure::readOrFail('php_MANDATORY_FIELDS_BEFORE_LOT1_IP2I'); | |
403 | 411 | debug($mf1); |
404 | 412 | */ |
405 | 413 | |
406 | 414 | /* |
407 | 415 | // - YML |
408 | - $keys = ['MANDATORY_FIELDS_LOT0', 'MANDATORY_FIELDS_LOT1', 'MANDATORY_FIELDS_LOT2']; | |
416 | + $keys = ['MANDATORY_FIELDS_BEFORE_LOT0', 'MANDATORY_FIELDS_BEFORE_LOT1', 'MANDATORY_FIELDS_BEFORE_LOT2']; | |
409 | 417 | foreach ($keys as $k) { |
410 | 418 | //debug($k . ' :'); |
411 | 419 | if ( Configure::check($k) ) { |
... | ... | @@ -588,8 +596,8 @@ class MaterielsTable extends AppTable |
588 | 596 | /* |
589 | 597 | if (IP2I) { |
590 | 598 | |
591 | - //$this->MANDATORY_FIELDS_LOT1['fournisseur_id'] = 'Fournisseur'; | |
592 | - //$this->MANDATORY_FIELDS_LOT1['fournisseur.name'] = 'Fournisseur'; | |
599 | + //$this->MANDATORY_FIELDS_BEFORE_LOT1['fournisseur_id'] = 'Fournisseur'; | |
600 | + //$this->MANDATORY_FIELDS_BEFORE_LOT1['fournisseur.name'] = 'Fournisseur'; | |
593 | 601 | |
594 | 602 | $optional_fields = [ |
595 | 603 | 'organisme_id', |
... | ... | @@ -604,16 +612,16 @@ class MaterielsTable extends AppTable |
604 | 612 | |
605 | 613 | foreach ($optional_fields as $fname) { |
606 | 614 | // LOT1 |
607 | - unset($this->MANDATORY_FIELDS_LOT1[$fname]); | |
615 | + unset($this->MANDATORY_FIELDS_BEFORE_LOT1[$fname]); | |
608 | 616 | |
609 | 617 | // LOT2 |
610 | - unset($this->MANDATORY_FIELDS_LOT2[$fname]); | |
618 | + unset($this->MANDATORY_FIELDS_BEFORE_LOT2[$fname]); | |
611 | 619 | |
612 | 620 | $validator->allowEmptyString($fname, true); |
613 | 621 | } |
614 | 622 | |
615 | 623 | } |
616 | - //print_r($this->MANDATORY_FIELDS_LOT1); | |
624 | + //print_r($this->MANDATORY_FIELDS_BEFORE_LOT1); | |
617 | 625 | */ |
618 | 626 | |
619 | 627 | |
... | ... | @@ -986,7 +994,7 @@ class MaterielsTable extends AppTable |
986 | 994 | |
987 | 995 | // Définition des champs qui doivent rester optionnels |
988 | 996 | /* |
989 | - $optional_fields = array_diff_key(MANDATORY_FIELDS_LOT1, $mandatory_fields); | |
997 | + $optional_fields = array_diff_key(MANDATORY_FIELDS_BEFORE_LOT1, $mandatory_fields); | |
990 | 998 | //debug($optional_fields); |
991 | 999 | foreach ($optional_fields as $fname) $validator->allowEmptyString($fname, true); |
992 | 1000 | */ | ... | ... |