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 50  
51 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 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 95  
92 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 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 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 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 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 416 Insert into sites(id, nom) values (9, 'N/A');
417 417  
418 418 -- Insertion par défaut pour la table configuration
... ...
database/update/db-update-2016-06-24.sh 0 → 100755
... ... @@ -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 29 sudo rm ../../tmp/cache/models/*
30 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 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 @@
  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 124 # Normalement, il faudrait ecrire dans app/tmp et pas dans app/webroot
125 125 # EP 2014/12/11 chmod 775 ne suffit pas
126 126 #chmod -R 775 ./webroot/img/
127   -sudo chmod -R 777 ./webroot/img/
  127 +sudo chmod -R 770 ./webroot/img/
128 128 #sudo chown -R $grp:$grp ./webroot/img/
129 129 sudo chgrp -R $grp ./webroot/img/
130 130 # TODO: il faudrait plutot faire ceci :
... ... @@ -149,7 +149,7 @@ sudo chgrp -R $grp ./tmp/
149 149 chmod -R 777 ./logs/
150 150 sudo chgrp -R $grp ./logs/
151 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 153 echo "==>Done"
154 154  
155 155  
... ...
src/Controller/AppController.php
... ... @@ -80,7 +80,7 @@ class AppController extends Controller
80 80 if($role == 'Super Administrateur') return true;
81 81  
82 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 86 // Par défaut refuser
... ...
src/Controller/MaterielsController.php
... ... @@ -170,7 +170,18 @@ class MaterielsController extends AppController
170 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 185 $condition = ['Materiels.status !=' => 'ARCHIVED'];
175 186 }
176 187  
... ... @@ -363,6 +374,13 @@ class MaterielsController extends AppController
363 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 384 if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) {
367 385 $this->Flash->success(__($message));
368 386 $this->sendEmailToManagement($id);
... ...
src/Controller/SuivisController.php
... ... @@ -58,12 +58,19 @@ class SuivisController extends AppController
58 58 */
59 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 68 $this->paginate = [
62 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 75 $this->set(compact('suivis'));
69 76 $this->set('_serialize', ['suivis']);
... ...
src/Model/Entity/Materiel.php
... ... @@ -48,6 +48,7 @@ use Cake\ORM\Entity;
48 48 * @property int $organisme_id
49 49 * @property \App\Model\Entity\Organisme $organisme
50 50 * @property int $site_id
  51 + * @property bool $hors_service
51 52 * @property \App\Model\Entity\Site $site
52 53 * @property \App\Model\Entity\Document[] $documents
53 54 * @property \App\Model\Entity\Emprunt[] $emprunts
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -161,6 +161,11 @@ class MaterielsTable extends AppTable
161 161 ->allowEmpty('etiquette');
162 162  
163 163 $validator
  164 + ->boolean('hors_service')
  165 + ->allowEmpty('hors_service');
  166 +
  167 +
  168 + $validator
164 169 ->notEmpty('site_id', 'Ce champ doit être rempli');
165 170  
166 171 $validator
... ...
src/Template/Layout/default.ctp
... ... @@ -94,7 +94,7 @@ $cakeDescription = &#39;Labinvent 2&#39;;
94 94 </i></td>
95 95 <td id="version">
96 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 98 </td>
99 99 </tr>
100 100 </table>
... ...
src/Template/Materiels/edit.ctp
... ... @@ -21,6 +21,7 @@ if ($IS_VALIDATED)
21 21 'materiel_technique',
22 22 'site_id',
23 23 'date_acquisition',
  24 + 'date_reception',
24 25 'organisme_id',
25 26 'prix_ht'
26 27 ),
... ... @@ -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 56 echo $this->Form->input('sur_categorie_id', [
52 57 'label' => 'Domaine',
53 58 'options' => $surCategories,
... ...
src/Template/Materiels/view.ctp
... ... @@ -2,8 +2,14 @@
2 2 <div class="materiels view">
3 3  
4 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 13 <span style="font-size: 70%; color: grey;">
8 14 <?= h($materiel->numero_laboratoire) ?>
9 15 <?php if (h($materiel->status) == 'ARCHIVED') echo ' (Archivé)'; ?>
... ... @@ -202,7 +208,9 @@
202 208 $displayElement(__('Date d\'achat'), h($materiel->date_acquisition));
203 209  
204 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 214 $displayElement(__('Date fin de garantie'), h($materiel->date_fin_garantie));
207 215  
208 216 $displayElement(__('Statut'), h($materiel->status));
... ...
src/Template/Pages/home_app.ctp
... ... @@ -20,6 +20,19 @@
20 20 'controller' => 'materiels', 'action' => 'index', 'TOBEARCHIVED']).' </td></tr>';
21 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 38 </div>
... ...
tests/Fixture/MaterielsFixture.php
... ... @@ -53,7 +53,8 @@ class MaterielsFixture extends TestFixture
53 53 'date_reception' => ['type' => 'date', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
54 54 'organisme_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
55 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 58 'fk_administrative_materials_sub_categories1' => ['type' => 'index', 'columns' => ['sous_categorie_id'], 'length' => []],
58 59 'fk_materials_thematic_group1' => ['type' => 'index', 'columns' => ['groupes_thematique_id'], 'length' => []],
59 60 'fk_materials_work_group1' => ['type' => 'index', 'columns' => ['groupes_metier_id'], 'length' => []],
... ...