feat: multiple hotelcodes assignable to users

This commit is contained in:
Björn Fromme committed 2025-01-08 10:07:19 +01:00
1 parent 5a07d95837
commit c15188c43c
16 files changed
+256 -67

No files matched your search

+17 -7
View File
@@ -148,8 +148,10 @@ class DispositionRepository extends ServiceEntityRepository
;
}
public function findNewDispositionsByHotelCode(string $hotelCode): array
public function findNewDispositionsByHotelCodes(mixed $hotelCode): array
{
$hotelCodes = (array) $hotelCode;
$qb = $this->createQueryBuilder('disposition');
return $qb
@@ -157,12 +159,15 @@ class DispositionRepository extends ServiceEntityRepository
->innerJoin('disposition.assignment', 'assignment')
->innerJoin('assignment.destination', 'destination')
->where($qb->expr()->andX(
$qb->expr()->like('destination.hotelCode', ':hotelCode'),
$qb->expr()->orX(
$qb->expr()->in($qb->expr()->substring('destination.hotelCode', 1, 3), ':hotelCodes'),
$qb->expr()->in($qb->expr()->substring('destination.hotelCode', -3, 3), ':hotelCodes'),
),
$qb->expr()->gte('destination.dateTo', ':dateTo'),
$qb->expr()->eq('disposition.status', ':status')
))
->orderBy('destination.dateFrom', 'ASC')
->setParameter('hotelCode', '%'.$hotelCode.'%')
->setParameter('hotelCodes', $hotelCodes)
->setParameter('dateTo', new \DateTimeImmutable())
->setParameter('status', Disposition::STATUS_CONFIRMED)
->getQuery()
@@ -170,8 +175,10 @@ class DispositionRepository extends ServiceEntityRepository
;
}
public function getDispositionsWithPendingFeedbackQuery(?string $hotelCode = null, ?int $offsetDays = null): Query
public function getDispositionsWithPendingFeedbackQuery(mixed $hotelCode = null, ?int $offsetDays = null): Query
{
$hotelCodes = (array) $hotelCode;
$qb = $this->createQueryBuilder('disposition');
$qb
@@ -201,8 +208,11 @@ class DispositionRepository extends ServiceEntityRepository
if (null !== $hotelCode) {
$qb
->andWhere($qb->expr()->like('destination.hotelCode', ':hotelCode'))
->setParameter('hotelCode', '%'.$hotelCode.'%')
->andWhere($qb->expr()->orX(
$qb->expr()->in($qb->expr()->substring('destination.hotelCode', 1, 3), ':hotelCodes'),
$qb->expr()->in($qb->expr()->substring('destination.hotelCode', -3, 3), ':hotelCodes'),
))
->setParameter('hotelCodes', $hotelCodes)
;
}
@@ -217,7 +227,7 @@ class DispositionRepository extends ServiceEntityRepository
;
}
public function findDispositionsWithPendingFeedbackByHotelCode(string $hotelCode): array
public function findDispositionsWithPendingFeedbackByHotelCodes(mixed $hotelCode): array
{
return $this
->getDispositionsWithPendingFeedbackQuery($hotelCode)
+28 -25
View File
@@ -32,16 +32,14 @@ class UserRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('u');
return $qb
->where($qb->expr()->orX(
$qb->expr()->like('u.roles', ':role_admin'),
$qb->expr()->like('u.roles', ':role_manager'),
$qb->expr()->like('u.roles', ':role_house_manager')
))
->where("JSON_CONTAINS(u.roles, :role_admin) = 1")
->orWhere("JSON_CONTAINS(u.roles, :role_manager) = 1")
->orWhere("JSON_CONTAINS(u.roles, :role_house_manager) = 1")
->orderBy('u.lastName', 'ASC')
->setParameters([
'role_admin' => '%"ROLE_ADMIN"%',
'role_manager' => '%"ROLE_MANAGER"%',
'role_house_manager' => '%"ROLE_HOUSE_MANAGER"%',
'role_admin' => json_encode('ROLE_ADMIN'),
'role_manager' => json_encode('ROLE_MANAGER'),
'role_house_manager' => json_encode('ROLE_HOUSE_MANAGER'),
])
->getQuery()
->getResult()
@@ -50,22 +48,29 @@ class UserRepository extends ServiceEntityRepository
/**
* @param string $role
* @param string $hotelCode
* @param string[]|string $hotelCode
* @return User[]
*/
public function getUsersByRoleAndHotelCode(string $role, string $hotelCode): array
public function getUsersByRoleAndHotelCode(string $role, mixed $hotelCode): array
{
$hotelCodeBase = substr($hotelCode, 0, 3);
$hotelCodes = (array) $hotelCode;
$hotelCodesBase = array_map(function ($code) {
return substr($code, 0, 3);
}, $hotelCodes);
$qb = $this->createQueryBuilder('user');
foreach ($hotelCodesBase as $index => $code) {
$qb
->orWhere('JSON_CONTAINS(user.hotelCodes, :hotelCode_'.$index.') = 1')
->setParameter('hotelCode_'.$index, json_encode($code))
;
}
return $qb
->where($qb->expr()->andX(
$qb->expr()->eq('user.hotelCode', ':hotelCode'),
$qb->expr()->like('user.roles', ':role')
))
->setParameter('hotelCode', $hotelCodeBase)
->setParameter('role', '%"'.$role.'"%')
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
->setParameter('role', json_encode($role))
->getQuery()
->getResult()
;
@@ -76,17 +81,15 @@ class UserRepository extends ServiceEntityRepository
$qb = $this->createQueryBuilder('user');
$users = $qb
->where($qb->expr()->andX(
$qb->expr()->orX(
$qb->expr()->like('user.lastName', ':search'),
$qb->expr()->like('user.firstName', ':search'),
)),
$qb->expr()->like('user.roles', ':role')
)
->where($qb->expr()->orX(
$qb->expr()->like('user.lastName', ':search'),
$qb->expr()->like('user.firstName', ':search'),
))
->andWhere('JSON_CONTAINS(user.roles, :role) = 1')
->orderBy('user.lastName', 'ASC')
->addOrderBy('user.firstName', 'ASC')
->setParameter('search', '%'.$this->escapeLikeWildcards($search).'%')
->setParameter('role', '%"'.$this->escapeLikeWildcards($role).'"%')
->setParameter('role', json_encode($role))
->getQuery()
->getResult()
;