src/Service/BookingService.php line 136

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Booking;
  4. use App\Interfaces\BookingsInterface;
  5. use App\Interfaces\IHotels;
  6. use App\Interfaces\OrderInterface;
  7. use App\Repository\BookingRepository;
  8. use App\Vendor\Helper;
  9. use App\Vendor\Symfony\HAbstractService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
  12. use Symfony\Component\HttpKernel\KernelInterface;
  13. use Symfony\Contracts\Translation\TranslatorInterface;
  14. class BookingService extends HAbstractService implements BookingsInterface
  15. {
  16.     private IHotels $hotelsService;
  17.     function __construct(ContainerBagInterface $bagEntityManagerInterface $emKernelInterface $kernelTranslatorInterface $translatorIHotels $hotelsService)
  18.     {
  19.         parent::__construct($bag$em$kernel$translator);
  20.         $this->hotelsService $hotelsService;
  21.     }
  22.     public function getBookings($userId$status 1)
  23.     {
  24.         /** @var BookingRepository $repo */
  25.         $repo $this->em->getRepository(Booking::class);
  26.         $completedBookingsModels $repo->getBookingList($userId1);
  27.         $canceledBookingsModels $repo->getBookingList($userId2);
  28.         $completedBookings = [];
  29.         foreach ($completedBookingsModels as $completedBooking){
  30.             $hotel $this->hotelsService->getByHotelId($completedBooking['hotelId'], $this->request->getLocale());
  31.             $hotelImages $this->hotelsService->hotelImages($hotel[0]["images"]);
  32.             $rate $repo->getRateByBookingId($completedBooking['id']);
  33.             $booking = [
  34.                 'id' => $completedBooking['id'],
  35.                 'hotel' => $this->hotelsService->getByHotelId($completedBooking['hotelId'], $this->request->getLocale()),
  36.                 'images' => $hotelImages,
  37.                 'rate' => $rate,
  38.                 'partnerId' => $completedBooking["partnerOrderId"],
  39.                 'orderId' => $completedBooking["orderId"],
  40.                 'voucherPath' => $completedBooking["voucher"],
  41.                 'voucherName' => $completedBooking["voucherName"],
  42.             ];
  43.             $completedBookings[] = $booking;
  44.         }
  45.         $canceledBookings = [];
  46.         foreach ($canceledBookingsModels as $canceledBooking){
  47.             $hotel $this->hotelsService->getByHotelId($canceledBooking['hotelId'], $this->request->getLocale());
  48.             $hotelImages $this->hotelsService->hotelImages($hotel[0]["images"]);
  49.             $booking = [
  50.                 'id' => $canceledBooking['id'],
  51.                 'hotel' => $this->hotelsService->getByHotelId($canceledBooking['hotelId'], $this->request->getLocale()),
  52.                 'images' => $hotelImages,
  53.                 'rate' => $repo->getRateByBookingId($canceledBooking['id'])
  54.             ];
  55.             $canceledBookings[] = $booking;
  56.         }
  57.         return [
  58.             'completedBookings' => $completedBookings,
  59.             'canceledBookings' => $canceledBookings,
  60.         ];
  61.     }
  62.     public function setVoucher($orderId$pdfData){
  63.         $file $pdfData["voucherPath"];
  64.         $name $pdfData["voucher"];
  65.         /** @var Booking $booking */
  66.         $booking $this->em->getRepository(Booking::class)->findOneBy(["orderId" => $orderId]);
  67.         if(!empty($booking)){
  68.             $booking->setVoucher($file);
  69.             $booking->setVoucherName($name);
  70.             $this->em->persist($booking);
  71.             $this->em->flush();
  72.         }
  73.     }
  74.     public function setHotelId($orderId$hotelId){
  75.         /** @var Booking $booking */
  76.         $booking $this->em->getRepository(Booking::class)->findOneBy(["orderId" => $orderId]);
  77.         if(!empty($booking)){
  78.             $booking->setHotelId($hotelId);
  79.             $this->em->persist($booking);
  80.             $this->em->flush();
  81.         }
  82.     }
  83.     public function setBookingStatus($orderId$status){
  84.         /** @var Booking $booking */
  85.         $booking $this->em->getRepository(Booking::class)->findOneBy(["orderId" => $orderId]);
  86.         if(!empty($booking)){
  87.             $booking->setBookingStatus($status);
  88.             if($status == OrderInterface::STATUS_COMPLETED){
  89.                 $booking->setCompletedDate(new \DateTime());
  90.             }
  91.             if($status == OrderInterface::STATUS_CANCELED){
  92.                 $booking->setCanceledDate(new \DateTime());
  93.             }
  94.             $this->em->persist($booking);
  95.             $this->em->flush();
  96.         }
  97.     }
  98.     public function getBookingByPartnerId($partnerId): Booking{
  99.         /** @var Booking $booking */
  100.         $booking $this->em->getRepository(Booking::class)->findOneBy(["partnerOrderId" => $partnerId]);
  101.         return $booking;
  102.     }
  103.     public function getRateBy($hotel,$book_hash){
  104.         $currentRate = [];
  105.         $room_groups $hotel["room_groups"];
  106.         foreach ($room_groups as $room_group){
  107.             $rates $room_group["rates"];
  108.             foreach ($rates as $rate){
  109.                 if($rate["book_hash"] == $book_hash){
  110.                     $currentRate $rate;
  111.                     break;
  112.                 }
  113.             }
  114.         }
  115.         return $currentRate;
  116.     }
  117.     public function hotelStartData(){
  118.         $session $this->request->getSession();
  119.         $hotelData unserialize($session->get('hotel'));
  120.         $params $this->getParams();
  121.         $currentRate $this->getRateBy($hotelData$params["b_hash"]);
  122.         $params["hotel"]["check_in_time"] = $hotelData["check_in_time"];
  123.         $params["hotel"]["check_out_time"] = $hotelData["check_out_time"];
  124.         $params["hotel"]["name"] = $hotelData["name"];
  125.         $params["hotel"]["address"] = $hotelData["address"];
  126.         $params["hotel"]["star_rating"] = $hotelData["star_rating"];
  127.         $params["hotel"]["image"]= null;
  128.         if(!empty($hotelData["images"]) && !empty($hotelData["images"]["crop100"])){
  129.             $params["hotel"]["image"] = $hotelData["images"]["crop100"][0];
  130.         }
  131.         $session->set('rate'json_encode($currentRate));
  132.         $roomsCount 0;
  133.         $adultsCount 0;
  134.         $childrenCount 0;
  135.         if(!empty($params["search"]["guests"])){
  136.             foreach ($params["search"]["guests"] as &$room){
  137.                 $roomsCount++;
  138.                 $adultsCount += (int)$room["adults"];
  139.                 $c 0;
  140.                 foreach ($room["children"] as $ind=>&$child){
  141.                     if($child == "NaN"){
  142.                         unset($room["children"][$ind]);
  143.                         continue;
  144.                     }
  145.                     $c++;
  146.                 }
  147.                 $childrenCount += $c;
  148.             }
  149.             $params["roomsCount"] = $roomsCount;
  150.             $params["adultsCount"] = $adultsCount;
  151.             $params["childrenCount"] = $childrenCount;
  152.             $params["days"] = Helper::dateDiffInDays($params["search"]["checkin"], $params["search"]["checkout"]);
  153.         }
  154.        $params["_locale"] = $this->request->getLocale();
  155.         $session->set('all_params'$params);
  156.         return $params;
  157.     }
  158. }