<?php
namespace App\Controller;
use App\Entity\Emplacement;
use App\Entity\Foodtruck;
use App\Repository\CategorieRepository;
use App\Repository\EmplacementRepository;
use App\Repository\FoodtruckRepository;
use App\Repository\ServiceRepository;
use App\Service\FoodtruckService;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class HomeController extends AbstractController
{
#[Route('/', name: 'home', methods: ['GET'])]
public function index(): Response
{
return $this->redirectToRoute('services_semaine', [], Response::HTTP_SEE_OTHER);
}
#[Route('/choix', name: 'choisir_foodtruck', methods: ['GET'])]
public function choisir(FoodtruckRepository $foodtruckRepository, EmplacementRepository $emplacementRepository, SessionInterface $session)
{
$foodtruck_selected = $session->get("foodtruck", Foodtruck::class);
if(is_object($foodtruck_selected)){
return $this->redirectToRoute('services_semaine', [], Response::HTTP_SEE_OTHER);
}
$foodtrucks = $foodtruckRepository->findAll();
$emplacements = $emplacementRepository->findAll();
return $this->render('home/choix.html.twig', [
'foodtrucks' => $foodtrucks,
'emplacements' => $emplacements,
]);
}
#[Route('/choix/foodtruck/{id}', name: 'choisir_service_par_foodtruck', methods: ['GET'])]
public function serviceParFoodtruck(Foodtruck $foodtruck, FoodtruckService $foodtruckService)
{
$foodtruckService->addFoodtruckInSession($foodtruck);
return $this->redirectToRoute('services_semaine', [], Response::HTTP_SEE_OTHER);
}
#[Route('/choix/emplacement/{id}', name: 'choisir_service_par_emplacement', methods: ['GET'])]
public function serviceParEmplacement(Emplacement $emplacement, FoodtruckService $foodtruckService)
{
$foodtruckService->addEmplacementInSession($emplacement);
return $this->redirectToRoute('services_semaine', [], Response::HTTP_SEE_OTHER);
}
#[Route('/semaine', name: 'services_semaine', methods: ['GET'])]
public function commander(ServiceRepository $serviceRepository, SessionInterface $session, FoodtruckService $foodtruckService, Request $request, CategorieRepository $categorieRepository): Response
{
//Détection du foodtruck
$foodtruck = $foodtruckService->controleFoodtruck($request);
if(is_object($foodtruck))
{
} else {
$foodtruck = $session->get("foodtruck", Foodtruck::class);
}
$emplacement = $foodtruckService->controleEmplacement($request);
if(is_object($emplacement))
{
} else {
$emplacement = $session->get("emplacement", Emplacement::class);
}
// $emplacement = $session->get("emplacement", Emplacement::class);
$tri = null;
// $firstDay = date('Y-m-d',strtotime('last monday'));
// $lastDay = date('Y-m-d',strtotime('Sunday'));
$firstDay = date('Y-m-d',strtotime('now'));
$lastDay = date('Y-m-d',strtotime('+6 day'));
$semaine = [];
$dates = [];
$dates['firstDay'] = $firstDay;
$dates['lastDay'] = $lastDay;
$semaine = ['Lundi'=>NULL, 'Mardi'=>NULL, 'Mercredi'=>NULL, 'Jeudi'=>NULL, 'Vendredi'=>NULL, 'Samedi'=>NULL, 'Dimanche'=>NULL];
if(is_object($emplacement))
{
//Récupération de tous les services liés à tous les foodtrucks lié à cet emplacement
$services = $serviceRepository->findByDatesByEmplacement($dates,$emplacement);
$tri = "des foodtrucks pour l'emplacement ".$emplacement->getLibelle()." - ".$emplacement->getAdr()." ".$emplacement->getCp()." ".$emplacement->getVille()."";
} else {
if($this->getUser()){
if ($this->IsGranted('ROLE_ADMIN')){
//Récupération de tous les services
$services = $serviceRepository->findByDates($dates);
} elseif (isset($this->getUser()->getFoodtrucks()[0])){
//Récupération des services liés au foodtruck rattaché au compte user
$services = $serviceRepository->findByDatesByFoodtruck($dates,$this->getUser()->getFoodtrucks()[0]);
$tri = "pour le foodtruck ".$this->getUser()->getFoodtrucks()[0]->getLibelle()."";
} elseif (is_object($foodtruck)) {
//Récupération des services liés au foodtruck récupéré depuis l'URL
$services = $serviceRepository->findByDatesByFoodtruck($dates,$foodtruck);
$tri = "pour le foodtruck ".$foodtruck->getLibelle()."";
} else {
//Renvoi vers la page de sélection d'un foodtruck ou d'un emplacement
return $this->redirectToRoute('choisir_foodtruck', [], Response::HTTP_SEE_OTHER);
}
} else {
if(is_object($foodtruck)){
//Récupération des services liés au foodtruck récupéré depuis l'URL
$services = $serviceRepository->findByDatesByFoodtruck($dates,$foodtruck);
$tri = "pour le foodtruck ".$foodtruck->getLibelle()."";
} else {
//Renvoi vers la page de sélection d'un foodtruck ou d'un emplacement
return $this->redirectToRoute('choisir_foodtruck', [], Response::HTTP_SEE_OTHER);
}
}
}
foreach ($services as $key => $service) {
if(date('N' , $service->getDate()->getTimestamp() ) == 1 )
{
$semaine['Lundi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 2 )
{
$semaine['Mardi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 3 )
{
$semaine['Mercredi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 4 )
{
$semaine['Jeudi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 5 )
{
$semaine['Vendredi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 6 )
{
$semaine['Samedi'][] = $service;
}
if(date('N' , $service->getDate()->getTimestamp() ) == 7 )
{
$semaine['Dimanche'][] = $service;
}
}
// dd($semaine);
return $this->render('home/semaine.html.twig', [
'semaine' => $semaine,
'dates' => $dates,
'tri' => $tri,
'categories' => $categorieRepository->findAll(),
]);
}
}