Commit e2af51a23d59b72593b6e630d439b7ef58a71df6

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

date réception => "date livraison", et ne doit pas être future

v4.101.12-3.7.9
CHANGES.txt
... ... @@ -94,6 +94,10 @@ Outre ces changements, voici d'autres changements importants :
94 94 ======= CHANGES =======
95 95  
96 96 -------
  97 +17/09/2020 v4.101.12-3.7.9 (EP)
  98 + - (e) date réception => "date livraison", et ne doit pas être future
  99 +
  100 +-------
97 101 16/09/2020 v4.101.11-3.7.9 (EP)
98 102 - (i) Fixtures de tests simplifiées avec utilisation par défaut du format des champs de la BD de production (inutile de s'embêter à tout redéfinir et à tenir à jour !!!)
99 103 - (i) Corrigé petit bug sur site_id qui valait 2 par défaut (au lieu de null)
... ...
README.md
... ... @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes :
43 43 --------------------------------------------------------------------------------------------
44 44  
45 45 Date: 15/09/2020
46   -Version: 4.101.11-3.7.9
  46 +Version: 4.101.12-3.7.9
47 47  
48 48  
49 49 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes)
... ...
src/Model/Entity/Materiel.php
... ... @@ -3,8 +3,8 @@ namespace App\Model\Entity;
3 3  
4 4 use Cake\ORM\Entity;
5 5  
6   -// Max 2 ans entre 2 dates
7   -const MAX_DIFF_YEARS = 2;
  6 +// Max 15 ans entre 2 dates
  7 +const MAX_DIFF_YEARS = 15;
8 8  
9 9 /**
10 10 * Materiel Entity.
... ... @@ -88,11 +88,30 @@ class Materiel extends Entity {
88 88 // Ce qui s'affiche quand on fait echo $entity
89 89 public function __toString() { return $this->designation; }
90 90  
  91 + public function check_date_is_not_too_old($date_field_name) {
  92 + $d = $this->$date_field_name;
  93 + // today - 50 ans = trop vieux !
  94 + /* Avec TZ
  95 + $tz = new \DateTimeZone('Europe/Paris');
  96 + $date_too_old = new \DateTime('-50 years',$tz);
  97 + */
  98 + // Sans TimeZone (car inutile à ce niveau je crois)
  99 + $date_too_old = new \DateTime('-50 years');
  100 + return $d > $date_too_old;
  101 + }
  102 + public function check_date_is_not_future($date_field_name) {
  103 + $d = $this->$date_field_name;
  104 + $today = new \DateTime('now');
  105 + return $d <= $today;
  106 + }
  107 +
91 108 // date_reception >= date_acquisition et aussi date_fin_garantie >= date_reception
92 109 public function check_date_d2_gt_d1_but_not_too_much($d2_name,$d1_name) {
93   - // Si une des 2 dates est nulle => return true
94 110 $d2 = $this->$d2_name;
95 111 $d1 = $this->$d1_name;
  112 + //debug("d2:"); debug($d2);
  113 + //debug("d1:"); debug($d1);
  114 + // Si une des 2 dates est nulle => return true
96 115 if (!$d2 || !$d1) return true;
97 116 /*
98 117 $tz = new \DateTimeZone('Europe/Paris');
... ... @@ -109,7 +128,7 @@ class Materiel extends Entity {
109 128 if ($d2 < $d1) return false;
110 129 // $d2 > $d1 oui mais pas trop...
111 130 $diff = $d2->diff($d1);
112   - //debug($diff->y);
  131 + //debug($diff->y);
113 132 return $diff->y < MAX_DIFF_YEARS;
114 133 //return true;
115 134 }
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -143,11 +143,29 @@ class MaterielsTable extends AppTable
143 143 }
144 144  
145 145 public function dateIsValid($value, array $context) {
146   - //debug($entity);
  146 +
  147 + /*
  148 + * $value
  149 + *
  150 + * La valeur du champ, souvent une string
  151 + *
  152 + */
  153 + //debug($value);
  154 +
  155 + /*
  156 + * $context
  157 + *
  158 + * $context->newRecord est un boolean
  159 + * $context->data est l'entité complète, sous forme d'un tableau qui contient tous les champs (souvent des 'string')
  160 + *
  161 + */
  162 + //debug($context);
  163 +
147 164 // /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g
148 165 //$valid = preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([1-2][0-9]{3})$/",$entity);
149 166 //debug((bool)$valid);
150 167 return (bool) preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([1-2][0-9]{3})$/",$value);
  168 +
151 169 }
152 170  
153 171  
... ... @@ -178,6 +196,8 @@ class MaterielsTable extends AppTable
178 196 return (bool) preg_match("/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([1-2][0-9]{3})$/",$entity);
179 197 };
180 198 */
  199 +
  200 + /*
181 201 // return true si date n'est pas future (maxi = today)
182 202 $dateIsNotFutureAndNotTooOld = function ($date_string) {
183 203 $tz = new \DateTimeZone('Europe/Paris');
... ... @@ -190,23 +210,25 @@ class MaterielsTable extends AppTable
190 210 $today = $today->format('Ymd');
191 211 // today - 50 ans = trop vieux !
192 212 $date_too_old = $date_too_old->sub(new \DateInterval('P50Y'))->format('Ymd');
193   - /*
  213 + /S
194 214 $time = Time::now(); // On récupère la date et l'heure actuelles
195 215 $today = (new date("$time->year-$time->month-$time->day"))->format('Ymd'); // On extrait la date on la formatte en un format comparable de type 20171231
196   - */
197   - /*
  216 + S/
  217 + /S
198 218 $timeEntity = new time($entity);
199 219 $dateEntity = (new date("$timeEntity->year-$timeEntity->month-$timeEntity->day"))->format('Ymd');
200   - */
201   - /*
  220 + S/
  221 + /S
202 222 debug($entity); // ex: '20/04/2020'
203 223 debug($today); // '20200717'
204 224 debug($date); // '20200718' => pas bon
205 225 debug($date_too_old);
206   - */
  226 + S/
207 227 //return ($today >= $date);
208 228 return ($date<=$today && $date>$date_too_old);
209 229 };
  230 + */
  231 +
210 232 /*
211 233 $dateIsNotTooFarAway = function ($date_string) {
212 234 $tz = new \DateTimeZone('Europe/Paris');
... ... @@ -278,11 +300,14 @@ class MaterielsTable extends AppTable
278 300 'rule' => 'dateIsValid',
279 301 'message' => "La date n'est pas valide (JJ/MM/AAAA)",
280 302 'provider' => 'table',
281   - ])
  303 + ]);
  304 + // migré dans buildRules() car c'est plus de la validation de cohérence
  305 + /*
282 306 ->add($f, 'acceptable', [
283 307 'rule' => $dateIsNotFutureAndNotTooOld,
284 308 'message' => "La date ne doit être ni future ni trop ancienne"
285 309 ]);
  310 + */
286 311  
287 312 // - Date livraison
288 313 $f = 'date_reception';
... ... @@ -434,7 +459,8 @@ class MaterielsTable extends AppTable
434 459 $validator->allowEmpty('unite_duree_garantie');
435 460  
436 461 return $validator;
437   - }
  462 +
  463 + } // validationDefault()
438 464  
439 465 public function checkStatus($check) { return ($check !== null && in_array($check, $this->ALL_STATUS)); }
440 466  
... ... @@ -524,8 +550,19 @@ class MaterielsTable extends AppTable
524 550 };
525 551  
526 552  
527   - // Check dates
528   - $dateIsAfterDateAchatAndNotTooFar = function (Entity $entity) {
  553 + // Check DATES
  554 +
  555 + $dateAchatIsNotTooOld = function (Entity $entity) {
  556 + return $entity->check_date_is_not_too_old('date_acquisition');
  557 + };
  558 + $dateAchatIsNotFuture = function (Entity $entity) {
  559 + return $entity->check_date_is_not_future('date_acquisition');
  560 + };
  561 + $dateReceptionIsNotFuture = function (Entity $entity) {
  562 + return $entity->check_date_is_not_future('date_reception');
  563 + };
  564 +
  565 + $dateReceptionIsAfterDateAchatAndNotTooFar = function (Entity $entity) {
529 566 return $entity->check_date_d2_gt_d1_but_not_too_much('date_reception','date_acquisition');
530 567 //return $this->check_date_d2_gt_d1_but_not_too_much($entity->date_reception,$entity->date_acquisition);
531 568 /*
... ... @@ -548,7 +585,8 @@ class MaterielsTable extends AppTable
548 585 return $diff->y < MAX_DIFF_YEARS;
549 586 */
550 587 };
551   - $dateIsAfterDateReceptionAndNotTooFar = function (Entity $entity) {
  588 + $dateFinGarantieIsAfterDateReceptionAndNotTooFar = function (Entity $entity) {
  589 + //debug($entity);
552 590 return $entity->check_date_d2_gt_d1_but_not_too_much('date_fin_garantie','date_reception');
553 591 //return $this->check_date_d2_gt_d1_but_not_too_much($entity->date_fin_garantie,$entity->date_reception);
554 592 /*
... ... @@ -633,19 +671,30 @@ class MaterielsTable extends AppTable
633 671 //$rules->add($rules->existsIn(['photo_id'], 'Photos'));
634 672 ///$rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs'));
635 673  
636   - // Check dates reception et fin garantie
637   - $rules->add($dateIsAfterDateAchatAndNotTooFar, [
  674 + // Check dates achat, reception et fin garantie
  675 + $rules->add($dateAchatIsNotTooOld, [
  676 + 'errorField' => 'date_acquisition',
  677 + 'message' => "La date ne doit pas être trop ancienne"
  678 + ]);
  679 + $rules->add($dateAchatIsNotFuture, [
  680 + 'errorField' => 'date_acquisition',
  681 + 'message' => "La date ne doit pas être future"
  682 + ]);
  683 + $rules->add($dateReceptionIsNotFuture, [
  684 + 'errorField' => 'date_reception',
  685 + 'message' => "La date ne doit pas être future"
  686 + ]);
  687 + $rules->add($dateReceptionIsAfterDateAchatAndNotTooFar, [
638 688 'errorField' => 'date_reception',
639 689 'message' => "La date doit être postérieure à la date d'achat (mais pas trop loin)"
640 690 ]);
641   - $rules->add($dateIsAfterDateReceptionAndNotTooFar, [
  691 + $rules->add($dateFinGarantieIsAfterDateReceptionAndNotTooFar, [
642 692 'errorField' => 'date_fin_garantie',
643 693 'message' => "La date doit être postérieure à la date de livraison (mais pas trop loin)"
644 694 ]);
645 695  
646   -
647 696 return $rules;
648   - }
  697 + } // buildRules()
649 698  
650 699 /*
651 700 private function getEntity($id) {
... ...
src/Template/Materiels/add_edit.ctp
... ... @@ -618,7 +618,7 @@ if (isset($cpMateriel)) {
618 618 if ($IS_EDIT && $materiel->date_reception) $value_edit = $materiel->date_reception->format('d/m/Y');
619 619 echo $this->Form->control('date_reception', [
620 620 'type' => 'text',
621   - 'label' => 'Date de réception',
  621 + 'label' => 'Date de livraison',
622 622 'class' => 'datepicker',
623 623 'placeholder' => $comment,
624 624 'empty' => true,
... ...
src/Template/Materiels/view.ctp
... ... @@ -615,8 +615,8 @@ if ($configuration-&gt;metrologie == 1) {
615 615 if (h($entity->metrologie) == 0)
616 616 $displayElement(__('Métrologie'), $metro);
617 617 }
618   -$displayElement(__('Date d\'achat'), h($entity->date_acquisition));
619   -$displayElement(__('Date de reception'), h($entity->date_reception));
  618 +$displayElement(__("Date d'achat"), h($entity->date_acquisition));
  619 +$displayElement(__('Date de livraison'), h($entity->date_reception));
620 620 if (! empty(h($entity->duree_garntie))) {
621 621 $displayElement(__('Duree garantie'), h($entity->duree_garantie) . ' ' . h($entity->unite_duree_garantie));
622 622 }
... ...