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
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
... ... @@ -60,7 +60,7 @@ if (Configure::read('debug')) {
60 60  
61 61 <div id="content">
62 62 <div class="error_pdo view">
63   - <h2>Action impossible</h2>
  63 + <h2>Action impossible (400)</h2>
64 64  
65 65 <?php
66 66  
... ...
src/Template/Error/error500.ctp
... ... @@ -66,7 +66,7 @@ if (Configure::read(&#39;debug&#39;)) {
66 66  
67 67 <div id="content">
68 68 <div class="error_pdo view">
69   - <h2>Action impossible</h2>
  69 + <h2>Action impossible (500)</h2>
70 70  
71 71 <?php
72 72  
... ...
src/Template/Error/pdo_error.ctp
... ... @@ -23,7 +23,7 @@ $this-&gt;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  
... ...