diff --git a/CHANGELOG b/CHANGELOG index 96e2e0f..6a6472b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -631,6 +631,7 @@ Gestion multi-sites : ------- 29/11/2021 v5.3.13-3.7.9 + - (e) Partitionnement des matériels par site opérationnel (multi-sites) => liste des matériels filtrée - (b) Bugfix action sur plusieurs matos : => exporter liste courante => ne doit pas exporter tout => validation groupée, bouton "valider les materiels cochés" => doit valider diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 433dec3..d7029c5 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1354,14 +1354,6 @@ class MaterielsController extends AppController { return $exp->isNull('date_acquisition'); } ); - - try { - $nbMateriels = $materiels->count(); - } catch (\PDOException $e) { - debug("Mauvais format de requete SQL (1), Exception PDO générée !"); - exit; - } - // EXPORT DE LA LISTE EN COURS (selon le filtrage en cours) // Attention, l'appel à export() terminera l'action par un EXIT @@ -1375,7 +1367,6 @@ class MaterielsController extends AppController { //debug("age=$age, nbMateriels = $nbMateriels"); - $this->set(compact('nbMateriels')); /* $this->set('nbMateriels', @@ -1414,6 +1405,28 @@ class MaterielsController extends AppController { ->where($conditions) ); */ + + + //debug($materiels->count()); + //foreach ($materiels as $m) debug($m->id); + $current_user = $this->getUserEntity(); + //debug($current_user->nom); + //debug($current_user->site_id); + //debug($materiels); exit; + $materiels = $materiels->find('filteredForUserSite', ['user_site_id' => $current_user->site_id]); + //$materiels = $materiels->find('filteredForUserSite', ['user_site_id' => null]); + //foreach ($materiels as $m) debug($m->id); + //debug($materiels->count()); + + try { + $nbMateriels = $materiels->count(); + } catch (\PDOException $e) { + debug("Mauvais format de requete SQL (1), Exception PDO générée !"); + exit; + } + $this->set(compact('nbMateriels')); + + try { $materiels = $this->paginateResults($materiels, $nbLinesPerPage); } catch (\PDOException $e) { @@ -1465,6 +1478,7 @@ class MaterielsController extends AppController { */ $this->set('statuses_color', self::statuses_color); + $this->set(compact('materiels')); // Liste des DOMAINES diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index de359d2..019e54b 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -3,6 +3,7 @@ namespace App\Model\Table; //use Cake\ORM\Query; use Cake\ORM\RulesChecker; +use Cake\ORM\Query; use Cake\ORM\Table; use Cake\Validation\Validator; use Cake\ORM\TableRegistry; @@ -275,8 +276,41 @@ class MaterielsTable extends AppTable return array_merge($base_fields, $new_fields); } - + /* + * Retourne tous les matos mais SANS les matos sensibles de sites différents du user + * + * Usage : $query = $matos->find('filteredForUser', ['user' => $userEntity]); + * + * + */ + public function findFilteredForUserSite(Query $query, array $options) + { + /* + $user = $options['user']; + $matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1])->andWhere(['site_id !='=>$user->site_id])->select(['id']); + */ + $user_site_id = $options['user_site_id']; + // Liste des matos (id) interdits d'accès au user dont le site est $user_site_id + // => c.a.d liste des matos "sensibles" dont le site est différent de celui du user ($user_site_id) + //$matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1])->andWhere(['site_id !='=>$user_site_id])->select(['id']); // all()->extract('title'); + $matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1]); + if (! is_null($user_site_id)) + $matos_id_sensibles_from_other_sites->where(['site_id !=' => $user_site_id]); + $matos_id_sensibles_from_other_sites->select(['id']); // all()->extract('title'); + //$matos_id_sensibles_from_other_sites->all()->extract('id'); // all()->extract('title'); + //foreach ($matos_id_sensibles_from_other_sites as $m) debug($m); exit; + //return $query->where(['id !=' => $matos_id_sensibles_from_other_sites]); + + // Liste de tous les matos SAUF les interdits + return $query->where(['materiels.id not in' => $matos_id_sensibles_from_other_sites]); + + // Ceci est équivalent au find('list') + //$keyValueList = $articles->find()->combine('id', 'title'); + + } + + public static function removeUnselectedFieldsFrom($fields) { /* * Exemple : -- libgit2 0.21.2