Commit 6bea9311a2d5ef8e74ff68bd7ff5fb414f6a6305
1 parent
8eb36426
Exists in
master
and in
3 other branches
- bugfix updateSelectedStatus
+ refactorisations pour éviter duplication de code !!! + réactivation du test correspondant (now ok) !!! - bugfix vue superadmin speciale (materiels/administrer) : pb isset !!!
Showing
8 changed files
with
157 additions
and
52 deletions
Show diff stats
... | ... | @@ -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 | ... | ... |
... | ... | @@ -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
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 | /** | ... | ... |