Commit f0576366a0736fdd3ccdbe232c51403940147417

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

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
@@ -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
@@ -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(&#39;debug&#39;)) { @@ -66,7 +66,7 @@ if (Configure::read(&#39;debug&#39;)) {
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-&gt;layout = false; @@ -23,7 +23,7 @@ $this-&gt;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