<?php
namespace App\Controller;
use App\Entity\Produits;
use App\Form\ProduitsType;
use App\Repository\AccessoireRepository;
use App\Repository\FamilleAccessoireRepository;
use App\Repository\ProduitsRepository;
use Cocur\Slugify\Slugify;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Symfony\Component\Security\Core\Security;
use DateTime;
use DateTimeZone;
use App\Entity\Trace;
use Symfony\Component\PropertyAccess\PropertyAccess;
use Psr\Log\LoggerInterface;
use Doctrine\DBAL\Connection;
#[Route('/produits')]
class ProduitsController extends AbstractController
{
private $security;
public function __construct(Security $security)
{
$this->security = $security;
}
#[Route('/filter_produits', name: 'app_produits_filter')]
public function filter(Request $request, ProduitsRepository $produitsRepository): Response
{
$nomprenom = preg_replace('/\s+/', ' ', trim($request->query->get('nomprenom')));
// Build the query
$queryBuilder = $produitsRepository->createQueryBuilder('p')
->where('p.IsArchive = :isArchive')
->setParameter('isArchive', false);
if (!empty($nomprenom)) {
$queryBuilder->andWhere('p.nom LIKE :nomprenom')
->setParameter('nomprenom', "%$nomprenom%");
}
$queryBuilder->orderBy('p.id', 'DESC');
// Get all results without pagination
$produits = $queryBuilder->getQuery()->getResult();
return $this->render('produits/recherche.html.twig', [
'produits' => $produits,
'nomprenom' => $nomprenom, // Pass the search term to the template
]);
}
// #[Route('/filter_produits', name: 'app_produits_filter')]
// public function filter(Request $request, ProduitsRepository $produitsRepository): Response
// {
//// $nomprenom = $request->query->get('nomprenom');
// $nomprenom = preg_replace('/\s+/', ' ', trim($request->query->get('nomprenom')));
//
// $page = $request->query->getInt('page', 1);
// $limit = 5;
//
// // Build the query
// $queryBuilder = $produitsRepository->createQueryBuilder('p')
// ->where('p.IsArchive = :isArchive')
// ->setParameter('isArchive', false);
//// ->andWhere('p.IsArchive = false');
//
// if (!empty($nomprenom)) {
// $queryBuilder->andWhere('p.nom LIKE :nomprenom')
// ->setParameter('nomprenom', "%$nomprenom%");
// }
//
// $queryBuilder->orderBy('p.id', 'DESC');
//
// // Get the query
// $query = $queryBuilder->getQuery();
//
// // Apply pagination
// $paginator = new Paginator($query);
// $totalItems = count($paginator);
// $totalPages = ceil($totalItems / $limit);
//
// $paginator->getQuery()
// ->setFirstResult($limit * ($page - 1))
// ->setMaxResults($limit);
//
// // Convert paginator to array if needed
// $produits = iterator_to_array($paginator);
//
// return $this->render('produits/recherche.html.twig', [
//// 'setting' => $settingsRepository->find(1),
// 'produits' => $produits,
// 'currentPage' => $page,
// 'totalPages' => $totalPages,
// 'nomprenom' => $nomprenom, // Pass the search term to the template
// ]);
// }
#[Route('/archive', name: 'app_produits_archive', methods: ['GET'])]
public function archive(Request $request, ProduitsRepository $produitsRepository, Security $security): Response
{
$user = $security->getUser();
$roles = $user->getRoles();
// Pagination
$page = $request->query->getInt('page', 1);
$limit = 10;
// Requête de base : uniquement les produits archivés
$queryBuilder = $produitsRepository->createQueryBuilder('p')
->where('p.IsArchive = :isArchive')
->setParameter('isArchive', true)
->orderBy('p.id', 'DESC');
// Filtrage selon le rôle
// if (in_array('ROLE_ULTRATEX', $roles)) {
// $queryBuilder
// ->andWhere('p.societe = :societe')
// ->setParameter('societe', 'Ultratex');
// }
// elseif (in_array('ROLE_ULTRACONFECTION', $roles)) {
// $queryBuilder
// ->andWhere('p.societe = :societe')
// ->setParameter('societe', 'Ultraconfection');
// }
// ROLE_ADMIN voit tous les produits archivés
// Pagination
$paginator = new Paginator($queryBuilder);
$allproduit = $paginator->getQuery()
->setFirstResult($limit * ($page - 1))
->setMaxResults($limit)
->getResult();
$totalItems = count($paginator);
$totalPages = ceil($totalItems / $limit);
return $this->render('produits/archive.html.twig', [
'produits' => $allproduit,
'currentPage' => $page,
'totalPages' => $totalPages,
]);
}
#[Route('/', name: 'app_produits_index', methods: ['GET'])]
public function index(Request $request, ProduitsRepository $produitsRepository, Security $security): Response
{
$user = $security->getUser();
$roles = $user->getRoles();
// dump($roles);
// Configuration de la pagination
$page = $request->query->getInt('page', 1);
$limit = 10;
// Construction de la requête
$queryBuilder = $produitsRepository->createQueryBuilder('p')
->where('p.IsArchive = :isArchive')
->setParameter('isArchive', false)
->orderBy('p.id', 'DESC');
// Filtrage en fonction des rôles
// if (in_array('ROLE_ULTRATEX', $roles)) {
// dump('tx');
// $queryBuilder
// ->andWhere('p.societe = :societe')
// ->setParameter('societe', 'Ultratex');
// }
// elseif (in_array('ROLE_ULTRACONFECTION', $roles)) {
// dump("conf");
// $queryBuilder
// ->andWhere('p.societe = :societe')
// ->setParameter('societe', 'Ultraconfection');
// }
// ROLE_ADMIN verra tout, donc pas de filtre supplémentaire
// Application de la pagination
$paginator = new Paginator($queryBuilder);
$allproduit = $paginator->getQuery()
->setFirstResult($limit * ($page - 1))
->setMaxResults($limit)
->getResult();
// dd($allproduit);
$totalItems = count($paginator);
$totalPages = ceil($totalItems / $limit);
// dd($allproduit);
return $this->render('produits/index.html.twig', [
'produits' => $allproduit,
'currentPage' => $page,
'totalPages' => $totalPages,
]);
}
// #[Route('/', name: 'app_produits_index', methods: ['GET'])]
// public function index(Request $request,ProduitsRepository $produitsRepository): Response
// {
//
// // Configuration de la pagination
// $page = $request->query->getInt('page', 1);
// $limit = 10;
//
// // Construction de la requête pour la pagination
// $queryBuilder = $produitsRepository->createQueryBuilder('p')
// ->where('p.IsArchive = :isArchive')
// ->setParameter('isArchive', false)
// ->orderBy('p.id', 'DESC');
//
//
// // Application de la pagination
// $paginator = new Paginator($queryBuilder);
// $allproduit = $paginator->getQuery()
// ->setFirstResult($limit * ($page - 1))
// ->setMaxResults($limit)
// ->getResult();
//
// $totalItems = count($paginator);
// $totalPages = ceil($totalItems / $limit);
// return $this->render('produits/index.html.twig', [
//// 'produits' => $produitsRepository->findAll(),
// 'produits' =>$allproduit,
// 'currentPage' => $page,
// 'totalPages' => $totalPages,
// ]);
// }
#[Route('/new', name: 'app_produits_new', methods: ['GET', 'POST'])]
public function new(FamilleAccessoireRepository $familleAccessoireRepository,AccessoireRepository $accessoireRepository,Request $request, EntityManagerInterface $entityManager): Response
{
if (!$this->getUser()) {
return $this->redirectToRoute('app_login');
}
if (!$this->getUser()) {
return $this->redirectToRoute('app_login');
}
$facc = $familleAccessoireRepository->findAll();
$acc = $accessoireRepository->findBy(['IsArchive'=>false]);
$user = $this->security->getUser();
$role = $user->getRoles()[0] ?? null;
$produit = new Produits();
$form = $this->createForm(ProduitsType::class, $produit);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$date = new \DateTime('now', new DateTimeZone('Africa/Tunis'));
$produit->setIsArchive(false);
$tissuStatus = $request->request->get('tissuStatus');
// dd($tissuStatus);
$societe = null;
if ($role === 'ROLE_ULTRATEX') {
$societe = 'Ultratex';
} elseif ($role === 'ROLE_ULTRACONFECTION') {
$societe = 'Ultraconfection';
}
$produit->setSociete($societe);
$logo = $form->get('image')->getData();
if ( $logo) {
$originalLogoname = pathinfo( $logo->getClientOriginalName(), PATHINFO_FILENAME);
$slugify = new Slugify();
$a= $slugify->slugify($originalLogoname, ['separator' => '-']);
$newLogoname = $a.'-'.uniqid().'.'.$logo->guessExtension();
// Move the file to the directory where brochures are stored
try {
$logo->move(
$this->getParameter('produit_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$produit->setImage($newLogoname);
}
$produit->setDateajout($date);
$accessoires= $request->request->get('accessoire');
$accs= $accessoireRepository->findOneBy(['id'=>$accessoires,'IsArchive'=>false]);
// dd($accessoires,$accs);
$produit->setIsTissu($tissuStatus);
$produit->setAccessoire($accs);
$entityManager->persist($produit);
$entityManager->flush();
$this->addFlash('successproduit', 'Produit ajouté avec succès.');
if (!$this->getUser()) {
return $this->redirectToRoute('app_login');
}
if (!$this->getUser()) {
return $this->redirectToRoute('app_login');
}
// Trace de creation produit
/** @var \App\Entity\User $user */
$user = $this->security->getUser();
$role = $user->getRoles()[0] ?? null;
$email2 = $user->getEmail();
$nom = $produit->getNom();
$trace= new Trace();
$trace->setDate(new \DateTimeImmutable('now', new \DateTimeZone('Africa/Tunis')));
$trace->setEmail($email2);
$trace->setRole($role);
$trace->setAction("Création du produit '{$nom}'");
$trace->setUser($user);
$entityManager->persist($trace);
$entityManager->flush();
return $this->redirectToRoute('app_produits_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('produits/new.html.twig', [
'produit' => $produit,
'form' => $form,
'acc'=>$acc,
'facc'=>$facc
]);
}
#[Route('/{id}', name: 'app_produits_show', methods: ['GET'], requirements: ['id' => '\d+'])]
public function show(Produits $produit): Response
{
return $this->render('produits/show.html.twig', [
'produit' => $produit,
]);
}
#[Route('/{id}/edit', name: 'app_produits_edit', methods: ['GET', 'POST'])]
public function edit(FamilleAccessoireRepository $familleAccessoireRepository,AccessoireRepository $accessoireRepository,Request $request, Produits $produit, EntityManagerInterface $entityManager): Response
{
$facc = $familleAccessoireRepository->findAll();
$acc = $accessoireRepository->findBy(['IsArchive'=>false]);
$img = $produit->getImage();
$form = $this->createForm(ProduitsType::class, $produit);
$form->handleRequest($request);
// dd($produit->getAccessoire(), $produit);
if ($form->isSubmitted() && $form->isValid()) {
$istissu = $request->request->get('tissuStatus');
$accessoire = $request->request->get('accessoire');
$accs = $accessoireRepository->findOneBy(['id'=>$accessoire,'IsArchive'=>false]);
// dd($istissu);
$logo = $form->get('image')->getData();
//detecter les champs
$produitOriginal = clone $produit;
$accessor = PropertyAccess::createPropertyAccessor();
$fields = ['nom', 'coleur', 'prix', 'image', 'tva', 'quantitelimite','stock','image'];
$changes = [];
foreach ($fields as $field) {
$oldValue = $accessor->getValue($produitOriginal, $field);
$newValue = $accessor->getValue($produit, $field);
if ($oldValue !== $newValue) {
$changes[] = "$field: '$oldValue' → '$newValue'";
}
}
if ( $logo) {
$originalLogoname = pathinfo( $logo->getClientOriginalName(), PATHINFO_FILENAME);
$slugify = new Slugify();
$a= $slugify->slugify($originalLogoname, ['separator' => '-']);
$newLogoname = $a.'-'.uniqid().'.'.$logo->guessExtension();
// Move the file to the directory where brochures are stored
try {
$logo->move(
$this->getParameter('produit_directory'),
$newLogoname
);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
$produit->setImage($newLogoname);
}
elseif ($logo === null) {
$produit->setImage($img);
}
$produit->setAccessoire($accs);
$produit->setIsTissu($istissu);
// dd($produit);
$entityManager->flush();
$this->addFlash('modifproduit', 'Produit modifié avec succès.');
/** @var \App\Entity\User $user */
$user = $this->security->getUser();
$role = $user->getRoles()[0] ?? null;
$email2 = $user->getEmail();
$trace= new Trace();
$trace->setDate(new \DateTimeImmutable('now', new \DateTimeZone('Africa/Tunis')));
$trace->setEmail($email2);
$trace->setRole($role);
$nom = $produit->getNom();
$action = "Modification du produit '{$nom}'";
/*if (!empty($changes)) {
$action .= " | Champs modifiés : " . implode(', ', $changes);
} else {
$action .= " | Aucun changement détecté.";
}*/
$trace->setAction($action);
$trace->setUser($user);
$entityManager->persist($trace);
$entityManager->flush();
return $this->redirectToRoute('app_produits_index', [], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('produits/edit.html.twig', [
'produit' => $produit,
'form' => $form,
'acc'=>$acc,
'facc'=>$facc,
'accessoireChoisi' => $produit->getAccessoire(),
]);
}
#[Route('/remove/{id}', name: 'app_produits_delete')]
public function delete(Request $request, Produits $produit, EntityManagerInterface $entityManager): Response
{
// if ($this->isCsrfTokenValid('delete'.$produit->getId(), $request->request->get('_token'))) {
$produit->setIsArchive(true);
$entityManager->persist($produit); // Ajout de persist pour s'assurer que le changement est suivi
// $entityManager->remove($produit);
$entityManager->flush();
// }
// Trace Archivage du produit
/** @var \App\Entity\User $user */
$user = $this->security->getUser();
$role = $user->getRoles()[0] ?? null;
$email2 = $user->getEmail();
$nom = $produit->getNom();
$trace= new Trace();
$trace->setDate(new \DateTimeImmutable('now', new \DateTimeZone('Africa/Tunis')));
$trace->setEmail($email2);
$trace->setRole($role);
$trace->setAction("Archivage du produit '{$nom}'");
$trace->setUser($user);
$entityManager->persist($trace);
$entityManager->flush();
return $this->redirectToRoute('app_produits_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/remove-archive/{id}', name: 'app_produits_delete_archive')]
public function deletearchive(Request $request, Produits $produit, EntityManagerInterface $entityManager, Security $security): Response
{
$produit->setIsArchive(false);
$entityManager->persist($produit); // Ajout de persist pour s'assurer que le changement est suivi
$entityManager->flush();
// Trace Désarchivage du produit
$user = $security->getUser();
$role = $user->getRoles()[0] ?? null;
$email2 = $user->getEmail();
$nom = $produit->getNom();
$trace = new Trace();
$trace->setDate(new \DateTimeImmutable('now', new \DateTimeZone('Africa/Tunis')));
$trace->setEmail($email2);
$trace->setRole($role);
$trace->setAction("Désarchivage du produit '{$nom}'");
$trace->setUser($user);
$entityManager->persist($trace);
$entityManager->flush();
return $this->redirectToRoute('app_produits_archive', [], Response::HTTP_SEE_OTHER);
}
// #[Route('/remove-archive/{id}', name: 'app_produits_delete_archive')]
// public function deletearchive(Request $request, Produits $produit, EntityManagerInterface $entityManager): Response
// {
//// if ($this->isCsrfTokenValid('delete'.$produit->getId(), $request->request->get('_token'))) {
// $produit->setIsArchive(false);
// $entityManager->persist($produit);
// // $entityManager->remove($produit);
// $entityManager->flush();
//// }
// // Trace Désarchivage du produit
// /** @var \App\Entity\User $user */
// $user = $this->security->getUser();
// $role = $user->getRoles()[0] ?? null;
// $email2 = $user->getEmail();
// $nom = $produit->getNom();
// $trace= new Trace();
// $trace->setDate(new \DateTimeImmutable('now', new \DateTimeZone('Africa/Tunis')));
// $trace->setEmail($email2);
// $trace->setRole($role);
// $trace->setAction("Désarchivage du produit '{$nom}'");
// $trace->setUser($user);
// $entityManager->persist($trace);
// $entityManager->flush();
// return $this->redirectToRoute('app_produits_archive', [], Response::HTTP_SEE_OTHER);
// }
//logique notification produits épuisés
/* #[Route('/produitsepuises', name: 'produitsepuises', methods: ['GET', 'POST'])]
public function produitsepuises(Connection $connection): JsonResponse
{
$user = $this->getUser();
// $role = $user->getRoles()[0] ?? null;
$roles = $this->getUser()->getRoles();
$sql = null;
$params = [];
if (in_array('ROLE_ULTRATEX', $roles)){
$sql = "
SELECT * FROM produits p
WHERE p.quantitelimite IS NOT NULL
AND CAST(p.stock AS SIGNED) <= CAST(p.quantitelimite AS SIGNED)
AND p.societe = :societe
ORDER BY p.id DESC
";
$params = ['societe' => 'Ultratex'];
}
elseif (in_array('ROLE_ULTRACONFECTION', $roles)){
$sql = "
SELECT * FROM produits p
WHERE p.quantitelimite IS NOT NULL
AND CAST(p.stock AS SIGNED) <= CAST(p.quantitelimite AS SIGNED)
AND p.societe = :societe
ORDER BY p.id DESC
";
$params = ['societe' => 'UltraConfection'];
} else {
return new JsonResponse([
'nb_total' => 0,
'suspensions' => []
]);
}
$produits = $connection->fetchAllAssociative($sql, $params);
$response = [];
foreach ($produits as $produit) {
$response[] = [
'id' => $produit['id'],
'prix' => $produit['prix'],
'nom' => $produit['nom'],
'stock' => (int)$produit['stock'],
'quantitelimite' => (int)$produit['quantitelimite'],
];
}
return new JsonResponse([
'nb_total' => count($response),
'suspensions' => $response
]);
}*/
#[Route('/produitsepuises', name: 'produitsepuises', methods: ['GET', 'POST'])]
public function produitsepuises(ProduitsRepository $produitsRepository): JsonResponse
{
// $user = $this->getUser();
// $roles = $user->getRoles();
//
// if (in_array('ROLE_ULTRATEX', $roles)) {
// $societe = 'Ultratex';
// } elseif (in_array('ROLE_ULTRACONFECTION', $roles)) {
// $societe = 'UltraConfection';
// } else {
// return new JsonResponse([
// 'nb_total' => 0,
// 'suspensions' => []
// ]);
// }
// Récupérer tous les produits de la société
$produits = $produitsRepository->findAll();
$produitsAlerte = [];
$nbTotalAlertes = 0;
foreach ($produits as $produit) {
$alertesCouleurs = [];
$hasAlerteProduit = false;
// Vérifier les alertes par couleur (détails produit)
foreach ($produit->getDetailsproduits() as $detail) {
$enAlerte = false;
$message = '';
// Récupérer les valeurs correctes
$qte = $detail->getQte() ?? 0;
$qtelimite = $detail->getQtelimite() ?? 0;
if ($produit->getIsTissu()) {
// Pour les tissus: vérifier le poids (qte = poids dans ce cas)
if ($qtelimite > 0 && $qte < $qtelimite) {
$enAlerte = true;
$message = "Poids: {$qte} / Limite: {$qtelimite}";
}
} else {
// Pour les non-tissus: vérifier la quantité
if ($qtelimite > 0 && $qte < $qtelimite) {
$enAlerte = true;
$message = "Quantité: {$qte} / Limite: {$qtelimite}";
}
}
if ($enAlerte) {
$couleur = $detail->getCouleur();
$alertesCouleurs[] = [
'couleur_nom' => $couleur ? $couleur->getNom() : 'Sans couleur',
// 'couleur_code' => $couleur ? $couleur->getCode() : '#666',
'message' => $message,
'qte' => $qte,
'qtelimite' => $qtelimite
];
$hasAlerteProduit = true;
$nbTotalAlertes++;
}
}
// Vérifier les alertes au niveau produit
if (!$produit->getIsTissu()) {
// Pour non-tissu: vérifier stock global vs quantitelimite
$stock = $produit->getStock() ?? 0;
$quantitelimite = $produit->getQuantitelimite() ?? 0;
if ($quantitelimite > 0 && $stock < $quantitelimite) {
$hasAlerteProduit = true;
$nbTotalAlertes++;
}
} else {
// Pour tissu: vérifier totalepoid vs totpoidlimite
$totalepoid = $produit->getTotalepoid() ?? 0;
$totpoidlimite = $produit->getTotpoidlimite() ?? 0;
if ($totpoidlimite > 0 && $totalepoid < $totpoidlimite) {
$hasAlerteProduit = true;
$nbTotalAlertes++;
}
}
if ($hasAlerteProduit) {
$produitsAlerte[] = [
'id' => $produit->getId(),
'nom' => $produit->getNom(),
'reference' => $produit->getReference(),
'is_tissu' => $produit->getIsTissu(),
'stock' => $produit->getStock() ?? 0,
'quantitelimite' => $produit->getQuantitelimite() ?? 0,
'totalepoid' => $produit->getTotalepoid() ?? 0,
'totpoidlimite' => $produit->getTotpoidlimite() ?? 0,
'couleurs' => $alertesCouleurs
];
}
}
dump($nbTotalAlertes,$produitsAlerte);
return new JsonResponse([
'nb_total' => $nbTotalAlertes,
'suspensions' => $produitsAlerte
]);
}
// #[Route('/produitsepuises', name: 'produitsepuises', methods: ['GET', 'POST'])]
// public function produitsepuises(Connection $connection,ProduitsRepository $produitsRepository): JsonResponse
// {
// $produits = $produitsRepository->findAll();
//// dump($produits);
// $user = $this->getUser();
// $roles = $user->getRoles();
//
// $sql = null;
// $params = [];
//
// if (in_array('ROLE_ULTRATEX', $roles)) {
// $societe = 'Ultratex';
// } elseif (in_array('ROLE_ULTRACONFECTION', $roles)) {
// $societe = 'UltraConfection';
// } else {
// return new JsonResponse([
// 'nb_total' => 0,
// 'suspensions' => []
// ]);
// }
//
// $sql = "
// SELECT * FROM produits p
// WHERE (p.quantitelimite IS NOT NULL OR p.totpoidlimite IS NOT NULL)
// AND (
// (p.is_tissu = 1 AND CAST(p.totalepoid AS SIGNED) < CAST(p.totpoidlimite AS SIGNED))
// OR
// (COALESCE(p.is_tissu, 0) = 0 AND CAST(p.stock AS SIGNED) < CAST(p.quantitelimite AS SIGNED))
// )
// AND p.societe = :societe
// ORDER BY p.id DESC
//";
//
//
//
//
// $params = ['societe' => $societe];
//
// $produits = $connection->fetchAllAssociative($sql, $params);
//
// $response = [];
// foreach ($produits as $produit) {
// $response[] = [
// 'id' => $produit['id'],
// 'prix' => $produit['prix'],
// 'nom' => $produit['nom'],
// 'stock' => (int) ($produit['stock'] ?? 0),
// 'quantitelimite' => (int) ($produit['quantitelimite'] ?? 0),
// 'totalepoid' => (float) ($produit['totalepoid'] ?? 0),
// 'totpoidlimite' => (float) ($produit['totpoidlimite'] ?? 0),
// 'is_tissu' => (bool) $produit['is_tissu'],
// ];
// }
//// dump(count($response),$response);
//
// return new JsonResponse([
// 'nb_total' => count($response),
// 'suspensions' => $response
// ]);
// }
//
// #[Route('/produitsepuises', name: 'produitsepuises', methods: ['GET', 'POST'])]
// public function produitsepuises(ProduitsRepository $produitsRepository): JsonResponse
// {
// $user = $this->security->getUser();
// $role = $user->getRoles()[0] ?? null;
// if ($role === 'ROLE_ULTRATEX') {
// $produits = $produitsRepository->findProduitsStockLimiteForUltratex();
// }
// elseif ($role === 'ROLE_ULTRACONFECTION') {
// $produits = $produitsRepository->findProduitsStockLimiteForUltraConfection();
// }
// //dd($produits);
// $response = [];
// foreach ($produits as $produit) {
// $response[] = [
// 'id' => $produit->getId(),
// 'prix' => $produit->getPrix(),
// 'nom' => $produit->getNom(),
// 'stock' => $produit->getStock(),
// 'quantitelimite' => $produit->getQuantitelimite(),
// ];
// }
//
// return new JsonResponse([
// 'nb_total' => count($response),
// 'suspensions' => $response
// ]);
// }
#[Route('/check-reference-used', name: 'check_reference_used', methods: ['GET', 'POST'])]
public function checkReferenceUsed(
Request $request,
ProduitsRepository $produitsRepository,
LoggerInterface $logger
): JsonResponse {
$reference = $request->get('reference');
$logger->info('🔍 Requête AJAX reçue avec la référence : ' . $reference);
if (!$reference) {
$logger->warning(' Référence manquante dans la requête AJAX');
return new JsonResponse(['error' => 'Référence manquante'], 400);
}
$produit = $produitsRepository->findOneBy(['reference' => $reference]);
if ($produit) {
$logger->info('Référence déjà utilisée');
} else {
$logger->info('Référence libre');
}
return new JsonResponse(['used' => $produit !== null]);
}
}