Commit 0b3890e4d79625dd4390b31826887ea8e7944ef1
1 parent
6fdd277f
Exists in
master
and in
1 other branch
Partitionnement des matériels par site opérationnel (multi-sites)
+ Bugfix action sur plusieurs matos : => exporter liste courante => ne doit pas exporter tout => validation groupée, bouton "valider les materiels cochés" => doit valider v5.3.13-3.7.9
Showing
3 changed files
with
59 additions
and
10 deletions
Show diff stats
CHANGELOG
... | ... | @@ -631,6 +631,7 @@ Gestion multi-sites : |
631 | 631 | |
632 | 632 | ------- |
633 | 633 | 29/11/2021 v5.3.13-3.7.9 |
634 | + - (e) Partitionnement des matériels par site opérationnel (multi-sites) => liste des matériels filtrée | |
634 | 635 | - (b) Bugfix action sur plusieurs matos : |
635 | 636 | => exporter liste courante => ne doit pas exporter tout |
636 | 637 | => validation groupée, bouton "valider les materiels cochés" => doit valider | ... | ... |
src/Controller/MaterielsController.php
... | ... | @@ -1354,14 +1354,6 @@ class MaterielsController extends AppController { |
1354 | 1354 | return $exp->isNull('date_acquisition'); |
1355 | 1355 | } |
1356 | 1356 | ); |
1357 | - | |
1358 | - try { | |
1359 | - $nbMateriels = $materiels->count(); | |
1360 | - } catch (\PDOException $e) { | |
1361 | - debug("Mauvais format de requete SQL (1), Exception PDO générée !"); | |
1362 | - exit; | |
1363 | - } | |
1364 | - | |
1365 | 1357 | |
1366 | 1358 | // EXPORT DE LA LISTE EN COURS (selon le filtrage en cours) |
1367 | 1359 | // Attention, l'appel à export() terminera l'action par un EXIT |
... | ... | @@ -1375,7 +1367,6 @@ class MaterielsController extends AppController { |
1375 | 1367 | |
1376 | 1368 | |
1377 | 1369 | //debug("age=$age, nbMateriels = $nbMateriels"); |
1378 | - $this->set(compact('nbMateriels')); | |
1379 | 1370 | |
1380 | 1371 | /* |
1381 | 1372 | $this->set('nbMateriels', |
... | ... | @@ -1414,6 +1405,28 @@ class MaterielsController extends AppController { |
1414 | 1405 | ->where($conditions) |
1415 | 1406 | ); |
1416 | 1407 | */ |
1408 | + | |
1409 | + | |
1410 | + //debug($materiels->count()); | |
1411 | + //foreach ($materiels as $m) debug($m->id); | |
1412 | + $current_user = $this->getUserEntity(); | |
1413 | + //debug($current_user->nom); | |
1414 | + //debug($current_user->site_id); | |
1415 | + //debug($materiels); exit; | |
1416 | + $materiels = $materiels->find('filteredForUserSite', ['user_site_id' => $current_user->site_id]); | |
1417 | + //$materiels = $materiels->find('filteredForUserSite', ['user_site_id' => null]); | |
1418 | + //foreach ($materiels as $m) debug($m->id); | |
1419 | + //debug($materiels->count()); | |
1420 | + | |
1421 | + try { | |
1422 | + $nbMateriels = $materiels->count(); | |
1423 | + } catch (\PDOException $e) { | |
1424 | + debug("Mauvais format de requete SQL (1), Exception PDO générée !"); | |
1425 | + exit; | |
1426 | + } | |
1427 | + $this->set(compact('nbMateriels')); | |
1428 | + | |
1429 | + | |
1417 | 1430 | try { |
1418 | 1431 | $materiels = $this->paginateResults($materiels, $nbLinesPerPage); |
1419 | 1432 | } catch (\PDOException $e) { |
... | ... | @@ -1465,6 +1478,7 @@ class MaterielsController extends AppController { |
1465 | 1478 | */ |
1466 | 1479 | |
1467 | 1480 | $this->set('statuses_color', self::statuses_color); |
1481 | + | |
1468 | 1482 | $this->set(compact('materiels')); |
1469 | 1483 | |
1470 | 1484 | // Liste des DOMAINES | ... | ... |
src/Model/Table/MaterielsTable.php
... | ... | @@ -3,6 +3,7 @@ namespace App\Model\Table; |
3 | 3 | |
4 | 4 | //use Cake\ORM\Query; |
5 | 5 | use Cake\ORM\RulesChecker; |
6 | +use Cake\ORM\Query; | |
6 | 7 | use Cake\ORM\Table; |
7 | 8 | use Cake\Validation\Validator; |
8 | 9 | use Cake\ORM\TableRegistry; |
... | ... | @@ -275,8 +276,41 @@ class MaterielsTable extends AppTable |
275 | 276 | return array_merge($base_fields, $new_fields); |
276 | 277 | } |
277 | 278 | |
278 | - | |
279 | + /* | |
280 | + * Retourne tous les matos mais SANS les matos sensibles de sites différents du user | |
281 | + * | |
282 | + * Usage : $query = $matos->find('filteredForUser', ['user' => $userEntity]); | |
283 | + * | |
284 | + * | |
285 | + */ | |
286 | + public function findFilteredForUserSite(Query $query, array $options) | |
287 | + { | |
288 | + /* | |
289 | + $user = $options['user']; | |
290 | + $matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1])->andWhere(['site_id !='=>$user->site_id])->select(['id']); | |
291 | + */ | |
292 | + $user_site_id = $options['user_site_id']; | |
279 | 293 | |
294 | + // Liste des matos (id) interdits d'accès au user dont le site est $user_site_id | |
295 | + // => c.a.d liste des matos "sensibles" dont le site est différent de celui du user ($user_site_id) | |
296 | + //$matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1])->andWhere(['site_id !='=>$user_site_id])->select(['id']); // all()->extract('title'); | |
297 | + $matos_id_sensibles_from_other_sites = $this->find()->where(['is_site_only'=>1]); | |
298 | + if (! is_null($user_site_id)) | |
299 | + $matos_id_sensibles_from_other_sites->where(['site_id !=' => $user_site_id]); | |
300 | + $matos_id_sensibles_from_other_sites->select(['id']); // all()->extract('title'); | |
301 | + //$matos_id_sensibles_from_other_sites->all()->extract('id'); // all()->extract('title'); | |
302 | + //foreach ($matos_id_sensibles_from_other_sites as $m) debug($m); exit; | |
303 | + //return $query->where(['id !=' => $matos_id_sensibles_from_other_sites]); | |
304 | + | |
305 | + // Liste de tous les matos SAUF les interdits | |
306 | + return $query->where(['materiels.id not in' => $matos_id_sensibles_from_other_sites]); | |
307 | + | |
308 | + // Ceci est équivalent au find('list') | |
309 | + //$keyValueList = $articles->find()->combine('id', 'title'); | |
310 | + | |
311 | + } | |
312 | + | |
313 | + | |
280 | 314 | public static function removeUnselectedFieldsFrom($fields) { |
281 | 315 | /* |
282 | 316 | * Exemple : | ... | ... |