From c9ad82a7c7c59e89b2538b778fb13cbd50ddf35e Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Wed, 8 Jul 2020 17:36:58 +0200 Subject: [PATCH] Filtre "age" FINALISÉ sur page index des matériels (v3.7.9.58) --- README.md | 14 ++++++++++---- src/Controller/MaterielsController.php | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- src/Template/Materiels/index.ctp | 307 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------- webroot/css/inventirap.css | 40 +++++++++++++++++++++------------------- webroot/css/responsive.css | 2 +- webroot/css/smoothness.css | 14 +++++++------- 6 files changed, 316 insertions(+), 155 deletions(-) diff --git a/README.md b/README.md index c418920..e8a77b4 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,16 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 07/07/2020 -Version: 3.7.9.57 +Date: 08/07/2020 +Version: 3.7.9.58 (encours) Author: EP Commentaire: - - Nouveau filtre "age" sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...) + - Nouveau filtre "age" (FINALISÉ) sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...) + - Grosse refactorisation du javascript dans la page materiels/index pour utiliser le meme code pour les 2 filtres "age" et "nb lines" + - Bugfix url rewriting dans la page materiels/index pour supprimer le paramètre "page" car ça n'est pas pertinent et ça provoque plantages + - Nombreux petits bugfixes sur les css + + - TODO: conserver les arguments de l'url quand on change de statut dans la page materiels/index - Nouvelle page web "Nouveautés" (/pages/changes) @@ -91,7 +96,8 @@ La liste ci-dessous est aussi en ligne ici : https://tinyurl.com/labinvent#headi ----------------------------------------------------------------------------------------------------------- VERSION ACTUELLE -07/07/2020 v3.7.9.56 (EP) +07/07/2020 v3.7.9.56-57 (EP) + - Nouveau filtre "age" sur page index des matériels : Affichage des matériels par tranche d'âge (0-5 ans, 5-10, ...) - Materiel : technique ou/et inventoriable => trop compliqué et inutile => en fait c’est un OUX (exclusif) => simplifier en ne gardant qu'UNE SEULE case à cocher qui s'appelle "materiel technique". => Si cette case n'est pas cochée, le prix doit alors être supérieur à 1000E diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index fb2adff..c20d1b9 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -9,6 +9,8 @@ use Cake\Auth\FallbackPasswordHasher; use App\Model\Entity\Materiel; use App\Model\Entity\User; use Cake\I18n\FrozenDate; +use Cake\Database\Expression\QueryExpression; +use Cake\Database\Query; //use App\Controller\DocumentsController; //App::import('Controller', 'Documents'); @@ -746,9 +748,9 @@ class MaterielsController extends AppController { $this->myDebug("step 3: MaterielsController.index()"); // /materiels/index/VALIDATED - $condition = ''; + $conditions = []; if (isset($this->request->getAttribute('params')['pass'][0])) { - $condition = [ + $conditions = [ 'Materiels.status =' => $this->request->getAttribute('params')['pass'][0] ]; //$this->set('STATUS', $this->request->getAttribute('params')['pass'][0]); @@ -766,7 +768,7 @@ class MaterielsController extends AppController { 'nom =' => 'N/A' ]) ->first()['id']) - $condition = [ + $conditions = [ 'Materiels.groupes_metier_id =' => $GM, 'Materiels.status !=' => 'ARCHIVED' ]; @@ -776,12 +778,12 @@ class MaterielsController extends AppController { 'nom =' => 'N/A' ]) ->first()['id']) - $condition = [ + $conditions = [ 'Materiels.groupes_thematique_id =' => $GT, 'Materiels.status !=' => 'ARCHIVED' ]; else - $condition = [ + $conditions = [ 'Materiels.id =' => 0 ]; } @@ -794,7 +796,7 @@ class MaterielsController extends AppController { 'nom =' => 'N/A' ]) ->first()['id']) - $condition = [ + $conditions = [ 'Materiels.groupes_metier_id =' => $GMV, 'Materiels.status =' => 'CREATED', 'Materiels.status !=' => 'ARCHIVED' @@ -804,13 +806,13 @@ class MaterielsController extends AppController { 'nom =' => 'N/A' ]) ->first()['id']) - $condition = [ + $conditions = [ 'Materiels.groupes_metier_id =' => $GTV, 'Materiels.status =' => 'CREATED', 'Materiels.status !=' => 'ARCHIVED' ]; else - $condition = [ + $conditions = [ 'Materiels.id =' => 0 ]; } @@ -823,12 +825,12 @@ class MaterielsController extends AppController { 'Utilisateur', 'Responsable' ])) - $condition = [ + $conditions = [ 'Materiels.nom_responsable =' => $this->request->getQuery('MY'), 'Materiels.status !=' => 'ARCHIVED' ]; else - $condition = [ + $conditions = [ 'Materiels.nom_responsable =' => $this->request->getQuery('MY') ]; } @@ -837,8 +839,8 @@ class MaterielsController extends AppController { if (in_array($this->getUserRole(), [ 'Utilisateur', 'Responsable' - ]) && $condition == '') - $condition = [ + ]) && $conditions == '') + $conditions = [ 'Materiels.status !=' => 'ARCHIVED' ]; @@ -854,8 +856,9 @@ class MaterielsController extends AppController { * 21 = 20+ */ $age = $this->request->getQuery('age'); - // Par défaut, TOUS les ages - if (is_null($age)) $age = 0; + // Par défaut, 0-5 ans + if (is_null($age)) $age = 5; + // Si age==0 on ne fait rien (car on prend TOUS les materiels) if ($age>0) { $today_year = (new FrozenDate('now'))->year; // ex: si on est en 2020 : @@ -873,16 +876,22 @@ class MaterielsController extends AppController { //debug("$year_min a $year_max"); // $year_min <= year(date_acquisition) <= $year_max //$condition['date_acquisition !='] = 'null'; // Date non nulle sinon ça plante !!! - //$condition['date_acquisition IS NOT'] = 'NULL'; // Date non nulle sinon ça plante !!! + //$conditions['date_acquisition IS NOT'] = 'NULL'; // Date non nulle sinon ça plante !!! + /* // Pour faire NON EXCLUSIF, faire ceci : $condition['year(date_acquisition) <='] = $year_max; // <= 2015 $condition['year(date_acquisition) >='] = $year_min; // >= 2010 - /* - // Pour bien faire EXCLUSIF, faire ceci : - $condition['year(date_acquisition) <='] = $year_max; // <= 2015 - $condition['year(date_acquisition) >'] = $year_min; // > 2010 */ + // Pour bien faire EXCLUSIF, faire ceci : + $conditions['year(date_acquisition) <='] = $year_max; // <= 2015 + $conditions['year(date_acquisition) >'] = $year_min; // > 2010 + } + // Age inconnu (date nulle) + /* + elseif ($age==-1) { + $conditions['date_acquisition IS'] = 'NULL'; } + */ // Nb lignes par page $limit = $this->request->getQuery('aff'); @@ -907,15 +916,60 @@ class MaterielsController extends AppController { ]; // TOUS les materiels + /* $this->set('nbMateriels', $this->Materiels->find('all', [ 'conditions' => $condition ])->count()); + */ + $materiels = $this->Materiels + //->find('all') + ->find() + ->where($conditions); + if ($age==-1) $materiels = $materiels + ->where(function (QueryExpression $exp, Query $q) { + return $exp->isNull('date_acquisition'); + } + ); + $this->set('nbMateriels', $materiels->count()); + + /* + $this->set('nbMateriels', + $this->Materiels + //->find('all') + ->find() + ->where($conditions) + ->count() + ); + */ // Seulement le nombre de materiels demandés par paginate //debug($condition); + /* $materiels = $this->paginate($this->Materiels->find('all', [ - 'conditions' => $condition + 'conditions' => $conditions ])); + */ + # WHERE (population) IS NOT NULL + /* + $materiels = $this->Materiels + ->find() + ->where(function (QueryExpression $exp, Query $q) { + return $exp->isNotNull('date_acquisition'); + } + ); + $materiels = $this->paginate($materiels + ->where($conditions) + ); + */ + + // Paginated materiels + /* + $materiels = $this->paginate($this->Materiels + ->find() + ->where($conditions) + ); + */ + $materiels = $this->paginate($materiels); $this->set(compact('materiels')); // Pas bien..., mais pratique : diff --git a/src/Template/Materiels/index.ctp b/src/Template/Materiels/index.ctp index 2f3cf40..9449c8f 100644 --- a/src/Template/Materiels/index.ctp +++ b/src/Template/Materiels/index.ctp @@ -187,6 +187,7 @@ $displayNbLinesSelector = function($form, $request) { //echo $this->Form->control('aff_par_defaut', [ echo $form->control('aff_par_defaut', [ 'label' => 'Nombre lignes', + 'onchange' => "updateUrlWithSelectedValue('aff-par-defaut', 'aff')", 'options' => [ '20' => 20, '30' => 30, @@ -204,14 +205,20 @@ $displayAgeSelector = function($form, $request) { //echo '
'; echo $form->control('age_selector', [ 'label' => 'Age', + 'onchange' => "updateUrlWithSelectedValue('age-selector', 'age')", 'options' => [ '0' => 'Tous', - '5' => '0-5 ans', + '5' => 'Récents (5 ans max)', '10' => '5-10 ans', '15' => '10-15 ans', '20' => '15-20 ans', + //'20plus' => '+ 20 ans', '21' => '+ 20 ans', - ] + //'unknown' => 'inconnu', + '-1' => 'inconnu', + ], + // Inutile car géré via javascript + //'default' => '5', ]); //echo '
'; }; // displayNbLinesSelector() @@ -267,6 +274,7 @@ $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS }; + /* * Couleurs en fonction du statut du matos * @@ -276,7 +284,8 @@ $displayColorLegend = function() { // VALIDATED => vert // TBA => orange // ARCHIVED => rouge - echo "

Couleur : bleu=créé ; vert=validé ; orange=à sortir ; rouge=archivé (couleur date rouge = fin garantie)

"; + //echo "

Couleur :

bleu=à valider
; vert=validé ; orange=à sortir ; rouge=archivé (couleur date rouge = fin garantie)

"; + echo "

Couleur : bleu=à valider ; vert=validé ; orange=à sortir ; rouge=archivé ; couleur date rouge = fin garantie

"; }; @@ -483,35 +492,37 @@ echo $this->Form->create('materiels', [ // if ($nbMateriels == 0) echo 'Aucun matériel'; - else { - // $form2 = $this->Form; - // /echo $this->Form->create('materiels', ['url' => '/materiels/execActions']); - if ($SELECTED_STATUS) echo $this->Form->hidden('what', [ - 'value' => $SELECTED_STATUS - ]); - ?> - - - - '; }?> - - - - - - - - - - - ".$this->Paginator->sort('etiquette', 'Et')."" ?> - ".$this->Paginator->sort('metrologie', 'Metro')."" ?> - - - - - Form; +// /echo $this->Form->create('materiels', ['url' => '/materiels/execActions']); +if ($SELECTED_STATUS) echo $this->Form->hidden('what', ['value'=>$SELECTED_STATUS]); +?> +
Paginator->sort('designation','Désignation') ?>Paginator->sort('numero_laboratoire', 'N° interne (labo)') ?>paginator->sort('hors_service', ' ') ?>Paginator->sort('categorie_id', 'Catégorie') ?>Paginator->sort('organisme_id', 'Org.') ?>Paginator->sort('numero_inventaire_organisme', 'N° Invent. Org.') ?>Paginator->sort('nom_responsable', 'Nom de l\'utilisateur') ?>Paginator->sort('status', 'Statut') ?>Paginator->sort('date_acquisition', 'Date Achat') ?>
+ + + + + '; }?> + + + + + + + + + + + + ".$this->Paginator->sort('metrologie', 'Metro')."" ?> + + + + + + + year-$time->month-$time->day"); // On extrait la date pour la vérification de fin de garantie @@ -646,8 +657,11 @@ echo $this->element('menu_index', [
Paginator->sort('designation','Désignation') ?>Paginator->sort('numero_laboratoire', 'N° interne (labo)') ?>paginator->sort('hors_service', ' ') ?>Paginator->sort('categorie_id', 'Catégorie') ?>Paginator->sort('organisme_id', 'Org.') ?>Paginator->sort('numero_inventaire_organisme', 'N° Invent. Org.') ?>Paginator->sort('nom_responsable', "Nom de l'utilisateur") ?>Paginator->sort('status', 'Statut') ?>Paginator->sort('date_acquisition', 'Date Achat') ?>Paginator->sort('etiquette', 'Et') ?>