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 | 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 | 339 | 05/05/2021 v4.108.20-3.7.9 |
335 | 340 | - Responsable voyait les menus "Outils" ou "Autres listes" alors qu'il ne peut pas y accéder... |
336 | 341 | - Suppression message debug... |
337 | 342 | |
338 | - | |
339 | 343 | ------- |
340 | 344 | 04/05/2021 v4.108.19-3.7.9 |
341 | 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 | 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 | 1856 | $this->myDebug("step 3: MaterielsController.add_or_edit()"); |
1857 | 1857 | $IS_EDIT = !$IS_ADD; |
1858 | 1858 | |
1859 | + //debug($this->Materiels->MANDATORY_FIELDS); | |
1860 | + | |
1859 | 1861 | /* |
1860 | 1862 | * (EP 20201207) |
1861 | 1863 | * |
... | ... | @@ -2112,83 +2114,15 @@ class MaterielsController extends AppController { |
2112 | 2114 | */ |
2113 | 2115 | |
2114 | 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 | 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 | 2122 | // Seulement si prix > 10K€ : exiger la facture jointe et le n° série |
2189 | 2123 | if ($materiel->prix_ht > 10000) { |
2190 | 2124 | //$LOT2[] = 'facture jointe'; |
2191 | - $LOT2[] = 'numero_serie'; | |
2125 | + $LOT2['numero_serie'] = 'S/N'; | |
2192 | 2126 | } |
2193 | 2127 | // LOT2 = LOT1 + LOT2; |
2194 | 2128 | $LOT2 = array_merge($LOT1, $LOT2); |
... | ... | @@ -2238,6 +2172,10 @@ class MaterielsController extends AppController { |
2238 | 2172 | //$verb = $IS_ADD ? "ajouté" : "modifié"; |
2239 | 2173 | //$action = $IS_ADD ? "add" : "edit"; |
2240 | 2174 | //debug($materiel); exit; |
2175 | + | |
2176 | + // (EP) pour provoquer une erreur de type "Action impossible" : | |
2177 | + //$materiel->will_stay=null; | |
2178 | + | |
2241 | 2179 | if (! $this->Materiels->save($materiel)) { |
2242 | 2180 | //debug($this->Materiels->current_entity); exit; |
2243 | 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 | 54 | private $LAST_SEUIL_INVENTORIABLE_DATE = '03/06/2020'; |
55 | 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 | 137 | public $ALL_STATUS = array( |
58 | 138 | 'CREATED', |
59 | 139 | 'VALIDATED', |
... | ... | @@ -217,6 +297,11 @@ class MaterielsTable extends AppTable |
217 | 297 | //public function validationDefault(Validator $validator) : Validator |
218 | 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 | 305 | // Check date is dd/mm/yyyy |
221 | 306 | /* |
222 | 307 | $dateIsValid = function ($entity) { |
... | ... | @@ -277,15 +362,15 @@ class MaterielsTable extends AppTable |
277 | 362 | |
278 | 363 | $f = 'designation'; |
279 | 364 | $validator |
280 | - ->notEmpty($f, 'Ce champ doit être rempli') | |
365 | + //->notEmpty($f, 'Ce champ doit être rempli') | |
281 | 366 | ->add($f, 'valid', [ |
282 | 367 | 'rule' => 'check_string', |
283 | 368 | 'message' => 'Ce champ contient des caractères interdits', |
284 | 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 | 375 | $f = 'numero_laboratoire'; |
291 | 376 | $validator |
... | ... | @@ -297,7 +382,15 @@ class MaterielsTable extends AppTable |
297 | 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 | 394 | 'rule' => 'check_string_with_some_special_cars', |
302 | 395 | 'message' => 'Ce champ contient des caractères interdits', |
303 | 396 | 'provider' => 'table' |
... | ... | @@ -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 | 534 | $validator->allowEmpty('eotp')->add('eotp', 'valid', [ |
442 | 535 | 'rule' => 'check_string', |
443 | 536 | 'message' => 'Ce champ contient des caractères interdits', |
... | ... | @@ -473,9 +566,12 @@ class MaterielsTable extends AppTable |
473 | 566 | $validator->allowEmpty('photo_id'); |
474 | 567 | $validator->boolean('etiquette')->allowEmpty('etiquette'); |
475 | 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 | 575 | $validator->allowEmpty('lieu_detail')->add('lieu_detail', 'valid', [ |
480 | 576 | 'rule' => 'check_string', |
481 | 577 | 'message' => 'Ce champ contient des caractères interdits', |
... | ... | @@ -488,12 +584,15 @@ class MaterielsTable extends AppTable |
488 | 584 | 'message' => 'Ce champ contient des caractères interdits', |
489 | 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 | 589 | 'rule' => 'check_string', |
493 | 590 | 'message' => 'Ce champ contient des caractères interdits', |
494 | 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 | 596 | $validator->allowEmpty('gestionnaire_id'); |
498 | 597 | // ->notEmpty('gestionnaire_id', 'Ce champ doit être rempli'); |
499 | 598 | $validator->allowEmpty('nom_createur'); | ... | ... |
src/Template/Error/error400.ctp
src/Template/Error/error500.ctp
src/Template/Error/pdo_error.ctp
... | ... | @@ -23,7 +23,7 @@ $this->layout = false; |
23 | 23 | |
24 | 24 | <div id="content"> |
25 | 25 | <div class="error_pdo view"> |
26 | - <h2>Action impossible</h2> | |
26 | + <h2>Action impossible (pdo)</h2> | |
27 | 27 | |
28 | 28 | <?php |
29 | 29 | |
... | ... | @@ -74,7 +74,7 @@ if (AppController::isLabinventDebugMode()) { |
74 | 74 | </p> |
75 | 75 | <?php } else { ?> |
76 | 76 | <p> |
77 | - <strong>Cette action est impossible (pdo)</strong> | |
77 | + <strong>Cette action est impossible (pdo)</strong> | |
78 | 78 | </p> |
79 | 79 | <?php } ?> |
80 | 80 | ... | ... |