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
README.md
... | ... | @@ -45,18 +45,15 @@ Logiciel testé et validé sur les configurations suivantes : |
45 | 45 | VERSION ACTUELLE |
46 | 46 | |
47 | 47 | Date: 07/07/2020 |
48 | -Version: 3.7.9.56 | |
48 | +Version: 3.7.9.57 | |
49 | 49 | Author: EP |
50 | 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 | 58 | IMPORTANT : |
62 | 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 | 91 | ----------------------------------------------------------------------------------------------------------- |
95 | 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 | 105 | 06/07/2020 v3.7.9.54-55 (EP) |
98 | 106 | - Bugfix test SurCategories : marche maintenant sur php5 et php7 |
99 | 107 | - Fichier LICENSE (AGPL) | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -8,6 +8,7 @@ use Cake\Mailer\Email; |
8 | 8 | use Cake\Auth\FallbackPasswordHasher; |
9 | 9 | use App\Model\Entity\Materiel; |
10 | 10 | use App\Model\Entity\User; |
11 | +use Cake\I18n\FrozenDate; | |
11 | 12 | |
12 | 13 | //use App\Controller\DocumentsController; |
13 | 14 | //App::import('Controller', 'Documents'); |
... | ... | @@ -842,9 +843,51 @@ class MaterielsController extends AppController { |
842 | 843 | ]; |
843 | 844 | |
844 | 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 | 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 | 892 | $this->paginate = [ |
850 | 893 | 'limit' => $limit, |
... | ... | @@ -862,14 +905,17 @@ class MaterielsController extends AppController { |
862 | 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 | 910 | $this->set('nbMateriels', $this->Materiels->find('all', [ |
871 | 911 | 'conditions' => $condition |
872 | 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 | 919 | $this->set(compact('materiels')); |
874 | 920 | |
875 | 921 | // Pas bien..., mais pratique : | ... | ... |
src/Template/Materiels/index.ctp
... | ... | @@ -163,18 +163,30 @@ $displayStatusButtons = function($SELECTED_STATUS, $nbMateriels, $html) { |
163 | 163 | |
164 | 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 | 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 | 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 | 186 | // echo $this->Form->create('materiels', ['url' => '/materiels/execActions?page=index']); |
175 | 187 | //echo $this->Form->control('aff_par_defaut', [ |
176 | 188 | echo $form->control('aff_par_defaut', [ |
177 | - 'label' => 'Afficher', | |
189 | + 'label' => 'Nombre lignes', | |
178 | 190 | 'options' => [ |
179 | 191 | '20' => 20, |
180 | 192 | '30' => 30, |
... | ... | @@ -184,10 +196,28 @@ $displayNbLinesSelector = function($form, $request) { |
184 | 196 | '200' => 200 |
185 | 197 | ] |
186 | 198 | ]); |
187 | - echo '</div>'; | |
199 | + //echo '</div>'; | |
188 | 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 | 221 | $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN) { |
192 | 222 | |
193 | 223 | //if (isset($SELECTED_STATUS)) { |
... | ... | @@ -440,12 +470,19 @@ if ($USER_IS_ADMIN_OR_MORE) $displayStatusButtons($SELECTED_STATUS, $nbMateriels |
440 | 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 | 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 | 487 | else { |
451 | 488 | // $form2 = $this->Form; |
... | ... | @@ -618,11 +655,13 @@ $(document).ready(function () { |
618 | 655 | var urlDecoupeeBis = new Array(); |
619 | 656 | var param = 0; |
620 | 657 | var bool = false; |
658 | + //console.log(nbr); | |
621 | 659 | |
622 | 660 | for(i=0; i<urlDecoupee.length; ++i) { |
623 | 661 | urlDecoupeeBis[i] = urlDecoupee[i].split("="); // On sépare les parametres de leurs valeurs |
624 | 662 | for(j=0; j<urlDecoupeeBis[i].length; ++j){ |
625 | 663 | if(urlDecoupeeBis[i][0] == "aff" || urlDecoupeeBis[i][0] == "?aff") { |
664 | + //console.info('toto'); | |
626 | 665 | bool = true; |
627 | 666 | param = i; // Si le parametre "aff" est trouvé, on le récupère |
628 | 667 | break; |
... | ... | @@ -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 | 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 | 675 | var url = ""; |
636 | 676 | for(i=0; i<urlDecoupee.length; ++i) { //... on reconstruit une url propre ... |
... | ... | @@ -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 | 734 | // Pour lire l'url et actualiser l'option sélectionnée |
652 | 735 | $(document).ready(function () { |
653 | 736 | var affichage = parseInt($_GET('aff')); |
... | ... | @@ -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 | 795 | // La fonction suivante permet de recuperer les parametres d’une URL |
681 | 796 | function $_GET(param) { |
682 | 797 | var vars = {}; | ... | ... |