Commit 46d02931d1ad9477c02c3a42065a508a03471c42
Exists in
master
and in
1 other branch
Merge dev branch into master branch (vv3.7.9.64)
Showing
4 changed files
with
56 additions
and
21 deletions
Show diff stats
CHANGES.txt
@@ -26,6 +26,11 @@ TODO: - Nouvelle page web "Statistiques mensuelles" (/pages/stats) | @@ -26,6 +26,11 @@ TODO: - Nouvelle page web "Statistiques mensuelles" (/pages/stats) | ||
26 | 26 | ||
27 | - Mode "nolimit" pour le profil "superadmin" activable depuis la page de configuration (/configurations/view) : permet de donner (temporairement) plus de droits au super administrateur ("Superadmin a tous les droits", depuis menu Tools) | 27 | - Mode "nolimit" pour le profil "superadmin" activable depuis la page de configuration (/configurations/view) : permet de donner (temporairement) plus de droits au super administrateur ("Superadmin a tous les droits", depuis menu Tools) |
28 | 28 | ||
29 | +- Numéro inventaire désormais régénéré si on change la date d'achat (l'année est mise à jour) | ||
30 | + | ||
31 | +- Renforcement des contrôles sur les dates pour éviter des incohérences (date achat, livraison, fin garantie...) | ||
32 | + | ||
33 | + | ||
29 | 34 | ||
30 | ------- | 35 | ------- |
31 | 06/07/2020 NEWS#1 : | 36 | 06/07/2020 NEWS#1 : |
@@ -65,9 +70,10 @@ Outre ces changements, voici d'autres changements importants : | @@ -65,9 +70,10 @@ Outre ces changements, voici d'autres changements importants : | ||
65 | ======= CHANGES ======= | 70 | ======= CHANGES ======= |
66 | 71 | ||
67 | ------- | 72 | ------- |
68 | -17/07/2020 v3.7.9.63 (EP) | 73 | +17/07/2020 v3.7.9.63-64 (EP) |
69 | - (i) Renforcement important des controles sur les dates d'un matériel (achat, livraison, fin garantie) | 74 | - (i) Renforcement important des controles sur les dates d'un matériel (achat, livraison, fin garantie) |
70 | - (i) Le numero d'inventaire généré automatiquement en fonction de l'année d'achat est désormais MIS À JOUR à chaque fois qu'on change la date d'achat !!! | 75 | - (i) Le numero d'inventaire généré automatiquement en fonction de l'année d'achat est désormais MIS À JOUR à chaque fois qu'on change la date d'achat !!! |
76 | + - (b) bugfixes et renforcement des tests (date reception doit maintenant etre >= date achat, et test sur message flash était insuffisant et laissait passer des cas...) | ||
71 | 77 | ||
72 | 78 | ||
73 | ------- | 79 | ------- |
README.md
@@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : | ||
43 | -------------------------------------------------------------------------------------------- | 43 | -------------------------------------------------------------------------------------------- |
44 | 44 | ||
45 | Date: 17/07/2020 | 45 | Date: 17/07/2020 |
46 | -Version: 3.7.9.63 | 46 | +Version: 3.7.9.64 |
47 | 47 | ||
48 | 48 | ||
49 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) | 49 | HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) |
src/Model/Table/MaterielsTable.php
@@ -188,13 +188,10 @@ class MaterielsTable extends AppTable | @@ -188,13 +188,10 @@ class MaterielsTable extends AppTable | ||
188 | */ | 188 | */ |
189 | /* | 189 | /* |
190 | debug($entity); // ex: '20/04/2020' | 190 | debug($entity); // ex: '20/04/2020' |
191 | - debug($today); | ||
192 | - debug($date); | ||
193 | - exit; | ||
194 | - */ | ||
195 | debug($today); // '20200717' | 191 | debug($today); // '20200717' |
196 | debug($date); // '20200718' => pas bon | 192 | debug($date); // '20200718' => pas bon |
197 | debug($date_too_old); | 193 | debug($date_too_old); |
194 | + */ | ||
198 | //return ($today >= $date); | 195 | //return ($today >= $date); |
199 | return ($date<=$today && $date>$date_too_old); | 196 | return ($date<=$today && $date>$date_too_old); |
200 | }; | 197 | }; |
@@ -248,7 +245,7 @@ class MaterielsTable extends AppTable | @@ -248,7 +245,7 @@ class MaterielsTable extends AppTable | ||
248 | $validator | 245 | $validator |
249 | ->allowEmptyString($f, $configuration->date_commande_facultative, 'Ce champ doit être rempli') | 246 | ->allowEmptyString($f, $configuration->date_commande_facultative, 'Ce champ doit être rempli') |
250 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date | 247 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date |
251 | - ->add($f, 'valide', [ | 248 | + ->add($f, 'valide0', [ |
252 | // 2 façons d'appeler une règle de validation locale : | 249 | // 2 façons d'appeler une règle de validation locale : |
253 | // - par son nom de fonction définie LOCALEMENT (ici dans CETTE fonction) comme une variable (avec un $) | 250 | // - par son nom de fonction définie LOCALEMENT (ici dans CETTE fonction) comme une variable (avec un $) |
254 | //'rule' => $dateIsValid, | 251 | //'rule' => $dateIsValid, |
@@ -268,7 +265,7 @@ class MaterielsTable extends AppTable | @@ -268,7 +265,7 @@ class MaterielsTable extends AppTable | ||
268 | ->allowEmptyString($f) | 265 | ->allowEmptyString($f) |
269 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date | 266 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date |
270 | //->add('date_reception', 'valid', ['rule' => 'date', 'message' => 'Date invalide']); | 267 | //->add('date_reception', 'valid', ['rule' => 'date', 'message' => 'Date invalide']); |
271 | - ->add($f, 'valide-JJslashMMslashAAAA', [ | 268 | + ->add($f, 'valide1', [ |
272 | 'rule' => 'dateIsValid', | 269 | 'rule' => 'dateIsValid', |
273 | 'message' => "La date n'est pas valide (JJ/MM/AAAA)", | 270 | 'message' => "La date n'est pas valide (JJ/MM/AAAA)", |
274 | 'provider' => 'table', | 271 | 'provider' => 'table', |
@@ -279,7 +276,7 @@ class MaterielsTable extends AppTable | @@ -279,7 +276,7 @@ class MaterielsTable extends AppTable | ||
279 | $validator | 276 | $validator |
280 | ->allowEmptyString($f) | 277 | ->allowEmptyString($f) |
281 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date | 278 | ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date |
282 | - ->add($f, 'valide-JJslashMMslashAAAA', [ | 279 | + ->add($f, 'valide2', [ |
283 | 'rule' => 'dateIsValid', | 280 | 'rule' => 'dateIsValid', |
284 | 'message' => "La date n'est pas valide (JJ/MM/AAAA)", | 281 | 'message' => "La date n'est pas valide (JJ/MM/AAAA)", |
285 | 'provider' => 'table', | 282 | 'provider' => 'table', |
tests/TestCase/Controller/MaterielsControllerTest.php
@@ -124,7 +124,8 @@ class MaterielsControllerTest extends General { | @@ -124,7 +124,8 @@ class MaterielsControllerTest extends General { | ||
124 | // Ca marche pas dans le sens US yyyy-mm-dd alors que ça marche dans la fixture, WHY ??? | 124 | // Ca marche pas dans le sens US yyyy-mm-dd alors que ça marche dans la fixture, WHY ??? |
125 | //'date_acquisition' => yyyy1.'-04-19', //+4 | 125 | //'date_acquisition' => yyyy1.'-04-19', //+4 |
126 | // Donc format FR dd-mm-yyyy | 126 | // Donc format FR dd-mm-yyyy |
127 | - 'date_acquisition' => '19-04-'.yyyy1, | 127 | + //'date_acquisition' => '19-04-'.yyyy1, |
128 | + 'date_acquisition' => '19/04/'.yyyy1, | ||
128 | // pas obligatoire, mais plus cohérent car c'est le statut minimum | 129 | // pas obligatoire, mais plus cohérent car c'est le statut minimum |
129 | ////'status' => 'CREATED', | 130 | ////'status' => 'CREATED', |
130 | /* | 131 | /* |
@@ -769,6 +770,7 @@ class MaterielsControllerTest extends General { | @@ -769,6 +770,7 @@ class MaterielsControllerTest extends General { | ||
769 | //debug("bef $nbmat"); | 770 | //debug("bef $nbmat"); |
770 | 771 | ||
771 | // ADD | 772 | // ADD |
773 | + //debug($materiel); | ||
772 | //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); | 774 | //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); |
773 | $this->post('/materiels/add', $materiel); | 775 | $this->post('/materiels/add', $materiel); |
774 | $nbmat++; | 776 | $nbmat++; |
@@ -908,7 +910,8 @@ class MaterielsControllerTest extends General { | @@ -908,7 +910,8 @@ class MaterielsControllerTest extends General { | ||
908 | //'materiel_technique' => 1, | 910 | //'materiel_technique' => 1, |
909 | //'status' => 'CREATED', | 911 | //'status' => 'CREATED', |
910 | //'date_acquisition' => '19-04-2016', | 912 | //'date_acquisition' => '19-04-2016', |
911 | - 'date_acquisition' => '19-04-'.yyyy0, | 913 | + 'date_acquisition' => '19/04/'.yyyy0, |
914 | + 'date_reception' => '', // sinon, il FAUT qu'elle soit >= date achat | ||
912 | //'nom_createur' => 'Pallier Etienne', | 915 | //'nom_createur' => 'Pallier Etienne', |
913 | //'nom_modificateur' => 'Jean Administration', | 916 | //'nom_modificateur' => 'Jean Administration', |
914 | //'nom_responsable' => 'Jacques Utilisateur', | 917 | //'nom_responsable' => 'Jacques Utilisateur', |
@@ -1045,7 +1048,10 @@ class MaterielsControllerTest extends General { | @@ -1045,7 +1048,10 @@ class MaterielsControllerTest extends General { | ||
1045 | 'materiel_administratif' => 0, | 1048 | 'materiel_administratif' => 0, |
1046 | //'materiel_technique' => 1, | 1049 | //'materiel_technique' => 1, |
1047 | //'status' => 'CREATED', | 1050 | //'status' => 'CREATED', |
1048 | - 'date_acquisition' => '19-04-2016', | 1051 | + //'date_acquisition' => '19-04-2016', |
1052 | + //'date_acquisition' => '19/04/2016', | ||
1053 | + 'date_acquisition' => '19/04/'.yyyy0, | ||
1054 | + 'date_reception' => '', // sinon FAUT qu'elle soit >= date_acquisition | ||
1049 | 'nom_createur' => 'Pallier Etienne', | 1055 | 'nom_createur' => 'Pallier Etienne', |
1050 | 'nom_modificateur' => 'Jean Administration', | 1056 | 'nom_modificateur' => 'Jean Administration', |
1051 | 'nom_responsable' => 'Jacques Utilisateur', | 1057 | 'nom_responsable' => 'Jacques Utilisateur', |
@@ -1055,7 +1061,15 @@ class MaterielsControllerTest extends General { | @@ -1055,7 +1061,15 @@ class MaterielsControllerTest extends General { | ||
1055 | $this->post('/materiels/edit/2', $data); | 1061 | $this->post('/materiels/edit/2', $data); |
1056 | $this->get('/materiels/index'); | 1062 | $this->get('/materiels/index'); |
1057 | $this->assertResponseContains("Matos Test 2 CREATED modified", "Le matériel CREATED édité n'a pas pu etre enregistré"); | 1063 | $this->assertResponseContains("Matos Test 2 CREATED modified", "Le matériel CREATED édité n'a pas pu etre enregistré"); |
1058 | - | 1064 | + |
1065 | + // Le numero d'inventaire doit avoir été mis à jour avec la nouvelle année de la date d'achat | ||
1066 | + $new_num_inventaire = 'TEST-'.yyyy0.'-0001'; | ||
1067 | + $this->assertResponseContains($new_num_inventaire, "Le numéro d'inventaire n'a pas été régénéré"); | ||
1068 | + $m = $this->Materiels->get(2); | ||
1069 | + assert($m->numero_laboratoire == $new_num_inventaire, "Le numéro d'inventaire n'a pas été régénéré"); | ||
1070 | + | ||
1071 | + | ||
1072 | + | ||
1059 | // 2) Passe le status à VALIDATED | 1073 | // 2) Passe le status à VALIDATED |
1060 | $data = [ | 1074 | $data = [ |
1061 | 'designation' => 'Matos Test 2 VALIDATED', | 1075 | 'designation' => 'Matos Test 2 VALIDATED', |
@@ -1989,7 +2003,10 @@ class MaterielsControllerTest extends General { | @@ -1989,7 +2003,10 @@ class MaterielsControllerTest extends General { | ||
1989 | 'materiel_administratif' => 0, | 2003 | 'materiel_administratif' => 0, |
1990 | 'materiel_technique' => 1, | 2004 | 'materiel_technique' => 1, |
1991 | 'status' => 'CREATED', | 2005 | 'status' => 'CREATED', |
1992 | - 'date_acquisition' => '19-04-2016', | 2006 | + //'date_acquisition' => '19-04-2016', |
2007 | + //'date_acquisition' => '19/04/2016', | ||
2008 | + 'date_acquisition' => '19/04/'.yyyy0, | ||
2009 | + 'date_reception' => '', // sinon FAUT qu'elle soit >= date_acquisition | ||
1993 | 'nom_createur' => 'Pallier Etienne', | 2010 | 'nom_createur' => 'Pallier Etienne', |
1994 | 'nom_modificateur' => 'Jean Administration', | 2011 | 'nom_modificateur' => 'Jean Administration', |
1995 | 'nom_responsable' => 'Jacques Utilisateur', | 2012 | 'nom_responsable' => 'Jacques Utilisateur', |
@@ -2511,7 +2528,10 @@ class MaterielsControllerTest extends General { | @@ -2511,7 +2528,10 @@ class MaterielsControllerTest extends General { | ||
2511 | 2528 | ||
2512 | // (EP 20200629) | 2529 | // (EP 20200629) |
2513 | private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { | 2530 | private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { |
2514 | - $expected_flash_message = 'Le matériel a bien été '; | 2531 | + // Par défaut, pas de message flash |
2532 | + $expected_flash_message = []; | ||
2533 | + if (in_array($action, ['add', 'edit', 'delete', 'statusCreated', 'statusValidated', 'statusTobearchived', 'statusArchived'])) | ||
2534 | + $expected_flash_message = 'Le matériel a bien été '; | ||
2515 | switch($action) { | 2535 | switch($action) { |
2516 | case 'add': | 2536 | case 'add': |
2517 | $expected_flash_message .= 'ajouté'; | 2537 | $expected_flash_message .= 'ajouté'; |
@@ -2540,7 +2560,10 @@ class MaterielsControllerTest extends General { | @@ -2540,7 +2560,10 @@ class MaterielsControllerTest extends General { | ||
2540 | case 'statusTobearchived': $expected_flash_message = "La sortie d'inventaire a bien été demandée"; break; | 2560 | case 'statusTobearchived': $expected_flash_message = "La sortie d'inventaire a bien été demandée"; break; |
2541 | case 'statusArchived': $expected_flash_message .= "archivé (sorti de l'inventaire)"; break; | 2561 | case 'statusArchived': $expected_flash_message .= "archivé (sorti de l'inventaire)"; break; |
2542 | } | 2562 | } |
2543 | - $flash_message = isset($_SESSION['Flash']) ? $_SESSION['Flash']['flash'][0]['message']:[]; | 2563 | + //$flash_message = isset($_SESSION['Flash']) ? $_SESSION['Flash']['flash'][0]['message']:[]; |
2564 | + //debug($_SESSION['Flash']); | ||
2565 | + $flash_message = isset($_SESSION['Flash']['flash']) ? $_SESSION['Flash']['flash'][0]['message'] : []; | ||
2566 | + if ($SUCCESS && $expected_flash_message) $this->assertTrue($flash_message != [], "Pas de message flash alors qu'il devrait y en avoir un !"); | ||
2544 | if ($flash_message) { | 2567 | if ($flash_message) { |
2545 | // Assert a flash message in the 'flash' key. | 2568 | // Assert a flash message in the 'flash' key. |
2546 | // Test message partiel | 2569 | // Test message partiel |
@@ -2658,6 +2681,8 @@ class MaterielsControllerTest extends General { | @@ -2658,6 +2681,8 @@ class MaterielsControllerTest extends General { | ||
2658 | $this->_checkNbEntitiesInIndexViewIsAsExpected('Materiels', $nbentities); | 2681 | $this->_checkNbEntitiesInIndexViewIsAsExpected('Materiels', $nbentities); |
2659 | // On récupère ce dernier matériel créé from BD | 2682 | // On récupère ce dernier matériel créé from BD |
2660 | $m = $this->Materiels->find()->last(); | 2683 | $m = $this->Materiels->find()->last(); |
2684 | + //debug($m); | ||
2685 | + // id = 15 | ||
2661 | $id = $m->id; | 2686 | $id = $m->id; |
2662 | // On vérifie que le statut du matos a bien changé | 2687 | // On vérifie que le statut du matos a bien changé |
2663 | $this->_checkMaterielStatusChangedTo($id,$new_status); | 2688 | $this->_checkMaterielStatusChangedTo($id,$new_status); |
@@ -2684,19 +2709,26 @@ class MaterielsControllerTest extends General { | @@ -2684,19 +2709,26 @@ class MaterielsControllerTest extends General { | ||
2684 | // b) On ajoute les données manquantes | 2709 | // b) On ajoute les données manquantes |
2685 | // CHAMPS NECESSAIRES POUR MATERIEL VALIDATED : | 2710 | // CHAMPS NECESSAIRES POUR MATERIEL VALIDATED : |
2686 | $new_data = [ | 2711 | $new_data = [ |
2687 | - 'date_reception' => '2016-04-19', | ||
2688 | - 'nom_responsable' => 'Lorem ipsum dolor sit amet', | 2712 | + //'date_reception' => '2016-04-19', |
2713 | + //'date_reception' => '19/04/2016', // FAIL car doit etre >= date achat !! | ||
2714 | + 'date_reception' => '19/04/'.yyyy0, | ||
2715 | + 'nom_responsable' => 'LoremEE ipsum dolor sit amet', | ||
2689 | 'fournisseur_id' => 1, | 2716 | 'fournisseur_id' => 1, |
2690 | 'organisme_id' => 1, | 2717 | 'organisme_id' => 1, |
2691 | 'prix_ht' => 75, | 2718 | 'prix_ht' => 75, |
2692 | 'numero_commande' => 'Lorem ipsum dolor sit amet', | 2719 | 'numero_commande' => 'Lorem ipsum dolor sit amet', |
2693 | ]; | 2720 | ]; |
2694 | $action = 'edit'; | 2721 | $action = 'edit'; |
2695 | - $this->_doActionAndCheckResult($action, $id, $SUCCESS=true, $new_data); | ||
2696 | - | 2722 | + //$this->_doActionAndCheckResult($action, $id, $SUCCESS=true, $new_data); |
2723 | + $this->_doActionAndCheckResult($action, $id, true, $new_data); | ||
2724 | + //$m = $this->Materiels->find()->last(); | ||
2725 | + //$m = $this->Materiels->get($id); | ||
2726 | + //debug($m); | ||
2727 | + | ||
2697 | // c) SUCCESS car on a toutes les données nécessaires | 2728 | // c) SUCCESS car on a toutes les données nécessaires |
2698 | $action = 'statusValidated'; | 2729 | $action = 'statusValidated'; |
2699 | - $this->_doActionAndCheckResult($action, $id, $SUCCESS=true); | 2730 | + //$this->_doActionAndCheckResult($action, $id, $SUCCESS=true); |
2731 | + $this->_doActionAndCheckResult($action, $id, true); | ||
2700 | // On vérifie que le statut du matos a bien changé | 2732 | // On vérifie que le statut du matos a bien changé |
2701 | $this->_checkMaterielStatusChangedTo($id,$new_status); | 2733 | $this->_checkMaterielStatusChangedTo($id,$new_status); |
2702 | 2734 |