Commit 9d3c5a68780d04019af061fa3af7acd554ae7610
1 parent
e961ca20
Exists in
master
and in
1 other branch
Nouveau filtre "age" sur page index des matériels (v3.7.9.57)
=> Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...)
Showing
4 changed files
with
199 additions
and
29 deletions
Show diff stats
.project
@@ -18,5 +18,6 @@ | @@ -18,5 +18,6 @@ | ||
18 | </buildSpec> | 18 | </buildSpec> |
19 | <natures> | 19 | <natures> |
20 | <nature>org.eclipse.php.core.PHPNature</nature> | 20 | <nature>org.eclipse.php.core.PHPNature</nature> |
21 | + <nature>org.eclipse.wst.jsdt.core.jsNature</nature> | ||
21 | </natures> | 22 | </natures> |
22 | </projectDescription> | 23 | </projectDescription> |
README.md
@@ -45,18 +45,15 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -45,18 +45,15 @@ Logiciel testé et validé sur les configurations suivantes : | ||
45 | VERSION ACTUELLE | 45 | VERSION ACTUELLE |
46 | 46 | ||
47 | Date: 07/07/2020 | 47 | Date: 07/07/2020 |
48 | -Version: 3.7.9.56 | 48 | +Version: 3.7.9.57 |
49 | Author: EP | 49 | Author: EP |
50 | Commentaire: | 50 | Commentaire: |
51 | - - Materiel : technique ou/et inventoriable => trop compliqué et inutile => en fait c’est un OUX (exclusif) | ||
52 | - => simplifier en ne gardant qu'UNE SEULE case à cocher qui s'appelle "materiel technique". | ||
53 | - => Si cette case n'est pas cochée, le prix doit alors être supérieur à 1000E | ||
54 | - => par contre, on garde quand même le champ ds la BD au cas où. | ||
55 | - - Colorisation selon statut du matériel : | ||
56 | - CREATED => bleu | ||
57 | - VALIDATED => vert | ||
58 | - TBA => orange | ||
59 | - ARCHIVED => rouge | 51 | + - Nouveau filtre "age" sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...) |
52 | + | ||
53 | + | ||
54 | + - Nouvelle page web "Nouveautés" (/pages/changes) | ||
55 | + - Changements migrés dans fichier CHANGES.txt et affichés proprement dans une nouvelle page web changes.ctp | ||
56 | + - Nouvelle page web "Statistiques mensuelles" (/pages/stats) | ||
60 | 57 | ||
61 | IMPORTANT : | 58 | IMPORTANT : |
62 | - Pour connaitre la version actuelle, taper "./VERSION" | 59 | - Pour connaitre la version actuelle, taper "./VERSION" |
@@ -94,6 +91,17 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi | @@ -94,6 +91,17 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi | ||
94 | ----------------------------------------------------------------------------------------------------------- | 91 | ----------------------------------------------------------------------------------------------------------- |
95 | VERSION ACTUELLE | 92 | VERSION ACTUELLE |
96 | 93 | ||
94 | +07/07/2020 v3.7.9.56 (EP) | ||
95 | + - Materiel : technique ou/et inventoriable => trop compliqué et inutile => en fait c’est un OUX (exclusif) | ||
96 | + => simplifier en ne gardant qu'UNE SEULE case à cocher qui s'appelle "materiel technique". | ||
97 | + => Si cette case n'est pas cochée, le prix doit alors être supérieur à 1000E | ||
98 | + => par contre, on garde quand même le champ ds la BD au cas où. | ||
99 | + - Colorisation selon statut du matériel : | ||
100 | + CREATED => bleu | ||
101 | + VALIDATED => vert | ||
102 | + TBA => orange | ||
103 | + ARCHIVED => rouge | ||
104 | + | ||
97 | 06/07/2020 v3.7.9.54-55 (EP) | 105 | 06/07/2020 v3.7.9.54-55 (EP) |
98 | - Bugfix test SurCategories : marche maintenant sur php5 et php7 | 106 | - Bugfix test SurCategories : marche maintenant sur php5 et php7 |
99 | - Fichier LICENSE (AGPL) | 107 | - Fichier LICENSE (AGPL) |
src/Controller/MaterielsController.php
@@ -8,6 +8,7 @@ use Cake\Mailer\Email; | @@ -8,6 +8,7 @@ use Cake\Mailer\Email; | ||
8 | use Cake\Auth\FallbackPasswordHasher; | 8 | use Cake\Auth\FallbackPasswordHasher; |
9 | use App\Model\Entity\Materiel; | 9 | use App\Model\Entity\Materiel; |
10 | use App\Model\Entity\User; | 10 | use App\Model\Entity\User; |
11 | +use Cake\I18n\FrozenDate; | ||
11 | 12 | ||
12 | //use App\Controller\DocumentsController; | 13 | //use App\Controller\DocumentsController; |
13 | //App::import('Controller', 'Documents'); | 14 | //App::import('Controller', 'Documents'); |
@@ -842,9 +843,51 @@ class MaterielsController extends AppController { | @@ -842,9 +843,51 @@ class MaterielsController extends AppController { | ||
842 | ]; | 843 | ]; |
843 | 844 | ||
844 | $config = $this->confLabinvent; | 845 | $config = $this->confLabinvent; |
846 | + | ||
847 | + /* | ||
848 | + * Tranche d'age ? | ||
849 | + * | ||
850 | + * 5 = 0-5 ans | ||
851 | + * 10 = 5-10 ans | ||
852 | + * 15 = 10-15 ans | ||
853 | + * 20 = 15-20 ans | ||
854 | + * 21 = 20+ | ||
855 | + */ | ||
856 | + $age = $this->request->getQuery('age'); | ||
857 | + // Par défaut, TOUS les ages | ||
858 | + if (is_null($age)) $age = 0; | ||
859 | + if ($age>0) { | ||
860 | + $today_year = (new FrozenDate('now'))->year; | ||
861 | + // ex: si on est en 2020 : | ||
862 | + // + de 20 ans => on cherche "<2000" | ||
863 | + if ($age==21) { | ||
864 | + $year_min = 0; | ||
865 | + $year_max = $today_year - 20; // 2000 | ||
866 | + } | ||
867 | + // - 20 ans | ||
868 | + // ex: si $age = 10 et qu'on est en 2020 : | ||
869 | + else { | ||
870 | + $year_min = $today_year - $age; // 2010 | ||
871 | + $year_max = $year_min + 5; // 2015 | ||
872 | + } | ||
873 | + //debug("$year_min a $year_max"); | ||
874 | + // $year_min <= year(date_acquisition) <= $year_max | ||
875 | + //$condition['date_acquisition !='] = 'null'; // Date non nulle sinon ça plante !!! | ||
876 | + //$condition['date_acquisition IS NOT'] = 'NULL'; // Date non nulle sinon ça plante !!! | ||
877 | + // Pour faire NON EXCLUSIF, faire ceci : | ||
878 | + $condition['year(date_acquisition) <='] = $year_max; // <= 2015 | ||
879 | + $condition['year(date_acquisition) >='] = $year_min; // >= 2010 | ||
880 | + /* | ||
881 | + // Pour bien faire EXCLUSIF, faire ceci : | ||
882 | + $condition['year(date_acquisition) <='] = $year_max; // <= 2015 | ||
883 | + $condition['year(date_acquisition) >'] = $year_min; // > 2010 | ||
884 | + */ | ||
885 | + } | ||
886 | + | ||
887 | + // Nb lignes par page | ||
845 | $limit = $this->request->getQuery('aff'); | 888 | $limit = $this->request->getQuery('aff'); |
846 | - if ($limit === null) | ||
847 | - $limit = $config['aff_par_defaut']; | 889 | + // Par défaut, nb lignes demandées dans config |
890 | + if ($limit===null) $limit = $config['aff_par_defaut']; | ||
848 | 891 | ||
849 | $this->paginate = [ | 892 | $this->paginate = [ |
850 | 'limit' => $limit, | 893 | 'limit' => $limit, |
@@ -862,14 +905,17 @@ class MaterielsController extends AppController { | @@ -862,14 +905,17 @@ class MaterielsController extends AppController { | ||
862 | 'Materiels.numero_laboratoire' => 'desc' | 905 | 'Materiels.numero_laboratoire' => 'desc' |
863 | ] | 906 | ] |
864 | ]; | 907 | ]; |
865 | - | ||
866 | - $materiels = $this->paginate($this->Materiels->find('all', [ | ||
867 | - 'conditions' => $condition | ||
868 | - ])); | ||
869 | - | 908 | + |
909 | + // TOUS les materiels | ||
870 | $this->set('nbMateriels', $this->Materiels->find('all', [ | 910 | $this->set('nbMateriels', $this->Materiels->find('all', [ |
871 | 'conditions' => $condition | 911 | 'conditions' => $condition |
872 | ])->count()); | 912 | ])->count()); |
913 | + | ||
914 | + // Seulement le nombre de materiels demandés par paginate | ||
915 | + //debug($condition); | ||
916 | + $materiels = $this->paginate($this->Materiels->find('all', [ | ||
917 | + 'conditions' => $condition | ||
918 | + ])); | ||
873 | $this->set(compact('materiels')); | 919 | $this->set(compact('materiels')); |
874 | 920 | ||
875 | // Pas bien..., mais pratique : | 921 | // Pas bien..., mais pratique : |
src/Template/Materiels/index.ctp
@@ -163,18 +163,30 @@ $displayStatusButtons = function($SELECTED_STATUS, $nbMateriels, $html) { | @@ -163,18 +163,30 @@ $displayStatusButtons = function($SELECTED_STATUS, $nbMateriels, $html) { | ||
163 | 163 | ||
164 | }; // displayStatusButtons() | 164 | }; // displayStatusButtons() |
165 | 165 | ||
166 | +$displaySelectors = function($form, $request, $displayNbLinesSelector, $displayAgeSelector) { | ||
167 | + //echo '<div>'; | ||
168 | + echo '<div class="col-lg-2 col-md-3 col-sm-4">'; | ||
169 | + echo '<table><tr>'; | ||
170 | + | ||
171 | + echo '<td>'; | ||
172 | + $displayNbLinesSelector($form, $request); | ||
173 | + echo '</td>'; | ||
174 | + | ||
175 | + echo '<td>'; | ||
176 | + $displayAgeSelector($form, $request); | ||
177 | + echo '</td>'; | ||
178 | + | ||
179 | + echo '</tr></table>'; | ||
180 | + echo '</div>'; | ||
181 | +}; | ||
166 | 182 | ||
167 | $displayNbLinesSelector = function($form, $request) { | 183 | $displayNbLinesSelector = function($form, $request) { |
168 | - echo '<div class="col-lg-2 col-md-3 col-sm-4">'; | 184 | + //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; |
169 | //echo $this->Form->create('materiels', [ | 185 | //echo $this->Form->create('materiels', [ |
170 | - echo $form->create('materiels', [ | ||
171 | - //'url' => '/materiels/execActions?page=' . $this->request->getQuery('page') | ||
172 | - 'url' => '/materiels/execActions?page=' . $request->getQuery('page') | ||
173 | - ]); | ||
174 | // echo $this->Form->create('materiels', ['url' => '/materiels/execActions?page=index']); | 186 | // echo $this->Form->create('materiels', ['url' => '/materiels/execActions?page=index']); |
175 | //echo $this->Form->control('aff_par_defaut', [ | 187 | //echo $this->Form->control('aff_par_defaut', [ |
176 | echo $form->control('aff_par_defaut', [ | 188 | echo $form->control('aff_par_defaut', [ |
177 | - 'label' => 'Afficher', | 189 | + 'label' => 'Nombre lignes', |
178 | 'options' => [ | 190 | 'options' => [ |
179 | '20' => 20, | 191 | '20' => 20, |
180 | '30' => 30, | 192 | '30' => 30, |
@@ -184,10 +196,28 @@ $displayNbLinesSelector = function($form, $request) { | @@ -184,10 +196,28 @@ $displayNbLinesSelector = function($form, $request) { | ||
184 | '200' => 200 | 196 | '200' => 200 |
185 | ] | 197 | ] |
186 | ]); | 198 | ]); |
187 | - echo '</div>'; | 199 | + //echo '</div>'; |
188 | }; // displayNbLinesSelector() | 200 | }; // displayNbLinesSelector() |
189 | 201 | ||
190 | 202 | ||
203 | +$displayAgeSelector = function($form, $request) { | ||
204 | + //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; | ||
205 | + echo $form->control('age_selector', [ | ||
206 | + 'label' => 'Age', | ||
207 | + 'options' => [ | ||
208 | + '0' => 'Tous', | ||
209 | + '5' => '0-5 ans', | ||
210 | + '10' => '5-10 ans', | ||
211 | + '15' => '10-15 ans', | ||
212 | + '20' => '15-20 ans', | ||
213 | + '21' => '+ 20 ans', | ||
214 | + ] | ||
215 | + ]); | ||
216 | + //echo '</div>'; | ||
217 | +}; // displayNbLinesSelector() | ||
218 | + | ||
219 | + | ||
220 | + | ||
191 | $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN) { | 221 | $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN) { |
192 | 222 | ||
193 | //if (isset($SELECTED_STATUS)) { | 223 | //if (isset($SELECTED_STATUS)) { |
@@ -440,12 +470,19 @@ if ($USER_IS_ADMIN_OR_MORE) $displayStatusButtons($SELECTED_STATUS, $nbMateriels | @@ -440,12 +470,19 @@ if ($USER_IS_ADMIN_OR_MORE) $displayStatusButtons($SELECTED_STATUS, $nbMateriels | ||
440 | //</div> | 470 | //</div> |
441 | 471 | ||
442 | 472 | ||
443 | -// <!-- SELECTEUR NOMBRE LIGNES PAR PAGE --> | ||
444 | -$displayNbLinesSelector($this->Form, $this->request); | 473 | +// <!-- SELECTEURS : NOMBRE LIGNES PAR PAGE et AGE --> |
474 | +$displaySelectors($this->Form, $this->request, $displayNbLinesSelector, $displayAgeSelector); | ||
475 | +//$displayNbLinesSelector($this->Form, $this->request); | ||
476 | + | ||
477 | + | ||
478 | +echo $this->Form->create('materiels', [ | ||
479 | + 'url' => '/materiels/execActions?page=' . $this->request->getQuery('page') | ||
480 | +]); | ||
481 | + | ||
445 | 482 | ||
446 | // <!-- AFFICHAGE DES MATERIELS --> | 483 | // <!-- AFFICHAGE DES MATERIELS --> |
447 | -if ($nbMateriels == 0) | ||
448 | - echo 'Aucun matériel'; | 484 | + |
485 | +if ($nbMateriels == 0) echo 'Aucun matériel'; | ||
449 | 486 | ||
450 | else { | 487 | else { |
451 | // $form2 = $this->Form; | 488 | // $form2 = $this->Form; |
@@ -618,11 +655,13 @@ $(document).ready(function () { | @@ -618,11 +655,13 @@ $(document).ready(function () { | ||
618 | var urlDecoupeeBis = new Array(); | 655 | var urlDecoupeeBis = new Array(); |
619 | var param = 0; | 656 | var param = 0; |
620 | var bool = false; | 657 | var bool = false; |
658 | + //console.log(nbr); | ||
621 | 659 | ||
622 | for(i=0; i<urlDecoupee.length; ++i) { | 660 | for(i=0; i<urlDecoupee.length; ++i) { |
623 | urlDecoupeeBis[i] = urlDecoupee[i].split("="); // On sépare les parametres de leurs valeurs | 661 | urlDecoupeeBis[i] = urlDecoupee[i].split("="); // On sépare les parametres de leurs valeurs |
624 | for(j=0; j<urlDecoupeeBis[i].length; ++j){ | 662 | for(j=0; j<urlDecoupeeBis[i].length; ++j){ |
625 | if(urlDecoupeeBis[i][0] == "aff" || urlDecoupeeBis[i][0] == "?aff") { | 663 | if(urlDecoupeeBis[i][0] == "aff" || urlDecoupeeBis[i][0] == "?aff") { |
664 | + //console.info('toto'); | ||
626 | bool = true; | 665 | bool = true; |
627 | param = i; // Si le parametre "aff" est trouvé, on le récupère | 666 | param = i; // Si le parametre "aff" est trouvé, on le récupère |
628 | break; | 667 | break; |
@@ -630,7 +669,8 @@ $(document).ready(function () { | @@ -630,7 +669,8 @@ $(document).ready(function () { | ||
630 | } | 669 | } |
631 | } | 670 | } |
632 | 671 | ||
633 | - if(bool) { // Si le parametre recherche a ete trouve, ... | 672 | + if(bool) { // Si le parametre recherché a ete trouvé, ... |
673 | + //console.log("coucouT"); | ||
634 | urlDecoupeeBis[param][1] = nbr; //urlDecoupeeBis[i][0] c'est le nom du parametre, et urlDecoupeeBis[i][1] c'est la valeur associée | 674 | urlDecoupeeBis[param][1] = nbr; //urlDecoupeeBis[i][0] c'est le nom du parametre, et urlDecoupeeBis[i][1] c'est la valeur associée |
635 | var url = ""; | 675 | var url = ""; |
636 | for(i=0; i<urlDecoupee.length; ++i) { //... on reconstruit une url propre ... | 676 | for(i=0; i<urlDecoupee.length; ++i) { //... on reconstruit une url propre ... |
@@ -648,6 +688,49 @@ $(document).ready(function () { | @@ -648,6 +688,49 @@ $(document).ready(function () { | ||
648 | }); | 688 | }); |
649 | }); | 689 | }); |
650 | 690 | ||
691 | + | ||
692 | +$(document).ready(function () { | ||
693 | + $("#age-selector").bind("change", function (event) { | ||
694 | + var nbr=$("#age-selector :selected").val(); | ||
695 | + var urlDeBase = window.location.href.split("?"); | ||
696 | + var urlDecoupee = window.location.search.split("&"), i, j; // On sépare la chaine des paramètres en fonction du & | ||
697 | + var urlDecoupeeBis = new Array(); | ||
698 | + var param = 0; | ||
699 | + var bool = false; | ||
700 | + //console.log(nbr); | ||
701 | + | ||
702 | + for(i=0; i<urlDecoupee.length; ++i) { | ||
703 | + urlDecoupeeBis[i] = urlDecoupee[i].split("="); // On sépare les parametres de leurs valeurs | ||
704 | + for(j=0; j<urlDecoupeeBis[i].length; ++j){ | ||
705 | + if(urlDecoupeeBis[i][0] == "age" || urlDecoupeeBis[i][0] == "?age") { | ||
706 | + //console.info('toto'); | ||
707 | + bool = true; | ||
708 | + param = i; // Si le parametre "age" est trouvé, on le récupère | ||
709 | + break; | ||
710 | + } | ||
711 | + } | ||
712 | + } | ||
713 | + | ||
714 | + if(bool) { // Si le parametre recherché a ete trouvé, ... | ||
715 | + //console.log("coucouT"); | ||
716 | + urlDecoupeeBis[param][1] = nbr; //urlDecoupeeBis[i][0] c'est le nom du parametre, et urlDecoupeeBis[i][1] c'est la valeur associée | ||
717 | + var url = ""; | ||
718 | + for(i=0; i<urlDecoupee.length; ++i) { //... on reconstruit une url propre ... | ||
719 | + if(/^\?[a-zA-A0-9]*/.test(urlDecoupeeBis[0][0])) { | ||
720 | + if(i!=0) url += "&"; | ||
721 | + // Sauf pour le 1er parametre, qui lui commence par un "?" | ||
722 | + } else url += "&"; | ||
723 | + url += urlDecoupeeBis[i][0]+"="+urlDecoupeeBis[i][1]; | ||
724 | + // On reforme les parametres "&nom=valeur" en les concatenant | ||
725 | + } | ||
726 | + window.location.href = urlDeBase[0]+url; // ... et on fait la redirection | ||
727 | + } else if(urlDecoupee[0]=="") window.location.href = window.location.href + '?age=' + nbr; // Sinon on ajoute juste le parametre en fin d'url | ||
728 | + else window.location.href = window.location.href + '&age=' + nbr; | ||
729 | + | ||
730 | + }); | ||
731 | +}); | ||
732 | + | ||
733 | + | ||
651 | // Pour lire l'url et actualiser l'option sélectionnée | 734 | // Pour lire l'url et actualiser l'option sélectionnée |
652 | $(document).ready(function () { | 735 | $(document).ready(function () { |
653 | var affichage = parseInt($_GET('aff')); | 736 | var affichage = parseInt($_GET('aff')); |
@@ -677,6 +760,38 @@ $(document).ready(function () { | @@ -677,6 +760,38 @@ $(document).ready(function () { | ||
677 | } | 760 | } |
678 | }); | 761 | }); |
679 | 762 | ||
763 | + | ||
764 | +//Pour lire l'url et actualiser l'option sélectionnée | ||
765 | +$(document).ready(function () { | ||
766 | + var affichage = parseInt($_GET('age')); | ||
767 | + switch(affichage) { | ||
768 | + case 0 : | ||
769 | + document.getElementById('age-selector').selectedIndex = 0; | ||
770 | + break; | ||
771 | + case 5 : | ||
772 | + document.getElementById('age-selector').selectedIndex = 1; | ||
773 | + break; | ||
774 | + case 10 : | ||
775 | + document.getElementById('age-selector').selectedIndex = 2; | ||
776 | + break; | ||
777 | + case 15 : | ||
778 | + document.getElementById('age-selector').selectedIndex = 3; | ||
779 | + break; | ||
780 | + case 20 : | ||
781 | + document.getElementById('age-selector').selectedIndex = 4; | ||
782 | + break; | ||
783 | + case 21 : | ||
784 | + document.getElementById('age-selector').selectedIndex = 5; | ||
785 | + break; | ||
786 | + default : // Par défaut, lorsque le parametre "aff" n'existe pas, au premier affichage | ||
787 | + $("#age-selector").val(0); | ||
788 | + // On récupère la valeur dans la BD directement, mais en PHP, faut pas déconner | ||
789 | + break; | ||
790 | + } | ||
791 | +}); | ||
792 | + | ||
793 | + | ||
794 | + | ||
680 | // La fonction suivante permet de recuperer les parametres d’une URL | 795 | // La fonction suivante permet de recuperer les parametres d’une URL |
681 | function $_GET(param) { | 796 | function $_GET(param) { |
682 | var vars = {}; | 797 | var vars = {}; |