Commit 4dae83a2d48a5806c596ec7d4d4a174633e68186

Authored by Alexandre
1 parent 644e6326

Version: 2.5.1.0

!!! Se placer dans database/update et exécuter le script
./db-update-2016-06-28.sh !!!

Confirmation suppression doc + organisation configuration/form + taille
doc config + photo materiel + liste type document défaut + acl documents
+ bugfixes

Demande (terminé) : https://projects.irap.omp.eu/issues/3905
					https://projects.irap.omp.eu/issues/3790
					https://projects.irap.omp.eu/issues/3904

Demande (en cours) : https://projects.irap.omp.eu/issues/3716
	   
Version majeure en cours (2.5): https://projects.irap.omp.eu/versions/99

ROADMAP: https://projects.irap.omp.eu/projects/labinvent/roadmap
README-LABINVENT.md
... ... @@ -50,19 +50,18 @@ Logiciel testé et validé sur les configurations suivantes :
50 50  
51 51 VERSION ACTUELLE
52 52  
53   -Date: 27/06/2016
54   -Version: 2.5.0.0
  53 +Date: 28/06/2016
  54 +Version: 2.5.1.0
55 55  
56   -!!! Se placer dans database/update et exécuter le script ./db-update-2016-06-27.sh !!!
  56 +!!! Se placer dans database/update et exécuter le script ./db-update-2016-06-28.sh !!!
57 57  
58   -Documents + Type documents + Réorganisation configuration générale (view) + Bugfixes (numero de labo, ... )
  58 +Confirmation suppression doc + organisation configuration/form + taille doc config + photo materiel + liste type document défaut + acl documents + bugfixes
59 59  
60   -Demande (terminé) : https://projects.irap.omp.eu/issues/3789
61   - https://projects.irap.omp.eu/issues/3762
62   - https://projects.irap.omp.eu/issues/3791
  60 +Demande (terminé) : https://projects.irap.omp.eu/issues/3905
  61 + https://projects.irap.omp.eu/issues/3790
  62 + https://projects.irap.omp.eu/issues/3904
63 63  
64   -Demande (en cours) : https://projects.irap.omp.eu/issues/3790
65   - https://projects.irap.omp.eu/issues/3716
  64 +Demande (en cours) : https://projects.irap.omp.eu/issues/3716
66 65  
67 66 Version majeure en cours (2.5): https://projects.irap.omp.eu/versions/99
68 67  
... ... @@ -101,6 +100,10 @@ Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/c
101 100  
102 101 MODIFICATIONS STRUCTURELLES A FAIRE MANUELLEMENT APRES LA MISE A JOUR (git pull)
103 102  
  103 +28/06/16 (v2.5.1.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-28.sh
  104 +
  105 +27/06/16 (v2.5.0.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-27.sh
  106 +
104 107 24/06/16 (v2.4.7.2) Se placer dans database/update et exécuter le script ./db-update-2016-06-24-2.sh
105 108  
106 109 24/06/16 (v2.4.7.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-24.sh
... ...
database/labinvent_2.1_12-05-16.sql
... ... @@ -73,11 +73,11 @@ CREATE TABLE IF NOT EXISTS `documents` (
73 73 `id` int(11) NOT NULL AUTO_INCREMENT,
74 74 `type_doc` varchar(20) DEFAULT NULL,
75 75 `description` text DEFAULT NULL,
76   - `chemin` varchar(200) DEFAULT NULL,
77 76 `nom` VARCHAR(100) DEFAULT NULL,
78 77 `materiel_id` int(11) DEFAULT NULL,
79 78 `suivi_id` int(11) DEFAULT NULL,
80 79 `type_document_id` int(11) DEFAULT NULL,
  80 + `photo` tinyint(1) DEFAULT NULL,
81 81 PRIMARY KEY (`id`),
82 82 KEY `fk_documents_materiel_id` (`materiel_id`),
83 83 KEY `fk_documents_suivi_id` (`suivi_id`),
... ... @@ -182,6 +182,7 @@ CREATE TABLE IF NOT EXISTS `materiels` (
182 182 `date_fin_garantie` date DEFAULT NULL,
183 183 `duree_garantie` int(10) DEFAULT NULL,
184 184 `unite_duree_garantie` varchar (30) DEFAULT NULL,
  185 + `photo_id` int(11) DEFAULT NULL,
185 186 PRIMARY KEY (`id`),
186 187 UNIQUE KEY `numero_irap` (`numero_laboratoire`),
187 188 KEY `fk_administrative_materials_sub_categories1` (`sous_categorie_id`),
... ... @@ -298,7 +299,6 @@ CREATE TABLE `type_documents` (
298 299 PRIMARY KEY (`id`)
299 300 );
300 301  
301   -Insert into type_documents(id, nom) values (1, 'N/A');
302 302 -- --------------------------------------------------------
303 303 --
304 304 -- Structure de la table `users`
... ... @@ -360,6 +360,7 @@ CREATE TABLE IF NOT EXISTS `configurations` (
360 360 `prix_inventaire_administratif` int( 10 ) DEFAULT '800',
361 361 `numero_labo_sans_annee` tinyint(1) DEFAULT NULL,
362 362 `date_commande_facultative` tinyint(1) DEFAULT NULL,
  363 + `taille_max_doc` int (15) DEFAULT '8000000',
363 364 PRIMARY KEY (`id`),
364 365 UNIQUE KEY `nom_UNIQUE` (`nom`)
365 366 );
... ... @@ -430,10 +431,24 @@ ALTER TABLE `users`
430 431 Insert into type_suivis(nom) values ('Réparation');
431 432 Insert into sites(id, nom) values (9, 'N/A');
432 433  
  434 +Insert into type_documents(id, nom) values (1, 'N/A');
  435 +Insert into type_documents(nom) values ('Bon de commande');
  436 +Insert into type_documents(nom) values ('Bon de livraison');
  437 +Insert into type_documents(nom) values ('Photo');
  438 +Insert into type_documents(nom) values ('Documentation technique');
  439 +Insert into type_documents(nom) values ('Spécifications');
  440 +Insert into type_documents(nom) values ('CR de maintenance');
  441 +Insert into type_documents(nom) values ('CR d\'étalonnage');
  442 +Insert into type_documents(nom) values ('Suivi de panne');
  443 +Insert into type_documents(nom) values ('Certificat de garantie');
  444 +Insert into type_documents(nom) values ('Certificat de conformité');
  445 +Insert into type_documents(nom) values ('Manuel d\'utilisation');
  446 +
433 447 -- Insertion par défaut pour la table configuration
434 448 Insert into `configurations`(`nom`, `mode_install`, `mode_debug`, `use_ldap`, `host_ldap`, `port_ldap`, `authentificationType_ldap`, `baseDn_ldap`, `filter_ldap`, `labName`, `labNameShort`, `labPresent`, `labUmr`, `hasPrinter`, `emailGuest1`, `emailGuest2`, `emailGuest3`) values ('default', '1', '0', '0', '', '', 'xxx', '', '', 'LABONAME', 'LABO', 'du ', '', '0', '', '', '');
435 449  
436 450  
  451 +
437 452 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
438 453 /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
439 454 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
... ...
database/update/db-update-2016-06-28.sh 0 → 100755
... ... @@ -0,0 +1,38 @@
  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 +if [ ! -d "../../webroot/img/photos" ]; then
  15 + mkdir ../../webroot/img/photos
  16 +fi
  17 +
  18 +
  19 +# Get login, pass, dbname, and hostname
  20 +username=$(grep "/\*d\*/'username'" ../../config/app.php | cut -d"'" -f4)
  21 +password=$(grep "/\*d\*/'password'" ../../config/app.php | cut -d"'" -f4)
  22 +database=$(grep "/\*d\*/'database'" ../../config/app.php | cut -d"'" -f4)
  23 +host=$(grep "/\*d\*/'host'" ../../config/app.php | cut -d"'" -f4)
  24 +
  25 +
  26 +cp -p ./script_sql/db-update-2016-06-28.sql ./script_sql/db-update-2016-06-28-build.sql
  27 +
  28 +# Execute sql update script
  29 +sed -e "s/database/$database/" -i ./script_sql/db-update-2016-06-28-build.sql
  30 +mysql --user=$username --password=$password -h $host < ./script_sql/db-update-2016-06-28-build.sql
  31 +
  32 +# Delete cakephp cache
  33 +sudo rm ../../tmp/cache/models/*
  34 +sudo rm ../../tmp/cache/persistent/*
  35 +
  36 +sudo chmod -R 777 ../../tmp
  37 +sudo chmod -R 777 ../../vendor
  38 +sudo chmod -R 777 ../../webroot
... ...
database/update/script_sql/db-update-2016-06-28.sql 0 → 100755
... ... @@ -0,0 +1,20 @@
  1 +use database;
  2 +
  3 +ALTER TABLE `materiels` ADD `photo_id` int(11) DEFAULT NULL;
  4 +
  5 +ALTER TABLE `configurations` ADD `taille_max_doc` int (15) DEFAULT '8000000';
  6 +
  7 +ALTER TABLE `documents` ADD `photo` tinyint(1) DEFAULT NULL;
  8 +
  9 +Insert into type_documents(nom) values ('Bon de commande');
  10 +Insert into type_documents(nom) values ('Bon de livraison');
  11 +Insert into type_documents(nom) values ('Photo');
  12 +Insert into type_documents(nom) values ('Documentation technique');
  13 +Insert into type_documents(nom) values ('Spécifications');
  14 +Insert into type_documents(nom) values ('CR de maintenance');
  15 +Insert into type_documents(nom) values ('CR d\'étalonnage');
  16 +Insert into type_documents(nom) values ('Suivi de panne');
  17 +
  18 +Insert into type_documents(nom) values ('Certificat de garantie');
  19 +Insert into type_documents(nom) values ('Certificat de conformité');
  20 +Insert into type_documents(nom) values ('Manuel d\'utilisation');
... ...
install/installation.sh
... ... @@ -98,6 +98,9 @@ fi
98 98 if [ ! -d "./webroot/img/qrcodes" ]; then
99 99 mkdir ./webroot/img/qrcodes
100 100 fi
  101 +if [ ! -d "./webroot/img/photos" ]; then
  102 + mkdir ./webroot/img/photos
  103 +fi
101 104  
102 105 if [ ! -d "./vendor/phpunit" ]; then
103 106 ./composer.phar require --dev phpunit/phpunit
... ...
src/Controller/DocumentsController.php
... ... @@ -35,9 +35,17 @@ class DocumentsController extends AppController
35 35 return true;
36 36 }
37 37 }
  38 +
  39 + if($action == 'delete') {
  40 + if ($this->userHasRole('Administration')) {
  41 + return true;
  42 + }
  43 + }
38 44  
39 45 //Pour tout le monde
40 46 if (in_array($action, ['view', 'add', 'ficheMateriel'])) return true;
  47 +
  48 + return false;
41 49 }
42 50  
43 51 /**
... ... @@ -96,9 +104,27 @@ class DocumentsController extends AppController
96 104 if ($this->request->is('post')) {
97 105 $document = $this->Documents->patchEntity($document, $this->request->data);
98 106  
  107 + if(isset($this->passedArgs[2]) && $this->passedArgs[2] == 'photo') {
  108 + $document->set('photo', 1);
  109 + }
  110 +
99 111 if ($this->Documents->save($document)) {
100 112 $this->Flash->success(__('Le fichier a bien été ajouté.'));
101 113  
  114 + if(isset($this->passedArgs[2]) && $this->passedArgs[2] == 'photo') {
  115 + $materielTable = TableRegistry::get('Materiels');
  116 + $materiel = $materielTable->get($document->materiel_id);
  117 +
  118 + $photoIdOld = $materiel->get('photo_id');
  119 + if(isset($photoIdOld)) {
  120 + $docOld = TableRegistry::get('Documents')->get($photoIdOld);
  121 + $this->Documents->delete($docOld);
  122 + }
  123 +
  124 + $materiel->set('photo_id', $document->id);
  125 + $materielTable->save($materiel);
  126 + }
  127 +
102 128 $id = $document->materiel_id;
103 129 if(empty($id)) {
104 130 $id = $document->suivi_id;
... ... @@ -120,6 +146,10 @@ class DocumentsController extends AppController
120 146 $suivi = $this->Documents->Suivis->find('list', [ 'keyField' => 'id', 'valueField' => 'id'])->where(['id =' => $this->passedArgs[0]]);
121 147 $this->set('suivi', $suivi);
122 148 }
  149 +
  150 + if(isset($this->passedArgs[2]) && $this->passedArgs[2] == 'photo') {
  151 + $this->set('photo', 1);
  152 + }
123 153  
124 154  
125 155 $typesD = $this->Documents->TypeDocuments->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'TypeDocuments.nom']);
... ... @@ -141,6 +171,14 @@ class DocumentsController extends AppController
141 171 $this->request->allowMethod(['post', 'delete']);
142 172 $document = $this->Documents->get($id);
143 173  
  174 + if($document->photo) {
  175 + $materielTable = TableRegistry::get('Materiels');
  176 + $materiel = $materielTable->get($document->materiel_id);
  177 +
  178 + $materiel->set('photo_id', null);
  179 + $materielTable->save($materiel);
  180 + }
  181 +
144 182 if ($this->Documents->delete($document)) {
145 183 $this->Flash->success(__('Le fichier a bien été supprimé.'));
146 184 } else {
... ...
src/Controller/MaterielsController.php
... ... @@ -217,6 +217,11 @@ class MaterielsController extends AppController
217 217 $typeSuivis = TableRegistry::get('TypeSuivis');
218 218 $typeDocuments = TableRegistry::get('TypeDocuments');
219 219  
  220 + if($materiel->photo_id != null) {
  221 + $imgMateriel = $materiel->photo_id.'.'.TableRegistry::get('Documents')->get($materiel->photo_id)->get('type_doc');
  222 + $this->set('imgMateriel', $imgMateriel);
  223 + }
  224 +
220 225 $this->set('sites', $sites);
221 226 $this->set('typeSuivis', $typeSuivis);
222 227 $this->set('typeDocuments', $typeDocuments);
... ...
src/Model/Entity/Configuration.php
... ... @@ -39,6 +39,7 @@ use Cake\ORM\Entity;
39 39 * @property bool $date_commande_facultative
40 40 * @property bool $numero_labo_sans_annee
41 41 * @property int $prix_inventaire_administratif
  42 + * @property int $taille_max_doc
42 43 */
43 44 class Configuration extends Entity
44 45 {
... ...
src/Model/Entity/Document.php
... ... @@ -11,6 +11,7 @@ use Cake\ORM\Entity;
11 11 * @property string $chemin
12 12 * @property string $description
13 13 * @property string $nom
  14 + * @property bool $photo
14 15 * @property int $materiel_id
15 16 * @property \App\Model\Entity\Materiel $materiel
16 17 * @property int $suivi_id
... ...
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 int $photo_id
51 52 * @property bool $hors_service
52 53 * @property \App\Model\Entity\Site $site
53 54 * @property \App\Model\Entity\Document[] $documents
... ...
src/Model/Table/AppTable.php
... ... @@ -20,7 +20,7 @@ class AppTable extends Table
20 20 // autoriser les caracteres spéciaux (pour une PHRASE ou paragraphe) :
21 21 // check_string PLUS ces symboles ====> & * > < ? % ! : , " '
22 22 public function check_string_with_some_special_cars($check) {
23   - return (bool) preg_match('/^['.$this->string.'?%!:,&*><\-\="'.']*$/', $check);
  23 + return (bool) preg_match('/^['.$this->string.'?%!:,&#*><\-\="'.']*$/', $check);
24 24 }
25 25  
26 26 public function check_mail($check) {
... ...
src/Model/Table/ConfigurationsTable.php
... ... @@ -80,7 +80,7 @@ class ConfigurationsTable extends AppTable
80 80 ->notEmpty('labNameShort');
81 81  
82 82 $validator
83   - ->allowEmpty('labPresent');
  83 + ->notEmpty('labPresent');
84 84  
85 85 $validator
86 86 ->allowEmpty('labUmr');
... ... @@ -136,7 +136,10 @@ class ConfigurationsTable extends AppTable
136 136 ->allowEmpty('test');
137 137  
138 138 $validator
139   - ->allowEmpty('prix_inventaire_administratif');
  139 + ->notEmpty('prix_inventaire_administratif');
  140 +
  141 + $validator
  142 + ->notEmpty('taille_max_doc');
140 143  
141 144 $validator
142 145 ->allowEmpty('date_commande_facultative');
... ...
src/Model/Table/DocumentsTable.php
... ... @@ -6,6 +6,7 @@ use Cake\ORM\Query;
6 6 use Cake\ORM\RulesChecker;
7 7 use Cake\ORM\Table;
8 8 use Cake\Validation\Validator;
  9 +use Cake\ORM\TableRegistry;
9 10  
10 11 /**
11 12 * Documents Model
... ... @@ -73,6 +74,9 @@ class DocumentsTable extends AppTable
73 74  
74 75 $validator
75 76 ->allowEmpty('materiel_id');
  77 +
  78 + $validator
  79 + ->allowEmpty('photo');
76 80  
77 81 $validator
78 82 ->allowEmpty('suivi_id');
... ... @@ -90,10 +94,13 @@ class DocumentsTable extends AppTable
90 94 */
91 95 public function buildRules(RulesChecker $rules)
92 96 {
  97 + $config = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
  98 +
93 99 $checkSizeDoc= function($entity) {
  100 + $config = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
94 101 $size = $entity->get('chemin_file')['size'];
95 102 if(isset($size)) {
96   - if($size > 1000000) {
  103 + if($size > $config->taille_max_doc) {
97 104 return false;
98 105 } else {
99 106 return true;
... ... @@ -104,11 +111,28 @@ class DocumentsTable extends AppTable
104 111  
105 112 };
106 113  
  114 + $checkPhoto= function($entity) {
  115 + if($entity->get('photo')) {
  116 + $extension = strtolower(pathinfo($entity->get('chemin_file')['name'] , PATHINFO_EXTENSION));
  117 + return in_array($extension, ['png', 'jpg', 'jpeg']);
  118 + }
  119 + else {
  120 + return true;
  121 + }
  122 + };
  123 +
  124 +
107 125 $rules->add($checkSizeDoc, [
108 126 'errorField' => 'chemin_file',
109   - 'message' => 'Le fichier ne peut pas avoir une taille supérieur à 8mo.'
  127 + 'message' => 'Le fichier ne peut pas avoir une taille supérieur à '.substr($config->taille_max_doc/(1024*1024), 0, 4).' Mo.'
110 128 ]);
111 129  
  130 + $rules->add($checkPhoto, [
  131 + 'errorField' => 'chemin_file',
  132 + 'message' => 'La photo doit etre au format png, jpg (ou jpeg).'
  133 + ]);
  134 +
  135 +
112 136 return $rules;
113 137 }
114 138  
... ... @@ -144,7 +168,12 @@ class DocumentsTable extends AppTable
144 168 $file = $entity->get('chemin_file');
145 169 if(!empty($file['tmp_name'])) {
146 170 $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
147   - move_uploaded_file($file['tmp_name'], 'files'.DS.$entity->get('id').'.'.$extension);
  171 + if($entity->get('photo')) {
  172 + move_uploaded_file($file['tmp_name'], 'img'.DS.'photos'.DS.$entity->get('id').'.'.$extension);
  173 + }
  174 + else {
  175 + move_uploaded_file($file['tmp_name'], 'files'.DS.$entity->get('id').'.'.$extension);
  176 + }
148 177 }
149 178  
150 179 }
... ... @@ -154,8 +183,12 @@ class DocumentsTable extends AppTable
154 183 **/
155 184 public function afterDelete($event, $entity, $options) {
156 185 $nomFichier = $entity->get('id').'.'.$entity->get('type_doc');
157   - unlink('files'.DS.$nomFichier);
158   -
  186 + if($entity->get('photo')) {
  187 + unlink('img'.DS.'photos'.DS.$nomFichier);
  188 + }
  189 + else {
  190 + unlink('files'.DS.$nomFichier);
  191 + }
159 192 }
160 193  
161 194 }
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -165,6 +165,9 @@ class MaterielsTable extends AppTable
165 165 ->allowEmpty('date_archivage');
166 166  
167 167 $validator
  168 + ->allowEmpty('photo_id');
  169 +
  170 + $validator
168 171 ->boolean('etiquette')
169 172 ->allowEmpty('etiquette');
170 173  
... ...
src/Template/Configurations/edit.ctp
... ... @@ -5,48 +5,83 @@
5 5  
6 6 <fieldset>
7 7 <?php
  8 + echo '<h3 id="t_informations" style="cursor: pointer;">';
  9 + echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_informations"></i>';
  10 + echo '<span style="text-decoration: underline;">Modes</span>';
  11 + echo '</h3>';
  12 + echo '<div id="informations" style="margin-bottom: 20px;">';
  13 + echo $this->Form->input('mode_install');
  14 + echo $this->Form->input('mode_debug');
  15 + echo '</div>';
  16 +
  17 +
  18 + echo '<h3 id="t_informations_admin" style="cursor: pointer;">';
  19 + echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_informations_admin"></i>';
  20 + echo '<span style="text-decoration: underline;">Laboratoire</span>';
  21 + echo '</h3>';
  22 + echo '<div id="informations_admin" style="margin-bottom: 20px;">';
  23 + echo $this->Form->input('labName', ['label' => 'Nom complet du Labo']);
  24 + echo $this->Form->input('labNameShort', ['label' => 'Nom court du Labo']);
  25 + echo $this->Form->input('labPresent', ['label' => 'Liaison présentation nom du Labo']);
  26 + echo $this->Form->input('labUmr', ['label' => 'UMR du Labo']);
  27 + echo '</div>';
8 28  
  29 +
  30 + echo '<h3 id="t_suivis" style="cursor: pointer;">';
  31 + echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_suivis"></i>';
  32 + echo '<span style="text-decoration: underline;">Divers</span>';
  33 + echo '</h3>';
  34 + echo '<div id="suivis" style="margin-bottom: 20px;">';
  35 + echo $this->Form->input('hasPrinter', ['label' => 'Imprimante disponible']);
  36 +
  37 + echo $this->Form->input('numero_labo_sans_annee', ['label' => 'Numero labo sans année']);
  38 + echo $this->Form->input('date_commande_facultative', ['label' => 'Champ date commande non obligatoire']);
  39 +
  40 + echo $this->Form->input('prix_inventaire_administratif', ['label' => 'Seuil (prix) Matériel administratif']);
  41 + echo $this->Form->input('taille_max_doc', ['label' => 'Taille max documents (octets)']);
  42 +
  43 + echo $this->Form->input('nom_groupe_thematique', ['label' => 'Label groupe thématique']);
  44 + echo $this->Form->input('nom_groupe_metier', ['label' => 'Label groupe métier']);
  45 +
  46 +
  47 + echo '</div>';
  48 +
  49 +
  50 + echo '<h3 id="t_emprunts" style="cursor: pointer;">';
  51 + echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_emprunts"></i>';
  52 + echo '<span style="text-decoration: underline;">Emails</span>';
  53 + echo '</h3>';
  54 + echo '<div id="emprunts" style="margin-bottom: 20px;">';
  55 + echo $this->Form->input('envoi_mail_management_dev', ['label' => 'Ne pas envoyer les mails de management en local']);
  56 + echo $this->Form->input('sender_mail', ['label' => 'Attribut "sender" (mail)']);
  57 + echo $this->Form->input('emailGuest1', ['label' => 'Mail guest 1']);
  58 + echo $this->Form->input('emailGuest2', ['label' => 'Mail guest 2']);
  59 + echo $this->Form->input('emailGuest3', ['label' => 'Mail guest 3']);
  60 + echo $this->Form->input('emailGuest4', ['label' => 'Mail guest 4']);
  61 + echo $this->Form->input('emailGuest5', ['label' => 'Mail guest 5']);
  62 + echo $this->Form->input('emailGuest6', ['label' => 'Mail guest 6']);
  63 + echo $this->Form->input('emailGuest7', ['label' => 'Mail guest 7']);
  64 + echo $this->Form->input('emailGuest8', ['label' => 'Mail guest 8']);
  65 + echo $this->Form->input('emailGuest9', ['label' => 'Mail guest 9']);
  66 + echo $this->Form->input('emailGuest10', ['label' => 'Mail guest 10']);
  67 + echo '</div>';
  68 +
  69 +
  70 + echo '<h3 id="t_fichiers" style="cursor: pointer;">';
  71 + echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_fichiers"></i>';
  72 + echo '<span style="text-decoration: underline;">LDAP</span>';
  73 + echo '</h3>';
  74 + echo '<div id="fichiers" style="margin-bottom: 20px;">';
  75 + echo $this->Form->input('use_ldap', ['label' => 'Utilisation du LDAP', 'onchange' => 'display_ldap();']);
  76 + echo '<div id="ldap" style="border-top: 1px solid #CCC; border-bottom: 1px solid #CCC; margin-bottom: 0; background: #EEE; '.$disp.'">';
  77 + echo $this->Form->input('host_ldap', ['label' => 'Host du LDAP']);
  78 + echo $this->Form->input('port_ldap', ['label' => 'Port du LDAP']);
  79 + echo $this->Form->input('authentificationType_ldap', ['label' => 'Type d\'authentification du LDAP']);
  80 + echo $this->Form->input('baseDn_ldap', ['label' => 'Base DN du LDAP']);
  81 + echo $this->Form->input('filter_ldap', ['label' => 'Filtre du LDAP']);
  82 + echo '</div>';
  83 + echo '</div>';
9 84  
10   - echo $this->Form->input('mode_install');
11   - echo $this->Form->input('mode_debug');
12   -
13   - echo $this->Form->input('hasPrinter', ['label' => 'Imprimante disponible']);
14   -
15   - echo $this->Form->input('labName', ['label' => 'Nom complet du Labo']);
16   - echo $this->Form->input('labNameShort', ['label' => 'Nom court du Labo']);
17   - echo $this->Form->input('labPresent', ['label' => 'Liaison présentation nom du Labo']);
18   - echo $this->Form->input('labUmr', ['label' => 'UMR du Labo']);
19   -
20   - echo $this->Form->input('nom_groupe_thematique', ['label' => 'Label groupe thématique']);
21   - echo $this->Form->input('nom_groupe_metier', ['label' => 'Label groupe métier']);
22   -
23   - echo $this->Form->input('prix_inventaire_administratif', ['label' => 'Seuil (prix) Matériel administratif']);
24   -
25   -
26   - echo $this->Form->input('envoi_mail_management_dev', ['label' => 'Ne pas envoyer les mails de management en local']);
27   - echo $this->Form->input('sender_mail', ['label' => 'Attribut "sender" (mail)']);
28   - echo $this->Form->input('emailGuest1', ['label' => 'Mail guest 1']);
29   - echo $this->Form->input('emailGuest2', ['label' => 'Mail guest 2']);
30   - echo $this->Form->input('emailGuest3', ['label' => 'Mail guest 3']);
31   - echo $this->Form->input('emailGuest4', ['label' => 'Mail guest 4']);
32   - echo $this->Form->input('emailGuest5', ['label' => 'Mail guest 5']);
33   - echo $this->Form->input('emailGuest6', ['label' => 'Mail guest 6']);
34   - echo $this->Form->input('emailGuest7', ['label' => 'Mail guest 7']);
35   - echo $this->Form->input('emailGuest8', ['label' => 'Mail guest 8']);
36   - echo $this->Form->input('emailGuest9', ['label' => 'Mail guest 9']);
37   - echo $this->Form->input('emailGuest10', ['label' => 'Mail guest 10']);
38   -
39   - echo $this->Form->input('numero_labo_sans_annee', ['label' => 'Numero labo sans année']);
40   - echo $this->Form->input('date_commande_facultative', ['label' => 'Champ date commande non obligatoire']);
41   -
42   - echo $this->Form->input('use_ldap', ['label' => 'Utilisation du LDAP', 'onchange' => 'display_ldap();']);
43   - echo '<div id="ldap" style="border-top: 1px solid #CCC; border-bottom: 1px solid #CCC; margin-bottom: 0; background: #EEE; '.$disp.'">';
44   - echo $this->Form->input('host_ldap', ['label' => 'Host du LDAP']);
45   - echo $this->Form->input('port_ldap', ['label' => 'Port du LDAP']);
46   - echo $this->Form->input('authentificationType_ldap', ['label' => 'Type d\'authentification du LDAP']);
47   - echo $this->Form->input('baseDn_ldap', ['label' => 'Base DN du LDAP']);
48   - echo $this->Form->input('filter_ldap', ['label' => 'Filtre du LDAP']);
49   - echo '</div>';
50 85 ?>
51 86 </fieldset>
52 87 <?= $this->Form->submit(__('Valider')) ?>
... ...
src/Template/Configurations/view.ctp
... ... @@ -86,6 +86,7 @@
86 86 echo '<tr><th style="width: 250px;"></th><th></th></tr>';
87 87 $displayElement(__('Imprimante disponible'), $print);
88 88 $displayElement(__('Seuil (prix) Matériel administratif'), h($configurationObj->prix_inventaire_administratif));
  89 + $displayElement(__('Taille max documents (octets)'), substr($configurationObj->taille_max_doc/(1024*1024), 0, 4).' Mo');
89 90 $displayElement(__('Numero labo sans année'), $numLab);
90 91 $displayElement(__('Champ date commande non obligatoire'), $dateObl);
91 92 $displayElement(__('Label groupe thématique'), h($configurationObj->nom_groupe_thematique));
... ...
src/Template/Documents/add.ctp
... ... @@ -2,8 +2,12 @@
2 2 <div class="documents form">
3 3 <?= $this->Form->create($document, ['type' => 'file']) ?>
4 4 <fieldset>
5   - <h2><i class="icon-plus"></i> Lier un document</h2>
6   - <?php
  5 + <?php
  6 + if(isset($photo)) {
  7 + echo '<h2><i class="icon-plus"></i> Lier une photo</h2>';
  8 + }else {
  9 + echo '<h2><i class="icon-plus"></i> Lier un document</h2>';
  10 + }
7 11 if(isset($materiel)) {
8 12 echo $this->Form->input('materiel_id', ['label' => 'N° materiel labo', 'options' => $materiel, 'default' => $this->passedArgs[0], 'readonly' => true]);
9 13 }
... ... @@ -13,9 +17,17 @@
13 17  
14 18 echo $this->Form->input('nom');
15 19 echo $this->Form->input('type_document_id', ['label' => 'Type', 'options' => $typesD, 'default' => 1]);
16   -
17 20 echo $this->Form->input('description');
18   - echo $this->Form->input('chemin_file', ['label' => 'Fichier (10 Mo max)', 'type' => 'file']);
  21 + echo $this->Form->input('chemin_file', ['label' => 'Fichier ('.substr($configuration->taille_max_doc/(1024*1024), 0, 4).' Mo max)', 'type' => 'file']);
  22 +
  23 +
  24 + if(isset($photo)) {
  25 + echo $this->Form->hidden('photo', ['default' => 1]);
  26 + }
  27 + else {
  28 + echo $this->Form->hidden('photo', ['default' => 0]);
  29 + }
  30 +
19 31  
20 32  
21 33 ?>
... ...
src/Template/Documents/index.ctp
... ... @@ -9,11 +9,18 @@
9 9 <th><?= $this->Paginator->sort('suivi_id', 'Suivi') ?></th>
10 10 <th><?= $this->Paginator->sort('type_document_id', 'Type') ?></th>
11 11 <th><?= $this->Paginator->sort('type_doc', 'Extension fichier') ?></th>
  12 + <th><?= $this->Paginator->sort('photo', 'Photo') ?></th>
12 13 <th class="actions"><?= __('') ?></th>
13 14 </tr>
14 15 </thead>
15 16 <tbody>
16   - <?php foreach ($documents as $document): ?>
  17 + <?php foreach ($documents as $document):
  18 + if($document->photo) {
  19 + $p = 'Oui';
  20 + } else {
  21 + $p = '';
  22 + }
  23 + ?>
17 24 <tr>
18 25 <td class="smallText"><?= $this->Html->link($document->nom, ['action' => 'view', $document->id]) ?></td>
19 26  
... ... @@ -27,14 +34,21 @@
27 34  
28 35 <td class="smallText"><?= $document->has('type_document') ? h($document->type_document->nom) : '' ?></td>
29 36 <td class="smallText"><?= h($document->type_doc) ?></td>
  37 + <td class="smallText"><?= $p ?></td>
30 38  
31 39 <td class="actions" style="padding: 6px 0;">
32 40 <?= $this->Html->link(__('<i class="icon-eye-open"></i>'), ['action' => 'view', $document->id], ['title' => 'Visualiser', 'style' => 'margin: 0 2px', 'escape' => false ]) ?>
33   - <?= $this->Form->postLink(__('<i class="icon-download"></i>'), '/webroot/files/'.$document->id.'.'.$document->type_doc, ['title' => 'Télécharger', 'style' => 'margin: 0 2px', 'escape' => false ]) ?>
  41 + <?php
  42 + if($document->photo) {
  43 + echo $this->Form->postLink(__('<i class="icon-download"></i>'), '/webroot/img/photos/'.$document->id.'.'.$document->type_doc, ['title' => 'Télécharger', 'style' => 'margin: 0 2px', 'escape' => false ]);
  44 + }else {
  45 + echo $this->Form->postLink(__('<i class="icon-download"></i>'), '/webroot/files/'.$document->id.'.'.$document->type_doc, ['title' => 'Télécharger', 'style' => 'margin: 0 2px', 'escape' => false ]);
  46 + }
  47 + ?>
34 48 <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['action' => 'delete', $document->id], ['title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $document->id)]) ?>
35 49 </td>
36 50 </tr>
37   - <?php endforeach; ?>
  51 + <?php endforeach; ?>
38 52 </tbody>
39 53 </table>
40 54  
... ...
src/Template/Documents/view.ctp
... ... @@ -20,7 +20,13 @@
20 20 $displayElement(__('Description'), h($document->description));
21 21 $displayElement(__('Extension fichier'), h($document->type_doc));
22 22  
23   - echo '<tr><td><strong>Fichier</strong></td><td><a href="'.$this->request->webroot.'webroot/files/'.$document->id.'.'.$document->type_doc.'">Télécharger fichier</a></td></tr>';
  23 +
  24 + if($document->photo) {
  25 + echo '<tr><td><strong>Fichier</strong></td><td><a href="'.$this->request->webroot.'webroot/img/photos/'.$document->id.'.'.$document->type_doc.'">Télécharger fichier</a></td></tr>';
  26 + }else {
  27 + echo '<tr><td><strong>Fichier</strong></td><td><a href="'.$this->request->webroot.'webroot/files/'.$document->id.'.'.$document->type_doc.'">Télécharger fichier</a></td></tr>';
  28 + }
  29 +
24 30  
25 31  
26 32  
... ...
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.5.0.0 (27/06/2016)</font>
  97 + <font color="black">VERSION 2.5.1.0 (28/06/2016)</font>
98 98 </td>
99 99 </tr>
100 100 </table>
... ...
src/Template/Materiels/view.ctp
1 1  
2 2 <div class="materiels view">
3 3  
4   - <h2>
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   - ?>
  4 + <h2>
  5 + <?php
  6 +
  7 +if (h ( $materiel->status ) == 'ARCHIVED')
  8 + echo '<i class="icon-inbox"></i> ';
  9 + $panne = '';
  10 + if (h ( $materiel->hors_service )) {
  11 + $panne = ' (HORS SERVICE)';
  12 + }
  13 + ?>
11 14  
12 15 <?= h($materiel->designation).$panne?>
13 16 <span style="font-size: 70%; color: grey;">
14   - <?= h($materiel->numero_laboratoire) ?>
  17 + <?= h($materiel->numero_laboratoire)?>
15 18 <?php if (h($materiel->status) == 'ARCHIVED') echo ' (Archivé)'; ?>
16 19 </span>
17   - <?php
18   - //Url transformé en QrCode
19   - $this->request->session()->write("qrUrl", $this->request->env('SERVER_NAME').$this->request->env('REQUEST_URI'));
20   -
21   - $this->requestAction('/QrCodes/creer/');
22   - echo $this->Html->image('qrcodes/'.$this->request->session()->read("filename"), [
23   - 'alt' => 'QrCode : '.$materiel->numero_laboratoire,
24   - 'style' => 'float: right']);
25   -
26   - ?>
27   - </h2>
28   -
29   - <div class="actions" style="margin-bottom: 20px; width: 100%; float: none; padding: 10px 0;">
30   - <?php
31   - if (in_array($materiel->status, ['CREATED', 'VALIDATED'])) {
32   - if(($role == 'Utilisateur' && (in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]))) || (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
33   - echo $this->Html->link(__('<i class="icon-pencil"></i> Editer ce matériel'),
34   - ['action' => 'edit', $materiel->id],
35   - ['escape' => false,
36   - 'onclick' => 'return true;',
37   - 'style' => 'margin-right: 10px'
38   - ]);
39   - }
40   - }else {
41   - if(in_array($role, ['Administration Plus', 'Super Administrateur'])) {
42   - echo $this->Html->link(__('<i class="icon-pencil"></i> Editer ce matériel'),
43   - ['action' => 'edit', $materiel->id],
44   - ['escape' => false,
45   - 'onclick' => 'return true;',
46   - 'style' => 'margin-right: 10px'
47   - ]);
48   - }
49   - }
50   -
51   - if($materiel->status == 'VALIDATED') {
52   - // BOUTON NOUVEAU SUIVI
53   - echo $this->Html->link('<i class="icon-plus"></i> Nouv. Suivi',
54   - ['controller' => 'suivis',
55   - 'action' => 'add',
56   - $materiel->id],
57   - ['title' => 'Faire un nouveau suivi de ce matériel',
58   - 'style' => 'margin-right: 10px',
59   - 'escape' => false]
60   - ); // End link
61   -
62   - // BOUTON NOUVEL EMPRUNT
63   - echo $this->Html->link('<i class="icon-plus"></i> Nouv. Emprunt',
64   - ['controller' => 'emprunts',
65   - 'action' => 'add',
66   - $materiel->id],
67   - ['title' => 'Faire un nouvel emprunt de ce matériel',
68   - 'style' => 'margin-right: 10px',
69   - 'escape' => false]
70   - ); // End link
71   -
72   -
  20 + </h2>
  21 + </br>
  22 + <div style="text-align: center;">
  23 + <?php
  24 +
  25 + if (isset ( $imgMateriel )) {
  26 + echo $this->Html->image ( 'photos/' . $imgMateriel, [
  27 + 'alt' => 'Photo matériel',
  28 + 'style' => 'max-width: 300px; text-align: center;'
  29 + ] );
  30 + }
  31 +
  32 + // Url transformé en QrCode
  33 + $this->request->session ()->write ( "qrUrl", $this->request->env ( 'SERVER_NAME' ) . $this->request->env ( 'REQUEST_URI' ) );
  34 +
  35 + $this->requestAction ( '/QrCodes/creer/' );
  36 + echo $this->Html->image ( 'qrcodes/' . $this->request->session ()->read ( "filename" ), [
  37 + 'alt' => 'QrCode : ' . $materiel->numero_laboratoire,
  38 + 'style' => 'float: right'
  39 + ] );
  40 + echo '</div>';
  41 + ?>
  42 + </br>
73 43  
74   - }
75   -
76   - echo $this->Html->link('<i class="icon-file"></i> Lier un Doc.',
77   - ['controller' => 'documents',
78   - 'action' => 'add',
79   - $materiel->id, 'mat'],
80   - ['title' => 'Attacher un Doc. à ce matériel',
81   - 'style' => 'margin-right: 10px',
82   - 'escape' => false]
83   - );
84   -
85   -
86   - if(in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) {
87   - if (($materiel->status == 'VALIDATED') || ($materiel->status == 'CREATED')) {
88   - echo $this->Html->link('<i class="icon-file"></i> Doc. admission',
89   - ['controller' => 'documents', 'action' => 'admission', $materiel->numero_laboratoire],
90   - ['title' => 'Voir le document d\'admission', 'style' => 'margin-right: 10px', 'escape' => false]);
91   - }
92   - // Doc sortie (admin only)
93   - else if (($materiel->status == 'ARCHIVED') || ($materiel->status == 'TOBEARCHIVED')) {
94   - echo $this->Html->link('<i class="icon-file"></i> Doc. sortie',
95   - ['controller' => 'documents', 'action' => 'sortie', $materiel->numero_laboratoire],
96   - ['title' => 'Voir le document de sortie', 'style' => 'margin-right: 10px', 'escape' => false]);
97   - }
98   - }
99   -
100   - if(in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur']) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
101   - // 2) Bouton de changement de statut : Valider, Demander archivage, ou Archiver
102   - switch ($materiel->status) {
103   - case "CREATED":
104   - echo $this->Html->link('<i class="icon-ok-sign"></i> Valider',
105   - ['action' => 'statusValidated', $materiel->id, 'view'],
106   - ['title' => 'Valider le matériel', 'style' => 'margin-right: 10px', 'escape' => false]);
107   - break;
108   -
109   - case "VALIDATED":
110   - echo $this->Html->link('<i class="icon-ok-sign"></i> Demander sortie',
111   - ['action' => 'statusToBeArchived', $materiel->id, 'view'],
112   - ['title' => 'Demander la sortie de l\'inventaire', 'style' => 'margin-right: 10px', 'escape' => false]);
113   - break;
114   -
115   - case "TOBEARCHIVED":
116   - if($role != 'Responsable'&& $role != 'Super Administrateur') {
117   - echo $this->Html->link('<i class="icon-ok-sign"></i> Sortie inventaire',
118   - ['action' => 'statusArchived', $materiel->id, 'view'],
119   - ['title' => 'Sortir définitivement de l\'inventaire', 'style' => 'margin-right: 10px', 'escape' => false,
120   - 'confirm' => 'Êtes-vous sur de bien vouloir archiver ' . $materiel->designation . ' ?']);
121   - }
122   - break;
123   -
124   - } // switch
125   - }
126   -
127   - echo $this->Html->link('<i class="icon-pencil"></i> Copier ce matériel',
128   - ['controller' => 'materiels',
129   - 'action' => 'add', $materiel->id],
130   - ['title' => 'Copier ce matériel',
131   - 'style' => 'margin-right: 10px; margin-top: 10px; display: inline-block',
132   - 'escape' => false]);
133   -
134   -
135   - echo $this->Html->link('<i class="icon-file"></i> Fiche matériel',
136   - ['controller' => 'documents', 'action' => 'ficheMateriel', $materiel->numero_laboratoire],
137   - ['title' => 'Voir la fiche du materiel', 'style' => 'margin-right: 10px', 'escape' => false]);
138   -
139   - // BOUTON ETIQUETTE POSEE
140   - if ($configuration->hasPrinter && in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) {
141   - echo '<div class="actions" style="margin-bottom: 20px; width: 100%; float: none; padding: 10px 0;">';
142   -
143   - $action = 'Impr. ruban';
144   - echo $this->Html->link('<i class="icon-print"></i> '.$action,
145   - ['action' => 'printLabelRuban', h($materiel->id), 'view'],
146   - ['title' => 'Imprimer sur un ruban 12mm',
147   - 'style' => 'margin-right: 10px',
148   - 'escape' => false,
149   - 'onclick' => 'return true;'
150   - ]); // End link
151   -
152   -
153   - echo $this->Html->link(
154   - '<i class="icon-file"></i> '.
155   - (h($materiel->etiquette) ? "Etiquette NON posée sur le matériel" : "Etiquette posée sur le matériel"),
156   - ['controller' => 'materiels',
157   - 'action' => h($materiel->etiquette) ?'setLabelIsNotPlaced':'setLabelIsPlaced', h($materiel->id), 'view'],
158   - ['title' => h($materiel->etiquette) ?
159   - "En cliquant sur ce bouton, vous déclarez que l'étiquette n'a PAS été posée sur le matériel":
160   - "En cliquant sur ce bouton, vous certifiez que l'étiquette a bien été posée sur le matériel",
161   - 'style' => 'margin-left: 0px',
162   - 'escape' => false]
163   - ); // End link
164   -
165   -
166   - echo '</div>';
167   - }
168   -
169   -
170   - ?>
  44 + <div class="actions"
  45 + style="margin-bottom: 20px; width: 100%; float: none; padding: 10px 0;">
  46 + <?php
  47 + if (in_array ( $materiel->status, [
  48 + 'CREATED',
  49 + 'VALIDATED'
  50 + ] )) {
  51 + if (($role == 'Utilisateur' && (in_array ( $username, [
  52 + $materiel->nom_createur,
  53 + $materiel->nom_responsable
  54 + ] ))) || (in_array ( $role, [
  55 + 'Administration',
  56 + 'Administration Plus',
  57 + 'Super Administrateur'
  58 + ] )) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  59 + echo $this->Html->link ( __ ( '<i class="icon-pencil"></i> Editer ce matériel' ), [
  60 + 'action' => 'edit',
  61 + $materiel->id
  62 + ], [
  63 + 'escape' => false,
  64 + 'onclick' => 'return true;',
  65 + 'style' => 'margin-right: 10px'
  66 + ] );
  67 + }
  68 + } else {
  69 + if (in_array ( $role, [
  70 + 'Administration Plus',
  71 + 'Super Administrateur'
  72 + ] )) {
  73 + echo $this->Html->link ( __ ( '<i class="icon-pencil"></i> Editer ce matériel' ), [
  74 + 'action' => 'edit',
  75 + $materiel->id
  76 + ], [
  77 + 'escape' => false,
  78 + 'onclick' => 'return true;',
  79 + 'style' => 'margin-right: 10px'
  80 + ] );
  81 + }
  82 + }
  83 +
  84 + if ($materiel->status == 'VALIDATED') {
  85 + // BOUTON NOUVEAU SUIVI
  86 + echo $this->Html->link ( '<i class="icon-plus"></i> Nouv. Suivi', [
  87 + 'controller' => 'suivis',
  88 + 'action' => 'add',
  89 + $materiel->id
  90 + ], [
  91 + 'title' => 'Faire un nouveau suivi de ce matériel',
  92 + 'style' => 'margin-right: 10px',
  93 + 'escape' => false
  94 + ] ); // End link
  95 +
  96 + // BOUTON NOUVEL EMPRUNT
  97 + echo $this->Html->link ( '<i class="icon-plus"></i> Nouv. Emprunt', [
  98 + 'controller' => 'emprunts',
  99 + 'action' => 'add',
  100 + $materiel->id
  101 + ], [
  102 + 'title' => 'Faire un nouvel emprunt de ce matériel',
  103 + 'style' => 'margin-right: 10px',
  104 + 'escape' => false
  105 + ] ); // End link
  106 + }
  107 +
  108 + if (($role == 'Utilisateur' && (in_array ( $username, [
  109 + $materiel->nom_createur,
  110 + $materiel->nom_responsable
  111 + ] ))) || (in_array ( $role, [
  112 + 'Administration',
  113 + 'Administration Plus',
  114 + 'Super Administrateur'
  115 + ] )) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  116 +
  117 + echo $this->Html->link ( '<i class="icon-file"></i> Lier un Doc.', [
  118 + 'controller' => 'documents',
  119 + 'action' => 'add',
  120 + $materiel->id,
  121 + 'mat'
  122 + ], [
  123 + 'title' => 'Attacher un Doc. à ce matériel',
  124 + 'style' => 'margin-right: 10px',
  125 + 'escape' => false
  126 + ] );
  127 +
  128 + if ($materiel->photo_id != null) {
  129 + echo $this->Html->link ( '<i class="icon-file"></i> Remplacer la photo.', [
  130 + 'controller' => 'documents',
  131 + 'action' => 'add',
  132 + $materiel->id,
  133 + 'mat',
  134 + 'photo'
  135 + ], [
  136 + 'title' => 'Remplacer la photo de ce matériel',
  137 + 'style' => 'margin-right: 10px',
  138 + 'escape' => false
  139 + ] );
  140 + } else {
  141 + echo $this->Html->link ( '<i class="icon-file"></i> Lier une photo.', [
  142 + 'controller' => 'documents',
  143 + 'action' => 'add',
  144 + $materiel->id,
  145 + 'mat',
  146 + 'photo'
  147 + ], [
  148 + 'title' => 'Attacher une photo à ce matériel',
  149 + 'style' => 'margin-right: 10px',
  150 + 'escape' => false
  151 + ] );
  152 + }
  153 + }
  154 +
  155 + if (in_array ( $role, [
  156 + 'Administration',
  157 + 'Administration Plus',
  158 + 'Super Administrateur'
  159 + ] )) {
  160 + if (($materiel->status == 'VALIDATED') || ($materiel->status == 'CREATED')) {
  161 + echo $this->Html->link ( '<i class="icon-file"></i> Doc. admission', [
  162 + 'controller' => 'documents',
  163 + 'action' => 'admission',
  164 + $materiel->numero_laboratoire
  165 + ], [
  166 + 'title' => 'Voir le document d\'admission',
  167 + 'style' => 'margin-right: 10px',
  168 + 'escape' => false
  169 + ] );
  170 + } // Doc sortie (admin only)
  171 + else if (($materiel->status == 'ARCHIVED') || ($materiel->status == 'TOBEARCHIVED')) {
  172 + echo $this->Html->link ( '<i class="icon-file"></i> Doc. sortie', [
  173 + 'controller' => 'documents',
  174 + 'action' => 'sortie',
  175 + $materiel->numero_laboratoire
  176 + ], [
  177 + 'title' => 'Voir le document de sortie',
  178 + 'style' => 'margin-right: 10px',
  179 + 'escape' => false
  180 + ] );
  181 + }
  182 + }
  183 +
  184 + if (in_array ( $role, [
  185 + 'Administration',
  186 + 'Administration Plus',
  187 + 'Super Administrateur'
  188 + ] ) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  189 + // 2) Bouton de changement de statut : Valider, Demander archivage, ou Archiver
  190 + switch ($materiel->status) {
  191 + case "CREATED" :
  192 + echo $this->Html->link ( '<i class="icon-ok-sign"></i> Valider', [
  193 + 'action' => 'statusValidated',
  194 + $materiel->id,
  195 + 'view'
  196 + ], [
  197 + 'title' => 'Valider le matériel',
  198 + 'style' => 'margin-right: 10px',
  199 + 'escape' => false
  200 + ] );
  201 + break;
  202 +
  203 + case "VALIDATED" :
  204 + echo $this->Html->link ( '<i class="icon-ok-sign"></i> Demander sortie', [
  205 + 'action' => 'statusToBeArchived',
  206 + $materiel->id,
  207 + 'view'
  208 + ], [
  209 + 'title' => 'Demander la sortie de l\'inventaire',
  210 + 'style' => 'margin-right: 10px',
  211 + 'escape' => false
  212 + ] );
  213 + break;
  214 +
  215 + case "TOBEARCHIVED" :
  216 + if ($role != 'Responsable' && $role != 'Super Administrateur') {
  217 + echo $this->Html->link ( '<i class="icon-ok-sign"></i> Sortie inventaire', [
  218 + 'action' => 'statusArchived',
  219 + $materiel->id,
  220 + 'view'
  221 + ], [
  222 + 'title' => 'Sortir définitivement de l\'inventaire',
  223 + 'style' => 'margin-right: 10px',
  224 + 'escape' => false,
  225 + 'confirm' => 'Êtes-vous sur de bien vouloir archiver ' . $materiel->designation . ' ?'
  226 + ] );
  227 + }
  228 + break;
  229 + } // switch
  230 + }
  231 +
  232 + echo $this->Html->link ( '<i class="icon-pencil"></i> Copier ce matériel', [
  233 + 'controller' => 'materiels',
  234 + 'action' => 'add',
  235 + $materiel->id
  236 + ], [
  237 + 'title' => 'Copier ce matériel',
  238 + 'style' => 'margin-right: 10px; margin-top: 10px; display: inline-block',
  239 + 'escape' => false
  240 + ] );
  241 +
  242 + echo $this->Html->link ( '<i class="icon-file"></i> Fiche matériel', [
  243 + 'controller' => 'documents',
  244 + 'action' => 'ficheMateriel',
  245 + $materiel->numero_laboratoire
  246 + ], [
  247 + 'title' => 'Voir la fiche du materiel',
  248 + 'style' => 'margin-right: 10px',
  249 + 'escape' => false
  250 + ] );
  251 +
  252 + // BOUTON ETIQUETTE POSEE
  253 + if ($configuration->hasPrinter && in_array ( $role, [
  254 + 'Administration',
  255 + 'Administration Plus',
  256 + 'Super Administrateur'
  257 + ] )) {
  258 + echo '<div class="actions" style="margin-bottom: 20px; width: 100%; float: none; padding: 10px 0;">';
  259 +
  260 + $action = 'Impr. ruban';
  261 + echo $this->Html->link ( '<i class="icon-print"></i> ' . $action, [
  262 + 'action' => 'printLabelRuban',
  263 + h ( $materiel->id ),
  264 + 'view'
  265 + ], [
  266 + 'title' => 'Imprimer sur un ruban 12mm',
  267 + 'style' => 'margin-right: 10px',
  268 + 'escape' => false,
  269 + 'onclick' => 'return true;'
  270 + ] ); // End link
  271 +
  272 + echo $this->Html->link ( '<i class="icon-file"></i> ' . (h ( $materiel->etiquette ) ? "Etiquette NON posée sur le matériel" : "Etiquette posée sur le matériel"), [
  273 + 'controller' => 'materiels',
  274 + 'action' => h ( $materiel->etiquette ) ? 'setLabelIsNotPlaced' : 'setLabelIsPlaced',
  275 + h ( $materiel->id ),
  276 + 'view'
  277 + ], [
  278 + 'title' => h ( $materiel->etiquette ) ? "En cliquant sur ce bouton, vous déclarez que l'étiquette n'a PAS été posée sur le matériel" : "En cliquant sur ce bouton, vous certifiez que l'étiquette a bien été posée sur le matériel",
  279 + 'style' => 'margin-left: 0px',
  280 + 'escape' => false
  281 + ] ); // End link
  282 +
  283 + echo '</div>';
  284 + }
  285 +
  286 + ?>
171 287 </div>
172   -
173   - <h3 id="t_informations" style="cursor: pointer;">
174   - <i class="icon-chevron-down" style="font-size: 14px;" id="i_informations"></i>
175   - <span style="text-decoration: underline;">Informations</span>
176   - </h3>
177   - <div id="informations" style="margin-bottom: 20px;">
178   - <table>
179   - <tr><th style="width: 250px;"></th><th></th></tr>
180   -
181   - <?php
182   - $type = "";
183   - if(h($materiel->materiel_administratif) == 1 && h($materiel->materiel_technique) == 1) {
184   - $type = 'Administratif et technique';
185   - }
186   - else if (h($materiel->materiel_administratif) == 1) {
187   - $type = 'Administratif';
188   - }
189   - else if (h($materiel->materiel_technique) == 1) {
190   - $type = 'Technique';
191   - }
192   -
193   - $displayElement(__('Description'), h($materiel->description));
194   - $displayElement(__('Materiel inventorié'), $type);
195   - $displayElement(__('Organisme'), $materiel->has('organisme') ? h($materiel->organisme->nom) : '');
196   - $displayElement(__('Domaine'), $materiel->has('sur_category') ? h($materiel->sur_category->nom) : '');
197   - $displayElement(__('Catégorie'), $materiel->has('category') ? h($materiel->category->nom) : '');
198   - $displayElement(__('Sous-Catégorie'), $materiel->has('sous_category') ? h($materiel->sous_category->nom) : '');
199   -
200   - if(h($materiel->etiquette) == 0) {
201   - $etiq="Non";
202   - }else {
203   - $etiq="Oui";
204   - }
205   - $displayElement(__('Etiquette posée'), $etiq);
206   - $displayElement(__($configuration->nom_groupe_thematique), $materiel->has('groupes_thematique') ? $this->Html->link($materiel->groupes_thematique->nom, ['controller' => 'GroupesThematiques', 'action' => 'view', $materiel->groupes_thematique->id]) : '');
207   - $displayElement(__($configuration->nom_groupe_metier), $materiel->has('groupes_metier') ? $this->Html->link($materiel->groupes_metier->nom, ['controller' => 'GroupesMetiers', 'action' => 'view', $materiel->groupes_metier->id]) : '');
208   - $displayElement(__('Date d\'achat'), h($materiel->date_acquisition));
209   -
210   - $displayElement(__('Date de reception'), h($materiel->date_reception));
211   - if(!empty(h($materiel->duree_garntie))) {
212   - $displayElement(__('Duree garantie'), h($materiel->duree_garantie).' '.h($materiel->unite_duree_garantie));
213   - }
214   - $displayElement(__('Date fin de garantie'), h($materiel->date_fin_garantie));
215   -
216   - $displayElement(__('Statut'), h($materiel->status));
217   - if($materiel->status == 'ARCHIVED') {
218   - $displayElement(__('Date d\'archivage'), h($materiel->date_archivage));
219   - }
220   - $displayElement(__('Prix (HT)'), h($materiel->prix_ht).' €');
221   - $displayElement(__('Fournisseur'), h($materiel->fournisseur));
222   -
223   - $displayElement(__('Lieu de stockage'), $materiel->has('site') ? h($materiel->site->nom) : '');
224   - $displayElement(__('Détail lieu de stockage'), h($materiel->lieu_detail));
225   -
226   - $displayElement(__('Nom du propriétaire'), $this->Html->link(h($materiel->nom_responsable), 'mailto:'.h($materiel->email_responsable)));
227   - $displayElement(__('N. interne (labo)'), h($materiel->numero_laboratoire));
228   -
229   - if($role == 'Super Administrateur') {
230   - $displayElement(__('Date création'), h($materiel->created));
231   - $displayElement(__('Nom du créateur'), h($materiel->nom_createur));
232   - $displayElement(__('Date modification'), h($materiel->modified));
233   - $displayElement(__('Nom du modificateur'), h($materiel->nom_modificateur));
234   - }
235   -
236   - ?>
  288 +
  289 + <h3 id="t_informations" style="cursor: pointer;">
  290 + <i class="icon-chevron-down" style="font-size: 14px;"
  291 + id="i_informations"></i> <span style="text-decoration: underline;">Informations</span>
  292 + </h3>
  293 + <div id="informations" style="margin-bottom: 20px;">
  294 + <table>
  295 + <tr>
  296 + <th style="width: 250px;"></th>
  297 + <th></th>
  298 + </tr>
  299 +
  300 + <?php
  301 + $type = "";
  302 + if (h ( $materiel->materiel_administratif ) == 1 && h ( $materiel->materiel_technique ) == 1) {
  303 + $type = 'Administratif et technique';
  304 + } else if (h ( $materiel->materiel_administratif ) == 1) {
  305 + $type = 'Administratif';
  306 + } else if (h ( $materiel->materiel_technique ) == 1) {
  307 + $type = 'Technique';
  308 + }
  309 +
  310 + $displayElement ( __ ( 'Description' ), h ( $materiel->description ) );
  311 + $displayElement ( __ ( 'Materiel inventorié' ), $type );
  312 + $displayElement ( __ ( 'Organisme' ), $materiel->has ( 'organisme' ) ? h ( $materiel->organisme->nom ) : '' );
  313 + $displayElement ( __ ( 'Domaine' ), $materiel->has ( 'sur_category' ) ? h ( $materiel->sur_category->nom ) : '' );
  314 + $displayElement ( __ ( 'Catégorie' ), $materiel->has ( 'category' ) ? h ( $materiel->category->nom ) : '' );
  315 + $displayElement ( __ ( 'Sous-Catégorie' ), $materiel->has ( 'sous_category' ) ? h ( $materiel->sous_category->nom ) : '' );
  316 +
  317 + if (h ( $materiel->etiquette ) == 0) {
  318 + $etiq = "Non";
  319 + } else {
  320 + $etiq = "Oui";
  321 + }
  322 + $displayElement ( __ ( 'Etiquette posée' ), $etiq );
  323 + $displayElement ( __ ( $configuration->nom_groupe_thematique ), $materiel->has ( 'groupes_thematique' ) ? $this->Html->link ( $materiel->groupes_thematique->nom, [
  324 + 'controller' => 'GroupesThematiques',
  325 + 'action' => 'view',
  326 + $materiel->groupes_thematique->id
  327 + ] ) : '' );
  328 + $displayElement ( __ ( $configuration->nom_groupe_metier ), $materiel->has ( 'groupes_metier' ) ? $this->Html->link ( $materiel->groupes_metier->nom, [
  329 + 'controller' => 'GroupesMetiers',
  330 + 'action' => 'view',
  331 + $materiel->groupes_metier->id
  332 + ] ) : '' );
  333 + $displayElement ( __ ( 'Date d\'achat' ), h ( $materiel->date_acquisition ) );
  334 +
  335 + $displayElement ( __ ( 'Date de reception' ), h ( $materiel->date_reception ) );
  336 + if (! empty ( h ( $materiel->duree_garntie ) )) {
  337 + $displayElement ( __ ( 'Duree garantie' ), h ( $materiel->duree_garantie ) . ' ' . h ( $materiel->unite_duree_garantie ) );
  338 + }
  339 + $displayElement ( __ ( 'Date fin de garantie' ), h ( $materiel->date_fin_garantie ) );
  340 +
  341 + $displayElement ( __ ( 'Statut' ), h ( $materiel->status ) );
  342 + if ($materiel->status == 'ARCHIVED') {
  343 + $displayElement ( __ ( 'Date d\'archivage' ), h ( $materiel->date_archivage ) );
  344 + }
  345 + $displayElement ( __ ( 'Prix (HT)' ), h ( $materiel->prix_ht ) . ' €' );
  346 + $displayElement ( __ ( 'Fournisseur' ), h ( $materiel->fournisseur ) );
  347 +
  348 + $displayElement ( __ ( 'Lieu de stockage' ), $materiel->has ( 'site' ) ? h ( $materiel->site->nom ) : '' );
  349 + $displayElement ( __ ( 'Détail lieu de stockage' ), h ( $materiel->lieu_detail ) );
  350 +
  351 + $displayElement ( __ ( 'Nom du propriétaire' ), $this->Html->link ( h ( $materiel->nom_responsable ), 'mailto:' . h ( $materiel->email_responsable ) ) );
  352 + $displayElement ( __ ( 'N. interne (labo)' ), h ( $materiel->numero_laboratoire ) );
  353 +
  354 + if ($role == 'Super Administrateur') {
  355 + $displayElement ( __ ( 'Date création' ), h ( $materiel->created ) );
  356 + $displayElement ( __ ( 'Nom du créateur' ), h ( $materiel->nom_createur ) );
  357 + $displayElement ( __ ( 'Date modification' ), h ( $materiel->modified ) );
  358 + $displayElement ( __ ( 'Nom du modificateur' ), h ( $materiel->nom_modificateur ) );
  359 + }
  360 +
  361 + ?>
237 362 </table>
238   - </div>
  363 + </div>
239 364  
240 365  
241   - <?php
242   - //Partie admin
243   - if(in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) {
244   - echo '<h3 id="t_informations_admin" style="cursor: pointer;">';
  366 + <?php
  367 + // Partie admin
  368 + if (in_array ( $role, [
  369 + 'Administration',
  370 + 'Administration Plus',
  371 + 'Super Administrateur'
  372 + ] )) {
  373 + echo '<h3 id="t_informations_admin" style="cursor: pointer;">';
245 374 echo '<i class="icon-chevron-down" style="font-size: 14px;" id="i_informations_admin"></i>';
246 375 echo '<span style="text-decoration: underline;">Informations administratives</span>';
247 376 echo '</h3>';
248 377 echo '<div id="informations_admin" style="margin-bottom: 20px;">';
249 378 echo '<table>';
250 379 echo '<tr><th style="width: 250px;"></th><th></th></tr>';
251   -
252   - echo '<tr><td><strong>'.__('CentreFinancier/EOTP').' </strong></td><td>'.h($materiel->eotp).'</td></tr>';
253   - echo '<tr><td><strong>'.__('N° commande').' </strong></td><td>'.h($materiel->numero_commande).'</td></tr>';
254   - echo '<tr><td><strong>'.__('Code comptable').' </strong></td><td>'.h($materiel->code_comptable).'</td></tr>';
255   - echo '<tr><td><strong>'.__('N° de série').' </strong></td><td>'.h($materiel->numero_serie).'</td></tr>';
256   - echo '<tr><td><strong>'.__('N. Inventaire Organisme').' </strong></td><td>'.h($materiel->numero_inventaire_organisme).'</td></tr>';
257   - echo '<tr><td><strong>'.__('N. inventaire (ancien)').' </strong></td><td>'.h($materiel->numero_inventaire_old).'</td></tr>';
258   -
259   - echo '</table>';
260   - echo '</div>';
261   -
262   - }
263   -
264   -
265   - ?>
  380 +
  381 + echo '<tr><td><strong>' . __ ( 'CentreFinancier/EOTP' ) . ' </strong></td><td>' . h ( $materiel->eotp ) . '</td></tr>';
  382 + echo '<tr><td><strong>' . __ ( 'N° commande' ) . ' </strong></td><td>' . h ( $materiel->numero_commande ) . '</td></tr>';
  383 + echo '<tr><td><strong>' . __ ( 'Code comptable' ) . ' </strong></td><td>' . h ( $materiel->code_comptable ) . '</td></tr>';
  384 + echo '<tr><td><strong>' . __ ( 'N° de série' ) . ' </strong></td><td>' . h ( $materiel->numero_serie ) . '</td></tr>';
  385 + echo '<tr><td><strong>' . __ ( 'N. Inventaire Organisme' ) . ' </strong></td><td>' . h ( $materiel->numero_inventaire_organisme ) . '</td></tr>';
  386 + echo '<tr><td><strong>' . __ ( 'N. inventaire (ancien)' ) . ' </strong></td><td>' . h ( $materiel->numero_inventaire_old ) . '</td></tr>';
  387 +
  388 + echo '</table>';
  389 + echo '</div>';
  390 + }
  391 +
  392 + ?>
266 393  
267 394  
268 395 <h3 id="t_suivis" style="cursor: pointer;">
269   - <i class="icon-chevron-down" style="font-size: 14px;" id="i_suivis"></i>
  396 + <i class="icon-chevron-down" style="font-size: 14px;" id="i_suivis"></i>
270 397 <span style="text-decoration: underline;">Suivi(s) du matériel (<?= count($materiel->suivis) ?>)</span>
271 398 </h3>
272 399 <div id="suivis" style="margin-bottom: 20px;">
273 400  
274 401 <?php if (!empty($materiel->suivis)) { ?>
275   - <table>
276   - <tr>
277   - <th><?= __('Prestataire') ?></th>
278   - <th><?= __('Date du contrôle') ?></th>
279   - <th><?= __('Date prochain contrôle') ?></th>
280   - <th><?= __('Type d\'intervention') ?></th>
281   - <th style="width:50px;"><?= __('Détail') ?></th>
282   - </tr>
  402 + <table>
  403 + <tr>
  404 + <th><?= __('Prestataire') ?></th>
  405 + <th><?= __('Date du contrôle') ?></th>
  406 + <th><?= __('Date prochain contrôle') ?></th>
  407 + <th><?= __('Type d\'intervention') ?></th>
  408 + <th style="width: 50px;"><?= __('Détail') ?></th>
  409 + </tr>
283 410 <?php foreach ($materiel->suivis as $suivis): ?>
284 411 <tr>
285   - <td><?= h($suivis->organisme) ?></td>
286   - <td><?= h($suivis->date_controle) ?></td>
287   - <td><?= h($suivis->date_prochain_controle) ?></td>
288   - <td><?= $typeSuivis->find()->where(['id =' => h($suivis->type_suivi_id)])->first()['nom']; ?></td>
  412 + <td><?= h($suivis->organisme) ?></td>
  413 + <td><?= h($suivis->date_controle) ?></td>
  414 + <td><?= h($suivis->date_prochain_controle) ?></td>
  415 + <td><?= $typeSuivis->find()->where(['id =' => h($suivis->type_suivi_id)])->first()['nom']; ?></td>
289 416  
290   - <td class="actions">
291   - <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Suivis', 'action' => 'view', $suivis->id], ['escape' => false, 'style' => 'margin:0']) ?>
  417 + <td class="actions">
  418 + <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Suivis', 'action' => 'view', $suivis->id], ['escape' => false, 'style' => 'margin:0'])?>
292 419 </td>
293   - </tr>
  420 + </tr>
294 421 <?php endforeach; ?>
295 422 </table>
296 423 <?php }else { echo 'Aucun suivi pour ce matériel.'; } ?>
297 424 </div>
298   -
299   -
300   -
  425 +
  426 +
  427 +
301 428 <h3 id="t_emprunts" style="cursor: pointer;">
302   - <i class="icon-chevron-down" style="font-size: 14px;" id="i_emprunts"></i>
  429 + <i class="icon-chevron-down" style="font-size: 14px;" id="i_emprunts"></i>
303 430 <span style="text-decoration: underline;">Emprunt(s) du matériel (<?= count($materiel->emprunts) ?>)</span>
304 431 </h3>
305 432 <div id="emprunts" style="margin-bottom: 20px;">
306 433  
307 434 <?php if (!empty($materiel->emprunts)) { ?>
308   - <table>
309   - <tr>
310   - <th><?= __('Emprunteur') ?></th>
311   - <th><?= __('Type d\'Emprunt') ?></th>
312   - <th><?= __('Où') ?></th>
313   - <th><?= __('Date de l\'emprunt') ?></th>
314   - <th><?= __('Date de retour') ?></th>
315   - <th style="width:50px;"><?= __('Détail') ?></th>
316   - </tr>
317   - <?php foreach ($materiel->emprunts as $emprunts):
318   -
319   - $type = 'Externe';
320   - $lieu = $emprunts['laboratoire'];
321   - if ($emprunts['emprunt_interne'] == 1)
322   - {
323   - $type = 'Interne';
324   - $lieu = $sites->find()->where(['id =' => h($emprunts->site_id)])->first()['nom'].'-'.h($emprunts->e_lieu_detail);
325   - }
326   - ?>
  435 + <table>
  436 + <tr>
  437 + <th><?= __('Emprunteur') ?></th>
  438 + <th><?= __('Type d\'Emprunt') ?></th>
  439 + <th><?= __('Où') ?></th>
  440 + <th><?= __('Date de l\'emprunt') ?></th>
  441 + <th><?= __('Date de retour') ?></th>
  442 + <th style="width: 50px;"><?= __('Détail') ?></th>
  443 + </tr>
  444 + <?php
  445 +
  446 +foreach ( $materiel->emprunts as $emprunts ) :
  447 +
  448 + $type = 'Externe';
  449 + $lieu = $emprunts ['laboratoire'];
  450 + if ($emprunts ['emprunt_interne'] == 1) {
  451 + $type = 'Interne';
  452 + $lieu = $sites->find ()->where ( [
  453 + 'id =' => h ( $emprunts->site_id )
  454 + ] )->first () ['nom'] . '-' . h ( $emprunts->e_lieu_detail );
  455 + }
  456 + ?>
327 457 <tr>
328   - <td><?= h($emprunts->nom_emprunteur) ?></td>
329   - <td><?= h($type) ?></td>
330   - <td><?= h($lieu) ?></td>
331   - <td><?= h($emprunts->date_emprunt) ?></td>
332   - <td><?= h($emprunts->date_retour_emprunt) ?></td>
  458 + <td><?= h($emprunts->nom_emprunteur) ?></td>
  459 + <td><?= h($type) ?></td>
  460 + <td><?= h($lieu) ?></td>
  461 + <td><?= h($emprunts->date_emprunt) ?></td>
  462 + <td><?= h($emprunts->date_retour_emprunt) ?></td>
333 463  
334   - <td class="actions">
335   - <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Emprunts', 'action' => 'view', $emprunts->id], ['escape' => false, 'style' => 'margin:0']) ?>
  464 + <td class="actions">
  465 + <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Emprunts', 'action' => 'view', $emprunts->id], ['escape' => false, 'style' => 'margin:0'])?>
336 466 </td>
337   - </tr>
  467 + </tr>
338 468 <?php endforeach; ?>
339 469 </table>
340 470 <?php }else { echo 'Aucun emprunt pour ce matériel.'; } ?>
341 471 </div>
342 472  
343 473  
  474 + <?php
  475 + $nbFic = count ( $materiel->documents );
  476 + ?>
  477 +
344 478  
345 479 <h3 id="t_fichiers" style="cursor: pointer;">
346   - <i class="icon-chevron-down" style="font-size: 14px;" id="i_fichiers"></i>
347   - <span style="text-decoration: underline;">Fichier(s) lié(s) au matériel (<?= count($materiel->documents) ?>)</span>
  480 + <i class="icon-chevron-down" style="font-size: 14px;" id="i_fichiers"></i>
  481 + <span style="text-decoration: underline;">Fichier(s) lié(s) au matériel (<?= $nbFic ?>)</span>
348 482 </h3>
349 483 <div id="fichiers" style="margin-bottom: 20px;">
350 484  
351   - <?php if (!empty($materiel->documents)) { ?>
352   - <table>
353   - <tr>
354   - <th><?= __('Nom') ?></th>
355   - <th><?= __('Type') ?></th>
356   - <th style="width:50px;"><?= __('Détail') ?></th>
357   - <th style="width:50px;"><?= __('Télécharger') ?></th>
358   - <th style="width:50px;"><?= __('Supprimer') ?></th>
359   - </tr>
360   - <?php foreach ($materiel->documents as $documents):
361   -
362   - $type = $typeDocuments->find()->where(['id =' => h($documents->type_document_id)])->first()['nom'];
363   - ?>
  485 + <?php if ($nbFic != 0) { ?>
  486 + <table>
  487 + <tr>
  488 + <th><?= __('Nom') ?></th>
  489 + <th><?= __('Type') ?></th>
  490 + <th><?= __('Photo') ?></th>
  491 + <th style="width: 50px;"><?= __('Détail') ?></th>
  492 + <th style="width: 50px;"><?= __('Télécharger') ?></th>
  493 + <?php
  494 + if(($role == 'Utilisateur' && (in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]))) || (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  495 + ?>
  496 + <th style="width: 50px;"><?= __('Supprimer') ?></th>
  497 + <?php } ?>
  498 + </tr>
  499 + <?php
  500 +
  501 +foreach ( $materiel->documents as $documents ) :
  502 +
  503 + if ($documents->photo) {
  504 + $p = 'Oui';
  505 + } else {
  506 + $p = '';
  507 + }
  508 + $type = $typeDocuments->find ()->where ( [
  509 + 'id =' => h ( $documents->type_document_id )
  510 + ] )->first () ['nom'];
  511 + ?>
364 512 <tr>
365   - <td><?= h($documents->nom) ?></td>
366   - <td><?= $type ?></td>
  513 + <td><?= h($documents->nom) ?></td>
  514 + <td><?= $type ?></td>
  515 + <td><?= $p ?></td>
367 516  
368   - <td class="actions">
369   - <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Documents', 'action' => 'view', $documents->id], ['escape' => false, 'style' => 'margin:0']) ?>
370   - </td>
371   - <td class="actions">
372   - <?= $this->Html->link(__('<i class="icon-download"></i>'), '/webroot/files/'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?>
  517 + <td class="actions">
  518 + <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Documents', 'action' => 'view', $documents->id], ['escape' => false, 'style' => 'margin:0'])?>
373 519 </td>
374   - <td class="actions">
375   - <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0']) ?>
  520 +
  521 + <td class="actions">
  522 + <?php
  523 + if ($documents->photo) {
  524 + echo $this->Html->link ( __ ( '<i class="icon-download"></i>' ), '/webroot/img/photos/' . $documents->id . '.' . $documents->type_doc, [
  525 + 'title' => 'Télécharger',
  526 + 'style' => 'margin:0',
  527 + 'escape' => false
  528 + ] );
  529 + } else {
  530 + echo $this->Html->link ( __ ( '<i class="icon-download"></i>' ), '/webroot/files/' . $documents->id . '.' . $documents->type_doc, [
  531 + 'title' => 'Télécharger',
  532 + 'style' => 'margin:0',
  533 + 'escape' => false
  534 + ] );
  535 + }
  536 + ?>
376 537 </td>
377   - </tr>
378   - <?php endforeach; ?>
  538 + <?php
  539 + if(($role == 'Utilisateur' && (in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]))) || (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) || ($role == 'Responsable' && ($materiel->groupes_metier_id == $userConnected->groupes_metier_id || $materiel->groupes_thematique_id == $userConnected->groupe_thematique_id))) {
  540 + ?>
  541 + <td class="actions">
  542 + <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0', 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $documents->id)])?>
  543 + </td>
  544 + <?php } ?>
  545 + </tr>
  546 + <?php
  547 + endforeach
  548 + ;
  549 + ?>
379 550 </table>
380 551 <?php }else { echo 'Aucun fichier pour ce matériel.'; } ?>
381 552 </div>
382 553  
383   -</div>
  554 + </div>
384 555  
385 556  
386   - <div class="actions">
387   - <?php echo $this->element('menu') ?>
388   - <?php echo $this->element('menu_view',
389   - [ 'pluralHumanName' => 'Matériels',
390   - 'singularHumanName' => 'Matériel',
391   - 'lien' => $materiel->id ]) ?>
  557 + <div class="actions">
  558 + <?php echo $this->element('menu')?>
  559 + <?php
  560 +
  561 +echo $this->element ( 'menu_view', [
  562 + 'pluralHumanName' => 'Matériels',
  563 + 'singularHumanName' => 'Matériel',
  564 + 'lien' => $materiel->id
  565 + ] )?>
392 566 </div>
393 567 \ No newline at end of file
... ...
src/Template/Suivis/view.ctp
... ... @@ -66,7 +66,11 @@
66 66 <th><?= __('Type') ?></th>
67 67 <th style="width:50px;"><?= __('Détail') ?></th>
68 68 <th style="width:50px;"><?= __('Télécharger') ?></th>
  69 + <?php
  70 + if(($role == 'Utilisateur' && in_array($username, [$suivi->nom_createur])) || (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) || $role == 'Responsable' && ($suivi->groupes_metier_id == $userConnected->groupes_metier_id || $suivi->groupes_thematique_id == $userConnected->groupe_thematique_id)) {
  71 + ?>
69 72 <th style="width:50px;"><?= __('Supprimer') ?></th>
  73 + <?php } ?>
70 74 </tr>
71 75 <?php foreach ($suivi->documents as $documents):
72 76  
... ... @@ -83,9 +87,13 @@
83 87 <td class="actions">
84 88 <?= $this->Html->link(__('<i class="icon-download"></i>'), '/webroot/files/'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?>
85 89 </td>
  90 + <?php
  91 + if(($role == 'Utilisateur' && in_array($username, [$suivi->nom_createur])) || (in_array($role, ['Administration', 'Administration Plus', 'Super Administrateur'])) || $role == 'Responsable' && ($suivi->groupes_metier_id == $userConnected->groupes_metier_id || $suivi->groupes_thematique_id == $userConnected->groupe_thematique_id)) {
  92 + ?>
86 93 <td class="actions">
87   - <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0']) ?>
  94 + <?= $this->Form->postLink(__('<i class="icon-trash"></i>'), ['controller' => 'Documents', 'action' => 'delete', $documents->id], ['escape' => false, 'style' => 'margin:0', 'confirm' => __('Êtes-vous sur de vouloir supprimer # {0}?', $documents->id)]) ?>
88 95 </td>
  96 + <?php } ?>
89 97 </tr>
90 98 <?php endforeach; ?>
91 99 </table>
... ...
tests/Fixture/ConfigurationsFixture.php
... ... @@ -50,6 +50,7 @@ class ConfigurationsFixture extends TestFixture
50 50 'date_commande_facultative' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
51 51 'numero_labo_sans_annee' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
52 52 'prix_inventaire_administratif' => ['type' => 'integer', 'length' => 10, 'null' => true, 'default' => 800, 'comment' => '', 'precision' => null],
  53 + 'taille_max_doc' => ['type' => 'integer', 'length' => 15, 'null' => true, 'default' => 8000000, 'comment' => '', 'precision' => null],
53 54 '_constraints' => [
54 55 'primary' => ['type' => 'primary', 'columns' => ['id'], 'length' => []],
55 56 'nom_UNIQUE' => ['type' => 'unique', 'columns' => ['nom'], 'length' => []],
... ...
tests/Fixture/DocumentsFixture.php
... ... @@ -23,7 +23,8 @@ class DocumentsFixture extends TestFixture
23 23 'suivi_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
24 24 'nom' => ['type' => 'string', 'length' => 100, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null],
25 25 'type_document_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => '1', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
26   - '_indexes' => [
  26 + 'photo' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
  27 + '_indexes' => [
27 28 'fk_documents_materiel_id' => ['type' => 'index', 'columns' => ['materiel_id'], 'length' => []],
28 29 'fk_documents_suivi_id' => ['type' => 'index', 'columns' => ['suivi_id'], 'length' => []],
29 30 'fk_documents_type_documents_id' => ['type' => 'index', 'columns' => ['type_document_id'], 'length' => []],
... ...
tests/Fixture/MaterielsFixture.php
... ... @@ -53,6 +53,7 @@ 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' => '1', 'comment' => '', 'precision' => null, 'autoIncrement' => null],
  56 + 'photo_id' => ['type' => 'integer', 'length' => 11, 'unsigned' => false, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'autoIncrement' => null],
56 57 'hors_service' => ['type' => 'boolean', 'length' => null, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null],
57 58 '_indexes' => [
58 59 'fk_administrative_materials_sub_categories1' => ['type' => 'index', 'columns' => ['sous_categorie_id'], 'length' => []],
... ...
webroot/img/.gitignore
1 1 /qrcodes/
  2 +/photos/
2 3 \ No newline at end of file
... ...