diff --git a/CHANGES.txt b/CHANGES.txt index 714a171..fdaf1f1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -26,6 +26,11 @@ TODO: - Nouvelle page web "Statistiques mensuelles" (/pages/stats) - 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) +- Numéro inventaire désormais régénéré si on change la date d'achat (l'année est mise à jour) + +- Renforcement des contrôles sur les dates pour éviter des incohérences (date achat, livraison, fin garantie...) + + ------- 06/07/2020 NEWS#1 : @@ -65,9 +70,10 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= ------- -17/07/2020 v3.7.9.63 (EP) +17/07/2020 v3.7.9.63-64 (EP) - (i) Renforcement important des controles sur les dates d'un matériel (achat, livraison, fin garantie) - (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 !!! + - (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...) ------- diff --git a/README.md b/README.md index eefd092..a86902b 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 17/07/2020 -Version: 3.7.9.63 +Version: 3.7.9.64 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 2fb2fc0..4222382 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -188,13 +188,10 @@ class MaterielsTable extends AppTable */ /* debug($entity); // ex: '20/04/2020' - debug($today); - debug($date); - exit; - */ debug($today); // '20200717' debug($date); // '20200718' => pas bon debug($date_too_old); + */ //return ($today >= $date); return ($date<=$today && $date>$date_too_old); }; @@ -248,7 +245,7 @@ class MaterielsTable extends AppTable $validator ->allowEmptyString($f, $configuration->date_commande_facultative, 'Ce champ doit être rempli') ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date - ->add($f, 'valide', [ + ->add($f, 'valide0', [ // 2 façons d'appeler une règle de validation locale : // - par son nom de fonction définie LOCALEMENT (ici dans CETTE fonction) comme une variable (avec un $) //'rule' => $dateIsValid, @@ -268,7 +265,7 @@ class MaterielsTable extends AppTable ->allowEmptyString($f) ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date //->add('date_reception', 'valid', ['rule' => 'date', 'message' => 'Date invalide']); - ->add($f, 'valide-JJslashMMslashAAAA', [ + ->add($f, 'valide1', [ 'rule' => 'dateIsValid', 'message' => "La date n'est pas valide (JJ/MM/AAAA)", 'provider' => 'table', @@ -279,7 +276,7 @@ class MaterielsTable extends AppTable $validator ->allowEmptyString($f) ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date - ->add($f, 'valide-JJslashMMslashAAAA', [ + ->add($f, 'valide2', [ 'rule' => 'dateIsValid', 'message' => "La date n'est pas valide (JJ/MM/AAAA)", 'provider' => 'table', diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index 1e2db9b..78a93ef 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -124,7 +124,8 @@ class MaterielsControllerTest extends General { // Ca marche pas dans le sens US yyyy-mm-dd alors que ça marche dans la fixture, WHY ??? //'date_acquisition' => yyyy1.'-04-19', //+4 // Donc format FR dd-mm-yyyy - 'date_acquisition' => '19-04-'.yyyy1, + //'date_acquisition' => '19-04-'.yyyy1, + 'date_acquisition' => '19/04/'.yyyy1, // pas obligatoire, mais plus cohérent car c'est le statut minimum ////'status' => 'CREATED', /* @@ -769,6 +770,7 @@ class MaterielsControllerTest extends General { //debug("bef $nbmat"); // ADD + //debug($materiel); //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields); $this->post('/materiels/add', $materiel); $nbmat++; @@ -908,7 +910,8 @@ class MaterielsControllerTest extends General { //'materiel_technique' => 1, //'status' => 'CREATED', //'date_acquisition' => '19-04-2016', - 'date_acquisition' => '19-04-'.yyyy0, + 'date_acquisition' => '19/04/'.yyyy0, + 'date_reception' => '', // sinon, il FAUT qu'elle soit >= date achat //'nom_createur' => 'Pallier Etienne', //'nom_modificateur' => 'Jean Administration', //'nom_responsable' => 'Jacques Utilisateur', @@ -1045,7 +1048,10 @@ class MaterielsControllerTest extends General { 'materiel_administratif' => 0, //'materiel_technique' => 1, //'status' => 'CREATED', - 'date_acquisition' => '19-04-2016', + //'date_acquisition' => '19-04-2016', + //'date_acquisition' => '19/04/2016', + 'date_acquisition' => '19/04/'.yyyy0, + 'date_reception' => '', // sinon FAUT qu'elle soit >= date_acquisition 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', @@ -1055,7 +1061,15 @@ class MaterielsControllerTest extends General { $this->post('/materiels/edit/2', $data); $this->get('/materiels/index'); $this->assertResponseContains("Matos Test 2 CREATED modified", "Le matériel CREATED édité n'a pas pu etre enregistré"); - + + // Le numero d'inventaire doit avoir été mis à jour avec la nouvelle année de la date d'achat + $new_num_inventaire = 'TEST-'.yyyy0.'-0001'; + $this->assertResponseContains($new_num_inventaire, "Le matériel CREATED édité n'a pas pu etre enregistré"); + $m = $this->Materiels->get(2); + assertEquals($m->numero_laboratoire, $new_num_inventaire); + + + // 2) Passe le status à VALIDATED $data = [ 'designation' => 'Matos Test 2 VALIDATED', @@ -1989,7 +2003,10 @@ class MaterielsControllerTest extends General { 'materiel_administratif' => 0, 'materiel_technique' => 1, 'status' => 'CREATED', - 'date_acquisition' => '19-04-2016', + //'date_acquisition' => '19-04-2016', + //'date_acquisition' => '19/04/2016', + 'date_acquisition' => '19/04/'.yyyy0, + 'date_reception' => '', // sinon FAUT qu'elle soit >= date_acquisition 'nom_createur' => 'Pallier Etienne', 'nom_modificateur' => 'Jean Administration', 'nom_responsable' => 'Jacques Utilisateur', @@ -2511,7 +2528,10 @@ class MaterielsControllerTest extends General { // (EP 20200629) private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { - $expected_flash_message = 'Le matériel a bien été '; + // Par défaut, pas de message flash + $expected_flash_message = []; + if (in_array($action, ['add', 'edit', 'delete', 'statusCreated', 'statusValidated', 'statusTobearchived', 'statusArchived'])) + $expected_flash_message = 'Le matériel a bien été '; switch($action) { case 'add': $expected_flash_message .= 'ajouté'; @@ -2540,7 +2560,10 @@ class MaterielsControllerTest extends General { case 'statusTobearchived': $expected_flash_message = "La sortie d'inventaire a bien été demandée"; break; case 'statusArchived': $expected_flash_message .= "archivé (sorti de l'inventaire)"; break; } - $flash_message = isset($_SESSION['Flash']) ? $_SESSION['Flash']['flash'][0]['message']:[]; + //$flash_message = isset($_SESSION['Flash']) ? $_SESSION['Flash']['flash'][0]['message']:[]; + //debug($_SESSION['Flash']); + $flash_message = isset($_SESSION['Flash']['flash']) ? $_SESSION['Flash']['flash'][0]['message'] : []; + if ($SUCCESS && $expected_flash_message) $this->assertTrue($flash_message != [], "Pas de message flash alors qu'il devrait y en avoir un !"); if ($flash_message) { // Assert a flash message in the 'flash' key. // Test message partiel @@ -2658,6 +2681,8 @@ class MaterielsControllerTest extends General { $this->_checkNbEntitiesInIndexViewIsAsExpected('Materiels', $nbentities); // On récupère ce dernier matériel créé from BD $m = $this->Materiels->find()->last(); + //debug($m); + // id = 15 $id = $m->id; // On vérifie que le statut du matos a bien changé $this->_checkMaterielStatusChangedTo($id,$new_status); @@ -2684,19 +2709,26 @@ class MaterielsControllerTest extends General { // b) On ajoute les données manquantes // CHAMPS NECESSAIRES POUR MATERIEL VALIDATED : $new_data = [ - 'date_reception' => '2016-04-19', - 'nom_responsable' => 'Lorem ipsum dolor sit amet', + //'date_reception' => '2016-04-19', + //'date_reception' => '19/04/2016', // FAIL car doit etre >= date achat !! + 'date_reception' => '19/04/'.yyyy0, + 'nom_responsable' => 'LoremEE ipsum dolor sit amet', 'fournisseur_id' => 1, 'organisme_id' => 1, 'prix_ht' => 75, 'numero_commande' => 'Lorem ipsum dolor sit amet', ]; $action = 'edit'; - $this->_doActionAndCheckResult($action, $id, $SUCCESS=true, $new_data); - + //$this->_doActionAndCheckResult($action, $id, $SUCCESS=true, $new_data); + $this->_doActionAndCheckResult($action, $id, true, $new_data); + //$m = $this->Materiels->find()->last(); + //$m = $this->Materiels->get($id); + //debug($m); + // c) SUCCESS car on a toutes les données nécessaires $action = 'statusValidated'; - $this->_doActionAndCheckResult($action, $id, $SUCCESS=true); + //$this->_doActionAndCheckResult($action, $id, $SUCCESS=true); + $this->_doActionAndCheckResult($action, $id, true); // On vérifie que le statut du matos a bien changé $this->_checkMaterielStatusChangedTo($id,$new_status); -- libgit2 0.21.2