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.         return $this->redirectToRoute('invoicing_index');
  30.     }
  31.     public function retreiveFromDb( $type = 'upcoming')
  32.     {
  33.         $repository = $this->doctrine->getRepository(Reservation::class);
  34.         $now = new \DateTime();
  35.         $lastMonth = new \DateTime('-1 month');
  36.         $last2Months = new \DateTime('-1 month');
  37.         
  38.         /*case 'invoicing_today':
  39.                 $result = $this->repository->getInvoicingToday();
  40.                 break;
  41.             case 'pending':
  42.                 // pending
  43.                 $result = $this->repository->getPending();
  44.                 break;
  45.             case 'pending2':
  46.                 // pending
  47.                 $result = $this->repository->getByFlow('pending');
  48.                 break;
  49.             case 'upcoming2':
  50.                 // pending
  51.                 $result = $this->repository->getByFlow('upcoming');
  52.                 break;
  53.             case 'past':
  54.                 $result =  $this->repository->getPast();
  55.                 break;
  56.             case 'currentmonth':
  57.                 $result =   $this->repository->getCurrentMonth();
  58.                 break;*/
  59.         $data=[
  60.             'pending'=> $this->repository->getByFlow('pending'),
  61.             'needsaddress'=>   $this->repository->getNeedsAddress(),
  62.              'past'=> $this->doctrine->getManager()
  63.                     ->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')
  64.                     ->setParameter('status_canceled',"canceled"  )
  65.                     ->setParameter('status_inquiry',"inquiry"  )
  66.                     ->getResult(),
  67.              'currentmonth'=> $this->doctrine->getManager()
  68.                     ->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')
  69.                     ->setParameter('year', $now->format("Y") )
  70.                     ->setParameter('date', $now)
  71.                     ->setParameter('status_canceled',"canceled"  )
  72.                     ->setParameter('status_inquiry',"inquiry"  )
  73.                     ->getResult(),
  74.              'lastmonth'=>  $this->doctrine->getManager()
  75.                     ->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')
  76.                     ->setParameter('year', $lastMonth->format("Y") )
  77.                     ->setParameter('date', $lastMonth)
  78.                     ->setParameter('status_canceled',"canceled"  )
  79.                     ->setParameter('status_inquiry',"inquiry"  )
  80.                     ->getResult(),
  81.              'last2months'=>  $this->doctrine->getManager()
  82.                     ->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' )
  83.                     ->setParameter('year', $last2Months->format("Y") )
  84.                     ->setParameter('date', $lastMonth)
  85.                     ->setParameter('date2', $last2Months)
  86.                     ->setParameter('status_canceled',"canceled"  )
  87.                     ->setParameter('status_inquiry',"inquiry"  )
  88.                     ->getResult(),
  89.              'invoiced'=>  $this->doctrine->getManager()
  90.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status_invoice=1 and e.status!=:status_inquiry ORDER BY e.checkin ASC')
  91.                     ->setParameter('status_inquiry',"inquiry"  )
  92.                     ->getResult(),
  93.              'canceled'=>  $this->doctrine->getManager()
  94.                     ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status= :status_canceled  or e.status=:status_inquiry ORDER BY e.checkin ASC')
  95.                     ->setParameter('status_canceled',"canceled"  )
  96.                     ->setParameter('status_inquiry',"inquiry"  )
  97.                     ->getResult(),
  98.             'invoicing_today' => $this->repository->getInvoicingToday()
  99.         ];
  100.              $data['all'] =$repository->findAll();
  101.              $data['upcoming']=$this->doctrine->getManager()
  102.                  ->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 ')
  103.                  ->setParameter('status_canceled',"canceled"  )
  104.                  ->setParameter('status_inquiry',"inquiry"  )
  105.                  ->getResult();
  106.             $checkoutFrom='01-05-2025';
  107.             $checkoutFrom= new \DateTime($checkoutFrom);
  108.              $invoiced = $this->doctrine->getManager()
  109.                  ->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')
  110.                  ->setParameter('checkout1',$checkoutFrom)
  111.                  ->setParameter('status_inquiry', "inquiry")
  112.                  ->getResult();
  113.              $autoinvoiced = $this->doctrine->getManager()
  114.                  ->createQuery('SELECT e FROM App\Entity\Reservation e WHERE  e.status_invoice=1 and e.auto_invoiced=1 ORDER BY e.checkin ASC')
  115.                  ->getResult();
  116.               $data['autoinvoiced']=[
  117.                 'autoinvoiced' => count($autoinvoiced),
  118.                 'invoiced' => count($invoiced),
  119.                 'percent' => count($autoinvoiced)/count($invoiced) * 100,
  120.               ];
  121.         return $data;
  122.     }
  123. }