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)

CHANGES.txt
... ... @@ -26,6 +26,11 @@ TODO: - Nouvelle page web "Statistiques mensuelles" (/pages/stats)
26 26  
27 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 36 06/07/2020 NEWS#1 :
... ... @@ -65,9 +70,10 @@ Outre ces changements, voici d'autres changements importants :
65 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 74 - (i) Renforcement important des controles sur les dates d'un matériel (achat, livraison, fin garantie)
70 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 43 --------------------------------------------------------------------------------------------
44 44  
45 45 Date: 17/07/2020
46   -Version: 3.7.9.63
  46 +Version: 3.7.9.64
47 47  
48 48  
49 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 188 */
189 189 /*
190 190 debug($entity); // ex: '20/04/2020'
191   - debug($today);
192   - debug($date);
193   - exit;
194   - */
195 191 debug($today); // '20200717'
196 192 debug($date); // '20200718' => pas bon
197 193 debug($date_too_old);
  194 + */
198 195 //return ($today >= $date);
199 196 return ($date<=$today && $date>$date_too_old);
200 197 };
... ... @@ -248,7 +245,7 @@ class MaterielsTable extends AppTable
248 245 $validator
249 246 ->allowEmptyString($f, $configuration->date_commande_facultative, 'Ce champ doit être rempli')
250 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 249 // 2 façons d'appeler une règle de validation locale :
253 250 // - par son nom de fonction définie LOCALEMENT (ici dans CETTE fonction) comme une variable (avec un $)
254 251 //'rule' => $dateIsValid,
... ... @@ -268,7 +265,7 @@ class MaterielsTable extends AppTable
268 265 ->allowEmptyString($f)
269 266 ->date($f, 'dmy', 'Date invalide') // https://api.cakephp.org/3.8/class-Cake.Validation.Validation.html#_date
270 267 //->add('date_reception', 'valid', ['rule' => 'date', 'message' => 'Date invalide']);
271   - ->add($f, 'valide-JJslashMMslashAAAA', [
  268 + ->add($f, 'valide1', [
272 269 'rule' => 'dateIsValid',
273 270 'message' => "La date n'est pas valide (JJ/MM/AAAA)",
274 271 'provider' => 'table',
... ... @@ -279,7 +276,7 @@ class MaterielsTable extends AppTable
279 276 $validator
280 277 ->allowEmptyString($f)
281 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 280 'rule' => 'dateIsValid',
284 281 'message' => "La date n'est pas valide (JJ/MM/AAAA)",
285 282 'provider' => 'table',
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -124,7 +124,8 @@ class MaterielsControllerTest extends General {
124 124 // Ca marche pas dans le sens US yyyy-mm-dd alors que ça marche dans la fixture, WHY ???
125 125 //'date_acquisition' => yyyy1.'-04-19', //+4
126 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 129 // pas obligatoire, mais plus cohérent car c'est le statut minimum
129 130 ////'status' => 'CREATED',
130 131 /*
... ... @@ -769,6 +770,7 @@ class MaterielsControllerTest extends General {
769 770 //debug("bef $nbmat");
770 771  
771 772 // ADD
  773 + //debug($materiel);
772 774 //$this->post('/materiels/add', $this->newMaterielWithAllMandatoryFields);
773 775 $this->post('/materiels/add', $materiel);
774 776 $nbmat++;
... ... @@ -908,7 +910,8 @@ class MaterielsControllerTest extends General {
908 910 //'materiel_technique' => 1,
909 911 //'status' => 'CREATED',
910 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 915 //'nom_createur' => 'Pallier Etienne',
913 916 //'nom_modificateur' => 'Jean Administration',
914 917 //'nom_responsable' => 'Jacques Utilisateur',
... ... @@ -1045,7 +1048,10 @@ class MaterielsControllerTest extends General {
1045 1048 'materiel_administratif' => 0,
1046 1049 //'materiel_technique' => 1,
1047 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 1055 'nom_createur' => 'Pallier Etienne',
1050 1056 'nom_modificateur' => 'Jean Administration',
1051 1057 'nom_responsable' => 'Jacques Utilisateur',
... ... @@ -1055,7 +1061,15 @@ class MaterielsControllerTest extends General {
1055 1061 $this->post('/materiels/edit/2', $data);
1056 1062 $this->get('/materiels/index');
1057 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 1073 // 2) Passe le status à VALIDATED
1060 1074 $data = [
1061 1075 'designation' => 'Matos Test 2 VALIDATED',
... ... @@ -1989,7 +2003,10 @@ class MaterielsControllerTest extends General {
1989 2003 'materiel_administratif' => 0,
1990 2004 'materiel_technique' => 1,
1991 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 2010 'nom_createur' => 'Pallier Etienne',
1994 2011 'nom_modificateur' => 'Jean Administration',
1995 2012 'nom_responsable' => 'Jacques Utilisateur',
... ... @@ -2511,7 +2528,10 @@ class MaterielsControllerTest extends General {
2511 2528  
2512 2529 // (EP 20200629)
2513 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 2535 switch($action) {
2516 2536 case 'add':
2517 2537 $expected_flash_message .= 'ajouté';
... ... @@ -2540,7 +2560,10 @@ class MaterielsControllerTest extends General {
2540 2560 case 'statusTobearchived': $expected_flash_message = "La sortie d'inventaire a bien été demandée"; break;
2541 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 2567 if ($flash_message) {
2545 2568 // Assert a flash message in the 'flash' key.
2546 2569 // Test message partiel
... ... @@ -2658,6 +2681,8 @@ class MaterielsControllerTest extends General {
2658 2681 $this->_checkNbEntitiesInIndexViewIsAsExpected('Materiels', $nbentities);
2659 2682 // On récupère ce dernier matériel créé from BD
2660 2683 $m = $this->Materiels->find()->last();
  2684 + //debug($m);
  2685 + // id = 15
2661 2686 $id = $m->id;
2662 2687 // On vérifie que le statut du matos a bien changé
2663 2688 $this->_checkMaterielStatusChangedTo($id,$new_status);
... ... @@ -2684,19 +2709,26 @@ class MaterielsControllerTest extends General {
2684 2709 // b) On ajoute les données manquantes
2685 2710 // CHAMPS NECESSAIRES POUR MATERIEL VALIDATED :
2686 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 2716 'fournisseur_id' => 1,
2690 2717 'organisme_id' => 1,
2691 2718 'prix_ht' => 75,
2692 2719 'numero_commande' => 'Lorem ipsum dolor sit amet',
2693 2720 ];
2694 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 2728 // c) SUCCESS car on a toutes les données nécessaires
2698 2729 $action = 'statusValidated';
2699   - $this->_doActionAndCheckResult($action, $id, $SUCCESS=true);
  2730 + //$this->_doActionAndCheckResult($action, $id, $SUCCESS=true);
  2731 + $this->_doActionAndCheckResult($action, $id, true);
2700 2732 // On vérifie que le statut du matos a bien changé
2701 2733 $this->_checkMaterielStatusChangedTo($id,$new_status);
2702 2734  
... ...