Commit 9d3c5a68780d04019af061fa3af7acd554ae7610

Authored by Etienne Pallier
1 parent e961ca20
Exists in master and in 1 other branch dev

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, ...)
.project
... ... @@ -18,5 +18,6 @@
18 18 </buildSpec>
19 19 <natures>
20 20 <nature>org.eclipse.php.core.PHPNature</nature>
  21 + <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
21 22 </natures>
22 23 </projectDescription>
... ...
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 = {};
... ...