diff --git a/README.md b/README.md index 67063d2..12e1c1e 100644 --- a/README.md +++ b/README.md @@ -53,14 +53,14 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 24/03/2020 -Version: 3.7.9.8 +Date: 25/03/2020 +Version: 3.7.9.9 Author: EP -Commentaire: Suivis : Amélioration et nombreux Bugfixes !!! (1) - - pb javascript si métrologie - - ajout intitulé comme titre - - vue édition : champs trop larges, champs éditables, champs inutiles... - - ... +Commentaire: Suivis : Amélioration par refactorisation (2) + Comme pour les docs attachés (même principe) : + - refactorisation des actions add() et edit() en une seule add_or_edit() (car très semblables) + - refactorisation des vues add et edit en une seule add_edit (car très semblables) + - debugging javascript en cours (car ça marchait pas très bien tout ça...) IMPORTANT : @@ -96,6 +96,13 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https ----------------------------------------------------------------------------------------------------------- +24/03/2020 Version 3.7.9.8 (EP) + Suivis : Amélioration et nombreux Bugfixes !!! (1) + - pb javascript si métrologie + - ajout intitulé comme titre + - vue édition : champs trop larges, champs éditables, champs inutiles... + - ... + 23/03/2020 Version 3.7.9.7 (EP) Amélioration de la gestion des docs attachés (3) - Enorme simplification grâce à la refactorisation des vues add et edit en une seule add_edit car elles sont très semblables diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index 69b0904..ec2b897 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -260,8 +260,6 @@ class DocumentsController extends AppController $this->myDebug("step 3: DocumentsController.add_or_edit()"); - // add - $document = $IS_ADD ? $this->Documents->newEntity() : $this->Documents->get($id, ['contain' => []]); // POST (on vient de soumettre un nouveau doc) diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index b52d666..9662493 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -22,7 +22,7 @@ class SuivisController extends AppController { // $configuration = $this->confLabinvent; /* - * $role = TableRegistry::get('Users')->find() + * $role = TableRegistry::getTableLocator()->get('Users')->find() * ->where([ * 'username' => $user[$configuration->authentificationType_ldap][0] * ]) @@ -61,12 +61,12 @@ class SuivisController extends AppController public function isRespGroup($id, $loginResponsable) { - $u = TableRegistry::get('Users')->find() + $u = TableRegistry::getTableLocator()->get('Users')->find() ->where([ 'username' => $loginResponsable ]) ->first(); - if ($u['groupes_metier_id'] !== null && $u['groupes_metier_id'] != TableRegistry::get('GroupesMetiers')->find() + if ($u['groupes_metier_id'] !== null && $u['groupes_metier_id'] != TableRegistry::getTableLocator()->get('GroupesMetiers')->find() ->where([ 'nom =' => 'N/A' ]) @@ -75,7 +75,7 @@ class SuivisController extends AppController 'id' => $id, 'groupes_metier_id' => $u['groupes_metier_id'] ])); - } else if ($u['groupe_thematique_id'] !== null && $u['groupe_thematique_id'] != TableRegistry::get('GroupesThematiques')->find() + } else if ($u['groupe_thematique_id'] !== null && $u['groupe_thematique_id'] != TableRegistry::getTableLocator()->get('GroupesThematiques')->find() ->where([ 'nom =' => 'N/A' ]) @@ -100,7 +100,7 @@ class SuivisController extends AppController $GM = $this->request->getQuery('GM'); $GT = $this->request->getQuery('GT'); if ($GM !== null || $GT !== null) { - if ($GM !== null && $GM != TableRegistry::get('GroupesMetiers')->find() + if ($GM !== null && $GM != TableRegistry::getTableLocator()->get('GroupesMetiers')->find() ->where([ 'nom =' => 'N/A' ]) @@ -108,7 +108,7 @@ class SuivisController extends AppController $condition = [ 'Suivis.groupes_metier_id =' => $GM ]; - } else if ($GT !== null && $GT != TableRegistry::get('GroupesThematiques')->find() + } else if ($GT !== null && $GT != TableRegistry::getTableLocator()->get('GroupesThematiques')->find() ->where([ 'nom =' => 'N/A' ]) @@ -164,8 +164,8 @@ class SuivisController extends AppController 'Fichemetrologiques' ] ]); - $typeDocuments = TableRegistry::get('TypeDocuments'); - $fichemet = TableRegistry::get('Fichemetrologiques')->find('all', [ + $typeDocuments = TableRegistry::getTableLocator()->get('TypeDocuments'); + $fichemet = TableRegistry::getTableLocator()->get('Fichemetrologiques')->find('all', [ 'conditions' => [ 'suivi_id' => $this->request->getAttribute('params')['pass'][0] ], @@ -208,12 +208,214 @@ class SuivisController extends AppController $this->set(compact('typeDocuments', 'suivi', 'fiche', 'CAN_EDIT_DELETE_LINK')); } // view + + /** + * Add or Edit method (do either add() or edit()) + * => Factorisation de add() et edit() + * (voir aussi https://book.cakephp.org/3.0/en/orm.html) + * + * @param $IS_ADD: True = add ; False = edit + * @return \Cake\Network\Response|void Redirects on successful add/edit, renders view otherwise. + */ + private function add_or_edit($IS_ADD, $id=null, $valeurs=null, $erreurs=null) { + + $this->myDebug("step 3: SuivisController.add_or_edit()"); + + $IS_EDIT = !$IS_ADD; + // TODO: utiliser $entity au lieu de $suivi (car c'est plus générique) + $suivi = $IS_ADD ? + $this->Suivis->newEntity() + : + // cf https://book.cakephp.org/3/fr/orm/retrieving-data-and-resultsets.html#eager-loading-associations + // Ceci permettra des accès du type $suivi->type_suivi->nom depuis la vue + $this->Suivis->get($id, ['contain' => ['TypeSuivis']]); + + //debug($suivi); + // POST (on arrive ici après un SUBMIT) + // add + //if ($this->request->is('post')) { + if ($this->request->is(['patch','post','put'])) { + $suivi = $this->Suivis->patchEntity($suivi, $this->request->getData()); + if ($IS_ADD) { + if ($this->request->getData('typemesure') !== null && $this->request->getData('typemesure') == "1") + $suivi->typemesure = "Indirect"; + $suivi->panne_resolu = false; + } + // SAVED OK + if ($this->Suivis->save($suivi)) { + $verb = $IS_ADD ? 'ajouté' : 'modifié'; + $this->Flash->success(__("Le suivi a bien été $verb")); + // ADD + if ($IS_ADD) return $this->redirect([ + 'controller' => 'Materiels', + 'action' => 'view', + $this->request->getAttribute('params')['pass'][0] + ]); + // EDIT + else return $this->redirect([ + 'action' => 'index', + $id + ]); + } + // SAVED KO + else { + $this->Flash->error(__("Le suivi n'a pas pu être $verb")); + if ($IS_ADD) return $this->redirect([ + 'controller' => 'Materiels', + 'action' => 'view', + $this->request->getAttribute('params')['pass'][0] + ]); + } + } // POST + + + // START (on arrive ici la première fois qu'on ouvre la vue) + $unite = TableRegistry::getTableLocator()->get('Unites')->find('list', [ + 'keyfield' => 'id', + 'valueField' => 'nom' + ]); + $materiels = $this->Suivis->Materiels->find('list'); + $materiel_id = $IS_EDIT ? $suivi->materiel_id : $this->request->getAttribute('params')['pass'][0]; + $materiel = $this->Suivis->Materiels->get($materiel_id); + /* + $materiel = $IS_EDIT ? + $this->Suivis->Materiels->get($suivi->materiel_id) + /S + $this->Suivis->Materiels->find() + ->where([ + 'id =' => $suivi->materiel_id + ]) + ->first(); + S/ + : + $this->Suivis->Materiels->find() + ->where([ + 'id =' => $this->request->getAttribute('params')['pass'][0] + ]) + ->first(); + */ + // ADD only + if ($IS_ADD) { + $formule = TableRegistry::getTableLocator()->get('Formules')->find('list', [ + 'keyfield' => 'id', + 'valueField' => 'formule' + ]); + $formules = TableRegistry::getTableLocator()->get('Formules')->find('all'); + $variables = TableRegistry::getTableLocator()->get('Variables')->find('list')->toArray(); + } + // EDIT only + else { + $numMateriel = $this->Suivis->Materiels->find() + ->select('numero_laboratoire') + ->where([ + 'id =' => $suivi->get('materiel_id') + ]) + ->first()['numero_laboratoire']; + } + + // Le materiel est-il suivi en métrologie ou non ? + //$matos_id = $IS_ADD ? $this->request->getAttribute('params')['pass'][0] : $suivi->materiel_id; + $metro = TableRegistry::getTableLocator()->get('Materiels')->find() + ->select('metrologie') + ->where([ + 'id =' => $materiel_id + ]) + ->first()['metrologie']; + + if ($metro == 1) + $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom' + ]); + else { + $conditions = [ + 'AND' => [ + 'nom !=' => 'Vérification métrologique' + ] + ]; + if ($IS_EDIT) $conditions = [ + 'AND' => [ + [ + 'id !=' => '4' + ], + [ + 'id !=' => '5' + ], + [ + 'id !=' => '6' + ] + ] + ]; + $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom', + 'conditions' => $conditions + ]); + } + + // $domaineresp= TableRegistry::getTableLocator()->get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->getSession()->read('authType'))[0]])->first()['sur_categorie_id']; + $matos_id = $IS_ADD ? $materiel->id : $suivi->materiel_id; + $dom = TableRegistry::getTableLocator()->get('Materiels')->find() + ->select('sur_categorie_id') + ->where([ + 'id =' => $matos_id + ]) + ->first()['sur_categorie_id']; + $domaines = TableRegistry::getTableLocator()->get('Users')->find() + ->select('sur_categorie_id') + ->where([ + 'username =' => $this->LdapAuth->user($this->request->getSession() + ->read('authType'))[0] + ]) + ->first()['sur_categorie_id']; + $domaineresp = ($dom==$domaines); + + $groupesThematiques = $this->Suivis->GroupesThematiques->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom', + 'order' => 'GroupesThematiques.nom' + ]); + $groupesMetiers = $this->Suivis->GroupesMetiers->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom', + 'order' => 'GroupesMetiers.nom' + ]); + + $parent = $materiel; + // Utile ? + //$parent_id = $materiel_id; + $model = $suivi; + $this->set(compact( + 'IS_ADD', 'IS_EDIT', + 'unite', 'domaineresp', + 'suivi','model', + 'materiel','parent', + //'materiel_id', 'parent_id', + 'groupesThematiques', 'groupesMetiers', + 'materiels', 'typeSuivis' + )); + if ($IS_ADD) + $this->set(compact('variables', 'formule', 'formules')); + else + $this->set(compact('metro', 'numMateriel')); + /* (EP inutile) + $this->set('_serialize', [ + 'suivi' + ]); + */ + + } // add_or_edit() + /** * Add method * * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise. */ - public function add() + //public function add() + public function add($valeurs = null, $erreurs = null) { + $this->add_or_edit(TRUE, null, $valeurs, $erreurs); + } + private function add_orig() { $suivi = $this->Suivis->newEntity(); if ($this->request->is('post')) { @@ -238,29 +440,29 @@ class SuivisController extends AppController } } $materiels = $this->Suivis->Materiels->find('list'); - $unite = TableRegistry::get('Unites')->find('list', [ + $unite = TableRegistry::getTableLocator()->get('Unites')->find('list', [ 'keyfield' => 'id', 'valueField' => 'nom' ]); - $formule = TableRegistry::get('Formules')->find('list', [ + $formule = TableRegistry::getTableLocator()->get('Formules')->find('list', [ 'keyfield' => 'id', 'valueField' => 'formule' ]); - $formules = TableRegistry::get('Formules')->find('all'); + $formules = TableRegistry::getTableLocator()->get('Formules')->find('all'); // Le materiel est-il suivi en métrologie ou non ? - $metro = TableRegistry::get('Materiels')->find() + $metro = TableRegistry::getTableLocator()->get('Materiels')->find() ->select('metrologie') ->where([ 'id =' => $this->request->getAttribute('params')['pass'][0] ]) ->first()['metrologie']; - $variables = TableRegistry::get('Variables')->find('list')->toArray(); + $variables = TableRegistry::getTableLocator()->get('Variables')->find('list')->toArray(); $materiel = $this->Suivis->Materiels->find() ->where([ 'id =' => $this->request->getAttribute('params')['pass'][0] ]) ->first(); - // $domaineresp= TableRegistry::get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->getSession()->read('authType'))[0]])->first()['sur_categorie_id']; + // $domaineresp= TableRegistry::getTableLocator()->get('Users')->find()->select('sur_categorie_id')->where(['username =' => $this->LdapAuth->user($this->request->getSession()->read('authType'))[0]])->first()['sur_categorie_id']; if ($metro == 1) { $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', @@ -277,13 +479,13 @@ class SuivisController extends AppController ] ]); } - $dom = TableRegistry::get('Materiels')->find() + $dom = TableRegistry::getTableLocator()->get('Materiels')->find() ->select('sur_categorie_id') ->where([ 'id =' => $materiel->id ]) ->first()['sur_categorie_id']; - $domaines = TableRegistry::get('Users')->find() + $domaines = TableRegistry::getTableLocator()->get('Users')->find() ->select('sur_categorie_id') ->where([ 'username =' => $this->LdapAuth->user($this->request->getSession() @@ -308,7 +510,7 @@ class SuivisController extends AppController $this->set('_serialize', [ 'suivi' ]); - } + } // add() /** * Edit method @@ -318,13 +520,17 @@ class SuivisController extends AppController * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise. * @throws \Cake\Network\Exception\NotFoundException When record not found. */ - public function edit($id = null) + public function edit($id = null) { + $this->add_or_edit(FALSE, $id); + } + private function edit_orig($id = null) { // cf https://book.cakephp.org/3/fr/orm/retrieving-data-and-resultsets.html#eager-loading-associations // Ceci permettra des accès du type $suivi->type_suivi->nom depuis la vue $suivi = $this->Suivis->get($id, [ 'contain' => ['TypeSuivis'] ]); + // POST if ($this->request->is([ 'patch', 'post', @@ -341,42 +547,49 @@ class SuivisController extends AppController $this->Flash->error(__('Le suivi n\'a pas pu être édité.')); } } + + // START $materiels = $this->Suivis->Materiels->find('list'); $materiel = $this->Suivis->Materiels->find() ->where([ 'id =' => $suivi->materiel_id ]) ->first(); - $unite = TableRegistry::get('Unites')->find('list', [ + $unite = TableRegistry::getTableLocator()->get('Unites')->find('list', [ 'keyfield' => 'id', 'valueField' => 'nom' ]); + $numMateriel = $this->Suivis->Materiels->find() ->select('numero_laboratoire') ->where([ 'id =' => $suivi->get('materiel_id') ]) ->first()['numero_laboratoire']; - $metro = TableRegistry::get('Materiels')->find() + + $metro = TableRegistry::getTableLocator()->get('Materiels')->find() ->select('metrologie') ->where([ 'id =' => $suivi->materiel_id ]) ->first()['metrologie']; - $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ - 'keyField' => 'id', - 'valueField' => 'nom' - ]); + $groupesThematiques = $this->Suivis->GroupesThematiques->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesThematiques.nom' ]); + $groupesMetiers = $this->Suivis->GroupesMetiers->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesMetiers.nom' ]); + + $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom' + ]); if ($metro == 1) { $typeSuivis = $this->Suivis->TypeSuivis->find('list', [ 'keyField' => 'id', @@ -401,13 +614,13 @@ class SuivisController extends AppController ] ]); } - $dom = TableRegistry::get('Materiels')->find() + $dom = TableRegistry::getTableLocator()->get('Materiels')->find() ->select('sur_categorie_id') ->where([ 'id =' => $suivi->materiel_id ]) ->first()['sur_categorie_id']; - $domaines = TableRegistry::get('Users')->find() + $domaines = TableRegistry::getTableLocator()->get('Users')->find() ->select('sur_categorie_id') ->where([ 'username =' => $this->LdapAuth->user($this->request->getSession() @@ -415,6 +628,7 @@ class SuivisController extends AppController ]) ->first()['sur_categorie_id']; $domaineresp = ($dom == $domaines); + $parent = $materiel; $this->set(compact('unite', 'metro', 'domaineresp', 'suivi', 'parent', 'materiel', 'materiels', 'typeSuivis', 'numMateriel', 'groupesThematiques', 'groupesMetiers')); /* (EP inutile) diff --git a/src/Template/Documents/add_edit.ctp b/src/Template/Documents/add_edit.ctp index 3c3932a..ec21b47 100644 --- a/src/Template/Documents/add_edit.ctp +++ b/src/Template/Documents/add_edit.ctp @@ -1,5 +1,7 @@ @@ -48,7 +48,7 @@ diff --git a/src/Template/Suivis/add.ctp b/src/Template/Suivis/add.ctp index b06ba45..3006e6f 100755 --- a/src/Template/Suivis/add.ctp +++ b/src/Template/Suivis/add.ctp @@ -1,243 +1,3 @@ - -
- Form->create($suivi)?> -
-

- Ajouter un suivi -

- Form->hidden('materiel_id', [ - 'options' => $materiels, - 'default' => $this->request->getAttribute('params')['pass'][0] - ]); - echo $this->Form->control('materiel_numero_laboratoire', [ - 'label' => 'N° materiel labo', - 'default' => $materiel['numero_laboratoire'], - 'disabled' => TRUE - ]); - - echo ''; - - echo $this->Form->control('type_suivi_id', [ - 'label' => 'Type d\'intervention', - 'options' => $typeSuivis, - 'default' => 3, - 'empty' => "Choisir le type de suivi" - ]); - - echo ''; - - echo ''; - - echo $this->Form->control('organisme', [ - 'label' => 'Prestataire' - ]); - echo $this->Form->control('groupes_thematique_id', [ - 'label' => $configuration->nom_groupe_thematique, - 'options' => $groupesThematiques, - 'default' => $materiel['groupes_thematique_id'] - ]); - echo $this->Form->control('groupes_metier_id', [ - 'label' => $configuration->nom_groupe_metier, - 'options' => $groupesMetiers, - 'default' => $materiel['groupes_metier_id'] - ]); - echo $this->Form->control('intitule', [ - 'label' => 'Intitulé', - 'required' => 'required' - ]); - - echo '
'; - echo '
'; - - echo '
'; - echo '
'; - - echo $this->Form->control('commentaire', [ - 'type' => 'textarea' - ]); - echo $this->Form->hidden('nom_createur', [ - 'value' => $username - ]); - ?> -
- Form->submit(__('Valider'))?> - Form->end()?> -
- - - - +extend('/Suivis/add_edit'); +?> \ No newline at end of file diff --git a/src/Template/Suivis/edit.ctp b/src/Template/Suivis/edit.ctp index d2755ef..3006e6f 100755 --- a/src/Template/Suivis/edit.ctp +++ b/src/Template/Suivis/edit.ctp @@ -1,356 +1,3 @@ - - -
- -

- Editer un suivi -

- - designation : 'Suivi '.$suivi->id; - $displayElement(__("Matériel concerné :"), $this->Html->link($parent->designation, [ - 'controller' => 'materiels', - 'action' => 'view', - $parent->id - ])); - - echo $this->Form->create($suivi); - ?> - -
- - Form->control('intitule', ['label' => 'Intitulé']); - - // - matériel suivi (hidden) - echo $this->Form->hidden('materiel_id', [ - 'options' => $materiels, - 'default' => $suivi->get('materiel_id') - ]); - - // - num labo - /* (EP inutile) - echo $this->Form->control('materiel_numero_laboratoire', [ - 'label' => 'N° materiel labo', - 'default' => $materiel['numero_laboratoire'], - 'disabled' => TRUE - ]); - */ - - // - type suivi - echo $this->Form->control('type_suivi_id', [ - 'label' => "Type d'intervention", - 'options' => $typeSuivis, - 'disabled' => false - //'disabled' => TRUE - ]); - - // Affichage des bonnes informations en fonction du type de suivi - - // type = maintenance ? => cas spécifique - //if ($suivi->type_suivi_id == 2 ) { - //debug($suivi->type_suivi->nom); - if ($suivi->type_suivi->nom == 'Maintenance' ) { - // - date controle - echo $this->Form->control('date_controle', [ - 'type' => 'text', - 'id' => 'date_deb', - 'label' => 'Date de la prise en charge', - 'class' => 'datepicker', - 'placeholder' => 'Cliquez pour sélectionner une date', - //'disabled' => true - ]); - // - date prochain controle - echo $this->Form->control('date_prochain_controle', [ - 'type' => 'text', - 'id' => 'date_fin', - 'label' => 'Date de fin estimée', - 'class' => 'datepicker', - 'placeholder' => 'Cliquez pour sélectionner une date' - ]); - } // maintenance - - // autre type que maintenance ? => cas général - else { - //echo ''; - echo '
'; - // - fréquence - echo ''; - // - type fréquence - echo ''; - echo '
'; - echo $this->Form->control('frequence', [ - 'type' => 'text', - 'id' => 'SuiviFrequence', - 'label' => 'Fréquence', - //'disabled' => true, - 'templates' => [ - 'inputContainer' => '
{{content}}
' - ], - 'placeholder' => '' - ]); - echo '
'; - echo $this->Form->control('type_frequence', [ - //'label' => false, - 'label' => 'Intervalle', - //'disabled' => true, - 'templates' => [ - 'inputContainer' => '
{{content}}
' - ], - 'options' => [ - '/ Jours' => '/ Jours', - '/ Semaines' => '/ Semaines', - '/ Mois' => '/ Mois', - '/ Ans' => '/ Ans' - ], - 'default' => '/ Mois' - ]); - echo '
'; - } // autre type que maintenance - - // statut - echo $this->Form->control('statut', [ - 'options' => [ - 'En cours' => 'En cours', - 'Terminé' => 'Terminé' - ] - ]); - - // prestataire - echo $this->Form->control('organisme', [ - 'label' => 'Prestataire' - ]); - - // groupe thématique - echo $this->Form->control('groupes_thematique_id', [ - 'label' => $configuration->nom_groupe_thematique, - 'options' => $groupesThematiques, - 'default' => $materiel['groupes_thematique_id'] - ]); - - // groupe métier - echo $this->Form->control('groupes_metier_id', [ - 'label' => $configuration->nom_groupe_metier, - 'options' => $groupesMetiers, - 'default' => $materiel['groupes_metier_id'] - ]); - - // (metro) type mesure (hidden) - echo ''; - - // Section métrologie (hidden) - echo ''; // Section métrologie (hidden) - - // commentaire - echo $this->Form->control('commentaire', [ - 'type' => 'textarea' - ]); - - // nom modificateur (hidden) - echo $this->Form->hidden('nom_modificateur', [ - 'value' => $username - ]); - ?> - -
- - - Form->submit(__('Enregistrer'))?> - - Form->end()?> - -
- - - - - - - - - - - \ No newline at end of file +$this->extend('/Suivis/add_edit'); +?> \ No newline at end of file -- libgit2 0.21.2