<?php
namespace App\Controller\Admin;
use App\Entity\Acheteur;
use App\Entity\Broker;
use App\Entity\Category;
use App\Entity\Client;
use App\Entity\Cour;
use App\Entity\Events;
use App\Entity\Gestionnaire;
use App\Entity\SerieBillet;
use App\Entity\Session;
use App\Entity\Sport;
use App\Repository\CategoryRepository;
use App\Repository\CourRepository;
use App\Repository\SessionRepository;
use App\Repository\SportRepository;
use App\Services\BilletService;
use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class DashboardController extends AbstractDashboardController
{
#[Route(path: '/admin', name: 'admin')]
public function dashboard(Request $request, BilletService $billetService): Response
{
$request = $this->get('request_stack')->getCurrentRequest();
$eventId = $request->cookies->get('current_event_id');
$form = $this->createFormBuilder()
->add('session', EntityType::class, [
'class' => Session::class,
'query_builder' => function (SessionRepository $er) use ($eventId) {
return $er->createQueryBuilder('a')
->where('a.event = :currentEventId')
->setParameter('currentEventId', $eventId)
->orderBy('a.codeSession', 'ASC');
},
'choice_label' => 'codeSession',
'required' => false
])
->add('sessionDate', EntityType::class, [
'class' => Session::class,
'query_builder' => function (SessionRepository $er) use ($eventId) {
return $er->createQueryBuilder('a')
->where('a.event = :currentEventId')
->groupBy('a.date')
->setParameter('currentEventId', $eventId)
->orderBy('a.date', 'ASC');
},
'choice_label' => 'getLocalizedDate',
'required' => false
])
->add('cour', EntityType::class, [
'class' => Cour::class,
'query_builder' => function (CourRepository $er) use ($eventId) {
return $er->createQueryBuilder('a')
->where('a.event = :currentEventId')
->setParameter('currentEventId', $eventId)
->orderBy('a.nom', 'ASC');
},
'choice_label' => 'nom',
'required' => false
])
->add('categorie', EntityType::class, [
'class' => Category::class,
'query_builder' => function (CategoryRepository $er) use ($eventId) {
return $er->createQueryBuilder('a')
->where('a.event = :currentEventId')
->setParameter('currentEventId', $eventId)
->orderBy('a.nom', 'ASC');
},
'choice_label' => 'nom',
'required' => false
])
->add('sport', EntityType::class, [
'class' => Sport::class,
'query_builder' => function (SportRepository $er) use ($eventId) {
return $er->createQueryBuilder('a')
->where('a.event = :currentEventId')
->setParameter('currentEventId', $eventId)
->orderBy('a.name', 'ASC');
},
'choice_label' => 'name',
'required' => false
])
->add('submit', SubmitType::class, ['label' => 'Filtrer'])
->getForm();
$form->handleRequest($request);
$request = $this->get('request_stack')->getCurrentRequest();
$eventId = $request->cookies->get('current_event_id');
$data = [];
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$data['event'] = $eventId;
$processedDataSerieBillet = $billetService->getProcessedData('serieBillet', $data, $eventId);
$processedDataCommandes = $billetService->getProcessedData('commande', $data, $eventId);
} else {
$data['event'] = $eventId;
$processedDataSerieBillet = $billetService->getProcessedData('serieBillet', $data, $eventId);
$processedDataCommandes = $billetService->getProcessedData('commande', $data, $eventId);
}
$cours = [];
foreach ($processedDataSerieBillet as $sessions) {
foreach ($sessions as $cour_id => $session) {
$cours[] = $cour_id;
}
}
$soldes = $billetService->getSolde($processedDataSerieBillet, $processedDataCommandes, $eventId);
return $this->render('admin/dashboard.html.twig', [
'form' => $form->createView(),
'processedDataSerieBillet' => $processedDataSerieBillet,
'processedDataSerieCommande' => $processedDataCommandes,
'soldes' => $soldes,
'categories' => $billetService->getCategories($eventId)
]);
}
public function configureDashboard(): Dashboard
{
return Dashboard::new()
->setTitle('Teamgradi');
}
public function configureMenuItems(): iterable
{
yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
yield MenuItem::linkToCrud('Evénements', 'fa fa-home', Events::class);
yield MenuItem::linkToCrud('Serie Billet', 'icone menu_1', SerieBillet::class);
yield MenuItem::linkToCrud('Acheteurs', 'fa fa-user', Acheteur::class);
yield MenuItem::linkToCrud('Clients', 'fa fa-user', Client::class);
yield MenuItem::linkToCrud('Brokers', 'fa fa-user', Broker::class);
yield MenuItem::linkToCrud('Gestionnaires', 'fa fa-user', Gestionnaire::class);
}
}