<?php
namespace App\Controller;
use App\Entity\CatalogueImport;
use App\Entity\Images;
use App\Entity\ProductAccessories;
use App\Entity\Products;
use App\Entity\SearchProductsType;
use App\Form\ProductsFormType;
use App\Form\SearchProductsFormType;
use App\Repository\CategoriesRepository;
use App\Repository\ProductsRepository;
use App\Repository\CatalogueImportRepository;
use App\Service\PictureService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\String\Slugger\SluggerInterface;
class MainController extends AbstractController
{
#[Route('/', name: 'main', methods: ['POST','GET'])]
public function index(EntityManagerInterface $entityManager, CategoriesRepository $categoriesRepository, ProductsRepository $productsRepository, CatalogueImportRepository $catalogueImportRepository, Request $request): Response
{
$tabProductAccessories = [];
// On crée le formulaire
$searchProductsType = new SearchProductsType();
$searchProductsForm = $this->createForm(SearchProductsFormType::class, $searchProductsType);
// On traite la requête du formulaire
$searchProductsForm->handleRequest($request);
$isAnswerAEnabled = false;
$isAnswerBEnabled = false;
$isAnswerCEnabled = false;
$isAnswerDEnabled = false;
$isAnswerEEnabled = false;
$isAnswerFEnabled = false;
$isAnswerGEnabled = false;
$isAnswerHEnabled = false;
$isAnswerIEnabled = false;
$isAnswerJEnabled = false;
$isAnswerKEnabled = false;
$isAnswerLEnabled = false;
$questionAValue = "";
$questionBValue = "";
$questionCValue = "";
$questionDValue = "";
$questionEValue = "";
$questionFValue = "";
$questionGValue = "";
$questionHValue = "";
$questionIValue = "";
$questionJValue = "";
$questionKValue = "";
$questionLValue = "";
$products = null;
$products2 = null;
$accessories = null;
$tabProductsProducts2 = null;
$catalogueImports = $catalogueImportRepository->findAll();
//On vérifie si le formulaire est soumis ET valide
if($searchProductsForm->isSubmitted() && $searchProductsForm->isValid()){
if ($request->get('questionA')) {
$isAnswerBEnabled = true;
$questionAValue = $request->get('questionA');
}
if ($request->get('questionB')) {
$isAnswerCEnabled = true;
$questionBValue = $request->get('questionB');
}
if ($request->get('questionC')) {
$isAnswerDEnabled = true;
$questionCValue = $request->get('questionC');
}
if ($request->get('questionD')) {
$isAnswerEEnabled = true;
$questionDValue = $request->get('questionD');
}
if ($request->get('questionE')) {
$isAnswerFEnabled = true;
$questionEValue = $request->get('questionE');
}
if ($request->get('questionF')) {
$isAnswerGEnabled = true;
$questionFValue = $request->get('questionF');
}
if ($request->get('questionG')) {
if ($questionAValue != "Chalumeau") {
$isAnswerHEnabled = true;
}
$questionGValue = $request->get('questionG');
}
if ($request->get('questionH')) {
$isAnswerIEnabled = true;
$questionHValue = $request->get('questionH');
}
if ($request->get('questionI')) {
$isAnswerJEnabled = true;
$questionIValue = $request->get('questionI');
}
if ($request->get('questionJ')) {
$questionJValue = $request->get('questionJ');
}
// dd($questionGValue);
$searchProductsForm = $this->createForm(SearchProductsFormType::class, $searchProductsType);
$productsCatalogue = null;
$questionLastEmpty = '';
if ($request->get('lastEmpty')) {
$questionLastEmpty = $request->get('lastEmpty');
}
if (($questionJValue != '' || $questionLastEmpty != '') || ($questionGValue != '' && $questionAValue == "Chalumeau") || ($questionHValue != '' && $questionAValue != "Chalumeau")) {
if ($questionAValue == "Chalumeau") {
$productsCatalogue = $catalogueImportRepository->findBy(['colA' => $questionAValue,
'colB' => $questionBValue,
'colC' => $questionCValue,
'colD' => $questionDValue,
'colE' => $questionEValue,
'colF' => $questionFValue,
'colG' => $questionGValue]);
} else {
$productsCatalogue = $catalogueImportRepository->findBy(['colA' => $questionAValue,
'colB' => $questionBValue,
'colC' => $questionCValue,
'colD' => $questionDValue,
'colE' => $questionEValue,
'colF' => $questionFValue,
'colG' => $questionGValue]);
}
}
$tabName = null;
$tabName2 = null;
$tabNameAccessories = null;
$tabProductAccessories = [];
if ($productsCatalogue != null) {
foreach ($productsCatalogue as $productCatalogue) {
if ($questionAValue == "Chalumeau") {
$tabName[] = $productCatalogue->getColH();
} else {
$tabName[] = $productCatalogue->getColK();
}
}
$queryBuilder = $productsRepository->createQueryBuilder('p');
// Ajout de la clause WHERE avec IN
$queryBuilder->where($queryBuilder->expr()->in('p.slug', ':names'))
->setParameter('names', $tabName);
// Exécution de la requête
$products = $queryBuilder->getQuery()->getResult();
/* Gestion des produits conseillés */
foreach ($productsCatalogue as $productCatalogue) {
if ($questionAValue == "Chalumeau") {
$tabName2[] = $productCatalogue->getColM();
$tabProductsProducts2[] = $productCatalogue;
} else {
$tabName2[] = $productCatalogue->getColl();
$tabProductsProducts2[] = $productCatalogue;
}
}
$queryBuilder = $productsRepository->createQueryBuilder('p');
// Ajout de la clause WHERE avec IN
$queryBuilder->where($queryBuilder->expr()->in('p.slug', ':names'))
->setParameter('names', $tabName2);
// Exécution de la requête
$products2 = $queryBuilder->getQuery()->getResult();
/* Gestion des produits conseillés */
foreach ($productsCatalogue as $productCatalogue) {
if ($questionAValue == "Chalumeau") {
$tabNameAccessories[] = $productCatalogue->getColJ();
$tabProductAccessories[] = $productCatalogue;
} else {
$tabNameAccessories[] = $productCatalogue->getColJ();
$tabProductAccessories[] = $productCatalogue;
}
}
$queryBuilder = $productsRepository->createQueryBuilder('p');
// Ajout de la clause WHERE avec IN
$queryBuilder->where($queryBuilder->expr()->in('p.slug', ':names'))
->setParameter('names', $tabNameAccessories);
// Exécution de la requête
$accessories = $queryBuilder->getQuery()->getResult();
//dd($tabProductAccessories);
}
}
return $this->render('main/index.html.twig',[
'searchProductsForm' => $searchProductsForm->createView(),
'isAnswerAEnabled' => $isAnswerAEnabled,
'isAnswerBEnabled' => $isAnswerBEnabled,
'isAnswerCEnabled' => $isAnswerCEnabled,
'isAnswerDEnabled' => $isAnswerDEnabled,
'isAnswerEEnabled' => $isAnswerEEnabled,
'isAnswerFEnabled' => $isAnswerFEnabled,
'isAnswerGEnabled' => $isAnswerGEnabled,
'isAnswerHEnabled' => $isAnswerHEnabled,
'isAnswerIEnabled' => $isAnswerIEnabled,
'isAnswerJEnabled' => $isAnswerJEnabled,
'isAnswerKEnabled' => $isAnswerKEnabled,
'isAnswerLEnabled' => $isAnswerLEnabled,
'questionAValue' => $questionAValue,
'questionBValue' => $questionBValue,
'questionCValue' => $questionCValue,
'questionDValue' => $questionDValue,
'questionEValue' => $questionEValue,
'questionFValue' => $questionFValue,
'questionGValue' => $questionGValue,
'questionHValue' => $questionHValue,
'questionIValue' => $questionIValue,
'questionJValue' => $questionJValue,
'questionKValue' => $questionKValue,
'questionLValue' => $questionLValue,
'products' => $products,
'products2' => $products2,
'accessories' => $accessories,
'productSelected' => $request->get('productSelected'),
'catalogueImports' => $catalogueImports,
'tabProductAccessories' => $tabProductAccessories,
'tabProductsProducts2' => $tabProductsProducts2
]);
}
#[Route('/update', name: 'app_update', methods: ['GET'])]
public function update(EntityManagerInterface $entityManager, SluggerInterface $slugger): Response
{
$catalogueImports = $entityManager->getRepository(CatalogueImport::class)->findAll();
foreach ($catalogueImports as $catalogueImport) {
if($catalogueImport->getColA() == "Chalumeau") {
$product = $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColH()]);
if ($product != null) {
$product->setDescription($catalogueImport->getColK());
$entityManager->persist($product);
$entityManager->flush();
} else {
$product = new Products();
$product->setName($catalogueImport->getColH());
$slug = $slugger->slug($product->getName());
$product->setSlug($slug);
$product->setDescription($catalogueImport->getColH());
$entityManager->persist($product);
$entityManager->flush();
}
if($catalogueImport->getColJ() != "") {
// gestion de l'accessoire
$accessoire = $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColJ()]);
if ($accessoire != null) {
$accessoire->setDescription("");
$entityManager->persist($product);
$entityManager->flush();
} else {
$accessoire = new Products();
$accessoire->setName($catalogueImport->getColJ());
$slug = $slugger->slug($accessoire->getName());
$accessoire->setSlug($slug);
$accessoire->setDescription("");
$entityManager->persist($accessoire);
$entityManager->flush();
}
$product->addAccessory($accessoire);
$entityManager->persist($product);
$entityManager->flush();
}
} else {
$product = $entityManager->getRepository(Products::class)->findOneBy(['name' => $catalogueImport->getColK()]);
if ($product != null) {
$product->setDescription($catalogueImport->getColK());
} else {
$product = new Products();
$product->setName($catalogueImport->getColK());
$slug = $slugger->slug($product->getName());
$product->setSlug($slug);
$product->setDescription($catalogueImport->getColK());
$entityManager->persist($product);
$entityManager->flush();
}
}
}
return $this->redirectToRoute('main');
}
#[Route('/importimages', name: 'app_import_images', methods: ['GET'])]
public function importImages(EntityManagerInterface $entityManager, SluggerInterface $slugger, PictureService $pictureService): Response
{
set_time_limit(0); // 0 = no limits
$files = array_diff(scandir('../data/import_images/'), array('.', '..'));
foreach ($files as $file) {
//dd(substr($file, -3));
if ( pathinfo($file, PATHINFO_EXTENSION) != "png") {
// Vérification de l'existance du produit
$reference = substr($file, 0, 6);
$product = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $reference]);
if ($product != null) {
if (count($product->getImages()) == 0) {
//dd("test".$reference);
$folder = 'products';
// On appelle le service d'ajout
$fichier = $pictureService->import('../data/import_images/' . $file, $folder, 450, 250);
$img = new Images();
$img->setName($fichier);
$product->addImage($img);
$entityManager->persist($product);
$entityManager->flush();
}
}
}
}
return $this->redirectToRoute('main');
}
#[Route('/import/{importFile}', name: 'app_import', methods: ['GET'])]
public function import(String $importFile, EntityManagerInterface $entityManager, SluggerInterface $slugger, PictureService $pictureService): Response
{
set_time_limit(0); // 0 = no limits
$files = array_diff(scandir('../data/'), array('.', '..'));
foreach ($files as $file) {
if ($file == "produits_20241120.csv" && "importproduits" == $importFile) {
$rowNo = 1;
// $fp is file pointer to file sample.csv
if (($fp = fopen('../data/'.$file, "r")) !== FALSE) {
while (($row = fgetcsv($fp, 1000, ";")) !== FALSE) {
if ($rowNo > 1) {
$colA = (trim($row[0])); // categorie1
$colB = (trim($row[1])); // categorie2
$colC = (trim($row[2])); // categorie3
$colD = (trim($row[3])); // derniereCategorie
$colE = (trim($row[4])); // name
$colF = (trim($row[5])); // header
$colG = (trim($row[6])); // mainRreference
$colH = (trim($row[7])); // description
$colI = (trim($row[8])); // donnees techniques
$colJ = (trim($row[9])); // video produit ...
$colK = (trim($row[10])); // sous type
$colL = (trim($row[11])); // Capacité en mm
$colM = (trim($row[12])); // L. hors tout en mm
$colN = (trim($row[13])); // Poids en kg
$colO = (trim($row[14])); // Accessoire
$colP = (trim($row[15])); // gaz
$colQ = (trim($row[16])); // Calibre
$colR = (trim($row[17])); // Epaisseur de coupe en mm
$colS = (trim($row[18])); // Débit l/h
$colT = (trim($row[19])); // Débit/Pression
$colU = (trim($row[20])); // Pression maxi en bar
$colV = (trim($row[21])); // Filetage
$colW = (trim($row[22])); // Afficher graduation
$colX = (trim($row[23])); // graduation
$colY = (trim($row[24])); // Afficher entrée
$colZ = (trim($row[25])); // Entrée
$colAA = (trim($row[26])); // Afficher sortie
$colAB= (trim($row[27])); // Sortie
$colAC = (trim($row[28])); // Titre
$colAD = (trim($row[29])); // Sous titre
$colAE = (trim($row[30])); //
$colAF = (trim($row[31])); // Autres produits
$colAG = (trim($row[32])); // Accessoires
// Convertir la chaîne en un tableau en utilisant explode()
$autres = explode("\n", $colAF);
// Supprimer les espaces blancs autour des valeurs, si nécessaire
$autres = array_map('trim', $autres);
// Convertir la chaîne en un tableau en utilisant explode()
$accessoires = explode("\n", $colAG);
// Supprimer les espaces blancs autour des valeurs, si nécessaire
$accessoires = array_map('trim', $accessoires);
$product = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
if ($product == null) {
$product = new Products();
}
/*
$product->setCategorie1($colA);
$product->setCategorie2($colB);
$product->setCategorie3($colC);
$product->setDerniereCategorie($colD);
$product->setName(trim($colE));
$slug = $slugger->slug($product->getName());
$product->setSlug($slug);
$product->setHeader($colF);
$product->setMainReference($colG);
$product->setDescription($colH);
$product->setDonneesTechniques($colI);
$product->setSubType($colK);
$product->setCapacity($colL);
$product->setLength($colM);
$product->setWeight($colN);
$product->setAccessoryTxt($colO);
$product->setGas($colP);
$product->setCaliber($colQ);
$product->setThickness($colR);
$product->setSpeed($colS);
$product->setFlowPressure($colT);
$product->setMaximumPressure($colU);
$product->setThread($colV);
if ($colW == "oui") {
$product->setBoolGraduation($colW);
}
$product->setGraduation($colX);
$product->setTitle($colAC);
$product->setSubTitle($colAD);
$product->setName(trim($colE));
$slug = $slugger->slug($colG);
$product->setSlug($slug);
if ($colY == "oui") {
$product->setBoolInPort($colY);
}
$product->setInPort($colZ);
if ($colY == "oui") {
$product->setBoolOutPort($colAA);
}
$product->setOutPort($colAB);
$entityManager->persist($product);
$entityManager->flush();
$productLinked = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
$product->addLinkedProduct($productLinked);
$entityManager->persist($product);
$entityManager->flush();
*/
/*
foreach ($autres as $value) {
$productLinked = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $value]);
if ($productLinked != null && $value != $colG) {
$product->addLinkedProduct($productLinked);
$entityManager->persist($product);
$entityManager->flush();
}
}
*/
foreach ($accessoires as $value) {
// Traiter chaque valeur, ici on l'affiche
//echo $value . "\n";
$accessory = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $value]);
if ($accessory != null && $value != $colG) {
$product->addAccessory($accessory);
$entityManager->persist($product);
$entityManager->flush();
}
}
}
$rowNo++;
}
fclose($fp);
}
}
if ($file == "accessoires_20241120.csv" && "importaccessoires" == $importFile) {
$rowNo = 1;
// $fp is file pointer to file sample.csv
if (($fp = fopen('../data/'.$file, "r")) !== FALSE) {
while (($row = fgetcsv($fp, 1000, ";")) !== FALSE) {
if ($rowNo > 1) {
//$row = array_map(fn($field) => mb_convert_encoding($field, 'UTF-8', 'UTF-8'), $row);
$colA = (trim($row[0])); // TYPE FICHE Epaisseur de gougeage en mm
$colB = (trim($row[1])); // Type PRODUIT
$colC = (trim($row[2])); // Réf principale
$colD = (trim($row[3])); // Titre
$colE = (trim($row[4])); // Sous-titre
$colF = (trim($row[5])); // Sous-sous-type
$colG = (trim($row[6])); // Réf.
$colH = (trim($row[7])); // Réf photo.
$colI = (trim($row[8])); // Gaz
$colJ = (trim($row[9])); // Calibre
$colK = (trim($row[10])); // Epaisseur de coupe en mm
$colL = (trim($row[11])); // Débit g/l
$colM = (trim($row[12])); // Débit l/h
$colN = (trim($row[13])); // Filetage
$colO = (trim($row[14])); // Type
$colP = (trim($row[15])); // Epaisseur de dérivetage en mm
$colQ = (trim($row[16])); // Epaisseur de gougeage en mm
$colR = (trim($row[17])); // Epaisseur de perçage
$colS = (trim($row[18])); // Pression de service en bar
$product = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
if ($product == null) {
$product = new Products();
$product->setName(trim($colG));
$slug = $slugger->slug($colG);
$product->setSlug($slug);
$product->setHeader($colG);
$product->setMainReference($colG);
$product->setDescription($colG);
$product->setDonneesTechniques($colG);
$product->setTitle($colD);
$product->setSubTitle($colE);
$product->setSubSubType($colF);
$product->setGas($colI);
$product->setCaliber($colJ);
$product->setThickness($colK);
$product->setSpeedGl($colL);
$product->setSpeed($colM);
$product->setThread($colN);
$product->setAccessoryType($colO);
$product->setDriftThickness($colP);
$product->setGougingThickness($colQ);
$product->setDrillingThickness($colR);
$product->setPressureInBar($colS);
$entityManager->persist($product);
$entityManager->flush();
/*
$origProduct = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colC]);
if ($origProduct != null) {
$origProductAccessories = $origProduct->getAccessories();
$exist = false;
foreach ($origProductAccessories as $origProductAccessory) {
if ($origProductAccessory->getName() == $colG) {
$exist = true;
}
}
if (!$exist) {
$origProduct->addAccessory($product);
$entityManager->persist($origProduct);
$entityManager->flush();
}
}*/
}
}
$rowNo++;
}
fclose($fp);
}
}
if ($file == "accessoires_20241120.csv" && "importphotosaccessoires" == $importFile) {
$rowNo = 1;
// $fp is file pointer to file sample.csv
if (($fp = fopen('../data/'.$file, "r")) !== FALSE) {
while (($row = fgetcsv($fp, 1000, ";")) !== FALSE) {
if ($rowNo > 1) {
$colG = (trim($row[6])); // Réf.
$colH = (trim($row[7])); // Réf photo.
$accessory = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colG]);
if ($accessory != null) {
$product = $entityManager->getRepository(Products::class)->findOneBy(['mainReference' => $colH]);
if ($product != null) {
$imagePrincipale = $product->getImages()->get(0);
if ($imagePrincipale != null) {
if (count($accessory->getImages()) == 0) {
$img = new Images();
$img->setName($imagePrincipale->getName());
$accessory->addImage($img);
$entityManager->persist($product);
$entityManager->flush();
}
}
}
}
}
$rowNo++;
}
fclose($fp);
}
}
}
dd("import termine");
return $this->redirectToRoute('main');
}
}