diff --git a/migrations/Version20231129091443.php b/migrations/Version20231129091443.php new file mode 100644 index 0000000..ed46225 --- /dev/null +++ b/migrations/Version20231129091443.php @@ -0,0 +1,31 @@ +addSql('CREATE TABLE resa (id INT AUTO_INCREMENT NOT NULL, id_resto INT NOT NULL, id_user INT NOT NULL, nb_user INT NOT NULL, jour DATE NOT NULL, heur TIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP TABLE resa'); + } +} diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index fd09406..f9939eb 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -3,7 +3,9 @@ namespace App\Controller; use App\Entity\Ticket; +use App\Entity\Resa; use App\Form\Ticket2Type; +use App\Form\ResaUserType; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use App\Repository\UserRepository; use Symfony\Component\Security\Core\Security; @@ -71,10 +73,27 @@ class HomeController extends AbstractController } #[Route('/resa/{idresto}', name: 'app_home_resa')] - public function resa(): Response + public function resas($idresto, Request $request, EntityManagerInterface $entityManager): Response { - return $this->render('home/resa.html.twig', [ - 'controller_name' => 'Home', + $id_user = $this->id_user; + + $resa = new Resa(); + $resa->setIdUser($id_user); + $resa->setIdResto($idresto); + + $form = $this->createForm(ResaUserType::class, $resa); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->persist($resa); + $entityManager->flush(); + + return $this->redirectToRoute('app_home', [], Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('home/resa.html.twig', [ + 'resa' => $resa, + 'form' => $form, ]); } diff --git a/src/Controller/ResaServiceController.php b/src/Controller/ResaServiceController.php index 9aa14a0..d45df9d 100644 --- a/src/Controller/ResaServiceController.php +++ b/src/Controller/ResaServiceController.php @@ -4,7 +4,10 @@ namespace App\Controller; use App\Entity\Resa; use App\Form\ResaType; +use Symfony\Component\Security\Core\Security; use App\Repository\ResaRepository; +use App\Repository\UserRepository; +use App\Repository\RestoRepository; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Request; @@ -14,11 +17,117 @@ use Symfony\Component\Routing\Annotation\Route; #[Route('/service/resa')] class ResaServiceController extends AbstractController { + private $id_resto; + private $id_user; + private $userRepository; + private $restoRepository; + private $role_user; + + public function __construct(userRepository $userRepository, restoRepository $restoRepository, Security $security) + { + $utilisateur = $security->getUser(); + $email_user = $utilisateur->getUserIdentifier(); + + $user = $userRepository->findOneBy(['email' => $email_user]); + + $role_user = $user->getGrade(); + $id_resto = $user->getIdResto(); + $id_user = $user->getId(); + + $this->role_user = $role_user; + $this->id_resto = $id_resto; + $this->id_user = $id_user; + $this->userRepository = $userRepository; + $this->restoRepository = $restoRepository; + } + #[Route('/', name: 'app_resa_service_index', methods: ['GET'])] public function index(ResaRepository $resaRepository): Response { + // Obtenez la date d'aujourd'hui + $today = new \DateTime('today'); + + if ($this->role_user != 'Root') { + $resasDuJour = $resaRepository->findBy([ + 'jour' => $today, + 'id_resto' => $this->id_resto, + ]); + } else { + $resasDuJour = $resaRepository->findBy([ + 'jour' => $today, + ]); + } + + $users = []; + foreach ($resasDuJour as $resa) { + $userId = $resa->getIdUser(); + $user = $this->userRepository->find($userId); + if ($user !== null) { + $users[$userId] = $user; + } + } + return $this->render('resa_service/index.html.twig', [ - 'resas' => $resaRepository->findAll(), + 'resas' => $resasDuJour, + 'j1' => $today->modify('+1 day'), + 'users' => $users, + ]); + } + + #[Route('/jour/{datej}', name: 'app_resa_service_jour', methods: ['GET'])] + public function byjour($datej, ResaRepository $resaRepository): Response + { + $today = \DateTime::createFromFormat('Y-m-d', $datej);; + + if ($this->role_user != 'Root') { + $resasDuJour = $resaRepository->findBy([ + 'jour' => $today, + 'id_resto' => $this->id_resto, + ]); + } else { + $resasDuJour = $resaRepository->findBy([ + 'jour' => $today, + ]); + } + + $users = []; + foreach ($resasDuJour as $resa) { + $userId = $resa->getIdUser(); + $user = $this->userRepository->find($userId); + if ($user !== null) { + $users[$userId] = $user; + } + } + + return $this->render('resa_service/index.html.twig', [ + 'resas' => $resasDuJour, + 'j1' => $today->modify('+1 day'), + 'users' => $users, + ]); + } + + #[Route('/new', name: 'app_resa_service_new', methods: ['GET', 'POST'])] + public function new(Request $request, EntityManagerInterface $entityManager): Response + { + $id_user = $this->id_user; + + $resa = new Resa(); + $resa->setIdUser($id_user); + + $form = $this->createForm(ResaType::class, $resa); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + + $entityManager->persist($resa); + $entityManager->flush(); + + return $this->redirectToRoute('app_resa_service_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->renderForm('resa_service/new.html.twig', [ + 'resa' => $resa, + 'form' => $form, ]); } diff --git a/src/Entity/Resa.php b/src/Entity/Resa.php index f6fb8f9..3fcf86c 100644 --- a/src/Entity/Resa.php +++ b/src/Entity/Resa.php @@ -17,11 +17,17 @@ class Resa #[ORM\Column] private ?int $id_resto = null; + #[ORM\Column] + private ?int $id_user = null; + #[ORM\Column] private ?int $nb_user = null; - #[ORM\Column(type: Types::DATETIME_MUTABLE)] - private ?\DateTimeInterface $date_heur = null; + #[ORM\Column(type: Types::DATE_MUTABLE)] + private ?\DateTimeInterface $jour = null; + + #[ORM\Column(type: Types::TIME_MUTABLE)] + private ?\DateTimeInterface $heur = null; public function getId(): ?int { @@ -40,6 +46,18 @@ class Resa return $this; } + public function getIdUser(): ?int + { + return $this->id_user; + } + + public function setIdUser(int $id_user): static + { + $this->id_user = $id_user; + + return $this; + } + public function getNbUser(): ?int { return $this->nb_user; @@ -52,14 +70,26 @@ class Resa return $this; } - public function getDateHeur(): ?\DateTimeInterface + public function getJour(): ?\DateTimeInterface { - return $this->date_heur; + return $this->jour; } - public function setDateHeur(\DateTimeInterface $date_heur): static + public function setJour(\DateTimeInterface $jour): static { - $this->date_heur = $date_heur; + $this->jour = $jour; + + return $this; + } + + public function getHeur(): ?\DateTimeInterface + { + return $this->heur; + } + + public function setHeur(\DateTimeInterface $heur): static + { + $this->heur = $heur; return $this; } diff --git a/src/Form/ResaType.php b/src/Form/ResaType.php index beb9e59..e2afde5 100644 --- a/src/Form/ResaType.php +++ b/src/Form/ResaType.php @@ -6,6 +6,13 @@ use App\Entity\Resa; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; +use Symfony\Component\Form\Extension\Core\Type\DateType; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Validator\Constraints\Choice; +use Symfony\Component\Validator\Constraints\NotBlank; +use Symfony\Component\Form\Extension\Core\Type\IntegerType; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; +use Symfony\Component\Validator\Constraints\Range; class ResaType extends AbstractType { @@ -13,8 +20,56 @@ class ResaType extends AbstractType { $builder ->add('id_resto') - ->add('nb_user') - ->add('date_heur'); + ->add('id_user', HiddenType::class, [ + 'disabled' => true, // Désactive le champ + 'data' => $options['data']->getIdUser() // Remplacez $valeurSpecifique par la valeur souhaitée + ]) + ->add('nb_user', IntegerType::class, [ + 'attr' => [ + 'min' => 1, + 'max' => 10, + 'placeholder' => 'Nombre de personnes (entre 1 et 10)', + ], + 'constraints' => [ + new NotBlank(['message' => 'Veuillez choisir un nombre de personnes.']), + new Range([ + 'min' => 1, + 'max' => 10, + 'minMessage' => 'Le nombre minimum de personnes est {{ limit }}.', + 'maxMessage' => 'Le nombre maximum de personnes est {{ limit }}.', + ]), + ], + ]) + ->add('jour', DateType::class, [ + 'widget' => 'single_text', + 'html5' => false, + 'attr' => ['class' => 'datepicker', 'placeholder' => 'Format date : AAAA-MM-JJ'], + 'constraints' => [ + new \Symfony\Component\Validator\Constraints\GreaterThanOrEqual([ + 'value' => 'today', + 'message' => 'Vous ne pouvez pas choisir une date passée.', + ]), + ], + ]) + ->add('heur', ChoiceType::class, [ + 'choices' => [ + '12:00' => new \DateTime('12:00:00'), + '12:15' => new \DateTime('12:15:00'), + '12:30' => new \DateTime('12:30:00'), + '12:45' => new \DateTime('12:45:00'), + '13:00' => new \DateTime('13:00:00'), + '19:00' => new \DateTime('19:00:00'), + '19:15' => new \DateTime('19:15:00'), + '19:30' => new \DateTime('19:30:00'), + '19:45' => new \DateTime('19:45:00'), + '20:00' => new \DateTime('20:00:00'), + '20:15' => new \DateTime('20:15:00'), + '20:30' => new \DateTime('20:30:00'), + '20:45' => new \DateTime('20:45:00'), + '21:00' => new \DateTime('21:00:00'), + ], + 'placeholder' => 'Choisissez une heure', + ]); } public function configureOptions(OptionsResolver $resolver): void diff --git a/src/Form/ResaUserType.php b/src/Form/ResaUserType.php new file mode 100644 index 0000000..74b1c56 --- /dev/null +++ b/src/Form/ResaUserType.php @@ -0,0 +1,84 @@ +add('id_resto', HiddenType::class, [ + 'disabled' => true, // Désactive le champ + 'data' => $options['data']->getIdResto() // Remplacez $valeurSpecifique par la valeur souhaitée + ]) + ->add('id_user', HiddenType::class, [ + 'disabled' => true, // Désactive le champ + 'data' => $options['data']->getIdUser() // Remplacez $valeurSpecifique par la valeur souhaitée + ]) + ->add('nb_user', IntegerType::class, [ + 'attr' => [ + 'min' => 1, + 'max' => 10, + 'placeholder' => 'Nombre de personnes (entre 1 et 10)', + ], + 'constraints' => [ + new NotBlank(['message' => 'Veuillez choisir un nombre de personnes.']), + new Range([ + 'min' => 1, + 'max' => 10, + 'minMessage' => 'Le nombre minimum de personnes est {{ limit }}.', + 'maxMessage' => 'Le nombre maximum de personnes est {{ limit }}.', + ]), + ], + ]) + ->add('jour', DateType::class, [ + 'widget' => 'single_text', + 'html5' => false, + 'attr' => ['class' => 'datepicker', 'placeholder' => 'Format date : AAAA-MM-JJ'], + 'constraints' => [ + new \Symfony\Component\Validator\Constraints\GreaterThanOrEqual([ + 'value' => 'today', + 'message' => 'Vous ne pouvez pas choisir une date passée.', + ]), + ], + ]) + ->add('heur', ChoiceType::class, [ + 'choices' => [ + '12:00' => new \DateTime('12:00:00'), + '12:15' => new \DateTime('12:15:00'), + '12:30' => new \DateTime('12:30:00'), + '12:45' => new \DateTime('12:45:00'), + '13:00' => new \DateTime('13:00:00'), + '19:00' => new \DateTime('19:00:00'), + '19:15' => new \DateTime('19:15:00'), + '19:30' => new \DateTime('19:30:00'), + '19:45' => new \DateTime('19:45:00'), + '20:00' => new \DateTime('20:00:00'), + '20:15' => new \DateTime('20:15:00'), + '20:30' => new \DateTime('20:30:00'), + '20:45' => new \DateTime('20:45:00'), + '21:00' => new \DateTime('21:00:00'), + ], + 'placeholder' => 'Choisissez une heure', + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => Resa::class, + ]); + } +} diff --git a/templates/home/_form.html.twig b/templates/home/_form.html.twig new file mode 100644 index 0000000..bf20b98 --- /dev/null +++ b/templates/home/_form.html.twig @@ -0,0 +1,4 @@ +{{ form_start(form) }} + {{ form_widget(form) }} + +{{ form_end(form) }} diff --git a/templates/home/resa.html.twig b/templates/home/resa.html.twig new file mode 100644 index 0000000..acd4105 --- /dev/null +++ b/templates/home/resa.html.twig @@ -0,0 +1,13 @@ +{% extends 'base.html.twig' %} + +{% block title %}New Resa{% endblock %} + +{% block body %} +
+

Create new Resa

+ +
+ {{ include('home/_form.html.twig') }} +
+
+{% endblock %} \ No newline at end of file diff --git a/templates/resa_service/edit.html.twig b/templates/resa_service/edit.html.twig index b1ca729..bfeddb0 100644 --- a/templates/resa_service/edit.html.twig +++ b/templates/resa_service/edit.html.twig @@ -3,11 +3,15 @@ {% block title %}Edit Resa{% endblock %} {% block body %} +

Edit Resa

- {{ include('resa_service/_form.html.twig', {'button_label': 'Update'}) }} +
+ {{ include('resa_service/_form.html.twig', {'button_label': 'Update'}) }} - back to list + back to list - {{ include('resa_service/_delete_form.html.twig') }} + {{ include('resa_service/_delete_form.html.twig') }} +
+
{% endblock %} diff --git a/templates/resa_service/index.html.twig b/templates/resa_service/index.html.twig index 652b378..42ff5b7 100644 --- a/templates/resa_service/index.html.twig +++ b/templates/resa_service/index.html.twig @@ -5,13 +5,16 @@ {% block body %}

Resa index

+

Jour suivant : {{ j1|date('Y-m-d') }}

+ - + + @@ -20,18 +23,24 @@ + {% if users[resa.idUser] is defined %} + + {% else %} + + {% endif %} - + + {% else %} - + {% endfor %}
Id Id_restoId_user Nb_userDate_heurJourHeur actions
{{ resa.id }} {{ resa.idResto }}{{ users[resa.idUser].name }}User Not Found{{ resa.nbUser }}{{ resa.dateHeur ? resa.dateHeur|date('Y-m-d H:i:s') : '' }}{{ resa.jour ? resa.jour|date('Y-m-d') : '' }}{{ resa.heur ? resa.heur|date('H:i:s') : '' }} show - edit
no records foundno records found
+ Create new {% endblock %} diff --git a/templates/resa_service/new.html.twig b/templates/resa_service/new.html.twig index 251d1e6..dd1af38 100644 --- a/templates/resa_service/new.html.twig +++ b/templates/resa_service/new.html.twig @@ -3,9 +3,13 @@ {% block title %}New Resa{% endblock %} {% block body %} +

Create new Resa

- {{ include('resa_service/_form.html.twig') }} +
+ {{ include('resa_service/_form.html.twig') }} - back to list + back to list +
+
{% endblock %} diff --git a/templates/resa_service/show.html.twig b/templates/resa_service/show.html.twig index eea276a..1afb1be 100644 --- a/templates/resa_service/show.html.twig +++ b/templates/resa_service/show.html.twig @@ -3,32 +3,42 @@ {% block title %}Resa{% endblock %} {% block body %} +

Resa

- - - - - - - - - - - - - - - - - - - -
Id{{ resa.id }}
Id_resto{{ resa.idResto }}
Nb_user{{ resa.nbUser }}
Date_heur{{ resa.dateHeur ? resa.dateHeur|date('Y-m-d H:i:s') : '' }}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{{ resa.id }}
Id_resto{{ resa.idResto }}
Id_user{{ resa.idUser }}
Nb_user{{ resa.nbUser }}
Jour{{ resa.jour ? resa.jour|date('Y-m-d') : '' }}
Heur{{ resa.heur ? resa.heur|date('H:i:s') : '' }}
- back to list + {{ include('resa_service/_delete_form.html.twig') }} - edit - - {{ include('resa_service/_delete_form.html.twig') }} + back to list +
+
{% endblock %}