<?php
/**
* Pimcore
*
* This source file is available under two different licenses:
* - GNU General Public License version 3 (GPLv3)
* - Pimcore Enterprise License (PEL)
* Full copyright and license information is available in
* LICENSE.md which is distributed with this source code.
*
* @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org)
* @license http://www.pimcore.org/license GPLv3 and PEL
*/
namespace App\Controller;
use App\Model\Product\AbstractProduct;
use App\Model\Product\AccessoryPart;
use App\Model\Product\Car;
use App\Model\Product\Category;
use App\Services\CurlService;
use Pimcore\Model\DataObject\Manufacturer;
use App\Services\SegmentTrackingHelperService;
use App\Website\LinkGenerator\ProductLinkGenerator;
use App\Website\Navigation\BreadcrumbHelperService;
use Knp\Component\Pager\Pagination\SlidingPagination;
use Knp\Component\Pager\PaginatorInterface;
use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
use Pimcore\Bundle\EcommerceFrameworkBundle\FilterService\ListHelper;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\DefaultMysql;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ElasticSearch\AbstractElasticSearch;
use Pimcore\Bundle\EcommerceFrameworkBundle\IndexService\ProductList\ProductListInterface;
use Pimcore\Config;
use Pimcore\Model\DataObject\AbstractObject;
use Pimcore\Model\DataObject\Concrete;
use Pimcore\Model\DataObject\Data\UrlSlug;
use Pimcore\Model\DataObject\FilterDefinition;
use Pimcore\Translation\Translator;
use Pimcore\Twig\Extension\Templating\HeadTitle;
use Pimcore\Twig\Extension\Templating\Placeholder;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\User\UserInterface;
use Pimcore\Model\DataObject;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Pimcore\Db;
use App\Model\Order;
use App\Lib\Utility;
class ProductController extends BaseController
{
/**
* @param Request $request
* @param AbstractObject $object
* @param UrlSlug $urlSlug
* @return Response
*/
public function productDetailSlugAction(Request $request, AbstractObject $object, UrlSlug $urlSlug) {
return $this->forward('App\Controller\ProductController::detailAction', ['product' => $object]);
}
/**
* @Route("/shop/{path}{productname}~p{product}", name="shop-detail", defaults={"path"=""}, requirements={"path"=".*?", "productname"="[\w-]+", "product"="\d+"})
* @Security("is_granted('ROLE_USER')")
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param Concrete $product built-in parameter conversion, please see https://github.com/pimcore/pimcore/pull/5554
* @param ProductLinkGenerator $productLinkGenerator
*
* @return Response
*
* @throws \Exception
*/
public function detailAction(
Request $request,
HeadTitle $headTitleHelper,
BreadcrumbHelperService $breadcrumbHelperService,
Factory $ecommerceFactory,
SegmentTrackingHelperService $segmentTrackingHelperService,
Concrete $product,
ProductLinkGenerator $productLinkGenerator,
UserInterface $user,
SessionInterface $session,
PaginatorInterface $paginator
)
{
if (!(
$product && $product->isPublished()
)
) {
throw new NotFoundHttpException('Product not found.');
}
$file = null;
$fileExists = false;
/*$file = BASE_URL.'/document/'.$product->getItem().'.pdf';
// p_r($file);
if(Utility::check_file_exist($file))
{
$fileExists = true;
$file = BASE_URL.'/document/'.$product->getItem().'.pdf';
}else{
$file = null;
}*/
if($file = $product->getProductPdf()){
$fileExists = true;
$file = $product->getProductPdf();
}
//redirect to main url
$generatorUrl = $productLinkGenerator->generate($product);
if($generatorUrl != $request->getPathInfo()) {
$queryString = $request->getQueryString();
return $this->redirect($generatorUrl . ($queryString ? '?' . $queryString : ''));
}
$breadcrumbHelperService->enrichProductDetailPage($product);
$headTitleHelper($product->getOSName());
$paramBag = $this->getAllParameters($request);
$paramBag['product'] = $product;
$paramBag['category'] = $product->getMainCategory();
$paramBag['brand'] = $product->getManufacturer();
$paramBag['search'] = false;
$paramBag['file'] = $file;
$paramBag['fileExists'] = $fileExists;
$addToDraftEnabled = 0;
$draftOrder = false;
if($user){
$order = new Order();
$branches = $this->getBranches($session,$user);
$draftOrder = $order->getOrderByStatus('Draft',$branches,$paginator);
if(count($draftOrder)>0)
$addToDraftEnabled = count($draftOrder);
}
$paramBag['addToDraftEnabled'] = $addToDraftEnabled;
$paramBag['draftOrder'] = $draftOrder;
$paramBag['isMecstoreUser'] = false;
$partner = $user->getPartner();
// p_r($partner->getisMecstoreHQ());exit;
if($partner->getisMecstoreHQ()){
$paramBag['isMecstoreUser'] = true;
}
//track segments for personalization
$segmentTrackingHelperService->trackSegmentsForProduct($product);
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackProductView($product);
$salesRepesentative = [];
$manufacturer = $product->getManufacturer();
if($manufacturer){
$sales = $manufacturer->getSalesRepesentative();
if($sales)
{
$count = 0;
foreach($sales as $key=>$sale){
$salesRepesentative[$count]['Name'] = $sale['Name']->getData().' ('.$sale['Area']->getData().')';
$salesRepesentative[$count]['PhoneNo'] = $sale['PhoneNo']->getData();
$count++;
}
}
$salesRepesentative = $input = array_map("unserialize", array_unique(array_map("serialize", $salesRepesentative)));
}
$paramBag['sales_representative'] = $salesRepesentative;
// $_SERVER['HTTP_REFERER'] ="";
if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'shop-by-brand') !== false){
return $this->render('product/detail_brand.html.twig', $paramBag);
}
else if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'],'ovunque') !== false){
$paramBag['search'] = true;
return $this->render('product/detail.html.twig', $paramBag);
}
else{
return $this->render('product/detail.html.twig', $paramBag);
}
}
/**
* @Route("/wishlist/{id}/{remove}", name="wishlist-add")
* @Security("is_granted('ROLE_USER')")
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param Concrete $product built-in parameter conversion, please see https://github.com/pimcore/pimcore/pull/5554
* @param ProductLinkGenerator $productLinkGenerator
*
* @return Response
*
* @throws \Exception
*/
public function wishlistAddAction(Request $request)
{
$user = $this->getUser();
if(!$user){
return $this->json(['success'=>false,'message'=>"User is not logged in"]);
}
$result = [];
$products = [];
$productId = $request->get('id',0);
$remove = $request->get('remove',false);
$product = \Pimcore\Model\DataObject::getById($productId);
if($product){
$wishlist = new DataObject\Wishlist\Listing();
$wishlist->setCondition("user__id = ? AND item__id = ?",[$user->getId(),$product->getId()]);
$lists = $wishlist->load();
if($remove == 'true' && $lists)
{
$wishlist = $lists[0];
$wishlist->delete();
}else{
if($lists)
{
$wishlist = $lists[0];
}else{
$wishlist = new DataObject\Wishlist();
$wishlist->setKey(\Pimcore\Model\Element\Service::getValidKey($user->getId().'-'.$product->getKey(), 'object'));
$wishlist->setParent(\Pimcore\Model\DataObject\Service::createFolderByPath('/customers/Wishlist/'.$user->getEmail()));
}
$wishlist->setUser($user);
$wishlist->setPublished(TRUE);
$wishlist->setItem($product);
$wishlist->save();
}
}
$totalCount = $this->getProductsInWishList($user);
return $this->json(['success'=>true,'products'=>$totalCount]);
}
/**
* @Route("/wish-list/index", name="wishlist-index")
* @Security("is_granted('ROLE_USER')")
* @param Request $request
* @return Response
*
* @throws \Exception
*/
public function wishListIndexAction(Request $request,UserInterface $user)
{
$result = [];
$products = [];
$productId = $request->get('id',0);
$params = array_merge($request->query->all(), $request->attributes->all());
if($user){
$db = Db::get();
$orderBy = " ow.oo_id DESC";
if(isset($params['orderby'])){
if($params['orderby'] == "price")
{
$orderBy = 'CONSORZ ASC';
}else if($params['orderby'] == "price-desc"){
$orderBy = 'CONSORZ DESC';
}else if($params['orderby'] == "date"){
$orderBy = 'oo_id DESC';
}else if($params['orderby'] == "popularity"){
$orderBy = 'oo_id DESC';
}
}else{
$orderBy = "ow.o_modificationDate DESC";
}
$lists = [];
$sql = 'SELECT ow.oo_id FROM `object_wishlist` ow LEFT JOIN object_prod op ON ow.item__id = op.oo_id WHERE user__id = '.$user->getId().' ORDER BY '.$orderBy;
$products = $db->fetchAll($sql);
if($products)
{
foreach($products as $prod){
$lists[] = \Pimcore\Model\DataObject::getById($prod['oo_id']);
}
}
$params['products'] = $lists;
$params['orderby'] = $orderBy;
$params['isMecstoreUser'] = false;
$partner = $user->getPartner();
if($partner->getisMecstoreHQ()){
$params['isMecstoreUser'] = true;
}
}
return $this->render('product/wishlist.html.twig', $params);
}
/**
* @Route("/shop/{categoryname}~c{category}", name="shop-category")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function listingAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator,UserInterface $user, SessionInterface $session)
{
$masterFilterDefinition = Config::getWebsiteConfig()->get('masterFilterDefinition');
$params = array_merge($request->query->all(), $request->attributes->all());
$addToDraftEnabled = 0;
$draftOrder = false;
if($user){
$order = new Order();
$branches = $this->getBranches($session,$user);
$draftOrder = $order->getOrderByStatus('Draft',$branches,$paginator);
if(count($draftOrder)>0)
$addToDraftEnabled = count($draftOrder);
}
$params['addToDraftEnabled'] = $addToDraftEnabled;
$params['draftOrder'] = $draftOrder;
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
if($user){
$partner = $user->getPartner();
if($partner){
//$priceListName = $partner->getPriceList();
}
}
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$category = Category::getById($params['category'] ?? null);
$params['category'] = $category;
if ($category) {
$headTitleHelper($category->getName());
$breadcrumbHelperService->enrichCategoryPage($category);
}else{
$category = new \stdClass();
$category->name = "tutto il catalogo";
$params['category'] = $category;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
//p_r(get_class_methods($productListing));exit;
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
if($category instanceof \Pimcore\Model\DataObject){
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%' AND categoryIds LIKE '%".$category->getId()."%'");
}
}
}else{
$productListing->addCondition("categoryIds LIKE '%".$category->getId()."%'");
}
}else{
if(is_object($category)){
if($category->name == "tutto il catalogo"){
$filterDefinition = $masterFilterDefinition;
$category->name = "RICERCA";
}
}
// echo "(lower(description) LIKE '".strtolower($params['term'])."%' OR lower(name) LIKE '".strtolower($params['term'])."%' )";exit;
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%' OR name LIKE '%".$term."%'");
}
}
}
}
}
else if($category)
{
$productListing->addCondition("categories LIKE '%".$category->getId()."%'");
}
}
$productListing->setOrderKey('o_id');
$productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$params['orderby'] = "o_id";
}
$params['productListing'] = $productListing;
// load current filter
if ($category instanceof \Pimcore\Model\DataObject) {
$filterDefinition = $category->getFilterdefinition();
//track segments for personalization
$segmentTrackingHelperService->trackSegmentsForCategory($category);
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackCategoryPageView($category->getName(), null);
}
if ($request->get('filterdefinition') instanceof FilterDefinition) {
$filterDefinition = $request->get('filterdefinition');
}
if (empty($filterDefinition)) {
$filterDefinition = Config::getWebsiteConfig()->get('fallbackFilterdefinition');
}
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
//p_r($maxPriceList);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$getter = "getPrice";
$params['maxRange'] = (int)$maxPriceItems[0]->$getter() +1;
}
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
//p_);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 24);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:24
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['isMecstoreUser'] = false;
$partner = $user->getPartner();
if($partner->getisMecstoreHQ()){
$params['isMecstoreUser'] = true;
}
//p_r($params);exit;
if ($request->attributes->get('noLayout')) {
return $this->render('product/listing_content.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product/listing.html.twig', $params);
}
/**
* @Route("/shop-by-brand/{brandname}~c{brand}", name="shop-brand")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function listingBrandsAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator,UserInterface $user)
{
$params = array_merge($request->query->all(), $request->attributes->all());
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
if($user){
$partner = $user->getPartner();
if($partner){
//$priceListName = $partner->getPriceList();
}
}
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$brand = Manufacturer::getById($params['brand'] ?? null);
$params['manufacturer'] = $brand;
if ($brand) {
$headTitleHelper($brand->getName());
}else{
$brand = new \stdClass();
$brand->name = "tutto il catalogo";
$params['manufacturer'] = $brand;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
$brandName = $brand->getName();
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
//echo "searchelem LIKE '%".$brandName."%' OR lower(searchelem) LIKE '".strtolower($params['term'])."%'";exit;
if($params['term'])
{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%' OR lower(searchelem) LIKE '%".strtolower($params['term'])."%'");
}else{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%'");
}
}else
{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}
// $productListing->setOrderKey('o_id');
// $productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$productListing->setOrderKey('manufacturer_name = "'.$brandName.'"');
$productListing->setOrder('DESC');
$params['orderby'] = "manufacturer_name";
}
$params['productListing'] = $productListing;
$filterDefinition = Config::getWebsiteConfig()->get('manufacturerFilterdefinition');
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
// p_r($maxParam);
// p_r($filterDefinition);
// p_r($maxPriceList);
// p_r($filterService);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$params['maxRange'] = $maxPriceItems[0]->getPrice()+1;
}
//p_r($params);exit;
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
// p_r(get_class_methods($productListing));exit;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 12);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:12
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['brandObj'] = $brand;
$params['isMecstoreUser'] = false;
$partner = $user->getPartner();
if($partner->getisMecstoreHQ()){
$params['isMecstoreUser'] = true;
}
if ($request->attributes->get('noLayout')) {
return $this->render('product/listing_content_brand.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product/shop-in-shop_listing.html.twig', $params);
}
/**
* @Route("/brand/{brandname}~c{brand}", name="shop-brand-product")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function brandsProductsAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator,UserInterface $user)
{
$params = array_merge($request->query->all(), $request->attributes->all());
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
if($user){
$partner = $user->getPartner();
if($partner){
//$priceListName = $partner->getPriceList();
}
}
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$brand = Manufacturer::getById($params['brand'] ?? null);
$params['manufacturer'] = $brand;
if ($brand) {
$headTitleHelper($brand->getName());
}else{
$brand = new \stdClass();
$brand->name = "tutto il catalogo";
$params['manufacturer'] = $brand;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
$brandName = $brand->getName();
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
//echo "searchelem LIKE '%".$brandName."%' OR lower(searchelem) LIKE '".strtolower($params['term'])."%'";exit;
if($params['term'])
{
$productListing->addCondition("manufacturer_name LIKE '%".$brandName."%' OR lower(searchelem) LIKE '%".strtolower($params['term'])."%'");
}else{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}else
{
$productListing->addCondition("searchelem LIKE '%".$brandName."%'");
}
}
// $productListing->setOrderKey('o_id');
// $productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$productListing->setOrderKey('manufacturer_name = "'.$brandName.'"');
$productListing->setOrder('DESC');
$params['orderby'] = "manufacturer_name";
}
$params['productListing'] = $productListing;
$filterDefinition = Config::getWebsiteConfig()->get('manufacturerFilterdefinition');
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
// p_r($maxParam);
// p_r($filterDefinition);
// p_r($maxPriceList);
// p_r($filterService);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$params['maxRange'] = $maxPriceItems[0]->getPrice()+1;
}
//p_r($params);exit;
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
// p_r(get_class_methods($productListing));exit;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 12);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
($pagelimit)?$pagelimit:12
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['brandObj'] = $brand;
$params['isMecstoreUser'] = false;
$partner = $user->getPartner();
if($partner->getisMecstoreHQ()){
$params['isMecstoreUser'] = true;
}
if ($request->attributes->get('noLayout')) {
return $this->render('product/listing_content_brand.html.twig', $params);
}
// track product impressions
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'grid');
}
//p_r($params);exit;
return $this->render('product/shop-in-shop.html.twig', $params);
}
/**
* @param Request $request
* @param Factory $ecommerceFactory
*
* @return Response
*/
public function productTeaserAction(Request $request, Factory $ecommerceFactory)
{
$paramsBag = [];
if ($request->get('type') == 'object') {
AbstractObject::setGetInheritedValues(true);
$product = AbstractProduct::getById($request->get('id'));
$paramsBag['product'] = $product;
$paramsBag['backend'] = true;
//track product impression
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackProductImpression($product, 'teaser');
return $this->render('product/product_teaser.html.twig', $paramsBag);
}
throw new NotFoundHttpException('Product not found.');
}
/**
* @Route("/search", name="search")
*
* @param Request $request
* @param ListHelper $listHelper
* @param Factory $ecommerceFactory
* @param ProductLinkGenerator $productLinkGenerator
* @param Translator $translator
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param HeadTitle $headTitleHelper
* @param Placeholder $placeholder
*
* @return Response|JsonResponse
*/
public function searchAction(Request $request, ListHelper $listHelper, Factory $ecommerceFactory, ProductLinkGenerator $productLinkGenerator, Translator $translator, BreadcrumbHelperService $breadcrumbHelperService, HeadTitle $headTitleHelper, Placeholder $placeholder, PaginatorInterface $paginator)
{
$params = $request->query->all();
$params['category'] = Category::getById($params['category'] ?? null);
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->setVariantMode(ProductListInterface::VARIANT_MODE_VARIANTS_ONLY);
$term = strip_tags($request->get('term'));
if($productListing instanceof AbstractElasticSearch) {
// simple elastic search query - uses multi-match query on all defined search_attributes
// $productListing->addQueryCondition($term);
//sample for a more specific elastic search query - not considers search_attributes but provides full flexibility
// this query weights cars more that accessories
$query = [
'function_score' => [
'query' => [
'multi_match' => [
"query" => $term,
"type" => "cross_fields",
"operator" => "and",
"fields" => [
"attributes.name^4",
"attributes.name.analyzed",
"attributes.name.analyzed_ngram",
"attributes.manufacturer_name^3",
"attributes.manufacturer_name.analyzed",
"attributes.manufacturer_name.analyzed_ngram",
"attributes.color",
"attributes.color.analyzed",
"attributes.color.analyzed_ngram",
"attributes.carClass",
"attributes.carClass.analyzed",
"attributes.carClass.analyzed_ngram"
]
]
],
'functions' => [
[
'filter' => ['match' => ['system.o_classId' => 'AP']],
'weight' => 1
],
[
'filter' => ['match' => ['system.o_classId' => 'CAR']],
'weight' => 2
]
],
'boost_mode' => 'multiply'
]
];
$productListing->addQueryCondition($query, 'searchTerm');
} else {
//default mysql search query condition - would also work for elastic search in that way
$term = trim(preg_replace('/\s+/', ' ', $term));
if (!empty($term)) {
foreach (explode(' ', $term) as $t) {
$productListing->addQueryCondition($t);
}
}
}
if (isset($params['autocomplete'])) {
$resultset = [];
$productListing->setLimit(10);
foreach ($productListing as $product) {
$result['href'] = $productLinkGenerator->generateWithMockup($product, []);
if ($product instanceof Car) {
$result['product'] = $product->getOSName() . ' ' . $product->getColor()[0] . ', ' . $product->getCarClass();
} else {
$result['product'] = $product->getOSName();
}
$resultset[] = $result;
}
return $this->json($resultset);
}
$filterDefinition = $params['filterDefinition'] = Config::getWebsiteConfig()->get('fallbackFilterdefinition');
// create and init filter service
$filterService = Factory::getInstance()->getFilterService();
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
$params['filterService'] = $filterService;
$params['products'] = $productListing;
// init pagination
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
$filterDefinition->getPageLimit()
);
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$trackingManager = $ecommerceFactory->getTrackingManager();
foreach ($paginator as $product) {
$trackingManager->trackProductImpression($product, 'search-results');
}
//breadcrumbs
$placeholder('addBreadcrumb')->append([
'parentId' => $this->document->getId(),
'id' => 'search-result',
'label' => $translator->trans('shop.search-result', [$term])
]);
$params['language'] = $request->getLocale();
$params['term'] = $term;
$breadcrumbHelperService->enrichGenericDynamicPage($translator->trans('shop.search-result', [$term]));
$headTitleHelper($translator->trans('shop.search-result', [$term]));
return $this->render('product/search.html.twig', $params);
}
private function getProductsInWishList($user){
$products = new \Pimcore\Model\DataObject\Wishlist\Listing();
$products->setCondition('user__id = ?',[$user->getId()]);
return $products->getCount();
}
/**
* @Route("/get-product-statistics/{id}", name="get-product-statistics")
*
* @param Request $request
*
* @return Response|JsonResponse
*/
public function getProductStatistics(Request $request,UserInterface $user = null){
$order = new Order();
$db = \Pimcore\Db::get();
$response = [];
$jsonResponse = [];
$partner = $user->getPartner();
// p_r($partner->getisMecstoreHQ());exit;
if($partner->getisMecstoreHQ()){
try{
$productId = $request->get('id',null);
if(!$productId){
throw new \Exception("Product not found ");
}
// Product
$product = \Pimcore\Model\DataObject::getById($productId);
//User
$partner = $user->getPartner();
// Order statistics
$response['order'] = $order->getOrderStatistics($db,$productId);
//print_r($response['order']); die();
$deliveredQty = $this->getProductDeliveredQty($response['order'], $product->getItem());
$response['deliveredQty'] = (float)$deliveredQty;
$this->deleteOrdersDeleted($response['order']);
// Booking statistics
$response['booking'] = $order->getBookingStatistics($db,$productId);
// Booking statistics
$response['draft'] = $order->getBookingStatistics($db,$productId,'draft');
// Pre Order statistics
$response['pre_order'] = $order->getPreOrderStatistics($db,$productId);
$response['item'] = \App\Model\Utility::getOrders([$product->getItem()],$partner->getCustSupp());
$response['product'] = $product;
$response['giacenza'] = $this->getProductGiacenza($product->getItem());
// p_r($response);exit;
$jsonResponse['success'] = true;
$html = $this->renderView('product/_availability_modal.html.twig',$response);
$jsonResponse['html'] = $html;
}catch(\Exception $ex){
$jsonResponse['success'] = false;
$jsonResponse['message'] = $ex->getMessage();
}
}
return $this->json($jsonResponse);
}
public function getBranches(SessionInterface $session = null, UserInterface $user){
$branches = [];
if($user){
$partner = $user->getPartner();
if($partner){
$taxIdNumber = $partner->getTaxIdNumber();
if($user->getUserRoles() == "Executive" || $user->getUserRoles() == "Customer" || $user->getUserRoles() == "Affiliate"){
$branches[] = $partner->getId();
}
else if($user->getUserRoles() == 'Manager'){
$partnerBranches = new DataObject\Partners\Listing();
$partnerBranches->setCondition("TaxIdNumber = ?",[$partner->getTaxIdNumber()]);
$partnerBranches = $partnerBranches->load();
if($partnerBranches)
{
foreach($partnerBranches as $branch){
$branches[] = $branch->getId();
}
}
}
}
}
return $branches;
}
/**
* @Route("/get-product-opd/{id}", name="get-product-opd")
*
* @param Request $request
*
* @return Response|JsonResponse
*/
public function getProductOpd(Request $request,UserInterface $user = null, PaginatorInterface $paginator, SessionInterface $session){
$order = new Order();
$db = \Pimcore\Db::get();
$response = [];
$jsonResponse = [];
$partner = $user->getPartner();
$branches = $this->getBranches($session,$user);
// p_r($partner->getisMecstoreHQ());exit;
if(true){
try{
$productId = $request->get('id',null);
if(!$productId){
throw new \Exception("Product not found ");
}
// Product
$product = \Pimcore\Model\DataObject::getById($productId);
//User
$partner = $user->getPartner();
// Order statistics
$response['order'] = $order->getCustomerOrderWithProduct($db, $user->getId(), $productId);
//print_r($response['order']); die();
$deliveredQty = $this->getProductDeliveredQty($response['order'], $product->getItem());
$response['deliveredQty'] = (float)$deliveredQty;
//$this->deleteOrdersDeleted($response['order']);
// Booking statistics
$response['booking'] = $order->getCustomerPrenotazioniProduct($db, $user->getId(), $productId);
// Booking statistics
$response['draft'] = $order->getCustomerDraftWithProduct($db, $user->getId(), $productId);
// Pre Order statistics
$response['pre_order'] = $order->getCustomerPreorderProduct($db, $user->getId(), $productId);
$response['item'] = \App\Model\Utility::getOrders([$product->getItem()],$partner->getCustSupp());
$response['product'] = $product;
// p_r($response);exit;
$jsonResponse['success'] = true;
$html = $this->renderView('product/_opd_modal.html.twig',$response);
$jsonResponse['html'] = $html;
}catch(\Exception $ex){
$jsonResponse['success'] = false;
$jsonResponse['message'] = $ex->getMessage();
}
}
return $this->json($jsonResponse);
}
/**
* @Route("/get-products-opd/{ids}", name="get-products-opd")
*
* @param Request $request
*
* @return Response|JsonResponse
*/
public function getProductsOpd(Request $request,UserInterface $user = null, PaginatorInterface $paginator, SessionInterface $session){
$order = new Order();
$db = \Pimcore\Db::get();
$response = [];
$jsonResponse = [];
$partner = $user->getPartner();
$branches = $this->getBranches($session,$user);
$ids = explode(",", substr($request->get('ids',null),1));
//p_r($ids);
// p_r($partner->getisMecstoreHQ());exit;
$data = [];
if(true){
foreach($ids as $productId) {
try {
if (!$productId) {
continue;
}
$temp = [];
// Product
$product = \Pimcore\Model\DataObject::getById($productId);
//User
$partner = $user->getPartner();
// Order statistics
$response['order'] = $order->getCustomerOrderWithProduct($db, $user->getId(), $productId);
//print_r($response['order']); die();
$deliveredQty = $this->getProductDeliveredQty($response['order'], $product->getItem());
$response['deliveredQty'] = (float)$deliveredQty;
//$this->deleteOrdersDeleted($response['order']);
// Booking statistics
$response['booking'] = $order->getCustomerPrenotazioniProduct($db, $user->getId(), $productId);
// Booking statistics
$response['draft'] = $order->getCustomerDraftWithProduct($db, $user->getId(), $productId);
// Pre Order statistics
$response['pre_order'] = $order->getCustomerPreorderProduct($db, $user->getId(), $productId);
//$response['item'] = \App\Model\Utility::getOrders([$product->getItem()], $partner->getCustSupp());
//$response['product'] = $product;
if(
count($response['order'])>0 ||
$response['booking'][0]['order_id'] != '' ||
count($response['draft'])>0 ||
$response['pre_order'][0]['company'] != ''
){
$temp[$productId] = 'custom-yellow';
}else{
$temp[$productId] = 'custom-green';
}
$data[] = $temp;
} catch (\Exception $ex) {
$data[] = $ex->getMessage();
}
}
}
return $this->json($data);
}
public function deleteOrdersDeleted($listaOrdini){
//print_r($listaOrdini);
$salesOrdersIds = [];
foreach($listaOrdini as $ordine){
$ord = \Pimcore\Model\DataObject\OnlineShopOrder::getById($ordine['order_id'], true);
$salesOrdersIds[] = $ord->getSalesOrderId();
}
$salesOrdersIds = implode(",", $salesOrdersIds);
//echo $salesOrdersIds;
$responseArr = [];
if($salesOrdersIds != '') {
$curl = new CurlService();
try {
$request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:getNumOrdNoMatch>
<tem:Token_Client>' . SOAP_TOKEN . '</tem:Token_Client>
<tem:ListSaleOrdId>' . $salesOrdersIds . '</tem:ListSaleOrdId>
</tem:getNumOrdNoMatch>
</soapenv:Body>
</soapenv:Envelope>';
\Pimcore\Log\Simple::log('erp_order_request', $request);
$xml = sprintf($request, SOAP_TOKEN);
$response = $curl->getCurlResponseNew($request, $xml);
$ordersToDelete = $response->xpath('//ListaOrdiniRichiesti/SaleOrdId');
} catch (Exception $e) {
//\Pimcore\Log\Simple::log('soap', $e->getMessage());
echo "ERRORE";
}
//echo $xml; //die();
//print_r($response);
//print_r($ordersToDelete); die();
foreach ($ordersToDelete as $orderToDelete) {
$otd = \Pimcore\Model\DataObject\OnlineShopOrder::getBySalesOrderId($orderToDelete, true);
if ($otd) {
//echo $otd->getOrdernumber();
$otd->delete();
}
}
}
}
private function getProductGiacenza($productId)
{
$curl = new CurlService();
$request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:getDisponibilitaItems>
<!--Optional:-->
<tem:Token_Client>'.SOAP_TOKEN.'</tem:Token_Client>
<!--Optional:-->
<tem:ListItems>'.$productId.'</tem:ListItems>
</tem:getDisponibilitaItems>
</soapenv:Body>
</soapenv:Envelope>';
// echo $request;exit;
$xml = sprintf($request,SOAP_TOKEN);
$response = $curl->getCurlResponseNew($request,$xml);
$output = [
'giacenza' => null,
'disponibilita' => null
];
if($response instanceof \SimpleXMLElement) {
$results = $response->xpath('//Disponibilita/Giacenza');
foreach ($results as $item) {
$xmlResponse = (array)$item;
if (isset($xmlResponse[0])) {
$output['giacenza'] = $xmlResponse[0];
}
}
$results = $response->xpath('//Disponibilita/Disponibilita');
foreach ($results as $item) {
$xmlResponse = (array)$item;
if (isset($xmlResponse[0])) {
$output['disponibilita'] = $xmlResponse[0];
}
}
}
return $output;
}
private function getProductDeliveredQty($orderId, $item){
$return = 0;
if(isset($orderId[0]['order_id'])) {
$ord = \Pimcore\Model\DataObject\OnlineShopOrder::getById($orderId[0]['order_id'], true);
if ($ord) {
$salesOrderId = $ord->getSalesOrderId();
$curl = new CurlService();
$request = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:getMembersSaleOrdersDetails_Parameters>
<!--Optional:-->
<tem:Token_Client>%s</tem:Token_Client>
<!--Optional:-->
<tem:ToDate></tem:ToDate>
<!--Optional:-->
<tem:Customer/>
<tem:FromSaleOrdId>%s</tem:FromSaleOrdId>
<!--Optional:-->
<tem:LimitRecords>1</tem:LimitRecords>
<!--Optional:-->
<tem:FromDate></tem:FromDate>
</tem:getMembersSaleOrdersDetails_Parameters>
</soapenv:Body>
</soapenv:Envelope>';
$xml = sprintf($request, SOAP_TOKEN, $salesOrderId);
$response = $curl->getCurlResponseNew($request, $xml);
//print_r($response);
$membersOrdersDetails = $response->xpath('//MembersOrdersDetailsParameters');
if (count($membersOrdersDetails)) {
foreach ($membersOrdersDetails as $membersOrderDetails) {
if ($membersOrderDetails->Item == $item) {
$return = $membersOrderDetails->DeliveredQty;
}
}
}
}
}
return $return;
}
/**
* @Route("/admin/tutti-i-prodotti", name="tutti-i-prodotti")
*
* @param Request $request
* @param HeadTitle $headTitleHelper
* @param BreadcrumbHelperService $breadcrumbHelperService
* @param Factory $ecommerceFactory
* @param SegmentTrackingHelperService $segmentTrackingHelperService
* @param ListHelper $listHelper
*
* @return Response
*/
public function tuttiIProdottiAction(Request $request, HeadTitle $headTitleHelper, BreadcrumbHelperService $breadcrumbHelperService, Factory $ecommerceFactory, SegmentTrackingHelperService $segmentTrackingHelperService, ListHelper $listHelper, PaginatorInterface $paginator,UserInterface $user, SessionInterface $session)
{
$masterFilterDefinition = Config::getWebsiteConfig()->get('masterFilterDefinition');
$params = array_merge($request->query->all(), $request->attributes->all());
$addToDraftEnabled = 0;
$draftOrder = false;
$params['addToDraftEnabled'] = $addToDraftEnabled;
$params['draftOrder'] = $draftOrder;
$params['maxRange'] = 10;
//Get pricelist name
$priceListName = DEFAULT_PRICELIST_COLUMN;
//needed to make sure category filter filters for active category
$params['parentCategoryIds'] = $params['category'] ?? null;
$category = Category::getById($params['category'] ?? null);
$params['category'] = $category;
if ($category) {
$headTitleHelper($category->getName());
$breadcrumbHelperService->enrichCategoryPage($category);
}else{
$category = new \stdClass();
$category->name = "tutto il catalogo";
$params['category'] = $category;
}
$indexService = $ecommerceFactory->getIndexService();
$productListing = $indexService->getProductListForCurrentTenant();
$productListing->addCondition("disabled != 1");
//p_r(get_class_methods($productListing));exit;
$params['term'] = isset($params['term'])?$params['term']:"";
if(isset($params['term'])){
//p_r($params);
//p_r('lower(description) LIKE "%'.strtolower($params['term']).'%"');exit;
if(strtolower($params['term']) != "ovunque"){
if($category instanceof \Pimcore\Model\DataObject){
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%' AND categoryIds LIKE '%".$category->getId()."%'");
}
}
}else{
$productListing->addCondition("categoryIds LIKE '%".$category->getId()."%'");
}
}else{
if(is_object($category)){
if($category->name == "tutto il catalogo"){
$filterDefinition = $masterFilterDefinition;
$category->name = "RICERCA";
}
}
// echo "(lower(description) LIKE '".strtolower($params['term'])."%' OR lower(name) LIKE '".strtolower($params['term'])."%' )";exit;
if($params['term']){
$searchTerms = explode(" ",$params['term']);
if($searchTerms)
{
foreach($searchTerms as $term)
{
$productListing->addCondition("searchelem LIKE '%".$term."%'");
}
}
}
}
}
else if($category)
{
$productListing->addCondition("categories LIKE '%".$category->getId()."%'");
}
}
$productListing->setOrderKey('o_id');
$productListing->setOrder('asc');
if(isset($params['orderby'])){
// p_r($params['orderby']);exit;
if($params['orderby'] == "price")
{
$productListing->setOrderKey($priceListName);
$productListing->setOrder('asc');
}else if($params['orderby'] == "price-desc"){
$productListing->setOrderKey($priceListName);
$productListing->setOrder('DESC');
}else if($params['orderby'] == "date"){
$productListing->setOrderKey('o_id');
$productListing->setOrder('DESC');
}else if($params['orderby'] == "popularity"){
// $productListing->setOrderKey('price');
// $productListing->setOrder('DESC');
}
}else{
$params['orderby'] = "o_id";
}
$params['productListing'] = $productListing;
// load current filter
if ($category instanceof \Pimcore\Model\DataObject) {
$filterDefinition = $category->getFilterdefinition();
//track segments for personalization
$segmentTrackingHelperService->trackSegmentsForCategory($category);
$trackingManager = $ecommerceFactory->getTrackingManager();
$trackingManager->trackCategoryPageView($category->getName(), null);
}
if ($request->get('filterdefinition') instanceof FilterDefinition) {
$filterDefinition = $request->get('filterdefinition');
}
if (empty($filterDefinition)) {
$filterDefinition = Config::getWebsiteConfig()->get('fallbackFilterdefinition');
}
$filterService = $ecommerceFactory->getFilterService();
// Get Max price
$maxPriceList = clone $productListing;
$maxParam = $params;
unset($maxParam['page']);
//p_r($maxPriceList);exit;
$listHelper->setupProductList($filterDefinition, $maxPriceList, $maxParam, $filterService, true);
$maxPriceList->setOrderKey($priceListName);
$maxPriceList->setOrder('desc');
$maxPriceList->setLimit(1);
$maxPriceItems = $maxPriceList->load();
if($maxPriceItems){
$getter = "getPrice";
$params['maxRange'] = (int)$maxPriceItems[0]->$getter() +1;
}
$listHelper->setupProductList($filterDefinition, $productListing, $params, $filterService, true);
//p_);
$params['filterService'] = $filterService;
$params['filterDefinition'] = $filterDefinition;
//$
/** @var SlidingPagination $paginator */
// init pagination
$pagelimit = $request->get('limit', 24);
$paginator = $paginator->paginate(
$productListing,
$request->get('page', 1),
99999
);
// p_r(get_class_methods($paginator));exit;
$params['results'] = $paginator;
$params['paginationVariables'] = $paginator->getPaginationData();
$params['totalCount'] = $paginator->getTotalItemCount();
$params['offset'] = $paginator->getCurrentPageNumber();
$params['limit'] = $pagelimit;
$params['isMecstoreUser'] = false;
p_r($params);
$contatore = 1;
foreach($params['results'] as $item){
echo $contatore.";".$item->getItem()."<br/>";
$contatore++;
}
return new Response('');
}
}