diff --git a/README.md b/README.md index d079ea0..eda01cb 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,8 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 17/01/2019 -Version: 2.10.1 +Date: 21/01/2019 +Version: 2.10.2 Author: EP Mise à jour framework cakephp et amélioration recherche matériel: - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 @@ -62,7 +62,7 @@ Author: EP - Bugfixes et améliorations recherche matériel : - ajout du fournisseur dans la recherche globale - bugfix désignation (si elle contient plusieurs mots) - - optimisation du code (bcp plus court...) + - refactorisation et optimisation du code (bcp plus court...) - ... Version majeure en cours : 2.10 (https://projects.irap.omp.eu/versions/207) diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 16bca1e..2dd5c62 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -5,6 +5,7 @@ use App\Controller\AppController; use Cake\ORM\TableRegistry; use Cake\Mailer\Email; use Cake\ORM\Locator\TableLocator; +use Cake\Auth\FallbackPasswordHasher; /** * Materiels Controller @@ -1351,11 +1352,207 @@ class MaterielsController extends AppController return NULL; } - /** - * Find method + + private function find_general($general_search_field_name) { + // $general_search_field_name equals 's_all' or 's_all2' + + //$generalFieldConditions = NULL; + + $all = $this->request->getData($general_search_field_name); + //debug($all); exit; + // Check for a date + foreach ([ + "/", + "-" + ] as $symb) { + $pos1 = strpos($all, $symb); // Première occurence + $pos2 = strrchr($all, $symb); // Dernière occurence + if ($pos1 !== false && $pos2 !== false && $pos1 != $pos2) { + list ($dd, $mm, $yyyy) = explode($symb, $all); + if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { + $all = "$yyyy-$mm-$dd"; + break; + } + } + } + // End datecheck + + $tabSearch = explode(' ', $all); + + $merge = []; + foreach ($tabSearch as $word) { + $FieldConditions = [ + // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. + // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" + // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' + // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' + array( + 'Materiels.designation LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.numero_commande LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.description LIKE' => '%' . $word . '%' + ), + /*TODO: comment gérer fournisseur ???*/ + array( + //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' + //'Materiels.fournisseur_id =' => $word + 'Fournisseurs.nom LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.nom_responsable LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.email_responsable LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.code_comptable LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.numero_serie LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.date_acquisition LIKE' => '%' . $word . '%' + ), + array( + 'Materiels.lieu_detail LIKE' => '%' . $word . '%' + ) + ]; + $merge = array_merge($merge, $FieldConditions); + } + $generalFieldConditions = [ + 'OR' => $merge + ]; + + return $generalFieldConditions; + } + + + private function find_specific_fields() { + + // Materiel type + $matostype = $this->request->getData('s_matostype'); + $matostypeRequest = NULL; + + switch ($matostype) { + // Administratif + case 'A': + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; + break; + // Technique + case 'T': + $matostypeRequest['Materiels.materiel_technique ='] = '1'; + break; + // Admin et Tech + case 'AT': + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; + $matostypeRequest['Materiels.materiel_technique ='] = '1'; + break; + // Admin ONLY + case 'AO': + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; + $matostypeRequest['Materiels.materiel_technique ='] = '0'; + break; + // Tech ONLY + case 'TO': + $matostypeRequest['Materiels.materiel_administratif ='] = '0'; + $matostypeRequest['Materiels.materiel_technique ='] = '1'; + break; + } + + $periode_acquisitionRequest = NULL; + $date_acquisition = NULL; + + $salle = NULL; + $fournisseur = NULL; + if ($this->request->getData('s_periode_acquisition1') != '') + $periode_acquisitionRequest['Materiels.date_acquisition >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition1')))); + if ($this->request->getData('s_periode_acquisition2') != '') + $periode_acquisitionRequest['Materiels.date_acquisition <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition2')))); + if ($this->request->getData('s_date_acquisition') != '') + $date_acquisition['Materiels.date_acquisition LIKE'] = '%' . date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_acquisition')))) . '%'; + + $montantRequest = []; + if ($this->request->getData('s_prix_ht_inf') != '') + $montantRequest['Materiels.prix_ht <='] = $this->request->getData('s_prix_ht_inf'); + if ($this->request->getData('s_prix_ht_sup') != '') + $montantRequest['Materiels.prix_ht >='] = $this->request->getData('s_prix_ht_sup'); + + if ($this->request->getData('s_salle') !== null && $this->request->getData('s_salle') != '') + $salle['Materiels.lieu_detail LIKE'] = '%' . $this->request->getData('s_salle') . '%'; + + if ($this->request->getData('s_fournisseur_id') !== null && $this->request->getData('s_fournisseur_id') != '') + $fournisseur['Materiels.fournisseur_id ='] = $this->request->getData('s_fournisseur'); + + /* TODO: (EP 2019/01) NOUVEAU CODE POUR REMPLACER LE CODE SUPER REDONDANT D'AVANT (300 lignes !!!) */ + $designation = NULL; + if ($this->request->getData('s_designation')) { + //$designation_words = []; + //$designation_words = explode (" ", $this->request->getData('s_designation')); + $designation = str_replace(" ","%", $this->request->getData('s_designation')); + $designation = [ 'Materiels.designation LIKE' => '%'.$designation.'%' ]; + #TODO: gérer un peu mieux le cas où le champ designation contient plusieurs mots: en cherchant chaque mot séparément (avec un "OU") : + /* + $designation_conditions = []; + for ($i = 0; $i < count($designation); $i++) { + //'Materiels.designation LIKE' => '%' . $designation[0]. '%', + //'Materiels.designation LIKE' => '%' . $designation[1]. '%', + $designation_conditions['Materiels.designation LIKE'] = '%'.$designation_words[$i].'%'); + } + */ + } + + // Putting all these specific fields together + $specificFieldsConditions = [ + //'Materiels.designation LIKE' => '%' . $designation[0] . '%', + //'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', + $designation, + //'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', + $this->getConditionForField('numero_laboratoire'), + $this->getConditionForField('numero_commande'), + $date_acquisition, + $periode_acquisitionRequest, + $this->getConditionForFieldNumber('prix_ht'), + $montantRequest, + $this->getConditionForFieldNumber('sur_categorie_id'), + $this->getConditionForFieldNumber('categorie_id'), + $this->getConditionForFieldNumber('sous_categorie_id'), + $this->getConditionForField('nom_responsable'), + $this->getConditionForField('numero_inventaire_organisme'), + $this->getConditionForField('numero_inventaire_old'), + $this->getConditionForFieldNumber('groupes_metier_id'), + $this->getConditionForFieldNumber('groupes_thematique_id'), + $salle, + //$fournisseur, + $this->getConditionForFieldNumber('fournisseur_id'), + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForFieldNumber('organisme_id'), + $matostypeRequest, + $this->getConditionForField('status'), + ]; + + return $specificFieldsConditions; + + } + + + /* ******************** + * Create all needed LISTS and pass them to the VIEW (find) + * ******************** */ - public function find() - { + private function set_elements_lists_for_view_find() { $s_sur_categories = $this->Materiels->SurCategories->find('list', [ 'keyField' => 'id', @@ -1421,475 +1618,172 @@ class MaterielsController extends AppController ) ]); $categories = $this->Materiels->Categories; - $this->set(compact('s_numero_laboratoire', 's_nomresp', 's_sur_categories', 's_categories', 's_sous_categories', 's_groupes_thematiques', 's_groupes_metiers', + + // Pass all these LISTS to the view : + $this->set(compact('s_numero_laboratoire', 's_nomresp', 's_sur_categories', 's_categories', 's_sous_categories', 's_groupes_thematiques', 's_groupes_metiers', 's_organismes', 's_fournisseurs', 's_salles', 'categories')); + + } + + + + + /** + * Find method + * (EP) tout refait le 18/1/17 pour que ça soit plus lisible et moins bugué... + */ + public function find() + { + + $this->set_elements_lists_for_view_find(); + + // Get the previous search result (from session) set in the view (find.ctp) $resultTri = $this->request->getSession()->read("resultTri"); + // Do not show Archived materiel if not Admin + $conditionNotArchived = $this->USER_IS_ADMIN_AT_LEAST() ? '' : [ 'Materiels.status !=' => 'ARCHIVED' ]; // if (! (in_array($this->role, ['Administration', 'Administration Plus', 'Super Administrateur']))) - if (! $this->USER_IS_ADMIN_AT_LEAST()) - $conditionNotArchived = [ - 'Materiels.status !=' => 'ARCHIVED' - ]; - else - $conditionNotArchived = ''; - // some data POSTED (au moins le champ de recherche generale) ? - if ($this->request->getData('s_all') !== null || $this->request->getData('s_all_2') !== null || $this->request->getData('s_designation') !== null) { - $generalFieldConditions = NULL; - // if general field set (s_all), then set general request for it - //if ($this->request->getData('s_all') !== null) { - //debug($this->request->getData()); exit; - if ($this->request->data('s_all') !== null) { - $all = $this->request->getData('s_all'); - //debug($all); exit; - // Check for a date - foreach ([ - "/", - "-" - ] as $symb) { - $pos1 = strpos($all, $symb); // Première occurence - $pos2 = strrchr($all, $symb); // Dernière occurence - if ($pos1 !== false && $pos2 !== false && $pos1 != $pos2) { - list ($dd, $mm, $yyyy) = explode($symb, $all); - if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { - $all = "$yyyy-$mm-$dd"; - break; - } - } - } - // End datecheck - - $tabSearch = explode(' ', $all); - $merge = []; - foreach ($tabSearch as $word) { - $FieldConditions = [ - // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. - // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" - // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' - // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' - array( - 'Materiels.designation LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_commande LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.description LIKE' => '%' . $word . '%' - ), - /*TODO: comment gérer fournisseur ???*/ - array( - //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' - //'Materiels.fournisseur_id =' => $word - 'Fournisseurs.nom LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.nom_responsable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.email_responsable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.code_comptable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_serie LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.date_acquisition LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.lieu_detail LIKE' => '%' . $word . '%' - ) - ]; - $merge = array_merge($merge, $FieldConditions); + /* ******************** + * Plusieurs cas possibles: + * - (1) SI POST (getData()) : + * - (1.1) WITH DATA (au moins un champ rempli, avec ou sans critère de tri) : + * - (1.1.1) recherche globale (s_all ou s_all2) : + * - (1.1.1.1) s_all2 (champ de recherche global en bas à gauche) => recherche globale (toutes les tables) + * - (1.1.1.2) s_all (champ de recherche général matériel tout au début du formulaire de recherche, en haut de page) => recherche générale sur la table matériel (et tables liées) + * - (1.1.2) recherche spécifique : 1 ou plusieurs champ(s) spécifique(s) (s_designation, ...) => recherche sur champs spécifiques + * - (1.2) NO DATA, only empty fields : Une recherche a été soumise sans remplir aucun champ !! => ne rien faire + * - (2) SINON : + * - (2.1) avec critères de tri => sort_result() : Devant le résultat d'une recherche, on a simplement cliqué sur une colonne pour afficher le résultat TRIÉ (sorted) + * - (2.2) sans critère de tri => c'est la première fois qu'on vient sur la vue, rien à faire de plus + * ******************** + */ + + + // (1) POST + if ($this->request->is('post')) { + $has_data = FALSE; + foreach ($this->request->getData() as $k=>$v) { + if ($v != '') { + $has_data = TRUE; + break; } - $generalFieldConditions = [ - 'OR' => $merge - ]; } - if ($this->request->getData('s_all_2') !== null) { - $all = $this->request->getData('s_all_2'); + + // (1.1) POST with data + if ($has_data) { - // Check for a date - foreach ([ - "/", - "-" - ] as $symb) { - $pos1 = strpos($all, $symb); // Première occurence - $pos2 = strrchr($all, $symb); // Dernière occurence - if ($pos1 !== false && $pos1 != $pos2) { - // Si une première occurence est trouvée, une dernière aussi - list ($dd, $mm, $yyyy) = explode($symb, $all); - if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { - $all = "$yyyy-$mm-$dd"; - break; - } - } - } - // End datecheck + ///debug("post with data"); - $tabSearch = explode(' ', $all); - $merge = []; - foreach ($tabSearch as $word) { - $FieldConditions = [ - // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. - // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" - // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' - // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' - array( - 'Materiels.designation LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_commande LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.description LIKE' => '%' . $word . '%' - ), - /*TODO: comment gérer fournisseur ???*/ - array( - //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' - //'Materiels.fournisseur_id =' => $word - 'Fournisseurs.nom LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.nom_responsable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.email_responsable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.code_comptable LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.numero_serie LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.date_acquisition LIKE' => '%' . $word . '%' - ), - array( - 'Materiels.lieu_detail LIKE' => '%' . $word . '%' - ) - ]; - $merge = array_merge($merge, $FieldConditions); + // (1.1.1) Recherche globale (s_all_2 ou s_all) : + /* + * TODO: Distinguer la recherche globale dans TOUTES les tables (s_all_2) de la recherche générale seulement dans la table matériel (s_all) + * - Pour le moment, les résultats sont les mêmes pour ces 2 champs (normal, on fait le même traitement), c'est pas normal !!! + * - Recherche s_all ok : il faudrait juste améliorer la recherche dans toutes les tables liées au matériel (fournisseur, organismes, catégories...) + * - Recherche s_all_2 pas faite : à inventer... + * - Ajouter des tests de recherche (nombreux cas possibles) + */ + if ( $this->request->getData('s_all_2') || $this->request->getData('s_all') ) { + ///debug("recherche globale"); + $general_search_field_name = $this->request->getData('s_all_2') ? 's_all_2':'s_all'; + $conditions = $this->find_general($general_search_field_name); + /* + if ($this->request->getData('s_all_2')) + debug("s_all2, recherche globale (toutes les tables)"); + else if ($this->request->getData('s_all')) + debug("s_all, recherche générale dans la table des matériels (et tables associées)"); + */ } - $generalFieldConditions = [ - 'OR' => $merge - ]; - } - - - /* - * SPECIFIC FIELDS - */ - //$specificFieldsConditions = NULL; - //$specificFieldsConditions = []; - - // au moins un champ specifique rempli ? - if ($this->request->getData('s_designation') !== null) { - // Materiel type - $matostype = $this->request->getData('s_matostype'); - $matostypeRequest = NULL; - switch ($matostype) { - // Administratif - case 'A': - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; - break; - // Technique - case 'T': - $matostypeRequest['Materiels.materiel_technique ='] = '1'; - break; - // Admin et Tech - case 'AT': - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; - $matostypeRequest['Materiels.materiel_technique ='] = '1'; - break; - // Admin ONLY - case 'AO': - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; - $matostypeRequest['Materiels.materiel_technique ='] = '0'; - break; - // Tech ONLY - case 'TO': - $matostypeRequest['Materiels.materiel_administratif ='] = '0'; - $matostypeRequest['Materiels.materiel_technique ='] = '1'; - break; + // (1.1.2) recherche spécifique : 1 ou plusieurs champ(s) spécifique(s) (s_designation, ...) => recherche sur champs spécifiques + else { + ///debug("recherche de champs spécifiques dans la table des matériels"); + $conditions = $this->find_specific_fields(); } + + // CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions OR $generalFieldConditions (mais entre chaque champ, c'est un AND) + // by default, no sort + $conditions = [ $conditions, $conditionNotArchived ]; + //debug($conditions); exit; + + $lastResults = $this->Materiels->find('all', [ + 'conditions' => $conditions, + 'contain' => ['Categories', 'Fournisseurs'] + ])->limit(1000); - $periode_acquisitionRequest = NULL; - $date_acquisition = NULL; - - $salle = NULL; - $fournisseur = NULL; - if ($this->request->getData('s_periode_acquisition1') != '') - $periode_acquisitionRequest['Materiels.date_acquisition >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition1')))); - if ($this->request->getData('s_periode_acquisition2') != '') - $periode_acquisitionRequest['Materiels.date_acquisition <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition2')))); - if ($this->request->getData('s_date_acquisition') != '') - $date_acquisition['Materiels.date_acquisition LIKE'] = '%' . date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_acquisition')))) . '%'; + $this->paginate = [ + 'maxLimit' => 1000, + 'limit' => 1000 + ]; + //debug($lastResults); exit; + $_results = $this->paginate($lastResults); + $this->set(compact('_results')); - $montantRequest = []; - if ($this->request->getData('s_prix_ht_inf') != '') - $montantRequest['Materiels.prix_ht <='] = $this->request->getData('s_prix_ht_inf'); - if ($this->request->getData('s_prix_ht_sup') != '') - $montantRequest['Materiels.prix_ht >='] = $this->request->getData('s_prix_ht_sup'); + // pour l'export + $this->request->getSession()->write("result", $lastResults->toArray()); - if ($this->request->getData('s_salle') !== null && $this->request->getData('s_salle') != '') - $salle['Materiels.lieu_detail LIKE'] = '%' . $this->request->getData('s_salle') . '%'; + } // $has_data + + // (1.2) POST without data + else { + ///debug("post without data => do nothing"); + // with sort field => trier un résultat + // without sort field => c'est la première visite de cette vue + } + + } + + // (2) no POST + else { + ///debug("no POST"); + + // (2.1) AVEC critère de tri (sort) => seulement demandé un tri du résultat, no data posted + /* + * TODO: on pourrait faire autrement: + * A chaque fois qu'on fait un tri sur une colonne, + * au lieu de sauvegarder le résultat de la recherche dans une variable de session puis recharger ce résultat en mémoire pour le trier, + * il vaudrait mieux relancer la recherche à chaque fois, mais juste changer le critère de tri, c'est plus simple, plus naturel + */ + if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { - if ($this->request->getData('s_fournisseur_id') !== null && $this->request->getData('s_fournisseur_id') != '') - $fournisseur['Materiels.fournisseur_id ='] = $this->request->getData('s_fournisseur'); + $foundMateriel = []; - /* TODO: (EP) NOUVEAU CODE EN COURS POUR REMPLACER LE CODE REDONDANT CI-APRES */ - $designation = NULL; - if ($this->request->getData('s_designation')) { - //$designation_words = []; - $designation_words = explode (" ", $this->request->getData('s_designation')); - $designation = str_replace(" ","%", $this->request->getData('s_designation')); - /* - $designation_conditions = []; - for ($i = 0; $i < count($designation); $i++) { - //$designation_conditions['Materiels.designation LIKE'] = '%'.$designation_words[$i].'%'); - } - */ - $designation = [ 'Materiels.designation LIKE' => '%'.$designation.'%' ]; + foreach ($resultTri as $r) { + array_push($foundMateriel, $r->id); } - - // Putting all these specific fields together - $specificFieldsConditions = [ - - //'Materiels.designation LIKE' => '%' . $designation[0] . '%', - //'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', - $designation, - //'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_laboratoire'), - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - //$fournisseur, - $this->getConditionForFieldNumber('fournisseur_id'), - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForField('status'), - - ]; - /* (EP) CODE REDONDANT INUTILEMENT, REMPLACÉ PAR LE CODE CI-DESSUS, BIEN PLUS COURT, qui en plus ne marchait pas !!! - $designation = explode (" ", $this->request->getData('s_designation')); - //debug($designation); - if (count($designation) == 1 ) { - $specificFieldsConditions = [ - 'Materiels.designation LIKE' => '%' . $designation[0] . '%', - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - //$fournisseur, - $this->getConditionForFieldNumber('fournisseur_id'), - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest - ]; + $res = $this->Materiels->find('all', [ + 'limit' => 1000 + ]); + for ($i = 0; $i < sizeof($foundMateriel); $i ++) { + $res->orWhere([ + 'id =' => $foundMateriel[$i] + ]); } - else if(count($designation) == 2 ) { - //debug($designation); - $specificFieldsConditions = [ - 'Materiels.designation LIKE' => '%' . $designation[0]. '%', - 'Materiels.designation LIKE' => '%' . $designation[1]. '%', - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - //$fournisseur, - $this->getConditionForFieldNumber('fournisseur_id'), - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest - ]; - }else if(count($designation) == 3 ) { - $specificFieldsConditions = [ - 'Materiels.designation LIKE' => '%' . $designation[0] . '%', - 'Materiels.designation LIKE' => '%' . $designation[1] . '%', - 'Materiels.designation LIKE' => '%' . $designation[2] . '%', - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - //$fournisseur, - $this->getConditionForFieldNumber('fournisseur_id'), - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest - ]; - }else { - $specificFieldsConditions = [ - 'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', - $this->getConditionForField('numero_commande'), - $date_acquisition, - $periode_acquisitionRequest, - $this->getConditionForFieldNumber('prix_ht'), - $montantRequest, - $this->getConditionForFieldNumber('sur_categorie_id'), - $this->getConditionForFieldNumber('categorie_id'), - $this->getConditionForFieldNumber('sous_categorie_id'), - $this->getConditionForField('nom_responsable'), - $this->getConditionForField('numero_inventaire_organisme'), - $this->getConditionForField('numero_inventaire_old'), - $this->getConditionForFieldNumber('groupes_metier_id'), - $this->getConditionForFieldNumber('groupes_thematique_id'), - $salle, - //$fournisseur, - $this->getConditionForFieldNumber('fournisseur_id'), - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest, - $this->getConditionForFieldNumber('organisme_id'), - $matostypeRequest - ]; - } - */ - /* - // STATUS : CREATED, VALIDATED, ARCHIVED... - //debug($specificFieldsConditions); - //if ($this->request->getData('s_status') != '') - if ($this->request->getData('s_status')) - //debug("status is" . $this->request->getData('s_status')); - array_push($specificFieldsConditions, - [ 'Materiels.status =' => $this->request->getData('s_status') ] - ); - */ - } - - - // CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions OR $generalFieldConditions (mais entre chaque champ, c'est un AND) - // by default, no sort - if ($this->request->getData('s_all_2') !== null && $this->request->getData('s_all_2') != '') - $conditions = [ - $generalFieldConditions, - $conditionNotArchived - ]; - else if ($this->request->getData('s_all') !== null && $this->request->getData('s_all') != '') - $conditions = [ - $generalFieldConditions, - $conditionNotArchived + $this->paginate = [ + 'maxLimit' => 1000, + 'limit' => 1000 ]; - else - $conditions = [ - $specificFieldsConditions, - $conditionNotArchived - ]; - - $lastResults = $this->Materiels->find('all', [ - 'conditions' => $conditions, - 'contain' => ['Categories', 'Fournisseurs'] - ])->limit(1000); - - $this->paginate = [ - 'maxLimit' => 1000, - 'limit' => 1000 - ]; - //debug($lastResults); exit; - $_results = $this->paginate($lastResults); - $this->set(compact('_results')); - - // pour l'export - $this->request->getSession()->write("result", $lastResults->toArray()); - - } // end if() - else if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { - $findedMateriel = []; - - foreach ($resultTri as $r) { - array_push($findedMateriel, $r->id); + $_results = $this->paginate($res); + $this->set(compact('_results')); + + // pour l'export + $this->request->getSession()->write("result", $res->toArray()); } - $res = $this->Materiels->find('all', [ - 'limit' => 1000 - ]); - for ($i = 0; $i < sizeof($findedMateriel); $i ++) { - $res->orWhere([ - 'id =' => $findedMateriel[$i] - ]); + + // (2.2) SANS critère de tri => c'est la première fois qu'on vient sur la vue, rien à faire de plusl + else { + ///debug("1ère venue sur la vue"); } - $this->paginate = [ - 'maxLimit' => 1000, - 'limit' => 1000 - ]; - $_results = $this->paginate($res); - $this->set(compact('_results')); - - // pour l'export - $this->request->getSession()->write("result", $res->toArray()); - } - } + } // no POST + + } // find() + + + + /** * group update status + exportAll -- libgit2 0.21.2