diff --git a/README-LABINVENT.md b/README-LABINVENT.md index 002ea19..29d09a7 100755 --- a/README-LABINVENT.md +++ b/README-LABINVENT.md @@ -51,13 +51,12 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE Date: 29/06/2016 -Version: 2.5.2.0 +Version: 2.5.3.0 -envoi mail ajout document + bugfixes + edition details doc + acl documents + pb saut de ligne champ "text +ajout "administrer" form materiels + index "mes materiels" -Demande (terminé) : https://projects.irap.omp.eu/issues/3913 - https://projects.irap.omp.eu/issues/3716 - https://projects.irap.omp.eu/issues/3912 +Demande (terminé) : https://projects.irap.omp.eu/issues/3906 + https://projects.irap.omp.eu/issues/3916 Version majeure en cours (2.5): https://projects.irap.omp.eu/versions/99 diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index ef1d046..7c886a3 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -179,9 +179,19 @@ class MaterielsController extends AppController if(isset($GMV)) { $condition = ['Materiels.groupes_metier_id =' => $this->request->query('GMV'), 'Materiels.status =' => 'CREATED', 'Materiels.status !=' => 'ARCHIVED']; } + + $MY = $this->request->query('MY'); + if(isset($MY)) { + if(in_array($this->role, ['Utilisateur', 'Responsable'])) { + $condition = ['Materiels.nom_responsable =' => $this->request->query('MY'), 'Materiels.status !=' => 'ARCHIVED']; + } else { + $condition = ['Materiels.nom_responsable =' => $this->request->query('MY')]; + } + + } - if($this->role == 'Utilisateur') { + if(in_array($this->role, ['Utilisateur', 'Responsable']) && $condition != '') { $condition = ['Materiels.status !=' => 'ARCHIVED']; } @@ -344,6 +354,61 @@ class MaterielsController extends AppController $this->set(compact('materiel', 'surCategories', 'categories', 'sousCategories', 'groupesThematiques', 'groupesMetiers', 'organismes', 'sites', 'utilisateurs', 'mail_responsable')); $this->set('_serialize', ['materiel']); } + + + /** + * Administrer method + * + * @param string|null $id Materiel id. + * @return \Cake\Network\Response|void Redirects on successful edit, renders view otherwise. + * @throws \Cake\Network\Exception\NotFoundException When record not found. + */ + public function administrer($id = null) + { + $materiel = $this->Materiels->get($id, [ + 'contain' => [] + ]); + if ($this->request->is(['patch', 'post', 'put'])) { + $materiel = $this->Materiels->patchEntity($materiel, $this->request->data); + if ($this->Materiels->save($materiel, ['checkRules' => false])) { + $this->Flash->success(__('Le matériel a bien été édité.')); + return $this->redirect(['action' => 'view', $id]); + } else { + $this->Flash->error(__('Le matériel n\'a pas pu être édité.')); + } + } + $surCategories = $this->Materiels->SurCategories->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'SurCategories.nom']); + $categories = $this->Materiels->Categories->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'Categories.nom']); + $sousCategories = $this->Materiels->SousCategories->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'SousCategories.nom']); + $groupesThematiques = $this->Materiels->GroupesThematiques->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesThematiques.nom']); + $groupesMetiers = $this->Materiels->GroupesMetiers->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'GroupesMetiers.nom']); + $organismes = $this->Materiels->Organismes->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'Organismes.nom']); + $sites = $this->Materiels->Sites->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'Sites.nom']); + + $users = TableRegistry::get('LdapConnections')->getListUsers(); + //tri des utilisateurs par nom + sort($users); + $utilisateurs = []; + for($i = 0; $i < sizeof($users); $i++) { + $utilisateurs[$users[$i]] = $users[$i]; + } + + if(!empty($materiel->get('nom_responsable'))){ + if(!in_array($materiel->get('nom_responsable'), $utilisateurs)){ + $nom_ancien_responsable = $materiel->get('nom_responsable'); + $this->set(compact('nom_ancien_responsable')); + } + } + $mail_responsable = TableRegistry::get('Users')->find()->select('email')->where(['username =' => $this->LdapAuth->user($this->request->session()->read('authType'))[0]])->first()['email']; + + $this->set('IS_CREATED', $materiel->status == 'CREATED'); + $this->set('IS_VALIDATED', $materiel->status == 'VALIDATED'); + $this->set('IS_ARCHIVED_OR_TOBE', in_array ( $materiel->status, ['TOBEARCHIVED','ARCHIVED'])); + + $this->set(compact('materiel', 'surCategories', 'categories', 'sousCategories', 'groupesThematiques', 'groupesMetiers', 'organismes', 'sites', 'utilisateurs', 'mail_responsable')); + $this->set('_serialize', ['materiel']); + } + /** * Delete method diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 0bbcc35..772a455 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -278,6 +278,9 @@ class MaterielsTable extends AppTable public function beforeSave($event, $entity, $options) { + if(!$entity->get('administrer')) { + + if(!empty($entity->get('nom_responsable')) && empty($entity->get('nom_responsable'))){ $entity->set('nom_responsable', $entity->get('nom_ancien_responsable')); } @@ -328,7 +331,8 @@ class MaterielsTable extends AppTable } } - + } + if(empty($entity->get('date_acquisition'))){ $entity->set('date_acquisition', null); } diff --git a/src/Template/Layout/default.ctp b/src/Template/Layout/default.ctp index dfeba1d..a61ffcd 100755 --- a/src/Template/Layout/default.ctp +++ b/src/Template/Layout/default.ctp @@ -94,7 +94,7 @@ $cakeDescription = 'Labinvent 2'; - VERSION 2.5.2.0 (29/06/2016) + VERSION 2.5.3.0 (29/06/2016) diff --git a/src/Template/Materiels/administrer.ctp b/src/Template/Materiels/administrer.ctp new file mode 100644 index 0000000..46dc0ed --- /dev/null +++ b/src/Template/Materiels/administrer.ctp @@ -0,0 +1,344 @@ +
+ Form->create($materiel) ?> +
+

Administrer un Matériel

+ + Html->link('Retourner au formulaire d\'édition classique', ['action' => 'edit', $materiel->id]); + echo '

'; + ?> + Form->submit(__('Enregistrer')) ?> + + Form->input('designation', ['label' => 'Désignation']); + + echo $this->Form->input('numero_laboratoire', ['label' => 'Numéro de laboratoire']); + + echo $this->Form->input('hors_service', ['label' => 'Appareil hors_service']); + + echo $this->Form->input('etiquette', [ + 'label' => 'Etiquette posée', + ]); + + + echo $this->Form->input('sur_categorie_id', [ + 'label' => 'Domaine', + 'options' => $surCategories, + 'empty' => 'Choisir un domaine', + 'style' => 'width: 260px', + + ]); + + $categs = $categories; + // if a domaine is selected, reduce the categories list to this domaine + if (isset ( $this->request->data['sur_categorie_id'] ) && ($this->request->data['sur_categorie_id'] != '')) { + $categs = $categs->where(['sur_categorie_id =' => $this->request->data['sur_categorie_id']]); + } + echo $this->Form->input('categorie_id', [ + 'label' => 'Catégorie', + 'style' => 'width: 380px', + 'options' => $categs, + 'empty' => 'Choisir une catégorie', + ]); + + // SOUS-CATEGORIES + // by default, list is empty + $souscategs = []; + // if a categ is selected, update sous-categs list for this categ (only) + if (isset ( $this->request->data['categorie_id'] ) && ($this->request->data['categorie_id'] != '')) { + $souscategs = $sousCategories; + $souscategs = $souscategs->where(['categorie_id' => $this->request->data['categorie_id']]); + } + echo $this->Form->input('sous_categorie_id', [ + 'label' => 'Sous-catégorie', + 'style' => 'width: 380px', + 'options' => $souscategs, + 'empty' => 'Choisir une sous-catégorie', + ]); + + echo $this->Form->input('materiel_technique', [ + 'label' => 'Technique', + ]); + echo $this->Form->input('materiel_administratif', [ + 'label' => 'Inventoriable (>'.$configuration->prix_inventaire_administratif.'€)', + ]); + + echo $this->Form->input('description', [ + 'label' => 'Description', + ]); + + + echo $this->Form->input('site_id', [ + 'options' => $sites, + 'style' => 'width: 380px', + 'default' => 9, + ]); + + echo $this->Form->input('lieu_detail', ['label' => 'Détail lieu de stockage']); + + echo $this->Form->input('date_acquisition', [ + 'type' => 'text', + 'label' => 'Date de la commande', + 'class' => 'datepicker', + 'placeholder' => 'Cliquez pour sélectionner une date', + ]); + echo $this->Form->input('date_reception', [ + 'type' => 'text', + 'label' => 'Date de réception', + 'class' => 'datepicker', + 'placeholder' => 'A éditer lors de la réception uniquement.', + 'empty' => true]); + + + echo '
'; + echo $this->Form->input('duree_garantie', [ + 'type' => 'text', + 'style' => 'width: 100px', + 'label' => 'Durée garantie', + 'templates' => ['inputContainer' => '
{{content}}
'], + 'placeholder' => '' + ]); + echo '
'; + echo $this->Form->input ('unite_duree_garantie', [ + 'label' => false, + 'templates' => ['inputContainer' => '
{{content}}
'], + 'options' => ['Mois' => 'Mois', 'Ans' => 'Ans'], + 'default' => 'Ans' + ]); + echo '
'; + echo $this->Form->input('date_fin_garantie', [ + 'type' => 'text', + 'label' => 'Date fin de garantie', + 'placeholder' => 'Cliquez pour selectionner une date', + 'class' => 'datepicker', + 'default' => NULL + ]); + + + echo $this->Form->input('status', ['label' => 'Statut', 'options' => [ + 'CREATED' => 'CREATED', + 'VALIDATED' => 'VALIDATED', + 'TOBEARCHIVED' => 'TOBEARCHIVED', + 'ARCHIVED' => 'ARCHIVED']]); + + echo $this->Form->input('numero_serie', [ + 'label' => 'Numéro de série', + ]); + echo $this->Form->input('groupes_thematique_id', [ + 'label' => $configuration->nom_groupe_thematique, + 'options' => $groupesThematiques, + 'default' => 1]); + echo $this->Form->input('groupes_metier_id', [ + 'label' => $configuration->nom_groupe_metier, + 'options' => $groupesMetiers, + 'default' => 1]); + + if(!(in_array($role, ['Responsable', 'Administration', 'Administration Plus', 'Super Administrateur']))) { + echo $this->Form->hidden('nom_responsable', [ + 'label' => 'Nom du propriétaire', + 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields), + 'empty' => 'Choisir un utilisateur', + 'default' => $username, + 'options' => $utilisateurs, + ]); + } + + if(isset($nom_ancien_responsable)){ + echo $this->Form->input ('nom_ancien_responsable', [ + 'label' => 'Nom ancien propriétaire', + 'readonly' => true, + 'default' => $nom_ancien_responsable + ]); + } + + echo $this->Form->input('email_responsable', [ + 'label' => 'Email du propriétaire', + 'default' => $mail_responsable + ]); + + + echo $this->Form->input('fournisseur', [ + 'label' => 'Fournisseur', + ]); + echo $this->Form->input('organisme_id', [ + 'options' => $organismes, + 'style' => 'width: 380px', + 'empty' => 'Choisir un organisme' + ]); + echo $this->Form->input('prix_ht', [ + 'label' => 'Prix HT (€)', + ]); + + echo '
Partie administrative'; + + echo $this->Form->input('adminEdit', [ + 'type' => 'checkbox', + 'label' => 'Editer la partie administrative', + 'onchange' => 'changeAdminEdit();', + 'default' => false + ]); + + echo $this->Form->input('eotp', [ + 'label' => 'Centre financier/EOTP', + 'disabled' => true + ]); + echo $this->Form->input('numero_commande', [ + 'label' => 'Numéro de commande', + 'disabled' => true + ]); + echo $this->Form->input('code_comptable', [ + 'label' => 'Code comptable', + 'disabled' => true + ]); + echo $this->Form->input('numero_inventaire_organisme', [ + 'label' => 'N° inventaire organisme', + 'disabled' => true + ]); + echo $this->Form->input('numero_inventaire_old', [ + 'label' => 'Ancien N° inventaire', + 'disabled' => true + ]); + echo '
'; + + echo $this->Form->input('nom_createur', ['label' => 'Nom du créateur']); + echo $this->Form->input('created', [ + 'label' => 'Date de création']); + echo $this->Form->input('nom_modificateur', ['label' => 'Nom du modificateur', 'value' => $username ]); + echo $this->Form->input('modified', [ + 'label' => 'Date de modification']); + + echo $this->Form->hidden('administrer', ['default' => 1]); + ?> +
+ Form->submit(__('Enregistrer')) ?> + Form->end() ?> +
+ +
+ element('menu'); + echo $this->element('menu_form', [ 'pluralHumanName' => 'Matériels' ]); + ?> +
+ + + value = TOUS, select = "choisir" (ADD) ou data (EDIT) + * - categ ==> value = TOUTES (ADD) ou from domaine (EDIT), select = "choisir" (ADD) ou data (EDIT) + * - scateg ==> value = Aucune (ADD) ou from categ (EDIT), select = "choisir" (ADD) ou data (EDIT) + * + * Event domaine change : + * - si select <> "choisir" ==> categ value = from domaine (select="choisir"), et vider scateg + * - si select = "choisir" ==> categ value = TOUTES (select="choisir"), et vider scateg + * + * Event categ change : + * - si select <> "choisir" ==> domaine select = from categ, et scateg values = from categ + * - si select = "choisir" ==> vider scateg + * + * Event scateg change : RIEN A FAIRE + */ +?> + + diff --git a/src/Template/Materiels/edit.ctp b/src/Template/Materiels/edit.ctp index ddca628..0a273e9 100755 --- a/src/Template/Materiels/edit.ctp +++ b/src/Template/Materiels/edit.ctp @@ -39,6 +39,14 @@ if ($IS_VALIDATED) Form->create($materiel) ?>

Editer un Matériel

+ + + Html->link('Aller au formulaire d\'édition avancée', ['action' => 'administrer', $materiel->id]); + echo '

'; + } + ?> Form->submit(__('Enregistrer')) ?> '.$role.'.'; echo '

'; + echo ''; + echo ''; + echo ''; + echo '
'.$this->Html->link('Voir mes matériels', [ + 'controller' => 'materiels', 'action' => 'index', 'MY' => $username]).'
'; + //Utilisateur admin/super admin if (in_array($role, ['Administration', 'Administration Plus'])) { echo ''; diff --git a/src/Template/Pages/tools.ctp b/src/Template/Pages/tools.ctp index 4f203dc..3836db3 100755 --- a/src/Template/Pages/tools.ctp +++ b/src/Template/Pages/tools.ctp @@ -24,7 +24,7 @@ echo ''; - endif; + endif; echo '
'; echo $this->Html->link('Gérer les fichiers', ['controller' => 'documents', 'action' => 'index']); echo '
'; echo $this->Html->link('Export de la liste des materiels actifs (format CSV)', ['controller' => 'materiels', 'action' => 'export']); -- libgit2 0.21.2