feat(Product): Ajoute la publication des produits et les périodes bloquées

Ajoute la possibilité de publier ou masquer un produit.
Permet de bloquer des périodes pour un produit.
Corrige des bugs liés à la suppression des produits du panier.
Mise à jour de l'affichage du calendrier pour les blocages.
```
This commit is contained in:
Serreau Jovann
2026-02-03 14:53:11 +01:00
parent 6c6324addc
commit d993a545d9
14 changed files with 850 additions and 25 deletions

View File

@@ -171,7 +171,7 @@ class ReserverController extends AbstractController
#[Route('/', name: 'reservation')]
public function revervation(FormulesRepository $formulesRepository, ProductRepository $productRepository): Response
{
$products = $productRepository->findBy(['category' => '3-15 ans'], ['updatedAt' => 'DESC'], 3);
$products = $productRepository->findBy(['category' => '3-15 ans', 'isPublish' => true], ['updatedAt' => 'DESC'], 3);
$formules = $formulesRepository->findBy(['isPublish' => true], ['pos' => 'ASC'], 3);
return $this->render('revervation/home.twig', [
@@ -339,15 +339,14 @@ class ReserverController extends AbstractController
}
}
if (!is_array($ids)) {
$ids = [];
}
$products = [];
if (!empty($ids)) {
$products = $productRepository->findBy(['id' => $ids]);
}
$foundIds = array_map(fn($p) => $p->getId(), $products);
$removedIds = array_values(array_diff($ids, $foundIds));
$items = [];
$totalHT = 0;
$tvaEnabled = isset($_ENV['TVA_ENABLED']) && $_ENV['TVA_ENABLED'] === "true";
@@ -382,6 +381,7 @@ class ReserverController extends AbstractController
'start_date' => $startStr,
'end_date' => $endStr,
'products' => $items,
'unavailable_products_ids' => $removedIds,
'total' => [
'totalHT' => $totalHT,
'totalTva' => $totalTva,
@@ -431,7 +431,8 @@ class ReserverController extends AbstractController
OrderSessionRepository $repository,
ProductRepository $productRepository,
UploaderHelper $uploaderHelper,
ProductReserveRepository $productReserveRepository
ProductReserveRepository $productReserveRepository,
EntityManagerInterface $em
): Response {
$session = $repository->findOneBy(['uuid' => $sessionId]);
if (!$session) {
@@ -470,6 +471,14 @@ class ReserverController extends AbstractController
$products = $productRepository->findBy(['id' => $ids]);
}
// Cleanup missing products from session
$foundIds = array_map(fn($p) => $p->getId(), $products);
if (count($foundIds) !== count($ids)) {
$sessionData['ids'] = $foundIds;
$session->setProducts($sessionData);
$em->flush();
}
$items = [];
$totalHT = 0;
$tvaEnabled = isset($_ENV['TVA_ENABLED']) && $_ENV['TVA_ENABLED'] === "true";
@@ -520,7 +529,8 @@ class ReserverController extends AbstractController
OrderSessionRepository $repository,
ProductRepository $productRepository,
UploaderHelper $uploaderHelper,
ProductReserveRepository $productReserveRepository // Added dependency
ProductReserveRepository $productReserveRepository, // Added dependency
EntityManagerInterface $em
): Response {
// This is the POST target for the login form, but also the GET page.
// The authenticator handles the POST. For GET, we just render the page.
@@ -561,6 +571,14 @@ class ReserverController extends AbstractController
$products = $productRepository->findBy(['id' => $ids]);
}
// Cleanup missing products from session
$foundIds = array_map(fn($p) => $p->getId(), $products);
if (count($foundIds) !== count($ids)) {
$sessionData['ids'] = $foundIds;
$session->setProducts($sessionData);
$em->flush();
}
$items = [];
$totalHT = 0;
$tvaEnabled = isset($_ENV['TVA_ENABLED']) && $_ENV['TVA_ENABLED'] === "true";
@@ -685,7 +703,7 @@ class ReserverController extends AbstractController
public function revervationCatalogue(ProductRepository $productRepository): Response
{
return $this->render('revervation/catalogue.twig', [
'products' => $productRepository->findAll(),
'products' => $productRepository->findBy(['isPublish' => true]),
'tvaEnabled' => isset($_ENV['TVA_ENABLED']) && $_ENV['TVA_ENABLED'] === "true",
]);
}
@@ -801,7 +819,7 @@ class ReserverController extends AbstractController
$customer->getName() . " " . $customer->getSurname(),
"[Ludikevent] - Code de récupération",
"mails/welcome.twig",
['account' => $customer]
['customer' => $customer]
);
$em->persist($customer);
@@ -933,7 +951,7 @@ class ReserverController extends AbstractController
foreach ($results['hits'] as $result) {
$p = $productRepository->find($result['id']);
if ($p instanceof Product) {
if ($p instanceof Product && $p->isPublish()) {
$items[] = [
'image' => $uploaderHelper->asset($p, 'imageFile') ?: "/provider/images/favicon.png",
"name" => $p->getName(),