<?php
namespace App\Controller;
use App\DBAL\Types\Booking\BookingStatus;
use App\HomeModule\HomeModuleProviderInterface;
use App\Repository\Notification\AlertRepository;
use App\Repository\User\UserRepository;
use App\Service\ChosenPeriodAnswer;
use App\Voter\DashboardVoter;
use Crea\SecurityBundle\Annotation\HasAccess;
use DateTime;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DefaultController extends AbstractController
{
/**
* @Route("/", name="dashboard")
* @HasAccess(DashboardVoter::LIST)
*/
public function home(Request $request, HomeModuleProviderInterface $homeModuleProvider): Response
{
$homeModules = $homeModuleProvider->getHomeModules();
if ($homeModules !== null) {
usort($homeModules, function ($a, $b) {
return $b->getPriority() <=> $a->getPriority();
});
}
return $this->render('components/home_module/view.html.twig', [
'pageTitle' => 'Accueil',
'allHomeModules' => $homeModules,
'isHome' => true
]);
}
/**
* Affiche le tableau de bord de pilotage du manager.
*
* @Route("/manager/dashboard/{event}", name="manager_dashboard")
*
* @HasAccess("ROLE_MODULE_MANAGER")
*
* @return Response
*
* @throws Exception
*/
public function managerBoardDisplay(UserRepository $userRepository, ChosenPeriodAnswer $chosenPeriodAnswer, string $event = 'jour')
{
// récupère la sélection de date de début et de fin
$form = $chosenPeriodAnswer->formCall();
$answer = $chosenPeriodAnswer->chosenPeriodAnswerReturn($form);
// affiche le tableau du jour ou de la semaine en cours, sinon celui de la période choisie
if (null == $answer) {
$startingDate = new DateTime();
$endingDate = clone $startingDate;
if ('semaine' == $event) {
$endingDate->modify('+ 6 day');
}
} else {
$startingDate = $answer['startDate'];
$endingDate = $answer['endDate'];
}
// TODO twig
return $this->render('manager/manager_dashboard.html.twig', [
'pageTitle' => 'Tableau de pilotage',
'form' => $form->createView(),
'sellers' => $userRepository->findSellerUsers(),
'sellersBookingGroupCount' => $userRepository->getSellersBookingCount($startingDate, $endingDate),
'sellersMutedBookingGroupCount' => $userRepository->getSellersBookingCount($startingDate, $endingDate, BookingStatus::MUTE),
'sellersUndecidedBookingGroupCount' => $userRepository->getSellersBookingCount($startingDate, $endingDate, BookingStatus::UNDECIDED),
'sellersBookingBookingGroupCount' => $userRepository->getSellersBookingCount($startingDate, $endingDate, BookingStatus::PROJECT),
'sellersCabinCount' => $userRepository->getSellersCabinCount($startingDate, $endingDate),
]);
}
/**
* @Route("/dashboard/alert")
*/
public function dashboardAlerts(AlertRepository $repository): Response
{
$response = new JsonResponse();
try {
$alerts = $repository->findBy(['user' => $this->getUser(), 'close' => false]);
} catch (Exception $e) {
return $response->setData($e)->setStatusCode(500);
}
return $response
->setData(count($alerts))
->setStatusCode(200)
;
}
}