src/Controller/HomeController.php line 27

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Aging;
  4. use App\Entity\Hotel;
  5. use App\Entity\Search;
  6. use App\Entity\User;
  7. use App\Form\FilterType;
  8. use App\Repository\AgingRepository;
  9. use App\Repository\FullStatsticAgenComRepository;
  10. use App\Repository\HistoryForcastRepository;
  11. use App\Repository\ManagerReportDataRepository;
  12. use App\Repository\MarketStatisticsRepository;
  13. use App\Repository\PMAccountByRoomRepository;
  14. use App\Repository\TransactionCodesGrossRepository;
  15. use App\Repository\ZeroRateRoomsRepository;
  16. use Knp\Component\Pager\PaginatorInterface;
  17. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. class HomeController extends AbstractController
  22. {
  23.     #[Route('/'name'app_home')]
  24.     public function index(): Response
  25.     {
  26.         return $this->render('home/index.html.twig', [
  27.         ]);
  28.     }
  29.     #[Route('/analytics'name'app_analytics'methods: ['GET''POST'])]
  30.     public function analytics(Request $requestManagerReportDataRepository $managerReportDataRepository): Response
  31.     {
  32.         $currentDate = new \DateTime('-1 day');
  33.         $search = (new Search())
  34.             ->setDays($currentDate->format('d'))
  35.             ->setMonths($currentDate->format('m'))
  36.             ->setYears($currentDate->format('Y'));
  37.         $form $this->createForm(FilterType::class, $search);
  38.         $form->handleRequest($request);
  39.         $mHotel null;
  40.         $mMonth $currentDate->format('m');
  41.         $mDay $currentDate->format('d');
  42.         $mYear $currentDate->format('Y');
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.             $mHotel $search->getHotels();
  45.             $mMonth $search->getMonths();
  46.             $mDay $search->getDays();
  47.             $mYear $search->getYears();
  48.         }
  49.         $mrByDay $managerReportDataRepository->findMRBy([
  50.             'TOTAL_REVENUE',
  51.             'GUEST_IN_HOUSE',
  52.             'ROOM_REVENUE',
  53.             'PHYSICAL_ROOMS',
  54.             'OCC_PERC_WO_CHO',
  55.             'OCC_ROOMS',
  56.             'COMP_ROOMS',
  57.             'HOUSE_USE_ROOMS',
  58.             'FIT_MEM_DEP_ROOMS',
  59.             'ADULTS_IN_HOUSE',
  60.             'CHILDREN_IN_HOUSE',
  61.             'TOTAL_REVENUE_GUEST',
  62.         ], 'DAY'$mHotel$mDay$mMonth$mYear);
  63.         $mrByDay array_reduce($mrByDay, function ($h$data) {
  64.             $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  65.             return $h;
  66.         }, []);
  67.         $mrByMonth $managerReportDataRepository->findMRBy([
  68.             'TOTAL_REVENUE',
  69.             'GUEST_IN_HOUSE',
  70.             'ROOM_REVENUE',
  71.             'PHYSICAL_ROOMS',
  72.             'OCC_PERC_WO_CHO',
  73.             'OCC_ROOMS',
  74.             'COMP_ROOMS',
  75.             'HOUSE_USE_ROOMS',
  76.             'FIT_MEM_DEP_ROOMS',
  77.             'ADULTS_IN_HOUSE',
  78.             'CHILDREN_IN_HOUSE',
  79.             'TOTAL_REVENUE_GUEST',
  80.         ], 'MONTH'$mHotel$mDay$mMonth$mYear);
  81.         $mrByMonth array_reduce($mrByMonth, function ($h$data) {
  82.             $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  83.             return $h;
  84.         }, []);
  85.         $mrByYear $managerReportDataRepository->findMRBy([
  86.             'TOTAL_REVENUE',
  87.             'GUEST_IN_HOUSE',
  88.             'ROOM_REVENUE',
  89.             'PHYSICAL_ROOMS',
  90.             'OCC_PERC_WO_CHO',
  91.             'OCC_ROOMS',
  92.             'COMP_ROOMS',
  93.             'HOUSE_USE_ROOMS',
  94.             'FIT_MEM_DEP_ROOMS',
  95.             'ADULTS_IN_HOUSE',
  96.             'CHILDREN_IN_HOUSE',
  97.             'TOTAL_REVENUE_GUEST',
  98.         ], 'YEAR'$mHotel$mDay$mMonth$mYear);
  99.         $mrByYear array_reduce($mrByYear, function ($h$data) {
  100.             $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  101.             return $h;
  102.         }, []);
  103.         return $this->render('analytics/index.html.twig', [
  104.             'mr_by_day' => $mrByDay,
  105.             'mr_by_month' => $mrByMonth,
  106.             'mr_by_year' => $mrByYear,
  107.             'form' => $form->createView(),
  108.         ]);
  109.     }
  110.     #[Route('/reports'name'app_reports')]
  111.     public function reports(): Response
  112.     {
  113.         return $this->render('analytics/reports.html.twig', [
  114.         ]);
  115.     }
  116.     #[Route('/aging'name'app_aging')]
  117.     public function aging(Request $requestAgingRepository $agingRepository): Response
  118.     {
  119.         $currentDate = new \DateTime('-1 day');
  120.         $search = (new Search())
  121.             ->setDays($currentDate->format('d'))
  122.             ->setMonths($currentDate->format('m'))
  123.             ->setYears($currentDate->format('Y'));
  124.         $form $this->createForm(FilterType::class, $search);
  125.         $form->handleRequest($request);
  126.         $mHotel null;
  127.         $mDay $currentDate->format('d');
  128.         $mMonth $currentDate->format('m');
  129.         $mYear $currentDate->format('Y');
  130.         if ($form->isSubmitted() && $form->isValid()) {
  131.             $mHotel $search->getHotels();
  132.             $mMonth $search->getMonths();
  133.             $mDay $search->getDays();
  134.             $mYear $search->getYears();
  135.         }
  136.         $agingData $agingRepository->findAGBy($mHotel$mDay$mMonth$mYear);
  137.         $agings = [];
  138.         /** @var $aging Aging */
  139.         foreach ($agingData as $aging) {
  140.             $agings[$aging->getRESORT()][$aging->getTYPE()][] = $aging;
  141.         }
  142.         
  143.         return $this->render('analytics/aging.html.twig', [
  144.             'form' => $form->createView(),
  145.             'agings' => $agings,
  146.         ]);
  147.     }
  148.     #[Route('/guests'name'app_guests')]
  149.     public function guests(Request $requestPMAccountByRoomRepository $PMAccountByRoomRepositoryPaginatorInterface $paginator): Response
  150.     {
  151.         $currentDate = new \DateTime('-1 day');
  152.         $search = (new Search())
  153.             ->setDays($currentDate->format('d'))
  154.             ->setMonths($currentDate->format('m'))
  155.             ->setYears($currentDate->format('Y'));
  156.         $form $this->createForm(FilterType::class, $search, ['items' => true,]);
  157.         $form->handleRequest($request);
  158.         $mHotel null;
  159.         $mMonth $currentDate->format('m');
  160.         $mDay $currentDate->format('d');
  161.         $mYear $currentDate->format('Y');
  162.         if ($form->isSubmitted() && $form->isValid()) {
  163.             $mHotel $search->getHotels();
  164.             $mMonth $search->getMonths();
  165.             $mDay $search->getDays();
  166.             $mYear $search->getYears();
  167.         }
  168.         $builder $PMAccountByRoomRepository->createQueryBuilder('p');
  169.         if ($mHotel) {
  170.             $builder->andWhere('p.RESORT = :hotel')
  171.                 ->setParameter('hotel'$mHotel->getName());
  172.         }else{
  173.             if (!$this->isGranted(User::ROLE_ADMIN) && !$this->isGranted(User::ROLE_IT_MANAGER)){
  174.                 $hotels array_reduce($this->getUser()->getHotels()->toArray(), function ($hHotel $v){$h[]=$v->getName(); return $h;}, []);
  175.                 $builder->andWhere('p.RESORT IN(:hotels)')
  176.                     ->setParameter('hotels'$hotels);
  177.             }
  178.         }
  179.         if ($mDay) {
  180.             $builder->andWhere('DAY(p.createdAt) = :day')
  181.                 ->setParameter('day'$mDay);
  182.         }
  183.         if ($mMonth) {
  184.             $builder->andWhere('MONTH(p.createdAt) = :month')
  185.                 ->setParameter('month'$mMonth);
  186.         }
  187.         if ($mYear) {
  188.             $builder->andWhere('YEAR(p.createdAt) = :year')
  189.                 ->setParameter('year'$mYear);
  190.         }
  191.         $guests $paginator->paginate(
  192.             $builder->getQuery(),
  193.             $request->query->getInt('page'1), /*page number*/
  194.             $search->getItems(), /*limit per page*/
  195.         );
  196. //        $guests = $PMAccountByRoomRepository->getGuests();
  197.         return $this->render('analytics/guests.html.twig', [
  198.             'guests' => $guests,
  199.             'form' => $form->createView(),
  200.         ]);
  201.     }
  202.     #[Route('/tablehrg'name'app_tablehrg')]
  203.     public function tablehrg(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  204.     {
  205.         $currentDate = new \DateTime('-1 day');
  206.         $search = (new Search())
  207.             ->setDays($currentDate->format('d'))
  208.             ->setMonths($currentDate->format('m'))
  209.             ->setYears($currentDate->format('Y'));
  210.         $form $this->createForm(FilterType::class, $search);
  211.         $form->remove('days');
  212.         $form->handleRequest($request);
  213.         $mHotel null;
  214.         $mMonth $currentDate->format('m');
  215.         $mYear $currentDate->format('Y');
  216.         if ($form->isSubmitted() && $form->isValid()) {
  217.             $mHotel $search->getHotels();
  218.             $mMonth $search->getMonths();
  219.             $mYear $search->getYears();
  220.         }
  221.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  222.         $mrByMonth array_reduce($hf, function ($h$data) {
  223.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  224.             return $h;
  225.         }, []);
  226. //        $mrByMonth = $managerReportDataRepository->findMRBy([
  227. //            'PHYSICAL_ROOMS_MINUS_OOO',
  228. //            'AVAIL_ROOMS',
  229. //            'OCC_ROOMS',
  230. //            'OCC_PERC',
  231. //        ], 'MONTH', $mHotel, null, $mMonth, $mYear);
  232. //        $mrByMonth = array_reduce($mrByMonth, function ($h, $data) {
  233. //            $h[$data['RESORT']][$data['createdAt']->format('M')][$data['SUB_GRP_1']][$data['createdAt']->format('jS')]['DESCRIPTION'] = $data['DESCRIPTION'];
  234. //            $h[$data['RESORT']][$data['createdAt']->format('M')][$data['SUB_GRP_1']][$data['createdAt']->format('jS')]['SUM_AMOUNT'] = $data['SUM_AMOUNT'];
  235. //            return $h;
  236. //        }, []);
  237.         return $this->render('analytics/tablehrg.html.twig', [
  238.             'form' => $form->createView(),
  239.             'mr_by_month' => $mrByMonth,
  240.         ]);
  241.     }
  242.     #[Route('/hrg'name'app_hrg')]
  243.     public function hrg(Request $requestManagerReportDataRepository $managerReportDataRepository): Response
  244.     {
  245.         $currentDate = new \DateTime('-1 day');
  246.         $search = (new Search())
  247.             ->setDays($currentDate->format('d'))
  248.             ->setMonths($currentDate->format('m'))
  249.             ->setYears($currentDate->format('Y'));
  250.         $form $this->createForm(FilterType::class, $search);
  251.         $form->remove('days');
  252.         $form->handleRequest($request);
  253.         $mHotel null;
  254.         $mMonth $currentDate->format('m');
  255.         $mYear $currentDate->format('Y');
  256.         if ($form->isSubmitted() && $form->isValid()) {
  257.             $mHotel $search->getHotels();
  258.             $mMonth $search->getMonths();
  259.             $mYear $search->getYears();
  260.         }
  261.         return $this->render('analytics/hrg.html.twig', [
  262.             'form' => $form->createView(),
  263.         ]);
  264.     }
  265.     #[Route('/rate'name'app_rate')]
  266.     public function rate(Request $requestZeroRateRoomsRepository $rateRoomsRepositoryPaginatorInterface $paginator): Response
  267.     {
  268.         $currentDate = new \DateTime('-1 day');
  269.         $search = (new Search())
  270.             ->setDays($currentDate->format('d'))
  271.             ->setMonths($currentDate->format('m'))
  272.             ->setYears($currentDate->format('Y'));
  273.         $form $this->createForm(FilterType::class, $search, ['items' => true]);
  274.         $form->handleRequest($request);
  275.         $mHotel null;
  276.         $mMonth $currentDate->format('m');
  277.         $mDay $currentDate->format('d');
  278.         $mYear $currentDate->format('Y');
  279.         if ($form->isSubmitted() && $form->isValid()) {
  280.             $mHotel $search->getHotels();
  281.             $mMonth $search->getMonths();
  282.             $mDay $search->getDays();
  283.             $mYear $search->getYears();
  284.         }
  285.         $builder $rateRoomsRepository->createQueryBuilder('z');
  286.         if ($mHotel) {
  287.             $builder->andWhere('z.RESORT = :hotel')
  288.                 ->setParameter('hotel'$mHotel->getName());
  289.         }else{
  290.             if (!$this->isGranted(User::ROLE_ADMIN) && !$this->isGranted(User::ROLE_IT_MANAGER)){
  291.                 $hotels array_reduce($this->getUser()->getHotels()->toArray(), function ($hHotel $v){$h[]=$v->getName(); return $h;}, []);
  292.                 $builder->andWhere('z.RESORT IN(:hotels)')
  293.                     ->setParameter('hotels'$hotels);
  294.             }
  295.         }
  296.         if ($mDay) {
  297.             $builder->andWhere('DAY(z.createdAt) = :day')
  298.                 ->setParameter('day'$mDay);
  299.         }
  300.         if ($mMonth) {
  301.             $builder->andWhere('MONTH(z.createdAt) = :month')
  302.                 ->setParameter('month'$mMonth);
  303.         }
  304.         if ($mYear) {
  305.             $builder->andWhere('YEAR(z.createdAt) = :year')
  306.                 ->setParameter('year'$mYear);
  307.         }
  308.         $raterooms $paginator->paginate(
  309.             $builder->getQuery(),
  310.             $request->query->getInt('page'1), /*page number*/
  311.             $search->getItems(), /*limit per page*/
  312.         );
  313. //        $raterooms = $rateRoomsRepository->getRooms();
  314.         return $this->render('analytics/rate.html.twig', [
  315.             'raterooms' => $raterooms,
  316.             'form' => $form->createView(),
  317.         ]);
  318.     }
  319.     #[Route('/tablermf'name'app_tablermf')]
  320.     public function tablermf(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  321.     {
  322.         $currentDate = new \DateTime('-1 day');
  323.         $search = (new Search())
  324.             ->setDays($currentDate->format('d'))
  325.             ->setMonths($currentDate->format('m'))
  326.             ->setYears($currentDate->format('Y'));
  327.         $form $this->createForm(FilterType::class, $search);
  328.         $form->remove('days');
  329.         $form->handleRequest($request);
  330.         $mHotel null;
  331.         $mMonth $currentDate->format('m');
  332.         $mYear $currentDate->format('Y');
  333.         if ($form->isSubmitted() && $form->isValid()) {
  334.             $mHotel $search->getHotels();
  335.             $mMonth $search->getMonths();
  336.             $mYear $search->getYears();
  337.         }
  338.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  339. //        dump($hf);
  340.         $mrByMonth array_reduce($hf, function ($h$data) {
  341.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  342.             return $h;
  343.         }, []);
  344. //        dump($mrByMonth);
  345. //        $mrByMonth = $managerReportDataRepository->findMRBy([
  346. //            'PHYSICAL_ROOMS_MINUS_OOO',
  347. //            'AVAIL_ROOMS',
  348. //            'OCC_ROOMS',
  349. //            'OCC_PERC',
  350. //        ], 'MONTH', $mHotel, null, $mMonth, $mYear);
  351. //        $mrByMonth = array_reduce($mrByMonth, function ($h, $data) {
  352. //            $h[$data['RESORT']][$data['createdAt']->format('M')][$data['SUB_GRP_1']][$data['createdAt']->format('jS')]['DESCRIPTION'] = $data['DESCRIPTION'];
  353. //            $h[$data['RESORT']][$data['createdAt']->format('M')][$data['SUB_GRP_1']][$data['createdAt']->format('jS')]['SUM_AMOUNT'] = $data['SUM_AMOUNT'];
  354. //            $h[$data['RESORT']][$data['createdAt']->format('M')][$data['SUB_GRP_1']][$data['createdAt']->format('jS')]['YEAR'] = $data['YEAR'];
  355. //            return $h;
  356. //        }, []);
  357.         return $this->render('analytics/tablermf.html.twig', [
  358.             'form' => $form->createView(),
  359.             'mr_by_month' => $mrByMonth,
  360.         ]);
  361.     }
  362.     #[Route('/rmf'name'app_rmf')]
  363.     public function rmf(): Response
  364.     {
  365.         return $this->render('analytics/rmf.html.twig', [
  366.             'controller_name' => 'HomeController',
  367.         ]);
  368.     }
  369.     #[Route('/revenue'name'app_revenue')]
  370.     public function revenue(Request $requestManagerReportDataRepository $managerReportDataRepositoryTransactionCodesGrossRepository $transactionCodesGrossRepository): Response
  371.     {
  372.         $currentDate = new \DateTime('-1 day');
  373.         $search = (new Search())
  374.             ->setDays($currentDate->format('d'))
  375.             ->setMonths($currentDate->format('m'))
  376.             ->setYears($currentDate->format('Y'));
  377.         $form $this->createForm(FilterType::class, $search);
  378. //        $form->remove('years');
  379.         $form->handleRequest($request);
  380.         $mHotel null;
  381.         $mMonth $currentDate->format('m');
  382.         $mDay $currentDate->format('d');
  383.         $mYear $currentDate->format('Y');
  384.         if ($form->isSubmitted() && $form->isValid()) {
  385.             $mHotel $search->getHotels();
  386.             $mMonth $search->getMonths();
  387.             $mDay $search->getDays();
  388.             $mYear $search->getYears();
  389.         }
  390.         $thisYear $mYear;
  391.         $lastYear $mYear 1;
  392.         $data = [];
  393.         $data1 = [];
  394.         $data2 = [];
  395.         $mrByHotelByDay $managerReportDataRepository->findMRBy([
  396.             'FOOD_BEV_REVENUE',
  397.             'ROOM_REVENUE',
  398.             'OCC_PERC_WO_CHO',
  399.             'OCC_MINUS_COMP_HU',
  400.             'TOTAL_REVENUE',
  401.         ], 'DAY'$mHotel$mDay$mMonth$thisYear);
  402.         foreach ($mrByHotelByDay as $mr) {
  403.             $data[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'];
  404.         }
  405. //        dump($mrByHotelByDay);
  406.         $mrByHotelByDay $managerReportDataRepository->findMRBy([
  407.             'FOOD_BEV_REVENUE',
  408.             'ROOM_REVENUE',
  409.             'OCC_PERC_WO_CHO',
  410.             'OCC_MINUS_COMP_HU',
  411.             'TOTAL_REVENUE',
  412.         ], 'DAY'$mHotel$mDay$mMonth$lastYear);
  413.         foreach ($mrByHotelByDay as $mr) {
  414.             $data[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'] ?? 0;
  415.         }
  416.         $tcgByHotelByDay $transactionCodesGrossRepository->findMRBy([
  417.             '2825',
  418.         ], 'DAY'$mHotel$mDay$mMonth$thisYear);
  419. //        dump($tcgByHotelByDay);
  420.         foreach ($tcgByHotelByDay as $mr) {
  421.             $data[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'];
  422.         }
  423.         $tcgByHotelByDay $transactionCodesGrossRepository->findMRBy([
  424.             '2825',
  425.         ], 'DAY'$mHotel$mDay$mMonth$lastYear);
  426.         foreach ($tcgByHotelByDay as $mr) {
  427.             $data[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'] ?? 0;
  428.         }
  429.         $mrByHotelByMonth $managerReportDataRepository->findMRBy([
  430.             'FOOD_BEV_REVENUE',
  431.             'ROOM_REVENUE',
  432.             'OCC_PERC_WO_CHO',
  433.             'OCC_MINUS_COMP_HU',
  434.             'TOTAL_REVENUE',
  435.         ], 'MONTH'$mHotel$mDay$mMonth$thisYear);
  436.         foreach ($mrByHotelByMonth as $mr) {
  437.             $data1[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'];
  438.         }
  439.         $mrByHotelByMonth $managerReportDataRepository->findMRBy([
  440.             'FOOD_BEV_REVENUE',
  441.             'ROOM_REVENUE',
  442.             'OCC_PERC_WO_CHO',
  443.             'OCC_MINUS_COMP_HU',
  444.             'TOTAL_REVENUE',
  445.         ], 'MONTH'$mHotel$mDay$mMonth$lastYear);
  446.         foreach ($mrByHotelByMonth as $mr) {
  447.             $data1[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'];
  448.         }
  449.         $tcgByHotelByMonth $transactionCodesGrossRepository->findMRBy([
  450.             '2825',
  451.         ], 'MONTH'$mHotel$mDay$mMonth$thisYear);
  452.         foreach ($tcgByHotelByMonth as $mr) {
  453.             $data1[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'];
  454.         }
  455.         $tcgByHotelByMonth $transactionCodesGrossRepository->findMRBy([
  456.             '2825',
  457.         ], 'MONTH'$mHotel$mDay$mMonth$lastYear);
  458.         foreach ($tcgByHotelByMonth as $mr) {
  459.             $data1[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'] ?? 0;
  460.         }
  461.         $mrByHotelByYear $managerReportDataRepository->findMRBy([
  462.             'FOOD_BEV_REVENUE',
  463.             'ROOM_REVENUE',
  464.             'OCC_PERC_WO_CHO',
  465.             'OCC_MINUS_COMP_HU',
  466.             'TOTAL_REVENUE',
  467.         ], 'YEAR'$mHotel$mDay$mMonth$thisYear);
  468.         foreach ($mrByHotelByYear as $mr) {
  469.             $data2[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'];
  470.         }
  471.         $mrByHotelByYear $managerReportDataRepository->findMRBy([
  472.             'FOOD_BEV_REVENUE',
  473.             'ROOM_REVENUE',
  474.             'OCC_PERC_WO_CHO',
  475.             'OCC_MINUS_COMP_HU',
  476.             'TOTAL_REVENUE',
  477.         ], 'YEAR'$mHotel$mDay$mMonth$lastYear);
  478.         foreach ($mrByHotelByYear as $mr) {
  479.             $data2[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMOUNT'];
  480.         }
  481.         $tcgByHotelByYear $transactionCodesGrossRepository->findMRBy([
  482.             '2825',
  483.         ], 'YEAR'$mHotel$mDay$mMonth$thisYear);
  484.         foreach ($tcgByHotelByYear as $mr) {
  485.             $data2[$mr['RESORT']]['THIS_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'];
  486.         }
  487.         $tcgByHotelByYear $transactionCodesGrossRepository->findMRBy([
  488.             '2825',
  489.         ], 'YEAR'$mHotel$mDay$mMonth$lastYear);
  490.         foreach ($tcgByHotelByYear as $mr) {
  491.             $data2[$mr['RESORT']]['LAST_YEAR'][$mr['SUB_GRP_1']] = $mr['SUM_AMT_TOTAL'] ?? 0;
  492.         }
  493. //
  494. //        $mrByYear = $managerReportDataRepository->findMRBy([
  495. //            'TOTAL_REVENUE',
  496. //            'ROOM_REVENUE',
  497. //            'OCC_PERC',
  498. //        ], 'YEAR', $mHotel, $mDay, $mMonth, $mYear);
  499. //        $mrByYear = array_reduce($mrByYear, function ($h, $data) {
  500. //            $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  501. //            return $h;
  502. //        }, []);
  503.         return $this->render('analytics/revenue.html.twig', [
  504.             'form' => $form->createView(),
  505.             'mr_by_hotel_by_day' => $data,
  506.             'mr_by_hotel_by_month' => $data1,
  507.             'mr_by_hotel_by_year' => $data2,
  508.             'search' => $search,
  509. //            'mr_by_month' => $mrByMonth,
  510. //            'mr_by_year' => $mrByYear,
  511. //            'form' => $form->createView(),
  512.         ]);
  513.     }
  514.     #[Route('/daily'name'app_daily')]
  515.     public function daily(Request $requestManagerReportDataRepository $managerReportDataRepository): Response
  516.     {
  517.         $currentDate = new \DateTime('-1 day');
  518.         $search = (new Search())
  519.             ->setDays($currentDate->format('d'))
  520.             ->setMonths($currentDate->format('m'))
  521.             ->setYears($currentDate->format('Y'));
  522.         $form $this->createForm(FilterType::class, $search);
  523.         $form->remove('days');
  524.         $form->handleRequest($request);
  525.         $mHotel null;
  526.         $mMonth $currentDate->format('m');
  527.         $mYear $currentDate->format('Y');
  528.         if ($form->isSubmitted() && $form->isValid()) {
  529.             $mHotel $search->getHotels();
  530.             $mMonth $search->getMonths();
  531.             $mYear $search->getYears();
  532.         }
  533.         $mrByHotelByDay $managerReportDataRepository->findMRBy([
  534.             'HOUSE_USE_ROOMS',
  535. //            'FOOD_BEV_REVENUE',
  536. //            'ROOM_REVENUE',
  537. //            'OCC_PERC_WO_CHO',
  538. //            'OCC_MINUS_COMP_HU',
  539. //            'TOTAL_REVENUE',
  540.         ], 'DAY'$mHotelnull$mMonth$mYear);
  541.         return $this->render('analytics/daily.html.twig', [
  542.             'form' => $form->createView(),
  543.             'search' => $search,
  544.         ]);
  545.     }
  546.     #[Route('/otb_pu'name'app_otb_pu')]
  547.     public function otb_pu(Request $requestMarketStatisticsRepository $marketStatisticsRepository): Response
  548.     {
  549.         $currentDate = new \DateTime('-1 day');
  550.         $search = (new Search())
  551.             ->setDays($currentDate->format('d'))
  552.             ->setMonths($currentDate->format('m'))
  553.             ->setYears($currentDate->format('Y'));
  554.         $form $this->createForm(FilterType::class, $search);
  555.         $form->remove('days');
  556.         $form->handleRequest($request);
  557.         $mHotel null;
  558.         $mMonth $currentDate->format('m');
  559.         $mYear $currentDate->format('Y');
  560.         if ($form->isSubmitted() && $form->isValid()) {
  561.             $mHotel $search->getHotels();
  562.             $mMonth $search->getMonths();
  563.             $mYear $search->getYears();
  564.         }
  565.         $fsByDay $marketStatisticsRepository->findMSByDay($mHotelnull$mMonth$mYear);
  566.         $mrByMonth array_reduce($fsByDay, function ($h$data) {
  567.             $h[$data['createdAt']->format('d/m/Y')][$data['PARENT_MARKET_CODE']] = $data;
  568.             return $h;
  569.         }, []);
  570.         $val array_key_first($mrByMonth);
  571.         $labels $val array_reduce($mrByMonth[$val], function ($h$value) {
  572.             $h[] = $value['MARKET_GROUP_DESCRIPTION'];
  573.             return $h;
  574.         }, []) : [];
  575.         return $this->render('analytics/otb_pu.html.twig', [
  576.             'form' => $form->createView(),
  577.             'mr_by_month' => $mrByMonth,
  578.             'labels' => $labels,
  579.         ]);
  580.     }
  581.     #[Route('/daily_hotel_dashboard'name'app_daily_hotel_dashboard')]
  582.     public function daily_hotel_dashboard(Request $requestMarketStatisticsRepository $marketStatisticsRepository): Response
  583.     {
  584.         $currentDate = new \DateTime('-1 day');
  585.         $search = (new Search())
  586.             ->setDays($currentDate->format('d'))
  587.             ->setMonths($currentDate->format('m'))
  588.             ->setYears($currentDate->format('Y'));
  589.         $form $this->createForm(FilterType::class, $search);
  590.         $form->handleRequest($request);
  591.         $mHotel null;
  592.         $mMonth $currentDate->format('m');
  593.         $mDay $currentDate->format('d');
  594.         $mYear $currentDate->format('Y');
  595.         if ($form->isSubmitted() && $form->isValid()) {
  596.             $mHotel $search->getHotels();
  597.             $mMonth $search->getMonths();
  598.             $mDay $search->getDays();
  599.             $mYear $search->getYears();
  600.         }
  601.         $fsByDay $marketStatisticsRepository->findMSBy([
  602.             'PM_DAY_ROOM',// Direct Hotel
  603.             'WEB',
  604.             'IND',
  605.             'LEI',
  606. //            'LEI',//Corpo
  607.             'GCOR',
  608.             'GLSR',
  609.             'GRI',
  610.             'GRT',
  611.             'BCR',
  612.         ], $mHotel$mDay$mMonth$mYear);
  613.         $fsByDay array_reduce($fsByDay, function ($h$data) {
  614.             $h['PM_DAY_ROOM'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_ROOM']];
  615.             $h['PM_DAY_ARR'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_ARR']];
  616.             $h['PM_DAY_CREV'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_CREV']];
  617.             return $h;
  618.         }, []);
  619. //        dump($fsByDay);
  620. //        $fsByMonth = $marketStatisticsRepository->findMSBy([
  621. //            'PM_DAY_ROOM',
  622. //            'PM_DAY_PERSON',
  623. //            'PM_MONTH_ROOM',
  624. //            'PM_MONTH_PERSON',
  625. //            'PM_MONTH_PERSON',
  626. //            'PM_YEAR_ROOM',
  627. //            'PM_YEAR_PRS',
  628. //            'PM_DAY_CREV',
  629. //            'PM_MONTH_CREV',
  630. //            'PM_YEAR_CREV',
  631. //            'PM_YEAR_ARR',
  632. //            'PM_MONTH_ARR',
  633. //            'PM_DAY_ARR',
  634. //            'PM_DAY_PER_OCC',
  635. //            'PM_MTD_PER_OCC',
  636. //            'PM_YTD_PER_OCC',
  637. //        ], $mHotel, $mDay, $mMonth, $mYear);
  638. //        $fsByMonth = array_reduce($fsByMonth, function ($h, $data) {
  639. //            $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  640. //            return $h;
  641. //        }, []);
  642. //
  643. //        $fsByYear = $marketStatisticsRepository->findMSBy([
  644. //            'PM_DAY_ROOM',
  645. //            'PM_DAY_PERSON',
  646. //            'PM_MONTH_ROOM',
  647. //            'PM_MONTH_PERSON',
  648. //            'PM_MONTH_PERSON',
  649. //            'PM_YEAR_ROOM',
  650. //            'PM_YEAR_PRS',
  651. //            'PM_DAY_CREV',
  652. //            'PM_MONTH_CREV',
  653. //            'PM_YEAR_CREV',
  654. //            'PM_YEAR_ARR',
  655. //            'PM_MONTH_ARR',
  656. //            'PM_DAY_ARR',
  657. //            'PM_DAY_PER_OCC',
  658. //            'PM_MTD_PER_OCC',
  659. //            'PM_YTD_PER_OCC',
  660. //        ], $mHotel, $mDay, $mMonth, $mYear);
  661. //        $fsByYear = array_reduce($fsByYear, function ($h, $data) {
  662. //            $h[$data['SUB_GRP_1']][] = $data['SUM_AMOUNT'];
  663. //            return $h;
  664. //        }, []);
  665.         return $this->render('analytics/daily_hotel_dashboard.html.twig', [
  666.             'form' => $form->createView(),
  667.             'mr_by_day' => $fsByDay,
  668. //            'mr_by_month' => $fsByMonth,
  669. //            'mr_by_year'=> $fsByYear
  670.         ]);
  671.     }
  672.     #[Route('/ops_dashboard'name'app_ops_dashboard')]
  673.     public function ops_dashboard(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  674.     {
  675.         $currentDate = new \DateTime('-1 day');
  676.         $search = (new Search())
  677.             ->setDays($currentDate->format('d'))
  678.             ->setMonths($currentDate->format('m'))
  679.             ->setYears($currentDate->format('Y'));
  680.         $form $this->createForm(FilterType::class, $search);
  681.         $form->remove('days');
  682.         $form->handleRequest($request);
  683.         $mHotel null;
  684.         $mMonth $currentDate->format('m');
  685.         $mYear $currentDate->format('Y');
  686.         if ($form->isSubmitted() && $form->isValid()) {
  687.             $mHotel $search->getHotels();
  688.             $mMonth $search->getMonths();
  689.             $mYear $search->getYears();
  690.         }
  691.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  692.         $mrByMonth array_reduce($hf, function ($h$data) {
  693.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  694.             return $h;
  695.         }, []);
  696.         return $this->render('analytics/ops_dashboard.html.twig', [
  697.             'form' => $form->createView(),
  698.             'mr_by_month' => $mrByMonth,
  699.         ]);
  700.     }
  701.     #[Route('/pricing'name'app_pricing')]
  702.     public function pricing(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  703.     {
  704.         $currentDate = new \DateTime('-1 day');
  705.         $search = (new Search())
  706.             ->setDays($currentDate->format('d'))
  707.             ->setMonths($currentDate->format('m'))
  708.             ->setYears($currentDate->format('Y'));
  709.         $form $this->createForm(FilterType::class, $search);
  710.         $form->remove('days');
  711.         $form->handleRequest($request);
  712.         $mHotel null;
  713.         $mMonth $currentDate->format('m');
  714.         $mYear $currentDate->format('Y');
  715.         if ($form->isSubmitted() && $form->isValid()) {
  716.             $mHotel $search->getHotels();
  717.             $mMonth $search->getMonths();
  718.             $mYear $search->getYears();
  719.         }
  720.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  721.         $mrByMonth array_reduce($hf, function ($h$data) {
  722.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  723.             return $h;
  724.         }, []);
  725.         return $this->render('analytics/pricing.html.twig', [
  726.             'form' => $form->createView(),
  727.             'mr_by_month' => $mrByMonth,
  728.         ]);
  729.     }
  730.     #[Route('/day'name'app_day')]
  731.     public function day(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  732.     {
  733.         $currentDate = new \DateTime('-1 day');
  734.         $search = (new Search())
  735.             ->setDays($currentDate->format('d'))
  736.             ->setMonths($currentDate->format('m'))
  737.             ->setYears($currentDate->format('Y'));
  738.         $form $this->createForm(FilterType::class, $search);
  739.         $form->remove('days');
  740.         $form->handleRequest($request);
  741.         $mHotel null;
  742.         $mMonth $currentDate->format('m');
  743.         $mYear $currentDate->format('Y');
  744.         if ($form->isSubmitted() && $form->isValid()) {
  745.             $mHotel $search->getHotels();
  746.             $mMonth $search->getMonths();
  747.             $mYear $search->getYears();
  748.         }
  749.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  750.         $mrByMonth array_reduce($hf, function ($h$data) {
  751.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  752.             return $h;
  753.         }, []);
  754.         return $this->render('analytics/day.html.twig', [
  755.             'form' => $form->createView(),
  756.             'mr_by_month' => $mrByMonth,
  757.         ]);
  758.     }
  759.     #[Route('/overview'name'app_overview')]
  760.     public function overview(Request $requestHistoryForcastRepository $historyForcastRepositoryManagerReportDataRepository $managerReportDataRepository): Response
  761.     {
  762.         $currentDate = new \DateTime('-1 day');
  763.         $search = (new Search())
  764.             ->setDays($currentDate->format('d'))
  765.             ->setMonths($currentDate->format('m'))
  766.             ->setYears($currentDate->format('Y'));
  767.         $form $this->createForm(FilterType::class, $search);
  768.         $form->remove('days');
  769.         $form->handleRequest($request);
  770.         $mHotel null;
  771.         $mMonth $currentDate->format('m');
  772.         $mYear $currentDate->format('Y');
  773.         if ($form->isSubmitted() && $form->isValid()) {
  774.             $mHotel $search->getHotels();
  775.             $mMonth $search->getMonths();
  776.             $mYear $search->getYears();
  777.         }
  778.         $hf $historyForcastRepository->findHFBy($mHotel$mMonth$mYear);
  779.         $mrByMonth array_reduce($hf, function ($h$data) {
  780.             $h[$data['RESORT']][$data['CONSIDERED_DATE']->format('Y')][$data['CONSIDERED_DATE']->format('M')][$data['CONSIDERED_DATE']->format('jS')][$data['REC_TYPE']] = $data;
  781.             return $h;
  782.         }, []);
  783.         return $this->render('analytics/overview.html.twig', [
  784.             'form' => $form->createView(),
  785.             'mr_by_month' => $mrByMonth,
  786.         ]);
  787.     }
  788.     #[Route('/rooms_analysis'name'app_rooms_analysis')]
  789.     public function rooms_analysis(Request $requestMarketStatisticsRepository $marketStatisticsRepository): Response
  790.     {
  791.         $currentDate = new \DateTime('-1 day');
  792.         $search = (new Search())
  793.             ->setDays($currentDate->format('d'))
  794.             ->setMonths($currentDate->format('m'))
  795.             ->setYears($currentDate->format('Y'));
  796.         $form $this->createForm(FilterType::class, $search);
  797.         $form->remove('days');
  798.         $form->handleRequest($request);
  799.         $mHotel null;
  800.         $mMonth $currentDate->format('m');
  801.         $mYear $currentDate->format('Y');
  802.         if ($form->isSubmitted() && $form->isValid()) {
  803.             $mHotel $search->getHotels();
  804.             $mMonth $search->getMonths();
  805.             $mYear $search->getYears();
  806.         }
  807.         $fsByDay $marketStatisticsRepository->findMSByDay($mHotelnull$mMonth$mYear);
  808.         $mrByMonth array_reduce($fsByDay, function ($h$data) {
  809.             $h[$data['MARKET_GROUP_DESCRIPTION']][$data['createdAt']->format('d/m/Y')][] = $data;
  810.             return $h;
  811.         }, []);
  812.         $labels array_reduce($fsByDay, function ($h$value) {
  813.             $h[$value['createdAt']->format('m/d/Y')] = $value['createdAt']->format('d/m/Y');
  814.             return $h;
  815.         }, []);
  816.         return $this->render('analytics/rooms_analysis.html.twig', [
  817.             'form' => $form->createView(),
  818.             'mr_by_month' => $mrByMonth,
  819.             'labels' => array_unique($labels),
  820.         ]);
  821.     }
  822.     #[Route('/production'name'app_production')]
  823.     public function production(Request $requestFullStatsticAgenComRepository $fullStatsticAgenComRepository): Response
  824.     {
  825.         $currentDate = new \DateTime('-1 day');
  826.         $search = (new Search())
  827.             ->setDays($currentDate->format('d'))
  828.             ->setMonths($currentDate->format('m'))
  829.             ->setYears($currentDate->format('Y'));
  830.         $form $this->createForm(FilterType::class, $search);
  831.         $form->handleRequest($request);
  832.         $mHotel null;
  833.         $mMonth $currentDate->format('m');
  834.         $mDay $currentDate->format('d');
  835.         $mYear $currentDate->format('Y');
  836.         if ($form->isSubmitted() && $form->isValid()) {
  837.             $mHotel $search->getHotels();
  838.             $mMonth $search->getMonths();
  839.             $mDay $search->getDays();
  840.             $mYear $search->getYears();
  841.         }
  842.         $fsByDay $fullStatsticAgenComRepository->findMSBy([
  843.             'PM_DAY_ROOM',// Direct Hotel
  844.             'WEB',
  845.             'IND',
  846.             'LEI',
  847. //            'LEI',//Corpo
  848.             'GCOR',
  849.             'GLSR',
  850.             'GRI',
  851.             'GRT',
  852.             'BCR',
  853.         ], $mHotel$mDay$mMonth$mYear);
  854.         $fsByDay array_reduce($fsByDay, function ($h$data) {
  855.             $h['PM_DAY_ROOM'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_ROOM']];
  856.             $h['PM_DAY_ARR'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_ARR']];
  857.             $h['PM_DAY_CREV'][$data['PARENT_MARKET_CODE']] = ['MARKET_GROUP_DESCRIPTION' => $data['MARKET_GROUP_DESCRIPTION'], 'SUM_AMOUNT' => $data['PM_DAY_CREV']];
  858.             return $h;
  859.         }, []);
  860.         dump($fsByDay);
  861.         return $this->render('analytics/production.html.twig', [
  862.             'form' => $form->createView(),
  863.             'mr_by_day' => $fsByDay,
  864. //            'mr_by_month' => $fsByMonth,
  865. //            'mr_by_year'=> $fsByYear
  866.         ]);
  867.     }
  868. }