diff --git a/migrations/Version20260213134522.php b/migrations/Version20260213134522.php
new file mode 100644
index 0000000..1e4b9c5
--- /dev/null
+++ b/migrations/Version20260213134522.php
@@ -0,0 +1,31 @@
+addSql('CREATE TABLE category (id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY (id))');
+ }
+
+ public function down(Schema $schema): void
+ {
+ // this down() migration is auto-generated, please modify it to your needs
+ $this->addSql('DROP TABLE category');
+ }
+}
diff --git a/src/Controller/Dashboard/CategoryController.php b/src/Controller/Dashboard/CategoryController.php
new file mode 100644
index 0000000..6597ffe
--- /dev/null
+++ b/src/Controller/Dashboard/CategoryController.php
@@ -0,0 +1,92 @@
+ false], methods: ['GET'])]
+ public function index(
+ CategoryRepository $categoryRepository,
+ PaginatorInterface $paginator,
+ Request $request
+ ): Response {
+ $this->appLogger->record('VIEW', 'Consultation de la page de catégorie');
+
+ foreach (['2-7 Ans','3-15 Ans','3-99 Ans','Barnums','Alimentaire','Options'] as $catName) {
+ $cat = $categoryRepository->findOneBy(['name'=>$catName]);
+ if(!$cat instanceof Category) {
+ $cat = new Category();
+ $cat->setName($catName);
+ $this->em->persist($cat);
+ }
+ $this->em->flush();
+ }
+
+ return $this->render('dashboard/category/list.twig', [
+ 'categorys' => $categoryRepository->findAll(),
+ ]);
+ }
+
+ #[Route('/add', name: 'app_crm_category_add', options: ['sitemap' => false], methods: ['GET', 'POST'])]
+ public function add(Request $request, CategoryRepository $categoryRepository): Response
+ {
+ $this->appLogger->record('VIEW', 'Consultation de la page de création catégorie');
+
+ $category = new Category();
+ $form = $this->createForm(CategoryType::class, $category);
+ $form->handleRequest($request);
+ if($form->isSubmitted() && $form->isValid()) {
+ $this->appLogger->record('VIEW', 'Création d\'une catégorie');
+ $this->em->persist($category);
+ $this->em->flush();
+ return $this->redirectToRoute('app_crm_category');
+ }
+ return $this->render('dashboard/category/add.twig', [
+ 'form' => $form->createView(),
+ ]);
+ }
+
+ #[Route('/delete/{id}', name: 'app_crm_category_delete', options: ['sitemap' => false], methods: ['GET'])]
+ public function delete(
+ ?Category $category,
+ PaginatorInterface $paginator,
+ Request $request
+ ): Response {
+ $this->appLogger->record('VIEW', 'Suppression de la catégorie '.$category->getName());
+
+ $this->em->remove($category);
+ $this->em->flush();
+ return $this->redirectToRoute('app_crm_category');
+ }
+}
diff --git a/src/Controller/ReserverController.php b/src/Controller/ReserverController.php
index 4497373..e6fab23 100644
--- a/src/Controller/ReserverController.php
+++ b/src/Controller/ReserverController.php
@@ -9,6 +9,7 @@ use App\Entity\Product;
use App\Entity\ProductReserve;
use App\Entity\Promotion;
use App\Entity\SitePerformance;
+use App\Repository\CategoryRepository;
use App\Repository\CustomerRepository;
use App\Repository\CustomerTrackingRepository;
use App\Repository\FormulesRepository;
@@ -848,10 +849,11 @@ class ReserverController extends AbstractController
}
#[Route('/catalogue', name: 'reservation_catalogue')]
- public function revervationCatalogue(ProductRepository $productRepository): Response
+ public function revervationCatalogue(CategoryRepository $categoryRepository,ProductRepository $productRepository): Response
{
return $this->render('revervation/catalogue.twig', [
'products' => $productRepository->findBy(['isPublish' => true]),
+ 'categories' => $categoryRepository->findBy([],['id' => 'ASC']),
'tvaEnabled' => $this->isTvaEnabled(),
]);
}
@@ -883,11 +885,6 @@ class ReserverController extends AbstractController
]);
}
- #[Route('/comment-reserver', name: 'reservation_workflow')]
- public function revervationWorkfkow(): Response
- {
- return $this->render('revervation/workflow.twig');
- }
#[Route('/options/{id}', name: 'reservation_options_show')]
public function revervationShowOpitons(string $id, ProductRepository $productRepository): Response
diff --git a/src/Entity/Category.php b/src/Entity/Category.php
new file mode 100644
index 0000000..088add5
--- /dev/null
+++ b/src/Entity/Category.php
@@ -0,0 +1,35 @@
+id;
+ }
+
+ public function getName(): ?string
+ {
+ return $this->name;
+ }
+
+ public function setName(string $name): static
+ {
+ $this->name = $name;
+
+ return $this;
+ }
+}
diff --git a/src/Form/CategoryType.php b/src/Form/CategoryType.php
new file mode 100644
index 0000000..0e96a3d
--- /dev/null
+++ b/src/Form/CategoryType.php
@@ -0,0 +1,33 @@
+add('name', TextType::class, [
+ 'label' => 'Nom de la categorie',
+ ])
+ ;
+ }
+
+ public function configureOptions(OptionsResolver $resolver): void
+ {
+ $resolver->setDefaults([
+ 'data_class' => Category::class,
+ ]);
+ }
+}
diff --git a/src/Form/ProductType.php b/src/Form/ProductType.php
index 69ad92d..df9d068 100644
--- a/src/Form/ProductType.php
+++ b/src/Form/ProductType.php
@@ -4,6 +4,7 @@ namespace App\Form;
use App\Entity\Customer;
use App\Entity\Product;
+use App\Repository\CategoryRepository;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
@@ -17,8 +18,18 @@ use Symfony\Component\OptionsResolver\OptionsResolver;
class ProductType extends AbstractType
{
+
+ public function __construct(private readonly CategoryRepository $categoryRepository)
+ {
+
+ }
+
public function buildForm(FormBuilderInterface $builder, array $options): void
{
+ $categoryList = [];
+ foreach ($this->categoryRepository->findAll() as $category) {
+ $categoryList[$category->getName()] = $category->getName();
+ }
$builder
->add('name',TextType::class,[
'label' => 'Nom du produit',
@@ -35,14 +46,7 @@ class ProductType extends AbstractType
->add('category',ChoiceType::class,[
'label' => 'Catégorie du produit',
'required' => true,
- 'choices' => [
- '2-7 Ans' =>'2-7 ans',
- '3-15 Ans' =>'3-15 ans',
- '3-99 Ans' =>'3-99 ans',
- 'Barnums' =>'barnums',
- 'Alimentaire' =>'alimentaire',
- 'Options' =>'options',
- ]
+ 'choices' => $categoryList,
])
->add('caution',NumberType::class,[
'label' => 'Caution du produit',
diff --git a/src/Repository/CategoryRepository.php b/src/Repository/CategoryRepository.php
new file mode 100644
index 0000000..2ea6ad9
--- /dev/null
+++ b/src/Repository/CategoryRepository.php
@@ -0,0 +1,43 @@
+
+ */
+class CategoryRepository extends ServiceEntityRepository
+{
+ public function __construct(ManagerRegistry $registry)
+ {
+ parent::__construct($registry, Category::class);
+ }
+
+ // /**
+ // * @return Category[] Returns an array of Category objects
+ // */
+ // public function findByExampleField($value): array
+ // {
+ // return $this->createQueryBuilder('c')
+ // ->andWhere('c.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->orderBy('c.id', 'ASC')
+ // ->setMaxResults(10)
+ // ->getQuery()
+ // ->getResult()
+ // ;
+ // }
+
+ // public function findOneBySomeField($value): ?Category
+ // {
+ // return $this->createQueryBuilder('c')
+ // ->andWhere('c.exampleField = :val')
+ // ->setParameter('val', $value)
+ // ->getQuery()
+ // ->getOneOrNullResult()
+ // ;
+ // }
+}
diff --git a/src/Security/RedirecListener.php b/src/Security/RedirecListener.php
index b5723e6..3cfd535 100644
--- a/src/Security/RedirecListener.php
+++ b/src/Security/RedirecListener.php
@@ -52,7 +52,7 @@ class RedirecListener
if ($pathInfo === "/") {
if ($host === "prestataire.ludikevent.fr") {
- $redirect = new RedirectResponse("https://etl.ludikevent.fr/etl");
+ $redirect = new RedirectResponse("https://prestataire.ludikevent.fr/etl");
$event->setResponse($redirect);
$event->stopPropagation();
return;
diff --git a/src/Security/SiteMapListener.php b/src/Security/SiteMapListener.php
index 40a4e9e..49e447f 100644
--- a/src/Security/SiteMapListener.php
+++ b/src/Security/SiteMapListener.php
@@ -103,9 +103,7 @@ class SiteMapListener implements EventSubscriberInterface
$catUrl = new UrlConcrete($reservationUrl, $t, UrlConcrete::CHANGEFREQ_DAILY, 0.7);
$urlContainer->addUrl($catUrl, 'reservation');
- $reservationUrl = $urlGenerator->generate('reservation_workflow', [], UrlGeneratorInterface::ABSOLUTE_URL);
- $workFlow = new UrlConcrete($reservationUrl, $t, UrlConcrete::CHANGEFREQ_MONTHLY, 0.5);
- $urlContainer->addUrl($workFlow, 'reservation');
+
foreach ($this->formulesRepository->findBy(['isPublish'=>true]) as $formule) {
$formulesUrls = $urlGenerator->generate(
diff --git a/templates/dashboard/base.twig b/templates/dashboard/base.twig
index 4661193..4ebf4f3 100644
--- a/templates/dashboard/base.twig
+++ b/templates/dashboard/base.twig
@@ -49,6 +49,7 @@
{{ menu.nav_link(path('app_crm_reservation'), 'Planing de réservation', '
| Nom | +Actions | +||||
|---|---|---|---|---|---|
|
+
+
+ {{ category.name }}
+
+
+ |
+
+
+
+ {# ACTIONS #}
+
+
+
+
+
+
+ |
+ ||||
|
+ Aucun devis trouvé + |
+ |||||