Compare commits
3 Commits
41798397d3
...
01f23682b3
Author | SHA1 | Date | |
---|---|---|---|
01f23682b3 | |||
e7206e3c8c | |||
8626387473 |
@ -39,7 +39,7 @@
|
||||
"symfony/string": "7.1.*",
|
||||
"symfony/translation": "7.1.*",
|
||||
"symfony/twig-bundle": "7.1.*",
|
||||
"symfony/ux-icons": "^2.21",
|
||||
"symfony/ux-icons": "^2.24",
|
||||
"symfony/ux-turbo": "^2.20",
|
||||
"symfony/validator": "7.1.*",
|
||||
"symfony/web-link": "7.1.*",
|
||||
|
24
composer.lock
generated
24
composer.lock
generated
@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "7fff997f78db4185bb53c4543a245c74",
|
||||
"content-hash": "d1751dd70a356412dfadda645c7118ec",
|
||||
"packages": [
|
||||
{
|
||||
"name": "amphp/amp",
|
||||
@ -8164,16 +8164,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/ux-icons",
|
||||
"version": "v2.21.0",
|
||||
"version": "v2.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/ux-icons.git",
|
||||
"reference": "c3b3fd29b3f90e977b267251ef15ea06f3cec553"
|
||||
"reference": "39f689b41081f7788ee9c4a188817599d546bfb2"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/ux-icons/zipball/c3b3fd29b3f90e977b267251ef15ea06f3cec553",
|
||||
"reference": "c3b3fd29b3f90e977b267251ef15ea06f3cec553",
|
||||
"url": "https://api.github.com/repos/symfony/ux-icons/zipball/39f689b41081f7788ee9c4a188817599d546bfb2",
|
||||
"reference": "39f689b41081f7788ee9c4a188817599d546bfb2",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -8197,8 +8197,8 @@
|
||||
"type": "symfony-bundle",
|
||||
"extra": {
|
||||
"thanks": {
|
||||
"name": "symfony/ux",
|
||||
"url": "https://github.com/symfony/ux"
|
||||
"url": "https://github.com/symfony/ux",
|
||||
"name": "symfony/ux"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
@ -8233,7 +8233,7 @@
|
||||
"twig"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/ux-icons/tree/v2.21.0"
|
||||
"source": "https://github.com/symfony/ux-icons/tree/v2.24.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@ -8249,7 +8249,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-10-21T19:01:22+00:00"
|
||||
"time": "2025-04-04T17:32:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/ux-turbo",
|
||||
@ -11242,7 +11242,7 @@
|
||||
],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"stability-flags": {},
|
||||
"prefer-stable": true,
|
||||
"prefer-lowest": false,
|
||||
"platform": {
|
||||
@ -11250,6 +11250,6 @@
|
||||
"ext-ctype": "*",
|
||||
"ext-iconv": "*"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
"platform-dev": {},
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
||||
|
@ -1,105 +1,107 @@
|
||||
html{
|
||||
font-family: "Quicksand Light"; !important;
|
||||
}
|
||||
/* Page container */
|
||||
.page-container {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
margin: 20px auto;
|
||||
padding: 20px;
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
|
||||
border: 2px solid #ff4d4d;
|
||||
/* Appliquer une police moderne */
|
||||
html {
|
||||
font-family: "Quicksand", sans-serif !important;
|
||||
}
|
||||
|
||||
/* Title */
|
||||
.page-title {
|
||||
text-align: center;
|
||||
font-size: 28px;
|
||||
color: #ff4d4d;
|
||||
|
||||
/* Titre du formulaire */
|
||||
h1 {
|
||||
font-size: 26px;
|
||||
color: #db5559;
|
||||
margin-bottom: 20px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
letter-spacing: 1.2px;
|
||||
}
|
||||
|
||||
/* Form styles */
|
||||
/* Formulaire */
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* Groupes de champs */
|
||||
.form-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Labels */
|
||||
label {
|
||||
font-weight: bold;
|
||||
color: #ff4d4d;
|
||||
margin-bottom: 5px;
|
||||
color: #db5559;
|
||||
margin-bottom: 6px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
/* Champs de saisie */
|
||||
input[type="text"],
|
||||
input[type="email"],
|
||||
input[type="number"],
|
||||
textarea,
|
||||
select {
|
||||
padding: 10px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
padding: 12px;
|
||||
border: 2px solid #ddd;
|
||||
border-radius: 6px;
|
||||
font-size: 16px;
|
||||
color: #333;
|
||||
transition: border-color 0.3s ease-in-out;
|
||||
transition: all 0.3s ease-in-out;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
input[type="text"]:focus,
|
||||
input[type="email"]:focus,
|
||||
input[type="number"]:focus,
|
||||
input:focus,
|
||||
textarea:focus,
|
||||
select:focus {
|
||||
border-color: #ff4d4d;
|
||||
border-color: #db5559;
|
||||
outline: none;
|
||||
box-shadow: 0 0 5px rgba(219, 85, 89, 0.5);
|
||||
}
|
||||
|
||||
/* Submit button */
|
||||
/* Bouton d'envoi */
|
||||
button {
|
||||
background-color: #ff4d4d;
|
||||
background-color: #db5559;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
padding: 12px 20px;
|
||||
padding: 14px;
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
font-size: 16px;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
cursor: pointer;
|
||||
text-transform: uppercase;
|
||||
transition: background-color 0.3s ease-in-out;
|
||||
transition: all 0.3s ease-in-out;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-color: #e60000;
|
||||
background-color: #b52b31;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
.actions {
|
||||
/* Bouton de retour */
|
||||
#container_modal a {
|
||||
display: inline-block;
|
||||
margin-top: 20px;
|
||||
padding: 12px 20px;
|
||||
background-color: transparent;
|
||||
color: #db5559;
|
||||
border: 2px solid #db5559;
|
||||
border-radius: 6px;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.actions a {
|
||||
text-decoration: none;
|
||||
color: #ff4d4d;
|
||||
font-weight: bold;
|
||||
transition: color 0.3s ease-in-out;
|
||||
transition: all 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.actions a:hover {
|
||||
color: #e60000;
|
||||
#container_modal a:hover {
|
||||
background-color: #db5559;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Error messages */
|
||||
/* Messages d'erreur */
|
||||
.error-message {
|
||||
color: #d9534f;
|
||||
font-size: 14px;
|
||||
@ -107,10 +109,9 @@ button:hover {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Empty space below */
|
||||
/* Espacement supplémentaire */
|
||||
body::after {
|
||||
content: '';
|
||||
height: 20px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
127
public/css/Plats/plats.css
Normal file
127
public/css/Plats/plats.css
Normal file
@ -0,0 +1,127 @@
|
||||
/* Title */
|
||||
h1 {
|
||||
text-align: center;
|
||||
font-size: 42px;
|
||||
color: #b03a2e;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
/* Menu Grid */
|
||||
.menu-container {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); /* 3 max par ligne */
|
||||
gap: 20px;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* Menu Card */
|
||||
.menu-card {
|
||||
background: white;
|
||||
padding: 20px;
|
||||
border-radius: 15px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
|
||||
text-align: center;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
/* Plat Name */
|
||||
.menu-card h2 {
|
||||
font-size: 28px;
|
||||
color: #b03a2e;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Description */
|
||||
.menu-card p {
|
||||
font-size: 18px;
|
||||
color: #555;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
/* Price */
|
||||
.menu-card .price {
|
||||
font-size: 22px;
|
||||
font-weight: bold;
|
||||
color: #388E3C;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
.menu-card .actions {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
/* Styles des boutons Modifier et Supprimer */
|
||||
.menu-card .actions a,
|
||||
.menu-card .actions button {
|
||||
text-decoration: none;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
padding: 10px 15px;
|
||||
border-radius: 8px;
|
||||
transition: all 0.3s ease-in-out;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: inline-block; /* Pour que le bouton suppr ait le même comportement qu'un lien */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Modifier */
|
||||
.menu-card .edit {
|
||||
background-color: #ffb74d;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menu-card .edit:hover {
|
||||
background-color: #ffa726;
|
||||
}
|
||||
|
||||
/* Supprimer */
|
||||
.menu-card .delete {
|
||||
background-color: #d32f2f;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menu-card .delete:hover {
|
||||
background-color: #c62828;
|
||||
}
|
||||
|
||||
|
||||
.menu-card .edit {
|
||||
background-color: #ffb74d;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menu-card .edit:hover {
|
||||
background-color: #ffa726;
|
||||
}
|
||||
|
||||
.menu-card .delete {
|
||||
background-color: #d32f2f;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.menu-card .delete:hover {
|
||||
background-color: #c62828;
|
||||
}
|
||||
|
||||
/* Button for Adding New Dish */
|
||||
.add-menu {
|
||||
display: block;
|
||||
text-align: center;
|
||||
background-color: #b03a2e;
|
||||
color: white;
|
||||
padding: 15px;
|
||||
font-size: 20px;
|
||||
margin-top: 30px;
|
||||
border-radius: 10px;
|
||||
width: 300px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.add-menu:hover {
|
||||
background-color: #922b21;
|
||||
}
|
84
public/css/Reservations/reservationCalendar.css
Normal file
84
public/css/Reservations/reservationCalendar.css
Normal file
@ -0,0 +1,84 @@
|
||||
.calendar {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.calendar-header {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.calendar-day {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.calendar-body {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.calendar-column {
|
||||
flex: 1;
|
||||
min-height: 400px;
|
||||
border: 1px solid #ddd;
|
||||
padding: 5px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.reservation {
|
||||
margin: 5px 0;
|
||||
padding: 5px;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* Conteneur pour les boutons de navigation */
|
||||
.calendar-nav {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
/* Boutons de navigation (Semaine précédente / Semaine suivante) */
|
||||
.calendar-nav a {
|
||||
padding: 10px 15px;
|
||||
text-decoration: none;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
background-color: #db5559;
|
||||
border-radius: 5px;
|
||||
transition: background-color 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.calendar-nav a:hover {
|
||||
background-color: #b52b31;
|
||||
}
|
||||
|
||||
/* Conteneur pour le bouton d'ajout */
|
||||
.add-reservation {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* Bouton pour créer une réservation */
|
||||
.add-reservation a {
|
||||
padding: 12px 20px;
|
||||
text-decoration: none;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
background-color: #4CAF50;
|
||||
border-radius: 8px;
|
||||
transition: background-color 0.3s ease-in-out;
|
||||
}
|
||||
|
||||
.add-reservation a:hover {
|
||||
background-color: #388E3C;
|
||||
}
|
||||
|
@ -1,19 +1,22 @@
|
||||
<?php
|
||||
|
||||
// src/Controller/ClientsController.php
|
||||
|
||||
namespace App\Controller;
|
||||
|
||||
use App\Entity\Clients;
|
||||
use App\Entity\Reductions;
|
||||
use App\Form\ClientsType;
|
||||
use App\Repository\ClientsRepository;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
use Symfony\Component\Routing\Annotation\Route;
|
||||
|
||||
#[Route('/clients')]
|
||||
final class ClientsController extends AbstractController
|
||||
{
|
||||
|
||||
#[Route(name: 'app_clients_index', methods: ['GET'])]
|
||||
public function index(ClientsRepository $clientsRepository): Response
|
||||
{
|
||||
@ -30,6 +33,12 @@ final class ClientsController extends AbstractController
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
|
||||
$montantTotal = $client->getTotalDepense();
|
||||
if($montantTotal > 1000){
|
||||
$this->appliquerReductionEtCreerSiNecessaire($client, $entityManager);
|
||||
}
|
||||
|
||||
$entityManager->persist($client);
|
||||
$entityManager->flush();
|
||||
|
||||
@ -42,7 +51,6 @@ final class ClientsController extends AbstractController
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
#[Route('/{id}/edit', name: 'app_clients_edit', methods: ['GET', 'POST'])]
|
||||
public function edit(Request $request, Clients $client, EntityManagerInterface $entityManager): Response
|
||||
{
|
||||
@ -50,6 +58,13 @@ final class ClientsController extends AbstractController
|
||||
$form->handleRequest($request);
|
||||
|
||||
if ($form->isSubmitted() && $form->isValid()) {
|
||||
|
||||
$montantTotal = $client->getTotalDepense();
|
||||
if($montantTotal > 1000){
|
||||
$this->appliquerReductionEtCreerSiNecessaire($client, $entityManager);
|
||||
}
|
||||
|
||||
|
||||
$entityManager->flush();
|
||||
|
||||
return $this->redirectToRoute('app_clients_index', [], Response::HTTP_SEE_OTHER);
|
||||
@ -62,13 +77,62 @@ final class ClientsController extends AbstractController
|
||||
}
|
||||
|
||||
#[Route('/{id}', name: 'app_clients_delete', methods: ['POST'])]
|
||||
public function delete(Request $request, Clients $client, EntityManagerInterface $entityManager, int $id, ): Response
|
||||
public function delete(Request $request, Clients $client, EntityManagerInterface $entityManager): Response
|
||||
{
|
||||
if ($this->isCsrfTokenValid('delete'.$client->getId(), $request->getPayload()->getString('_token'))) {
|
||||
if ($this->isCsrfTokenValid('delete'.$client->getId(), $request->request->get('_token'))) {
|
||||
$entityManager->remove($client);
|
||||
$entityManager->flush();
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('app_clients_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
// Méthode pour appliquer ou créer une réduction pour un client
|
||||
// src/Controller/ClientsController.php
|
||||
|
||||
private function appliquerReductionEtCreerSiNecessaire(Clients $client, EntityManagerInterface $entityManager)
|
||||
{
|
||||
$montantTotal = $client->getTotalDepense();
|
||||
$entityManager->persist($client);
|
||||
|
||||
$reductions = $entityManager->getRepository(Reductions::class)
|
||||
->createQueryBuilder('r')
|
||||
->where('r.montant_min <= :montantTotal')
|
||||
->andWhere('r.actif = :actif')
|
||||
->andWhere('r.DateDebut <= :currentDate')
|
||||
->andWhere('r.DateFin >= :currentDate')
|
||||
->setParameter('montantTotal', $montantTotal)
|
||||
->setParameter('actif', true)
|
||||
->setParameter('currentDate', new \DateTime())
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
$newReduction = new Reductions();
|
||||
|
||||
if ($montantTotal >= 2000) {
|
||||
$montantMin = 2000;
|
||||
$pourcentage = 10;
|
||||
} elseif ($montantTotal >= 1000) {
|
||||
$montantMin = 1000;
|
||||
$pourcentage = 5;
|
||||
}
|
||||
|
||||
$newReduction->setPourcentage($pourcentage)
|
||||
->setMontantMin($montantMin)
|
||||
->setDateDebut(new \DateTime())
|
||||
->setDateFin((new \DateTime())->modify('+1 year'))
|
||||
->setActif(true)
|
||||
->setClient($client);
|
||||
|
||||
$entityManager->persist($newReduction);
|
||||
$entityManager->flush();
|
||||
|
||||
if (!$client->getReductions()->contains($newReduction)) {
|
||||
$client->addReduction($newReduction);
|
||||
}
|
||||
|
||||
$entityManager->flush();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ final class ReservationsController extends AbstractController
|
||||
$entityManager->persist($reservation);
|
||||
$entityManager->flush();
|
||||
|
||||
return $this->redirectToRoute('app_reservations_index', [], Response::HTTP_SEE_OTHER);
|
||||
return $this->redirectToRoute('calendar_week', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
return $this->render('reservations/new.html.twig', [
|
||||
@ -71,4 +71,29 @@ final class ReservationsController extends AbstractController
|
||||
|
||||
return $this->redirectToRoute('app_reservations_index', [], Response::HTTP_SEE_OTHER);
|
||||
}
|
||||
|
||||
#[Route('/calendar/{year}/{week}', name: 'calendar_week', requirements: ['year' => '\d+', 'week' => '\d+'])]
|
||||
public function calendar(ReservationsRepository $reservationsRepository, int $year = null, int $week = null): Response
|
||||
{
|
||||
if ($year === null || $week === null) {
|
||||
$currentDate = new \DateTime();
|
||||
$year = (int) $currentDate->format('Y');
|
||||
$week = (int) $currentDate->format('W');
|
||||
}
|
||||
|
||||
setlocale(LC_TIME, 'fr_FR.UTF-8');
|
||||
$startDate = new \DateTime();
|
||||
$startDate->setISODate($year, $week);
|
||||
$endDate = (clone $startDate)->modify('+6 days');
|
||||
|
||||
$reservations = $reservationsRepository->findByDateRange($startDate, $endDate);
|
||||
|
||||
// dd($reservations);
|
||||
|
||||
return $this->render('reservations/index.html.twig', [
|
||||
'reservations' => $reservations,
|
||||
'startDate' => $startDate, // Passe startDate
|
||||
'endDate' => $endDate, // Passe endDate
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
@ -40,10 +40,17 @@ class Clients
|
||||
#[ORM\ManyToMany(targetEntity: Commandes::class, mappedBy: 'Client')]
|
||||
private Collection $commandes;
|
||||
|
||||
#[ORM\Column]
|
||||
private ?float $totalDepense = null;
|
||||
|
||||
#[ORM\OneToMany(targetEntity: Reductions::class, mappedBy: 'client', cascade: ['persist', 'remove'])]
|
||||
private Collection $reductions;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->tables = new ArrayCollection();
|
||||
$this->commandes = new ArrayCollection();
|
||||
$this->reductions = new ArrayCollection();
|
||||
}
|
||||
|
||||
public function getId(): ?int
|
||||
@ -149,4 +156,60 @@ class Clients
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
public function getTotalDepense(): ?float
|
||||
{
|
||||
return $this->totalDepense;
|
||||
}
|
||||
|
||||
public function setTotalDepense(float $totalDepense): static
|
||||
{
|
||||
$this->totalDepense = $totalDepense;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
// Dans l'entité Clients
|
||||
public function appliquerReduction(): void
|
||||
{
|
||||
$montantTotal = $this->getTotalDepense();
|
||||
|
||||
// Vérifie s'il y a des réductions valides disponibles
|
||||
$reductions = $this->getReductions(); // Récupérer toutes les réductions du client
|
||||
|
||||
foreach ($reductions as $reduction) {
|
||||
// Vérifie si la réduction est valide (date de validité et montant minimum)
|
||||
if ($reduction->getDateDebut() <= new \DateTime() && $reduction->getDateFin() >= new \DateTime()) {
|
||||
if ($montantTotal >= $reduction->getMontantMin()) {
|
||||
// Applique la réduction en pourcentage au total des dépenses
|
||||
$reductionMontant = ($montantTotal * $reduction->getPourcentage()) / 100;
|
||||
$nouveauTotal = $montantTotal - $reductionMontant; // Nouveau montant après réduction
|
||||
$this->setTotalDepense($nouveauTotal); // Mise à jour du total des dépenses du client
|
||||
|
||||
// Met à jour l'objet client avec la réduction
|
||||
break; // Si une réduction a été appliquée, on arrête
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function getReductions(): Collection
|
||||
{
|
||||
return $this->reductions;
|
||||
}
|
||||
|
||||
public function addReduction(Reductions $reduction): static
|
||||
{
|
||||
if (!$this->reductions->contains($reduction)) {
|
||||
$this->reductions->add($reduction);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removeReduction(Reductions $reduction): static
|
||||
{
|
||||
$this->reductions->removeElement($reduction);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
@ -39,9 +39,6 @@ class Plats
|
||||
#[ORM\ManyToMany(targetEntity: Commandes::class, inversedBy: 'plats')]
|
||||
private Collection $Commande;
|
||||
|
||||
#[ORM\ManyToOne(inversedBy: 'plats')]
|
||||
private ?Reductions $Reduction = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->Commande = new ArrayCollection();
|
||||
@ -147,16 +144,4 @@ class Plats
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getReduction(): ?Reductions
|
||||
{
|
||||
return $this->Reduction;
|
||||
}
|
||||
|
||||
public function setReduction(?Reductions $Reduction): static
|
||||
{
|
||||
$this->Reduction = $Reduction;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
@ -16,88 +16,30 @@ class Reductions
|
||||
#[ORM\Column]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $Description = null;
|
||||
#[ORM\Column]
|
||||
private ?int $pourcentage = null;
|
||||
|
||||
#[ORM\Column]
|
||||
private ?float $Prix = null;
|
||||
private ?int $montant_min = null;
|
||||
|
||||
#[ORM\Column]
|
||||
private ?int $Pourcentage = null;
|
||||
|
||||
#[ORM\Column(length: 255)]
|
||||
private ?string $MontantFixe = null;
|
||||
|
||||
private ?bool $actif = null;
|
||||
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
|
||||
private ?\DateTimeInterface $DateDebut = null;
|
||||
|
||||
#[ORM\Column(type: Types::DATETIME_MUTABLE)]
|
||||
private ?\DateTimeInterface $DateFin = null;
|
||||
|
||||
/**
|
||||
* @var Collection<int, Plats>
|
||||
*/
|
||||
#[ORM\OneToMany(targetEntity: Plats::class, mappedBy: 'Reduction')]
|
||||
private Collection $plats;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->plats = new ArrayCollection();
|
||||
}
|
||||
#[ORM\ManyToOne(targetEntity: Clients::class, inversedBy: 'reductions')]
|
||||
#[ORM\JoinColumn(nullable: false)]
|
||||
private ?Clients $client = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getDescription(): ?string
|
||||
{
|
||||
return $this->Description;
|
||||
}
|
||||
|
||||
public function setDescription(string $Description): static
|
||||
{
|
||||
$this->Description = $Description;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPrix(): ?float
|
||||
{
|
||||
return $this->Prix;
|
||||
}
|
||||
|
||||
public function setPrix(float $Prix): static
|
||||
{
|
||||
$this->Prix = $Prix;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getPourcentage(): ?int
|
||||
{
|
||||
return $this->Pourcentage;
|
||||
}
|
||||
|
||||
public function setPourcentage(int $Pourcentage): static
|
||||
{
|
||||
$this->Pourcentage = $Pourcentage;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getMontantFixe(): ?string
|
||||
{
|
||||
return $this->MontantFixe;
|
||||
}
|
||||
|
||||
public function setMontantFixe(string $MontantFixe): static
|
||||
{
|
||||
$this->MontantFixe = $MontantFixe;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDateDebut(): ?\DateTimeInterface
|
||||
{
|
||||
return $this->DateDebut;
|
||||
@ -122,33 +64,50 @@ class Reductions
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Collection<int, Plats>
|
||||
*/
|
||||
public function getPlats(): Collection
|
||||
public function getPourcentage(): ?int
|
||||
{
|
||||
return $this->plats;
|
||||
return $this->pourcentage;
|
||||
}
|
||||
|
||||
public function addPlat(Plats $plat): static
|
||||
public function setPourcentage(int $pourcentage): static
|
||||
{
|
||||
if (!$this->plats->contains($plat)) {
|
||||
$this->plats->add($plat);
|
||||
$plat->setReduction($this);
|
||||
}
|
||||
$this->pourcentage = $pourcentage;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function removePlat(Plats $plat): static
|
||||
public function getMontantMin(): ?int
|
||||
{
|
||||
if ($this->plats->removeElement($plat)) {
|
||||
// set the owning side to null (unless already changed)
|
||||
if ($plat->getReduction() === $this) {
|
||||
$plat->setReduction(null);
|
||||
}
|
||||
}
|
||||
return $this->montant_min;
|
||||
}
|
||||
|
||||
public function setMontantMin(int $montant_min): static
|
||||
{
|
||||
$this->montant_min = $montant_min;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function isActif(): ?bool
|
||||
{
|
||||
return $this->actif;
|
||||
}
|
||||
|
||||
public function setActif(bool $actif): static
|
||||
{
|
||||
$this->actif = $actif;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getClient(): ?Clients
|
||||
{
|
||||
return $this->client;
|
||||
}
|
||||
|
||||
public function setClient(?Clients $client): static
|
||||
{
|
||||
$this->client = $client;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ class Reservations
|
||||
return $this->tables;
|
||||
}
|
||||
|
||||
public function setTable(?Tables $tables): static
|
||||
public function setTables(?Tables $tables): static
|
||||
{
|
||||
$this->tables = $tables;
|
||||
|
||||
|
@ -94,7 +94,7 @@ class Tables
|
||||
{
|
||||
if (!$this->reservations->contains($reservation)) {
|
||||
$this->reservations->add($reservation);
|
||||
$reservation->setTable($this);
|
||||
$reservation->setTables($this);
|
||||
}
|
||||
|
||||
return $this;
|
||||
@ -105,7 +105,7 @@ class Tables
|
||||
if ($this->reservations->removeElement($reservation)) {
|
||||
// set the owning side to null (unless already changed)
|
||||
if ($reservation->getTables() === $this) {
|
||||
$reservation->setTable(null);
|
||||
$reservation->setTables(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ namespace App\Form;
|
||||
|
||||
use App\Entity\Clients;
|
||||
use App\Entity\Commandes;
|
||||
use App\Entity\Reductions;
|
||||
use App\Entity\Tables;
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
@ -25,7 +26,7 @@ class ClientsType extends AbstractType
|
||||
'multiple' => true,
|
||||
'expanded' => true,
|
||||
])
|
||||
|
||||
->add('totalDepense')
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -27,10 +27,6 @@ class PlatsType extends AbstractType
|
||||
'multiple' => true,
|
||||
'expanded' => true,
|
||||
])
|
||||
->add('Reduction', EntityType::class, [
|
||||
'class' => Reductions::class,
|
||||
'choice_label' => 'description',
|
||||
])
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,10 @@
|
||||
|
||||
namespace App\Form;
|
||||
|
||||
use App\Entity\Clients;
|
||||
use App\Entity\Reductions;
|
||||
use http\Client;
|
||||
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
|
||||
use Symfony\Component\Form\AbstractType;
|
||||
use Symfony\Component\Form\FormBuilderInterface;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
@ -12,16 +15,19 @@ class ReductionsType extends AbstractType
|
||||
public function buildForm(FormBuilderInterface $builder, array $options): void
|
||||
{
|
||||
$builder
|
||||
->add('Description')
|
||||
->add('Prix')
|
||||
->add('Pourcentage')
|
||||
->add('MontantFixe')
|
||||
->add('Taux')
|
||||
->add('DateDebut', null, [
|
||||
'widget' => 'single_text',
|
||||
])
|
||||
->add('DateFin', null, [
|
||||
'widget' => 'single_text',
|
||||
])
|
||||
->add('client', EntityType::class, [
|
||||
'class' => Clients::class,
|
||||
'choice_label' => 'nom',
|
||||
'multiple' => false,
|
||||
'expanded' => true,
|
||||
])
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ class ReservationsType extends AbstractType
|
||||
])
|
||||
->add('utilisateurs', EntityType::class, [
|
||||
'class' => Utilisateurs::class,
|
||||
'choice_label' => 'id',
|
||||
'choice_label' => 'prenom',
|
||||
'multiple' => true,
|
||||
'expanded' => true,
|
||||
])
|
||||
|
@ -40,4 +40,19 @@ class ReservationsRepository extends ServiceEntityRepository
|
||||
// ->getOneOrNullResult()
|
||||
// ;
|
||||
// }
|
||||
|
||||
// src/Repository/ReservationRepository.php
|
||||
|
||||
public function findByDateRange(\DateTime $startDate, \DateTime $endDate): array
|
||||
{
|
||||
return $this->createQueryBuilder('r')
|
||||
->where('r.DateHeure BETWEEN :start AND :end')
|
||||
->setParameter('start', $startDate->format('Y-m-d 00:00:00'))
|
||||
->setParameter('end', $endDate->format('Y-m-d 23:59:59'))
|
||||
->orderBy('r.DateHeure', 'ASC')
|
||||
->getQuery()
|
||||
->getResult();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -12,9 +12,11 @@
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ asset('css/ControllerVues/list.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Plats/plats.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Index/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Compte/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/GestionUtilisateurs/GestionUtilisateurs.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Reservations/reservationCalendar.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
{% endblock %}
|
||||
|
||||
{# {% block javascripts %}#}
|
||||
@ -100,7 +102,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/reservations" class="btn-custom icon-container">
|
||||
<a href="/reservations/calendar" class="btn-custom icon-container">
|
||||
<i class="icon-medium"> {{ ux_icon('fluent-mdl2:reservation-orders') }}</i>
|
||||
<span>Réservation</span>
|
||||
</a>
|
||||
|
@ -2,60 +2,59 @@
|
||||
|
||||
{% block title %}Client index{% endblock %}
|
||||
|
||||
{% block head %}
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>⚫️</text><text y=%221.3em%22 x=%220.2em%22 font-size=%2276%22 fill=%22%23fff%22>sf</text></svg>">
|
||||
<link href="https://fonts.cdnfonts.com/css/brittany-signature" rel="stylesheet">
|
||||
</head>
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ asset('css/ControllerVues/list.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Index/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Compte/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/GestionUtilisateurs/GestionUtilisateurs.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
{% endblock %}
|
||||
|
||||
{% block container_modal %}
|
||||
<div id="container_modal">
|
||||
<h1>Clients index</h1>
|
||||
<div id="container_modal">
|
||||
<h1>Clients index</h1>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Prenom</th>
|
||||
<th>Nom</th>
|
||||
<th>Email</th>
|
||||
<th>Telephone</th>
|
||||
<th>actions</th>
|
||||
<th>Depense</th>
|
||||
<th>Réduction Appliquée</th> <!-- Nouvelle colonne -->
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for client in clients %}
|
||||
<tr>
|
||||
<td>{{ client.id }}</td>
|
||||
<td>{{ client.Prenom }}</td>
|
||||
<td>{{ client.Nom }}</td>
|
||||
<td>{{ client.Email }}</td>
|
||||
<td>{{ client.Telephone }}</td>
|
||||
<td>
|
||||
<form method="post" action="{{ path('app_clients_delete', {'id': client.id}) }}" onsubmit="return confirm('Es-tu sur de vouloir le supprimer ?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ client.id) }}">
|
||||
{{ include('clients/_delete_form.html.twig') }}
|
||||
</form>
|
||||
<a href="{{ path('app_clients_edit', {'id': client.id}) }}">Modifier</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="6">no records found</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for client in clients %}
|
||||
<tr>
|
||||
<td>{{ client.id }}</td>
|
||||
<td>{{ client.Prenom }}</td>
|
||||
<td>{{ client.Nom }}</td>
|
||||
<td>{{ client.Email }}</td>
|
||||
<td>{{ client.Telephone }}</td>
|
||||
<td>{{ client.totalDepense }}</td>
|
||||
|
||||
<a href="{{ path('app_clients_new') }}">Créer un nouveau client</a>
|
||||
</div>
|
||||
<td>
|
||||
{% if client.reductions|length > 0 %}
|
||||
{% for reduction in client.reductions %}
|
||||
<span>Réduction de {{ reduction.pourcentage }}% - Valide jusqu'à {{ reduction.DateFin|date('d/m/Y') }}</span><br>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
Aucune réduction
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<form method="post" action="{{ path('app_clients_delete', {'id': client.id}) }}" onsubmit="return confirm('Es-tu sûr de vouloir le supprimer ?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ client.id) }}">
|
||||
{{ include('clients/_delete_form.html.twig') }}
|
||||
</form>
|
||||
<a href="{{ path('app_clients_edit', {'id': client.id}) }}">Modifier</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="8">Aucun client trouvé</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a href="{{ path('app_clients_new') }}">Créer un nouveau client</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -13,6 +13,7 @@
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ asset('css/ControllerVues/list.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/ControllerVues/edit.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Plats/plats.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Index/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Compte/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/GestionUtilisateurs/GestionUtilisateurs.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
@ -21,48 +22,28 @@
|
||||
{% block container_modal %}
|
||||
|
||||
<div id="container_modal">
|
||||
<h1>Plats index</h1>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Nom</th>
|
||||
<th>Description</th>
|
||||
<th>Prix</th>
|
||||
<th>Categorie</th>
|
||||
<th>Statut</th>
|
||||
<th>Nb_de_commande</th>
|
||||
<th>actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<div class="menu-container">
|
||||
{% for plat in plats %}
|
||||
<tr>
|
||||
<td>{{ plat.id }}</td>
|
||||
<td>{{ plat.Nom }}</td>
|
||||
<td>{{ plat.Description }}</td>
|
||||
<td>{{ plat.Prix }}</td>
|
||||
<td>{{ plat.Categorie }}</td>
|
||||
<td>{{ plat.Statut ? 'Yes' : 'No' }}</td>
|
||||
<td>{{ plat.NbDeCommande }}</td>
|
||||
<td>
|
||||
<form method="post" action="{{ path('app_plats_delete', {'id': plat.id}) }}" onsubmit="return confirm('Es-tu sur de vouloir le supprimer ?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ plat.id) }}">
|
||||
{{ include('plats/_delete_form.html.twig') }}
|
||||
</form>
|
||||
<a href="{{ path('app_plats_edit', {'id': plat.id}) }}">Modifier</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="8">Aucun enregistrement trouvé</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="menu-card">
|
||||
<h2>{{ plat.Nom }}</h2>
|
||||
<p>{{ plat.Description }}</p>
|
||||
<p class="price">{{ plat.Prix }}€</p>
|
||||
<div class="actions">
|
||||
<a href="{{ path('app_plats_edit', {'id': plat.id}) }}" class="edit">Modifier</a>
|
||||
|
||||
<form method="post" action="{{ path('app_plats_delete', {'id': plat.id}) }}" onsubmit="return confirm('Es-tu sûr de vouloir le supprimer ?');" style="display:inline;">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ plat.id) }}">
|
||||
<button type="submit" class="delete">Supprimer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<p>Aucun plat disponible.</p>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<a href="{{ path('app_plats_new') }}" class="add-menu">Créer un menu</a>
|
||||
|
||||
<a href="{{ path('app_plats_new') }}">Créer un menu</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -27,12 +27,11 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>Description</th>
|
||||
<th>Prix</th>
|
||||
<th>Pourcentage</th>
|
||||
<th>MontantFixe</th>
|
||||
<th>Montant Minimum</th>
|
||||
<th>DateDebut</th>
|
||||
<th>DateFin</th>
|
||||
<th>Client</th>
|
||||
<th>actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -40,18 +39,16 @@
|
||||
{% for reduction in reductions %}
|
||||
<tr>
|
||||
<td>{{ reduction.id }}</td>
|
||||
<td>{{ reduction.Description }}</td>
|
||||
<td>{{ reduction.Prix }}</td>
|
||||
<td>{{ reduction.Pourcentage }}</td>
|
||||
<td>{{ reduction.MontantFixe }}</td>
|
||||
<td>{{ reduction.DateDebut ? reduction.DateDebut|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ reduction.DateFin ? reduction.DateFin|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ reduction.pourcentage }}%</td>
|
||||
<td>{{ reduction.montantMin }} €</td>
|
||||
<td>{{ reduction.DateDebut ? reduction.DateDebut|date('d/m/Y H:i:s') : 'Non spécifié' }}</td>
|
||||
<td>{{ reduction.DateFin ? reduction.DateFin|date('d/m/Y H:i:s') : 'Non spécifié' }}</td>
|
||||
<td>{{ reduction.client.nom }}</td>
|
||||
<td>
|
||||
<form method="post" action="{{ path('app_reductions_delete', {'id': reduction.id}) }}" onsubmit="return confirm('Es-tu sur de vouloir le supprimer ?'); ">
|
||||
<form method="post" action="{{ path('app_reductions_delete', {'id': reduction.id}) }}" onsubmit="return confirm('Êtes-vous sûr de vouloir supprimer cette réduction ?'); ">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ reduction.id) }}">
|
||||
{{ include('reductions/_delete_form.html.twig') }}
|
||||
<button type="submit" class="btn btn-danger">Supprimer</button>
|
||||
</form>
|
||||
<a href="{{ path('app_reductions_edit', {'id': reduction.id}) }}">Modifier</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
@ -61,8 +58,6 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a href="{{ path('app_reductions_new') }}">Créer une réduction</a>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
@ -13,45 +13,50 @@
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ asset('css/ControllerVues/list.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Index/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Reservations/reservationCalendar.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/Compte/index.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
<link rel="stylesheet" href="{{ asset('css/GestionUtilisateurs/GestionUtilisateurs.css') }}"> <!-- Ajout du fichier CSS -->
|
||||
{% endblock %}
|
||||
|
||||
{% block container_modal %}
|
||||
<div id="container_modal">
|
||||
<h1>Reservations index</h1>
|
||||
<div class="calendar-nav">
|
||||
<a href="{{ path('calendar_week', { year: startDate|date('Y'), week: startDate|date('W') - 1 }) }}">← Semaine précédente</a>
|
||||
<a href="{{ path('calendar_week', { year: startDate|date('Y'), week: startDate|date('W') + 1 }) }}">Semaine suivante →</a>
|
||||
</div>
|
||||
|
||||
<div class="calendar">
|
||||
<div class="calendar-header">
|
||||
{% for i in 0..6 %}
|
||||
<div class="calendar-day">
|
||||
{{ (startDate|date_modify("+" ~ i ~ " days"))|date('D d/m') }}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="calendar-body">
|
||||
{% for i in 0..6 %}
|
||||
<div class="calendar-column">
|
||||
{% set currentDate = startDate|date_modify("+" ~ i ~ " days") %}
|
||||
|
||||
{% for reservation in reservations %}
|
||||
{% set res_date = reservation.dateHeure|date('Y-m-d') %}
|
||||
{% set res_time = reservation.dateHeure|date('H:i') %}
|
||||
|
||||
{% if res_date == currentDate|date('Y-m-d') %}
|
||||
<div class="reservation" style="background-color: lightblue;">
|
||||
{{ res_time }} - {{ reservation.nbdeprsn }} pers.
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="add-reservation">
|
||||
<a href="{{ path('app_reservations_new') }}">+ Ajouter une réservation</a>
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Id</th>
|
||||
<th>DateHeure</th>
|
||||
<th>Nb_de_prsn</th>
|
||||
<th>actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for reservation in reservations %}
|
||||
<tr>
|
||||
<td>{{ reservation.id }}</td>
|
||||
<td>{{ reservation.DateHeure ? reservation.DateHeure|date('Y-m-d H:i:s') : '' }}</td>
|
||||
<td>{{ reservation.NbDePrsn }}</td>
|
||||
<td>
|
||||
<form method="post" action="{{ path('app_reservations_delete', {'id': reservation.id}) }}" onsubmit="return confirm('Es-tu sur de vouloir le supprimer ?');">
|
||||
<input type="hidden" name="_token" value="{{ csrf_token('delete' ~ reservation.id) }}">
|
||||
{{ include('reservations/_delete_form.html.twig') }}
|
||||
</form>
|
||||
<a href="{{ path('app_reservations_edit', {'id': reservation.id}) }}">Modifier</a>
|
||||
</td>
|
||||
</tr>
|
||||
{% else %}
|
||||
<tr>
|
||||
<td colspan="4">Aucun enregistrement trouvé</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a href="{{ path('app_reservations_new') }}">Créer une réservation</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
@ -24,6 +24,6 @@
|
||||
|
||||
{{ include('reservations/_form.html.twig') }}
|
||||
|
||||
<a href="{{ path('app_reservations_index') }}">Retour à la liste</a>
|
||||
<a href="{{ path('calendar_week') }}">Retour à la liste</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
Loading…
x
Reference in New Issue
Block a user