src/Controller/App/DashboardController.php line 40

  1. <?php
  2. namespace App\Controller\App;
  3. use App\Service\BlogService;
  4. use DateTime;
  5. use App\Entity\Task;
  6. use App\Entity\Child;
  7. use App\Entity\Classroom;
  8. use App\Entity\enums\ClassroomStatus;
  9. use App\Entity\Employee;
  10. use App\Entity\Prechild;
  11. use App\Entity\Evenement;
  12. use App\Entity\enums\EventCategory;
  13. use App\Entity\Subscription;
  14. use App\Entity\enums\SubscriptionStatus;
  15. use App\Entity\enums\TaskStatus;
  16. use App\Repository\ChildRepository;
  17. use App\Repository\EmployeeRepository;
  18. use App\Repository\EvenementRepository;
  19. use App\Repository\PrechildRepository;
  20. use Doctrine\ORM\EntityManagerInterface;
  21. use App\Repository\SubscriptionRepository;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. use Symfony\Contracts\Translation\TranslatorInterface;
  25. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  26. use Symfony\Contracts\EventDispatcher\Event;
  27. #[Route('/app')]
  28. class DashboardController extends AbstractController
  29. {
  30.     private BlogService $blogService;
  31.     public function __construct(private TranslatorInterface $translatorBlogService $blogService)
  32.     {
  33.         $this->blogService $blogService;
  34.     }
  35.     #[Route('/dashboard'name'app_main')]
  36.     public function main(EntityManagerInterface $manager): Response
  37.     {
  38.         /** @var $user App\Entity\User */
  39.         $user $this->getUser();
  40.         $company $user->getCompany();
  41.         if (!$company) {
  42.             return $this->redirectToRoute('app_company_new_company', [], Response::HTTP_SEE_OTHER);
  43.         }
  44.         // $articles = $manager->getRepository(Article::class)->findBy([], [], 6);
  45.         $articles $this->blogService->getPosts();
  46.         $tasks $manager->getRepository(Task::class)->findBy([], [], 15); //->findToday();
  47.         $events $manager->getRepository(Evenement::class)->findBy([], [], 15); //->findAll();
  48.         $subscriptions $manager->getRepository(Subscription::class)->findBy(['status' => SubscriptionStatus::CONFIRMED]);
  49.         $expired_subscriptions = [];
  50.         $unpaied_subscriptions = [];
  51.         foreach ($subscriptions as $subscription) {
  52.             if (!$subscription->isPaied()) {
  53.                 array_push($unpaied_subscriptions$subscription);
  54.             }
  55.             if ($subscription->isExpired()) {
  56.                 array_push($expired_subscriptions$subscription);
  57.             }
  58.         }
  59.         return $this->render('app/dashboard/home.html.twig', [
  60.             'controller_name' => 'Main page',
  61.             'articles' => $articles,
  62.             'children_count' => $manager->getRepository(Child::class)->count([]),
  63.             'employees_count' => $manager->getRepository(Employee::class)->count([]),
  64.             'prechildren_count' => $manager->getRepository(Prechild::class)->count([]),
  65.             'subscriptions_count' => $manager->getRepository(Subscription::class)->count([]),
  66.             'classrooms_count' => $manager->getRepository(Classroom::class)->count([]),
  67.             'tasks' => $tasks,
  68.             'tasks_count' => $manager->getRepository(Task::class)->count([]),
  69.             'events' => $events,
  70.             'events_count' => $manager->getRepository(Evenement::class)->count([]),
  71.             'expired_subscriptions' => $expired_subscriptions,
  72.             'unpaied_subscriptions' => $unpaied_subscriptions
  73.         ]);
  74.     }
  75.     #[Route('/dashboard/chart_one'name'app_chart_one')]
  76.     public function chart_one(ChildRepository $childRepo)
  77.     {
  78.         $thisYear date("Y");
  79.         $thisMonth date("m");
  80.         $lastMonth date("m"strtotime("-1 month"));
  81.         $result = [
  82.             'data' => [
  83.                 ['y' => count($childRepo->findByDate($thisYear'01')), 'x' => (new DateTime($thisYear '-01'))->format('M-Y')],
  84.                 ['y' => count($childRepo->findByDate($thisYear'02')), 'x' => (new DateTime($thisYear '-02'))->format('M-Y')],
  85.                 ['y' => count($childRepo->findByDate($thisYear'03')), 'x' => (new DateTime($thisYear '-03'))->format('M-Y')],
  86.                 ['y' => count($childRepo->findByDate($thisYear'04')), 'x' => (new DateTime($thisYear '-04'))->format('M-Y')],
  87.                 ['y' => count($childRepo->findByDate($thisYear'05')), 'x' => (new DateTime($thisYear '-05'))->format('M-Y')],
  88.                 ['y' => count($childRepo->findByDate($thisYear'06')), 'x' => (new DateTime($thisYear '-06'))->format('M-Y')],
  89.                 ['y' => count($childRepo->findByDate($thisYear'07')), 'x' => (new DateTime($thisYear '-07'))->format('M-Y')],
  90.                 ['y' => count($childRepo->findByDate($thisYear'08')), 'x' => (new DateTime($thisYear '-08'))->format('M-Y')],
  91.                 ['y' => count($childRepo->findByDate($thisYear'09')), 'x' => (new DateTime($thisYear '-09'))->format('M-Y')],
  92.                 ['y' => count($childRepo->findByDate($thisYear'10')), 'x' => (new DateTime($thisYear '-10'))->format('M-Y')],
  93.                 ['y' => count($childRepo->findByDate($thisYear'11')), 'x' => (new DateTime($thisYear '-11'))->format('M-Y')],
  94.                 ['y' => count($childRepo->findByDate($thisYear'12')), 'x' => (new DateTime($thisYear '-12'))->format('M-Y')],
  95.             ],
  96.             'ratio' => intval(count($childRepo->findByDate($thisYear$thisMonth)) - count($childRepo->findByDate($thisYear$lastMonth)))
  97.         ];
  98.         return $this->json($result);
  99.     }
  100.     #[Route('/dashboard/chart_two'name'app_chart_two')]
  101.     public function chart_two(PrechildRepository $prechildRepo)
  102.     {
  103.         $thisYear date("Y");
  104.         $thisMonth date("m");
  105.         $lastMonth date("m"strtotime("-1 month"));
  106.         $result = [
  107.             'data' => [
  108.                 ['y' => count($prechildRepo->findByDate($thisYear'01')), 'x' => (new DateTime($thisYear '-01'))->format('M-Y')],
  109.                 ['y' => count($prechildRepo->findByDate($thisYear'02')), 'x' => (new DateTime($thisYear '-02'))->format('M-Y')],
  110.                 ['y' => count($prechildRepo->findByDate($thisYear'03')), 'x' => (new DateTime($thisYear '-03'))->format('M-Y')],
  111.                 ['y' => count($prechildRepo->findByDate($thisYear'04')), 'x' => (new DateTime($thisYear '-04'))->format('M-Y')],
  112.                 ['y' => count($prechildRepo->findByDate($thisYear'05')), 'x' => (new DateTime($thisYear '-05'))->format('M-Y')],
  113.                 ['y' => count($prechildRepo->findByDate($thisYear'06')), 'x' => (new DateTime($thisYear '-06'))->format('M-Y')],
  114.                 ['y' => count($prechildRepo->findByDate($thisYear'07')), 'x' => (new DateTime($thisYear '-07'))->format('M-Y')],
  115.                 ['y' => count($prechildRepo->findByDate($thisYear'08')), 'x' => (new DateTime($thisYear '-08'))->format('M-Y')],
  116.                 ['y' => count($prechildRepo->findByDate($thisYear'09')), 'x' => (new DateTime($thisYear '-09'))->format('M-Y')],
  117.                 ['y' => count($prechildRepo->findByDate($thisYear'10')), 'x' => (new DateTime($thisYear '-10'))->format('M-Y')],
  118.                 ['y' => count($prechildRepo->findByDate($thisYear'11')), 'x' => (new DateTime($thisYear '-11'))->format('M-Y')],
  119.                 ['y' => count($prechildRepo->findByDate($thisYear'12')), 'x' => (new DateTime($thisYear '-12'))->format('M-Y')],
  120.             ],
  121.             'ratio' => intval(count($prechildRepo->findByDate($thisYear$thisMonth)) - count($prechildRepo->findByDate($thisYear$lastMonth)))
  122.         ];
  123.         return $this->json($result);
  124.     }
  125.     #[Route('/dashboard/chart_three'name'app_chart_three')]
  126.     public function chart_three(SubscriptionRepository $subscriptionRepo)
  127.     {
  128.         $thisYear date("Y");
  129.         $thisMonth date("m");
  130.         $lastMonth date("m"strtotime("-1 month"));
  131.         $result = [
  132.             'data' => [
  133.                 ['y' => count($subscriptionRepo->findByDate($thisYear'01')), 'x' => (new DateTime($thisYear '-01'))->format('M-Y')],
  134.                 ['y' => count($subscriptionRepo->findByDate($thisYear'02')), 'x' => (new DateTime($thisYear '-02'))->format('M-Y')],
  135.                 ['y' => count($subscriptionRepo->findByDate($thisYear'03')), 'x' => (new DateTime($thisYear '-03'))->format('M-Y')],
  136.                 ['y' => count($subscriptionRepo->findByDate($thisYear'04')), 'x' => (new DateTime($thisYear '-04'))->format('M-Y')],
  137.                 ['y' => count($subscriptionRepo->findByDate($thisYear'05')), 'x' => (new DateTime($thisYear '-05'))->format('M-Y')],
  138.                 ['y' => count($subscriptionRepo->findByDate($thisYear'06')), 'x' => (new DateTime($thisYear '-06'))->format('M-Y')],
  139.                 ['y' => count($subscriptionRepo->findByDate($thisYear'07')), 'x' => (new DateTime($thisYear '-07'))->format('M-Y')],
  140.                 ['y' => count($subscriptionRepo->findByDate($thisYear'08')), 'x' => (new DateTime($thisYear '-08'))->format('M-Y')],
  141.                 ['y' => count($subscriptionRepo->findByDate($thisYear'09')), 'x' => (new DateTime($thisYear '-09'))->format('M-Y')],
  142.                 ['y' => count($subscriptionRepo->findByDate($thisYear'10')), 'x' => (new DateTime($thisYear '-10'))->format('M-Y')],
  143.                 ['y' => count($subscriptionRepo->findByDate($thisYear'11')), 'x' => (new DateTime($thisYear '-11'))->format('M-Y')],
  144.                 ['y' => count($subscriptionRepo->findByDate($thisYear'12')), 'x' => (new DateTime($thisYear '-12'))->format('M-Y')],
  145.             ],
  146.             'ratio' => intval(count($subscriptionRepo->findByDate($thisYear$thisMonth)) - count($subscriptionRepo->findByDate($thisYear$lastMonth)))
  147.         ];
  148.         return $this->json($result);
  149.     }
  150.     #[Route('/dashboard/chart_four'name'app_chart_four')]
  151.     public function chart_four(EmployeeRepository $employeeRepo)
  152.     {
  153.         $thisYear date("Y");
  154.         $thisMonth date("m");
  155.         $lastMonth date("m"strtotime("-1 month"));
  156.         $result = [
  157.             'data' => [
  158.                 ['y' => count($employeeRepo->findByDate($thisYear'01')), 'x' => (new DateTime($thisYear '-01'))->format('M-Y')],
  159.                 ['y' => count($employeeRepo->findByDate($thisYear'02')), 'x' => (new DateTime($thisYear '-02'))->format('M-Y')],
  160.                 ['y' => count($employeeRepo->findByDate($thisYear'03')), 'x' => (new DateTime($thisYear '-03'))->format('M-Y')],
  161.                 ['y' => count($employeeRepo->findByDate($thisYear'04')), 'x' => (new DateTime($thisYear '-04'))->format('M-Y')],
  162.                 ['y' => count($employeeRepo->findByDate($thisYear'05')), 'x' => (new DateTime($thisYear '-05'))->format('M-Y')],
  163.                 ['y' => count($employeeRepo->findByDate($thisYear'06')), 'x' => (new DateTime($thisYear '-06'))->format('M-Y')],
  164.                 ['y' => count($employeeRepo->findByDate($thisYear'07')), 'x' => (new DateTime($thisYear '-07'))->format('M-Y')],
  165.                 ['y' => count($employeeRepo->findByDate($thisYear'08')), 'x' => (new DateTime($thisYear '-08'))->format('M-Y')],
  166.                 ['y' => count($employeeRepo->findByDate($thisYear'09')), 'x' => (new DateTime($thisYear '-09'))->format('M-Y')],
  167.                 ['y' => count($employeeRepo->findByDate($thisYear'10')), 'x' => (new DateTime($thisYear '-10'))->format('M-Y')],
  168.                 ['y' => count($employeeRepo->findByDate($thisYear'11')), 'x' => (new DateTime($thisYear '-11'))->format('M-Y')],
  169.                 ['y' => count($employeeRepo->findByDate($thisYear'12')), 'x' => (new DateTime($thisYear '-12'))->format('M-Y')],
  170.             ],
  171.             'ratio' => intval(count($employeeRepo->findByDate($thisYear$thisMonth)) - count($employeeRepo->findByDate($thisYear$lastMonth)))
  172.         ];
  173.         return $this->json($result);
  174.     }
  175.     #[Route('/dashboard/chart_five'name'app_chart_five')]
  176.     public function chart_five(EntityManagerInterface $manager)
  177.     {
  178.         $classrooms $manager->getRepository(Classroom::class)->findBy(['status' => ClassroomStatus::ACTIVE], []);
  179.         $capacity 0;
  180.         $available 0;
  181.         foreach ($classrooms as $classroom) {
  182.             $available += $classroom->getAvailablePlaces();
  183.             $capacity += $classroom->getCapacity();
  184.         }
  185.         $result = [
  186.             'capacity' => $capacity,
  187.             'available' => $available,
  188.         ];
  189.         return $this->json($result);
  190.     }
  191.     #[Route('/dashboard/chart_six'name'app_chart_six')]
  192.     public function chart_six(EntityManagerInterface $manager)
  193.     {
  194.         $todos $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::TODO]);
  195.         $pendings $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::PENDING]);
  196.         $dones $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::DONE]);
  197.         $canceleds $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::CANCELED]);
  198.         $result = [
  199.             'todos' => count($todos),
  200.             'pendings' => count($pendings),
  201.             'dones' => count($dones),
  202.             'canceleds' => count($canceleds),
  203.         ];
  204.         return $this->json($result);
  205.     }
  206.     #[Route('/dashboard/chart_seven'name'app_chart_seven')]
  207.     public function chart_seven(EntityManagerInterface $managerEvenementRepository $evenementRepository)
  208.     {
  209.         $thisYear date("Y");
  210.         $thisMonth date("m");
  211.         $result = [
  212.             'data' => [
  213.                 ['y' => count($evenementRepository->findByDate($thisYear'01')), 'x' => (new DateTime($thisYear '-01'))->format('M-Y')],
  214.                 ['y' => count($evenementRepository->findByDate($thisYear'02')), 'x' => (new DateTime($thisYear '-02'))->format('M-Y')],
  215.                 ['y' => count($evenementRepository->findByDate($thisYear'03')), 'x' => (new DateTime($thisYear '-03'))->format('M-Y')],
  216.                 ['y' => count($evenementRepository->findByDate($thisYear'04')), 'x' => (new DateTime($thisYear '-04'))->format('M-Y')],
  217.                 ['y' => count($evenementRepository->findByDate($thisYear'05')), 'x' => (new DateTime($thisYear '-05'))->format('M-Y')],
  218.                 ['y' => count($evenementRepository->findByDate($thisYear'06')), 'x' => (new DateTime($thisYear '-06'))->format('M-Y')],
  219.                 ['y' => count($evenementRepository->findByDate($thisYear'07')), 'x' => (new DateTime($thisYear '-07'))->format('M-Y')],
  220.                 ['y' => count($evenementRepository->findByDate($thisYear'08')), 'x' => (new DateTime($thisYear '-08'))->format('M-Y')],
  221.                 ['y' => count($evenementRepository->findByDate($thisYear'09')), 'x' => (new DateTime($thisYear '-09'))->format('M-Y')],
  222.                 ['y' => count($evenementRepository->findByDate($thisYear'10')), 'x' => (new DateTime($thisYear '-10'))->format('M-Y')],
  223.                 ['y' => count($evenementRepository->findByDate($thisYear'11')), 'x' => (new DateTime($thisYear '-11'))->format('M-Y')],
  224.                 ['y' => count($evenementRepository->findByDate($thisYear'12')), 'x' => (new DateTime($thisYear '-12'))->format('M-Y')],
  225.             ],
  226.             'ratio' => intval(count($evenementRepository->findByDate($thisYear$thisMonth)))
  227.         ];
  228.         return $this->json($result);
  229.     }
  230. }