From 4cf3322fbededfda923cf19c3ce33f73a71f4ea3 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Tue, 24 Mar 2020 18:04:08 +0100 Subject: [PATCH] Suivis : Amélioration et nombreux Bugfixes !!! (1) (v3.7.9.8) --- README.md | 19 +++++++++++++------ src/Controller/AppController.php | 3 +++ src/Controller/DocumentsController.php | 37 +++++++++++++++++++++---------------- src/Controller/SuivisController.php | 55 ++++++++++++++++++++++++++++++++++++++++++------------- src/Model/Table/SuivisTable.php | 2 +- src/Template/Documents/add_edit.ctp | 10 +++++----- src/Template/Documents/view.ctp | 1 + src/Template/Suivis/edit.ctp | 416 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/Template/Suivis/view.ctp | 419 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------- webroot/css/inventirap.css | 5 +++-- 10 files changed, 595 insertions(+), 372 deletions(-) diff --git a/README.md b/README.md index 428205f..67063d2 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,16 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 23/03/2020 -Version: 3.7.9.7 +Date: 24/03/2020 +Version: 3.7.9.8 Author: EP -Commentaire: 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 - - TODO : faire la meme chose pour toutes les vues add et edit des différents objets (materiel, suivi, emprunt...) - +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... + - ... + + IMPORTANT : - Pour connaitre la version actuelle, taper "./VERSION" - Pour mettre à jour le code, utiliser ./UPDATE depuis la racine du projet (ne plus se contenter de faire "git pull") @@ -93,6 +96,10 @@ La liste ci-dessous n'est plus à jour, elle est désormais en ligne ici : https ----------------------------------------------------------------------------------------------------------- +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 + - TODO : faire la meme chose pour toutes les vues add et edit des différents objets (materiel, suivi, emprunt...) 20/03/2020 Version 3.7.9.6 (EP) Amélioration et nombreux bugfixes de la gestion des docs attachés (2) diff --git a/src/Controller/AppController.php b/src/Controller/AppController.php index c19288b..e98dc25 100755 --- a/src/Controller/AppController.php +++ b/src/Controller/AppController.php @@ -902,6 +902,9 @@ class AppController extends Controller //if ($valeur != "") echo '' . $nom . ' ' . $balise . $valeur . ''; if ($valeur!="") echo " $nom <$TD>$valeur "; }; + $printTableRow = $displayElement; + $this->set(compact('printTableRow')); + //@deprecated $this->set('displayElement', $displayElement); // Pass this function to all views diff --git a/src/Controller/DocumentsController.php b/src/Controller/DocumentsController.php index c81a001..69b0904 100755 --- a/src/Controller/DocumentsController.php +++ b/src/Controller/DocumentsController.php @@ -197,19 +197,23 @@ class DocumentsController extends AppController */ public function view($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 $document->type_document->nom depuis la vue $document = $this->Documents->get($id, [ - 'contain' => [ - 'TypeDocuments' - ] + 'contain' => ['TypeDocuments'] ]); - + + /* $materiel = $this->Documents->Materiels->find() ->where([ 'id =' => $document->materiel_id ])->first(); - + */ + // $materiel + $materiel = $this->Documents->Materiels->get($document->materiel_id); if ($materiel != null) { $this->set('materiel', $materiel); + // $suivi } else { $suivi = $this->Documents->Suivis->find() ->where([ @@ -300,13 +304,13 @@ class DocumentsController extends AppController $parent_id = $document->materiel_id; if (!empty($parent_id)) { - $doc_type = 'matériel'; + $parent_type = 'matériel'; //$parent_name = $parent->designation." (id = $parent->id)"; $parent_controller = 'materiels'; } else { $parent_id = $document->suivi_id; - $doc_type = 'suivi'; + $parent_type = 'suivi'; //$parent_name = 'Suivi#'.$document->suivi_id; $parent_controller = 'suivis'; } @@ -345,13 +349,13 @@ class DocumentsController extends AppController /* //$id = $document->materiel_id; if (!empty($parent_id)) { - $doc_type = 'matériel'; + $parent_type = 'matériel'; $parent_name = $parent->designation." (id = $parent->id)"; //$parent_controller = 'materiels'; } else { $parent_id = $document->suivi_id; - $doc_type = 'suivi'; + $parent_type = 'suivi'; $parent_name = 'Suivi#'.$document->suivi_id; //$parent_controller = 'suivis'; } @@ -359,8 +363,9 @@ class DocumentsController extends AppController $parent_name = $parent_controller=='materiels' ? $parent->designation." (id = $parent->id)" : - 'Suivi#'.$document->suivi_id; - $this->sendEmail($document, "[LabInvent] Ajout d'un document : $userName a ajouté un document de type '$nomType' au $doc_type $parent_name"); + 'Suivi#'.$parent->id; + //'Suivi#'.$document->suivi_id; + $this->sendEmail($document, "[LabInvent] Ajout d'un document : $userName a ajouté un document de type '$nomType' au $parent_type $parent_name"); } // ADD //$parent_controller = empty($parent_id) ? 'suivis' : 'materiels'; return $this->redirect([ @@ -391,11 +396,11 @@ class DocumentsController extends AppController // Set some variables for the view $this->set(compact('parent')); - $doc_type = $PARENT_IS_MATOS ? 'matériel' : 'suivi'; - $this->set(compact('doc_type')); - $this->set(compact('parent_controller')); - $parent_name = $PARENT_IS_MATOS ? $parent->designation." (id = $parent->id)" : 'Suivi#'.$document->suivi_id; - $this->set(compact('parent_name')); + $parent_type = $PARENT_IS_MATOS ? 'matériel' : 'suivi'; + //$parent_name = $PARENT_IS_MATOS ? $parent->designation." (id = $parent->id)" : 'Suivi#'.$document->suivi_id; + //$parent_name = $PARENT_IS_MATOS ? $parent->designation." (id = $parent->id)" : 'Suivi#'.$parent->id; + $parent_name = $PARENT_IS_MATOS ? $parent->designation." (id = $parent->id)" : "$parent->intitule (suivi#$parent->id)"; + $this->set(compact('parent_type','parent_controller','parent_name')); $IS_PHOTO = $IS_ADD ? (isset($this->request->getAttribute('params')['pass'][2]) && $this->request->getAttribute('params')['pass'][2] == 'photo') diff --git a/src/Controller/SuivisController.php b/src/Controller/SuivisController.php index 0e5721f..b52d666 100755 --- a/src/Controller/SuivisController.php +++ b/src/Controller/SuivisController.php @@ -139,7 +139,7 @@ class SuivisController extends AppController $this->set('_serialize', [ 'suivis' ]); - } + } // index /** * View method @@ -151,6 +151,8 @@ class SuivisController extends AppController */ public function view($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, $suivi->materiel->nom... depuis la vue $suivi = $this->Suivis->get($id, [ 'contain' => [ 'Materiels', @@ -169,17 +171,42 @@ class SuivisController extends AppController ], 'order' => ('id DESC') ]); - if ($fichemet === null) - $fiche = $fichemet->first(); - else - $fiche = null; + $fiche = is_null($fichemet) ? null : $fichemet->first(); + /* $this->set('typeDocuments', $typeDocuments); $this->set('suivi', $suivi); $this->set('fiche', $fiche); + */ + /* (EP inutile) $this->set('_serialize', [ 'suivi' ]); - } + */ + $IS_OWNER = $this->userName == $suivi->nom_createur; + //debug($this->priviledgedUser); + $CAN_EDIT_DELETE_LINK = ( + $IS_OWNER || in_array($this->userRole, ['Administration','Administration Plus','Super Administrateur']) + //|| ($role == 'Utilisateur' && in_array($username, [$suivi->nom_createur])) + //|| ($role == 'Responsable' && in_array($username, [$suivi->nom_createur])) + || ( + $this->userRole == 'Responsable' + && ( + ( + isset($this->priviledgedUser->groupes_metier_id) + && $this->priviledgedUser->groupes_metier_id != $idGmNa + && $suivi->groupes_metier_id == $this->priviledgedUser->groupes_metier_id + ) + || + ( + isset($this->priviledgedUser->groupe_thematique_id) + && $this->priviledgedUser->groupe_thematique_id != $idGtNa + && $suivi->groupes_thematique_id == $this->priviledgedUser->groupe_thematique_id + ) + ) + ) + ); + $this->set(compact('typeDocuments', 'suivi', 'fiche', 'CAN_EDIT_DELETE_LINK')); + } // view /** * Add method @@ -293,8 +320,10 @@ class SuivisController extends AppController */ public function edit($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' => [] + 'contain' => ['TypeSuivis'] ]); if ($this->request->is([ 'patch', @@ -385,15 +414,15 @@ class SuivisController extends AppController ->read('authType'))[0] ]) ->first()['sur_categorie_id']; - if ($dom == $domaines) - $domaineresp = true; - else - $domaineresp = false; - $this->set(compact('unite', 'metro', 'domaineresp', 'suivi', 'materiel', 'materiels', 'typeSuivis', 'numMateriel', 'groupesThematiques', 'groupesMetiers')); + $domaineresp = ($dom == $domaines); + $parent = $materiel; + $this->set(compact('unite', 'metro', 'domaineresp', 'suivi', 'parent', 'materiel', 'materiels', 'typeSuivis', 'numMateriel', 'groupesThematiques', 'groupesMetiers')); + /* (EP inutile) $this->set('_serialize', [ 'suivi' ]); - } + */ + } // edit() /** * Delete method diff --git a/src/Model/Table/SuivisTable.php b/src/Model/Table/SuivisTable.php index 543ea45..edee92d 100755 --- a/src/Model/Table/SuivisTable.php +++ b/src/Model/Table/SuivisTable.php @@ -141,7 +141,7 @@ class SuivisTable extends AppTable $rules->add($checkNextDateControlIsAfterDateControl, [ 'errorField' => 'date_prochain_controle', - 'message' => 'La date de la prochaine intervention dois être postérieure à la date de l\'intervention précédente.' + 'message' => "La date de la prochaine intervention doit être postérieure à la date de l'intervention précédente" ]); $rules->add($rules->existsIn([ diff --git a/src/Template/Documents/add_edit.ctp b/src/Template/Documents/add_edit.ctp index 08532e3..3c3932a 100644 --- a/src/Template/Documents/add_edit.ctp +++ b/src/Template/Documents/add_edit.ctp @@ -6,7 +6,7 @@ $document = $document; $typesD = $typesD; $configuration = $configuration; $parent = $parent; -$doc_type = $doc_type; +$parent_type = $parent_type; $parent_controller = $parent_controller; $parent_name = $parent_name; // add or edit mode ? true=add ; false=edit @@ -24,13 +24,13 @@ if (isset($photo)) { /* if (isset($materiel)) { $materiel = $materiel; - $doc_type = 'matériel'; + $parent_type = 'matériel'; $parent = $materiel; $parent_controller = 'Materiels'; } if (isset($suivi)) { $suivi = $suivi; - $doc_type = 'suivi'; + $parent_type = 'suivi'; $parent = $suivi; $parent_controller = 'Suivis'; } @@ -55,7 +55,7 @@ if (isset($photo)) { // Ce doc est lié à ... //$link = isset($materiel) ? $materiel->designation : 'Suivi '.$suivi->id; - $displayElement(__("Ce document est lié au $doc_type"), $this->Html->link($parent_name, [ + $displayElement(__("Ce document est lié au $parent_type"), $this->Html->link($parent_name, [ 'controller' => $parent_controller, 'action' => 'view', $parent->id @@ -101,7 +101,7 @@ if (isset($photo)) { echo $this->Form->control('nom', ['readonly' => !$IS_ADD]); // - Type (hidden si photo) - echo "(Si vous choisissez le type 'Photo', ce document sera affiché en tête de la fiche du $doc_type associé)"; + echo "(Si vous choisissez le type 'Photo', ce document sera affiché en tête de la fiche du $parent_type associé)"; $f = 'control'; $default = 1; if (isset($photo)) { diff --git a/src/Template/Documents/view.ctp b/src/Template/Documents/view.ctp index bb4689f..af29c02 100755 --- a/src/Template/Documents/view.ctp +++ b/src/Template/Documents/view.ctp @@ -70,6 +70,7 @@ $photo_formats = ['png','jpg','jpeg']; $displayElement(__('Nom'), h($document->nom)); // - Type + debug($document); $displayElement(__('Type'), $document->has('type_document') ? h($document->type_document->nom) : ''); /* diff --git a/src/Template/Suivis/edit.ctp b/src/Template/Suivis/edit.ctp index bc72bf1..d2755ef 100755 --- a/src/Template/Suivis/edit.ctp +++ b/src/Template/Suivis/edit.ctp @@ -1,170 +1,245 @@ + - Form->create($suivi)?> -
+$parent = $parent; +//@deprecated +$materiel = $materiel; -

- Editer un suivi -

+$materiels = $materiels; +$unite = $unite; +$metro = $metro; +$domaineresp = $domaineresp; +$typeSuivis = $typeSuivis; +$numMateriel = $numMateriel; +$groupesThematiques = $groupesThematiques; +$groupesMetiers = $groupesMetiers; +?> - Form->hidden('materiel_id', [ - 'options' => $materiels, - 'default' => $suivi->get('materiel_id') - ]); - echo $this->Form->control('materiel_numero_laboratoire', [ - 'label' => 'N° materiel labo', - 'default' => $materiel['numero_laboratoire'], - 'disabled' => TRUE - ]); - echo $this->Form->control('type_suivi_id', [ - 'label' => 'Type d\'intervention', - 'options' => $typeSuivis, - 'disabled' => TRUE - ]); - - //Affiche les bonnes informations en fonction du type de suivi - //Améliorable avec une requete pour fonctionner avec el nom de suivi et pas l'id - //Améliorable avec un switch - - if ($suivi->type_suivi_id == 2 ) { - 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 - ]); - echo $this->Form->control('date_prochain_controle', [ - 'type' => 'text', - 'id' => 'date_fin', - 'label' => 'Date estimee de fin', - 'class' => 'datepicker', - 'placeholder' => 'Cliquez pour sélectionner une date' - ]); - - }else{ - 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, - 'disabled' => true, - 'templates' => [ - 'inputContainer' => '
{{content}}
' - ], - 'options' => [ - '/ Jours' => '/ Jours', - '/ Semaines' => '/ Semaines', - '/ Mois' => '/ Mois', - '/ Ans' => '/ Ans' - ], - 'default' => '/ Mois' - ]); - echo '
'; - } + +
- echo $this->Form->control('statut', [ - 'options' => [ - 'En cours' => 'En cours', - 'Terminé' => 'Terminé' - ] - ]); - 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é' - ]); - echo ''; - echo ''; - echo $this->Form->control('commentaire', [ - 'type' => 'textarea' - ]); - echo $this->Form->hidden('nom_modificateur', [ - 'value' => $username - ]); - ?> +

+ 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()?> +
+ + + + + + +