Commit 345a9eec40a50c8b39fe31cdd3127c1dcd5033bb

Authored by Etienne Pallier
2 parents d4f5307a 302307ec

Merge branch 'master' of https://gitlab.irap.omp.eu/epallier/labinvent.git

README-LABINVENT.md
@@ -50,12 +50,16 @@ Logiciel testé et validé sur les configurations suivantes : @@ -50,12 +50,16 @@ Logiciel testé et validé sur les configurations suivantes :
50 50
51 VERSION ACTUELLE 51 VERSION ACTUELLE
52 52
53 -Date: 23/06/2016  
54 -Version: 2.4.6.9 53 +Date: 24/06/2016
  54 +Version: 2.4.7.0
55 55
56 -Date garantie (materiel) + bugfixes calcul date (suivi) 56 +!!! Se placer dans database/update et exécuter le script ./db-update-2016-06-24.sh !!!
57 57
58 -Demande (terminé) : https://projects.irap.omp.eu/issues/3804 58 +gérer panne matériel + validation si champ rempli + menu home profil responsable
  59 +
  60 +Demande (terminé) : https://projects.irap.omp.eu/issues/3897
  61 + https://projects.irap.omp.eu/issues/3807
  62 + https://projects.irap.omp.eu/issues/3781
59 63
60 Version majeure en cours (2.4): https://projects.irap.omp.eu/versions/107 64 Version majeure en cours (2.4): https://projects.irap.omp.eu/versions/107
61 65
@@ -91,6 +95,8 @@ Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/c @@ -91,6 +95,8 @@ Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/c
91 95
92 MODIFICATIONS STRUCTURELLES A FAIRE MANUELLEMENT APRES LA MISE A JOUR (git pull) 96 MODIFICATIONS STRUCTURELLES A FAIRE MANUELLEMENT APRES LA MISE A JOUR (git pull)
93 97
  98 +24/06/16 (v2.4.7.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-24.sh
  99 +
94 23/06/16 (v2.4.6.5) Se placer dans database/update et exécuter le script ./db-update-2016-06-23.sh 100 23/06/16 (v2.4.6.5) Se placer dans database/update et exécuter le script ./db-update-2016-06-23.sh
95 101
96 23/06/16 (v2.4.6.4) Se placer dans database/update et exécuter le script ./db-update-2016-06-22.sh 102 23/06/16 (v2.4.6.4) Se placer dans database/update et exécuter le script ./db-update-2016-06-22.sh
database/labinvent_2.1_12-05-16.sql
@@ -412,7 +412,7 @@ ALTER TABLE `users` @@ -412,7 +412,7 @@ ALTER TABLE `users`
412 ADD CONSTRAINT `fk_users_groupe_thematique_id` FOREIGN KEY (`groupe_thematique_id`) REFERENCES `groupes_thematiques` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; 412 ADD CONSTRAINT `fk_users_groupe_thematique_id` FOREIGN KEY (`groupe_thematique_id`) REFERENCES `groupes_thematiques` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;
413 413
414 -- Insertion par défaut 414 -- Insertion par défaut
415 -Insert into type_suivis(id, nom) values (9, 'Panne'); 415 +Insert into type_suivis(nom) values ('Réparation');
416 Insert into sites(id, nom) values (9, 'N/A'); 416 Insert into sites(id, nom) values (9, 'N/A');
417 417
418 -- Insertion par défaut pour la table configuration 418 -- Insertion par défaut pour la table configuration
database/update/db-update-2016-06-24.sh 0 → 100755
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +#!/bin/bash
  2 +
  3 +# Pour Mac OS recent (10.10, Yosemite), la syntaxe du SED est differente
  4 +# Il faut donc faire une copie de ce fichier et transformer les instructions sed a l'interieur
  5 +# Pour cela, il suffit d'executer ces 2 lignes :
  6 +# cp ce_script.sh ce_script_macosx.sh
  7 +# sed -e "s/ -i / -i '' /" -i '' ce_script_macosx.sh
  8 +
  9 +if [ ! -f ../../config/app.php ] ; then
  10 +echo "Vous devez executer ce script depuis le dossier database/update/"
  11 +exit 1
  12 +fi
  13 +
  14 +
  15 +# Get login, pass, dbname, and hostname
  16 +username=$(grep "/\*d\*/'username'" ../../config/app.php | cut -d"'" -f4)
  17 +password=$(grep "/\*d\*/'password'" ../../config/app.php | cut -d"'" -f4)
  18 +database=$(grep "/\*d\*/'database'" ../../config/app.php | cut -d"'" -f4)
  19 +host=$(grep "/\*d\*/'host'" ../../config/app.php | cut -d"'" -f4)
  20 +
  21 +
  22 +cp -p ./script_sql/db-update-2016-06-24.sql ./script_sql/db-update-2016-06-24-build.sql
  23 +
  24 +# Execute sql update script
  25 +sed -e "s/database/$database/" -i ./script_sql/db-update-2016-06-24-build.sql
  26 +mysql --user=$username --password=$password -h $host < ./script_sql/db-update-2016-06-24-build.sql
  27 +
  28 +# Delete cakephp cache
  29 +sudo rm ../../tmp/cache/models/*
  30 +sudo rm ../../tmp/cache/persistent/*
  31 +
  32 +sudo chmod -R 770 ../../tmp
  33 +sudo chmod -R 770 ../../vendor
  34 +sudo chmod -R 770 ../../webroot
database/update/db-update-modele.sh
@@ -29,6 +29,6 @@ mysql --user=$username --password=$password -h $host &lt; ./script_sql/db-update-xx @@ -29,6 +29,6 @@ mysql --user=$username --password=$password -h $host &lt; ./script_sql/db-update-xx
29 sudo rm ../../tmp/cache/models/* 29 sudo rm ../../tmp/cache/models/*
30 sudo rm ../../tmp/cache/persistent/* 30 sudo rm ../../tmp/cache/persistent/*
31 31
32 -sudo chmod -R 777 ../../tmp  
33 -sudo chmod -R 777 ../../vendor  
34 -sudo chmod -R 777 ../../webroot 32 +sudo chmod -R 770 ../../tmp
  33 +sudo chmod -R 770 ../../vendor
  34 +sudo chmod -R 770 ../../webroot
database/update/script_sql/.gitignore
1 /db-update-2016-06-20-build.sql 1 /db-update-2016-06-20-build.sql
  2 +/db-update-2016-06-24-build.sql
database/update/script_sql/db-update-2016-06-24.sql 0 → 100755
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +use database;
  2 +
  3 +ALTER TABLE `materiels` ADD `hors_service` tinyint(1) DEFAULT NULL;
install/installation.sh
@@ -124,7 +124,7 @@ sudo chgrp -R $grp ./vendor/phpqrcode/ @@ -124,7 +124,7 @@ sudo chgrp -R $grp ./vendor/phpqrcode/
124 # Normalement, il faudrait ecrire dans app/tmp et pas dans app/webroot 124 # Normalement, il faudrait ecrire dans app/tmp et pas dans app/webroot
125 # EP 2014/12/11 chmod 775 ne suffit pas 125 # EP 2014/12/11 chmod 775 ne suffit pas
126 #chmod -R 775 ./webroot/img/ 126 #chmod -R 775 ./webroot/img/
127 -sudo chmod -R 777 ./webroot/img/ 127 +sudo chmod -R 770 ./webroot/img/
128 #sudo chown -R $grp:$grp ./webroot/img/ 128 #sudo chown -R $grp:$grp ./webroot/img/
129 sudo chgrp -R $grp ./webroot/img/ 129 sudo chgrp -R $grp ./webroot/img/
130 # TODO: il faudrait plutot faire ceci : 130 # TODO: il faudrait plutot faire ceci :
@@ -149,7 +149,7 @@ sudo chgrp -R $grp ./tmp/ @@ -149,7 +149,7 @@ sudo chgrp -R $grp ./tmp/
149 chmod -R 777 ./logs/ 149 chmod -R 777 ./logs/
150 sudo chgrp -R $grp ./logs/ 150 sudo chgrp -R $grp ./logs/
151 #Il semble qu'il manque des droits au dossier Vendor, droit trop général à réduire (identifié les composants qui ont besoin de s'éxécuter ou de se lire, pas d'écriture dans le dossier Vendor normalement...) 151 #Il semble qu'il manque des droits au dossier Vendor, droit trop général à réduire (identifié les composants qui ont besoin de s'éxécuter ou de se lire, pas d'écriture dans le dossier Vendor normalement...)
152 -sudo chmod -R 777 ./vendor/ 152 +sudo chmod -R 770 ./vendor/
153 echo "==>Done" 153 echo "==>Done"
154 154
155 155
src/Controller/AppController.php
@@ -80,7 +80,7 @@ class AppController extends Controller @@ -80,7 +80,7 @@ class AppController extends Controller
80 if($role == 'Super Administrateur') return true; 80 if($role == 'Super Administrateur') return true;
81 81
82 //Pour tout le monde 82 //Pour tout le monde
83 - if (in_array($action, ['index', 'find', 'view', 'creer', 'add', 'getNextDate'])) return true; 83 + if (in_array($action, ['index', 'find', 'view', 'creer', 'add', 'getNextDate', 'getDateGarantie'])) return true;
84 84
85 85
86 // Par défaut refuser 86 // Par défaut refuser
src/Controller/MaterielsController.php
@@ -170,7 +170,18 @@ class MaterielsController extends AppController @@ -170,7 +170,18 @@ class MaterielsController extends AppController
170 $this->set('STATUS', $this->passedArgs[0]); 170 $this->set('STATUS', $this->passedArgs[0]);
171 } 171 }
172 172
173 - if(!(in_array($this->role, ['Administration', 'Administration Plus', 'Super Administrateur']))) { 173 + $GM = $this->request->query('GM');
  174 + if(isset($GM)) {
  175 + $condition = ['Materiels.groupes_metier_id =' => $this->request->query('GM'), 'Materiels.status !=' => 'ARCHIVED'];
  176 + }
  177 +
  178 + $GMV = $this->request->query('GMV');
  179 + if(isset($GMV)) {
  180 + $condition = ['Materiels.groupes_metier_id =' => $this->request->query('GMV'), 'Materiels.status =' => 'CREATED', 'Materiels.status !=' => 'ARCHIVED'];
  181 + }
  182 +
  183 +
  184 + if($this->role == 'Utilisateur') {
174 $condition = ['Materiels.status !=' => 'ARCHIVED']; 185 $condition = ['Materiels.status !=' => 'ARCHIVED'];
175 } 186 }
176 187
@@ -363,6 +374,13 @@ class MaterielsController extends AppController @@ -363,6 +374,13 @@ class MaterielsController extends AppController
363 $materiel->set('date_archivage', date('Y-m-d')); 374 $materiel->set('date_archivage', date('Y-m-d'));
364 } 375 }
365 376
  377 + if($newStatus == 'VALIDATED') {
  378 + if(!isset($materiel->nom_responsable) || !isset($materiel->fournisseur) || !isset($materiel->numero_commande) || !isset($materiel->organisme_id) || !isset($materiel->date_reception) || !isset($materiel->prix_ht)) {
  379 + $this->Flash->success('Pour valider un matériel, les champs suivants ne doivent pas être vide : Nom propriétaire, Fournisseur, Numéro de commande, Organisme, prix et date de reception');
  380 + return $this->redirect(['action' => 'edit', $id]);
  381 + }
  382 + }
  383 +
366 if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) { 384 if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) {
367 $this->Flash->success(__($message)); 385 $this->Flash->success(__($message));
368 $this->sendEmailToManagement($id); 386 $this->sendEmailToManagement($id);
src/Controller/SuivisController.php
@@ -58,12 +58,19 @@ class SuivisController extends AppController @@ -58,12 +58,19 @@ class SuivisController extends AppController
58 */ 58 */
59 public function index() 59 public function index()
60 { 60 {
  61 + $condition = '';
  62 +
  63 + $GM = $this->request->query('GM');
  64 + if(isset($GM)) {
  65 + $condition = ['Suivis.groupes_metier_id =' => $this->request->query('GM')];
  66 + }
  67 +
61 $this->paginate = [ 68 $this->paginate = [
62 'contain' => ['Materiels', 'TypeSuivis'] 69 'contain' => ['Materiels', 'TypeSuivis']
63 ]; 70 ];
64 - $suivis = $this->paginate($this->Suivis); 71 + $suivis = $this->paginate($this->Suivis->find('all', ['conditions' => $condition]));
65 72
66 - $this->set('nbSuivis', $this->Suivis->find('all')->count()); 73 + $this->set('nbSuivis', $this->Suivis->find('all', ['conditions' => $condition])->count());
67 74
68 $this->set(compact('suivis')); 75 $this->set(compact('suivis'));
69 $this->set('_serialize', ['suivis']); 76 $this->set('_serialize', ['suivis']);
src/Model/Entity/Materiel.php
@@ -48,6 +48,7 @@ use Cake\ORM\Entity; @@ -48,6 +48,7 @@ use Cake\ORM\Entity;
48 * @property int $organisme_id 48 * @property int $organisme_id
49 * @property \App\Model\Entity\Organisme $organisme 49 * @property \App\Model\Entity\Organisme $organisme
50 * @property int $site_id 50 * @property int $site_id
  51 + * @property bool $hors_service
51 * @property \App\Model\Entity\Site $site 52 * @property \App\Model\Entity\Site $site
52 * @property \App\Model\Entity\Document[] $documents 53 * @property \App\Model\Entity\Document[] $documents
53 * @property \App\Model\Entity\Emprunt[] $emprunts 54 * @property \App\Model\Entity\Emprunt[] $emprunts
src/Model/Table/MaterielsTable.php
@@ -161,6 +161,11 @@ class MaterielsTable extends AppTable @@ -161,6 +161,11 @@ class MaterielsTable extends AppTable
161 ->allowEmpty('etiquette'); 161 ->allowEmpty('etiquette');
162 162
163 $validator 163 $validator
  164 + ->boolean('hors_service')
  165 + ->allowEmpty('hors_service');
  166 +
  167 +
  168 + $validator
164 ->notEmpty('site_id', 'Ce champ doit être rempli'); 169 ->notEmpty('site_id', 'Ce champ doit être rempli');
165 170
166 $validator 171 $validator
src/Template/Layout/default.ctp
@@ -94,7 +94,7 @@ $cakeDescription = &#39;Labinvent 2&#39;; @@ -94,7 +94,7 @@ $cakeDescription = &#39;Labinvent 2&#39;;
94 </i></td> 94 </i></td>
95 <td id="version"> 95 <td id="version">
96 <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) --> 96 <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) -->
97 - <font color="black">VERSION 2.4.6.9 (23/06/2016)</font> 97 + <font color="black">VERSION 2.4.7.0 (24/06/2016)</font>
98 </td> 98 </td>
99 </tr> 99 </tr>
100 </table> 100 </table>
src/Template/Materiels/edit.ctp
@@ -21,6 +21,7 @@ if ($IS_VALIDATED) @@ -21,6 +21,7 @@ if ($IS_VALIDATED)
21 'materiel_technique', 21 'materiel_technique',
22 'site_id', 22 'site_id',
23 'date_acquisition', 23 'date_acquisition',
  24 + 'date_reception',
24 'organisme_id', 25 'organisme_id',
25 'prix_ht' 26 'prix_ht'
26 ), 27 ),
@@ -48,6 +49,10 @@ if ($IS_VALIDATED) @@ -48,6 +49,10 @@ if ($IS_VALIDATED)
48 49
49 ]); 50 ]);
50 51
  52 + if(in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur']) || ($role == 'Utilisateur' && (in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]))) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  53 + echo $this->Form->input('hors_service', ['label' => 'Appareil hors_service']);
  54 + }
  55 +
51 echo $this->Form->input('sur_categorie_id', [ 56 echo $this->Form->input('sur_categorie_id', [
52 'label' => 'Domaine', 57 'label' => 'Domaine',
53 'options' => $surCategories, 58 'options' => $surCategories,
src/Template/Materiels/view.ctp
@@ -2,8 +2,14 @@ @@ -2,8 +2,14 @@
2 <div class="materiels view"> 2 <div class="materiels view">
3 3
4 <h2> 4 <h2>
5 - <?php if (h($materiel->status) == 'ARCHIVED') echo '<i class="icon-inbox"></i> '; ?>  
6 - <?= h($materiel->designation) ?> 5 + <?php if (h($materiel->status) == 'ARCHIVED') echo '<i class="icon-inbox"></i> ';
  6 + $panne = '';
  7 + if(h($materiel->hors_service)) {
  8 + $panne = ' (HORS SERVICE)';
  9 + }
  10 + ?>
  11 +
  12 + <?= h($materiel->designation).$panne?>
7 <span style="font-size: 70%; color: grey;"> 13 <span style="font-size: 70%; color: grey;">
8 <?= h($materiel->numero_laboratoire) ?> 14 <?= h($materiel->numero_laboratoire) ?>
9 <?php if (h($materiel->status) == 'ARCHIVED') echo ' (Archivé)'; ?> 15 <?php if (h($materiel->status) == 'ARCHIVED') echo ' (Archivé)'; ?>
@@ -202,7 +208,9 @@ @@ -202,7 +208,9 @@
202 $displayElement(__('Date d\'achat'), h($materiel->date_acquisition)); 208 $displayElement(__('Date d\'achat'), h($materiel->date_acquisition));
203 209
204 $displayElement(__('Date de reception'), h($materiel->date_reception)); 210 $displayElement(__('Date de reception'), h($materiel->date_reception));
205 - $displayElement(__('Duree garantie'), h($materiel->duree_garantie).' '.h($materiel->unite_duree_garantie)); 211 + if(!empty(h($materiel->duree_garntie))) {
  212 + $displayElement(__('Duree garantie'), h($materiel->duree_garantie).' '.h($materiel->unite_duree_garantie));
  213 + }
206 $displayElement(__('Date fin de garantie'), h($materiel->date_fin_garantie)); 214 $displayElement(__('Date fin de garantie'), h($materiel->date_fin_garantie));
207 215
208 $displayElement(__('Statut'), h($materiel->status)); 216 $displayElement(__('Statut'), h($materiel->status));
src/Template/Pages/home_app.ctp
@@ -20,6 +20,19 @@ @@ -20,6 +20,19 @@
20 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).' </td></tr>'; 20 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).' </td></tr>';
21 echo '</table>'; 21 echo '</table>';
22 } 22 }
  23 +
  24 + //Utilisateur responsable
  25 + if ($role == 'Responsable') {
  26 + echo '<table cellpadding="0" cellspacing="0" style="width: 800px;">';
  27 + echo '<tr><th></th></tr>';
  28 + echo '<tr><td> '.$this->Html->link('Voir les matériels de mon groupe métier', [
  29 + 'controller' => 'materiels', 'action' => 'index', 'GM' => $userConnected->groupes_metier_id]).' </td></tr>';
  30 + echo '<tr><td> '.$this->Html->link('Voir les matériels de mon groupe métier à valider', [
  31 + 'controller' => 'materiels', 'action' => 'index', 'GMV' => $userConnected->groupes_metier_id]).' </td></tr>';
  32 + echo '<tr><td> '.$this->Html->link('Voir les suivis des materiels donc je suis responsable', [
  33 + 'controller' => 'suivis', 'action' => 'index', 'GM' => $userConnected->groupes_metier_id]).' </td></tr>';
  34 + echo '</table>';
  35 + }
23 ?> 36 ?>
24 37
25 </div> 38 </div>
tests/Fixture/MaterielsFixture.php
@@ -53,7 +53,8 @@ class MaterielsFixture extends TestFixture @@ -53,7 +53,8 @@ class MaterielsFixture extends TestFixture
53 'date_reception' => ['type' => 'date', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null], 53 'date_reception' => ['type' => 'date', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
54 'organisme_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null], 54 'organisme_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
55 'site_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => '2', 'comment' => '', 'precision' => null, 'autoIncrement' => null], 55 'site_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => '2', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
56 - '_indexes' => [ 56 + 'hors_service' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
  57 + '_indexes' => [
57 'fk_administrative_materials_sub_categories1' => ['type' => 'index', 'columns' => ['sous_categorie_id'], 'length' => []], 58 'fk_administrative_materials_sub_categories1' => ['type' => 'index', 'columns' => ['sous_categorie_id'], 'length' => []],
58 'fk_materials_thematic_group1' => ['type' => 'index', 'columns' => ['groupes_thematique_id'], 'length' => []], 59 'fk_materials_thematic_group1' => ['type' => 'index', 'columns' => ['groupes_thematique_id'], 'length' => []],
59 'fk_materials_work_group1' => ['type' => 'index', 'columns' => ['groupes_metier_id'], 'length' => []], 60 'fk_materials_work_group1' => ['type' => 'index', 'columns' => ['groupes_metier_id'], 'length' => []],