<?php
namespace App\Controller\Front;
use App\Entity\Avis;
use App\Services\File;
use App\Entity\Pack;
use App\Entity\Ticket;
use App\Entity\ImageComment;
use App\Form\AvisType;
use App\Services\Mail;
use App\Entity\Product;
use App\Entity\Category;
use App\Entity\Messaging;
use App\Entity\SubCategory;
use App\Entity\ContactProduct;
use App\Entity\PlanningCompany;
use App\Entity\ProductOption;
use App\Form\TicketProductType;
use App\Form\ContactProductType;
use App\Traits\FilterPriceTrait;
use App\Repository\AvisRepository;
use App\Repository\TicketRepository;
use App\Repository\ProductRepository;
use App\Repository\CategoryRepository;
use App\Repository\LocationRepository;
use App\Repository\WishListRepository;
use App\Entity\TransporteurWeightPrice;
use App\Entity\User;
use App\Repository\DepartmentRepository;
use App\Repository\ProductOptionRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ReservationRepository;
use App\Repository\SubCategoryRepository;
use Knp\Component\Pager\PaginatorInterface;
use App\Repository\TypePrestationRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Repository\TransporteurWeightPriceRepository;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use App\Services\Filter;
class ProductController extends AbstractController
{
use FilterPriceTrait;
/**
* @var EntityManagerInterface
*/
private $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* @Route("/recherche/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_search")
*/
public function searchFilter(int $page, Request $request, DepartmentRepository $departmentRepository, CategoryRepository $categoryRepository, ProductRepository $productRepository, PaginatorInterface $paginator, SessionInterface $session,LocationRepository $locationRepository, ReservationRepository $reservationRepository)
{
if ($request->isMethod('POST')) {
if ($request->get('keyword') || $request->get('type') || $request->get('department_filter') || $request->get('department_filter') || $request->get('minprice_filter') ||
$request->get('maxprice_filter') || $request->get('category') || $request->get('weddingdate') || $request->get('nb_guest')) {
$parameters = [
'department' => $request->get('department_filter') !== '' ? $request->get('department_filter') : null,
'categoryMaster' => $request->get('category_master') !== '' ? $request->get('category_master') : null,
'min_price' => $request->get('minprice_filter') !== '' ? $request->get('minprice_filter') : null,
'max_price' => $request->get('maxprice_filter') !== '' ? $request->get('maxprice_filter') : null,
'weddingdate' => $request->get('weddingdate') !== '' ? $request->get('weddingdate') : null,
'category' => !empty($request->get('category')) ? $request->get('category') : null,
'nbGuest' => !empty($request->get('nb_guest')) ? $request->get('nb_guest') : null,
'type' => !empty($request->get('type')) ? $request->get('type') : null,
'keyword' => !empty($request->get('keyword')) ? $request->get('keyword') : null,
];
$session->set('department', $request->get('department_filter'));
$session->set('min_price', $request->get('minprice_filter'));
$session->set('max_price', $request->get('maxprice_filter'));
$session->set('category', $request->get('category'));
$session->set('weddingdate', $request->get('weddingdate'));
$session->set('nbGuest', $request->get('nb_guest'));
$session->set('type', $request->get('type'));
$session->set('keyword', $request->get('keyword'));
// For displaying names
if ($parameters['department'] && $parameters['department'] !== 'Lieu') {
$department = $departmentRepository->find($parameters['department']);
$session->set('departmentName', $department->getName());
}
$categoryBackground = null;
if ($parameters['categoryMaster'] && !is_array($parameters['categoryMaster'])) {
$category = $categoryRepository->find($parameters['categoryMaster']);
if ($category) {
$categoryBackground = $category;
$session->set('categoryName', $category->getName());
}
}
$products = $productRepository->searchProduct($parameters);
$dateSearch = str_replace('/', '-', $parameters['weddingdate']);
$datetime = new \DateTime($dateSearch);
$datetime->format('Y-m-d');
// Calcul count services / products
$countService = 0;
$countProducts = 0;
/** @var Product $product */
foreach ($products as $key => $product) {
$isService = $product->getSubCategories()->filter(
function ($entry) use ($countService, $countProducts) {
return $entry->getIsService();
}
);
if ($isService) {
$countService = $countService + 1;
} else {
$countProducts = $countProducts + 1;
}
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
if ($planning->getDateStamp() == $datetime->getTimestamp()) {
unset($products[$key]);
}
}
if ($product->getTypePrestation()) {
if ($product->getTypePrestation()->getLabel() == 'location') {
$prodEnLocation=$locationRepository->getLocationByProduit($product);
foreach($prodEnLocation as $lp){
if (($datetime->getTimestamp() >= $lp->getStartAt()->getTimestamp()) && ($datetime->getTimestamp() <= $lp->getEndAt()->getTimestamp())) {
unset($products[$key]);
}
}
}
else
{
$prodEnReservation=$reservationRepository->getreservationByProduit($product);
foreach($prodEnReservation as $reserv){
if ($datetime->getTimestamp() == $reserv->getReservationPlannedAt()->getTimestamp()) {
unset($products[$key]);
}
}
}
}
}
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => $countProducts,
'countServices' => $countService,
'categoryBackground' => $categoryBackground
]);
}
} else {
$parameters = [
'department' => $session->get('department'),
'min_price' => $session->get('min_price'),
'max_price' => $session->get('max_price'),
'weddingdate' => $session->get('weddingdate'),
'category' => $session->get('category'),
'nbGuest' => $session->get('nbGuest'),
'type' => $session->get('type'),
'keyword' => $session->get('keyword')
];
$products = $productRepository->searchProduct($parameters);
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
$categoryBackground = null;
if ( isset( $parameters['categoryMaster']) && !is_array($parameters['categoryMaster'])) {
$category = $categoryRepository->find($parameters['categoryMaster']);
if ($category) {
$categoryBackground = $category;
$session->set('categoryName', $category->getName());
}
}
$countService = 0;
$countProducts = 0;
$dateSearch = str_replace('/', '-', $parameters['weddingdate']);
$datetime = new \DateTime($dateSearch);
$datetime->format('Y-m-d');
/** @var Product $product */
foreach ($products as $key => $product) {
$isService = $product->getSubCategories()->filter(
function ($entry) use ($countService, $countProducts) {
return $entry->getIsService();
}
);
if ($isService) {
$countService = $countService + 1;
} else {
$countProducts = $countProducts + 1;
}
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
if ($planning->getDateStamp() == $datetime->getTimestamp()) {
unset($products[$key]);
}
}
}
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => $countProducts,
'countServices' => $countService,
'categoryBackground' => $categoryBackground
]);
}
$session->remove('department');
$session->remove('min_price');
$session->remove('max_price');
$session->remove('category');
//$session->remove('weddingdate');
$session->remove('nbGuest');
$session->remove('departmentName');
$session->remove('categoryName');
return $this->redirectToRoute('front_product_products');
}
/**
* @Route("/services/categorie/{slug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category_slug")
*/
public function listByCategory(int $page, Category $category, ProductRepository $productRepository, PaginatorInterface $paginator)
{
$products = $productRepository->productsByCategory($category);
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => count($products)
]);
}
/**
* @Route("/services/evenements/{subCategorySlug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category_events")
*/
public function listByCategoryEvent(SubCategory $subCategory, int $page, ProductRepository $productRepository, PaginatorInterface $paginator)
{
$products = $productRepository->productsByCategoryMaster($subCategory);
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => count($products)
]);
}
/**
* @Route("/services/ordre/{slug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_category")
*/
public function orderByCategory(string $slug, int $page, ProductRepository $productRepository, PaginatorInterface $paginator)
{
if ($slug === 'note') {
$products = $productRepository->orderByNotes();
} elseif ($slug === 'reserved') {
$products = $productRepository->orderByCommands();
}
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => count($products)
]);
}
/**
* @Route("/services/sous-categorie/{subCategorySlug}/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_subcategory")
*/
public function listBySubCategory(int $page, SubCategory $subCategory, ProductRepository $productRepository, PaginatorInterface $paginator)
{
$products = $productRepository->productsBySubCategory($subCategory);
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => count($products)
]);
}
/**
* @Route("/services/{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="front_product_products")
*/
public function products(int $page, ProductRepository $productRepository, PaginatorInterface $paginator, SessionInterface $session)
{
$session->remove('department');
$session->remove('min_price');
$session->remove('max_price');
$session->remove('category');
$products = $productRepository->findAllServices();
// dd($products);
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'countProducts' => count($products)
]);
}
/**
* @Route("/service/{slug}/{subCategorySlug}/{product_id}/{productSlug}", name="front_product_single")
* @ParamConverter("product", options={"id" = "product_id"})
*/
public function productSingle(
TicketRepository $ticketRepository,
Category $category,
Request $request,
Product $product,
SessionInterface $session,
WishListRepository $wishListRepository,
ProductRepository $productRepository,
AvisRepository $avisRepository,
// User $user,
Mail $mail,
File $file
)
{
$ticket = new Ticket();
$formTicket = $this->createForm(TicketProductType::class, $ticket, ['company' => $this->getUser()])->handleRequest($request);
if ($formTicket->isSubmitted() && $formTicket->isValid()) {
if (!$this->getUser()) {
$session->set('chatInCurse', true);
return $this->redirectToRoute('app_login');
}
if($this->getUser()!= null) {
$ticket->setNumero(strtoupper(uniqid()))
->setSubject('contact prestataire')
->setProduct($product)
->setCreatedBy($this->getUser());
} else {
$session->set('chatInCurse', true);
return $this->redirectToRoute('app_login');
}
$messaging = new Messaging();
$messaging->setText($request->request->get('ticket_product')['messagings']['text']);
$messaging->setTicket($ticket);
$messaging->setMessageUser($this->getUser());
$ticket->addMessaging($messaging);
$this->em->persist($ticket);
$this->em->persist($messaging);
$this->em->flush();
return $this->redirectToRoute('front_client_space_tickets');
}
// else if($this->getUser() == null) {
// echo '<message class="alert alert-danger">Vous devez vous connecter</message>';
// return $this->redirectToRoute('app_login');
// }
if ($session->get('products')) {
$productExistInSession = false;
foreach ($session->get('products') as $productSession) {
if (array_search($product->getId(), $productSession)) {
$productExistInSession = true;
}
}
} else {
$productExistInSession = false;
}
$avis = new Avis();
$form = $this->createForm(AvisType::class, $avis)->handleRequest($request);
$lastProducts = $productRepository->getOtherProductsCompanyNotSingle($product->getCompany(), $product);
if ($form->isSubmitted() && $form->isValid()) {
$avis->setProduct($product);
$avis->setClient($this->getUser());
$newGlobalNote = ($avis->getCommunication()+$avis->getPrice()+$avis->getConformDescription()+$avis->getFiability()+$avis->getServiceQuality()+$avis->getSpeed()) / 6;
$avis->setGlobalNote($newGlobalNote);
$this->em->persist($avis);
$this->em->flush();
if ($request->files->get('avis') !== null) {
foreach($request->files->get('avis')['imageComments'] as $image){
foreach($image as $img){
if( $img !== null){
$commentimage=$avisRepository->findById(['id'=>$avis->getId()]);
$imagecomment= new ImageComment();
$filename = $file->uploadImageComment($img);
$imagecomment->setAvis($avis);
$imagecomment->setUrl($filename);
$this->em->persist($imagecomment);
}
}
}
$this->em->flush();
}
$this->addFlash('success', 'Merci pour votre avis !');
return $this->redirectToRoute('front_product_single', [
// 'slug' => $product->getSubCategory()->getCategory()->getSlug(),
'slug' => $product->getSubCategories()->toArray()[0]->getCategories()->toArray()[0]->getSlug(),
'subCategorySlug' => $product->getSubCategories()->toArray()[0]->getSubCategorySlug(),
'product_id' => $product->getId(),
'productSlug' => $product->getProductSlug()
]);
}
$contactProduct = new ContactProduct();
$formContactProduct = $this->createForm(ContactProductType::class, $contactProduct)->handleRequest($request);
if ($formContactProduct->isSubmitted() && $formContactProduct->isValid()) {
$contactProduct->setProduct($product);
$this->em->persist($contactProduct);
$this->em->flush();
$mail->contactProvider($product->getCompany(), $contactProduct);
return $this->json([
'status' => 'ok',
'message' => 'Message envoyé !'
]);
}
$productComments = $avisRepository->getCommentsByArticle($product);
$productAvis = $avisRepository->findBy(['product' => $product]);
$globalNote = ['totalNote' => 0, 'count' => 0];
$qualityService = ['totalNote' => 0, 'count' => 0];
$fiablity = ['totalNote' => 0, 'count' => 0];
$price = ['totalNote' => 0, 'count' => 0];
$speed = ['totalNote' => 0, 'count' => 0];
$conformDescription = ['totalNote' => 0, 'count' => 0];
$communication = ['totalNote' => 0, 'count' => 0];
foreach ($productAvis as $avis) {
$globalNote['totalNote'] = $globalNote['totalNote'] + $avis->getGlobalNote();
$globalNote['count'] = $globalNote['count'] + 1;
$qualityService['totalNote'] = $qualityService['totalNote'] + $avis->getServiceQuality();
$qualityService['count'] = $qualityService['count'] + 1;
$fiablity['totalNote'] = $fiablity['totalNote'] + $avis->getFiability();
$fiablity['count'] = $fiablity['count'] + 1;
$price['totalNote'] = $price['totalNote'] + $avis->getPrice();
$price['count'] = $price['count'] + 1;
$speed['totalNote'] = $speed['totalNote'] + $avis->getSpeed();
$speed['count'] = $speed['count'] + 1;
$conformDescription['totalNote'] = $conformDescription['totalNote'] + $avis->getConformDescription();
$conformDescription['count'] = $conformDescription['count'] + 1;
$communication['totalNote'] = $communication['totalNote'] + $avis->getCommunication();
$communication['count'] = $communication['count'] + 1;
}
return $this->render('front/product/single.html.twig', [
'product' => $product,
'otherProducts' => $lastProducts,
'category' => $category,
'btnForm' => $productExistInSession,
'isWish' => $wishListRepository->findOneBy(['user' => $this->getUser(), 'product' => $product]),
'formComment' => $form->createView(),
'formTicket' => $formTicket->createView(),
'formContact' => $formContactProduct->createView(),
'productAvis' => $productComments,
'notes' => [
'globalNote' => $globalNote,
'qualityService' => $qualityService,
'price' => $price,
'speed' => $speed,
'conformDescription' => $conformDescription,
'communication' => $communication,
]
]);
}
/**
*@Route("/sendMessageAbout/{product_id}/{productSlug}", name="connection-test")
*@ParamConverter("product", options={"id" = "product_id"})
*/
public function connectionTest(
SessionInterface $session
) {
if ($this->getUser()== NULL) {
$session->set('chatInCurse', true);
return $this->redirectToRoute('app_login');
}
}
/**
* @Route("/ajout-produit/{id}", name="front_product_add_product_basket")
*/
public function addProductBasket(Product $product, Request $request, SessionInterface $session,SubCategoryRepository $subrepo,ProductOptionRepository $prodOptionrepo)
{
// dd(json_decode($request->get('groupOption')));
// dd($product->getProductOptions()->toArray());
$options = $product->getProductOptions()->toArray();
// dd($options[1]);
// foreach ($request->get('qtyOption') as $key => $value) {
// echo $value . "<br>";
// }
foreach ($options as $key => $value) {
// dd($value->getPQte());
if (isset($request->get('qtyOption')[$value->getId()]) && $request->get('qtyOption')[$value->getId()] > $value->getPQte()) {
// return $this->json([
// 'message' => 'error',
// 'response' => 'Quantité option non disponible'
// ]);
}
}
if (!$request->get('quantity')) {
return $this->json([
'message' => 'error',
'response' => 'Quantité incorrecte'
]);
}
if ($request->get('quantity') > $product->getQuantity()) {
return $this->json([
'message' => 'error',
'response' => 'Quantité non disponible'
]);
}
// $archivoption="";
if ($session->get('products')) {
$allProducts = $session->get('products');
$productExistInSession = false;
foreach ($session->get('products') as $key => $productSession) {
// if (!empty($productSession['options_fairepar'])) {
// $archivoption =$productSession['options_fairepar'];
// }
if (array_search($product->getId(), $productSession)) {
$productExistInSession = true;
unset($allProducts[$key]);
$session->set('products', $allProducts);
}
}
} else {
$productExistInSession = false;
}
if ($productExistInSession) {
return $this->json([
'message' => 'ok',
'response' => 'removed'
]);
}
$sub=$subrepo->getSubcategoryByProduit($product);
if ($sub[0]->getSubCategorySlug() =="faire-part") {
$tabOption=[];
$tabId=[];
if (!empty($request->get('options'))) {
foreach ($request->get('options') as $key => $value) {
$tabId[]=$key;
}
}
if (!empty($request->get('idoptions'))) {
$idoption =$request->get('idoptions');
$tabId= explode(',',$idoption);
}
for ($f=0; $f <sizeof($tabId) ; $f++) {
$existe1 = false;
if (!empty($request->get('tail'))) {
for ($i=0; $i < json_decode($request->get('tail')); $i++) {
if (json_decode($request->get('OpId_'.$i))->idoption == $tabId[$f]) {
$existe1=true;
$tabOption["option_".$f]["idoption"]=json_decode($request->get('OpId_'.$i))->idoption ? json_decode($request->get('OpId_'.$i))->idoption : null;
$tabOption["option_".$f]["nomoption"]=json_decode($request->get('OpId_'.$i))->nomoption ? json_decode($request->get('OpId_'.$i))->nomoption : null;
$tabOption["option_".$f]["imageoption"]=json_decode($request->get('OpId_'.$i))->imageoption ? json_decode($request->get('OpId_'.$i))->imageoption : null;
$tabOption["option_".$f]["color"]=json_decode($request->get('OpId_'.$i))->color ? json_decode($request->get('OpId_'.$i))->color : null;
$tabOption["option_".$f]["form"]=json_decode($request->get('OpId_'.$i))->form ? json_decode($request->get('OpId_'.$i))->form : null;
$tabOption["option_".$f]["finition"]=json_decode($request->get('OpId_'.$i))->finition ? json_decode($request->get('OpId_'.$i))->finition : null;
$tabOption["option_".$f]["papier"]=json_decode($request->get('OpId_'.$i))->papier ? json_decode($request->get('OpId_'.$i))->papier : null;
$tabOption["option_".$f]["etiquette"]=json_decode($request->get('OpId_'.$i))->etiquette ? json_decode($request->get('OpId_'.$i))->etiquette : null;
$tabOption["option_".$f]["ruban"]=json_decode($request->get('OpId_'.$i))->ruban ? json_decode($request->get('OpId_'.$i))->ruban : null;
if (json_decode($request->get('OpId_'.$i))->quantite != null && json_decode($request->get('OpId_'.$i))->quantite != "Échantillon (0,00 €)" ) {
$tabOption["option_".$f]["quantite"] =json_decode($request->get('OpId_'.$i))->quantite ? (int)explode(" ", json_decode($request->get('OpId_'.$i))->quantite)[0] : null;
$tabOption["option_".$f]["price"]=json_decode($request->get('OpId_'.$i))->quantite ? (int)explode(" ", json_decode($request->get('OpId_'.$i))->quantite)[2] : null;
}
else {
$tabOption["option_".$f]["quantite"] = 1;
$tabOption["option_".$f]["price"]= 0.00;
}
}
}
}
if (!$existe1) {
foreach ( $prodOptionrepo->findProduitOptionchecked($tabId[$f]) as $optionsProd) {
$tabOption["option_".$f]["idoption"]=$optionsProd->getId() ? $optionsProd->getId() : null;
$tabOption["option_".$f]["nomoption"]=$optionsProd->getName() ? $optionsProd->getName() : null;
$tabOption["option_".$f]["imageoption"]=$optionsProd->getImage1() ? $optionsProd->getImage1() : null;
$tabOption["option_".$f]["color"]=$optionsProd->getColorsOption() ? $optionsProd->getColorsOption()[0] : null;
$tabOption["option_".$f]["form"]=$optionsProd->getFormat() ? $optionsProd->getFormat()[0] : null;
$tabOption["option_".$f]["finition"]=$optionsProd->getFinition() ? $optionsProd->getFinition()[0] : null;
$tabOption["option_".$f]["papier"]=$optionsProd->getPapier() ? $optionsProd->getPapier()[0] : null;
$tabOption["option_".$f]["etiquette"]=$optionsProd->getEtiquette() ? $optionsProd->getEtiquette()[0] : null;
$tabOption["option_".$f]["ruban"]=$optionsProd->getRuban() ? $optionsProd->getRuban()[0] : null;
$tabOption["option_".$f]["quantite"] = 1;
$tabOption["option_".$f]["price"]= 0.00;
}
}
}
$product = [
'productId' => $product->getId(),
'quantity' => $request->get('quantity'),
'size' => $request->get('size') ? $request->get('size') : null,
'sizeRing' => $request->get('size_ring') ? $request->get('size_ring') : null,
'nbGuest' => $request->get('nb_guest') ? $request->get('nb_guest') : null,
'color' => $request->get('color') ? $request->get('color') : null,
'options' => null,
'options_fairepar' => $tabOption ? $tabOption : null,
'qtyOption' => $request->get('qtyOption') ? $request->get('qtyOption') : null
];
}else {
$options=[];
// for ($g=0; $g < sizeof(json_decode($request->get('groupOption'))); $g++) {
// $options[]=json_decode($request->get('groupOption'))[g]['idoption'];
// }
foreach (json_decode($request->get('groupOption')) as $key => $gropOption) {
foreach ($gropOption->labelo as $key => $lab) {
$options[$gropOption->idoption][]=[
"valeur"=> explode("#_#", $lab)[0],
"prix"=> explode("#_#", $lab)[1],
"qte"=>$gropOption->qte[$key]
];
}
// $options[]=$valer_prix;
// $options[]=$gropOption;
// $options[$gropOption->idoption]=$gropOption->labelo;
// $options[$gropOption->idoption]['qte']=$gropOption->qte;
}
// dd($options);
$product = [
'productId' => $product->getId(),
'quantity' => $request->get('quantity'),
'size' => $request->get('size') ? $request->get('size') : null,
'sizeRing' => $request->get('size_ring') ? $request->get('size_ring') : null,
'nbGuest' => $request->get('nb_guest') ? $request->get('nb_guest') : null,
'color' => $request->get('color') ? $request->get('color') : null,
// 'options' => $request->get('options') ? $request->get('options') : null,
// 'qtyOption' => $request->get('qtyOption') ? $request->get('qtyOption') : null
'options'=>$options
];
}
// dd($product);
if ($session->get('products')) {
$products = $session->get('products');
array_push($products, $product);
$session->set('products', $products);
} else {
$session->set('products', [$product]);
}
if (!empty($tabOption)) {
$session->set('archive', $tabOption);
}
return $this->json([
'message' => 'ok',
'response' => 'added'
]);
}
/**
* @Route("/ajout-pack/{id}", name="front_product_add_pack_basket")
*/
public function addPackToBasket(Pack $pack, SessionInterface $session, Request $request)
{
if (!$session->get('packs')) {
$session->set('packs', $pack->getId());
} else {
$session->remove('packs');
return $this->json([
'message' => "ok",
'response' => 'removed'
]);
}
return $this->json([
'message' => 'ok',
'response' => 'added'
]);
}
/**
* @Route("/get-subcategory", name="front_company_get_subcategory")
*/
public function getSubCategory(Request $request, SubCategoryRepository $subCategoryRepository)
{
if ($request->get('data')) {
$idCategories = json_decode($request->get('data'));
$isClothing = false;
$isColor = false;
$isClothingRing = false;
$isNbGuest = false;
$isService = false;
if ($idCategories->idCategory) {
foreach ($idCategories as $idCategory) {
foreach($idCategory as $idcat) {
$subCategory = $subCategoryRepository->find($idcat);
$isClothing = $subCategory->getIsClothing() ? true : $isClothing;
$isColor = $subCategory->getIsColor() ? true : $isColor;
$isClothingRing = $subCategory->getIsClothingRing() ? true : $isClothingRing;
$isNbGuest = $subCategory->getIsNbGuest() ? true : $isNbGuest;
$isService = $subCategory->getIsService() ? true : $isService;
}
}
}
// dd($isColor,$isFomat,$isFinition);
return $this->json([
'isClothing' => $isClothing,
'isColor' => $isColor,
'isNbGuest' => $isNbGuest,
'isClothingRing' => $isClothingRing,
'isService' => $isService,
'isClothingHTML' => $this->render('front/html/clothing.html.twig'),
'isColorHTML' => $this->render('front/html/colors.html.twig'),
'isNbGuestHTML' => $this->render('front/html/quantity.html.twig'),
'isClothingRingHTML' => $this->render('front/html/clothing_ring.html.twig')
]);
}
}
/**
* @Route("/get-subcategory-fairepart", name="front_company_get_subcategory-fairepart")
*/
public function getSubCatFairepart(Request $request, SubCategoryRepository $subCategoryRepository,Filter $filtre)
{
if ($request->get('data')) {
$idCategories = json_decode($request->get('data'));
$isFairepart = false;
if ($idCategories->idCategory) {
foreach ($idCategories as $idCategory) {
foreach($idCategory as $idcat) {
$subCategory = $subCategoryRepository->find($idcat);
$isFairepart = $subCategory->getIsFairepart() ? true : $isFairepart;
}
}
}
return $this->json([
'isFairepart' => $isFairepart,
'couleurs'=>$filtre->listecouleurs()
]);
}
}
/**
* @Route("/get-type-prestation", name="front_company_get_typePrestation")
*/
public function type_prestation(Request $request, TypePrestationRepository $typePrestationRepository)
{
if ($request->get('data')) {
$idtypePrests = json_decode($request->get('data'));
// dd( $idtypePrests->idtypPrest);
$id=1;
$type=$typePrestationRepository->find($idtypePrests->idtypPrest);
$data['status']=200;
$data['data']=$type;
return $this->json($data, 200, [], [
"groups" => "location:read"
]);
}else{
return $this->json([
'status' => 400
]);
}
}
/**
* @Route("/transporteur/calcul-cout", name="front_front_product_calcul_transporteur", methods={"POST"})
*/
public function getTransporteursPrice(Request $request, TransporteurWeightPriceRepository $transporteurWeightPriceRepository)
{
$data = json_decode($request->get('data'));
if ($data->weightProduct) {
$transporteursWeight = $transporteurWeightPriceRepository->getTransporteursPriceByWeight ($data->weightProduct);
return $this->json([
'transporteurs' => $this->render('front/html/form_transporteurs.html.twig', ['transporteursWeight' => $transporteursWeight])
]);
}
}
/**
* @Route("/transporteur/getable", name="front_front_transporteur_getable", methods={"POST"})
*/
public function getCompanyTransporteursPrice(Request $request, TransporteurWeightPriceRepository $transporteurWeightPriceRepository){
$data = json_decode($request->get('data'));
if ($data->weightProduct) {
//$transporteursWeight = $transporteurWeightPriceRepository->getTransporteursPriceByWeight($data->weightProduct);
$transporteursWeight = $transporteurWeightPriceRepository->getActiveTransporteursPriceByWeight($data->weightProduct);
return $this->json([
'transporteurs' => $this->render('front/html/form_transporteurs.html.twig', ['transporteursWeight' => $transporteursWeight])
]);
}
}
/**
* @Route("option/{id}", name="Options")
*/
public function Option(ProductOption $prodOption){
$data['options']=$prodOption;
// dd($data);
return $this->json($data,200,[],['groups' => 'post:read']);
}
/**
* @Route("tousoption/{id}", name="productOption")
*/
public function prodOption(ProductOptionRepository $optiorepo,Product $product,SessionInterface $session){
$optionProd=$optiorepo->findProduitOptionByProduit($product);
// dd($optionProd);
$data['options']=$optionProd;
if ($session->get('products')) {
$data['opt_pre']=$session->get('archive');
}
return $this->json($data,200,[],['groups' => 'post:read']);
}
/**
* @Route("tous-options-product/{id}", name="option_product")
*/
public function option_produit(ProductOptionRepository $optiorepo,Product $product,SessionInterface $session){
$optionProd=$optiorepo->findProduitOptionByProduit($product);
// dd($session->get('products'));
// if ($session->get('products')) {
// $data['group_pre']=$session->get('archive');
// }
$optiongropeMVew = $this->render('front/product/cart/optionHtml/row.html.twig', [
'optiongroups' => $optionProd
]);
return $this->json($optiongropeMVew->getContent());
}
/**
* @Route("tous-options-groups/{id}", name="options_groups")
*/
public function ajout_options_groups(ProductOptionRepository $optiorepo,Product $product,SessionInterface $session){
$optionProd=$optiorepo->findProduitOptionByProduit($product);
// dd($product);
if ($session->get('products')) {
$pre_commande= [];
foreach ($session->get('products') as $cle => $productOption) {
$pre_commande = $productOption['options'];
// foreach ($productOption['options'] as $idopt => $valueOptions) {
// // $pre_commande[$idopt.'_'.$key]= $valueOption;
// foreach ($valueOptions as $key => $valueOption) {
// $pre_commande[$idopt][$key]=$valueOption['valeur'];
// }
// }
}
}
// dd( $pre_commande,$optionProd);
$optiongropeMVewm = $this->render('front/command/modifgroupbasket/modifGroup.html.twig', [
'optiongroups' => $optionProd,
'dansPanier'=>$pre_commande,
'produit'=>$product
]);
return $this->json($optiongropeMVewm->getContent());
}
}