コード例 #1
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /**@var ReleaseDateCondition $criteriaPart */
     $date = new \DateTime();
     $intervalSpec = 'P' . $criteriaPart->getDays() . 'D';
     $interval = new \DateInterval($intervalSpec);
     $dateNow = new \DateTime();
     switch ($criteriaPart->getDirection()) {
         case ReleaseDateCondition::DIRECTION_FUTURE:
             $date->add($interval);
             $range = ['lte' => $date->format('Y-m-d'), 'gt' => $dateNow->format('Y-m-d')];
             break;
         case ReleaseDateCondition::DIRECTION_PAST:
             $date->sub($interval);
             $range = ['gte' => $date->format('Y-m-d'), 'lte' => $dateNow->format('Y-m-d')];
             break;
         default:
             return;
     }
     $filter = new RangeFilter('formattedReleaseDate', $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #2
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var CustomerGroupCondition $criteriaPart */
     $filter = new NotFilter(new TermsFilter('blockedCustomerGroupIds', $criteriaPart->getCustomerGroupIds()));
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #3
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var CategoryCondition $criteriaPart */
     $filter = new TermsFilter('categoryIds', $criteriaPart->getCategoryIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #4
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $filter = new TermFilter('hasAvailableVariant', 1);
     /** @var ImmediateDeliveryCondition $criteriaPart */
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #5
0
 /**
  * Traces the search result into the s_statistic_search
  *
  * @param Criteria $criteria
  * @param ProductNumberSearchResult $result
  * @param Shop $shop
  */
 public function logResult(Criteria $criteria, ProductNumberSearchResult $result, Shop $shop)
 {
     if (!$criteria->hasCondition('search')) {
         return;
     }
     /* @var $condition SearchTermCondition */
     $condition = $criteria->getCondition('search');
     $now = new \DateTime();
     $this->connection->insert('s_statistics_search', ['datum' => $now->format('Y-m-d H:i:s'), 'searchterm' => $condition->getTerm(), 'results' => $result->getTotalCount(), 'shop_id' => $shop->getId()]);
 }
コード例 #6
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var SalesCondition $criteriaPart */
     $filter = new RangeFilter('sales', ['gt' => $criteriaPart->getMinSales()]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #7
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var ManufacturerCondition $criteriaPart */
     $filter = new TermsFilter('manufacturer.id', $criteriaPart->getManufacturerIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #8
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $filter = new TermFilter('shippingFree', 1);
     /** @var ShippingFreeCondition $criteriaPart */
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #9
0
 /**
  * @inheritdoc
  */
 public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context)
 {
     if ($request->has('esd')) {
         $criteria->addCondition(new EsdCondition());
     }
     if ($request->get('sSort') == 'random') {
         $criteria->addSorting(new RandomSorting());
     }
     $criteria->addFacet(new EsdFacet());
 }
コード例 #10
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var PropertyCondition $criteriaPart */
     $filter = new TermsFilter('properties.id', $criteriaPart->getValueIds());
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #11
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var VoteAverageCondition $criteriaPart */
     $range = new RangeFilter('voteAverage.average', ['gte' => $criteriaPart->getAverage()]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($range);
     } else {
         $search->addPostFilter($range);
     }
 }
コード例 #12
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var HasPseudoPriceCondition $criteriaPart */
     $field = $this->getPseudoPriceField($context);
     $filter = new RangeFilter($field, ['gt' => 0]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #13
0
ファイル: CriteriaTest.php プロジェクト: GerDner/luck-docker
 public function testConditionOverwrite()
 {
     $criteria = new Criteria();
     $criteria->addCondition(new CategoryCondition(array(1)));
     $condition = new CategoryCondition(array(3));
     $criteria->addCondition($condition);
     $this->assertCount(1, $criteria->getConditions());
     $condition = $criteria->getCondition($condition->getName());
     $this->assertInstanceOf('Shopware\\Bundle\\SearchBundle\\Condition\\CategoryCondition', $condition);
     $this->assertEquals(array(3), $condition->getCategoryIds());
 }
コード例 #14
0
 public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context)
 {
     $minSales = $request->getParam('minSales', null);
     $maxSales = $request->getParam('maxSales', null);
     if ($minSales || $maxSales) {
         $criteria->addCondition(new SalesCondition($minSales, $maxSales));
     }
     $criteria->addFacet(new SalesFacet());
     if ($request->getParams('sSort') == 'sales') {
         $criteria->resetSorting();
         $criteria->addSorting(new SalesSorting());
     }
 }
コード例 #15
0
ファイル: BlogSearch.php プロジェクト: shobcheye/devdocs
 private function searchBlog(Criteria $criteria, Struct\ProductContextInterface $context)
 {
     /**@var $condition SearchTermCondition*/
     $condition = $criteria->getCondition('search');
     $query = $this->createMultiMatchQuery($condition);
     $search = new Search();
     $search->addQuery($query);
     $search->setFrom(0)->setSize(5);
     $index = $this->indexFactory->createShopIndex($context->getShop());
     $params = ['index' => $index->getName(), 'type' => 'blog', 'body' => $search->toArray()];
     $raw = $this->client->search($params);
     return $this->createBlogStructs($raw);
 }
コード例 #16
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /**@var CreateDateCondition $criteriaPart */
     $date = new \DateTime();
     $intervalSpec = 'P' . $criteriaPart->getDays() . 'D';
     $interval = new \DateInterval($intervalSpec);
     $date->sub($interval);
     $filter = new RangeFilter('formattedCreatedAt', ['gte' => $date->format('Y-m-d')]);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #17
0
ファイル: ProductStream.php プロジェクト: GerDner/luck-docker
 public function loadPreviewAction()
 {
     $conditions = $this->Request()->getParam('conditions');
     $conditions = json_decode($conditions, true);
     $sorting = $this->Request()->getParam('sort');
     $criteria = new Criteria();
     /** @var RepositoryInterface $streamRepo */
     $streamRepo = $this->get('shopware_product_stream.repository');
     $sorting = $streamRepo->unserialize($sorting);
     foreach ($sorting as $sort) {
         $criteria->addSorting($sort);
     }
     $conditions = $streamRepo->unserialize($conditions);
     foreach ($conditions as $condition) {
         $criteria->addCondition($condition);
     }
     $criteria->offset($this->Request()->getParam('start', 0));
     $criteria->limit($this->Request()->getParam('limit', 20));
     $context = $this->createContext($this->Request()->getParam('shopId'), $this->Request()->getParam('currencyId'), $this->Request()->getParam('customerGroupKey'));
     $criteria->addBaseCondition(new CustomerGroupCondition([$context->getCurrentCustomerGroup()->getId()]));
     $category = $context->getShop()->getCategory()->getId();
     $criteria->addBaseCondition(new CategoryCondition([$category]));
     $result = Shopware()->Container()->get('shopware_search.product_search')->search($criteria, $context);
     $products = array_values($result->getProducts());
     $this->View()->assign(['success' => true, 'data' => $products, 'total' => $result->getTotalCount()]);
 }
 /**
  * @param Request $request
  * @param Criteria $criteria
  * @param ShopContextInterface $context
  */
 public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context)
 {
     $criteria->addFacet(new ProductVariantFacet());
     if (!$this->requestAdapater->hasVariantIds()) {
         return;
     }
     if (!$this->requestAdapater->isMultiDimensional()) {
         return;
     }
     $selectedOptions = $this->requestAdapater->getRequestedVariantIds();
     if (!$selectedOptions) {
         return;
     }
     $criteria->addCondition(new ProductVariantCondition($selectedOptions));
 }
コード例 #19
0
 /**
  * @inheritdoc
  */
 public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context)
 {
     /*
      * Checks if the filter is active
      */
     if ($request->has('productAttributesForm')) {
         $params = $request->getParams();
         $searchParams = explode('|', $params['productAttributesForm']);
         $criteria->addCondition(new ProductAttributeCondition('attr1', ProductAttributeCondition::OPERATOR_IN, $searchParams));
     }
     /**
      * adds the attributes facet
      */
     $criteria->addFacet(new ProductAttributeFacet('attr1', ProductAttributeFacet::MODE_VALUE_LIST_RESULT, 'productAttributesForm', 'attributes'));
 }
コード例 #20
0
 /**
  * @param Criteria $criteria
  * @param $data
  * @return array
  */
 private function getActiveValues(Criteria $criteria, $data)
 {
     $actives = ['min' => $data['min'], 'max' => $data['max']];
     /** @var SalesCondition $condition */
     if (!($condition = $criteria->getCondition('swag_es_product_sales'))) {
         return $actives;
     }
     if ($condition->getMin()) {
         $actives['min'] = $condition->getMin();
     }
     if ($condition->getMax()) {
         $actives['max'] = $condition->getMax();
     }
     return $actives;
 }
コード例 #21
0
 /**
  * Generates the facet data for the passed query, criteria and context object.
  *
  * @param FacetInterface|VoteAverageFacet $facet
  * @param Criteria $criteria
  * @param Struct\ShopContextInterface $context
  * @return \Shopware\Bundle\SearchBundle\FacetResult\RadioFacetResult|null
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context)
 {
     $queryCriteria = clone $criteria;
     $queryCriteria->resetConditions();
     $queryCriteria->resetSorting();
     $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context);
     $query->resetQueryPart('orderBy');
     $query->resetQueryPart('groupBy');
     if (!$query->hasState(VoteAverageCondition::STATE_INCLUDES_VOTE_TABLE)) {
         $query->innerJoin('product', 's_articles_vote', 'vote', 'vote.articleID = product.id');
     }
     $query->select('COUNT(vote.id) as hasVotes');
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $data = $statement->fetch(\PDO::FETCH_COLUMN);
     if (!$data) {
         return null;
     }
     $activeAverage = null;
     if ($criteria->hasCondition($facet->getName())) {
         /**@var $condition VoteAverageCondition*/
         $condition = $criteria->getCondition($facet->getName());
         $activeAverage = $condition->getAverage();
     }
     $values = [new ValueListItem(1, '', $activeAverage == 1), new ValueListItem(2, '', $activeAverage == 2), new ValueListItem(3, '', $activeAverage == 3), new ValueListItem(4, '', $activeAverage == 4), new ValueListItem(5, '', $activeAverage == 5)];
     return new RadioFacetResult($facet->getName(), $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Ranking'), $values, $this->fieldName, [], 'frontend/listing/filter/facet-rating.tpl');
 }
コード例 #22
0
 /**
  * @param Request $request
  * @param Criteria $criteria
  */
 private function addPropertyCondition(Request $request, Criteria $criteria)
 {
     $filters = $request->getParam('sFilterProperties', []);
     if (empty($filters)) {
         return;
     }
     $filters = explode('|', $filters);
     $filters = $this->getGroupedFilters($filters);
     if (empty($filters)) {
         return;
     }
     foreach ($filters as $filter) {
         $condition = new PropertyCondition($filter);
         $criteria->addCondition($condition);
     }
 }
コード例 #23
0
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $range = [];
     /** @var SalesCondition $criteriaPart */
     if ($criteriaPart->getMin() > 0) {
         $range['gte'] = (int) $criteriaPart->getMin();
     }
     if ($criteriaPart->getMax() > 0) {
         $range['lte'] = (int) $criteriaPart->getMax();
     }
     $filter = new RangeFilter('sales', $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #24
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     $field = $this->fieldMapping->getPriceField($context);
     $range = [];
     /** @var PriceCondition $criteriaPart */
     if ($criteriaPart->getMinPrice()) {
         $range['gte'] = $criteriaPart->getMinPrice();
     }
     if ($criteriaPart->getMaxPrice()) {
         $range['lte'] = $criteriaPart->getMaxPrice();
     }
     $filter = new RangeFilter($field, $range);
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #25
0
 /**
  * Extends the query criteria query to generate enough data for the servicees
  *
  * @param FacetInterface $facet
  * @param Criteria $criteria
  * @param Struct\ShopContextInterface $context
  * @return null|FacetResultInterface|FacetResultInterface[]
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context)
 {
     $activeOptions = array();
     $productVariantCondition = $criteria->getCondition('swag-variant-filter-product-variant');
     if ($productVariantCondition && $productVariantCondition instanceof ProductVariantCondition) {
         $activeOptions = $productVariantCondition->getProductVariantIds(ProductVariantCondition::FORMAT_FLAT);
     }
     $queryCriteria = clone $criteria;
     $queryCriteria->resetConditions();
     $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context);
     $query->select('configuratorOptionRelations.option_id')->innerJoin('product', 's_articles_details', 'variantFilterDetails', 'variantFilterDetails.articleID = product.id')->innerJoin('variantFilterDetails', 's_article_configurator_option_relations', 'configuratorOptionRelations', 'configuratorOptionRelations.article_id = variantFilterDetails.id')->groupBy('configuratorOptionRelations.option_id');
     $ids = (array) $query->execute()->fetchAll(\PDO::FETCH_COLUMN);
     $filterConditions = $this->productVariantService->getFilterConditions($ids, $activeOptions);
     if (!$filterConditions) {
         return null;
     }
     return new ProductVariantFacetResult($filterConditions, $this->snippetNamespace->get('FilterHeadlineVariants', 'Variantfilter'));
 }
コード例 #26
0
ファイル: EsdFacetHandler.php プロジェクト: shobcheye/devdocs
 /**
  * @inheritdoc
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, Struct\ShopContextInterface $context)
 {
     //resets all conditions of the criteria to execute a facet query without user filters.
     $queryCriteria = clone $criteria;
     $queryCriteria->resetConditions();
     $queryCriteria->resetSorting();
     $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context);
     $query->innerJoin('product', 's_articles_esd', 'esd', 'esd.articleID = product.id');
     $query->select('product.id')->setMaxResults(1);
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $total = $statement->fetch(\PDO::FETCH_COLUMN);
     //found some esd products?
     if ($total <= 0) {
         return null;
     }
     $snippetNamespace = $this->snippetManager->getNamespace('frontend/listing/facet_labels');
     return new BooleanFacetResult($facet->getName(), 'esd', $criteria->hasCondition($facet->getName()), $snippetNamespace->get('swag_search_bundle_esd_only', 'Only downloads'));
 }
コード例 #27
0
 /**
  * @param Request              $request
  * @param Criteria             $criteria
  * @param ShopContextInterface $context
  */
 public function handleRequest(Request $request, Criteria $criteria, ShopContextInterface $context)
 {
     $requestedCategoryId = $request->getParam('sCategory', $request->getParam('categoryId', false));
     if (!$requestedCategoryId) {
         return;
     }
     $closestIdWithRules = $this->databaseAdapter->fetchClosestCategoryIdWithRule($requestedCategoryId);
     if (!$closestIdWithRules) {
         return;
     }
     $this->enabled = true;
     if ($request->sSort && $request->sSort != self::REQUEST_VALUE) {
         return;
     }
     $request->setParam('sSort', self::REQUEST_VALUE);
     $rules = $this->ruleHydrator->createRuleVos($this->databaseAdapter->fetchRawData($closestIdWithRules));
     $criteria->resetSorting();
     $criteria->addSorting(new DefaultSorting($rules));
 }
コード例 #28
0
 /**
  * Generates the facet data for the passed query, criteria and context object.
  *
  * @param FacetInterface|Facet\ShippingFreeFacet $facet
  * @param Criteria $criteria
  * @param ShopContextInterface $context
  * @return BooleanFacetResult
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, ShopContextInterface $context)
 {
     $queryCriteria = clone $criteria;
     $queryCriteria->resetConditions();
     $queryCriteria->resetSorting();
     $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context);
     $query->resetQueryPart('orderBy');
     $query->resetQueryPart('groupBy');
     $query->select('product.id')->andWhere('variant.shippingfree = 1')->setMaxResults(1);
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $total = $statement->fetch(\PDO::FETCH_COLUMN);
     if ($total <= 0) {
         return null;
     }
     return new BooleanFacetResult($facet->getName(), $this->fieldName, $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Shipping free'));
 }
コード例 #29
0
 /**
  * {@inheritdoc}
  */
 public function handle(CriteriaPartInterface $criteriaPart, Criteria $criteria, Search $search, ShopContextInterface $context)
 {
     /** @var ProductAttributeCondition $criteriaPart */
     $field = 'attributes.core.' . $criteriaPart->getField();
     switch ($criteriaPart->getOperator()) {
         case ProductAttributeCondition::OPERATOR_EQ:
             $filter = new TermFilter($field, $criteriaPart->getValue());
             break;
         case ProductAttributeCondition::OPERATOR_NEQ:
             $filter = new NotFilter(new TermFilter($field, $criteriaPart->getValue()));
             break;
         case ProductAttributeCondition::OPERATOR_LT:
             $filter = new RangeFilter($field, ['lt' => $criteriaPart->getValue()]);
             break;
         case ProductAttributeCondition::OPERATOR_LTE:
             $filter = new RangeFilter($field, ['lte' => $criteriaPart->getValue()]);
             break;
         case ProductAttributeCondition::OPERATOR_BETWEEN:
             $value = $criteriaPart->getValue();
             $filter = new RangeFilter($field, ['gte' => $value['min'], 'lte' => $value['max']]);
             break;
         case ProductAttributeCondition::OPERATOR_GT:
             $filter = new RangeFilter($field, ['gt' => $criteriaPart->getValue()]);
             break;
         case ProductAttributeCondition::OPERATOR_GTE:
             $filter = new RangeFilter($field, ['gte' => $criteriaPart->getValue()]);
             break;
         case ProductAttributeCondition::OPERATOR_IN:
             $filter = new TermsFilter($field, $criteriaPart->getValue());
             break;
         case ProductAttributeCondition::OPERATOR_STARTS_WITH:
         case ProductAttributeCondition::OPERATOR_ENDS_WITH:
         case ProductAttributeCondition::OPERATOR_CONTAINS:
             $filter = new QueryFilter(new TermFilter($field, $criteriaPart->getValue()));
             break;
         default:
             return;
     }
     if ($criteria->hasBaseCondition($criteriaPart->getName())) {
         $search->addFilter($filter);
     } else {
         $search->addPostFilter($filter);
     }
 }
コード例 #30
0
 /**
  * Generates the facet data for the passed query, criteria and context object.
  *
  * @param FacetInterface|Facet\ShippingFreeFacet $facet
  * @param Criteria $criteria
  * @param ShopContextInterface $context
  * @return BooleanFacetResult
  */
 public function generateFacet(FacetInterface $facet, Criteria $criteria, ShopContextInterface $context)
 {
     $queryCriteria = clone $criteria;
     $queryCriteria->resetConditions();
     $queryCriteria->resetSorting();
     $query = $this->queryBuilderFactory->createQuery($queryCriteria, $context);
     $query->resetQueryPart('orderBy');
     $query->resetQueryPart('groupBy');
     if (!$query->hasState(ImmediateDeliveryConditionHandler::STATE_INCLUDES_ALL_VARIANTS)) {
         $query->innerJoin('product', 's_articles_details', 'allVariants', 'allVariants.articleID = product.id
              AND allVariants.active = 1
              AND allVariants.instock >= allVariants.minpurchase');
         $query->addState(ImmediateDeliveryConditionHandler::STATE_INCLUDES_ALL_VARIANTS);
     }
     $query->select('product.id')->setMaxResults(1);
     /**@var $statement \Doctrine\DBAL\Driver\ResultStatement */
     $statement = $query->execute();
     $total = $statement->fetch(\PDO::FETCH_COLUMN);
     if ($total <= 0) {
         return null;
     }
     return new BooleanFacetResult($facet->getName(), $this->fieldName, $criteria->hasCondition($facet->getName()), $this->snippetNamespace->get($facet->getName(), 'Immediate delivery'));
 }