Commit f0576366a0736fdd3ccdbe232c51403940147417
1 parent
a48d2fba
Exists in
master
and in
1 other branch
Ajout asterisque sur nouveaux champs obligatoires pour LOT1 :
(description, organisme, budgets) (Refactorisation des LOT1 et LOT2 dans MaterielsTable, il n'y a plus de redondance) v4.108.21-3.7.9
Showing
7 changed files
with
139 additions
and
98 deletions
Show diff stats
CHANGELOG
@@ -331,11 +331,15 @@ Commencer à implémenter le nouveau workflow v5 : | @@ -331,11 +331,15 @@ Commencer à implémenter le nouveau workflow v5 : | ||
331 | ======= CHANGES ======= | 331 | ======= CHANGES ======= |
332 | 332 | ||
333 | ------- | 333 | ------- |
334 | +31/05/2021 v4.108.21-3.7.9 | ||
335 | + - Ajout asterisque sur nouveaux champs obligatoires pour LOT1 : description, organisme, budgets | ||
336 | + - (Refactorisation des LOT1 et LOT2 dans MaterielsTable, plus de redondance) | ||
337 | + | ||
338 | +------- | ||
334 | 05/05/2021 v4.108.20-3.7.9 | 339 | 05/05/2021 v4.108.20-3.7.9 |
335 | - Responsable voyait les menus "Outils" ou "Autres listes" alors qu'il ne peut pas y accéder... | 340 | - Responsable voyait les menus "Outils" ou "Autres listes" alors qu'il ne peut pas y accéder... |
336 | - Suppression message debug... | 341 | - Suppression message debug... |
337 | 342 | ||
338 | - | ||
339 | ------- | 343 | ------- |
340 | 04/05/2021 v4.108.19-3.7.9 | 344 | 04/05/2021 v4.108.19-3.7.9 |
341 | - Bugfix : Responsable du crédit ne doit pas être obligatoire pour le LOT1 (création de la fiche matériel) car = acheteur par défaut | 345 | - Bugfix : Responsable du crédit ne doit pas être obligatoire pour le LOT1 (création de la fiche matériel) car = acheteur par défaut |
README.md
@@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : | ||
52 | 52 | ||
53 | -------------------------------------------------------------------------------------------- | 53 | -------------------------------------------------------------------------------------------- |
54 | 54 | ||
55 | -Date: 05/05/2021 | ||
56 | -Version: v4.108.20-3.7.9 | 55 | +Date: 31/05/2021 |
56 | +Version: v4.108.21-3.7.9 | ||
57 | 57 | ||
58 | 58 | ||
59 | 59 |
src/Controller/MaterielsController.php
@@ -1856,6 +1856,8 @@ class MaterielsController extends AppController { | @@ -1856,6 +1856,8 @@ class MaterielsController extends AppController { | ||
1856 | $this->myDebug("step 3: MaterielsController.add_or_edit()"); | 1856 | $this->myDebug("step 3: MaterielsController.add_or_edit()"); |
1857 | $IS_EDIT = !$IS_ADD; | 1857 | $IS_EDIT = !$IS_ADD; |
1858 | 1858 | ||
1859 | + //debug($this->Materiels->MANDATORY_FIELDS); | ||
1860 | + | ||
1859 | /* | 1861 | /* |
1860 | * (EP 20201207) | 1862 | * (EP 20201207) |
1861 | * | 1863 | * |
@@ -2112,83 +2114,15 @@ class MaterielsController extends AppController { | @@ -2112,83 +2114,15 @@ class MaterielsController extends AppController { | ||
2112 | */ | 2114 | */ |
2113 | 2115 | ||
2114 | // Attributs obligatoires pour la phase COMMANDE | 2116 | // Attributs obligatoires pour la phase COMMANDE |
2115 | - $LOT1 = [ | ||
2116 | - | ||
2117 | - // Infos toujours obligatoires (cachées car calculées automatiquement) | ||
2118 | - //'status', | ||
2119 | - //'tobeordered', | ||
2120 | - | ||
2121 | - //'hors_service', // O/N | ||
2122 | - | ||
2123 | - 'designation' => 'Désignation', | ||
2124 | - | ||
2125 | - //'permanent', | ||
2126 | - //'will_stay', // O/N | ||
2127 | - | ||
2128 | - 'sur_categorie_id' => 'Domaine', | ||
2129 | - 'categorie_id' => 'Catégorie', | ||
2130 | - | ||
2131 | - // Calculé auto au moment du save() | ||
2132 | - //'numero_laboratoire', | ||
2133 | - | ||
2134 | - 'description' => 'Description', | ||
2135 | - 'prix_ht' => 'Prix HT', | ||
2136 | - | ||
2137 | - 'nom_responsable' => 'Nom du responsable', | ||
2138 | - // Calculé auto | ||
2139 | - 'email_responsable' => 'Email du responsable', | ||
2140 | - | ||
2141 | - // Optionnel car par défaut = acheteur | ||
2142 | - //'resp_credit' => 'Responsable du crédit', | ||
2143 | - | ||
2144 | - 'nom_user' => "Nom de l'utilisateur de ce matériel", | ||
2145 | - | ||
2146 | - //TODO: a remettre ? avec "je ne sais pas" | ||
2147 | - /////'gestionnaire_id' => 'Gestionnaire de référence', | ||
2148 | - | ||
2149 | - 'organisme_id' => 'Organisme', | ||
2150 | - | ||
2151 | - //'fournisseur', | ||
2152 | - | ||
2153 | - //'devis joint', | ||
2154 | - | ||
2155 | - // Utilisé par la Gestion pour remplir le champ eotp | ||
2156 | - 'budgets' => 'Budgets', | ||
2157 | - | ||
2158 | - // INFOS ADMINISTRATIVES | ||
2159 | - // - EOTP : obligatoire seulement dans LOT2 | ||
2160 | - //'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) | ||
2161 | - | ||
2162 | - ]; | 2117 | + $LOT1 = $this->Materiels->MANDATORY_FIELDS_LOT1; |
2163 | 2118 | ||
2164 | // Attributs obligatoires pour la phase VALIDATION (livré et payé) | 2119 | // Attributs obligatoires pour la phase VALIDATION (livré et payé) |
2165 | - $LOT2 = [ | ||
2166 | - | ||
2167 | - 'fournisseur_id' => 'Fournisseur', | ||
2168 | - | ||
2169 | - 'date_acquisition' => "Date d'achat", | ||
2170 | - | ||
2171 | - 'date_reception' => 'Date de livraison', | ||
2172 | - | ||
2173 | - //'etiquette', // O/N | ||
2174 | - | ||
2175 | - 'site_id' => 'Site', | ||
2176 | - | ||
2177 | - 'lieu_detail' => 'Lieu de stockage', | ||
2178 | - | ||
2179 | - // INFOS ADMINISTRATIVES : | ||
2180 | - | ||
2181 | - // La Gestion doit remplir ce champ a partir des infos qui sont dans le champ "budget" (rempli par acheteur) | ||
2182 | - 'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) | ||
2183 | - | ||
2184 | - 'numero_commande' => 'Num. BC', | ||
2185 | - 'numero_inventaire_organisme' => "N° inventaire de l'organisme", | ||
2186 | - | ||
2187 | - ]; | 2120 | + $LOT2 = $this->Materiels->MANDATORY_FIELDS_LOT2; |
2121 | + | ||
2188 | // Seulement si prix > 10K€ : exiger la facture jointe et le n° série | 2122 | // Seulement si prix > 10K€ : exiger la facture jointe et le n° série |
2189 | if ($materiel->prix_ht > 10000) { | 2123 | if ($materiel->prix_ht > 10000) { |
2190 | //$LOT2[] = 'facture jointe'; | 2124 | //$LOT2[] = 'facture jointe'; |
2191 | - $LOT2[] = 'numero_serie'; | 2125 | + $LOT2['numero_serie'] = 'S/N'; |
2192 | } | 2126 | } |
2193 | // LOT2 = LOT1 + LOT2; | 2127 | // LOT2 = LOT1 + LOT2; |
2194 | $LOT2 = array_merge($LOT1, $LOT2); | 2128 | $LOT2 = array_merge($LOT1, $LOT2); |
@@ -2238,6 +2172,10 @@ class MaterielsController extends AppController { | @@ -2238,6 +2172,10 @@ class MaterielsController extends AppController { | ||
2238 | //$verb = $IS_ADD ? "ajouté" : "modifié"; | 2172 | //$verb = $IS_ADD ? "ajouté" : "modifié"; |
2239 | //$action = $IS_ADD ? "add" : "edit"; | 2173 | //$action = $IS_ADD ? "add" : "edit"; |
2240 | //debug($materiel); exit; | 2174 | //debug($materiel); exit; |
2175 | + | ||
2176 | + // (EP) pour provoquer une erreur de type "Action impossible" : | ||
2177 | + //$materiel->will_stay=null; | ||
2178 | + | ||
2241 | if (! $this->Materiels->save($materiel)) { | 2179 | if (! $this->Materiels->save($materiel)) { |
2242 | //debug($this->Materiels->current_entity); exit; | 2180 | //debug($this->Materiels->current_entity); exit; |
2243 | // (EP) Si ADD, l'id de la nouvelle entité a été mis à jour : | 2181 | // (EP) Si ADD, l'id de la nouvelle entité a été mis à jour : |
src/Model/Table/MaterielsTable.php
@@ -54,6 +54,86 @@ class MaterielsTable extends AppTable | @@ -54,6 +54,86 @@ class MaterielsTable extends AppTable | ||
54 | private $LAST_SEUIL_INVENTORIABLE_DATE = '03/06/2020'; | 54 | private $LAST_SEUIL_INVENTORIABLE_DATE = '03/06/2020'; |
55 | private $LAST_SEUIL_INVENTORIABLE; // 1000€ pour IRAP (depuis 3/6/2020) | 55 | private $LAST_SEUIL_INVENTORIABLE; // 1000€ pour IRAP (depuis 3/6/2020) |
56 | 56 | ||
57 | + | ||
58 | + public $MANDATORY_FIELDS_LOT1 = [ | ||
59 | + | ||
60 | + // Infos toujours obligatoires (cachées car calculées automatiquement) | ||
61 | + //'status', | ||
62 | + //'tobeordered', | ||
63 | + | ||
64 | + //'hors_service', // O/N | ||
65 | + | ||
66 | + 'designation' => 'Désignation', | ||
67 | + | ||
68 | + 'description' => 'Description', | ||
69 | + //'permanent', | ||
70 | + //'will_stay', // O/N | ||
71 | + | ||
72 | + 'sur_categorie_id' => 'Domaine', | ||
73 | + 'categorie_id' => 'Catégorie', | ||
74 | + | ||
75 | + // - Utilisateur | ||
76 | + 'nom_user' => "Nom de l'utilisateur de ce matériel", | ||
77 | + | ||
78 | + // - Acheteur | ||
79 | + 'nom_responsable' => 'Nom du responsable', | ||
80 | + // (rempli automatiquement) | ||
81 | + 'email_responsable' => 'Email du responsable', | ||
82 | + | ||
83 | + // Calculé auto au moment du save() | ||
84 | + //'numero_laboratoire', | ||
85 | + | ||
86 | + 'organisme_id' => 'Organisme', | ||
87 | + | ||
88 | + 'prix_ht' => 'Prix HT', | ||
89 | + | ||
90 | + // Optionnel car par défaut = acheteur | ||
91 | + //'resp_credit' => 'Responsable du crédit', | ||
92 | + | ||
93 | + | ||
94 | + //TODO: a remettre ? avec "je ne sais pas" | ||
95 | + /////'gestionnaire_id' => 'Gestionnaire de référence', | ||
96 | + | ||
97 | + | ||
98 | + //'fournisseur', | ||
99 | + | ||
100 | + //'devis joint', | ||
101 | + | ||
102 | + // Utilisé par la Gestion pour remplir le champ eotp | ||
103 | + 'budgets' => 'Budgets', | ||
104 | + | ||
105 | + // INFOS ADMINISTRATIVES | ||
106 | + // - EOTP : obligatoire seulement dans LOT2 | ||
107 | + //'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) | ||
108 | + | ||
109 | + ]; // $MANDATORY_FIELDS_LOT1 | ||
110 | + | ||
111 | + | ||
112 | + public $MANDATORY_FIELDS_LOT2 = [ | ||
113 | + | ||
114 | + 'fournisseur_id' => 'Fournisseur', | ||
115 | + | ||
116 | + 'date_acquisition' => "Date d'achat", | ||
117 | + | ||
118 | + 'date_reception' => 'Date de livraison', | ||
119 | + | ||
120 | + //'etiquette', // O/N | ||
121 | + | ||
122 | + 'site_id' => 'Site', | ||
123 | + | ||
124 | + 'lieu_detail' => 'Lieu de stockage', | ||
125 | + | ||
126 | + // INFOS ADMINISTRATIVES : | ||
127 | + | ||
128 | + // La Gestion doit remplir ce champ a partir des infos qui sont dans le champ "budget" (rempli par acheteur) | ||
129 | + 'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) | ||
130 | + | ||
131 | + 'numero_commande' => 'Num. BC', | ||
132 | + 'numero_inventaire_organisme' => "N° inventaire de l'organisme", | ||
133 | + | ||
134 | + ]; | ||
135 | + | ||
136 | + | ||
57 | public $ALL_STATUS = array( | 137 | public $ALL_STATUS = array( |
58 | 'CREATED', | 138 | 'CREATED', |
59 | 'VALIDATED', | 139 | 'VALIDATED', |
@@ -217,6 +297,11 @@ class MaterielsTable extends AppTable | @@ -217,6 +297,11 @@ class MaterielsTable extends AppTable | ||
217 | //public function validationDefault(Validator $validator) : Validator | 297 | //public function validationDefault(Validator $validator) : Validator |
218 | public function validationDefault(Validator $validator) //: Validator | 298 | public function validationDefault(Validator $validator) //: Validator |
219 | { | 299 | { |
300 | + | ||
301 | + // (EP 31/5/21) Champs obligatoires (LOT1) | ||
302 | + foreach ($this->MANDATORY_FIELDS_LOT1 as $fname=>$fdisp) | ||
303 | + $validator->allowEmptyString($fname, false, 'Ce champ doit être rempli'); | ||
304 | + | ||
220 | // Check date is dd/mm/yyyy | 305 | // Check date is dd/mm/yyyy |
221 | /* | 306 | /* |
222 | $dateIsValid = function ($entity) { | 307 | $dateIsValid = function ($entity) { |
@@ -277,15 +362,15 @@ class MaterielsTable extends AppTable | @@ -277,15 +362,15 @@ class MaterielsTable extends AppTable | ||
277 | 362 | ||
278 | $f = 'designation'; | 363 | $f = 'designation'; |
279 | $validator | 364 | $validator |
280 | - ->notEmpty($f, 'Ce champ doit être rempli') | 365 | + //->notEmpty($f, 'Ce champ doit être rempli') |
281 | ->add($f, 'valid', [ | 366 | ->add($f, 'valid', [ |
282 | 'rule' => 'check_string', | 367 | 'rule' => 'check_string', |
283 | 'message' => 'Ce champ contient des caractères interdits', | 368 | 'message' => 'Ce champ contient des caractères interdits', |
284 | 'provider' => 'table' | 369 | 'provider' => 'table' |
285 | ]); | 370 | ]); |
286 | - $validator->notEmpty('sur_categorie_id', 'Vous devez sélectionner une valeur'); | 371 | + //$validator->notEmpty('sur_categorie_id', 'Vous devez sélectionner une valeur'); |
287 | 372 | ||
288 | - $validator->notEmpty('categorie_id', 'Vous devez sélectionner une valeur'); | 373 | + //$validator->notEmpty('categorie_id', 'Vous devez sélectionner une valeur'); |
289 | 374 | ||
290 | $f = 'numero_laboratoire'; | 375 | $f = 'numero_laboratoire'; |
291 | $validator | 376 | $validator |
@@ -297,7 +382,15 @@ class MaterielsTable extends AppTable | @@ -297,7 +382,15 @@ class MaterielsTable extends AppTable | ||
297 | 'provider' => 'table' | 382 | 'provider' => 'table' |
298 | ]); | 383 | ]); |
299 | 384 | ||
300 | - $validator->allowEmpty('description')->add('description', 'valid', [ | 385 | + /* |
386 | + //$validator->allowEmpty('description')->add('description', 'valid', [ | ||
387 | + $validator->notEmpty('description')->add('description', 'valid', [ | ||
388 | + 'rule' => 'check_string_with_some_special_cars', | ||
389 | + 'message' => 'Ce champ contient des caractères interdits', | ||
390 | + 'provider' => 'table' | ||
391 | + ]); | ||
392 | + */ | ||
393 | + $validator->add('description', 'valid', [ | ||
301 | 'rule' => 'check_string_with_some_special_cars', | 394 | 'rule' => 'check_string_with_some_special_cars', |
302 | 'message' => 'Ce champ contient des caractères interdits', | 395 | 'message' => 'Ce champ contient des caractères interdits', |
303 | 'provider' => 'table' | 396 | 'provider' => 'table' |
@@ -427,17 +520,17 @@ class MaterielsTable extends AppTable | @@ -427,17 +520,17 @@ class MaterielsTable extends AppTable | ||
427 | 520 | ||
428 | 521 | ||
429 | 522 | ||
430 | - $validator->numeric('prix_ht') | ||
431 | - // (EP202010 prix obligatoire) | ||
432 | - //->allowEmpty('prix_ht') | ||
433 | - /* | ||
434 | - ->add('prix_ht', 'valid', [ | ||
435 | - 'rule' => 'check_string', | ||
436 | - 'message' => 'Ce champ contient des caractères interdits', | ||
437 | - 'provider' => 'table' | ||
438 | - ]) | ||
439 | - */ | 523 | + $validator->numeric('prix_ht'); |
524 | + // (EP202010 prix obligatoire) | ||
525 | + //->allowEmpty('prix_ht') | ||
526 | + /* | ||
527 | + ->add('prix_ht', 'valid', [ | ||
528 | + 'rule' => 'check_string', | ||
529 | + 'message' => 'Ce champ contient des caractères interdits', | ||
530 | + 'provider' => 'table' | ||
531 | + ]) | ||
440 | ; | 532 | ; |
533 | + */ | ||
441 | $validator->allowEmpty('eotp')->add('eotp', 'valid', [ | 534 | $validator->allowEmpty('eotp')->add('eotp', 'valid', [ |
442 | 'rule' => 'check_string', | 535 | 'rule' => 'check_string', |
443 | 'message' => 'Ce champ contient des caractères interdits', | 536 | 'message' => 'Ce champ contient des caractères interdits', |
@@ -473,9 +566,12 @@ class MaterielsTable extends AppTable | @@ -473,9 +566,12 @@ class MaterielsTable extends AppTable | ||
473 | $validator->allowEmpty('photo_id'); | 566 | $validator->allowEmpty('photo_id'); |
474 | $validator->boolean('etiquette')->allowEmpty('etiquette'); | 567 | $validator->boolean('etiquette')->allowEmpty('etiquette'); |
475 | $validator->boolean('hors_service')->allowEmpty('hors_service'); | 568 | $validator->boolean('hors_service')->allowEmpty('hors_service'); |
476 | - $validator-> | ||
477 | - // ->notEmpty('site_id', 'Ce champ doit être rempli'); | ||
478 | - allowEmpty('site_id'); | 569 | + //$validator->notEmpty('site_id', 'Ce champ doit être rempli'); |
570 | + //allowEmpty('site_id'); | ||
571 | + //$validator->notEmpty('organisme_id','Ce champ doit être précisé'); | ||
572 | + //$validator->notEmpty(['organisme_id', 'budgets'],'Ce champ doit être rempli'); | ||
573 | + //$validator->allowEmptyString('organisme_id', false, 'Ce champ doit être rempli'); | ||
574 | + //$validator->allowEmptyString('budgets', false, 'Ce champ doit être rempli'); | ||
479 | $validator->allowEmpty('lieu_detail')->add('lieu_detail', 'valid', [ | 575 | $validator->allowEmpty('lieu_detail')->add('lieu_detail', 'valid', [ |
480 | 'rule' => 'check_string', | 576 | 'rule' => 'check_string', |
481 | 'message' => 'Ce champ contient des caractères interdits', | 577 | 'message' => 'Ce champ contient des caractères interdits', |
@@ -488,12 +584,15 @@ class MaterielsTable extends AppTable | @@ -488,12 +584,15 @@ class MaterielsTable extends AppTable | ||
488 | 'message' => 'Ce champ contient des caractères interdits', | 584 | 'message' => 'Ce champ contient des caractères interdits', |
489 | 'provider' => 'table' | 585 | 'provider' => 'table' |
490 | ]); | 586 | ]); |
491 | - $validator->notEmpty('nom_responsable')->add('nom_responsable', 'valid', [ | 587 | + //$validator->notEmpty('nom_responsable')->add('nom_responsable', 'valid', [ |
588 | + $validator->add('nom_responsable', 'valid', [ | ||
492 | 'rule' => 'check_string', | 589 | 'rule' => 'check_string', |
493 | 'message' => 'Ce champ contient des caractères interdits', | 590 | 'message' => 'Ce champ contient des caractères interdits', |
494 | 'provider' => 'table' | 591 | 'provider' => 'table' |
495 | ]); | 592 | ]); |
496 | - $validator->allowEmpty('email_responsable')->email('email_responsable'); | 593 | + //$validator->allowEmpty('email_responsable')->email('email_responsable'); |
594 | + $validator->email('email_responsable'); | ||
595 | + | ||
497 | $validator->allowEmpty('gestionnaire_id'); | 596 | $validator->allowEmpty('gestionnaire_id'); |
498 | // ->notEmpty('gestionnaire_id', 'Ce champ doit être rempli'); | 597 | // ->notEmpty('gestionnaire_id', 'Ce champ doit être rempli'); |
499 | $validator->allowEmpty('nom_createur'); | 598 | $validator->allowEmpty('nom_createur'); |
src/Template/Error/error400.ctp
@@ -60,7 +60,7 @@ if (Configure::read('debug')) { | @@ -60,7 +60,7 @@ if (Configure::read('debug')) { | ||
60 | 60 | ||
61 | <div id="content"> | 61 | <div id="content"> |
62 | <div class="error_pdo view"> | 62 | <div class="error_pdo view"> |
63 | - <h2>Action impossible</h2> | 63 | + <h2>Action impossible (400)</h2> |
64 | 64 | ||
65 | <?php | 65 | <?php |
66 | 66 |
src/Template/Error/error500.ctp
@@ -66,7 +66,7 @@ if (Configure::read('debug')) { | @@ -66,7 +66,7 @@ if (Configure::read('debug')) { | ||
66 | 66 | ||
67 | <div id="content"> | 67 | <div id="content"> |
68 | <div class="error_pdo view"> | 68 | <div class="error_pdo view"> |
69 | - <h2>Action impossible</h2> | 69 | + <h2>Action impossible (500)</h2> |
70 | 70 | ||
71 | <?php | 71 | <?php |
72 | 72 |
src/Template/Error/pdo_error.ctp
@@ -23,7 +23,7 @@ $this->layout = false; | @@ -23,7 +23,7 @@ $this->layout = false; | ||
23 | 23 | ||
24 | <div id="content"> | 24 | <div id="content"> |
25 | <div class="error_pdo view"> | 25 | <div class="error_pdo view"> |
26 | - <h2>Action impossible</h2> | 26 | + <h2>Action impossible (pdo)</h2> |
27 | 27 | ||
28 | <?php | 28 | <?php |
29 | 29 | ||
@@ -74,7 +74,7 @@ if (AppController::isLabinventDebugMode()) { | @@ -74,7 +74,7 @@ if (AppController::isLabinventDebugMode()) { | ||
74 | </p> | 74 | </p> |
75 | <?php } else { ?> | 75 | <?php } else { ?> |
76 | <p> | 76 | <p> |
77 | - <strong>Cette action est impossible (pdo)</strong> | 77 | + <strong>Cette action est impossible (pdo)</strong> |
78 | </p> | 78 | </p> |
79 | <?php } ?> | 79 | <?php } ?> |
80 | 80 |