From 10e297e1e43558708a97287f1681961286203f0d Mon Sep 17 00:00:00 2001
From: ExostFlash <120869320+ExostFlash@users.noreply.github.com>
Date: Wed, 29 Nov 2023 14:58:03 +0100
Subject: [PATCH] resa add
---
migrations/Version20231129091443.php | 31 +++++++
src/Controller/HomeController.php | 25 ++++-
src/Controller/ResaServiceController.php | 111 ++++++++++++++++++++++-
src/Entity/Resa.php | 42 +++++++--
src/Form/ResaType.php | 59 +++++++++++-
src/Form/ResaUserType.php | 84 +++++++++++++++++
templates/home/_form.html.twig | 4 +
templates/home/resa.html.twig | 13 +++
templates/resa_service/edit.html.twig | 10 +-
templates/resa_service/index.html.twig | 17 +++-
templates/resa_service/new.html.twig | 8 +-
templates/resa_service/show.html.twig | 58 +++++++-----
12 files changed, 417 insertions(+), 45 deletions(-)
create mode 100644 migrations/Version20231129091443.php
create mode 100644 src/Form/ResaUserType.php
create mode 100644 templates/home/_form.html.twig
create mode 100644 templates/home/resa.html.twig
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) }}
+ {{ button_label|default('Save') }}
+{{ 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') }}
Id
Id_resto
+ Id_user
Nb_user
- Date_heur
+ Jour
+ Heur
actions
@@ -20,18 +23,24 @@
{{ resa.id }}
{{ resa.idResto }}
+ {% if users[resa.idUser] is defined %}
+ {{ users[resa.idUser].name }}
+ {% else %}
+ User Not Found
+ {% endif %}
{{ 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
{% else %}
- no records found
+ no records found
{% endfor %}
+ 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 %}