Commit 0ea75a7957b3adbf4b7345b870b7499af62a3fa4

Authored by Etienne Pallier
1 parent 80b8cb03
Exists in master and in 1 other branch dev

bugfix et réécriture des actions documents /admission, /sortie, /fiche

(v3.7.9.51)

=> désormais, on passe l'id du matos associé et non pas son numero
d'inventaire !!! (mauvais raccourci)
=> ca permet de tester les conditions d'accès de ces actions en fonction
du matériel concerné !!
README.md
... ... @@ -54,12 +54,12 @@ Logiciel testé et validé sur les configurations suivantes :
54 54 VERSION ACTUELLE
55 55  
56 56 Date: 29/06/2020
57   -Version: 3.7.9.50
  57 +Version: 3.7.9.51
58 58 Author: EP
59   -Commentaire:
60   - - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED)
61   - - bugfix (en cours) des actions documents/admission et documents/sortie qui ne marchent plus car on ne leur passe pas un id mais un nom de doc...
62   - - Nombreuses refactorisations dans les tests
  59 +Commentaire:
  60 + - bugfix et réécriture des actions documents/admission, sortie, fiche !!! (pas d'id)
  61 + => désormais, on passe l'id du matos associé et non pas son numero d'inventaire !!! (mauvais raccourci)
  62 + => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !!
63 63  
64 64 - Amélioration page /pages/acls
65 65  
... ... @@ -104,6 +104,11 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi
104 104  
105 105 -----------------------------------------------------------------------------------------------------------
106 106  
  107 +29/06/2020 v3.7.9.50 (EP)
  108 + - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED)
  109 + - bugfix (en cours) des actions documents/admission et documents/sortie qui ne marchent plus car on ne leur passe pas un id mais un nom de doc...
  110 + - Nombreuses refactorisations dans les tests
  111 +
107 112 26/06/2020 v3.7.9.48-49 (EP)
108 113 - TEST3 : Ajout d'un 3ème (et DERNIER) gros test générique des vues index et view de Materiels (/materiels/index et /view) qui teste le CONTENU des vues pour TOUS les materiels de la BD de test (fixture), aussi bien dans la vue index globale que dans CHAQUE vue détaillée de chaque matériel (et surtout en vérifiant aussi la liste des entités associées (suivis,emprunts,documents).
109 114 - bugfix autorisations d'affichage des boutons d'action sur documents dans materiels/view/
... ...
src/Controller/DocumentsController.php
... ... @@ -58,9 +58,11 @@ class DocumentsController extends AppController
58 58 $this->setAuthorizationsForAction('admission', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]);
59 59 // Action 'admissionPdf'
60 60 $this->setAuthorizationsForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]);
  61 + //$this->setAuthorizationsForAction('admissionPdf', 0);
61 62 // Action 'sortie'
62 63 $this->setAuthorizationsForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]);
63 64 $this->setAuthorizationsForAction('sortiePdf', 'sortie', ['user'=>-1, 'resp'=>-1]);
  65 + $this->setAuthorizationsForAction('sortiePdf', 0);
64 66  
65 67 } // setAuthorizations
66 68  
... ... @@ -90,7 +92,7 @@ class DocumentsController extends AppController
90 92 return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID); // $user, $userCname
91 93 */
92 94 $related_matos_id = null;
93   - if (in_array($action,['add','admission','sortie'])) {
  95 + if (in_array($action,['add','admission','admissionPdf','fiche','fichePdf','sortie','sortiePdf'])) {
94 96 // Aucune de ces actions n'est autorisée sans préciser (à l'avance, dans l'url) le matériel concerné
95 97 // => access denied
96 98 if (!$id) return false;
... ... @@ -99,7 +101,7 @@ class DocumentsController extends AppController
99 101 $id=null;
100 102 }
101 103  
102   - return $this->isAuthorizedAction($action, $id, $related_matos_id); // $user, $userCname
  104 + return $this->isAuthorizedActionForCurrentUser($action, $id, $related_matos_id); // $user, $userCname
103 105  
104 106 // LA SUITE EST A VIRER
105 107  
... ... @@ -569,7 +571,8 @@ class DocumentsController extends AppController
569 571 }
570 572  
571 573 //public function sortiePdf($filename) {
572   - public function sortiePdf() {
  574 + //public function sortiePdf() {
  575 + public function sortiePdf($matos_id) {
573 576 $this->viewBuilder()
574 577 ->className('Dompdf.Pdf')
575 578 ->layout('Dompdf.default')
... ... @@ -588,28 +591,35 @@ class DocumentsController extends AppController
588 591 */
589 592 ]]);
590 593 }
591   - public function sortie($labNumber)
592   - {
  594 + //public function sortie($labNumber)
  595 + public function sortie($matos_id) {
593 596 $this->set('fpdf', new FPDF('P', 'mm', 'A4'));
594 597 //$this->set('fpdf', new FPDF());
595 598 //$this->set('fpdf', new TCPDF('P', 'mm', 'A4'));
596 599 }
597 600  
598 601  
599   - public function admission($labNumber, $pdfEngine="fpdf")
  602 + //public function admission($labNumber, $pdfEngine="fpdf")
  603 + public function admission($matos_id, $pdfEngine="fpdf")
600 604 {
  605 + //debug($matos_id);
601 606 // only for FPDF
602 607 if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4'));
603 608 //$this->set('fpdf', new TCPDF('P', 'mm', 'A4'));
604 609  
605 610 // Find the related materiel
606   - $materiel = TableRegistry::get('Materiels')->find('all', [
  611 + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [
  612 + 'contain' => ['Fournisseurs', 'Organismes']
  613 + ]);
  614 + /*
  615 + //$materiel = TableRegistry::get('Materiels')->find('all', [
  616 + $materiel = TableRegistry::getTableLocator()->get('Materiels')->find('all', [
607 617 'conditions' => [
608 618 'numero_laboratoire' => $labNumber
609 619 ],
610 620 'contain' => ['Fournisseurs', 'Organismes']
611 621 ])->first();
612   - // End find
  622 + */
613 623  
614 624 // Get the administration user name
615 625 $userName = $this->LdapAuth->user('username');
... ... @@ -649,8 +659,10 @@ class DocumentsController extends AppController
649 659 $this->set('data', $TDoc);
650 660 } // admission()
651 661  
652   - public function admissionPdf($labNumber) {
653   - $this->admission($labNumber, "dompdf");
  662 + //public function admissionPdf($labNumber) {
  663 + public function admissionPdf($matos_id) {
  664 + //$this->admission($labNumber, "dompdf");
  665 + $this->admission($matos_id, "dompdf");
654 666 $this->viewBuilder()
655 667 ->className('Dompdf.Pdf')
656 668 ->layout('Dompdf.default')
... ... @@ -671,8 +683,10 @@ class DocumentsController extends AppController
671 683 }
672 684  
673 685  
674   - public function ficheMaterielPdf($labNumber) {
675   - $this->ficheMateriel($labNumber, "dompdf");
  686 + //public function ficheMaterielPdf($labNumber) {
  687 + public function ficheMaterielPdf($matos_id) {
  688 + //$this->ficheMateriel($labNumber, "dompdf");
  689 + $this->ficheMateriel($matos_id, "dompdf");
676 690  
677 691 $this->viewBuilder()
678 692 ->className('Dompdf.Pdf')
... ... @@ -694,10 +708,14 @@ class DocumentsController extends AppController
694 708 }
695 709  
696 710 //public function ficheMateriel($labNumber)
697   - public function ficheMateriel($labNumber, $pdfEngine="fpdf")
  711 + //public function ficheMateriel($labNumber, $pdfEngine="fpdf")
  712 + public function ficheMateriel($matos_id, $pdfEngine="fpdf")
698 713 {
699 714  
700   - // Find the concerned materiel
  715 + // Find the related materiel
  716 + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [
  717 + 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes']
  718 + ]);
701 719 /*
702 720 $materiel = TableRegistry::get('Materiels')->find('all', [
703 721 'conditions' => [
... ... @@ -705,6 +723,7 @@ class DocumentsController extends AppController
705 723 ]
706 724 ])->first();
707 725 */
  726 + /*
708 727 $materiel = TableRegistry::get('Materiels')->find('all', [
709 728 'conditions' => [
710 729 'numero_laboratoire' => $labNumber
... ... @@ -712,7 +731,7 @@ class DocumentsController extends AppController
712 731 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes']
713 732 ]
714 733 )->first();
715   - // End find
  734 + */
716 735  
717 736 /*
718 737 if ($materiel->sur_categorie_id !== null)
... ...
src/Template/Materiels/view.ctp
... ... @@ -348,34 +348,43 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN
348 348 if ($PDF_ENGINE == "FPDF") {
349 349 // FPDF
350 350 $action = 'admission';
351   - $data = $entity->numero_laboratoire;
  351 + ///$data = $entity->numero_laboratoire;
  352 + $id = $entity->id;
352 353 }
353 354 else {
354 355 // DOMPDF
355 356 $action = 'admission_pdf';
356   - $data = $entity->numero_laboratoire . ".pdf";
  357 + // Il faut ajouter '.pdf' à la suite de l'argument pour que le template
  358 + // soit cherché dans Documents/pdf/ et non pas Documents/ !!!
  359 + ///$data = $entity->numero_laboratoire . ".pdf";
  360 + $id = $entity->id . '.pdf';
357 361 }
358 362 // if (($entity->status == 'VALIDATED') || ($entity->status == 'CREATED')) {
359   - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission");
  363 + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission");
  364 + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $id, [], "Voir le document d'admission");
360 365 //}
361 366 }
362 367 // doc sortie
363   - if ($CAN_EDIT_DOC_SORTIE) {
  368 + if (true) {
  369 + //if ($CAN_EDIT_DOC_SORTIE) {
364 370  
365 371 // Doc sortie (admin only)
366 372 //else if ($IS_ARCHIVED || $IS_TOBEARCHIVED) {
367 373 if ($PDF_ENGINE == "FPDF") {
368 374 // FPDF
369 375 $action = 'sortie';
370   - $data = $entity->numero_laboratoire;
  376 + $id = $entity->id;
  377 + //$data = $entity->numero_laboratoire;
371 378 }
372 379 else {
373 380 // DOMPDF
374 381 $action = 'sortie_pdf';
375   - $data = $entity->numero_laboratoire . ".pdf";
  382 + $id = $entity->id . '.pdf';
  383 + //$data = $entity->numero_laboratoire . ".pdf";
376 384 }
377 385 // else if (($entity->status == 'ARCHIVED') || ($entity->status == 'TOBEARCHIVED')) {
378   - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie");
  386 + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $id, [], "Voir le document de sortie");
  387 + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie");
379 388 //}
380 389  
381 390 } // Doc sortie
... ... @@ -488,14 +497,17 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN
488 497 if ($PDF_ENGINE == "FPDF") {
489 498 // FPDF
490 499 $action = 'ficheMateriel';
491   - $data = $entity->numero_laboratoire;
  500 + $id = $entity->id;
  501 + //$data = $entity->numero_laboratoire;
492 502 }
493 503 else {
494 504 // DOMPDF
495 505 $action = 'fiche_materiel_pdf';
496   - $data = $entity->numero_laboratoire.'.pdf';
  506 + $id = $entity->id . '.pdf';
  507 + //$data = $entity->numero_laboratoire.'.pdf';
497 508 }
498   - $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [],
  509 + //$echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [],
  510 + $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $id, [],
499 511 "Voir la fiche du materiel"
500 512 );
501 513  
... ...
tests/TestCase/Controller/General.php
... ... @@ -721,6 +721,9 @@ class General extends TestCase {
721 721  
722 722  
723 723 /**
  724 + *
  725 + * (EP 20200620)
  726 + *
724 727 * Test (automatique) de (presque) TOUTES les actions d'un controleur
725 728 *
726 729 * Appelé par chaque test de controleur en passant en paramètre $entities_name (et le reste par DataProvider)
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -1909,6 +1909,8 @@ class MaterielsControllerTest extends General {
1909 1909 */
1910 1910  
1911 1911 /**
  1912 + * (EP 20200625)
  1913 + *
1912 1914 * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S)
1913 1915 * ET tous les materiels de la BD de test (fixture)
1914 1916 *
... ... @@ -1992,6 +1994,8 @@ class MaterielsControllerTest extends General {
1992 1994  
1993 1995  
1994 1996 /**
  1997 + * (EP 20200625)
  1998 + *
1995 1999 * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S)
1996 2000 * ET avec tous les statuts de matériel (C,V,T,A)
1997 2001 * (avec un seul matériel de test qui est modifié à volonté)
... ... @@ -2358,17 +2362,8 @@ class MaterielsControllerTest extends General {
2358 2362 $this->_testAuthorizationsForAllControllerActions($action, $role_short, $role_long);
2359 2363 }
2360 2364  
2361   -
2362 2365  
2363   -
2364   - /**
2365   - * @dataProvider dataProviderRoles4
2366   - */
2367   - public function OFF_testActionDeleteMateriel($role) {
2368   - $this->_testActionDeleteEntity($role);
2369   - }
2370   -
2371   -
  2366 + // (EP 20200629)
2372 2367 private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) {
2373 2368 $expected_flash_message = 'Le matériel a bien été ';
2374 2369 switch($action) {
... ... @@ -2420,6 +2415,7 @@ class MaterielsControllerTest extends General {
2420 2415 }
2421 2416 }
2422 2417  
  2418 + // (EP 20200629)
2423 2419 private function _doActionAndCheckResult($action, $id=null, $SUCCESS=true, $data=[], $controller=null) {
2424 2420 $action_link = Inflector::dasherize($action); // statusValidated => status-validated
2425 2421 //$this->post("/materiels/$action_link/$id");
... ... @@ -2435,11 +2431,13 @@ class MaterielsControllerTest extends General {
2435 2431 $this->_assertFlashMessageIsAsExpectedForAction($action, $SUCCESS);
2436 2432 }
2437 2433  
  2434 + // (EP 20200629)
2438 2435 private function _checkMaterielStatusChangedTo($id,$new_status) {
2439 2436 $m = $this->Materiels->get($id);
2440 2437 $this->assertSame($m->status, $new_status);
2441 2438 }
2442 2439  
  2440 + // (EP 20200629)
2443 2441 private function _testMaterielCannotBeModifiedAnymoreExceptIfDevalidated($id) {
2444 2442  
2445 2443 // On sauve le statut courant
... ... @@ -2483,12 +2481,16 @@ class MaterielsControllerTest extends General {
2483 2481 }
2484 2482  
2485 2483 /**
  2484 + * (EP 20200629)
  2485 + *
2486 2486 * Test du cycle de vie complet d'un matériel
2487 2487 *
2488 2488 * On teste les états-transitions d'un matériel, le passage progressif d'un état à un autre :
2489 2489 * CREATED => VALIDATED => TBA => ARCHIVED
2490 2490 * (on teste aussi toutes les actions qui sont possibles ou pas à chaque état)
2491 2491 *
  2492 + * Ce test vérifie le diagramme UML etats-transitions webroot/doc/diagrams/materiel_state_diagram.txt
  2493 + *
2492 2494 */
2493 2495 public function testMaterielLifeCycle() {
2494 2496  
... ... @@ -2597,4 +2599,17 @@ class MaterielsControllerTest extends General {
2597 2599  
2598 2600  
2599 2601  
  2602 +
  2603 +
  2604 + /**
  2605 + * @dataProvider dataProviderRoles4
  2606 + */
  2607 + public function OFF_testActionDeleteMateriel($role) {
  2608 + $this->_testActionDeleteEntity($role);
  2609 + }
  2610 +
  2611 +
  2612 +
  2613 +
  2614 +
2600 2615 } // class MaterielsControllerTest
2601 2616 \ No newline at end of file
... ...