Commit f8c5c958094f67cd738f8d8041ff452d0185ba2e

Authored by Etienne Pallier
1 parent 5b899c72

Plusieurs ameliorations:

- bugfix materiels/add : impossible changer l'utilisateur (responsable
du matos)
- bouton "de-valider"
- diverses ameliorations graphiques
- refactorisations de code
README-LABINVENT.md
@@ -47,10 +47,13 @@ Logiciel testé et validé sur les configurations suivantes : @@ -47,10 +47,13 @@ Logiciel testé et validé sur les configurations suivantes :
47 47
48 VERSION ACTUELLE 48 VERSION ACTUELLE
49 49
50 -Date: 23/08/2017 50 +Date: 24/08/2017
51 Version: 2.7.5 51 Version: 2.7.5
52 - - bugfix impossible changer le fournisseur d'un materiel (pb BD seulement sur mysql ancienne version) => changé les "MyISAM" en "InnoDB" pour que les contraintes d'integrité soient respectées et ne provoquent plus d'erreur "Action impossible"  
53 - - ATTENTION : Mise à jour de la base de données requise (cf database/update) 52 + Plusieurs ameliorations:
  53 + - bugfix materiels/add : impossible changer l'utilisateur (responsable du matos)
  54 + - bouton "de-valider"
  55 + - diverses ameliorations graphiques
  56 + - refactorisations de code
54 57
55 Version majeure en cours (2.7): https://projects.irap.omp.eu/versions/162 58 Version majeure en cours (2.7): https://projects.irap.omp.eu/versions/162
56 59
src/Template/Layout/default.ctp
@@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2'; @@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2';
115 </i></td> 115 </i></td>
116 <td id="version"> 116 <td id="version">
117 <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) --> 117 <!-- VERSION M.m.f.b (version (M)ajeure, version (m)ineure, numero de nouvelle (f)onctionnalite, numero de (b)ugfix) -->
118 - <font color="black">VERSION 2.7.5 (23/08/2017)</font> 118 + <font color="black">VERSION 2.7.5 (24/08/2017)</font>
119 <br/> 119 <br/>
120 <font color="black"><a href="<?php 120 <font color="black"><a href="<?php
121 121
src/Template/Materiels/add.ctp
@@ -46,7 +46,7 @@ if (isset($cpMateriel)) { @@ -46,7 +46,7 @@ if (isset($cpMateriel)) {
46 <?=$this->Form->submit(__('Enregistrer'))?> 46 <?=$this->Form->submit(__('Enregistrer'))?>
47 47
48 <?=$this->Html->link( 48 <?=$this->Html->link(
49 - __('<i class="icon-minus-sign"></i> Anuler'), 49 + __('<i class="icon-minus-sign"></i> Annuler'),
50 ['action' => 'index'], 50 ['action' => 'index'],
51 ['escape' => false, 'onclick' => 'return true;', 'style' => 'margin-right: 10px'] 51 ['escape' => false, 'onclick' => 'return true;', 'style' => 'margin-right: 10px']
52 )?> 52 )?>
@@ -191,29 +191,13 @@ if (isset($cpMateriel)) { @@ -191,29 +191,13 @@ if (isset($cpMateriel)) {
191 'options' => $groupesMetiers, 191 'options' => $groupesMetiers,
192 'default' => $Groupes_metier_id 192 'default' => $Groupes_metier_id
193 ]); 193 ]);
194 - if ($USER_IS_RESPONSABLE_OR_MORE) {  
195 - /*  
196 - if (! (in_array($role, [  
197 - 'Responsable',  
198 - 'Administration',  
199 - 'Administration Plus',  
200 - 'Super Administrateur'  
201 - ]))) {  
202 - */  
203 - echo $this->Form->hidden('nom_responsable', [  
204 - 'label' => 'Nom de l\'utilisateur',  
205 - 'empty' => 'Choisir un utilisateur',  
206 - 'default' => $username,  
207 - 'options' => $utilisateurs  
208 - ]);  
209 - } else {  
210 - echo $this->Form->input('nom_responsable', [  
211 - 'label' => 'Nom de l\'utilisateur',  
212 - 'empty' => 'Choisir un utilisateur',  
213 - 'default' => $username,  
214 - 'options' => $utilisateurs  
215 - ]);  
216 - } 194 + $fieldType = $USER_IS_UTILISATEUR ? 'hidden' : 'input';
  195 + echo $this->Form->$fieldType('nom_responsable', [
  196 + 'label' => 'Nom de l\'utilisateur',
  197 + 'empty' => 'Choisir un utilisateur',
  198 + 'default' => $username,
  199 + 'options' => $utilisateurs
  200 + ]);
217 echo $this->Form->input('email_responsable', [ 201 echo $this->Form->input('email_responsable', [
218 'label' => 'Email de l\'utilisateur', 202 'label' => 'Email de l\'utilisateur',
219 'readonly' => true, 203 'readonly' => true,
src/Template/Materiels/edit.ctp
@@ -63,7 +63,16 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie) @@ -63,7 +63,16 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie)
63 echo '<br><br>'; 63 echo '<br><br>';
64 } 64 }
65 ?> 65 ?>
  66 +
  67 + <div id="boutons" class="actions" style="margin-bottom: 20px; width: 100%; float: none; padding: 10px 0;">
66 <?=$this->Form->submit(__('Enregistrer'))?> 68 <?=$this->Form->submit(__('Enregistrer'))?>
  69 +
  70 + <?=$this->Html->link(
  71 + __('<i class="icon-minus-sign"></i> Annuler'),
  72 + ['action' => 'index'],
  73 + ['escape' => false, 'onclick' => 'return true;', 'style' => 'margin-right: 10px']
  74 + )?>
  75 + </div>
67 76
68 <?php 77 <?php
69 echo $this->Form->input('designation', [ 78 echo $this->Form->input('designation', [
@@ -245,28 +254,15 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie) @@ -245,28 +254,15 @@ if ($IS_VALIDATED &amp;&amp; $materiel-&gt;numero_serie)
245 'default' => 1 254 'default' => 1
246 ]); 255 ]);
247 256
248 - if (! (in_array($role, [  
249 - 'Responsable',  
250 - 'Administration',  
251 - 'Administration Plus',  
252 - 'Super Administrateur'  
253 - ]))) {  
254 - echo $this->Form->hidden('nom_responsable', [  
255 - 'label' => 'Nom de l\'utilisateur',  
256 - 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields),  
257 - 'empty' => 'Choisir un utilisateur',  
258 - 'default' => $username,  
259 - 'options' => $utilisateurs  
260 - ]);  
261 - } else {  
262 - echo $this->Form->input('nom_responsable', [  
263 - 'label' => 'Nom de l\'utilisateur',  
264 - 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields),  
265 - 'empty' => 'Choisir un utilisateur',  
266 - 'default' => $username,  
267 - 'options' => $utilisateurs  
268 - ]);  
269 - } 257 + $fieldType = $USER_IS_UTILISATEUR ? 'hidden' : 'input';
  258 + echo $this->Form->$fieldType('nom_responsable', [
  259 + 'label' => 'Nom de l\'utilisateur',
  260 + 'disabled' => $isReadonlyField('nom_responsable', $myReadonlyFields),
  261 + 'empty' => 'Choisir un utilisateur',
  262 + 'default' => $username,
  263 + 'options' => $utilisateurs
  264 + ]);
  265 +
270 if (isset($nom_ancien_responsable)) { 266 if (isset($nom_ancien_responsable)) {
271 echo $this->Form->input('nom_ancien_responsable', [ 267 echo $this->Form->input('nom_ancien_responsable', [
272 'label' => 'Nom ancien utilisateur', 268 'label' => 'Nom ancien utilisateur',
src/Template/Materiels/view.ctp
@@ -343,7 +343,7 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP = @@ -343,7 +343,7 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP =
343 ], 343 ],
344 [ 344 [
345 'title' => 'Valider le matériel', 345 'title' => 'Valider le matériel',
346 - 'style' => 'margin-right: 10px', 346 + 'style' => 'margin-right: 10px; color: red',
347 'escape' => false 347 'escape' => false
348 ] 348 ]
349 ); 349 );
@@ -360,7 +360,7 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP = @@ -360,7 +360,7 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP =
360 'view' 360 'view'
361 ], 361 ],
362 [ 362 [
363 - 'title' => 'dé-valider le matériel (le repasser au statut CREATED)', 363 + 'title' => 'dé-valider le matériel (le repasser au statut Créé)',
364 //'style' => 'margin-right: 10px; background: red; color: white', 364 //'style' => 'margin-right: 10px; background: red; color: white',
365 'style' => 'margin-right: 10px; color: red', 365 'style' => 'margin-right: 10px; color: red',
366 'escape' => false 366 'escape' => false
@@ -374,20 +374,21 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP = @@ -374,20 +374,21 @@ $USER_IS_RESPONSABLE_AND_SAME_GROUP =
374 'view' 374 'view'
375 ], [ 375 ], [
376 'title' => 'Demander la sortie de l\'inventaire', 376 'title' => 'Demander la sortie de l\'inventaire',
377 - 'style' => 'margin-right: 10px', 377 + 'style' => 'margin-right: 10px; color: red',
378 'escape' => false 378 'escape' => false
379 ]); 379 ]);
380 } 380 }
381 else if ($status==$TOBEARCHIVED) { 381 else if ($status==$TOBEARCHIVED) {
382 // Bouton ARCHIVER 382 // Bouton ARCHIVER
383 - if ($role != 'Responsable' && $role != 'Super Administrateur') {  
384 - echo $this->Html->link('<i class="icon-ok-sign"></i> Sortie inventaire', [ 383 + //if ($role != 'Responsable' && $role != 'Super Administrateur') {
  384 + if ($role != 'Responsable') {
  385 + echo $this->Html->link('<i class="icon-ok-sign"></i> Sortie inventaire', [
385 'action' => 'statusArchived', 386 'action' => 'statusArchived',
386 $materiel->id, 387 $materiel->id,
387 'view' 388 'view'
388 ], [ 389 ], [
389 'title' => 'Sortir définitivement de l\'inventaire', 390 'title' => 'Sortir définitivement de l\'inventaire',
390 - 'style' => 'margin-right: 10px', 391 + 'style' => 'margin-right: 10px; color: red',
391 'escape' => false, 392 'escape' => false,
392 'confirm' => 'Êtes-vous sur de bien vouloir archiver ' . $materiel->designation . ' ?' 393 'confirm' => 'Êtes-vous sur de bien vouloir archiver ' . $materiel->designation . ' ?'
393 ]); 394 ]);
tests/TestCase/Controller/MaterielsControllerTest.php
@@ -407,9 +407,29 @@ class MaterielsControllerTest extends IntegrationTestCase { @@ -407,9 +407,29 @@ class MaterielsControllerTest extends IntegrationTestCase {
407 * 407 *
408 * @return void 408 * @return void
409 */ 409 */
410 - public function testEdit() {  
411 - $this->authSuperAdmin();  
412 - 410 +
  411 + public function testUpdate() { // ACTION 'edit'
  412 + foreach (array(1,2,3,4) as $role) {
  413 + switch ($role) {
  414 + case 1: $this->authUtilisateur();
  415 + break;
  416 + case 2: $this->authResponsable();
  417 + break;
  418 + case 3: $this->authAdmin();
  419 + break;
  420 + case 4: $this->authAdminPlus();
  421 + break;
  422 + case 5: $this->authSuperAdmin();
  423 + break;
  424 + }
  425 + if ($role==1) continue;
  426 + $this->_testUpdates();
  427 + } // foreach
  428 + }
  429 +
  430 +
  431 + private function _testUpdates() {
  432 +
413 // 1) Test qu'on peut modifier un materiel CREATED 433 // 1) Test qu'on peut modifier un materiel CREATED
414 // Toutes les donnees passees sont modifiees 434 // Toutes les donnees passees sont modifiees
415 $data = [ 435 $data = [
@@ -831,20 +851,24 @@ class MaterielsControllerTest extends IntegrationTestCase { @@ -831,20 +851,24 @@ class MaterielsControllerTest extends IntegrationTestCase {
831 */ 851 */
832 public function testUpdateStatusSelectedMateriels() { 852 public function testUpdateStatusSelectedMateriels() {
833 $this->authSuperAdmin(); 853 $this->authSuperAdmin();
  854 + //$this->authAdmin();
834 $this->post('/materiels/execActions', ['updateSelectedStatus' => 'true', 'what' => 'CREATED', 11 => '1', 12 => '1', 13 => '1']); 855 $this->post('/materiels/execActions', ['updateSelectedStatus' => 'true', 'what' => 'CREATED', 11 => '1', 12 => '1', 13 => '1']);
835 856
836 $this->get('/materiels/view/11'); 857 $this->get('/materiels/view/11');
837 - $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");  
838 - $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");  
839 - $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");  
840 - 858 + $this->assertResponseContains('VALIDATED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  859 + $this->assertResponseNotContains('CREATED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  860 + $this->assertResponseNotContains('TOBEARCHIVED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  861 + $this->assertResponseNotContains('ARCHIVED', "(11) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  862 +
841 $this->get('/materiels/view/12'); 863 $this->get('/materiels/view/12');
842 - $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 864 + $this->assertResponseContains('VALIDATED', "(12) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  865 + $this->assertResponseNotContains('CREATED', "(12) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
843 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 866 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
844 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 867 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
845 868
846 $this->get('/materiels/view/13'); 869 $this->get('/materiels/view/13');
847 - $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 870 + $this->assertResponseContains('VALIDATED', "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  871 + $this->assertResponseNotContains('CREATED', "(13) La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
848 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 872 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
849 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement."); 873 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
850 } 874 }