Commit 46d02931d1ad9477c02c3a42065a508a03471c42

Authored by Etienne Pallier
2 parents a0bfa975 f3defda7
Exists in master and in 1 other branch dev

Merge dev branch into master branch (vv3.7.9.64)

@@ -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 -------
@@ -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