Commit 1b1c5c2bde1d6c26834f8737c2882ef637ca7574

Authored by Etienne Pallier
1 parent a541f625
Exists in master and in 1 other branch dev

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
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 */
... ...