<?php
namespace App\Controller;
use App\Entity\Bundle;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\TrafficTracker;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Partner;
use App\Entity\Productbywholesaler;
use App\Entity\Vendors;
use App\Entity\Customer;
use App\Entity\Product;
use App\Entity\Usercart;
use App\Entity\User;
use App\Entity\Vendorpartnerlevel;
use App\Entity\Businessoportinities;
use App\Entity\DiscountsByChannel;
use App\Service\HeaderData;
use App\Service\Translation;
use App\Service\ServiceNotification;
use App\Entity\Productsbusinessoportinities;
use App\Entity\Licenseresources;
use App\Repository\TaxesRepository;
use App\Service\ServiceDiscounts;
use App\Service\JsonSearchService;
use App\Entity\Taxes;
use App\Service\StockService;
use App\Service\PickupWarehouseService;
use App\Service\GenerateLinesFromSalesService;
use App\Service\PriceCalculatorService;
use App\Entity\Sales;
use App\Entity\License;
use App\Entity\File;
use App\Entity\MarkupsByChannel;
use App\Service\FinancialRiskService;
use DateTime;
use App\Service\ConnectifService;
use App\Service\Currency\OperationalCurrencyProvider;
use App\Entity\Warehouse;
use App\Entity\WarehousePolicies;
use App\Entity\CompanyAddress;
use App\Service\LicenseGeneratorService;
use App\Service\SaleGeneratorService;
use App\Service\ExtraFieldsService;
class CartController extends AbstractController
{
private $financialRiskService;
private $buildHeaderData;
private $connectifService;
private $operationalCurrencyProvider;
public function __construct(FinancialRiskService $financialRiskService, HeaderData $buildHeaderData, ConnectifService $connectifService, OperationalCurrencyProvider $operationalCurrencyProvider)
{
$this->financialRiskService = $financialRiskService;
$this->buildHeaderData = $buildHeaderData;
$this->connectifService = $connectifService;
$this->operationalCurrencyProvider = $operationalCurrencyProvider;
}
/**
* /**
* @Route("/catalog/cart/customercarts/{userId}", name="cart_customer_carts", requirements={"userId"="\d+"})
*/
public function customerCarts(Request $request, TrafficTracker $trafficTracker, HeaderData $buildHeaderData, Translation $translation, ServiceDiscounts $serviceDiscounts, $userId)
{
$trafficTracker->registerTraffic();
$vendorRepository = $this->getDoctrine()->getRepository(Vendors::class);
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
//$cart = $userCartRepository->MyUserCartQuery($user)->getQuery()->getResult();
if($user->getCustomer()){
return $this->redirectToRoute('cart_index', ['userId' => $userId, 'customerId' => $user->getCustomer()->getId()]);
}
$cart = $entityManager->createQuery("SELECT uc FROM \App\Entity\Usercart uc "
. "JOIN App\Entity\Customer c "
. "JOIN App\Entity\Partner p "
. 'where uc.customer = c.id and c.partner = :partner and uc.unregistrationdate is null and uc.sale is null')
->setParameter('partner', $user->getPartner())
->getResult();
if (sizeof($cart) == 0) {
return $this->redirectToRoute('catalog_goto');
}
$customerCarts = array();
foreach ($cart as $cartItem) {
if (!array_key_exists($cartItem->getCustomer()->getId(), $customerCarts)) {
$customerCarts[$cartItem->getCustomer()->getId()] = array($cartItem);
} else {
array_push($customerCarts[$cartItem->getCustomer()->getId()], $cartItem);
}
}
foreach ($customerCarts as $cart) {
$serviceDiscounts->checkPromosAvailableInCart($cart);
$serviceDiscounts->checkBOsAvailableInCart($cart);
}
return $this->render('/catalog/cart/customercarts.html.twig', array(
'headerData' => $buildHeaderData->buildHeaderData($user),
'customerCarts' => $customerCarts,
'vendorsRepository' => $vendorRepository
));
}
/**
* Remove one item from customer carts
*
* @Route("/catalog/cart/removecustomercarts/{userId}/{itemId}", name="cart_remove_customercarts", requirements={"userId"="\d+", "itemId"="\d+"})
*/
public function removeCustomerCarts(TrafficTracker $trafficTracker, StockService $stockService, $userId, $itemId)
{
$trafficTracker->registerTraffic();
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$cartItem = $userCartRepository->MyCustomersCartQuery()
->andwhere('uc.id = :cartId')
->setparameter('cartId', $itemId)
->getQuery()
->getOneOrNullResult();
if (!is_null($cartItem)) {
$stockService->removeProvisioningRelatedItems($user, $cartItem);
$this->removeItem($cartItem);
}
// Redirect to cart index
return $this->redirectToRoute('cart_customer_carts', ['userId' => $userId]);
}
public function removeItem($cartItem)
{
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
if (!is_null($cartItem->getRelatedCartId())) {
foreach ($cartItem->getRelatedCartId() as $relatedCartId) {
/*$relatedItem = $userCartRepository->MyUserCartQuery($user)
->andwhere('uc.id = :relatedItem')
->setparameter('relatedItem', $relatedCartId)
->getQuery()
->getOneOrNullResult();*/
$relatedItem = $entityManager->createQuery("SELECT uc FROM \App\Entity\Usercart uc "
. "JOIN App\Entity\Customer c "
. "JOIN App\Entity\Partner p "
. 'where uc.customer = c.id and c.partner = :partner and uc.unregistrationdate is null and uc.sale is null and uc.id = :relatedItem')
->setParameter('partner', $user->getPartner())
->setparameter('relatedItem', $relatedCartId)
->getOneOrNullResult();
$relatedItem->setUnregistrationdate(new \DateTime());
$entityManager->persist($relatedItem);
$entityManager->flush();
}
}
$cartItem->setUnregistrationdate(new \DateTime());
$entityManager->persist($cartItem);
$entityManager->flush();
}
/**
* /**
* @Route("/catalog/cart/index/{userId}/{customerId}", name="cart_index", requirements={"userId"="\d+"})
*/
public function index(Request $request, TrafficTracker $trafficTracker, TranslatorInterface $translator, HeaderData $buildHeaderData, Translation $translation, ServiceDiscounts $serviceDiscounts, PriceCalculatorService $priceCalculatorService, PickupWarehouseService $pickupWarehouseService, $userId, $customerId = null)
{
$trafficTracker->registerTraffic();
$entityManager = $this->getDoctrine()->getManager();
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$vendorRepository = $this->getDoctrine()->getRepository(Vendors::class);
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$bundleRepository = $this->getDoctrine()->getRepository(Bundle::class);
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$productPromotionRepository = $this->getDoctrine()->getRepository(\App\Entity\Productpromotion::class);
/** @var TaxesRepository */
$taxesRepository = $this->getDoctrine()->getRepository(Taxes::class);
/** @var Warehouse */
$warehouseRepository = $entityManager->getRepository(Warehouse::class);
/** @var Customer */
$customerRepository = $entityManager->getRepository(Customer::class);
$session = $this->get('session');
$locale = $request->getLocale();
$user = $this->getUser();
$taxes = 0;
$data = array();
$customer=null;
if (!$customerId) {
return $this->redirectToRoute('catalog_goto');
}
else
{
$customer = $customerRepository->MyCustomerQuery($user)
->andWhere('c.id = :id')
->setParameter('id', $customerId)
->getQuery()
->setMaxResults(1)
->getOneOrNullResult();
}
$isPartner = $user->getPartner() ? true : false;
$partner=null;
if($user->getPartner()){
$partner=$user->getPartner();$target=$user->getPartner();
}
elseif($user->getCustomer()){
$partner=$user->getCustomer()->getPartner();$target=$user->getCustomer();
}
else{
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.PartnerNotFound'));
return $this->redirectToRoute('catalog_goto');
}
$cart = $userCartRepository->MyCustomerCartQuery($user)
->andWhere('uc.customer = :customer')
->setParameter('customer', $customerId)
->getQuery()->getResult();
if (sizeof($cart) == 0) {
return $this->redirectToRoute('catalog_goto');
}
$serviceDiscounts->checkPromosAvailableInCart($cart);
$serviceDiscounts->checkBOsAvailableInCart($cart);
$cartIncludesHardware=false;
$cartIncludesStockMerge=null;
$cartIncludesStockMergeText = null;
$total = 0;
foreach ($cart as $item) {
if (!$userCartRepository->checkRelatedId($item)) {
continue;
}
$pbw = $pbwRepository->MyProductbywholesalerQuery($user)
->andWhere('pbw.id = :pbwId')
->setParameter('pbwId', $item->getPbw()->getId())
->getQuery()
->getOneOrNullResult();
$tax = $taxesRepository->getTaxForPbw($pbw);
$partnerlevel = $partnerRepository->getPartnerLevel($partner, $pbw->getProduct()->getProductLine()->getVendor()->getId());
$promo = null;
$discountType = null;
$promoCode = null;
if ($item->getProductPromotion() && $user->getPartner()) {
$discountType = $translation->getTranslationBy($item->getProductPromotion()->getDiscountType(), $locale, 'name');
$promoCode = $item->getProductPromotion()->getPromotion()->getCode();
$promo=$item->getProductPromotion();
}
$bo = null;
$discountTypeBo = null;
$boCode = null;
if ($item->getProductbusinessoportunities() != null && $user->getPartner()) {
$bo = $item->getProductbusinessoportunities();
$discountTypeBo = $item->getProductbusinessoportunities()->getDiscountType()->getName();
$boCode = $item->getProductbusinessoportunities()->getBusinessOportunity()->getCode();
}
elseif($item->getProductBusinessOpportunityCustomer() != null && $user->getCustomer()) {
$bo = $item->getProductBusinessOpportunityCustomer();
$discountTypeBo = $item->getProductBusinessOpportunityCustomer()->getDiscountType()->getName();
$boCode = $item->getProductBusinessOpportunityCustomer()->getBusinessOportunity()->getCode();
}
if (isset($pbw)) {
//overrider partnerLevel if not follows katy system
if (!$pbw->getProduct()->getProductline()->getVendor()->getFollowsKatyPartnerLevel()) {
$vendorLvlName = $entityManager->createQuery('SELECT vplvl FROM App\Entity\Vendorpartnerlevel vplvl '
. 'where vplvl.vendor = :vendorId and vplvl.level = :level')
->setParameters(array('vendorId' => $pbw->getProduct()->getProductline()->getVendor()->getId(), 'level' => $partnerlevel))
->setMaxResults(1)
->getOneOrNullResult();
$partnerlevel = $vendorLvlName ? $vendorLvlName->getName() : '';
}
if ($pbw->getProduct()->getVolumeMin() == $pbw->getProduct()->getVolumeMax())
{
$itemMultiplier = 1;
} else
{
$itemMultiplier = $item->getVolume();
}
$unitPrice = $priceCalculatorService->calculatePrice($pbw, $target, null, null, 1, $bo, $promo, null, true, false);
$priceNoTax = $priceCalculatorService->calculatePrice($pbw, $target, null, null, $itemMultiplier, $bo, $promo, null, true, false) * $item->getQuantity();
if ($tax) {
$taxes += ($priceNoTax * $tax->getValue()) / 100;
}
$totalImport = $priceCalculatorService->calculatePrice($pbw, $target, null, null, $itemMultiplier, $bo, $promo, null, true, true) * $item->getQuantity();
if ($pbw->getProduct()->getFare() != 1) {
$total = $total + $totalImport;
}
// TO-DO calculatePrice
if ($pbw->getProduct()->getSku() == 'BUNDLE') {
$bundle = true;
$description = '';
$parameters = $item->getParameters();
$bundle = $bundleRepository->find($parameters['bundleId']);
$name = $bundle->getName();
$productsBundle = $bundle->getBundleProduct();
$price = $bundle->getPrice();
foreach ($productsBundle as $pb) {
$description .= $pb->getProduct()->getDescriptiveName() . ' - ' . $pb->getProduct()->getSku() . '</br>';
}
$unitPrice = $bundle->getPrice();
$pvdTotal = $price * $item->getQuantity();
$priceNoTax = $price * $item->getQuantity();
$total += $priceNoTax;
} else {
$bundle = false;
}
$parameters = $item->getParameters();
if ($pbw->getProduct()->getIsHardware() == true) {
$cartIncludesHardware = true;
}
$stockMergeText = $parameters['stockMergeText'] ?? null;
if (!empty($stockMergeText) && is_null($cartIncludesStockMerge)) {
$cartIncludesStockMergeText = $stockMergeText;
}
$data[] = array(
'productByWholesaler' => $pbw,
'productName' => $bundle ? $name : $pbw->getProduct()->getDescriptiveName(),
'pbwDescription' => $bundle ? $description : $pbw->getDescription(),
'period' => $pbw->getProduct()->getPayperiod()->getPeriod(),
'image' => $pbwRepository->getCoverImage($pbw),
'sku' => $pbw->getProduct()->getSku(),
'quantity' => $item->getQuantity(),
'volume' => $item->getVolume(),
'cartId' => $item->getId(),
'unitPrice' => $unitPrice,
'priceNoTax' => $priceNoTax,
'isPartner' => $isPartner,
'promotion' => $item->getProductPromotion(),
'discountType' => $discountType,
'promoCode' => $promoCode,
'bo' => $bo,
'discountTypeBo' => $discountTypeBo,
'boCode' => $boCode,
'tax' => $tax ? $tax : null,
'overage' => $item->getOverage(),
'bundle' => $bundle
);
}
}
$delivaryData = $this->getDeliveryDataFromCartItems($cart, $partner, $customer, $translator);
return $this->render('/catalog/cart/index.html.twig', array(
'partnerId' => $partner->getId(),
'isPartner' => $isPartner,
'data' => $data,
'headerData' => $buildHeaderData->buildHeaderData($user),
'total' => $total,
'locale' => $locale,
'customer' => $customerId,
'taxes' => (float)$taxes,
'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency(),
'cnClientInfo' => ($this->connectifService->cnClientInfo($user)),
'cnCart' => ($this->connectifService->cnCart($user)),
'operationalCurrency' => $this->operationalCurrencyProvider->provide($target),
'cartIncludesHardware' => $cartIncludesHardware,
'cartIncludesStockMergeText' => $cartIncludesStockMergeText,
'delivaryData' => $delivaryData,
'pickupData' => $pickupWarehouseService->getAvailableWarehouses($cart, $user)
));
}
private function getDeliveryDataFromCartItems($cart, $partner, $customer, $translator)
{
$entityManager = $this->getDoctrine()->getManager();
/** @var Warehouse */
$warehouseRepository = $entityManager->getRepository(Warehouse::class);
/** @var CompanyAddress */
$companyAddressRepository = $entityManager->getRepository(CompanyAddress::class);
/** @var WarehousePolicies */
$warehousePoliciesRepository = $entityManager->getRepository(WarehousePolicies::class);
$user = $this->getUser();
$data = array('allowPickup' => true, 'allowCustomerDelivery' => false, 'allowUnofficialDelivery' => false);
//DATA FROM POLICIES
$warehousePolicies = $warehousePoliciesRepository->MyWarehousePoliciesQuery($user)
->getQuery()
->getOneOrNullResult();
if($warehousePolicies){
$data['allowCustomerDelivery']=$warehousePolicies->getAllowCustomerDelivery();
$data['allowUnofficialDelivery']=$warehousePolicies->getAllowNonOfficialAddresses();
}
$addresses = array();
//GENERAL PARTNER ADDRESSES
$companyAddresses = $companyAddressRepository->MyCompanyAddressQuery($partner)->getQuery()->getResult();
foreach ($companyAddresses as $companyAddress) {
$addresses[] = [
'id' => $companyAddress->getId(),
'address' => $companyAddress->getName()." - ".$companyAddress->getAddress().", ".$companyAddress->getPostcode().", ".$companyAddress->getCity(),
'selected' => $companyAddress->getPrimaryAddress(),
];
}
if (empty($addresses)) {
$addresses[] = [
'id' => $partner->getId(),
'address' => $partner->getAddress().", ".$partner->getPostcode().", ".$partner->getCity(),
'selected' => true,
];
}
$data['addresses']=$addresses;
$customerAddresses = array();
//CUSTOMER ADDRESSES
$customerAddressesBD = $companyAddressRepository->MyCompanyAddressQuery($customer)->getQuery()->getResult();
foreach ($customerAddressesBD as $companyAddress) {
$customerAddresses[] = [
'id' => $companyAddress->getId(),
'address' => $companyAddress->getName()." - ".$companyAddress->getAddress().", ".$companyAddress->getPostcode().", ".$companyAddress->getCity(),
'selected' => $companyAddress->getPrimaryAddress(),
];
}
if (empty($customerAddresses)) {
$customerAddresses[] = [
'id' => $customer->getId(),
'address' => $customer->getAddress().", ".$customer->getPostcode().", ".$customer->getCity(),
'selected' => true,
];
}
$data['customerAddresses']=$customerAddresses;
return $data;
}
/**
* /**
* @Route("/catalog/cart/add/{userId}", name="cart_add", requirements={"userId"="\d+"})
*/
public function add(Request $request, TrafficTracker $trafficTracker, $userId, ExtraFieldsService $extraFieldsService)
{
$trafficTracker->registerTraffic();
$userCart = new Usercart();
$typeOfProduct = $request->get('typeofproduct');
$domain = empty($request->get('domain')) ? null : $request->get('domain');
$quantity = $request->get('quantity');
$volume = $request->get('volume');
$volume_addon = $request->get('volume_addon');
$customer = $request->get('customer');
$pbwId = $request->get('pbwId');
$preorder = $request->get('preorder');
$divide = $request->get('divide');
$bundleId = $request->get('bundle');
$productbywholesalerRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$bundleRepository = $this->getDoctrine()->getRepository(Bundle::class);
$licenseType = $request->get('licenseType');
$stockMergeText = $request->get('stock_merge_text');
if ((is_null($pbwId) && is_null($bundleId)) || is_null($customer) || is_null($volume) || is_null($quantity)) {
return $this->redirectToRoute('catalog_goto');
}
$serialNumber = $request->files->get('serialNumber');
if (!is_null($serialNumber) && !empty($serialNumber)) {
// Verificar la extensión del archivo
$fileExtension = $serialNumber->guessExtension();
if (!in_array($fileExtension, array("xlsx"))) {
return $this->redirectToRoute('catalog_view', ['id' => $pbwId]);
}
}
if(is_null($volume_addon)){
$volume_addon=$volume;
}
$entityManager = $this->getDoctrine()->getManager();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$user = $this->getDoctrine()->getRepository(User::class)->find($userId);
$customer = $this->getDoctrine()->getRepository(Customer::class)->find($customer);
$productPromotionRepo = $this->getDoctrine()->getRepository(\App\Entity\Productpromotion::class);
$productRepository = $this->getDoctrine()->getRepository(Product::class);
if ($pbwId) {
$pbw = $this->getDoctrine()->getRepository(Productbywholesaler::class)->find($request->get('pbwId'));
} else { //BUNDLE ONLY
$bundle = $bundleRepository->MyBundleQuery($user)->andWhere('b.id = :bundleId')->setParameter('bundleId', $bundleId)->getQuery()->getOneOrNullResult();
$parameters = $userCart->getParameters();
$parameters['bundleId'] = $bundleId;
$parameters['description'] = $bundle->getDescription();
$parameters['name'] = $bundle->getName();
$parameters['price'] = $bundle->getPrice();
$parameters['freeInvoicescustomer'] = 1;
$parameters['freeInvoicespartner'] = 1;
$userCart->setParameters($parameters);
$pbw = $productbywholesalerRepository->MyBundleByWholesalerQuery($user);
$mainProduct = $userCartRepository->addItem($userCart, $user, $pbw, $volume, $quantity, $customer, $domain, null, null, null, null, 0, 0, $bundle->getPrice());
return $this->redirectToRoute('cart_customer_carts', ['userId' => $userId]);
}
//New types with volume and quantity
$newTypesVolumeAndQuantity = array(1/*'simple_type'*/, 3/*'with_maintenance'*/, 5/*'flavoured_type'*/, 4/*'flavoured_list_type'*/, 6/*'flavoured_duration'*/, 7 /*'flavoured_volumelist_duration'*/, 8 /*'flavoured_duration_volumeinput'*/, 9 /*'flavoured_version'*/, 10 /*'flavoured_version_volume_input'*/, 11/*'flavour_list_with_maintenance'*/, 12/*'flavour_with_maintenance'*/, 13/*'flavoured_version_maintenance'*/, 14/*'flavoured_version_with_volume'*/, 15/*'flavoured_version_volumeinput_range'*/, 16, 17, 21, 22, 23, 24, 25, 26);
$newTypesVolumeAndQuantityMaint = array(3/*'with_maintenance'*/, 11/*'flavour_list_with_maintenance'*/, 12/*'flavour_with_maintenance'*/, 13/*'flavoured_version_maintenance'*/, 22, 23, 26);
//SOFTWARE
$stockCart = 0;
$preorderCart = 0;
//HARDWARE - ONLY STOCK
if ($pbw->getProduct()->getIsHardware()) {
$stockCart = $volume;
}
//HARDWARE - ALL PREORDER
if (empty($divide) && !empty($preorder)) {
$stockCart = $volume - $preorder;
$preorderCart = $preorder;
}
//HARDWARE - STOCK -> DIVIDED
if (!empty($divide) && $divide == 1) {
$volume = $volume - $preorder;
$stockCart = $volume;
$volume_addon = $volume;
}
if ($volume > 0) {
//New types with volume and quantity
if (in_array($typeOfProduct, $newTypesVolumeAndQuantity)) {
$promotionsRequest = json_decode($request->get('promotions'), true);
$idProductPromotion = $promotionsRequest == null ? null : $promotionsRequest[$pbw->getId()];
$productPromo = $idProductPromotion ? $productPromotionRepo->find($idProductPromotion) : null;
$userCart = $this->resetUserCartInstance();
$mainProduct = $userCartRepository->addItem($userCart, $user, $pbw, $volume, $quantity, $customer, $domain, null, $productPromo, null, null, $stockCart, $preorderCart);
if (in_array($typeOfProduct, $newTypesVolumeAndQuantityMaint) && !is_null($request->get('maintenance')) && $request->get('maintenance') != '') {
$pbwMaintId = $request->get('maintenance');
$pbwMain = $this->getDoctrine()->getRepository(Productbywholesaler::class)->find($pbwMaintId);
$idProductPromoMaint = $promotionsRequest == null ? null : $promotionsRequest[$pbwMaintId];
$productPromoMaint = $idProductPromoMaint ? $productPromotionRepo->find($idProductPromoMaint) : null;
$userCart = $this->resetUserCartInstance();
$subProduct = $userCartRepository->addItem($userCart, $user, $pbwMain, $volume_addon, $quantity, $customer, $domain, $mainProduct->getId(), $productPromoMaint, null, null, $stockCart, $preorderCart);
$userCartRepository->addRelatedId($mainProduct, $subProduct->getId());
}
}
/// Bloque Extrafields
$extraParams = $extraFieldsService->processExtraFields(
$request,
$productRepository->getParentSkuIds($pbw->getProduct())->getParameters() ?? []
);
if (!empty($extraParams)) {
$newParams = array_merge($newParams ?? [], $extraParams);
$mainProduct->setParameters($newParams);
$entityManager->persist($mainProduct);
$entityManager->flush();
}
////
if (!is_null($licenseType) && !empty($licenseType)) {
$newParams['licenseType'] = $licenseType;
$mainProduct->setParameters(json_decode(json_encode($newParams), true));
$entityManager->persist($mainProduct);
$entityManager->flush();
}
if (!is_null($stockMergeText) && !empty($stockMergeText)) {
$newParams['stockMergeText'] = $stockMergeText;
$mainProduct->setParameters(json_decode(json_encode($newParams), true));
$entityManager->persist($mainProduct);
$entityManager->flush();
}
}
//HARDWARE - PREORDER -> DIVIDED
if (!empty($preorder) && !empty($divide)) {
$volume = $preorder;
$volume_addon = $volume;
$preorderCart = $preorder;
$stockCart = 0;
if (in_array($typeOfProduct, $newTypesVolumeAndQuantity)) {
$promotionsRequest = json_decode($request->get('promotions'), true);
$idProductPromotion = $promotionsRequest == null ? null : $promotionsRequest[$pbw->getId()];
$productPromo = $idProductPromotion ? $productPromotionRepo->find($idProductPromotion) : null;
$userCart = $this->resetUserCartInstance();
$mainProduct = $userCartRepository->addItem($userCart, $user, $pbw, $volume, $quantity, $customer, $domain, null, $productPromo, null, null, $stockCart, $preorderCart);
if (in_array($typeOfProduct, $newTypesVolumeAndQuantityMaint) && !is_null($request->get('maintenance')) && $request->get('maintenance') != '') {
$pbwMaintId = $request->get('maintenance');
$pbwMain = $this->getDoctrine()->getRepository(Productbywholesaler::class)->find($pbwMaintId);
$idProductPromoMaint = $promotionsRequest == null ? null : $promotionsRequest[$pbwMaintId];
$productPromoMaint = $idProductPromoMaint ? $productPromotionRepo->find($idProductPromoMaint) : null;
$userCart = $this->resetUserCartInstance();
$subProduct = $userCartRepository->addItem($userCart, $user, $pbwMain, $volume_addon, $quantity, $customer, $domain, $mainProduct->getId(), $productPromoMaint, null, null, $stockCart, $preorderCart);
$userCartRepository->addRelatedId($mainProduct, $subProduct->getId());
}
}
}
return $this->redirectToRoute('cart_index', ['userId' => $userId, 'customerId' => $customer->getId()]);
//return $this->redirectToRoute('cart_customer_carts', ['userId' => $userId]);
}
/**
* Remove one item from the cart
*
* @Route("/catalog/cart/remove/{userId}/{cartId}", name="cart_remove", requirements={"userId"="\d+", "cartId"="\d+"})
*/
public function remove(TrafficTracker $trafficTracker, StockService $stockService, $userId, $cartId)
{
$trafficTracker->registerTraffic();
$entityManager = $this->getDoctrine()->getManager();
$user = $this->getUser();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$cartItem = $userCartRepository->MyUserCartQuery($user)
->andwhere('uc.id = :cartId')
->setparameter('cartId', $cartId)
->getQuery()
->getOneOrNullResult();
$customerId = $cartItem->getCustomer()->getId();
if (!is_null($cartItem)) {
$stockService->removeProvisioningRelatedItems($user, $cartItem);
$this->removeItem($cartItem);
}
// Redirect to cart index
return $this->redirectToRoute('cart_index', ['userId' => $userId, 'customerId' => $customerId]);
}
/**
* Action to sale everything in the cart
*
* @Route("/catalog/cart/checkout/{userId}/{customerId}", name="cart_checkout", requirements={"userId"="\d+"})
*/
public function checkout(Request $request, TrafficTracker $trafficTracker, Translation $translation, TranslatorInterface $translator, HeaderData $buildHeaderData, $userId, ServiceNotification $serviceNotification, ServiceDiscounts $serviceDiscounts, JsonSearchService $jsonSearchService, GenerateLinesFromSalesService $invoiceService, PriceCalculatorService $priceCalculatorService, $customerId = null, LicenseGeneratorService $licenseGenerator, SaleGeneratorService $saleGenerator)
{
$trafficTracker->registerTraffic();
$session = $this->get('session');
$entityManager = $this->getDoctrine()->getManager();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$userRepository = $this->getDoctrine()->getRepository(User::class);
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$boRepository = $this->getDoctrine()->getRepository(Businessoportinities::class);
$customerRepository = $this->getDoctrine()->getRepository(Customer::class);
$vendorRepository = $this->getDoctrine()->getRepository(Vendors::class);
$productbywholesalerRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$productPromotionRepository = $this->getDoctrine()->getRepository(\App\Entity\Productpromotion::class);
$session = $this->get('session');
/** @var TaxesRepository */
$taxRepository = $this->getDoctrine()->getRepository(Taxes::class);
//Check Markup and Discounts
/** @var MarkupsByChannelRepository */
$markupsByChannelRepository = $this->getDoctrine()->getRepository(MarkupsByChannel::class);
/** @var DiscountsByChannelRepository */
$discountsByChannelRepository = $this->getDoctrine()->getRepository(DiscountsByChannel::class);
/** @var FileRepository */
$fileRepository = $this->getDoctrine()->getRepository(File::class);
$deliveryType = $request->request->get('delivery_type');
$warehouseId = $request->request->get('pickup_warehouse_id');
$addressSource = $request->request->get('address_source'); // 'partner' | 'customer' | 'custom'
$selectedAddress = $request->request->get('selected_address');
//USER
$user = $userRepository->MyUserQuery($this->getUser())
->andWhere('u.id = :userId')
->setParameter('userId', $userId)
->getQuery()
->getSingleResult();
//CUSTOMER
if (!$customerId) {
return $this->redirectToRoute('catalog_goto');
}else{
$customer = $customerRepository->MyCustomerQuery($user)
->andWhere('c.unregistrationdate is NULL ')
->andWhere('c.id = :customerId ')
->setParameter('customerId', $customerId)
->getQuery()
->getOneOrNullResult();
if (!$customer) {
return $this->redirectToRoute('catalog_goto');
}
}
//PARTNER
$partner = $partnerRepository->MyPartnerQuery($user)->getQuery()->getSingleResult();
if (!$partner) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.PartnerNotFound'));
return $this->redirectToRoute('catalog_goto');
}
//WHOLESALER
$wholesaler = $partner->getWholesaler();
//TARGET
if($user->getPartner()){
$target=$user->getPartner();
}
elseif($user->getCustomer()){
$target=$user->getCustomer();
}
//CART
$cart = $userCartRepository->MyUserCartQuery($user)
->andWhere('uc.customer = :customer')
->setParameter('customer', $customerId)
->getQuery()
->getResult();
// If cart is empty
if (sizeof($cart) == 0) {
return $this->redirect($this->generateUrl('cart_index', array('userId' => $userId)));
}
$serviceDiscounts->checkPromosAvailableInCart($cart);
$serviceDiscounts->checkBOsAvailableInCart($cart);
$financialRiskCheckResult=$this->financialRiskService->financialRiskCheck('cartCheckout', $cart, $user, $customer);
if($financialRiskCheckResult['result']==false){
return $this->render('catalog/cart/denied.html.twig', array(
'headerData' => $buildHeaderData->buildHeaderData($user),
'partnerId' => $partner->getId(),
'reference' => 'reference',
'data' => $financialRiskCheckResult['data'],
'currency' => $partner->getWholesaler()->getCurrency()->getIso(),
'comercial' => $userRepository->find($userRepository->getCompany($user)->getIdCommercialAgent()),
'title' => 'app.General.SystemMessages.LimitExceeded',
'message' => 'app.General.SystemMessages.LimitExceeded',
'messageDesc' => 'app.General.SystemMessages.AuthorizationRequired',
'vendorsRepository' => $vendorRepository,
'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency()
));
}
//Mark BO has redeemed
$idBusinessoportunity = $this->findBOActiveInCustomerCart($cart);
if ($idBusinessoportunity) {
$bo = $boRepository->find($idBusinessoportunity);
if (!$bo->getUsed()) {
$bo->setUsed(true);
$entityManager->persist($bo);
$entityManager->flush();
}
}
//PO NUMBER
if (!empty($request->get('po_number'))) {
$po_number = $request->get('po_number');
if (strlen($po_number) > 50) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.Guidelines.TooLong'));
return $this->redirectToRoute('cart_index', ['userId' => $userId, 'customerId' => $customerId]);
}
}else {
$po_number = null;
}
$poOriginalFileName = null;
$poFileName = null;
$purchaseOrder = null;
$path = $this->getParameter('private_folder') . 'po/';
if (!empty($request->files->get('po'))) {
$file = $request->files->get('po');
$fileExtension = $file->guessExtension();
if (!in_array($fileExtension, array("pdf"))) {
$session->getFlashBag()->add('danger', $translator->trans('app.Development.DataImport.FileCannotLoaded'));
return $this->redirectToRoute('cart_index', ['userId' => $userId, 'customerId' => $customerId]);
}
$poOriginalFileName = $file->getClientOriginalName();
$newName = uniqid() . '.' . $file->guessExtension();
$poFileName = $newName;
$file->move($path, $newName);
$uploadedPofile = new \App\Entity\File();
$uploadedPofile->setOriginalName($poOriginalFileName);
$uploadedPofile->setFileName($poFileName);
$entityManager->persist($uploadedPofile);
$purchaseOrder = new \App\Entity\PurchaseOrder();
$purchaseOrder->setNumber($po_number);
$purchaseOrder->setDescription("purchase");
$purchaseOrder->setCreatedBy($user->getId());
$purchaseOrder->setFile($uploadedPofile);
$entityManager->persist($purchaseOrder);
$entityManager->flush();
}
$locale = $request->getLocale();
$reference = time() . '-' . rand(0, 999999);
$licensesArray = array();
$cartReference = null;
//Process each SKU (Create license and Sale)
foreach ($cart as $cartItem) {
if ($cartItem->getProductPromotion() && !is_null($cartItem->getProductPromotion()->getStock()) && $cartItem->getProductPromotion()->getStock() > 0) {
$cartItem->getProductPromotion()->setStock($cartItem->getProductPromotion()->getStock() - 1);
$entityManager->persist($cartItem);
$entityManager->flush();
}
//Find product
$pbw = $productbywholesalerRepository->MyProductbywholesalerQuery($user)
->andWhere('pbw.id = :pbwId')
->setParameter('pbwId', $cartItem->getPbw()->getId())
->getQuery()
->getOneOrNullResult();
$parameters = $cartItem->getParameters();
$q = $cartItem->getQuantity();
$v = $cartItem->getVolume();
$n = $pbw->getProduct()->getVolumeMin() == $pbw->getProduct()->getVolumeMax() ? 1 : $v;
for ($i = 0; $i < $q; $i++) {
//Create License
$license = $licenseGenerator->createLicense($customer, $pbw->getProduct(), $v, 1, null, null, null, null);
if (!is_null($purchaseOrder)) {
$license->addPurchaseOrder($purchaseOrder);
}
if($pbw->getProduct()->getIsHardware()){
$parameters['deliveryType'] = $deliveryType;
$parameters['warehouseId'] = $warehouseId;
$parameters['addressSource'] = $addressSource;
$parameters['selectedAddress'] = $selectedAddress;
$license->setParameters(json_decode(json_encode($parameters), true));
}
else
{
$license->setParameters($cartItem->getParameters());
}
$license->setStock($cartItem->getStock());
$license->setOverage($cartItem->getOverage());
$mainProduct=$productRepository->getParentSkuIds($pbw->getProduct());
if ($mainProduct->getProductType()->getId()==26 && $pbw->getProduct()->getCanSellAlone()) {
$license->setIsMain(0);
} elseif($mainProduct->getProductType()->getId()==26) {
$license->setIsMain(1);
} elseif ($pbw->getProduct()->getCanSellAlone()) {
$license->setIsMain(1);
} else {
$license->setIsMain(0);
}
if ($cartItem->getDomain()) {
$license->setLicenseId($cartItem->getDomain());
}
if ($license->getProduct()->getIsHardware()) {
$license->setDeliveryStatus("Processing");
}
$entityManager->persist($license);
$entityManager->flush();
$serialNumberFileId = $jsonSearchService->searchKeyInArray($cartItem->getParameters(), 'serialNumberFile');
if (!empty($serialNumberFileId)) {
$serialNumberFile = $fileRepository->find($serialNumberFileId[0]);
$licenseResource = new Licenseresources();
$licenseResource->setResourcetype(8);
$licenseResource->setResource($serialNumberFile->getOriginalName());
$licenseResource->setResourceDescription($serialNumberFile->getFileName());
$licenseResource->setLicense($license);
$entityManager->persist($licenseResource);
$entityManager->flush();
}
$licensesArray[] = $license;
// Recoger PO
$user = $this->getUser();
$isPartner = $user->getPartner() ? true : false;
$exchangeRate = $productbywholesalerRepository->getExchangeRate($pbw);
$boCustomer = $cartItem->getProductBusinessOpportunityCustomer();
$bo = $cartItem->getProductBusinessOportunities();
if ($cartItem->getProductPromotion() != null) {
$productPromotion = $cartItem->getProductPromotion();
$promotions = $productPromotionRepository->find($cartItem->getProductPromotion()->getId());
if (!is_null($promotions) && $promotions->getPromotion()->getUsed() == 0) {
$promotions->getPromotion()->setUsed(1);
$entityManager->persist($promotions);
$entityManager->flush();
}
if ($promotions->getStock() != 0 || $promotions->getStock()) {
$promotions->setStock($promotions->getStock() - 1);
$entityManager->persist($promotions);
$entityManager->flush();
}
}else{
$productPromotion = null;
}
$partnerPO = $isPartner ? $po_number : null;
$customerPO = !$isPartner ? $po_number: null;
$sale = $saleGenerator->createSale(
$reference,
$partnerPO,
null,
$customerPO,
$customer,
$pbw,
$n,
null,
null,
$exchangeRate,
$license,
null,
null,
null,
1,
$bo,
$boCustomer,
$productPromotion
);
$cartItem->setSale($sale);
$cartItem->setSaleReference($reference);
$entityManager->persist($cartItem);
$entityManager->flush();
//BUNDLE SUBLICENSES ONLY
if (!is_null($parameters) && array_key_exists('bundleId', $parameters)) {
$bundleRepository = $this->getDoctrine()->getRepository(Bundle::class);
$bundle = $bundleRepository->MyBundleQuery($user)->andWhere('b.id = :bundleId')->setParameter('bundleId', $parameters['bundleId'])->getQuery()->getOneOrNullResult();
$bundlePbws = $bundle->getBundleProduct();
$license->setActivationDate(new DateTime('now'));
$license->setActivationRequestDate(new DateTime('now'));
$license->setHasSublicenses(1);
$entityManager->persist($license);
$entityManager->flush();
foreach ($bundlePbws as $item) {
$z = 1;
$subLicense = $licenseGenerator->createLicense($customer, $item->getProduct(), $v, 0, null, null, null, null);
$subLicense->setParameters($parameters);
$subLicense->setStock(0);
$subLicense->setOverage(0);
$subLicense->setMainLicense($license);
$entityManager->persist($subLicense);
$entityManager->flush();
$reference = $reference . '-' . $z++;
$subSale = $saleGenerator->createSale(
$reference,
$partnerPO,
null,
$customerPO,
$customer,
$pbw,
null,
null,
null,
$exchangeRate,
$subLicense,
null,
null,
null,
1,
$bo,
$boCustomer,
$productPromotion
);
}
$sale->setDatebegining(new DateTime('now'));
$sale->setClosed('0');
$sale->setPrice($bundle->getPrice());
$sale->setPriceConverted($bundle->getPrice());
$sale->setExchangeRate(null);
$entityManager->persist($sale);
$entityManager->flush();
$month = $sale->getDatebegining()->format('m');
$year = $sale->getDatebegining()->format('Y');
$invoiceService->generateLines('partner', $month, $year, $wholesaler, $sale->getId());
$invoiceService->generateLines('customer', $month, $year, $wholesaler, $sale->getId());
$financialRisk = $partner->getFinancialrisk();
if (!is_null($financialRisk)) {
$totalSale = $sale->getQuantity() * $sale->getPrice();
$financialRisk = $financialRisk - $totalSale;
$partner->setFinancialRisk($financialRisk);
$entityManager->persist($partner);
$entityManager->flush();
}
}
}
$cartReference = $cartItem->getCartReference();
}
$allLicenseToActivate = $licensesArray;
//Link sublicenses to mainlicense
foreach ($licensesArray as $key => $license) {
if ($license->getIsMain()) {
foreach ($licensesArray as $l) {
if(is_null($l->getMainlicense()) && !is_null($license->getProduct()->getMaintenanceskuids()) && in_array($l->getProduct()->getId(), $license->getProduct()->getMaintenanceskuids())){
$l->setMainlicense($license);
$license->setHasSublicenses(1);
$entityManager->persist($l);
$entityManager->persist($license);
$entityManager->flush();
unset($licensesArray[$key]);
break;
}
}
}
}
foreach ($allLicenseToActivate as $key => $license) {
$response = $this->forward('App\Controller\ProductManagerController::activationlicenseAction', ['id' => $license->getId()]);
}
return $this->redirectToRoute('license_index', ['cart_id' => $cartReference]);
}
/**
* Last page of the process shows aquired services / products
*
*
* @Route("/catalog/cart/done/{userId}/{reference}", name="cart_done", requirements={"userId"="\d+", "reference"="\S+"})
*/
public function done(Request $request, TrafficTracker $trafficTracker, TranslatorInterface $translator, HeaderData $buildHeaderData, ServiceNotification $serviceNotification, PriceCalculatorService $priceCalculatorService, $userId, $reference)
{
$trafficTracker->registerTraffic();
$entityManager = $this->getDoctrine()->getManager();
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$userRepository = $this->getDoctrine()->getRepository(User::class);
$partnerRepository = $this->getDoctrine()->getRepository(Partner::class);
$pbwRepository = $this->getDoctrine()->getRepository(Productbywholesaler::class);
$vendorsRepository = $this->getDoctrine()->getRepository(Vendors::class);
$session = $this->get('session');
/** @var TaxesRepository */
$taxesRepository = $this->getDoctrine()->getRepository(Taxes::class);
$data = [];
$isPartner = $this->getUser()->getPartner() ? true : false;
$locale = $request->getLocale();
$taxes = 0;
// Get partner
$user = $userRepository->MyUserQuery($this->getUser())
->andWhere('u.id = :userId ')
->setParameter('userId', $userId)
->setMaxResults(1)
->getQuery()
->getSingleResult();
if($user->getPartner()){
$target=$user->getPartner();
$partner = $user->getPartner();
}
elseif($user->getCustomer()){
$target=$user->getCustomer();
$partner = $user->getCustomer()->getPartner();
}
if (!$partner) {
$session->getFlashBag()->add('danger', $translator->trans('app.General.SystemMessages.PartnerNotFound'));
return $this->redirectToRoute('catalog_goto');
}
$userCart = $entityManager->createQuery('SELECT uc FROM App\Entity\Usercart uc WHERE uc.salereference = :reference')->setParameter('reference', $reference)->getResult();
$total = 0;
// For each element in the cart
foreach ($userCart as $cartItem) {
$promotion = null;
$discountTypePr = null;
$promoCode = null;
$bo = null;
$discountTypeBo = null;
$boCode = null;
//Find product
$pbw = $pbwRepository->MyProductbywholesalerQuery($user)
->andWhere('pbw.wholesaler = :wholesalerId')
->andWhere('p.sku = :sku')
->leftJoin('pbw.product', 'p')
->setParameter('wholesalerId', $partner->getWholesaler()->getId())
->setParameter('sku', $cartItem->getSale()->getSku())
->getQuery()
->getOneOrNullResult();
$tax = $taxesRepository->getTaxForPbw($pbw);
if ($cartItem->getSale()->getProductPromotion() != null && $user->getPartner()) {
$promotion = $cartItem->getSale()->getProductPromotion();
$discountTypePr = $cartItem->getSale()->getProductPromotion()->getDiscountType()->getName();
$promoCode = $cartItem->getSale()->getProductPromotion()->getPromotion()->getCode();
}
if ($cartItem->getSale()->getProductbusinessoportunity() != null && $user->getPartner()) {
$bo = $cartItem->getSale()->getProductbusinessoportunity();
$discountTypeBo = $cartItem->getSale()->getProductbusinessoportunity()->getDiscountType()->getName();
$boCode = $cartItem->getSale()->getProductbusinessoportunity()->getBusinessOportunity()->getCode();
}
elseif($cartItem->getSale()->getProductBusinessOpportunityCustomer() != null && $user->getCustomer()) {
$bo = $cartItem->getSale()->getProductBusinessOpportunityCustomer();
$discountTypeBo = $cartItem->getSale()->getProductBusinessOpportunityCustomer()->getDiscountType()->getName();
$boCode = $cartItem->getSale()->getProductBusinessOpportunityCustomer()->getBusinessOportunity()->getCode();
}
$unitPrice = $priceCalculatorService->calculatePrice($pbw, $target, null, null, 1, $bo, $promotion, null, true, false);
$priceNoTax = $priceCalculatorService->calculatePrice($pbw, $target, null, null, $cartItem->getSale()->getQuantity(), $bo, $promotion, null, true, false) * $cartItem->getQuantity();
if ($tax) {
$taxes += ($priceNoTax * $tax->getValue()) / 100;
}
$totalImport = $priceCalculatorService->calculatePrice($pbw, $target, null, null, $cartItem->getSale()->getQuantity(), $bo, $promotion, null, true, true) * $cartItem->getQuantity();
if ($cartItem->getSale()->getProduct()->getFare() != 1) {
$total = $total + $totalImport;
}
$exchange_rate = $pbwRepository->getExchangeRateToApply($pbw);
$parameters = $cartItem->getParameters();
// TO-DO calculatePrice
if (!is_null($parameters) && array_key_exists('bundleId', $parameters)) {
$pvd = $parameters['price'];
$pvdTotal = $cartItem->getQuantity() * $pvd;
$pvdTotalNoTax = $pvdTotal;
$tax = null;
$total += $pvdTotal;
}
// Calculamos los totales
$totalForDiscount = $priceNoTax / $exchange_rate;
// Calculamos el descuento total. Cero si es cliente o si precio es Cero.
if ($cartItem->getSale()->getPrice() == 0) {
$totalDiscount = 0;
} else {
$totalDiscount = (1 - ($totalForDiscount / ($priceCalculatorService->calculatePrice($pbw, $target, null, null, $cartItem->getSale()->getQuantity(), null, null, null, false, false) * $cartItem->getQuantity()))) * 100;
$totalDiscount = ($totalDiscount < 0 ? 0 : $totalDiscount);
}
$dataItems[] = array(
'productName' => $cartItem->getSale()->getSku(),
'fareName' => $cartItem->getSale()->getDescription(),
'unitPrice' => $unitPrice,
'priceNoTax' => $priceNoTax,
'quantity' => $cartItem->getQuantity(),
'volume' => $cartItem->getVolume(),
'period' => $cartItem->getSale()->getPayperiod()->getPeriod(),
'promotion' => $promotion,
'discountTypePr' => $discountTypePr,
'productByWholesaler' => $pbw,
'bo' => $bo,
'discountTypeBo' => $discountTypeBo,
'promoCode' => $promoCode,
'totalDiscount' => $totalDiscount,
'image' => $pbwRepository->getCoverImage($pbw),
'boCode' => $boCode,
'tax' => $tax ? $tax : null,
'overage' => $cartItem->getOverage(),
);
$dateCreated = $cartItem->getSale()->getDateCreated();
}
return $this->render('/catalog/cart/done.html.twig', array(
'data' => $dataItems,
'reference' => $reference,
'currency' => $partner->getWholesaler()->getCurrency()->getIso(),
'headerData' => $buildHeaderData->buildHeaderData($user),
'partnerId' => $partner->getId(),
'date' => $dateCreated,
'isPartner' => $isPartner,
'total' => $total,
'locale' => $locale,
'vendorsRepository' => $vendorsRepository,
'taxes' => $taxes,
'useSymbol' => $partner->getWholesaler()->getUseSymbolCurrency(),
));
}
private function resetUserCartInstance()
{
return new Usercart();
}
/**
* Remove products (set $unregistrationdate) from UserCart
*
*/
private function emptyUserCart($userId)
{
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$cart = $userCartRepository->MyUserCartQuery($this->getUser())
->andWhere('uc.id = :userId')
->setParameter('userId', $userId)
->getQuery()
->getResult();
foreach ($cart as $cartItem) {
$this->remove($userId, $cartItem->getId());
}
}
/**
* Return BO in a customer cart if exists
*
* @return entity BO
*/
private function findBOActiveInCustomerCart($cart)
{
$bo = null;
foreach ($cart as $cartItem) {
if ($cartItem->getProductBusinessOportunities()) {
$bo = $cartItem->getProductBusinessOportunities()->getBusinessOportunity();
}
}
return $bo;
}
public function getNumberCustomerCarts()
{
$user = $this->getUser();
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
return new Response(
$userCartRepository->getNumberCustomerCarts($user)
);
}
/**
* @Route("/catalog/cart/showcartsheader", name="showcarts_header")
*/
public function showcartsheader(Request $request): Response {
$place = $request->query->get('place', 'backoffice');
$userCartRepository = $this->getDoctrine()->getRepository(Usercart::class);
$customers = $userCartRepository->MyCustomersCartsQuery($this->getUser());
if($place == 'backoffice'){
return $this->render('catalog/cart/showcartsheader.html.twig', [
'customers' => $customers,
'headerData' => $this->buildHeaderData->buildHeaderData($this->getUser()),
]);
}
else{
return $this->render('catalog/cart/showcartscatalog.html.twig', [
'customers' => $customers,
'headerData' => $this->buildHeaderData->buildHeaderData($this->getUser()),
]);
}
}
}