Commit aca4ed9be4febe1876a03ce0c08c2de0920dda27
1 parent
8eb47d08
Exists in
master
and in
3 other branches
Version: 2.5.4.0
!!! Se placer dans database/update et exécuter le script ./db-update-2016-06-30.sh !!! statut suivi + modif icone + liste - cacher n/a + divers ajustements + envoi mails + bugfixes Demande terminé : https://projects.irap.omp.eu/issues/3759 https://projects.irap.omp.eu/issues/3923 https://projects.irap.omp.eu/issues/3922 https://projects.irap.omp.eu/issues/3917 Version majeure en cours (2.5): https://projects.irap.omp.eu/versions/99 ROADMAP: https://projects.irap.omp.eu/projects/labinvent/roadmap
Showing
23 changed files
with
214 additions
and
34 deletions
Show diff stats
README-LABINVENT.md
... | ... | @@ -50,10 +50,17 @@ Logiciel testé et validé sur les configurations suivantes : |
50 | 50 | |
51 | 51 | VERSION ACTUELLE |
52 | 52 | |
53 | -Date: 29/06/2016 | |
54 | -Version: 2.5.3.1 | |
53 | +Date: 30/06/2016 | |
54 | +Version: 2.5.4.0 | |
55 | 55 | |
56 | -bugfixes | |
56 | +!!! Se placer dans database/update et exécuter le script ./db-update-2016-06-30.sh !!! | |
57 | + | |
58 | +statut suivi + modif icone + liste - cacher n/a + divers ajustements + envoi mails + bugfixes | |
59 | + | |
60 | +Demande terminé : https://projects.irap.omp.eu/issues/3759 | |
61 | + https://projects.irap.omp.eu/issues/3923 | |
62 | + https://projects.irap.omp.eu/issues/3922 | |
63 | + https://projects.irap.omp.eu/issues/3917 | |
57 | 64 | |
58 | 65 | Version majeure en cours (2.5): https://projects.irap.omp.eu/versions/99 |
59 | 66 | |
... | ... | @@ -92,6 +99,8 @@ Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/c |
92 | 99 | |
93 | 100 | MODIFICATIONS STRUCTURELLES A FAIRE MANUELLEMENT APRES LA MISE A JOUR (git pull) |
94 | 101 | |
102 | +30/06/16 (v2.5.4.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-30.sh | |
103 | + | |
95 | 104 | 28/06/16 (v2.5.1.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-28.sh |
96 | 105 | |
97 | 106 | 27/06/16 (v2.5.0.0) Se placer dans database/update et exécuter le script ./db-update-2016-06-27.sh | ... | ... |
database/labinvent_2.1_12-05-16.sql
... | ... | @@ -255,6 +255,7 @@ CREATE TABLE IF NOT EXISTS `suivis` ( |
255 | 255 | `panne_resolu` tinyint(1) DEFAULT 1, |
256 | 256 | `groupes_thematique_id` int(11) DEFAULT NULL, |
257 | 257 | `groupes_metier_id` int(11) DEFAULT NULL, |
258 | + `statut` varchar(30) DEFAULT 'En cours', | |
258 | 259 | `nom_createur` varchar(45) DEFAULT NULL COMMENT 'nom du createur de la fiche', |
259 | 260 | `nom_modificateur` varchar(45) DEFAULT NULL COMMENT 'nom du modificateur de la fiche', |
260 | 261 | `created` datetime DEFAULT NULL COMMENT 'date et heure de creation de la fiche', | ... | ... |
... | ... | @@ -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-30.sql ./script_sql/db-update-2016-06-30-build.sql | |
23 | + | |
24 | +# Execute sql update script | |
25 | +sed -e "s/database/$database/" -i ./script_sql/db-update-2016-06-30-build.sql | |
26 | +mysql --user=$username --password=$password -h $host < ./script_sql/db-update-2016-06-30-build.sql | |
27 | + | |
28 | +# Delete cakephp cache | |
29 | +sudo rm ../../tmp/cache/models/* | |
30 | +sudo rm ../../tmp/cache/persistent/* | |
31 | + | |
32 | +sudo chmod -R 777 ../../tmp | |
33 | +sudo chmod -R 777 ../../vendor | |
34 | +sudo chmod -R 777 ../../webroot | ... | ... |
src/Controller/AppController.php
... | ... | @@ -191,6 +191,45 @@ class AppController extends Controller |
191 | 191 | } |
192 | 192 | |
193 | 193 | /** |
194 | + * @param string $subject | |
195 | + * @param string $message | |
196 | + * @param string[] $to | |
197 | + */ | |
198 | + public function sendEmailTo($subject, $message, $to = null) { | |
199 | + | |
200 | + $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first(); | |
201 | + | |
202 | + if ($to != null && !$configuration->test) { | |
203 | + | |
204 | + for($i = 0; $i < sizeof($to); $i++) { | |
205 | + | |
206 | + | |
207 | + if (filter_var($to[$i], FILTER_VALIDATE_EMAIL)) { | |
208 | + $email = new Email(); | |
209 | + | |
210 | + $etiquetteFrom = explode("@", $configuration->sender_mail); | |
211 | + | |
212 | + if($configuration->envoi_mail_management_dev) { | |
213 | + $email->transport('dev') | |
214 | + ->from([$configuration->sender_mail => $etiquetteFrom[0]]) | |
215 | + ->to($to[$i]) | |
216 | + ->subject("[LabInvent] ".$subject) | |
217 | + ->send($message); | |
218 | + } else { | |
219 | + $email->transport('default') | |
220 | + ->from([$configuration->sender_mail => $etiquetteFrom[0]]) | |
221 | + ->to($to[$i]) | |
222 | + ->subject("[LabInvent] ".$subject) | |
223 | + ->send($message); | |
224 | + } | |
225 | + } | |
226 | + | |
227 | + } | |
228 | + } | |
229 | + | |
230 | + } | |
231 | + | |
232 | + /** | |
194 | 233 | * Envoi d'un email à la gestion (et aux devs) pour prévenir qu'un matériel a été créé ou modifié |
195 | 234 | * (cf howto dans http://book.cakephp.org/2.0/fr/core-utility-libraries/email.html) |
196 | 235 | * @param string $subject |
... | ... | @@ -317,21 +356,23 @@ class AppController extends Controller |
317 | 356 | if($role == null) $role = 'Utilisateur'; |
318 | 357 | |
319 | 358 | $subject = 'Ajout d\'un matériel'; |
320 | - $message = $createurName.' (email = '.$createurEmail.', role = '.$role.') a ajouté le matériel "'.$materiel->designation.'" et vous a nommé propriétaire de ce matériel.'; | |
359 | + $message = $createurName.' (email = '.$createurEmail.', role = '.$role.') a ajouté le matériel "'.$materiel->designation.'" ('.$materiel->numero_laboratoire.') et vous a nommé propriétaire de ce matériel.'; | |
321 | 360 | |
322 | 361 | if ($toEmail != null && !$configuration->test) { |
323 | 362 | if (filter_var($toEmail, FILTER_VALIDATE_EMAIL)) { |
324 | 363 | $email = new Email(); |
325 | - | |
364 | + | |
365 | + $etiquetteFrom = explode("@", $configuration->sender_mail); | |
366 | + | |
326 | 367 | if($configuration->envoi_mail_management_dev) { |
327 | 368 | $email->transport('dev') |
328 | - ->from(["labinvent2@".$configuration->from_mail => "Labinvent2"]) | |
369 | + ->from([$configuration->sender_mail => $etiquetteFrom[0]]) | |
329 | 370 | ->to($toEmail) |
330 | 371 | ->subject("[LabInvent] ".$subject) |
331 | 372 | ->send($message); |
332 | 373 | } else { |
333 | 374 | $email->transport('default') |
334 | - ->from(["labinvent2@".$configuration->from_mail => "Labinvent2"]) | |
375 | + ->from([$configuration->sender_mail => $etiquetteFrom[0]]) | |
335 | 376 | ->to($toEmail) |
336 | 377 | ->subject("[LabInvent] ".$subject) |
337 | 378 | ->send($message); | ... | ... |
src/Controller/DocumentsController.php
... | ... | @@ -184,10 +184,13 @@ class DocumentsController extends AppController |
184 | 184 | |
185 | 185 | if(isset($this->passedArgs[2]) && $this->passedArgs[2] == 'photo') { |
186 | 186 | $this->set('photo', 1); |
187 | - } | |
188 | - | |
187 | + $typesD = $this->Documents->TypeDocuments->find('list', [ 'keyField' => 'id', 'valueField' => 'nom'])->where(['nom =' => 'Photo']); | |
188 | + $idType = $this->Documents->TypeDocuments->find()->where(['nom =' => 'Photo'])->first()['id']; | |
189 | + $this->set('idType', $idType); | |
190 | + } else { | |
191 | + $typesD = $this->Documents->TypeDocuments->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'TypeDocuments.nom']); | |
192 | + } | |
189 | 193 | |
190 | - $typesD = $this->Documents->TypeDocuments->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', 'order' => 'TypeDocuments.nom']); | |
191 | 194 | |
192 | 195 | $this->set(compact('document', 'typesD')); |
193 | 196 | $this->set('_serialize', ['document']); | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -252,10 +252,30 @@ class MaterielsController extends AppController |
252 | 252 | $materiel = $this->Materiels->patchEntity($materiel, $this->request->data); |
253 | 253 | if ($this->Materiels->save($materiel)) { |
254 | 254 | $this->Flash->success(__('Le matériel a bien été ajouté.')); |
255 | + | |
255 | 256 | $this->sendEmailToManagement($materiel->id); |
257 | + | |
256 | 258 | if($materiel->nom_createur != $materiel->nom_responsable) { |
257 | 259 | $this->sendEmailToCreate($materiel->id); |
258 | 260 | } |
261 | + | |
262 | + $message = $materiel->get('nom_createur').' a ajouté le matériel '.$materiel->get('designation').' ('.$materiel->numero_laboratoire.')'; | |
263 | + | |
264 | + $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Responsable', 'groupes_metier_id =' => $materiel->get('groupes_metier_id')])->orWhere(['role =' => 'Responsable', 'groupe_thematique_id =' => $materiel->get('groupes_thematique_id')])->toArray(); | |
265 | + $mails = []; | |
266 | + for($i = 0; $i < sizeof($mailsResp); $i++) { | |
267 | + $mails[$i] = $mailsResp[$i]['email']; | |
268 | + } | |
269 | + $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); | |
270 | + | |
271 | + $mailsResp = TableRegistry::get('Users')->find()->select('email')->where(['role =' => 'Administration Plus'])->orWhere(['role =' => 'Administration'])->toArray(); | |
272 | + $mails = []; | |
273 | + for($i = 0; $i < sizeof($mailsResp); $i++) { | |
274 | + $mails[$i] = $mailsResp[$i]['email']; | |
275 | + } | |
276 | + $this->sendEmailTo('Ajout d\'un matériel', $message, $mails); | |
277 | + | |
278 | + | |
259 | 279 | return $this->redirect(['action' => 'view', $materiel->id]); |
260 | 280 | } else { |
261 | 281 | $this->Flash->error(__('Le matériel n\'a pas pu être ajouté.')); |
... | ... | @@ -307,6 +327,10 @@ class MaterielsController extends AppController |
307 | 327 | if ($this->Materiels->save($materiel)) { |
308 | 328 | $this->Flash->success(__('Le matériel a bien été édité.')); |
309 | 329 | $this->sendEmailToManagement($id); |
330 | + if($materiel->nom_modificateur != $materiel->nom_responsable) { | |
331 | + $message = $materiel->get('nom_modificateur').' a édité le matériel '.$materiel->get('designation').' ('.$materiel->numero_laboratoire.')'; | |
332 | + $this->sendEmailTo('Modification d\'un matériel', $message, [$materiel->get('email_responsable')]); | |
333 | + } | |
310 | 334 | return $this->redirect(['action' => 'view', $id]); |
311 | 335 | } else { |
312 | 336 | $this->Flash->error(__('Le matériel n\'a pas pu être édité.')); |
... | ... | @@ -448,9 +472,11 @@ class MaterielsController extends AppController |
448 | 472 | |
449 | 473 | if($newStatus == 'VALIDATED') { |
450 | 474 | if(!isset($materiel->nom_responsable) || !isset($materiel->fournisseur) || !isset($materiel->numero_commande) || !isset($materiel->organisme_id) || !isset($materiel->date_reception) || !isset($materiel->prix_ht)) { |
451 | - $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'); | |
475 | + $this->Flash->error('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'); | |
452 | 476 | return $this->redirect(['action' => 'edit', $id]); |
453 | 477 | } |
478 | + $message = 'Le matériel '.$materiel->get('designation').' ('.$materiel->numero_laboratoire.') a été validé.'; | |
479 | + $this->sendEmailTo('Validation d\'un matériel', $message, [$materiel->get('email_responsable')]); | |
454 | 480 | } |
455 | 481 | |
456 | 482 | if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false])) { | ... | ... |
src/Controller/SuivisController.php
... | ... | @@ -235,6 +235,7 @@ class SuivisController extends AppController |
235 | 235 | $periode_interventionRequest, |
236 | 236 | $this->getConditionForFieldNumber('type_suivi_id'), |
237 | 237 | $this->getConditionForField('organisme'), |
238 | + $this->getConditionForField('statut'), | |
238 | 239 | $this->getConditionForFieldNumber('groupes_metier_id'), |
239 | 240 | $this->getConditionForFieldNumber('groupes_thematique_id'), |
240 | 241 | ]; | ... | ... |
src/Model/Entity/Suivi.php
... | ... | @@ -23,6 +23,7 @@ use Cake\ORM\Entity; |
23 | 23 | * @property string $commentaire |
24 | 24 | * @property string $nom_createur |
25 | 25 | * @property string $nom_modificateur |
26 | + * @property string $statut | |
26 | 27 | * @property bool panne_resolu |
27 | 28 | * @property \Cake\I18n\Time $created |
28 | 29 | * @property \Cake\I18n\Time $modified | ... | ... |
src/Template/Documents/add.ctp
... | ... | @@ -16,7 +16,14 @@ |
16 | 16 | } |
17 | 17 | |
18 | 18 | echo $this->Form->input('nom'); |
19 | - echo $this->Form->input('type_document_id', ['label' => 'Type', 'options' => $typesD, 'default' => 1]); | |
19 | + | |
20 | + if(isset($photo)) { | |
21 | + echo $this->Form->hidden('type_document_id', ['label' => 'Type', 'options' => $typesD, 'default' => $idType]); | |
22 | + } | |
23 | + else { | |
24 | + echo $this->Form->input('type_document_id', ['label' => 'Type', 'options' => $typesD, 'default' => 1]); | |
25 | + } | |
26 | + | |
20 | 27 | echo $this->Form->input('description'); |
21 | 28 | echo $this->Form->input('chemin_file', ['label' => 'Fichier ('.substr($configuration->taille_max_doc/(1024*1024), 0, 4).' Mo max)', 'type' => 'file']); |
22 | 29 | ... | ... |
src/Template/Documents/edit.ctp
... | ... | @@ -16,7 +16,14 @@ |
16 | 16 | } |
17 | 17 | |
18 | 18 | echo $this->Form->input('nom'); |
19 | - echo $this->Form->input('type_document_id', ['label' => 'Type', 'options' => $typesD, 'default' => 1]); | |
19 | + | |
20 | + if(isset($photo)) { | |
21 | + echo $this->Form->hidden('type_document_id', ['label' => 'Type', 'options' => $typesD]); | |
22 | + } | |
23 | + else { | |
24 | + echo $this->Form->input('type_document_id', ['label' => 'Type', 'options' => $typesD]); | |
25 | + } | |
26 | + | |
20 | 27 | echo $this->Form->input('description'); |
21 | 28 | |
22 | 29 | echo $this->Form->hidden('chemin_file', ['label' => 'Fichier ('.substr($configuration->taille_max_doc/(1024*1024), 0, 4).' Mo max)', 'type' => 'file']); | ... | ... |
src/Template/Documents/index.ctp
... | ... | @@ -9,7 +9,7 @@ |
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 | + <th><?= $this->Paginator->sort('photo', 'Miniature') ?></th> | |
13 | 13 | <th class="actions"><?= __('') ?></th> |
14 | 14 | </tr> |
15 | 15 | </thead> |
... | ... | @@ -40,12 +40,12 @@ |
40 | 40 | <?= $this->Html->link(__('<i class="icon-eye-open"></i>'), ['action' => 'view', $document->id], ['title' => 'Visualiser', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> |
41 | 41 | <?php |
42 | 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 ]); | |
43 | + echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/img/photos/'.$document->id.'.'.$document->type_doc, ['title' => 'Télécharger', 'style' => 'margin: 0 2px', 'escape' => false ]); | |
44 | 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 ]); | |
45 | + echo $this->Form->postLink(__('<i class="icon-download-alt"></i>'), '/webroot/files/'.$document->id.'.'.$document->type_doc, ['title' => 'Télécharger', 'style' => 'margin: 0 2px', 'escape' => false ]); | |
46 | 46 | } |
47 | 47 | ?> |
48 | - <?= $this->Html->link(__('<i class="icon-edit"></i>'), ['action' => 'edit', $document->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false]) ?> | |
48 | + <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $document->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false]) ?> | |
49 | 49 | |
50 | 50 | <?= $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)]) ?> |
51 | 51 | </td> | ... | ... |
src/Template/Documents/view.ctp
... | ... | @@ -2,7 +2,16 @@ |
2 | 2 | |
3 | 3 | <div class="documents view"> |
4 | 4 | <h2>Détail document</h2> |
5 | - | |
5 | + <?php | |
6 | + if($document->photo) { | |
7 | + echo '<div style="text-align: center;">'; | |
8 | + echo $this->Html->image ( 'photos/' . $document->id.'.'.$document->type_doc, [ | |
9 | + 'alt' => 'Photo', | |
10 | + 'style' => 'max-width: 300px; text-align: center;' | |
11 | + ]); | |
12 | + echo '</div>'; | |
13 | + } | |
14 | + ?> | |
6 | 15 | <table style="margin-bottom: 30px;"> |
7 | 16 | <tr><th style="width: 250px;"></th><th></th></tr> |
8 | 17 | |
... | ... | @@ -18,6 +27,13 @@ |
18 | 27 | $displayElement(__('Nom'), h($document->nom)); |
19 | 28 | $displayElement(__('Type'), $document->has('type_document') ? h($document->type_document->nom) : ''); |
20 | 29 | |
30 | + if($document->photo) { | |
31 | + $p = 'Oui'; | |
32 | + } else { | |
33 | + $p = 'Non'; | |
34 | + } | |
35 | + $displayElement(__('Miniature'), $p); | |
36 | + | |
21 | 37 | echo '<tr><td><strong>'.__('Description').' </strong></td><td>'.nl2br($document->description).'</td></tr>'; |
22 | 38 | |
23 | 39 | $displayElement(__('Extension fichier'), h($document->type_doc)); |
... | ... | @@ -29,8 +45,6 @@ |
29 | 45 | 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>'; |
30 | 46 | } |
31 | 47 | |
32 | - | |
33 | - | |
34 | 48 | |
35 | 49 | |
36 | 50 | ?> | ... | ... |
src/Template/GroupesMetiers/index.ctp
... | ... | @@ -10,7 +10,9 @@ |
10 | 10 | </tr> |
11 | 11 | </thead> |
12 | 12 | <tbody> |
13 | - <?php foreach ($groupesMetiers as $groupesMetier): ?> | |
13 | + <?php foreach ($groupesMetiers as $groupesMetier): | |
14 | + if($groupesMetier->nom != 'N/A') { | |
15 | + ?> | |
14 | 16 | <tr> |
15 | 17 | <td class="smallText"><?= $this->Html->link($groupesMetier->nom, ['action' => 'view', $groupesMetier->id]) ?></td> |
16 | 18 | <td class="smallText"><?= h($groupesMetier->description) ?></td> |
... | ... | @@ -28,7 +30,9 @@ |
28 | 30 | </td> |
29 | 31 | |
30 | 32 | </tr> |
31 | - <?php endforeach; ?> | |
33 | + <?php | |
34 | + } | |
35 | + endforeach; ?> | |
32 | 36 | </tbody> |
33 | 37 | </table> |
34 | 38 | ... | ... |
src/Template/GroupesThematiques/index.ctp
... | ... | @@ -10,7 +10,8 @@ |
10 | 10 | </tr> |
11 | 11 | </thead> |
12 | 12 | <tbody> |
13 | - <?php foreach ($groupesThematiques as $groupesThematique): ?> | |
13 | + <?php foreach ($groupesThematiques as $groupesThematique): | |
14 | + if($groupesThematique->nom != 'N/A') {?> | |
14 | 15 | <tr> |
15 | 16 | <td class="smallText"><?= $this->Html->link($groupesThematique->nom, ['action' => 'view', $groupesThematique->id]) ?></td> |
16 | 17 | <td class="smallText"><?= h($groupesThematique->description) ?></td> |
... | ... | @@ -28,7 +29,9 @@ |
28 | 29 | </td> |
29 | 30 | |
30 | 31 | </tr> |
31 | - <?php endforeach; ?> | |
32 | + <?php | |
33 | + } | |
34 | + endforeach; ?> | |
32 | 35 | </tbody> |
33 | 36 | </table> |
34 | 37 | ... | ... |
src/Template/Layout/default.ctp
... | ... | @@ -94,7 +94,7 @@ $cakeDescription = 'Labinvent 2'; |
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.3.1 (29/06/2016)</font> | |
97 | + <font color="black">VERSION 2.5.4.0 (30/06/2016)</font> | |
98 | 98 | </td> |
99 | 99 | </tr> |
100 | 100 | </table> | ... | ... |
src/Template/Materiels/view.ctp
... | ... | @@ -402,18 +402,22 @@ if (h ( $materiel->status ) == 'ARCHIVED') |
402 | 402 | <?php if (!empty($materiel->suivis)) { ?> |
403 | 403 | <table> |
404 | 404 | <tr> |
405 | + <th><?= __('N°') ?></th> | |
405 | 406 | <th><?= __('Prestataire') ?></th> |
406 | 407 | <th><?= __('Date du contrôle') ?></th> |
407 | 408 | <th><?= __('Date prochain contrôle') ?></th> |
408 | 409 | <th><?= __('Type d\'intervention') ?></th> |
410 | + <th><?= __('Statut') ?></th> | |
409 | 411 | <th style="width: 50px;"><?= __('Détail') ?></th> |
410 | 412 | </tr> |
411 | 413 | <?php foreach ($materiel->suivis as $suivis): ?> |
412 | 414 | <tr> |
415 | + <td><?= $this->Html->link('Suivi '.$suivis->id, ['controller' => 'suivis', 'action' => 'view', $suivis->id]) ?></td> | |
413 | 416 | <td><?= h($suivis->organisme) ?></td> |
414 | 417 | <td><?= h($suivis->date_controle) ?></td> |
415 | 418 | <td><?= h($suivis->date_prochain_controle) ?></td> |
416 | 419 | <td><?= $typeSuivis->find()->where(['id =' => h($suivis->type_suivi_id)])->first()['nom']; ?></td> |
420 | + <td><?= h($suivis->statut) ?></td> | |
417 | 421 | |
418 | 422 | <td class="actions"> |
419 | 423 | <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Suivis', 'action' => 'view', $suivis->id], ['escape' => false, 'style' => 'margin:0'])?> |
... | ... | @@ -435,6 +439,7 @@ if (h ( $materiel->status ) == 'ARCHIVED') |
435 | 439 | <?php if (!empty($materiel->emprunts)) { ?> |
436 | 440 | <table> |
437 | 441 | <tr> |
442 | + <th><?= __('N°') ?></th> | |
438 | 443 | <th><?= __('Emprunteur') ?></th> |
439 | 444 | <th><?= __('Type d\'Emprunt') ?></th> |
440 | 445 | <th><?= __('Où') ?></th> |
... | ... | @@ -456,6 +461,7 @@ foreach ( $materiel->emprunts as $emprunts ) : |
456 | 461 | } |
457 | 462 | ?> |
458 | 463 | <tr> |
464 | + <td><?= $this->Html->link('Emprunt '.$emprunts->id, ['controller' => 'emprunts', 'action' => 'view', $emprunts->id]) ?></td> | |
459 | 465 | <td><?= h($emprunts->nom_emprunteur) ?></td> |
460 | 466 | <td><?= h($type) ?></td> |
461 | 467 | <td><?= h($lieu) ?></td> |
... | ... | @@ -488,7 +494,7 @@ foreach ( $materiel->emprunts as $emprunts ) : |
488 | 494 | <tr> |
489 | 495 | <th><?= __('Nom') ?></th> |
490 | 496 | <th><?= __('Type') ?></th> |
491 | - <th><?= __('Photo') ?></th> | |
497 | + <th><?= __('Miniature') ?></th> | |
492 | 498 | <th style="width: 50px;"><?= __('Détail') ?></th> |
493 | 499 | <th style="width: 50px;"><?= __('Télécharger') ?></th> |
494 | 500 | <?php |
... | ... | @@ -512,7 +518,8 @@ foreach ( $materiel->documents as $documents ) : |
512 | 518 | ] )->first () ['nom']; |
513 | 519 | ?> |
514 | 520 | <tr> |
515 | - <td><?= h($documents->nom) ?></td> | |
521 | + | |
522 | + <td><?= $this->Html->link($documents->nom, ['controller' => 'documents', 'action' => 'view', $documents->id]) ?></td> | |
516 | 523 | <td><?= $type ?></td> |
517 | 524 | <td><?= $p ?></td> |
518 | 525 | |
... | ... | @@ -523,13 +530,13 @@ foreach ( $materiel->documents as $documents ) : |
523 | 530 | <td class="actions"> |
524 | 531 | <?php |
525 | 532 | if ($documents->photo) { |
526 | - echo $this->Html->link ( __ ( '<i class="icon-download"></i>' ), '/webroot/img/photos/' . $documents->id . '.' . $documents->type_doc, [ | |
533 | + echo $this->Html->link ( __ ( '<i class="icon-download-alt"></i>' ), '/webroot/img/photos/' . $documents->id . '.' . $documents->type_doc, [ | |
527 | 534 | 'title' => 'Télécharger', |
528 | 535 | 'style' => 'margin:0', |
529 | 536 | 'escape' => false |
530 | 537 | ] ); |
531 | 538 | } else { |
532 | - echo $this->Html->link ( __ ( '<i class="icon-download"></i>' ), '/webroot/files/' . $documents->id . '.' . $documents->type_doc, [ | |
539 | + echo $this->Html->link ( __ ( '<i class="icon-download-alt"></i>' ), '/webroot/files/' . $documents->id . '.' . $documents->type_doc, [ | |
533 | 540 | 'title' => 'Télécharger', |
534 | 541 | 'style' => 'margin:0', |
535 | 542 | 'escape' => false |
... | ... | @@ -541,7 +548,7 @@ foreach ( $materiel->documents as $documents ) : |
541 | 548 | 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))) { |
542 | 549 | ?> |
543 | 550 | <td class="actions"> |
544 | - <?= $this->Html->link(__('<i class="icon-edit"></i>'), ['controller' => 'Documents', 'action' => 'edit', $documents->id], ['escape' => false, 'style' => 'margin:0'])?> | |
551 | + <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['controller' => 'Documents', 'action' => 'edit', $documents->id], ['escape' => false, 'style' => 'margin:0'])?> | |
545 | 552 | </td> |
546 | 553 | <td class="actions"> |
547 | 554 | <?= $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)])?> | ... | ... |
src/Template/Suivis/edit.ctp
... | ... | @@ -18,6 +18,10 @@ |
18 | 18 | 'options' => $typeSuivis |
19 | 19 | ]); |
20 | 20 | |
21 | + echo $this->Form->input ('statut', [ | |
22 | + 'options' => ['En cours' => 'En cours', 'Terminé' => 'Terminé'], | |
23 | + ]); | |
24 | + | |
21 | 25 | echo $this->Form->input('date_controle', [ |
22 | 26 | 'type' => 'text', |
23 | 27 | 'label' => 'Date intervention', | ... | ... |
src/Template/Suivis/find.ctp
... | ... | @@ -26,6 +26,12 @@ $r = isset ($_results); |
26 | 26 | // FORMULAIRE DE RECHERCHE |
27 | 27 | echo $this->Form->create(); |
28 | 28 | |
29 | + echo $this->Form->input ('s_statut', [ | |
30 | + 'label' => 'Statut', | |
31 | + 'empty' => 'Tous', | |
32 | + 'options' => ['En cours' => 'En cours', 'Terminé' => 'Terminé'], | |
33 | + ]); | |
34 | + | |
29 | 35 | // Type suivi |
30 | 36 | echo $this->Form->input ( 's_type_suivi_id', [ |
31 | 37 | 'label' => 'Type de suivi', |
... | ... | @@ -103,6 +109,7 @@ $r = isset ($_results); |
103 | 109 | <th><?= $this->Paginator->sort('date_controle', 'Date intervention') ?></th> |
104 | 110 | <th><?= $this->Paginator->sort('date_prochain_controle', 'Date prochaine intervention') ?></th> |
105 | 111 | <th><?= $this->Paginator->sort('type_suivi_id', "Type d'intervention") ?></th> |
112 | + <th><?= $this->Paginator->sort('statut', "Statut") ?></th> | |
106 | 113 | <th style="width: 20px;"></th> |
107 | 114 | <th style="width: 20px;"></th> |
108 | 115 | <th style="width: 20px;"></th> |
... | ... | @@ -123,6 +130,7 @@ $r = isset ($_results); |
123 | 130 | <td class="smallText"><?= h($suivi->date_controle) ?></td> |
124 | 131 | <td class="smallText"><?= h($suivi->date_prochain_controle) ?></td> |
125 | 132 | <td class="smallText"><?= $s_type_suivis->find()->where(['id =' => h($suivi->type_suivi_id)])->first()['nom'] ?></td> |
133 | + <td class="smallText"><?= h($suivi->statut) ?></td> | |
126 | 134 | |
127 | 135 | <?php |
128 | 136 | echo '<td class="actions" style="padding: 6px 0;">'; | ... | ... |
src/Template/Suivis/index.ctp
... | ... | @@ -10,6 +10,7 @@ |
10 | 10 | <th><?= $this->Paginator->sort('date_controle', 'Date intervention') ?></th> |
11 | 11 | <th><?= $this->Paginator->sort('date_prochain_controle', 'Date prochaine intervention') ?></th> |
12 | 12 | <th><?= $this->Paginator->sort('type_suivi_id', "Type d'intervention") ?></th> |
13 | + <th><?= $this->Paginator->sort('statut', "Statut") ?></th> | |
13 | 14 | <th class="actions"><?= __('') ?></th> |
14 | 15 | </tr> |
15 | 16 | </thead> |
... | ... | @@ -22,6 +23,7 @@ |
22 | 23 | <td class="smallText"><?= h($suivi->date_controle) ?></td> |
23 | 24 | <td class="smallText"><?= h($suivi->date_prochain_controle) ?></td> |
24 | 25 | <td class="smallText"><?= $suivi->has('type_suivi') ? h($suivi->type_suivi->nom) : '' ?></td> |
26 | + <td class="smallText"><?= h($suivi->statut) ?></td> | |
25 | 27 | |
26 | 28 | <td class="actions" style="padding: 6px 0;"> |
27 | 29 | <?= $this->Html->link(__('<i class="icon-eye-open"></i>'), ['action' => 'view', $suivi->id], ['title' => 'Visualiser', 'style' => 'margin: 0 2px', 'escape' => false ]) ?> | ... | ... |
src/Template/Suivis/view.ctp
... | ... | @@ -33,6 +33,7 @@ |
33 | 33 | |
34 | 34 | $displayElement(__('Materiel'), $suivi->has('materiel') ? $this->Html->link($suivi->materiel->designation, ['controller' => 'Materiels', 'action' => 'view', $suivi->materiel->id]) : ''); |
35 | 35 | $displayElement(__('Numéro interne (labo)'), $suivi->has('materiel') ? h($suivi->materiel->numero_laboratoire) : ''); |
36 | + $displayElement(__('Statut'), h($suivi->statut)); | |
36 | 37 | $displayElement(__('Date Intervention'), h($suivi->date_controle)); |
37 | 38 | $displayElement(__('Date Prochaine Intervention'), h($suivi->date_prochain_controle)); |
38 | 39 | $displayElement(__('Type d\'intervention'), $suivi->has('type_suivi') ? h($suivi->type_suivi->nom) : ''); |
... | ... | @@ -80,20 +81,20 @@ |
80 | 81 | |
81 | 82 | ?> |
82 | 83 | <tr> |
83 | - <td><?= h($documents->nom) ?></td> | |
84 | + <td><?= $this->Html->link($documents->nom, ['controller' => 'documents', 'action' => 'view', $documents->id]) ?></td> | |
84 | 85 | <td><?= $type ?></td> |
85 | 86 | |
86 | 87 | <td class="actions"> |
87 | 88 | <?= $this->Html->link(__('<i class="icon-search"></i>'), ['controller' => 'Documents', 'action' => 'view', $documents->id], ['escape' => false, 'style' => 'margin:0']) ?> |
88 | 89 | </td> |
89 | 90 | <td class="actions"> |
90 | - <?= $this->Html->link(__('<i class="icon-download"></i>'), '/webroot/files/'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?> | |
91 | + <?= $this->Html->link(__('<i class="icon-download-alt"></i>'), '/webroot/files/'.$documents->id.'.'.$documents->type_doc, ['title' => 'Télécharger', 'style' => 'margin:0', 'escape' => false ]) ?> | |
91 | 92 | </td> |
92 | 93 | <?php |
93 | 94 | 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)) { |
94 | 95 | ?> |
95 | 96 | <td class="actions"> |
96 | - <?= $this->Html->link(__('<i class="icon-edit"></i>'), ['controller' => 'Documents', 'action' => 'edit', $documents->id], ['escape' => false, 'style' => 'margin:0'])?> | |
97 | + <?= $this->Html->link(__('<i class="icon-pencil"></i>'), ['controller' => 'Documents', 'action' => 'edit', $documents->id], ['escape' => false, 'style' => 'margin:0'])?> | |
97 | 98 | </td> |
98 | 99 | <td class="actions"> |
99 | 100 | <?= $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)]) ?> | ... | ... |
src/Template/TypeDocuments/index.ctp
tests/Fixture/SuivisFixture.php
... | ... | @@ -29,7 +29,8 @@ class SuivisFixture extends TestFixture |
29 | 29 | 'type_frequence' => ['type' => 'string', 'length' =>30, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null], |
30 | 30 | 'panne_resolu' => ['type' => 'boolean', 'length' =>null, 'null' => true, 'default' => 1, 'comment' => '', 'precision' => null, 'fixed' => null], |
31 | 31 | 'commentaire' => ['type' => 'string', 'length' => 100, 'null' => true, 'default' => null, 'comment' => '', 'precision' => null, 'fixed' => null], |
32 | - 'nom_createur' => ['type' => 'string', 'length' => 45, 'null' => true, 'default' => null, 'comment' => 'nom du createur de la fiche', 'precision' => null, 'fixed' => null], | |
32 | + 'statut' => ['type' => 'string', 'length' => 30, 'null' => true, 'default' => 'En cours', 'comment' => '', 'precision' => null, 'fixed' => null], | |
33 | + 'nom_createur' => ['type' => 'string', 'length' => 45, 'null' => true, 'default' => null, 'comment' => 'nom du createur de la fiche', 'precision' => null, 'fixed' => null], | |
33 | 34 | 'nom_modificateur' => ['type' => 'string', 'length' => 45, 'null' => true, 'default' => null, 'comment' => 'nom du modificateur de la fiche', 'precision' => null, 'fixed' => null], |
34 | 35 | 'created' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => 'date et heure de creation de la fiche', 'precision' => null], |
35 | 36 | 'modified' => ['type' => 'datetime', 'length' => null, 'null' => true, 'default' => null, 'comment' => 'date et heure de modif de la fiche', 'precision' => null], | ... | ... |