Booking Creation - Finish initial implement.
- Check and update availability. - Set prices. - Generate booking refNumber.
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Repository;
|
||||
|
||||
use App\Entity\RoomAvailability;
|
||||
use App\Entity\RoomCategory;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
@@ -34,7 +35,6 @@ class RoomAvailabilityRepository extends ServiceEntityRepository
|
||||
->getResult();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param \DateTimeInterface Period start (included in range).
|
||||
* @param \DateTimeInterface Period end (not included in range).
|
||||
@@ -53,8 +53,30 @@ class RoomAvailabilityRepository extends ServiceEntityRepository
|
||||
->setParameter('startDate', $strStartDate)
|
||||
->setParameter('endDate', $strEndDate)
|
||||
->getQuery()
|
||||
->getArrayResult()
|
||||
;
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTimeInterface Period start (included in range).
|
||||
* @param \DateTimeInterface Period end (not included in range).
|
||||
* @return int Returns number of available room of that category on selected period.
|
||||
*/
|
||||
public function getAvailabilityForCategoryInPeriod(RoomCategory $roomCategory, \DateTimeInterface $startDate, \DateTimeInterface $endDate): int|null
|
||||
{
|
||||
$strStartDate = $startDate->format('Y-m-d');
|
||||
$strEndDate = $endDate->format('Y-m-d');
|
||||
$roomCatId = $roomCategory->getId();
|
||||
|
||||
return $this->createQueryBuilder('ra')
|
||||
->select('MIN(ra.numAvailable) as availability')
|
||||
->andWhere('ra.day >= :startDate')
|
||||
->andWhere('ra.day < :endDate')
|
||||
->andWhere('ra.roomCategory = :roomCategory')
|
||||
->setParameter('roomCategory', $roomCatId)
|
||||
->setParameter('startDate', $strStartDate)
|
||||
->setParameter('endDate', $strEndDate)
|
||||
->getQuery()
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function getAvailabilityForPeriodDetails(\DateTimeInterface $startDate, \DateTimeInterface $endDate): array
|
||||
@@ -68,7 +90,39 @@ class RoomAvailabilityRepository extends ServiceEntityRepository
|
||||
->setParameter('startDate', $strStartDate)
|
||||
->setParameter('endDate', $strEndDate)
|
||||
->getQuery()
|
||||
->getArrayResult()
|
||||
;
|
||||
->getArrayResult();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates All Availability of selected roomCategory during period. It can operate in 2 modes, normal and diff mode.
|
||||
* - Normal mode -> Sets value.
|
||||
* - Diff mode -> apply value as sum ( currentAvailability += diff )
|
||||
* NOTE: A Flush is needed after this operation.
|
||||
*/
|
||||
public function updateAvailabilityForRoomCategoryOnPeriod(RoomCategory $roomCategory, \DateTimeInterface $startDate, \DateTimeInterface $endDate, int $amount, bool $isDiff = false): void
|
||||
{
|
||||
$strStartDate = $startDate->format('Y-m-d');
|
||||
$strEndDate = $endDate->format('Y-m-d');
|
||||
$roomCatId = $roomCategory->getId();
|
||||
|
||||
$availabilityItemList = $this->createQueryBuilder('ra')
|
||||
->andWhere('ra.day >= :startDate')
|
||||
->andWhere('ra.day < :endDate')
|
||||
->andWhere('ra.roomCategory = :roomCategory')
|
||||
->setParameter('roomCategory', $roomCatId)
|
||||
->setParameter('startDate', $strStartDate)
|
||||
->setParameter('endDate', $strEndDate)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
$em = $this->getEntityManager();
|
||||
|
||||
foreach ($availabilityItemList as $item) {
|
||||
if ($isDiff) {
|
||||
$item->modNumAvailable($amount);
|
||||
} else {
|
||||
$item->setNumAvailable($amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user