<?php
namespace App\Controller;
use App\Entity\CatalogueAsset;
use App\Entity\FamilleJ;
use App\Entity\CategoryJ;
use App\Entity\Catalogue;
use App\Form\CatalogueType;
use App\Entity\CategoryCatalogue;
use App\Form\CategoryCatalogueType;
use App\Entity\SousCategoryCatalogue;
use App\Form\SousCategoryCatalogueType;
use App\Service\TranslationWriter;
use App\Service\CatalogueService;
use App\Service\EmailService;
use Twig\Environment;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
class CatalogueController extends AbstractController
{
private EntityManagerInterface $em;
private Security $security;
private EmailService $emailService;
private Environment $twig;
private CatalogueService $catalogueService;
private TranslationWriter $translationWriter;
// Le constructeur prend tous les services en paramètre
public function __construct(
EntityManagerInterface $em,
Security $security,
EmailService $emailService,
Environment $twig,
CatalogueService $catalogueService,
TranslationWriter $translationWriter
) {
$this->em = $em;
$this->security = $security;
$this->emailService = $emailService;
$this->twig = $twig;
$this->catalogueService = $catalogueService;
$this->translationWriter = $translationWriter;
}
public function gestionCatalog(Request $request): Response
{
$catalogue = new Catalogue();
$page = $request->query->getInt('page', 1);
$limit = 10;
$search = $request->query->get('search');
$data = $this->catalogueService->getListeCatalogue($page, $limit, $search);
//$data = $this->catalogueService->getListeCatalogue();
$catalogs = $data['catalogs'];
$pagesCount = $data['pagesCount'];
$currentPage = $data['currentPage'];
$searchTerm = $data['searchTerm'];
$form = $this->createForm(CatalogueType::class, $catalogue);
return $this->render('CatalogueVue/catalogue.html.twig', [
'form' => $form->createView(),
'catalogs' => $catalogs,
'pagesCount' => $pagesCount,
'currentPage' => $currentPage,
'searchTerm' => $searchTerm,
]);
}
public function mstopescreerarticle(Request $request): Response {
$catalogue = new Catalogue();
$categarticle=new CategoryCatalogue;
$souscategory=new SousCategoryCatalogue;
$data = $this->catalogueService->getIndexCreerarticle();
$categorys = $data['categorys'];
$souscategorys = $data['souscategorys'];
$form = $this->createForm(CatalogueType::class, $catalogue);
$form1 = $this->createForm(CategoryCatalogueType::class, $categarticle);
$form2 = $this->createForm(SousCategoryCatalogueType::class, $souscategory);
$form->handleRequest($request);
if ($form->isSubmitted() ) {
$type=$form->get('typeArticle')->getData();
if($type=="ASSET"){
$assetArt=new CatalogueAsset;
$assetArt->setCatalogue($catalogue);
$assetArt->setNumeroArticleAsset(1);
$this->em->persist($assetArt);
}
// 💾 1. Sauvegarde catalogue
$this->em->persist($catalogue);
$this->em->flush(); // ⚠️ IMPORTANT pour avoir ID
$this->em->refresh($catalogue);
// 🔥 2. Sauvegarde traductions FR
$this->translationWriter->create(
'Catalogue',
$catalogue->getId(),
'designation',
$catalogue->getDesignation()
);
/* $descript=$catalogue->getDescription();
if($descript==null)
$descript=" ";
$this->translationWriter->create(
'Catalogue',
$catalogue->getId(),
'description',$descript
);*/
$this->translationWriter->create(
'Catalogue',
$catalogue->getId(),
'unite',
$catalogue->getUnite()
);
// 💾 flush final
$this->em->flush();
return $this->redirectToRoute('mstopes_gestion_catalog');
}
return $this->render('CatalogueVue/mstopescreerarticle.html.twig', [
'souscategorys' => $souscategorys,
'categorys' => $categorys,
'form' => $form->createView(),
'form1' => $form1->createView(),
'form2' => $form2->createView(),
]);
}
public function listcategoryj( Request $request): JsonResponse
{
// Tableau de réponse
$listnum4 = [];
// Récupérer l'id envoyé
$id = $request->request->get('id');
// Récupérer la famille asset
$famille = $this->em->getRepository(FamilleJ::class)->find($id);
// Récupérer les categ asset
$categs = $this->em->getRepository(CategoryJ::class) ->findByFamille($famille);
// Valeur par défaut
$listnum4[0] = 'choisir';
// Remplir le tableau
foreach ($categs as $dem) {
$listnum4[$dem->getId()] = $dem->getLibele().'-'.$dem->getNomequip();
}
// Retour JSON
return new JsonResponse($listnum4);
}
#[Route('/catalogue/{id}/edit', name: 'mstopes_modifier_article')]
public function modifierArticle(
Catalogue $catalogue,
Request $request,
EntityManagerInterface $em
): Response {
$form = $this->createForm(CatalogueType::class, $catalogue);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$type=$form->get('typeArticle')->getData();
if($type=="ASSET"){
$assetArt=new CatalogueAsset;
$assetArt->setCatalogue($catalogue);
$assetArt->setNumeroArticleAsset(1);
$this->em->persist($assetArt);
}
$catalogue->setDateModif(new \DateTimeImmutable());
// Enregistrement
$this->em->flush();
// Retourne un succès (vous pouvez retourner un JSON pour fermer le modal en JS)
return new JsonResponse(['success' => true]);
}
return $this->render('catalogueVue/modifier.html.twig'
, [
'form' => $form->createView(),
'catalogue' => $catalogue,
]
);
}
}