From 08573950cefbd084951e870d7be36ef2a7940d8c Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Tue, 30 Jun 2020 13:18:55 +0200 Subject: [PATCH] - Bugfix et refactor des actions documents /admission, /sortie, /fiche --- README.md | 19 ++++++++++++++----- src/Controller/AppController.php | 27 +++++++++++++++++++-------- src/Controller/DocumentsController.php | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------- src/Controller/EmpruntsController.php | 15 +++++++++++---- src/Controller/MaterielsController.php | 6 ++++-- src/Controller/SuivisController.php | 18 +++++++++++++----- src/Template/Materiels/view.ctp | 4 ++-- tests/TestCase/Controller/MaterielsControllerTest.php | 23 +++++++++++++++++++---- 8 files changed, 219 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 4e02716..4fd3922 100644 --- a/README.md +++ b/README.md @@ -53,14 +53,18 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 29/06/2020 -Version: 3.7.9.51 +Date: 30/06/2020 +Version: 3.7.9.52 Author: EP Commentaire: - - bugfix et réécriture des actions documents/admission, sortie, fiche !!! (pas d'id) + - Bugfix et refactorisation des actions documents /admission, /sortie, /ficheMateriel => 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é !! - + => ca permet de tester les conditions d'accès de ces actions en fonction du matériel concerné !! + - Bugfix test de ces mêmes actions (mal testées avant) + - L'ajout (/add) d'un suivi, emprunt, ou doc doit toujours se faire avec l'id de l'entité parente associée (en général materiel id) + => (/add/id) sinon refus + - ... + - Amélioration page /pages/acls - Tests génériques automatiques pour (presque) toutes les actions de (presque) tous les controleurs principaux (Materiels, Suivis, Emprunts, Users) mais aussi du controleur "quelconque" SurCategories (pour vérifier que ça marche aussi !!!) @@ -104,6 +108,11 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi ----------------------------------------------------------------------------------------------------------- +29/06/2020 v3.7.9.51 (EP) + - 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é !! + 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... diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index 205c423..8a62a94 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -371,10 +371,12 @@ class AppController extends Controller // (raccourci) Reference vers le tableau $action_rules = &$this->is_authorized_action[$action]; + $S = false; //$S = $action == 'edit'; //$S = $action == 'statusTobearchived'; + //$S = $action == 'sortiePdf'; + //$S = $action == 'admissionPdf'; //$S = $this->name == 'Suivis'; - $S = false; // Initialisation de la règle générale par défaut (pour cette action) // Si la règle par défaut est un alias vers une autre action (ex: 'add'), on remplace l'alias par sa valeur (la règle associée à l'action pointée par l'alias) @@ -421,7 +423,9 @@ class AppController extends Controller in_array(0,['add','edit'])) => renvoie TRUE !!! 0 == 'add' => renvoie TRUE !!! */ - if ($default!==0 && in_array($default,['add','edit','admission'])) { + $all_actions = array_keys($this->is_authorized_action); + //if ($default!==0 && in_array($default,['add','edit','admission','sortie'])) { + if ($default!==0 && in_array($default,$all_actions)) { $action_rules['default'] = $this->is_authorized_action[$default]['default']; } // - règle pour chaque role @@ -596,16 +600,18 @@ class AppController extends Controller } // - si -1 => acccès refusé $this->d("1) Condition (complète) (desaliased) :"); $this->d($access_condition); + //debug($access_condition); exit; if ($access_condition === -1) return FALSE; if ($access_condition === 0) return TRUE; // A partir d'ici, on doit avoir un array + //if ($action=='sortiePdf') exit; if (! is_array($access_condition)) throw new \ErrorException("La condition ($access_condition) pour autoriser l'action ($action) doit être -1, 0, ou bien un tableau !"); + //if ($action=='admissionPdf') exit; // - sinon, cette condition est un tableau à 2 valeurs : [condition de statut , condition d'appartenance] // Les 2 conditions doivent être respectées : return $condition_on_status AND $condition_on_belonging $condition_on_status = $access_condition[0]; $condition_on_belonging = $access_condition[1]; // Il faut maintenant calculer chacune de ces conditions - //if ($action=='statusTobearchived') exit; /* * a) Condition de Statut @@ -1205,7 +1211,6 @@ class AppController extends Controller public function isAuthorized($user, $action=null, $id=null, $role=null) { //$action=null, $id=null, $role=null, $userCname=null) { - $this->myDebug("step 2C (general): AppController.isAuthorized()"); // $user est l'equivalent de $this->LdapAuth->user() @@ -1222,7 +1227,7 @@ class AppController extends Controller $IS_RELATED_ENTITY_ID = false; return $this->isAuthorizedAction($action, $id, $IS_RELATED_ENTITY_ID); // $user, $userCname */ - return $this->isAuthorizedAction($action, $id); // $user, $userCname + return $this->isAuthorizedActionForCurrentUser($action, $id); // $user, $userCname // LA SUITE EST A VIRER @@ -1763,7 +1768,11 @@ class AppController extends Controller * @param $IS_ADD: True = add ; False = edit * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. */ - protected function add_or_edit($IS_ADD, $id=null, $values=null, $errors=null, $entity_name=null, array $associated_entities=[], $with_parent=false) { + //protected function add_or_edit($IS_ADD, $id=null, $values=null, $errors=null, $entity_name=null, array $associated_entities=[], $with_parent=false) { + protected function add_or_edit($IS_ADD, $id=null, $errors=null, $entity_name=null, array $associated_entities=[], $with_parent=false) { + + // On refuse de creer une entité sans préciser l'id de l'entité parente associée (en général materiel id) + if ($with_parent && $id===null) return; $controller = $this->request->getParam('controller'); @@ -1818,7 +1827,8 @@ class AppController extends Controller else { $this->Flash->success(__("$entity_name a bien été $verb")); if ($with_parent) { - $parent_id = $IS_ADD ? $this->request->getParam('pass.0') : $entity->materiel_id; + //$parent_id = $IS_ADD ? $this->request->getParam('pass.0') : $entity->materiel_id; + $parent_id = $IS_ADD ? $id : $entity->materiel_id; // (EP) Redirection vers la vue parente (materiel emprunté) (depuis add ou edit) return $this->redirect([ 'controller' => 'Materiels', @@ -1861,7 +1871,8 @@ class AppController extends Controller if ($with_parent) { $parents = $this->$controller->Materiels->find('list'); //$materiel_id = $IS_EDIT ? $entity->materiel_id : $this->request->getAttribute('params')['pass'][0]; - $parent_id = $IS_EDIT ? $entity->materiel_id : $this->request->getParam('pass.0'); + //$parent_id = $IS_EDIT ? $entity->materiel_id : $this->request->getParam('pass.0'); + $parent_id = $IS_EDIT ? $entity->materiel_id : $id; // parent = materiel $parent = $this->$controller->Materiels->get($parent_id); //$matos_id = $IS_ADD ? $parent->id : $entity->materiel_id; diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 64daba7..bea9a7b 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -59,10 +59,12 @@ class DocumentsController extends AppController // Action 'admissionPdf' $this->setAuthorizationsForAction('admissionPdf', 'admission', ['user'=>-1, 'resp'=>-1]); //$this->setAuthorizationsForAction('admissionPdf', 0); + // Action 'sortie' + //$this->setAuthorizationsForAction('sortie', ['VALIDATED',0], ['user'=>-1, 'resp'=>-1]); $this->setAuthorizationsForAction('sortie', ['ARCHIVED',0], ['user'=>-1, 'resp'=>-1]); $this->setAuthorizationsForAction('sortiePdf', 'sortie', ['user'=>-1, 'resp'=>-1]); - $this->setAuthorizationsForAction('sortiePdf', 0); + //$this->setAuthorizationsForAction('sortiePdf', 0); } // setAuthorizations @@ -93,15 +95,16 @@ class DocumentsController extends AppController */ $related_matos_id = null; 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é + // Aucune de ces actions n'est autorisée sans préciser (à l'avance, dans l'url) le matériel (ou suivi) concerné // => access denied if (!$id) return false; // L'id est celui du matos associé - $related_matos_id = $id; + $related_entity_id = $id; // matos ou suivi id $id=null; } + //debug("action=$action, id=$id, related=$related_matos_id"); exit; - return $this->isAuthorizedActionForCurrentUser($action, $id, $related_matos_id); // $user, $userCname + return $this->isAuthorizedActionForCurrentUser($action, $id, $related_entity_id); // $user, $userCname // LA SUITE EST A VIRER @@ -246,6 +249,7 @@ class DocumentsController extends AppController */ public function index() { + debug("lala");exit; $this->paginate = [ 'contain' => [ 'TypeDocuments' @@ -321,8 +325,12 @@ class DocumentsController extends AppController */ // (EP 20200323) NEW add() action //public function add() - public function add($valeurs = null, $erreurs = null) { - $this->add_or_edit(TRUE, null, $valeurs, $erreurs); + //public function add($valeurs = null, $erreurs = null) { + public function add($id=null, $erreurs = null) { + // On refuse de créer cette entité (document) sans préciser l'id du parent associé (materiel ou suivi) + if ($id===null) return; + $this->add_or_edit(TRUE, $id, $erreurs); + //$this->add_or_edit(TRUE, null, $valeurs, $erreurs); } /** @@ -343,10 +351,14 @@ class DocumentsController extends AppController * @param $IS_ADD: True = add ; False = edit * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. */ - protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + //protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + protected function add_or_edit($IS_ADD, $id=null, $erreurs=null, // uniquement à cause de parent::add_or_edit() : $entity_name=null, array $associated_entities=[], $with_parent=false) { $this->myDebug("step 3: DocumentsController.add_or_edit()"); + + // On refuse de creer une entité sans préciser l'id de l'entité parente associée (suivi ou materiel) + if ($id===null) return; $document = $IS_ADD ? $this->Documents->newEntity() : $this->Documents->get($id, ['contain' => []]); @@ -467,7 +479,8 @@ class DocumentsController extends AppController // ADD if ($IS_ADD) { $PARENT_IS_MATOS = (isset($this->request->getAttribute('params')['pass'][1]) && $this->request->getAttribute('params')['pass'][1] == 'mat'); - $parent_id = $this->request->getAttribute('params')['pass'][0]; + //$parent_id = $this->request->getAttribute('params')['pass'][0]; + $parent_id = $id; } // EDIT else { @@ -569,10 +582,88 @@ class DocumentsController extends AppController $id ]); } + + + private function _setViewForDomPdf($filename) { + $this->viewBuilder() + ->className('Dompdf.Pdf') + ->layout('Dompdf.default') + ->options(['config' => [ + //'filename' => $filename, + //'filename' => "admission.pdf", + 'filename' => "$filename.pdf", + //'render' => 'browser', + 'render' => 'download', + 'size' => 'A4', + 'orientation' => 'portrait', //'landscape' + /* + 'paginate' => [ + 'x' => 550, + 'y' => 5, + ], + */ + ]]); + } + + private function _setDataForPdfDoc($matos_id, $pdfEngine='fpdf', $contain=[]) { + if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); + + //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); + + // Find the related materiel + $contain = array_merge(['Fournisseurs', 'Organismes'], $contain); + $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ + 'contain' => $contain + ]); + // Get the administration user name + $userName = $this->LdapAuth->user('username'); + $numeroLab = $materiel->numero_laboratoire; + $dateAcquisition = $materiel->date_acquisition; + $dateAcquisition = $dateAcquisition; + $numeroCommande = $materiel->numero_commande; + $designation = $materiel->designation; + /* + if ($materiel->organisme_id !== null && ! empty($materiel->organisme_id)) + $organisme = TableRegistry::get('Organismes')->find('all') + ->where([ + 'id =' => $materiel->organisme_id + ]) + ->first()->nom; + else + $organisme = ""; + */ + $numeroOrganisme = $materiel->numero_inventaire_organisme; + $eotp = $materiel->eotp; + $prix = $materiel->prix_ht; + + // Build the data array + $TDoc = [ + 'organisme' => $materiel->organisme ? $materiel->organisme->nom : "", + 'numlab' => $numeroLab, + 'designation' => $designation, + 'dateAcquis' => $dateAcquisition, + 'numCde' => $numeroCommande, + 'fournisseur' => $materiel->fournisseur ? $materiel->fournisseur->nom : "", + 'eotp' => $eotp, + 'prix' => $prix, + 'numOrg' => $numeroOrganisme + ]; + + // Set the data for the document (accessible par $data dans la vue Template/Documents/admission.ctp) + $this->set('data', $TDoc); + //$this->set(compact('materiel', 'groupesThematique', 'groupesMetier', 'site', 'nom_groupe_metier', 'nom_groupe_thematique')); + $this->set(compact('materiel')); + + return $materiel; + } + //public function sortiePdf($filename) { //public function sortiePdf() { public function sortiePdf($matos_id) { + $this->sortie($matos_id, "dompdf"); + $this->_setViewForDomPdf('doc-sortie'); + /* $this->viewBuilder() ->className('Dompdf.Pdf') ->layout('Dompdf.default') @@ -583,26 +674,30 @@ class DocumentsController extends AppController 'render' => 'download', 'size' => 'A4', 'orientation' => 'portrait', //'landscape' - /* + /S 'paginate' => [ 'x' => 550, 'y' => 5, ], - */ + S/ ]]); + */ } + //public function sortie($labNumber) - public function sortie($matos_id) { - $this->set('fpdf', new FPDF('P', 'mm', 'A4')); + public function sortie($matos_id, $pdfEngine='fpdf') { + $this->_setDataForPdfDoc($matos_id, $pdfEngine); + ////$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($matos_id, $pdfEngine="fpdf") - { - //debug($matos_id); + public function admission($matos_id, $pdfEngine='fpdf') { + $this->_setDataForPdfDoc($matos_id, $pdfEngine); + /* // only for FPDF if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); //$this->set('fpdf', new TCPDF('P', 'mm', 'A4')); @@ -611,6 +706,7 @@ class DocumentsController extends AppController $materiel = TableRegistry::getTableLocator()->get('Materiels')->get($matos_id, [ 'contain' => ['Fournisseurs', 'Organismes'] ]); + */ /* //$materiel = TableRegistry::get('Materiels')->find('all', [ $materiel = TableRegistry::getTableLocator()->get('Materiels')->find('all', [ @@ -621,6 +717,7 @@ class DocumentsController extends AppController ])->first(); */ + /* // Get the administration user name $userName = $this->LdapAuth->user('username'); $numeroLab = $materiel->numero_laboratoire; @@ -628,7 +725,7 @@ class DocumentsController extends AppController $dateAcquisition = $dateAcquisition; $numeroCommande = $materiel->numero_commande; $designation = $materiel->designation; - /* + /S if ($materiel->organisme_id !== null && ! empty($materiel->organisme_id)) $organisme = TableRegistry::get('Organismes')->find('all') ->where([ @@ -637,7 +734,7 @@ class DocumentsController extends AppController ->first()->nom; else $organisme = ""; - */ + S/ $numeroOrganisme = $materiel->numero_inventaire_organisme; $eotp = $materiel->eotp; $prix = $materiel->prix_ht; @@ -657,12 +754,15 @@ class DocumentsController extends AppController // set the data for the document (accessible par $data dans la vue Template/Documents/admission.ctp) $this->set('data', $TDoc); + */ } // admission() //public function admissionPdf($labNumber) { public function admissionPdf($matos_id) { //$this->admission($labNumber, "dompdf"); $this->admission($matos_id, "dompdf"); + $this->_setViewForDomPdf('admission'); + /* $this->viewBuilder() ->className('Dompdf.Pdf') ->layout('Dompdf.default') @@ -673,13 +773,14 @@ class DocumentsController extends AppController 'render' => 'download', 'size' => 'A4', 'orientation' => 'portrait', //'landscape' - /* + /S 'paginate' => [ 'x' => 550, 'y' => 5, ], - */ + S/ ]]); + */ } @@ -687,7 +788,8 @@ class DocumentsController extends AppController public function ficheMaterielPdf($matos_id) { //$this->ficheMateriel($labNumber, "dompdf"); $this->ficheMateriel($matos_id, "dompdf"); - + $this->_setViewForDomPdf('fiche-materiel'); + /* $this->viewBuilder() ->className('Dompdf.Pdf') ->layout('Dompdf.default') @@ -698,24 +800,32 @@ class DocumentsController extends AppController 'render' => 'download', 'size' => 'A4', 'orientation' => 'portrait', //'landscape' - /* + /S 'paginate' => [ 'x' => 550, 'y' => 5, ], - */ + S/ ]]); + */ } //public function ficheMateriel($labNumber) //public function ficheMateriel($labNumber, $pdfEngine="fpdf") - public function ficheMateriel($matos_id, $pdfEngine="fpdf") - { + public function ficheMateriel($matos_id, $pdfEngine="fpdf") { + $materiel = $this->_setDataForPdfDoc($matos_id, $pdfEngine, [ + 'SurCategories', 'Categories', 'SousCategories', + //'SurCategories', 'Categories', 'SousCategories', 'Fournisseurs', 'Organismes' + ]); + /* + // only for FPDF + if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); // 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' => [ @@ -803,10 +913,9 @@ class DocumentsController extends AppController // set the data materiel for the document (accessible par $materiel dans le document) //$this->set(compact('materiel', 'surCategorie', 'categorie', 'sousCategorie', 'groupesThematique', 'groupesMetier', 'organisme', 'site', 'nom_groupe_metier', 'nom_groupe_thematique')); - $this->set(compact('materiel', 'groupesThematique', 'groupesMetier', 'site', 'nom_groupe_metier', 'nom_groupe_thematique')); - - // only for FPDF - if ($pdfEngine == "fpdf") $this->set('fpdf', new FPDF('P', 'mm', 'A4')); + //$this->set(compact('materiel', 'groupesThematique', 'groupesMetier', 'site', 'nom_groupe_metier', 'nom_groupe_thematique')); + $this->set(compact('groupesThematique', 'groupesMetier', 'site', 'nom_groupe_metier', 'nom_groupe_thematique')); + } public function ficheMetrologique($id) diff --git a/src/Controller/EmpruntsController.php b/src/Controller/EmpruntsController.php index 0bb340e..2035327 100755 --- a/src/Controller/EmpruntsController.php +++ b/src/Controller/EmpruntsController.php @@ -257,7 +257,8 @@ class EmpruntsController extends AppController * @param $IS_ADD: True = add ; False = edit * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. */ - protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + //protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + protected function add_or_edit($IS_ADD, $id=null, $erreurs=null, // uniquement à cause de parent::add_or_edit() : $entity_name=null, array $associated_entities=[], $with_parent=false) { @@ -272,7 +273,9 @@ class EmpruntsController extends AppController parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "L'emprunt", [], $with_parent=true); if ($this->request->is(['patch','post','put'])) return; */ - $redirect = parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "L'emprunt", [], $with_parent=true); + //$redirect = parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "L'emprunt", [], $with_parent=true); + $redirect = parent::add_or_edit($IS_ADD, $id, $erreurs, "L'emprunt", [], $with_parent=true); + if ($redirect) return($redirect); $entity = $this->entityBuilt; $materiel = $this->parent; @@ -439,8 +442,12 @@ class EmpruntsController extends AppController */ // (EP 20200326) NEW add() action //public function add() - public function add($valeurs = null, $erreurs = null) { - $this->add_or_edit(TRUE, null, $valeurs, $erreurs); + //public function add($valeurs = null, $erreurs = null) { + public function add($id=null, $erreurs = null) { + // On refuse de créer cette entité (emprunt) sans préciser l'id du parent materiel associé + if ($id===null) return; + $this->add_or_edit(TRUE, $id, $erreurs); + //$this->add_or_edit(TRUE, null, $valeurs, $erreurs); } // OLD add() action private function OLD_add() { diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 9301344..d939816 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1192,7 +1192,8 @@ class MaterielsController extends AppController { * @param $IS_ADD: True = add ; False = edit * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. */ - protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + //protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + protected function add_or_edit($IS_ADD, $id=null, $erreurs=null, // uniquement à cause de parent::add_or_edit() : $entity_name=null, array $associated_entities=[], $with_parent=false) { @@ -1659,7 +1660,8 @@ class MaterielsController extends AppController { * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise. */ public function add($valeurs = null, $erreurs = null) { - $this->add_or_edit(TRUE, null, $valeurs, $erreurs); + //$this->add_or_edit(TRUE, null, $valeurs, $erreurs); + $this->add_or_edit(TRUE, $valeurs, $erreurs); } diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index 57e6d42..d215ade 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -414,16 +414,18 @@ class SuivisController extends AppController * @param $IS_ADD: True = add ; False = edit * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. */ - protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + //protected function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null, + protected function add_or_edit($IS_ADD, $id=null, $erreurs=null, // uniquement à cause de parent::add_or_edit() : $entity_name=null, array $associated_entities=[], $with_parent=false) { - + // On appelle la partie commune de cette méthode, dans AppController /* parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "Le suivi", ['TypeSuivis'], $with_parent=true); if ($this->request->is(['patch','post','put'])) return; */ - $redirect = parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "Le suivi", ['TypeSuivis'], $with_parent=true); + //$redirect = parent::add_or_edit($IS_ADD, $id, $valeurs, $erreurs, "Le suivi", ['TypeSuivis'], $with_parent=true); + $redirect = parent::add_or_edit($IS_ADD, $id, $erreurs, "Le suivi", ['TypeSuivis'], $with_parent=true); if ($redirect) return($redirect); // Ces 3 variables ont été crées par l'appel ci-dessus $suivi = $entity = $this->entityBuilt; @@ -704,8 +706,14 @@ class SuivisController extends AppController */ // (EP 20200325) NEW add() action //public function add() - public function add($valeurs = null, $erreurs = null) { - $this->add_or_edit(TRUE, null, $valeurs, $erreurs); + //public function add($valeurs = null, $erreurs = null) { + public function add($id=null, $erreurs = null) { + // On refuse de créer cette entité (suivi) sans préciser l'id du parent materiel associé + if ($id===null) return; + //throw new \ErrorException('coucou'); + //debug($valeurs); debug($erreurs); exit; + //$this->add_or_edit(TRUE, null, $valeurs, $erreurs); + $this->add_or_edit(TRUE, $id, $erreurs); } // OLD add() action private function OLD_add() diff --git a/src/Template/Materiels/view.ctp b/src/Template/Materiels/view.ctp index 2b893a9..f3be65f 100755 --- a/src/Template/Materiels/view.ctp +++ b/src/Template/Materiels/view.ctp @@ -365,8 +365,8 @@ $CAN_PRINT_LABEL = $IS_VALIDATED && $configuration->hasPrinter && $USER_IS_ADMIN //} } // doc sortie - if (true) { - //if ($CAN_EDIT_DOC_SORTIE) { + //if (true) { + if ($CAN_EDIT_DOC_SORTIE) { // Doc sortie (admin only) //else if ($IS_ARCHIVED || $IS_TOBEARCHIVED) { diff --git a/tests/TestCase/Controller/MaterielsControllerTest.php b/tests/TestCase/Controller/MaterielsControllerTest.php index adf883b..0242451 100755 --- a/tests/TestCase/Controller/MaterielsControllerTest.php +++ b/tests/TestCase/Controller/MaterielsControllerTest.php @@ -2246,7 +2246,12 @@ class MaterielsControllerTest extends General { else $action_button_should_be_present = $controller->isAuthorizedActionForCurrentUser($action_name, null, $id, $user); //$this->_checkViewPageContainsThisActionButton($action_name, $action_label, $id, $action_button_should_be_present); - + /* + if ($action_name=='sortie') { + debug($action_button_should_be_present); + exit; + } + */ if ($action_button_should_be_present) $this->assertResponseContains($action_label, "La vue détaillée du matériel (/materiels/view/$id) ne contient pas de bouton '$action_label' comme attendu !"); else @@ -2517,7 +2522,13 @@ class MaterielsControllerTest extends General { $this->_checkMaterielStatusChangedTo($id,$new_status); //$this->assertSame($m->status, $new_status); // On vérifie qu'on NE peut PAS sortir le doc d'admission (DocumentsController) - $this->_doActionAndCheckResult('admission', $id, $SUCCESS=false, [], 'documents'); + /* + //$this->_doActionAndCheckResult('admission', $id, $SUCCESS=false, [], 'documents'); + //$this->post("documents/admission_pdf/$id.pdf"); + $this->post("documents/admission/$id"); + $this->assertFileResponse('admission.pdf'); + */ + /* * 2) Validation => VALIDATED @@ -2578,8 +2589,12 @@ class MaterielsControllerTest extends General { //$this->_checkMaterielStatusChangedTo($id,'ARCHIVED'); //TODO: // On vérifie qu'on peut afficher le doc de sortie (DocumentsController) - ////$this->_doActionAndCheckResult('sortie', $id, $SUCCESS=true, [], 'documents'); - + /* + //$this->_doActionAndCheckResult('sortie', $id, $SUCCESS=true, [], 'documents'); + //$this->post("documents/sortiePdf/$id.pdf"); + $this->post("documents/sortie/$id"); + $this->assertFileResponse('doc-sortie.pdf'); + */ /* * 5) MORT, suppression définitive de la BD => n'existe plus -- libgit2 0.21.2