<?php
namespace App\Controller\Front;
use App\Entity\Avis;
use App\Entity\Pack;
use App\Entity\User;
use App\Entity\Ticket;
use App\Form\AvisType;
use App\Services\File;
use App\Services\Mail;
use App\Entity\Chambre;
use App\Entity\Company;
use App\Entity\Product;
use App\Entity\Category;
use App\Entity\Security;
use App\Services\Filter;
use App\Entity\Equipment;
use App\Entity\Messaging;
use App\Entity\LangueHote;
use App\Entity\LitsChambre;
use App\Entity\SalleDeBain;
use App\Entity\SubCategory;
use App\Entity\ActivityType;
use App\Entity\ImageComment;
use App\Entity\Caracteristic;
use App\Entity\ProductOption;
use App\Entity\ContactProduct;
use App\Entity\PlanningCompany;
use App\Entity\TypeHebergement;
use App\Entity\TypeParticipant;
use App\Form\TicketProductType;
use App\Entity\TypeLocalisation;
use App\Form\ContactProductType;
use App\Traits\FilterPriceTrait;
use App\Entity\MobilierExterieur;
use Symfony\Component\Mime\Email;
use App\Entity\EquipementsCuisine;
use App\Repository\AvisRepository;
use App\Entity\AccessoiresDeChambre;
use App\Repository\TicketRepository;
use App\Repository\CompanyRepository;
use App\Repository\ProductRepository;
use App\Repository\CategoryRepository;
use App\Repository\LocationRepository;
use App\Repository\SecurityRepository;
use App\Repository\WishListRepository;
use App\Entity\TransporteurWeightPrice;
use App\Repository\EquipmentRepository;
use App\Repository\AdminPromoRepository;
use App\Repository\DepartmentRepository;
use App\Repository\LangueHoteRepository;
use Doctrine\ORM\EntityManagerInterface;
use App\Repository\ReservationRepository;
use App\Repository\SubCategoryRepository;
use App\Repository\CaracteristicRepository;
use App\Repository\ProductOptionRepository;
use Knp\Component\Pager\PaginatorInterface;
use App\Repository\TypePrestationRepository;
use App\Repository\PlanningCompanyRepository;
use App\Repository\TypeHebergementRepository;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Mailer\MailerInterface;
use App\Repository\TypeLocalisationRepository;
use Symfony\Component\HttpFoundation\Response;
use App\Repository\OptionHebergementRepository;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use App\Repository\CaracteristiqueVehiculeRepository;
use App\Repository\TransporteurWeightPriceRepository;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Serializer\SerializerInterface;
class ProductController extends AbstractController
{
use FilterPriceTrait;
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var HttpClientInterface
*/
private $client;
public function __construct(EntityManagerInterface $em, HttpClientInterface $client)
{
$this->em = $em;
$this->client = $client;
}
/**
* @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('city_filter') || $request->get('minprice_filter') ||
$request->get('maxprice_filter') || $request->get('category') || $request->get('weddingdate') || $request->get('nb_guest') || $request->get('weddingdate_start') || $request->get('weddingdate_end')
) {
$parameters = [
'department' => $request->get('department_filter') !== '' ? $request->get('department_filter') : null,
'city' => $request->get('city_filter') !== '' ? $request->get('city_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,
'weddingdate_start' => $request->get('weddingdate_start') !== ''? $request->get('weddingdate_start') : null,
'weddingdate_end' => $request->get('weddingdate_end') !== ''? $request->get('weddingdate_end') : 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('city', $request->get('city_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('weddingdate_start', $request->get('weddingdate_start'));
$session->set('weddingdate_end', $request->get('weddingdate_end'));
$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);
if ($parameters['weddingdate']) {
$dateSearch = str_replace('/', '-', $parameters['weddingdate']);
$datetime = new \DateTime($dateSearch);
$datetime->format('Y-m-d');
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
$dateStartSearch = str_replace('/', '-', $parameters['weddingdate_start']);
$dateEndSearch = str_replace('/', '-', $parameters['weddingdate_end']);
$dateStart = new \DateTime($dateStartSearch);
$dateEnd = new \DateTime($dateEndSearch);
}
// 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;
}
if ($parameters['weddingdate']) {
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
if ($planning->getDateStamp() == $datetime->getTimestamp()) {
unset($products[$key]);
}
}
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
$planningDate = new \DateTime();
$planningDate->setTimestamp($planning->getDateStamp());
if (
($planningDate >= $dateStart && $planningDate <= $dateEnd)
) {
unset($products[$key]);
}
}
}
if ($product->getTypePrestation()) {
if ($product->getTypePrestation()->getLabel() == 'location') {
$prodEnLocation = $locationRepository->getLocationByProduit($product);
foreach ($prodEnLocation as $lp) {
if ($parameters['weddingdate']) {
if (($datetime->getTimestamp() >= $lp->getStartAt()->getTimestamp()) && ($datetime->getTimestamp() <= $lp->getEndAt()->getTimestamp())) {
unset($products[$key]);
}
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
if (($dateStart->getTimestamp() >= $lp->getStartAt()->getTimestamp()) && ($dateEnd->getTimestamp() <= $lp->getEndAt()->getTimestamp())) {
unset($products[$key]);
}
}
}
} else {
$prodEnReservation = $reservationRepository->getreservationByProduit($product);
foreach ($prodEnReservation as $reserv) {
if ($parameters['weddingdate']) {
if ($datetime->getTimestamp() == $reserv->getReservationPlannedAt()->getTimestamp()) {
unset($products[$key]);
}
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
if (($reserv->getReservationPlannedAt()->getTimestamp() >= $dateStart->getTimestamp()) &&
($reserv->getReservationPlannedAt()->getTimestamp() <= $dateEnd->getTimestamp())) {
unset($products[$key]);
}
}
}
}
}
}
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/listSearch.html.twig', [
'products' => $pagination,
'countProducts' => $countProducts,
'countServices' => $countService,
'categoryBackground' => $categoryBackground
]);
}
} else {
$parameters = [
'department' => $session->get('department'),
'city' => $session->get('city'),
'min_price' => $session->get('min_price'),
'max_price' => $session->get('max_price'),
'weddingdate' => $session->get('weddingdate'),
'weddingdate_start' => $session->get('weddingdate_start'),
'weddingdate_end' => $session->get('weddingdate_end'),
'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;
if ($parameters['weddingdate']) {
$dateSearch = str_replace('/', '-', $parameters['weddingdate']);
$datetime = new \DateTime($dateSearch);
$datetime->format('Y-m-d');
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
$dateStart = \DateTime::createFromFormat('d/m/Y', $parameters['weddingdate_start'])->format('Y-m-d');
$dateEnd = \DateTime::createFromFormat('d/m/Y', $parameters['weddingdate_end'])->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;
}
if ($parameters['weddingdate']) {
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
if ($planning->getDateStamp() == $datetime->getTimestamp()) {
unset($products[$key]);
}
}
}
if ($parameters['weddingdate_start'] && $parameters['weddingdate_end']) {
/** @var PlanningCompany $planning */
foreach ($product->getCompany()->getPlanningCompanies() as $planning) {
$planningDate = new \DateTime();
$planningDate->setTimestamp($planning->getDateStamp());
if ($planningDate >= new \DateTime($dateStart) && $planningDate <= new \DateTime($dateEnd)) {
unset($products[$key]);
}
}
}
}
// dd($pagination); // error source
return $this->render('front/product/listSearch.html.twig', [
'products' => $pagination,
'countProducts' => $countProducts,
'countServices' => $countService,
'categoryBackground' => $categoryBackground
]);
}
$session->remove('department');
$session->remove('city');
$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(SubCategoryRepository $subCatR, int $page, Category $category, ProductRepository $productRepository, PaginatorInterface $paginator, $slug)
{
$subCategory = new SubCategory;
$subCategory->setSubCategorySlug('string');
$products = $productRepository->productsByCategory($category);
if (sizeof($subCatR->getSubCategoriesByCategory($category->getId())) > 0) {
$subCate = $subCatR->getSubCategoriesByCategory($category->getId())[0]['id'];
$subCategory = $subCatR->find($subCate);
}
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
return $this->render('front/product/list.html.twig', [
'products' => $pagination,
'subcategory' => $subCategory,
'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,
'subcategory' => $subCategory,
'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,
AdminPromoRepository $adminPRomoRepository
) {
$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*/
);
$today = new \DateTimeImmutable();
$isPromoAdmin = $adminPRomoRepository->findOneByPeriod($today);
return $this->render('front/product/listSearch.html.twig', [
'products' => $pagination,
'countProducts' => count($products),
'isPromoAdmin' => $isPromoAdmin
]);
}
/**
* @Route("/service/{slug}/{subCategorySlug}/{product_id}/{productSlug}", name="front_product_single", requirements={"productSlug"=".+"})
* @ParamConverter("product", options={"id" = "product_id"})
*/
public function productSingle(
TicketRepository $ticketRepository,
$slug,
Request $request,
Product $product,
SessionInterface $session,
WishListRepository $wishListRepository,
ProductRepository $productRepository,
AvisRepository $avisRepository,
// User $user,
Mail $mail,
File $file,
PlanningCompanyRepository $planningCompanyRepository,
LocationRepository $locationrepo,
CaracteristiqueVehiculeRepository $caracteristiqueVehiculeRepo,
AdminPromoRepository $adminPRomoRepository
) {
$category = $slug;
$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;
}
$caracteristiqueVId = $product->getCaracteristiqueVehicule() ? $product->getCaracteristiqueVehicule()->getId() : null;
if($caracteristiqueVId){
$caracteristiqueVehicules= $caracteristiqueVehiculeRepo->findOneBy(['id'=>$caracteristiqueVId]);
$caracteristiqueVehiculesDatas = [
'isAirConditioned'=>$caracteristiqueVehicules->getIsAirConditioned() ?: null,
'doorCount'=>$caracteristiqueVehicules->getDoorCount()?: null,
'seatCount'=>$caracteristiqueVehicules->getSeatCount()?: null,
'speedLimit'=>$caracteristiqueVehicules->getSpeedLimit()?: null,
'gearboxType'=>$caracteristiqueVehicules->getGearboxType()?$caracteristiqueVehicules->getGearboxType()->getType(): null,
'fuelType'=>$caracteristiqueVehicules->getFuelType()? $caracteristiqueVehicules->getFuelType()->getFuel() : null
];
}elseif(!$caracteristiqueVId){
$caracteristiqueVehiculesDatas = [
'isAirConditioned'=>null,
'doorCount'=>null,
'seatCount'=>null,
'speedLimit'=>null,
'gearboxType'=>null,
'fuelType'=>null
];
}
// dd($caracteristiqueVehiculesDatas);
$today = new \DateTimeImmutable();
$isPromoAdmin = $adminPRomoRepository->findOneByPeriod($today);
return $this->render('front/product/single.html.twig', [
'plannings' => $planningCompanyRepository->findBy(['company' => $product->getCompany()]),
'planningClients' => $locationrepo->getLocationByCompany($product->getCompany()),
'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,
],
'caracteristiques'=> $caracteristiqueVehiculesDatas,
'isPromoAdmin' => $isPromoAdmin
]);
}
/**
*@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'];
// }
$groupsOption = json_decode($request->get('groupOption'));
if (empty($groupsOption) || $groupsOption == null) {
} else {
foreach ($groupsOption 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,
TypeLocalisationRepository $typLocalRep,
TypeHebergementRepository $typHebRep,
LangueHoteRepository $langHoteRep,
EquipmentRepository $equipmRep,
SecurityRepository $secureRep,
CaracteristicRepository $caracteristicRep
) {
$typLocalisations = $typLocalRep->findAll();
$typeHebergements = $typHebRep->findAll();
$securities = $secureRep->findAll();
$hoteLanguages = $langHoteRep->findAll();
$equipments = $equipmRep->findAll();
$caracteristics = $caracteristicRep->findAll();
// Activités liées aux activités
// $activities = $subCategoryRepository->findCategoryBySubCategorySlug('activites');
$activities = $this->em->getRepository(ActivityType::class)->findAll();
if ($request->get('data')) {
$idCategories = json_decode($request->get('data'));
$isClothing = false;
$isColor = false;
$isClothingRing = false;
$isNbGuest = false;
$isService = false;
$isVehicle = false;
$slugs = [];
$slug = '';
$categoryHebergement = $this->em->getRepository(Category::class)->findOneBy(['slug' => 'hebergements']);
$subCategoryHebergements = $categoryHebergement->getSubCategories()->toArray();
$subCategorySlugHebergement = [];
foreach ($subCategoryHebergements as $subCategoryHebergement) {
$subCategorySlugHebergement[] = $subCategoryHebergement->getSubCategorySlug();
}
if ($idCategories->idCategory) {
foreach ($idCategories as $idCategory) {
foreach ($idCategory as $idcat) {
$subCategory = $subCategoryRepository->find($idcat);
$slugs[] = $subCategory->getSubCategorySlug();
$slug = $subCategory->getSubCategorySlug();
$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;
$isVehicle = $subCategory->getIsVehicle() ? true : $isVehicle;
}
}
}
// dd($isColor,$isFomat,$isFinition);
return $this->json([
'subCategSlugs' => $slugs,
'subCategSlug' => $slug,
'isClothing' => $isClothing,
'isColor' => $isColor,
'isNbGuest' => $isNbGuest,
'isClothingRing' => $isClothingRing,
'isService' => $isService,
'isVehicle' => $isVehicle,
'subCategorySlugHebergement' => $subCategorySlugHebergement,
'isHebergementHTML' => $this->render('front/html/choix_type_hebergement.html.twig', [
'typLocalisations' => $typLocalisations,
'typeHebergements' => $typeHebergements,
'securities' => $securities,
'hoteLanguages' => $hoteLanguages,
'equipments' => $equipments,
'caracteristics' => $caracteristics
]),
'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'),
'isActivitesHTML' => $this->render('front/html/choix_type_activite.html.twig', [
'activities' => $activities
])
]);
}
}
/**
* @Route("/get-subcategory-hebergement", name="front_company_get_subcategory_hebergement")
*/
public function getSubCategoryHebergement(
Request $request,
SubCategoryRepository $subCategoryRepository,
TypeLocalisationRepository $typLocalRep,
TypeHebergementRepository $typHebRep,
LangueHoteRepository $langHoteRep,
EquipmentRepository $equipmRep,
SecurityRepository $secureRep,
CaracteristicRepository $caracteristicRep
) {
$typLocalisations = $typLocalRep->findAll();
$typeHebergements = $typHebRep->findAll();
$securities = $secureRep->findAll();
$hoteLanguages = $langHoteRep->findAll();
$equipments = $equipmRep->findAll();
$caracteristics = $caracteristicRep->findAll();
if ($request->get('data')) {
$idCategories = json_decode($request->get('data'));
$isClothing = false;
$isColor = false;
$isClothingRing = false;
$isNbGuest = false;
$isService = false;
$slugs = [];
$slug = '';
$categoryHebergement = $this->em->getRepository(Category::class)->findOneBy(['slug' => 'hebergement']);
$subCategoryHebergements = $categoryHebergement->getSubCategories()->toArray();
foreach ($subCategoryHebergements as $subCategoryHebergement) {
$subCategorySlugHebergement[] = $subCategoryHebergement->getSubCategorySlug();
}
if ($idCategories->idCategory) {
foreach ($idCategories as $idCategory) {
foreach ($idCategory as $idcat) {
$subCategory = $subCategoryRepository->find($idcat);
$slugs[] = $subCategory->getSubCategorySlug();
$slug = $subCategory->getSubCategorySlug();
$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([
'subCategSlugs' => $slugs,
'subCategSlug' => $slug,
'isClothing' => $isClothing,
'isColor' => $isColor,
'isNbGuest' => $isNbGuest,
'isClothingRing' => $isClothingRing,
'isService' => $isService,
'subCategorySlugHebergement' => $subCategorySlugHebergement,
'isHebergementHTML' => $this->render('front/html/optionHebergement.html.twig', [
'typLocalisations' => $typLocalisations,
'typeHebergements' => $typeHebergements,
'securities' => $securities,
'hoteLanguages' => $hoteLanguages,
'equipments' => $equipments,
'caracteristics' => $caracteristics
]),
'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-subCategoryAdded", name="front_company_get_subCategoryAdded")
*/
public function subCategoryAdded(Request $request, SubCategoryRepository $subCategRep, CategoryRepository $categRep)
{
$subCategSelected = [];
$slugSubCateg = [];
if ($request->get('data')) {
$subCategAdded = json_decode($request->get('data'));
if ($subCategAdded) {
foreach ($subCategAdded as $idSubCateg) {
$subCategSelected[] = $subCategRep->find($idSubCateg);
}
}
}
if ($subCategSelected) {
foreach ($subCategSelected as $subCateg) {
$slugSubCateg[] = $subCateg->getSubCategorySlug();
}
}
$criteres['slug'] = 'hebergements';
$subCategHebergm = $categRep->findByCriteres($criteres)[0]->getSubCategories()->toArray();
foreach ($subCategHebergm as $subHebg) {
$allSubCategHeberg[] = $subHebg->getSubCategorySlug();
}
return $this->json([
'subCategSelected' => $slugSubCateg,
'allSubCategHeberg' => $allSubCategHeberg
]);
}
/**
* @Route("/get-typeLocalisationAdded", name="front_company_get_typeLocalisationAdded")
*/
public function typeLocalisationAdded(Request $request, TypeLocalisationRepository $typLocalRep)
{
$typeLocalisationSelected = [];
if ($request->get('data')) {
$typeLocalisationAdded = json_decode($request->get('data'));
if ($typeLocalisationAdded) {
foreach ($typeLocalisationAdded as $idTypeLocal) {
$typeLocalisationSelected[] = $typLocalRep->find($idTypeLocal);
}
}
}
return $this->json([
'typeLocalisationSelected' => $typeLocalisationSelected
]);
}
/**
* @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-typeHebergementAdded", name="front_company_get_typeHebergementAdded")
*/
public function typeHebergementAdded(Request $request, TypeHebergementRepository $typHebgRep)
{
$typLocalisations = $this->em->getRepository(TypeLocalisation::class)->findAll();
$typeHebergements = $this->em->getRepository(TypeHebergement::class)->findAll();
$securities = $this->em->getRepository(Security::class)->findAll();
$hoteLanguages = $this->em->getRepository(LangueHote::class)->findAll();
$equipments = $this->em->getRepository(Equipment::class)->findAll();
$caracteristics = $this->em->getRepository(Caracteristic::class)->findAll();
$equipementsCuisine = $this->em->getRepository(EquipementsCuisine::class)->findAll();
$salleDeBain = $this->em->getRepository(SalleDeBain::class)->findAll();
$accessoiresDeChambre = $this->em->getRepository(AccessoiresDeChambre::class)->findAll();
$mobilierExterieur = $this->em->getRepository(MobilierExterieur::class)->findAll();
$typHebergSelected = [];
if ($request->get('data')) {
$typeHebergementAdded = json_decode($request->get('data'));
if ($typeHebergementAdded) {
$typHebergSelected = $typHebgRep->find($typeHebergementAdded[0]);
}
$typeHebergement = $typHebergSelected->getSlugTypeHebergm();
}
if ($typeHebergement == "hotel") {
$type = $this->render('front/html/typeHebergement/HotelHebergement.html.twig', [
'typLocalisations' => $typLocalisations,
'securities' => $securities,
'hoteLanguages' => $hoteLanguages,
'equipments' => $equipments,
'caracteristics' => $caracteristics,
'equipementsCuisine' => $equipementsCuisine,
'salleDeBain' => $salleDeBain,
'accessoiresDeChambre' => $accessoiresDeChambre,
'mobilierExterieur' => $mobilierExterieur
]);
} else if ($typeHebergement == "appartement") {
$type = $this->render('front/html/typeHebergement/appartement.html.twig', [
'typLocalisations' => $typLocalisations,
'securities' => $securities,
'hoteLanguages' => $hoteLanguages,
'equipments' => $equipments,
'caracteristics' => $caracteristics,
'equipementsCuisine' => $equipementsCuisine,
'salleDeBain' => $salleDeBain,
'accessoiresDeChambre' => $accessoiresDeChambre,
'mobilierExterieur' => $mobilierExterieur
]);
} else if ($typeHebergement == "maison" || $typeHebergement == "villa" || $typeHebergement == "camping" || $typeHebergement == "bateau" || $typeHebergement == "chalet") {
$type = $this->render('front/html/typeHebergement/maisonHebergement.html.twig', [
'typLocalisations' => $typLocalisations,
'securities' => $securities,
'hoteLanguages' => $hoteLanguages,
'equipments' => $equipments,
'caracteristics' => $caracteristics,
'equipementsCuisine' => $equipementsCuisine,
'salleDeBain' => $salleDeBain,
'accessoiresDeChambre' => $accessoiresDeChambre,
'mobilierExterieur' => $mobilierExterieur
]);
}
return $this->json([
'typHebergSelected' => $typHebergSelected,
'isHebergementHTML' => $type
]);
}
/**
* @Route("/get-languagesAdded", name="front_company_get_languagesAdded")
*/
public function languagesAdded(Request $request, LangueHoteRepository $langHoteRep)
{
$selectLanguage = [];
if ($request->get('data')) {
$languagesAdded = json_decode($request->get('data'));
if ($languagesAdded) {
foreach ($languagesAdded as $idLangue) {
$selectLanguage[] = $langHoteRep->find($idLangue);
}
}
}
return $this->json([
'selectLanguage' => $selectLanguage
]);
}
/**
* @Route("/get-equipementsAdded", name="front_company_get_equipementsAdded")
*/
public function equipemenstAdded(Request $request, EquipmentRepository $equipmRep)
{
$selectedEquipement = [];
if ($request->get('data')) {
$equipemenstAdded = json_decode($request->get('data'));
if (!empty($equipemenstAdded)) {
foreach ($equipemenstAdded as $idEqupm) {
$selectedEquipement[] = $equipmRep->find($idEqupm);
}
}
}
return $this->json([
'selectedEquipement' => $selectedEquipement
]);
}
/**
* @Route("/get-securitiesAdded", name="front_company_get_securitiesAdded")
*/
function securitiesAdded(Request $request, SecurityRepository $secureRep)
{
$selectedSecurities = [];
if ($request->get('data')) {
$securitiesAdded = json_decode($request->get('data'));
if (!empty($securitiesAdded)) {
foreach ($securitiesAdded as $idSecure) {
$selectedSecurities[] = $secureRep->find($idSecure);
}
}
}
return $this->json([
'selectedSecurities' => $selectedSecurities
]);
}
/**
* @Route("/get-caracteristicAdded", name="front_company_get_availableCaracteristic")
*/
public function caracteristicAdded(Request $request, CaracteristicRepository $caractikRep)
{
$caracteristicSelected = [];
if ($request->get('data')) {
$caracteristicAdded = json_decode(($request->get('data')));
if (!empty($caracteristicAdded)) {
foreach ($caracteristicAdded as $idCaracteristic) {
$caracteristicSelected[] = $caractikRep->find($idCaracteristic);
}
}
}
return $this->json([
'caracteristicSelected' => $caracteristicSelected
]);
}
/**
* @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("/delete/{roomOption}/roomOption", name="front_company_delete_roomOption")
*/
public function deleteRoomOption(Chambre $roomOption)
{
$entityManager = $this->getDoctrine()->getManager();
$entityManager->remove($roomOption);
$entityManager->flush();
return $this->json([
'status' => 200
]);
}
/**
* @Route("/get-litChambreData", name="front_company_get_litChambreData")
*/
public function getLitChambreData()
{
$litsChambres = $this->em->getRepository(LitsChambre::class)->findAll();
$typeParticipants = $this->em->getRepository(TypeParticipant::class)->findAll();
$data['status'] = 200;
$data['data'] = $litsChambres;
foreach ($litsChambres as $litsChambre) {
$slug[] = $litsChambre->getSlug();
$type[] = $litsChambre->getType();
}
foreach ($typeParticipants as $typeParticipant) {
$typeParticipantSlug[] = $typeParticipant->getSlugTypeParticipant();
$typeParticipantType[] = $typeParticipant->getTypeParticipant();
}
$typeDeParticipants = array();
for ($i = 0; $i < count($typeParticipantSlug); $i++) {
$typeDeParticipants[] = array(
'slug' => $typeParticipantSlug[$i],
'type' => $typeParticipantType[$i]
);
}
return $this->json([
// "groups" => "location:read",
"slugs" => $slug,
"types" => $type,
"typeDeParticipants" => $typeDeParticipants
]);
}
/**
* @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());
}
/**
* @Route("/hebergement/filtre{page}", defaults={"page"=1}, requirements={"page"="\d+"}, name="heb_filtre", methods={"POST"})
*/
public function filtreHeberge(int $page, Request $request, ProductRepository $heb, CaracteristicRepository $hebCar, PaginatorInterface $paginator, LocationRepository $locationRepository)
{
// dd($request);
if ($request->isMethod('POST')) {
$parameters = [
'prix' => $request->get('prix') ? $request->get('prix') : null,
'avis' => $request->get('avis') ? $request->get('avis') : null,
'nbrAdulte' => $request->get('nbrAdulte') ? $request->get('nbrAdulte') : null,
'nbrEnfant' => $request->get('nbrEnfant') ? $request->get('nbrEnfant') : null,
'nbrBebe' => $request->get('nbrBebe') ? $request->get('nbrBebe') : null,
'nbrEnfant' => $request->get('nbrEnfant') ? $request->get('nbrEnfant') : null,
'equipements' => $request->get('equipements') ? $request->get('equipements') : null,
'caracteristics' => $request->get('caracteristique') ? $request->get('caracteristique') : null,
'typeLocalisations' => $request->get('localisation') ? $request->get('localisation') : null,
'securities' => $request->get('securite') ? $request->get('securite') : null,
'langueHotes' => $request->get('langue') ? $request->get('langue') : null,
];
// $products = $productRepository->searchProductCompany($parameters, $this->getUser());
$products = $heb->Hebergement($parameters);
} else {
$products = $heb->findBy(['company' => $this->getUser()], ['id' => 'DESC']);
}
$pagination = $paginator->paginate(
$products,
$page, /*page number*/
15 /*limit per page*/
);
$countService = 0;
$countProducts = 0;
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;
}
}
// dd($products[0]->getSubCategories()->toArray());
$categoryBackground = null;
$result = $this->render('front/product/recherceHebergement.html.twig', [
'products' => $pagination,
'countProducts' => $countProducts,
'countServices' => $countService,
'categoryBackground' => $categoryBackground
]);
return $this->json($result->getContent());
}
/**
* @Route("/get-commune", methods={"GET"}, name="get_commune")
*/
public function getCommune(Request $request): JsonResponse
{
try {
$page = $request->query->getInt('page', 1);
$limit = $request->query->getInt('limit', 50);
$searchTerm = $request->query->get('q', ''); // Terme de recherche
$url = 'https://geo.api.gouv.fr/communes?fields=nom,code&format=json';
$response = $this->client->request('GET', $url);
$communes = $response->toArray();
// Filtrer les communes par le terme de recherche (si renseigné)
if (!empty($searchTerm)) {
$communes = array_filter($communes, function ($commune) use ($searchTerm) {
return stripos($commune['nom'], $searchTerm) !== false;
});
}
// Pagination manuelle
$offset = ($page - 1) * $limit;
$paginatedCommunes = array_slice($communes, $offset, $limit);
$communeData = array_map(function ($commune) {
return [
'id' => $commune['code'],
'text' => $commune['nom']
];
}, $paginatedCommunes);
return new JsonResponse($communeData, JsonResponse::HTTP_OK);
} catch (\Exception $e) {
return new JsonResponse(['error' => 'Impossible de récupérer les communes'], JsonResponse::HTTP_BAD_REQUEST);
}
}
/**
* @Route("/get-annonce-subcategory", name="get_annonce_subcategory", methods={"POST"})
*/
public function getAnnonceSubcategory(Request $request, SubCategoryRepository $subCategoryRepository, CategoryRepository $categoryRepository, SerializerInterface $serializer): JsonResponse {
$data = json_decode($request->get('data_object'));
$subcategories = [];
$activiteShoppingCategory = $categoryRepository->findOneBy(['slug' => 'activites-shopping']);
if ($data->id_type) {
$subcategories = $subCategoryRepository->getSubCategoriesByAnnonceType($data->id_type, $activiteShoppingCategory);
}
// Serialize to JSON
$json = $serializer->serialize($subcategories, 'json', [
'groups' => ["subcategory:read"], // optional, if you use serialization groups
]);
return new JsonResponse($json, JsonResponse::HTTP_OK);
}
}