Commit 6bea9311a2d5ef8e74ff68bd7ff5fb414f6a6305

Authored by Etienne Pallier
1 parent 8eb36426

- bugfix updateSelectedStatus

+ refactorisations pour éviter duplication de code !!! 
+ réactivation du test correspondant (now ok) !!!

- bugfix vue superadmin speciale (materiels/administrer) : pb isset !!!
.editorconfig 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +; This file is for unifying the coding style for different editors and IDEs.
  2 +; More information at http://editorconfig.org
  3 +
  4 +root = true
  5 +
  6 +[*]
  7 +indent_style = space
  8 +indent_size = 4
  9 +end_of_line = lf
  10 +insert_final_newline = true
  11 +trim_trailing_whitespace = true
  12 +
  13 +[*.bat]
  14 +end_of_line = crlf
  15 +
  16 +[*.yml]
  17 +indent_style = space
  18 +indent_size = 2
... ...
.gitattributes 0 → 100644
... ... @@ -0,0 +1,42 @@
  1 +# Define the line ending behavior of the different file extensions
  2 +# Set default behaviour, in case users don't have core.autocrlf set.
  3 +* text=auto
  4 +* text eol=lf
  5 +
  6 +# Explicitly declare text files we want to always be normalized and converted
  7 +# to native line endings on checkout.
  8 +*.php text
  9 +*.default text
  10 +*.ctp text
  11 +*.sql text
  12 +*.md text
  13 +*.po text
  14 +*.js text
  15 +*.css text
  16 +*.ini text
  17 +*.properties text
  18 +*.txt text
  19 +*.xml text
  20 +*.svg text
  21 +*.yml text
  22 +.htaccess text
  23 +
  24 +# Declare files that will always have CRLF line endings on checkout.
  25 +*.bat eol=crlf
  26 +
  27 +# Declare files that will always have LF line endings on checkout.
  28 +*.pem eol=lf
  29 +
  30 +# Denote all files that are truly binary and should not be modified.
  31 +*.png binary
  32 +*.jpg binary
  33 +*.gif binary
  34 +*.ico binary
  35 +*.mo binary
  36 +*.pdf binary
  37 +*.phar binary
  38 +*.woff binary
  39 +*.woff2 binary
  40 +*.ttf binary
  41 +*.otf binary
  42 +*.eot binary
... ...
.gitignore
... ... @@ -2,5 +2,6 @@
2 2 /config/app.php
3 3 /tmp/*
4 4 /logs/*
  5 +composer.lock
5 6 /.settings/
6 7 .DS_Store
... ...
README-LABINVENT.md
... ... @@ -48,11 +48,12 @@ Logiciel testé et validé sur les configurations suivantes :
48 48 VERSION ACTUELLE
49 49  
50 50 Date: 06/07/2017
51   -Version: 2.7.2
  51 +Version: 2.7.3
  52 + - bugfix updateSelectedStatus + refactorisations pour éviter duplication de code !!! + réactivation du test correspondant (now ok) !!!
52 53 - suppression du contenu de vendor/ => désormais ignoré car autogénéré
53 54 - update des plugins phpqrcode et fpdf => désormais via composer.json
54 55 - amélioration script install => pour générer automatiquement le contenu de vendor/
55   - - ATTENTION : Mise à jour des plugins nécessaire (cd install/ ; ./update_plugins.sh) : si ça ne marche pas bien, faire "rm -rf vendor/*" avant
  56 + - ATTENTION : Mise à jour des plugins nécessaire (cd install/ ; ./update_plugins.sh) : si ça ne marche pas bien, faire 'rm -rf vendor/*' avant
56 57  
57 58 Version majeure en cours (2.7): https://projects.irap.omp.eu/versions/162
58 59  
... ...
src/Controller/MaterielsController.php
... ... @@ -824,7 +824,8 @@ class MaterielsController extends AppController {
824 824 * @param string $from
825 825 * @return \Cake\Network\Response|NULL
826 826 */
827   - private function statusSetTo($newStatus, $message, $id = null, $from = 'index') {
  827 + private function statusSetTo($newStatus, $message, $id = null, $from = 'index', $onlyOneMateriel=True) {
  828 +
828 829 $materiel = $this->Materiels->get($id)->set('status', $newStatus);
829 830  
830 831 if ($newStatus == 'ARCHIVED')
... ... @@ -839,32 +840,56 @@ class MaterielsController extends AppController {
839 840 $materiel->date_reception,
840 841 $materiel->prix_ht
841 842 );
842   - $msgError = "Pour valider un matériel, les champs suivants ne doivent pas être vides :
843   - Nom propriétaire,
  843 + // Ne pas oublier les espaces après chaque virgule/fin de ligne (sinon le message d'erreur est pas joli)
  844 + $msgError1 = "Pour valider un matériel, les champs suivants ne doivent pas être vides :
  845 + Nom utilisateur,
844 846 Fournisseur,
845 847 Numéro de commande,
846 848 Organisme,
847 849 Date de reception,
848 850 et Prix.";
849   - // Ne pas oublier les espaces après chaque virgule/fin de ligne (sinon le message d'erreur est pas joli)
  851 + $msgError2 = "Le statut du matériel " . $materiel->designation . " (" . $materiel->numero_laboratoire . ") n'a pas pu être modifié";
850 852  
851 853 foreach ($mandatoryFields as $field){
852 854 if ($field === null || $field == '' ){
853   - $this->Flash->error($msgError);
854   - return $this->redirect(['action' => 'edit', $id]);
  855 + if ($onlyOneMateriel) {
  856 + $this->Flash->error($msgError1);
  857 + return $this->redirect(['action' => 'edit', $id]);
  858 + }
  859 + else {
  860 + $this->Flash->error($msgError2);
  861 + return False;
  862 + }
855 863 }
856 864 }
857 865 }
858 866  
859   - if ($this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false]))
860   - $this->Flash->success(__($message));
861   - else
862   - $this->Flash->error(__('Le statut n\'a pas pu être édité.'));
  867 + $success = False;
  868 + if (! $this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false]))
  869 + $this->Flash->error(__($msgError2 . " (cannot be saved)"));
  870 + else {
  871 + $success = True;
  872 + if ($onlyOneMateriel) $this->Flash->success(__($message));
  873 + // TODO: ce code ne peut pas marcher !!! il faut faire un SAVE
  874 + if ($newStatus == 'VALIDATED')
  875 + if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')
  876 + ->find('list', ['keyField' => 'id', 'valueField' => 'nom'])
  877 + ->where(['role =' => 'Administration'])
  878 + ->toArray())) {
  879 + $gestionnaireID = TableRegistry::get('Users')->find()->where(['nom' => $_SESSION['Auth']['User']['sn'][0]])->first()->id;
  880 + $materiel->gestionnaire_id = $gestionnaireID;
  881 + // TODO: SAVE !!!
  882 + }
  883 + $this->sendEmail($materiel);
  884 + }
  885 +
  886 + if (! $onlyOneMateriel) return $success;
863 887  
864 888 if ($from == 'index')
865 889 return $this->redirect([ 'action' => $from]);
866 890 else
867 891 return $this->redirect(['action' => $from, $id]);
  892 +
868 893 }
869 894  
870 895 /**
... ... @@ -875,6 +900,7 @@ class MaterielsController extends AppController {
875 900 */
876 901 public function statusValidated($id = null, $from = 'index') {
877 902 $this->statusSetTo('VALIDATED', 'Le matériel a bien été validé', $id, $from);
  903 + /* (EP) moved to statusSetTo()
878 904 if (in_array($_SESSION['Auth']['User']['sn'][0], TableRegistry::get('Users')
879 905 ->find('list', ['keyField' => 'id', 'valueField' => 'nom'])
880 906 ->where(['role =' => 'Administration'])
... ... @@ -883,6 +909,7 @@ class MaterielsController extends AppController {
883 909 $materiel->gestionnaire_id = $gestionnaireID;
884 910 }
885 911 $this->sendEmail($this->Materiels->get($id));
  912 + */
886 913 }
887 914  
888 915 /**
... ... @@ -893,7 +920,8 @@ class MaterielsController extends AppController {
893 920 */
894 921 public function statusToBeArchived($id = null, $from = 'index') {
895 922 $this->statusSetTo('TOBEARCHIVED', 'La sortie d\'inventaire a bien été demandée', $id, $from);
896   - $this->sendEmail($this->Materiels->get($id));
  923 + // (EP) moved to statusSetTo()
  924 + //$this->sendEmail($this->Materiels->get($id));
897 925 }
898 926  
899 927 /**
... ... @@ -904,7 +932,8 @@ class MaterielsController extends AppController {
904 932 */
905 933 public function statusArchived($id = null, $from = 'index') {
906 934 $this->statusSetTo('ARCHIVED', 'Le matériel a bien été sorti de l\'inventaire', $id, $from);
907   - $this->sendEmail($this->Materiels->get($id));
  935 + // (EP) moved to statusSetTo()
  936 + //$this->sendEmail($this->Materiels->get($id));
908 937 }
909 938  
910 939 /**
... ... @@ -1233,6 +1262,7 @@ class MaterielsController extends AppController {
1233 1262 * group update status + exportAll
1234 1263 */
1235 1264 public function execActions() {
  1265 + //var_dump($this->request->getData('updateSelectedStatus'));
1236 1266 if ($this->request->getData('updateSelectedStatus') !== null)
1237 1267 $this->updateSelectedStatus();
1238 1268 else $this->export();
... ... @@ -1242,49 +1272,59 @@ class MaterielsController extends AppController {
1242 1272 * group update status (selected from materiels/index)
1243 1273 */
1244 1274 private function updateSelectedStatus() {
1245   - if ($this->request->getData !== null && sizeof($this->request->data) > 0) {
  1275 + /*
  1276 + var_dump($nb);
  1277 + var_dump($this->request->getData);
  1278 + var_dump($this->request->getData('updateSelectedStatus'));
  1279 + var_dump($this->request->data);
  1280 + */
  1281 + if ( isset($this->request->data) && sizeof($this->request->data) > 0 ) {
1246 1282 $this->myDebug("IN UPDATE");
1247 1283 $this->myDebug($this->request->data);
1248 1284 $what = $this->request->getData('what');
1249 1285 $nb = 0;
1250   -
1251 1286 if (in_array($what, $this->NOTARCHIVED)) {
1252   - foreach ($this->request->data as $id => $value) :
  1287 + foreach ($this->request->data as $id => $value) {
  1288 + // seulement les post data integers (id des materiels checked ou non)
  1289 + if ( ! is_int($id) ) continue;
  1290 + // seulement les id des materiels CHECKED (==1)
  1291 + if ($value == 0) continue;
1253 1292 $materiel = $this->Materiels->get($id);
1254   - if ($value == 1) {
1255   - switch ($what) {
1256   - case 'CREATED' :
1257   - $new = 'VALIDATED';
1258   - $msgError = "le materiel " . $materiel->designation . '-' . $materiel->numero_laboratoire . " n'a pas pu être validé car au moins un des champs nécessaire n'est pas rempli.";
1259   - break;
1260   - case 'VALIDATED' :
1261   - $new = 'TOBEARCHIVED';
1262   - $msgError = "La demande de sortie de l'inventaire du matériel " . $materiel->designation . '-' . $materiel->numero_laboratoire . " n'a pas pu s'effectuer.";
1263   - break;
1264   - case 'TOBEARCHIVED' :
1265   - $new = 'ARCHIVED';
1266   - $msgError = "le materiel " . $materiel->designation . '-' . $materiel->numero_laboratoire . " n'a pas pu être archivé.";
1267   - break;
1268   - }
1269   - // if mode_debug desactivate (POURQUOI ???)
1270   - if (! $this->isLabinventDebugMode()) {
1271   - if ($materiel->nom_responsable === null || $materiel->fournisseur === null || $materiel->numero_commande === null || $materiel->organisme_id === null || $materiel->date_reception === null || $materiel->prix_ht === null) {
1272   - //if (false) {
1273   - $this->Flash->error($msgError);
1274   - $nb --;
1275   - } else {
1276   - $materiel->set('status', $new);
1277   - $this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false]);
1278   - }
  1293 + $materielIdentification = $materiel->designation . '-' . $materiel->numero_laboratoire;
  1294 + switch ($what) {
  1295 + case 'CREATED' :
  1296 + $new = 'VALIDATED';
  1297 + $msgError = "le materiel " . $materielIdentification . " n'a pas pu être validé car au moins un des champs nécessaire n'est pas rempli.";
  1298 + break;
  1299 + case 'VALIDATED' :
  1300 + $new = 'TOBEARCHIVED';
  1301 + $msgError = "La demande de sortie de l'inventaire du matériel " . $materielIdentification . " n'a pas pu s'effectuer.";
  1302 + break;
  1303 + case 'TOBEARCHIVED' :
  1304 + $new = 'ARCHIVED';
  1305 + $msgError = "le materiel " . $materielIdentification . " n'a pas pu être archivé.";
  1306 + break;
  1307 + }
  1308 + // if mode_debug desactivate (POURQUOI ???)
  1309 + if (! $this->isLabinventDebugMode()) {
  1310 + if ( ! $this->statusSetTo($new, 'Le matériel a bien été ???', $id, 'index', false) ) $nb--;
  1311 + /*
  1312 + //debug($materiel); exit;
  1313 + if ($materiel->nom_responsable === null || $materiel->fournisseur_id === null || $materiel->numero_commande === null || $materiel->organisme_id === null || $materiel->date_reception === null || $materiel->prix_ht === null) {
  1314 + $this->Flash->error($msgError);
  1315 + $nb --;
  1316 + } else {
  1317 + $materiel->set('status', $new);
  1318 + $this->Materiels->save($materiel, ['checkRules' => false, 'checkExisting' => false]);
1279 1319 }
1280   - $nb ++;
  1320 + */
1281 1321 }
1282   - endforeach;
  1322 + $nb ++;
  1323 + } // foreach
1283 1324 if ($nb > 0) $this->Flash->success(__($nb . ' matériel(s) mis à jour'));
1284   - //if ($nb != 0) $this->Flash->success(__($nb . ' matériel(s) mis à jour'));
1285 1325 $this->myDebug("Nb matos = " . $nb);
1286 1326  
1287   - //if (! $this->isLabinventDebugMode())
  1327 + if (! $this->isLabinventDebugMode())
1288 1328 return $this->redirect(['action' => 'index', 'page' => $this->request->getQuery('page'), $what]);
1289 1329 }
1290 1330 }
... ...
src/Template/Layout/default.ctp
... ... @@ -115,7 +115,7 @@ $cakeDescription = 'Labinvent 2';
115 115 </i></td>
116 116 <td id="version">
117 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.2 (06/07/2017)</font>
  118 + <font color="black">VERSION 2.7.3 (06/07/2017)</font>
119 119 <br/>
120 120 <font color="black"><a href="<?php
121 121  
... ...
src/Template/Materiels/administrer.ctp
... ... @@ -31,8 +31,9 @@
31 31 ]);
32 32  
33 33 $categs = $categories;
34   - // if a domaine is selected, reduce the categories list to this domaine
35   - if (isset ( $this->request->getData('sur_categorie_id') ) && ($this->request->getData('sur_categorie_id') != '')) {
  34 + // if a domain is selected, reduce the categories list to this domain
  35 + //if (isset ( $this->request->getData('sur_categorie_id') ) && ($this->request->getData('sur_categorie_id') != '')) {
  36 + if ( $this->request->getData('sur_categorie_id') !== null && $this->request->getData('sur_categorie_id') != '' ) {
36 37 $categs = $categs->where(['sur_categorie_id =' => $this->request->getData('sur_categorie_id')]);
37 38 }
38 39 echo $this->Form->input('categorie_id', [
... ... @@ -46,7 +47,8 @@
46 47 // by default, list is empty
47 48 $souscategs = [];
48 49 // if a categ is selected, update sous-categs list for this categ (only)
49   - if (isset ( $this->request->getData('categorie_id') ) && ($this->request->getData('categorie_id') != '')) {
  50 + //if (isset ( $this->request->getData('categorie_id') ) && ($this->request->getData('categorie_id') != '')) {
  51 + if ( $this->request->getData('categorie_id') != null && $this->request->getData('categorie_id') != '' ) {
50 52 $souscategs = $sousCategories;
51 53 $souscategs = $souscategs->where(['categorie_id' => $this->request->getData('categorie_id')]);
52 54 }
... ...
tests/TestCase/Controller/MaterielsControllerTest.php
... ... @@ -769,20 +769,21 @@ class MaterielsControllerTest extends IntegrationTestCase {
769 769 public function testUpdateStatusSelectedMateriels() {
770 770 $this->authSuperAdmin();
771 771 $this->post('/materiels/execActions', ['updateSelectedStatus' => 'true', 'what' => 'CREATED', 11 => '1', 12 => '1', 13 => '1']);
  772 +
772 773 $this->get('/materiels/view/11');
773 774 $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
774 775 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
775 776 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
776   - /*
  777 +
777 778 $this->get('/materiels/view/12');
778 779 $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
779 780 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
780 781 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
  782 +
781 783 $this->get('/materiels/view/13');
782 784 $this->assertResponseNotContains('CREATED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
783 785 $this->assertResponseNotContains('TOBEARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
784 786 $this->assertResponseNotContains('ARCHIVED', "La mise à jour de plusieurs statuts sur le materiel ne se fait pas correctement.");
785   - */
786 787 }
787 788  
788 789 /**
... ...