<?php
namespace App\Controller\Front;
use App\Entity\Produit;
use App\Entity\User;
use App\Repository\BasketRepository;
use App\Repository\ProduitRepository;
use App\Services\BasketService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;
/**
* @Route("/produit")
*/
class ProduitController extends AbstractController
{
#[Route('/', name: 'app_front_produit_list')]
public function index(Request $request, ProduitRepository $produitRepository): Response
{
// $search = ($request->query->has("search") && !empty($request->query->has("search"))) ? $request->query->get("search") : "";
$produits = $produitRepository->findAll();
// foreach ($produits as $key => $produit) {
// $logo = $produit->getLogo();
// if (!is_null($logo) && !empty($logo)) $produit->setLogo("/uploads/images/".$logo);
// }
// $basketService = new BasketService($basketRepository, $produitRepository);
return $this->render('front/produit/index.html.twig', [
'produits' => $produits,
// 'nbPanier' => count($basketService->getAllBaskets($user)),
// 'dateArray' => $this->dateArray($translator),
// 'classes' => $currentPathService->classes(),
]);
}
/**
* @Route("/show/{id}", name="app_front_produit_show", methods={"GET"})
*/
public function show(Produit $produit): Response
{
$logo = $produit->getLogo();
$data = [
'numero' => $produit->getNumero(),
'logo' => (!is_null($logo) && !empty($logo)) ? "/uploads/images/".$logo : null,
'nom' => $produit->getNom(),
'prix' => $produit->getPrixDeVente(),
'rom' => $produit->getRom(),
'ram' => $produit->getRam(),
'chipset' => !is_null($produit->getChipset()) ? $produit->getChipset() : "",
'os' => !is_null($produit->getOs()) ? $produit->getOs() : "",
'battery' => !is_null($produit->getBatteryCapacity()) ? $produit->getBatteryCapacity() : "",
'cam' => [
'apn' => !is_null($produit->getMainCameraResolution()) ? $produit->getMainCameraResolution() : "",
'selfie' => !is_null($produit->getSelfieCameraResolution()) ? $produit->getSelfieCameraResolution() : "",
'features' => !is_null($produit->getMainCameraFeatures()) ? $produit->getMainCameraFeatures() : "",
],
'wifi' => $produit->getBuiltInWifi() == 'yes' ? [
'version' => !is_null($produit->getWifiVersion()) ? $produit->getWifiVersion() : "",
'features' => !is_null($produit->getWifiFeatures()) ? $produit->getWifiFeatures() : "",
] : [],
'bluetooth' => $produit->getBuiltInBluetooth() == 'yes' ? [
'version' => !is_null($produit->getBluetoothVersion()) ? $produit->getBluetoothVersion() : "",
'features' => !is_null($produit->getBluetoothFeatures()) ? $produit->getBluetoothFeatures() : "",
] : [],
];
return $this->json($data);
}
/**
* @Route("/basket/{type}", name="app_front_produit_basket", methods={"POST"})
*/
public function basketAction(string $type, Request $request, Security $security, ProduitRepository $produitRepository, BasketRepository $basketRepository): Response
{
$user = $security->getUser();
if( $user instanceof User ){
if ($request->request->has("action") && $request->request->get("action") == $type) {
$produit = $request->request->get("produit");
$basketService = new BasketService($basketRepository, $produitRepository);
if ($request->request->get("action") == "add") {
$basketService->toBasket($user, $produitRepository->find($produit));
$produitsGot = $basketService->getAllBaskets($user, true);
$produits = [];
// $total = 0;
foreach ($produitsGot as $key => $value) {
// $total += $value->getProduit()->getPrixDeVente();
$logo = $value->getProduit()->getLogo();
$produits[] = [
'id' => $value->getProduit()->getId(),
'logo' => (!is_null($logo) && !empty($logo)) ? "/uploads/images/".$logo : null,
'nom' => $value->getProduit()->getNom(),
'rom' => $value->getProduit()->getRom(),
'ram' => $value->getProduit()->getRam(),
'prix' => number_format($value->getProduit()->getPrixDeVente(), 0, ',', ' '),
];
}
$groupedArray = [];
foreach ($produits as $item) {
$id = $item['id'];
if (!isset($groupedArray[$id])) {
$groupedArray[$id] = $item;
$groupedArray[$id]['quantity'] = 1;
} else {
$groupedArray[$id]['quantity']++;
}
}
// Convert associative array to indexed array
$produits = array_values($groupedArray);
return $this->json([
'success' => true,
'produits' => $produits,
'nbPanier' => count($basketService->getAllBaskets($user)),
]);
} elseif (in_array($request->request->get("action"), ["increase", "decrease"])) {
if ($request->request->get("action") == "increase") {
$basketService->toBasket($user, $produitRepository->find($produit));
} elseif ($request->request->get("action") == "decrease") {
$basketService->removeLatestBasket($user, $produitRepository->find($produit));
}
$produitsGot = $basketService->getAllBaskets($user);
$total = 0;
foreach ($produitsGot as $key => $value) {
$total += $value->getProduit()->getPrixDeVente();
}
return $this->json([
'success' => true,
'basket' => [
'nbPanier' => count($basketService->getAllBaskets($user)),
'total' => number_format($total, 0, ',', ' ')
],
]);
}
}
}
return $this->json([
'success' => false,
'message' => "Vous devez vous connecter pour ajouter un produit au panier.",
]);
// return $this->redirectToRoute('app_login', [], Response::HTTP_SEE_OTHER);
}
}