src/Controller/DefaultController.php line 51

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Ticket;
  4. use App\Entity\TransactionLog;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use App\Service\TicketOneService;
  9. use DateTime;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Doctrine\ORM\Mapping\Id;
  12. use PhpParser\Node\Expr\New_;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use App\Repository\TransactionLogRepository;
  15. use Doctrine\ORM\EntityManager;
  16. use App\Service\TicketServiceFactoryInterface;
  17. use Sonata\AdminBundle\Admin\Pool;
  18. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  19. use Symfony\Component\Form\FormFactoryInterface;
  20. use Symfony\Component\Form\Extension\Core\Type\DateType;
  21. class DefaultController extends AbstractController
  22. {
  23.     
  24.     private TicketServiceFactoryInterface $ticketServiceFactory;
  25.        /**
  26.      * @var EntityManagerInterface
  27.      */     
  28.     private $em;
  29.     private $adminPool;
  30.     private $csrfTokenManager;
  31.     private $formFactory;
  32.     public function __construct(EntityManagerInterface $emTicketServiceFactoryInterface $ticketServiceFactoryPool $adminPoolCsrfTokenManagerInterface $csrfTokenManagerFormFactoryInterface $formFactory) {
  33.         $this->em $em;
  34.         $this->adminPool $adminPool;
  35.         $this->csrfTokenManager $csrfTokenManager;
  36.         $this->formFactory $formFactory;
  37.         $this->ticketServiceFactory $ticketServiceFactory;
  38.     }   
  39.     #[Route('/'name'home')]
  40.     public function home(): Response
  41.     {            
  42.         return $this->redirectToRoute('sonata_admin_dashboard');
  43.  
  44.     }
  45.     #[Route('/admin/default/revenues',name:'admin_default_revenueChart')]
  46.     public function revenueChart(Request $request): Response{
  47.         
  48.         $startDate date('Y-m-d H:i:s',strtotime('-6 day'));
  49.         $endDate date('Y-m-d H:i:s',strtotime('+1 day'));
  50.         $filters $request->query->all();
  51.         $orderDate $filters['filter']['orderDate'] ?? null;
  52.         if (!is_null($orderDate)){
  53.             $startDate $orderDate['value']['start'];
  54.             $endDate $orderDate['value']['end'];
  55.         }
  56.         $dateFilter = ['start' => $startDate'end' => $endDate];
  57.         $ticketRepository $this->em->getRepository(Ticket::class);
  58.         $ticketDaylyRevenues $ticketRepository->currentYearRevenueTrendByDay($dateFilter);
  59.         $vDaysShortTranslated = ['Mon'=>'Lun','Tue'=>'Mar','Wed'=>'Mer','Thu'=>'Gio','Fri'=>'Ven','Sat'=>'Sab','Sun'=>'Dom'];
  60.         foreach ($ticketDaylyRevenues as $date => $ticket){
  61.             $datetime = new \DateTime($date);
  62.             $dayName $datetime->format('D');
  63.             $dayNumber $datetime->format('d');
  64.             $month $datetime->format('m');
  65.             $labelName $vDaysShortTranslated[$dayName] . ' ' $dayNumber '/' $month;
  66.             $labels[] = $labelName;
  67.             $revenues[]=$ticket;
  68.         }
  69.         $chartData = [
  70.             'labels' => $labels,
  71.             'datasets' => [
  72.                 [
  73.                     'label' => 'incassi',
  74.                     'backgroundColor' => 'rgba(75, 192, 192, 0.2)',
  75.                     'borderColor' => 'rgba(0, 65, 210, 1)',
  76.                     'borderWidth' => 1,
  77.                     'data' => $revenues,
  78.                 ]
  79.             ]
  80.         ];
  81.         return $this->render('admin/default/revenue_chart.html.twig',[
  82.             'chartData'=>$chartData,
  83.             'startDate'=>$startDate,
  84.             'endDate'=>$endDate
  85.         ]);
  86.     }
  87.     #[Route('/admin/current_year_issues'name'current_year_issues')]
  88.     public function currentYearIssues(Request $request): Response
  89.     {
  90.         $startDate date('Y') . '-01-01';
  91.         $endDate date('Y-m-d');
  92.         
  93.         $filters $request->query->all();
  94.         $orderDate $filters['filter']['orderDate'] ?? null;
  95.         if (!is_null($orderDate)){
  96.             $startDate $orderDate['value']['start'];
  97.             $endDate $orderDate['value']['end'];
  98.         }
  99.         $filterDate = ['start' => $startDate'end' => $endDate];
  100.         
  101.         $ticketRepository $this->em->getRepository(Ticket::class);
  102.         $ticketIssues $ticketRepository->countTicketsGroupedByDay($filterDate);
  103.         
  104.         $vDaysShortTranslated = ['Mon'=>'Lun','Tue'=>'Mar','Wed'=>'Mer','Thu'=>'Gio','Fri'=>'Ven','Sat'=>'Sab','Sun'=>'Dom'];
  105.         foreach ($ticketIssues as $date => $ticket){
  106.             $datetime = new \DateTime($date);
  107.             $dayName $datetime->format('D');
  108.             $dayNumber $datetime->format('d');
  109.             $month $datetime->format('m');
  110.             $labelName $vDaysShortTranslated[$dayName] . ' ' $dayNumber '/' $month;
  111.             $labels[] = $labelName;
  112.         }
  113.         
  114.         return $this->render('/admin/default/current_year_issues.html.twig', [
  115.             'labels' => $labels,
  116.             'ticketIssues' => $ticketIssues,
  117.             'startDate' => $startDate,
  118.             'endDate' => $endDate,
  119.         ]);
  120.     }
  121.     #[Route('/admin/museum_sold_tickets'name'museum_sold_tickets')]
  122.     public function museumSoldTickets(Request $request): Response
  123.     {
  124.         $startDate date('Y') . '-01-01';
  125.         $endDate date('Y-m-d');
  126.         
  127.         $filters $request->query->all();
  128.         $orderDate $filters['filter']['orderDate'] ?? null;
  129.         if (!is_null($orderDate)){
  130.             $startDate $orderDate['value']['start'];
  131.             $endDate $orderDate['value']['end'];
  132.         }
  133.         $filterDate = ['start' => $startDate'end' => $endDate];
  134.         
  135.         $ticketRepository $this->em->getRepository(Ticket::class);
  136.         $museumSoldTickets $ticketRepository->museumBySoldTickets('sold_tickets',$filterDate);
  137.         $soldTickets $this->extractInfo($museumSoldTickets,'sold_tickets');
  138.         $labels $this->extractInfo($museumSoldTickets,'eventPlace');
  139.         $colors array_map([$this'generateColor'], $labels);
  140.         
  141.         return $this->render('/admin/default/museum_sold_tickets.html.twig', [
  142.             'soldTickets' => $soldTickets,
  143.             'labels' => $labels,
  144.             'colors' => $colors,
  145.             'startDate' => $startDate,
  146.             'endDate' => $endDate,
  147.         ]);
  148.     }
  149.     #[Route('/admin/museum_ticket_revenue'name'museum_ticket_revenue')]
  150.     public function museumTicketRevenue(Request $request): Response
  151.     {
  152.         $startDate date('Y') . '-01-01';
  153.         $endDate date('Y-m-d');
  154.         
  155.         $filters $request->query->all();
  156.         $orderDate $filters['filter']['orderDate'] ?? null;
  157.         if (!is_null($orderDate)){
  158.             $startDate $orderDate['value']['start'];
  159.             $endDate $orderDate['value']['end'];
  160.         }
  161.         $filterDate = ['start' => $startDate'end' => $endDate];
  162.         
  163.         $ticketRepository $this->em->getRepository(Ticket::class);
  164.         $museumTicketRevenue $ticketRepository->museumBySoldTickets('ticket_revenue',$filterDate);
  165.         $ticketRevenue $this->extractInfo($museumTicketRevenue,'ticket_revenue');
  166.         $labels $this->extractInfo($museumTicketRevenue,'eventPlace');
  167.         $colors array_map([$this'generateColor'], $labels);
  168.         
  169.         return $this->render('/admin/default/museum_ticket_revenue.html.twig', [
  170.             'ticketRevenue' => $ticketRevenue,
  171.             'labels' => $labels,
  172.             'colors' => $colors,
  173.             'startDate' => $startDate,
  174.             'endDate' => $endDate,
  175.         ]);
  176.     }
  177.     
  178.     private function extractInfo($array,$info)
  179.     {
  180.         return array_map(function($subArray) use ($info) {
  181.             return $info == 'eventPlace' && is_null($subArray[$info])
  182.                 ? 'Non specificato'
  183.                 $subArray[$info];
  184.         }, $array);
  185.     }
  186.     private function generateColor($input)
  187.     {
  188.         return '#' substr(md5($input), 06);
  189.     }
  190. }