src/Controller/App/DashboardController.php line 40
<?php
namespace App\Controller\App;
use App\Service\BlogService;
use DateTime;
use App\Entity\Task;
use App\Entity\Child;
use App\Entity\Classroom;
use App\Entity\enums\ClassroomStatus;
use App\Entity\Employee;
use App\Entity\Prechild;
use App\Entity\Evenement;
use App\Entity\enums\EventCategory;
use App\Entity\Subscription;
use App\Entity\enums\SubscriptionStatus;
use App\Entity\enums\TaskStatus;
use App\Repository\ChildRepository;
use App\Repository\EmployeeRepository;
use App\Repository\EvenementRepository;
use App\Repository\PrechildRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\SubscriptionRepository;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Contracts\EventDispatcher\Event;
#[Route('/app')]
class DashboardController extends AbstractController
{
private BlogService $blogService;
public function __construct(private TranslatorInterface $translator, BlogService $blogService)
{
$this->blogService = $blogService;
}
#[Route('/dashboard', name: 'app_main')]
public function main(EntityManagerInterface $manager): Response
{
/** @var $user App\Entity\User */
$user = $this->getUser();
$company = $user->getCompany();
if (!$company) {
return $this->redirectToRoute('app_company_new_company', [], Response::HTTP_SEE_OTHER);
}
// $articles = $manager->getRepository(Article::class)->findBy([], [], 6);
$articles = $this->blogService->getPosts();
$tasks = $manager->getRepository(Task::class)->findBy([], [], 15); //->findToday();
$events = $manager->getRepository(Evenement::class)->findBy([], [], 15); //->findAll();
$subscriptions = $manager->getRepository(Subscription::class)->findBy(['status' => SubscriptionStatus::CONFIRMED]);
$expired_subscriptions = [];
$unpaied_subscriptions = [];
foreach ($subscriptions as $subscription) {
if (!$subscription->isPaied()) {
array_push($unpaied_subscriptions, $subscription);
}
if ($subscription->isExpired()) {
array_push($expired_subscriptions, $subscription);
}
}
return $this->render('app/dashboard/home.html.twig', [
'controller_name' => 'Main page',
'articles' => $articles,
'children_count' => $manager->getRepository(Child::class)->count([]),
'employees_count' => $manager->getRepository(Employee::class)->count([]),
'prechildren_count' => $manager->getRepository(Prechild::class)->count([]),
'subscriptions_count' => $manager->getRepository(Subscription::class)->count([]),
'classrooms_count' => $manager->getRepository(Classroom::class)->count([]),
'tasks' => $tasks,
'tasks_count' => $manager->getRepository(Task::class)->count([]),
'events' => $events,
'events_count' => $manager->getRepository(Evenement::class)->count([]),
'expired_subscriptions' => $expired_subscriptions,
'unpaied_subscriptions' => $unpaied_subscriptions
]);
}
#[Route('/dashboard/chart_one', name: 'app_chart_one')]
public function chart_one(ChildRepository $childRepo)
{
$thisYear = date("Y");
$thisMonth = date("m");
$lastMonth = date("m", strtotime("-1 month"));
$result = [
'data' => [
['y' => count($childRepo->findByDate($thisYear, '01')), 'x' => (new DateTime($thisYear . '-01'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '02')), 'x' => (new DateTime($thisYear . '-02'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '03')), 'x' => (new DateTime($thisYear . '-03'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '04')), 'x' => (new DateTime($thisYear . '-04'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '05')), 'x' => (new DateTime($thisYear . '-05'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '06')), 'x' => (new DateTime($thisYear . '-06'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '07')), 'x' => (new DateTime($thisYear . '-07'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '08')), 'x' => (new DateTime($thisYear . '-08'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '09')), 'x' => (new DateTime($thisYear . '-09'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '10')), 'x' => (new DateTime($thisYear . '-10'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '11')), 'x' => (new DateTime($thisYear . '-11'))->format('M-Y')],
['y' => count($childRepo->findByDate($thisYear, '12')), 'x' => (new DateTime($thisYear . '-12'))->format('M-Y')],
],
'ratio' => intval(count($childRepo->findByDate($thisYear, $thisMonth)) - count($childRepo->findByDate($thisYear, $lastMonth)))
];
return $this->json($result);
}
#[Route('/dashboard/chart_two', name: 'app_chart_two')]
public function chart_two(PrechildRepository $prechildRepo)
{
$thisYear = date("Y");
$thisMonth = date("m");
$lastMonth = date("m", strtotime("-1 month"));
$result = [
'data' => [
['y' => count($prechildRepo->findByDate($thisYear, '01')), 'x' => (new DateTime($thisYear . '-01'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '02')), 'x' => (new DateTime($thisYear . '-02'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '03')), 'x' => (new DateTime($thisYear . '-03'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '04')), 'x' => (new DateTime($thisYear . '-04'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '05')), 'x' => (new DateTime($thisYear . '-05'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '06')), 'x' => (new DateTime($thisYear . '-06'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '07')), 'x' => (new DateTime($thisYear . '-07'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '08')), 'x' => (new DateTime($thisYear . '-08'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '09')), 'x' => (new DateTime($thisYear . '-09'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '10')), 'x' => (new DateTime($thisYear . '-10'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '11')), 'x' => (new DateTime($thisYear . '-11'))->format('M-Y')],
['y' => count($prechildRepo->findByDate($thisYear, '12')), 'x' => (new DateTime($thisYear . '-12'))->format('M-Y')],
],
'ratio' => intval(count($prechildRepo->findByDate($thisYear, $thisMonth)) - count($prechildRepo->findByDate($thisYear, $lastMonth)))
];
return $this->json($result);
}
#[Route('/dashboard/chart_three', name: 'app_chart_three')]
public function chart_three(SubscriptionRepository $subscriptionRepo)
{
$thisYear = date("Y");
$thisMonth = date("m");
$lastMonth = date("m", strtotime("-1 month"));
$result = [
'data' => [
['y' => count($subscriptionRepo->findByDate($thisYear, '01')), 'x' => (new DateTime($thisYear . '-01'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '02')), 'x' => (new DateTime($thisYear . '-02'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '03')), 'x' => (new DateTime($thisYear . '-03'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '04')), 'x' => (new DateTime($thisYear . '-04'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '05')), 'x' => (new DateTime($thisYear . '-05'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '06')), 'x' => (new DateTime($thisYear . '-06'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '07')), 'x' => (new DateTime($thisYear . '-07'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '08')), 'x' => (new DateTime($thisYear . '-08'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '09')), 'x' => (new DateTime($thisYear . '-09'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '10')), 'x' => (new DateTime($thisYear . '-10'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '11')), 'x' => (new DateTime($thisYear . '-11'))->format('M-Y')],
['y' => count($subscriptionRepo->findByDate($thisYear, '12')), 'x' => (new DateTime($thisYear . '-12'))->format('M-Y')],
],
'ratio' => intval(count($subscriptionRepo->findByDate($thisYear, $thisMonth)) - count($subscriptionRepo->findByDate($thisYear, $lastMonth)))
];
return $this->json($result);
}
#[Route('/dashboard/chart_four', name: 'app_chart_four')]
public function chart_four(EmployeeRepository $employeeRepo)
{
$thisYear = date("Y");
$thisMonth = date("m");
$lastMonth = date("m", strtotime("-1 month"));
$result = [
'data' => [
['y' => count($employeeRepo->findByDate($thisYear, '01')), 'x' => (new DateTime($thisYear . '-01'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '02')), 'x' => (new DateTime($thisYear . '-02'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '03')), 'x' => (new DateTime($thisYear . '-03'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '04')), 'x' => (new DateTime($thisYear . '-04'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '05')), 'x' => (new DateTime($thisYear . '-05'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '06')), 'x' => (new DateTime($thisYear . '-06'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '07')), 'x' => (new DateTime($thisYear . '-07'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '08')), 'x' => (new DateTime($thisYear . '-08'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '09')), 'x' => (new DateTime($thisYear . '-09'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '10')), 'x' => (new DateTime($thisYear . '-10'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '11')), 'x' => (new DateTime($thisYear . '-11'))->format('M-Y')],
['y' => count($employeeRepo->findByDate($thisYear, '12')), 'x' => (new DateTime($thisYear . '-12'))->format('M-Y')],
],
'ratio' => intval(count($employeeRepo->findByDate($thisYear, $thisMonth)) - count($employeeRepo->findByDate($thisYear, $lastMonth)))
];
return $this->json($result);
}
#[Route('/dashboard/chart_five', name: 'app_chart_five')]
public function chart_five(EntityManagerInterface $manager)
{
$classrooms = $manager->getRepository(Classroom::class)->findBy(['status' => ClassroomStatus::ACTIVE], []);
$capacity = 0;
$available = 0;
foreach ($classrooms as $classroom) {
$available += $classroom->getAvailablePlaces();
$capacity += $classroom->getCapacity();
}
$result = [
'capacity' => $capacity,
'available' => $available,
];
return $this->json($result);
}
#[Route('/dashboard/chart_six', name: 'app_chart_six')]
public function chart_six(EntityManagerInterface $manager)
{
$todos = $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::TODO]);
$pendings = $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::PENDING]);
$dones = $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::DONE]);
$canceleds = $manager->getRepository(Task::class)->findBy(['status' => TaskStatus::CANCELED]);
$result = [
'todos' => count($todos),
'pendings' => count($pendings),
'dones' => count($dones),
'canceleds' => count($canceleds),
];
return $this->json($result);
}
#[Route('/dashboard/chart_seven', name: 'app_chart_seven')]
public function chart_seven(EntityManagerInterface $manager, EvenementRepository $evenementRepository)
{
$thisYear = date("Y");
$thisMonth = date("m");
$result = [
'data' => [
['y' => count($evenementRepository->findByDate($thisYear, '01')), 'x' => (new DateTime($thisYear . '-01'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '02')), 'x' => (new DateTime($thisYear . '-02'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '03')), 'x' => (new DateTime($thisYear . '-03'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '04')), 'x' => (new DateTime($thisYear . '-04'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '05')), 'x' => (new DateTime($thisYear . '-05'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '06')), 'x' => (new DateTime($thisYear . '-06'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '07')), 'x' => (new DateTime($thisYear . '-07'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '08')), 'x' => (new DateTime($thisYear . '-08'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '09')), 'x' => (new DateTime($thisYear . '-09'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '10')), 'x' => (new DateTime($thisYear . '-10'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '11')), 'x' => (new DateTime($thisYear . '-11'))->format('M-Y')],
['y' => count($evenementRepository->findByDate($thisYear, '12')), 'x' => (new DateTime($thisYear . '-12'))->format('M-Y')],
],
'ratio' => intval(count($evenementRepository->findByDate($thisYear, $thisMonth)))
];
return $this->json($result);
}
}