diff --git a/README.md b/README.md index 9e419c7..4e02716 100644 --- a/README.md +++ b/README.md @@ -54,12 +54,12 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE Date: 29/06/2020 -Version: 3.7.9.50 +Version: 3.7.9.51 Author: EP -Commentaire: - - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED) - - 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... - - Nombreuses refactorisations dans les tests +Commentaire: + - bugfix et réécriture des actions documents/admission, sortie, fiche !!! (pas d'id) + => 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é !! - Amélioration page /pages/acls @@ -104,6 +104,11 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi ----------------------------------------------------------------------------------------------------------- +29/06/2020 v3.7.9.50 (EP) + - Nouveau (et dernier dernier) super test ajouté : test du cycle de vie complet d'un matériel (CREATED => ... => ARCHIVED) + - 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... + - Nombreuses refactorisations dans les tests + 26/06/2020 v3.7.9.48-49 (EP) - 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). - bugfix autorisations d'affichage des boutons d'action sur documents dans materiels/view/ diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 29dc40f..64daba7 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -58,9 +58,11 @@ class DocumentsController extends AppController $this->setAuthorizationsForAction('admission', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]); // Action 'admissionPdf' $this->setAuthorizationsForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]); + //$this->setAuthorizationsForAction('admissionPdf', 0); // Action 'sortie' $this->setAuthorizationsForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]); $this->setAuthorizationsForAction('sortiePdf', 'sortie', ['user'=>-1, 'resp'=>-1]); + $this->setAuthorizationsForAction('sortiePdf', 0); } // setAuthorizations @@ -90,7 +92,7 @@ class DocumentsController extends AppController return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID); // $user, $userCname */ $related_matos_id = null; - if (in_array($action,['add','admission','sortie'])) { + if (in_array($action,['add','admission','admissionPdf','fiche','fichePdf','sortie','sortiePdf'])) { // Aucune de ces actions n'est autorisée sans préciser (à l'avance, dans l'url) le matériel concerné // => access denied if (!$id) return false; @@ -99,7 +101,7 @@ class DocumentsController extends AppController $id=null; } - return $this->isAuthorizedAction($action, $id, $related_matos_id); // $user, $userCname + return $this->isAuthorizedActionForCurrentUser($action, $id, $related_matos_id); // $user, $userCname // LA SUITE EST A VIRER @@ -569,7 +571,8 @@ class DocumentsController extends AppController } //public function sortiePdf($filename) { - public function sortiePdf() { + //public function sortiePdf() { + public function sortiePdf($matos_id) { $this->viewBuilder() ->className('Dompdf.Pdf') ->layout('Dompdf.default') @@ -588,28 +591,35 @@ class DocumentsController extends AppController */ ]]); } - public function sortie($labNumber) - { + //public function sortie($labNumber) + public function sortie($matos_id) { $this->set('fpdf', new FPDF('P', 'mm', 'A4')); //$this->set('fpdf', new FPDF()); //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); } - public function admission($labNumber, $pdfEngine="fpdf") + //public function admission($labNumber, $pdfEngine="fpdf") + public function admission($matos_id, $pdfEngine="fpdf") { + //debug($matos_id); // only for FPDF if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); // Find the related materiel - $materiel = TableRegistry::get('Materiels')->find('all', [ + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ + 'contain' => ['Fournisseurs', 'Organismes'] + ]); + /* + //$materiel = TableRegistry::get('Materiels')->find('all', [ + $materiel = TableRegistry::getTableLocator()->get('Materiels')->find('all', [ 'conditions' => [ 'numero_laboratoire' => $labNumber ], 'contain' => ['Fournisseurs', 'Organismes'] ])->first(); - // End find + */ // Get the administration user name $userName = $this->LdapAuth->user('username'); @@ -649,8 +659,10 @@ class DocumentsController extends AppController $this->set('data', $TDoc); } // admission() - public function admissionPdf($labNumber) { - $this->admission($labNumber, "dompdf"); + //public function admissionPdf($labNumber) { + public function admissionPdf($matos_id) { + //$this->admission($labNumber, "dompdf"); + $this->admission($matos_id, "dompdf"); $this->viewBuilder() ->className('Dompdf.Pdf') ->layout('Dompdf.default') @@ -671,8 +683,10 @@ class DocumentsController extends AppController } - public function ficheMaterielPdf($labNumber) { - $this->ficheMateriel($labNumber, "dompdf"); + //public function ficheMaterielPdf($labNumber) { + public function ficheMaterielPdf($matos_id) { + //$this->ficheMateriel($labNumber, "dompdf"); + $this->ficheMateriel($matos_id, "dompdf"); $this->viewBuilder() ->className('Dompdf.Pdf') @@ -694,10 +708,14 @@ class DocumentsController extends AppController } //public function ficheMateriel($labNumber) - public function ficheMateriel($labNumber, $pdfEngine="fpdf") + //public function ficheMateriel($labNumber, $pdfEngine="fpdf") + public function ficheMateriel($matos_id, $pdfEngine="fpdf") { - // Find the concerned materiel + // Find the related materiel + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ + 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes'] + ]); /* $materiel = TableRegistry::get('Materiels')->find('all', [ 'conditions' => [ @@ -705,6 +723,7 @@ class DocumentsController extends AppController ] ])->first(); */ + /* $materiel = TableRegistry::get('Materiels')->find('all', [ 'conditions' => [ 'numero_laboratoire' => $labNumber @@ -712,7 +731,7 @@ class DocumentsController extends AppController 'contain' => ['SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes'] ] )->first(); - // End find + */ /* if ($materiel->sur_categorie_id !== null) diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index ee37888..2b893a9 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -348,34 +348,43 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN if ($PDF_ENGINE == "FPDF") { // FPDF $action = 'admission'; - $data = $entity->numero_laboratoire; + ///$data = $entity->numero_laboratoire; + $id = $entity->id; } else { // DOMPDF $action = 'admission_pdf'; - $data = $entity->numero_laboratoire . ".pdf"; + // Il faut ajouter '.pdf' à la suite de l'argument pour que le template + // soit cherché dans Documents/pdf/ et non pas Documents/ !!! + ///$data = $entity->numero_laboratoire . ".pdf"; + $id = $entity->id . '.pdf'; } // if (($entity->status == 'VALIDATED') || ($entity->status == 'CREATED')) { - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission"); + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $data, [], "Voir le document d'admission"); + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. admission', 'documents', $action, $id, [], "Voir le document d'admission"); //} } // doc sortie - if ($CAN_EDIT_DOC_SORTIE) { + if (true) { + //if ($CAN_EDIT_DOC_SORTIE) { // Doc sortie (admin only) //else if ($IS_ARCHIVED || $IS_TOBEARCHIVED) { if ($PDF_ENGINE == "FPDF") { // FPDF $action = 'sortie'; - $data = $entity->numero_laboratoire; + $id = $entity->id; + //$data = $entity->numero_laboratoire; } else { // DOMPDF $action = 'sortie_pdf'; - $data = $entity->numero_laboratoire . ".pdf"; + $id = $entity->id . '.pdf'; + //$data = $entity->numero_laboratoire . ".pdf"; } // else if (($entity->status == 'ARCHIVED') || ($entity->status == 'TOBEARCHIVED')) { - $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie"); + $echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $id, [], "Voir le document de sortie"); + //$echoActionButton($this->Html, 'icon-file', $bStyle, ' Doc. sortie', 'documents', $action, $data, [], "Voir le document de sortie"); //} } // Doc sortie @@ -488,14 +497,17 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN if ($PDF_ENGINE == "FPDF") { // FPDF $action = 'ficheMateriel'; - $data = $entity->numero_laboratoire; + $id = $entity->id; + //$data = $entity->numero_laboratoire; } else { // DOMPDF $action = 'fiche_materiel_pdf'; - $data = $entity->numero_laboratoire.'.pdf'; + $id = $entity->id . '.pdf'; + //$data = $entity->numero_laboratoire.'.pdf'; } - $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [], + //$echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $data, [], + $echoActionButton($this->Html, 'icon-file', $bStyleGreen, ' Fiche PDF du matériel', 'documents', $action, $id, [], "Voir la fiche du materiel" ); diff --git a/tests/TestCase/Controller/General.php b/tests/TestCase/Controller/General.php index 2ea1b35..67ed262 100644 --- a/tests/TestCase/Controller/General.php +++ b/tests/TestCase/Controller/General.php @@ -721,6 +721,9 @@ class General extends TestCase { /** + * + * (EP 20200620) + * * Test (automatique) de (presque) TOUTES les actions d'un controleur * * Appelé par chaque test de controleur en passant en paramètre $entities_name (et le reste par DataProvider) diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index dc21d2a..adf883b 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -1909,6 +1909,8 @@ class MaterielsControllerTest extends General { */ /** + * (EP 20200625) + * * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S) * ET tous les materiels de la BD de test (fixture) * @@ -1992,6 +1994,8 @@ class MaterielsControllerTest extends General { /** + * (EP 20200625) + * * Test des vues view.ctp et index.ctp avec tous les profils (roles U,R,A,S) * ET avec tous les statuts de matériel (C,V,T,A) * (avec un seul matériel de test qui est modifié à volonté) @@ -2358,17 +2362,8 @@ class MaterielsControllerTest extends General { $this->_testAuthorizationsForAllControllerActions($action, $role_short, $role_long); } - - - /** - * @dataProvider dataProviderRoles4 - */ - public function OFF_testActionDeleteMateriel($role) { - $this->_testActionDeleteEntity($role); - } - - + // (EP 20200629) private function _assertFlashMessageIsAsExpectedForAction($action, $SUCCESS=true) { $expected_flash_message = 'Le matériel a bien été '; switch($action) { @@ -2420,6 +2415,7 @@ class MaterielsControllerTest extends General { } } + // (EP 20200629) private function _doActionAndCheckResult($action, $id=null, $SUCCESS=true, $data=[], $controller=null) { $action_link = Inflector::dasherize($action); // statusValidated => status-validated //$this->post("/materiels/$action_link/$id"); @@ -2435,11 +2431,13 @@ class MaterielsControllerTest extends General { $this->_assertFlashMessageIsAsExpectedForAction($action, $SUCCESS); } + // (EP 20200629) private function _checkMaterielStatusChangedTo($id,$new_status) { $m = $this->Materiels->get($id); $this->assertSame($m->status, $new_status); } + // (EP 20200629) private function _testMaterielCannotBeModifiedAnymoreExceptIfDevalidated($id) { // On sauve le statut courant @@ -2483,12 +2481,16 @@ class MaterielsControllerTest extends General { } /** + * (EP 20200629) + * * Test du cycle de vie complet d'un matériel * * On teste les états-transitions d'un matériel, le passage progressif d'un état à un autre : * CREATED => VALIDATED => TBA => ARCHIVED * (on teste aussi toutes les actions qui sont possibles ou pas à chaque état) * + * Ce test vérifie le diagramme UML etats-transitions webroot/doc/diagrams/materiel_state_diagram.txt + * */ public function testMaterielLifeCycle() { @@ -2597,4 +2599,17 @@ class MaterielsControllerTest extends General { + + + /** + * @dataProvider dataProviderRoles4 + */ + public function OFF_testActionDeleteMateriel($role) { + $this->_testActionDeleteEntity($role); + } + + + + + } // class MaterielsControllerTest \ No newline at end of file -- libgit2 0.21.2