src/Controller/DashboardController.php line 33

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Reservation;
  4. use App\Service\GuestyConnector;
  5. use Doctrine\Persistence\ManagerRegistry;
  6. use Psr\Log\LoggerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class DashboardController extends AbstractController
  12. {
  13.     protected ManagerRegistry $doctrine;
  14.     protected Request $request;
  15.     protected LoggerInterface $logger;
  16.     private \Doctrine\Persistence\ObjectRepository $repository;
  17.     public function __construct(
  18.         GuestyConnector $guestyconnector,
  19.         ManagerRegistry $doctrine,
  20.         LoggerInterface $logger
  21.     ){
  22.         $this->doctrine $doctrine;
  23.         $this->logger $logger;
  24.         $this->repository$this->doctrine->getRepository(Reservation::class);
  25.     }
  26.     #[Route('/'name'app_home')]
  27.     public function index(): Response
  28.     {
  29.         $data $this->retreiveFromDb();
  30.         return $this->render('dashboard/index.html.twig', [
  31.             'controller_name' => 'DashboardController',
  32.             'data' => $data,
  33.         ]);
  34.     }
  35.     public function retreiveFromDb$type 'upcoming')
  36.     {
  37.         $repository $this->doctrine->getRepository(Reservation::class);
  38.         $now = new \DateTime();
  39.         $lastMonth = new \DateTime('-1 month');
  40.         $last2Months = new \DateTime('-1 month');
  41.         
  42.         /*case 'invoicing_today':
  43.                 $result = $this->repository->getInvoicingToday();
  44.                 break;
  45.             case 'pending':
  46.                 // pending
  47.                 $result = $this->repository->getPending();
  48.                 break;
  49.             case 'pending2':
  50.                 // pending
  51.                 $result = $this->repository->getByFlow('pending');
  52.                 break;
  53.             case 'upcoming2':
  54.                 // pending
  55.                 $result = $this->repository->getByFlow('upcoming');
  56.                 break;
  57.             case 'past':
  58.                 $result =  $this->repository->getPast();
  59.                 break;
  60.             case 'currentmonth':
  61.                 $result =   $this->repository->getCurrentMonth();
  62.                 break;*/
  63.         $data=[
  64.             'pending'=> $this->repository->getByFlow('pending'),
  65.             'needsaddress'=>   $this->repository->getNeedsAddress(),
  66.              'past'=> $this->doctrine->getManager()
  67.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.checkout < CURRENT_DATE() and e.status != :status_canceled  and e.status!=:status_inquiry  and e.status_invoice is NULL ORDER BY e.checkout DESC')
  68.                     ->setParameter('status_canceled',"canceled"  )
  69.                     ->setParameter('status_inquiry',"inquiry"  )
  70.                     ->getResult(),
  71.              'currentmonth'=> $this->doctrine->getManager()
  72.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE YEAR(e.checkout) = :year AND MONTH(e.checkout) = MONTH(:date) and e.status != :status_canceled  and e.status!=:status_inquiry')
  73.                     ->setParameter('year'$now->format("Y") )
  74.                     ->setParameter('date'$now)
  75.                     ->setParameter('status_canceled',"canceled"  )
  76.                     ->setParameter('status_inquiry',"inquiry"  )
  77.                     ->getResult(),
  78.              'lastmonth'=>  $this->doctrine->getManager()
  79.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE YEAR(e.checkout) = :year AND MONTH(e.checkout) = MONTH(:date) and e.status != :status_canceled  and e.status!=:status_inquiry')
  80.                     ->setParameter('year'$lastMonth->format("Y") )
  81.                     ->setParameter('date'$lastMonth)
  82.                     ->setParameter('status_canceled',"canceled"  )
  83.                     ->setParameter('status_inquiry',"inquiry"  )
  84.                     ->getResult(),
  85.              'last2months'=>  $this->doctrine->getManager()
  86.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE YEAR(e.checkout) = :year AND (MONTH(e.checkout) = MONTH(:date)  OR  MONTH(e.checkout) = MONTH(:date2) ) and e.status != :status_canceled  and e.status!=:status_inquiry' )
  87.                     ->setParameter('year'$last2Months->format("Y") )
  88.                     ->setParameter('date'$lastMonth)
  89.                     ->setParameter('date2'$last2Months)
  90.                     ->setParameter('status_canceled',"canceled"  )
  91.                     ->setParameter('status_inquiry',"inquiry"  )
  92.                     ->getResult(),
  93.              'invoiced'=>  $this->doctrine->getManager()
  94.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status_invoice=1 and e.status!=:status_inquiry ORDER BY e.checkin ASC')
  95.                     ->setParameter('status_inquiry',"inquiry"  )
  96.                     ->getResult(),
  97.              'canceled'=>  $this->doctrine->getManager()
  98.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status= :status_canceled  or e.status=:status_inquiry ORDER BY e.checkin ASC')
  99.                     ->setParameter('status_canceled',"canceled"  )
  100.                     ->setParameter('status_inquiry',"inquiry"  )
  101.                     ->getResult(),
  102.             'invoicing_today' => $this->repository->getInvoicingToday()
  103.         ];
  104.              $data['all'] =$repository->findAll();
  105.              $data['upcoming']=$this->doctrine->getManager()
  106.                  ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE e.checkin > CURRENT_DATE() and e.status != :status_canceled  and e.status!=:status_inquiry ORDER BY e.checkin ASC ')
  107.                  ->setParameter('status_canceled',"canceled"  )
  108.                  ->setParameter('status_inquiry',"inquiry"  )
  109.                  ->getResult();
  110.             $checkoutFrom='01-05-2025';
  111.             $checkoutFrom= new \DateTime($checkoutFrom);
  112.              $invoiced $this->doctrine->getManager()
  113.                  ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.checkout >= :checkout1 and e.status!=:status_inquiry  and e.status_invoice=1 ORDER BY e.checkin ASC')
  114.                  ->setParameter('checkout1',$checkoutFrom)
  115.                  ->setParameter('status_inquiry'"inquiry")
  116.                  ->getResult();
  117.              $autoinvoiced $this->doctrine->getManager()
  118.                  ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status_invoice=1 and e.auto_invoiced=1 ORDER BY e.checkin ASC')
  119.                  ->getResult();
  120.               $data['autoinvoiced']=[
  121.                 'autoinvoiced' => count($autoinvoiced),
  122.                 'invoiced' => count($invoiced),
  123.                 'percent' => count($autoinvoiced)/count($invoiced) * 100,
  124.               ];
  125.         return $data;
  126.     }
  127. }