Commit 0b3890e4d79625dd4390b31826887ea8e7944ef1

Authored by Etienne Pallier
1 parent 6fdd277f
Exists in master and in 1 other branch dev

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
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 :
... ...