src/Controller/DashboardController.php line 23

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Order;
  4. use App\Entity\SupportTicket;
  5. use App\Entity\User;
  6. use App\Repository\OrderRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. class DashboardController extends AbstractController
  13. {
  14.     #[Route('/test'name'app_home')]
  15.     public function home(): Response
  16.     {
  17.         return $this->redirectToRoute('app_dashboard');
  18.     }
  19.     #[Route('/app'name'app_dashboard')]
  20.     public function index(EntityManagerInterface $entityManager): Response
  21.     {
  22.         $todayCount $entityManager->getRepository(Order::class)->getOrderCount('today'$this->getUser());
  23.         $yesterdayCount $entityManager->getRepository(Order::class)->getOrderCount('yesterday'$this->getUser());
  24.         $allByYesterday $entityManager->getRepository(Order::class)->getOrderCount('all_by_yesterday'$this->getUser());
  25.         $allByToday $entityManager->getRepository(Order::class)->getOrderCount('all_by_today'$this->getUser());
  26.         $today = new \DateTime('today');
  27.         $today->setTime(0,0);
  28.         $sevenDayBefore = new \DateTime('today');
  29.         $sevenDayBefore->modify('-7 days');
  30.         $sevenDayBefore->setTime(0,0);
  31.         $lastSevenDays $entityManager->getRepository(Order::class)->getOrderCountPerDayForCurrentWeek($this->getUser(), $today$sevenDayBefore);
  32.         $lastSevenDaysOrdersTotal array_reduce($lastSevenDays, function($carry$item) {
  33.             return $carry $item['count'];
  34.         }, 0);
  35.         $lastSevenDaysOrders['data'] = array_map(function($item) {
  36.             return $item['count'];
  37.         }, $lastSevenDays);
  38.         // Extract the 'createdAt' values
  39.         $lastSevenDaysOrders['categories'] = array_map(function($item) {
  40.             return $item['createdDate'];
  41.         }, $lastSevenDays);
  42.         $lasttoLastSevenDaysBefore = new \DateTime('today');
  43.         $lasttoLastSevenDaysBefore->modify('-14 days');
  44.         $lasttoLastSevenDaysBefore->setTime(0,0);
  45.         $lasttoLastSevenDays $entityManager->getRepository(Order::class)
  46.                                 ->getOrderCountPerDayForCurrentWeek($this->getUser(), $sevenDayBefore$lasttoLastSevenDaysBefore);
  47.         $lasttoLastSevenDaysOrdersTotal array_reduce($lasttoLastSevenDays, function($carry$item) {
  48.             return $carry $item['count'];
  49.         }, 0);
  50.         $lastSevenDaysPercentage $this->getPercentage($lasttoLastSevenDaysOrdersTotal,$lastSevenDaysOrdersTotal);
  51.         $currentMonth = new \DateTime('first day of last month');
  52.         $currentMonth->setTime(0,0);
  53.         $currentMonthOrders $entityManager->getRepository(Order::class)->getOrderCountPerDayForCurrentMonth($this->getUser(), $today$currentMonth);
  54.         $currentMonthOrdersTotal array_reduce($currentMonthOrders, function($carry$item) {
  55.             return $carry $item['count'];
  56.         }, 0);
  57.         $currentMonthOrdersData['data'] = array_map(function($item) {
  58.             return $item['count'];
  59.         }, $currentMonthOrders);
  60.         $currentMonthOrdersData['categories'] = array_map(function($item) {
  61.             return $item['createdWeek'];
  62.         }, $currentMonthOrders);
  63.         $lastMonth = new \DateTime('first day of last month');
  64.         $lastMonth->setTime(0,0);
  65.         $lastMonthOrders $entityManager->getRepository(Order::class)->getOrderCountPerDayForCurrentMonth($this->getUser(), $currentMonth$lastMonth);
  66.         $lastMonthOrdersTotal array_reduce($lastMonthOrders, function($carry$item) {
  67.             return $carry $item['count'];
  68.         }, 0);
  69.         $currentMonthPercentage $this->getPercentage($currentMonthOrdersTotal,$lastMonthOrdersTotal);
  70. //        $lastMonthOrdersData['data'] = array_map(function($item) {
  71. //            return $item['count'];
  72. //        }, $lastMonthOrders);
  73. //
  74. //        $lastMonthOrdersData['categories'] = array_map(function($item) {
  75. //            return $item['createdDate'];
  76. //        }, $lastMonthOrders);
  77. //        $lasttoLastSevenDays['data'] = array_map(function($item) {
  78. //            return $item['count'];
  79. //        }, $lastSevenDays);
  80. //
  81. //        // Extract the 'createdAt' values
  82. //        $lastSevenDaysOrders['categories'] = array_map(function($item) {
  83. //            return $item['createdDate'];
  84. //        }, $lastSevenDays);
  85.         $todayCountData $this->getPercentage($yesterdayCount,$todayCount);
  86.         $totalCountData $this->getPercentage($allByYesterday,$allByToday);
  87.         $supportTicketData $entityManager->getRepository(SupportTicket::class)->findBy( [
  88.             'status' => 'open',
  89.             'customer' => $this->getUser()
  90.         ],['id'=>'DESC'],5,0);
  91.         $orderData $entityManager->getRepository(Order::class)->findBy(['customer' => $this->getUser()], ['id'=>'DESC'],5,0);
  92.         //dd($totalCountData);
  93.         //$balance = $entityManager->getRepository(Wa)
  94.         $chartData = [
  95. //            'latestOrders' => [
  96. //                'data' => [3844, 3855, 3841, 3867, 3822, 3843, 3821, 3841, 3856, 3827, 3843],
  97. //                'categories' => ["Jan 01 2022", "Jan 02 2022", "Jan 03 2022", "Jan 04 2022", "Jan 05 2022", "Jan 06 2022", "Jan 07 2022", "Jan 08 2022", "Jan 09 2022", "Jan 10 2022", "Jan 11 2022",]
  98. //            ],
  99.              'latestOrders' => $lastSevenDaysOrders,
  100.              'currentMonthOrders' => $currentMonthOrdersData
  101.         ];
  102.         return $this->render('dashboard/index.html.twig', [
  103.             'lastSevenDaysOrdersTotal' => $lastSevenDaysOrdersTotal,
  104.             'lastSevenDaysPercentage' => $lastSevenDaysPercentage,
  105.             'currentMonthOrderTotal' => $currentMonthOrdersTotal,
  106.             'currentMonthPercentage' => $currentMonthPercentage,
  107.             'todayCountData' => $todayCountData,
  108.             'totalCountData' => $totalCountData,
  109.             'supportTicketData' => $supportTicketData,
  110.             'orderData' => $orderData,
  111.             'chartData' => $chartData
  112.         ]);
  113.     }
  114.     public function getPercentage(int $baseValueint $secondValue): array
  115.     {
  116. //        echo $baseValue;
  117. //        echo $secondValue;
  118. //        exit;
  119.         $data = [];
  120.         if ($secondValue $baseValue){
  121.             $data['orderTextStyle'] = 'text-success';
  122.             $data['orderArrowStyle'] = 'arrow-up';
  123.         }else if ($baseValue $secondValue){
  124.             $data['orderTextStyle'] = 'text-danger';
  125.             $data['orderArrowStyle'] = 'arrow-down';
  126.         }else{
  127.             $data['orderTextStyle'] = 'text-info';
  128.             $data['orderArrowStyle'] = '';
  129.         }
  130.         $data['todayCount'] = $secondValue;
  131.         $data['yesterdayCount'] = $baseValue;
  132.         $onePercentage $baseValue/100;
  133.         $difference $secondValue $baseValue;
  134.         $percentage $onePercentage $difference/$onePercentage 0;
  135.         $data['dataPercentage'] = number_format($percentage,2);
  136.         return $data;
  137.     }
  138. }