diff --git a/CHANGES.txt b/CHANGES.txt index 0eb8479..f8c20a8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -13,11 +13,13 @@ CHANGEMENTS ------- -10/09/2020 NEWS#3 : +11/09/2020 NEWS#3 : - Nouvelle entité "Projet", à laquelle un matériel peut (ou pas) être associé -- Nouveau format étiquette 19mm avec QrCode pour la nouvelle étiqueteuse (Dymo MobileLabeler) +- Nouveau filtre de la liste des matériels (index) => par "Projet" + +- Nouveau format étiquette 19mm "avec le QrCode" pour la nouvelle étiqueteuse (Dymo MobileLabeler) ------- @@ -85,6 +87,11 @@ Outre ces changements, voici d'autres changements importants : ======= CHANGES ======= ------- +11/09/2020 v3.7.9.100 (EP) + - (e) Nouveau filtre de la liste des matériels (index) => par "projet" + - (i) Enorme refactorisation de tous les filtres (nb lignes, age, domaine, projet) de la page index (liste des matériels) + +------- 10-11/09/2020 v3.7.9.97-99 (EP) - (e) Ajout de l'entité (table) "Projet", à laquelle un matériel peut (ou pas) être associé - (b) Enorme bugfix sur le numéro d'inventaire qui se régénérait à chaque modif du matériel !!! diff --git a/README.md b/README.md index be97f2f..46898c6 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- Date: 11/09/2020 -Version: 3.7.9.99 +Version: 3.7.9.100 HISTORIQUE DES CHANGEMENTS DE VERSION : voir le fichier CHANGES.txt (ou la page web /pages/changes) diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 5fa86e1..3779a08 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -913,22 +913,28 @@ class MaterielsController extends AppController { } */ - // - FILTRE Domaine ? - $domain_id = $this->request->getQuery('domain'); + $domaine_id = $this->request->getQuery('domaine'); // Par défaut, TOUS les domaines (id=0) - if (is_null($domain_id)) $domain_id = 0; + if (is_null($domaine_id)) $domaine_id = 0; // Si $domain_id==0 on ne fait rien (car on prend TOUS les domaines) - if ($domain_id > 0) + if ($domaine_id > 0) // OK - $conditions['Materiels.sur_categorie_id'] = $domain_id; + $conditions['Materiels.sur_categorie_id'] = $domaine_id; // KO => Exception PDO ! //$conditions['sur_categorie_id'] = $domain_id; //debug($conditions); - - + + // - FILTRE Projet ? + $projet_id = $this->request->getQuery('projet'); + // Par défaut, TOUS les domaines (id=0) + if (is_null($projet_id)) $projet_id = 0; + // Si $domain_id==0 on ne fait rien (car on prend TOUS les domaines) + if ($projet_id > 0) $conditions['Materiels.projet_id'] = $projet_id; + // - FILTRE Nb lignes par page ? - $limit = $this->request->getQuery('aff'); + //$limit = $this->request->getQuery('aff'); + $limit = $this->request->getQuery('nblines'); // Par défaut, nb lignes demandées dans config if ($limit===null) $limit = $config['aff_par_defaut']; @@ -1093,15 +1099,63 @@ class MaterielsController extends AppController { $this->set(compact('materiels')); + // Liste des DOMAINES //$domain_options = $this->Materiels->SurCategories->find()->toArray(); - $domain_options = $this->Materiels->SurCategories->find('list', [ + $domaine_options = $this->Materiels->SurCategories->find('list', [ 'keyField' => 'id', 'valueField' => 'nom', ])->toArray(); // Ajoute l'élément 0 => 'TOUS' en tête de tableau //$domain_options[0] = 'TOUS'; - array_unshift($domain_options, "Tous"); - $this->set(compact('domain_options', 'searchfor')); + //debug($domain_options); + array_unshift($domaine_options, "Tous"); + //debug($domain_options); + + // Liste des PROJETS + $projet_options = $this->Materiels->Projets->find('list', [ + 'keyField' => 'id', + 'valueField' => 'nom', + // implicite, pourquoi ??? + //'order' => 'Projets.nom' + ])->toArray(); + //debug($projet_options); + /* Ajoute l'élément 0 => 'TOUS' en tête de tableau + * SANS changer les clés !!! + */ + // 1) on ajoute un élément vide à la clé "0", + // et on trie le tableau sur les values (nom du projet) (en conservant les clés) + // => l'élément vide se retrouve donc en tête + $projet_options[0] = ''; + asort($projet_options); + // 2) on remplace l'élément vide (en tête) par 'Tous', qui est donc toujours en tête ! + $projet_options[0] = 'Tous'; + //debug($projet_options); + + // Liste des AGES (intervalles d'années) + $age_options = [ + '0' => 'Tous', + '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', + ]; + + // Liste des NBLINES (Nb de matériels affichés par page) + $nblines_options = [ + '20' => 20, + '30' => 30, + '50' => 50, + '100' => 100, + '150' => 150, + '200' => 200 + ]; + + + $this->set(compact('age_options', 'nblines_options', 'domaine_options', 'projet_options', 'searchfor')); // Pas bien..., mais pratique : // on passe le controleur de materiels à la vue index pour qu'elle diff --git a/src/Template/Materiels/index.ctp b/src/Template/Materiels/index.ctp index b5749ed..568e39b 100644 --- a/src/Template/Materiels/index.ctp +++ b/src/Template/Materiels/index.ctp @@ -8,15 +8,23 @@ use App\Controller\MaterielsController; // (EP 21/5/19) // --- Elements set by Controller for this view --- -/*TODO: $materiels doit etre enrichi avec des nouveaux attributs tels que (pour chaque materiel de la liste) : +/* + TODO: $materiels doit etre enrichi avec des nouveaux attributs tels que (pour chaque materiel de la liste) : - CAN_EDIT - CAN_DELETE - CAN_VALIDATE - CAN_TBA - CAN_ARCHIVE */ -$domain_options = $domain_options; + +// Options des filtres +$nblines_options = $nblines_options; +$age_options = $age_options; +$domaine_options = $domaine_options; +$projet_options = $projet_options; + //debug($domain_options); +//debug($projet_options); $nbMateriels = $nbMateriels; $controller=$controller; @@ -119,7 +127,8 @@ $displaySearchField = function($params, $searchfor, $html, $form) { ]); // (EP 202007) Ajouter un champ caché pour chaque paramètre passé dans l'url // afin de ne pas les perdre... - $parameters = ['aff', 'age', 'domain', 'status']; + //$parameters = ['aff', 'age', 'domaine', 'status', 'projet']; + $parameters = ['nblines', 'age', 'domaine', 'status', 'projet']; foreach ($parameters as $param) if (isset($params[$param])) echo $this->Form->hidden($param, [ @@ -295,28 +304,62 @@ $displayStatusButtons = function($SELECTED_STATUS, $params, $nbMateriels, $html) }; // displayStatusButtons() -$displaySelectors = function($form, $request, $displayNbLinesSelector, $displayAgeSelector, $displayDomaineSelector, $domain_options) { + +//$displaySelectors = function($form, $request, +$displayFilters = function($form, $request, + $df, + /* + $displayNbLinesSelector, + $displayAgeSelector, + */ + //$f1_func, + //$f1_func, + $f1_name, $f1_options, + //$f2_func, $f2_options, + $f2_name, $f2_options, + //$displayDomaineSelector, $domain_options, + //$displayProjetSelector, $projet_options + $f3_name, $f3_options, + $f4_name, $f4_options +) { //echo '
'; - $displayNbLinesSelector($form, $request); + //$displayNbLinesSelector($form, $request); + //$f1_func($form, $request); + $df($f1_name, $form, $request, $f1_options); echo ' | '; + // Filtre 2 echo ''; - $displayAgeSelector($form, $request); + //$displayAgeSelector($form, $request); + //$f2_func($form, $request, $f2_options); + $df($f2_name, $form, $request, $f2_options); echo ' | '; + // Filtre 3 echo ''; - $displayDomaineSelector($form, $request, $domain_options); + //$displayDomaineSelector($form, $request, $domain_options); + //$df('domain', $form, $request, $domain_options); + $df($f3_name, $form, $request, $f3_options); + echo ' | '; + + // Filtre 4 + echo ''; + //$displayProjetSelector('projet', $form, $request, $projet_options); + //$df('projet', $form, $request, $projet_options); + $df($f4_name, $form, $request, $f4_options); echo ' | '; echo '