/**
  * {@inheritdoc}
  */
 public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context)
 {
     $query->innerJoin('product', 's_articles_details', 'allVariants', 'allVariants.articleID = product.id
          AND allVariants.active = 1
          AND allVariants.instock >= allVariants.minpurchase');
     $query->addState(self::STATE_INCLUDES_ALL_VARIANTS);
 }
예제 #2
0
 /**
  * @inheritdoc
  */
 public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context)
 {
     if (!$query->hasState(self::STATE_ESD_INCLUDED)) {
         $query->innerJoin('product', 's_articles_esd', 'esd', 'esd.articleID = product.id');
         $query->addState(self::STATE_ESD_INCLUDED);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function generateSorting(SortingInterface $sorting, QueryBuilder $query, ShopContextInterface $context)
 {
     if (!$query->hasState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE)) {
         $query->leftJoin('product', 's_articles_top_seller_ro', 'topSeller', 'topSeller.article_id = product.id');
         $query->addState(SalesConditionHandler::STATE_INCLUDES_TOPSELLER_TABLE);
     }
     /** @var PopularitySorting $sorting */
     $query->addOrderBy('topSeller.sales', $sorting->getDirection())->addOrderBy('topSeller.article_id', $sorting->getDirection());
 }
 /**
  * Extends the query and returns the alias to bind the definition to.
  *
  * @param QueryBuilder           $queryBuilder
  * @param AbstractSortDefinition $definition
  *
  * @return string
  */
 public function extendQuery(QueryBuilder $queryBuilder, AbstractSortDefinition $definition)
 {
     $alias = $this->createAlias('Variant');
     if ($queryBuilder->hasState($alias)) {
         return $alias;
     }
     $queryBuilder->addState($alias);
     return 'variant';
 }
예제 #5
0
 /**
  * Extends the query and returns the alias to bind the definitition to.
  *
  * @param QueryBuilder $queryBuilder
  *
  * @return string
  */
 public function extendQuery(QueryBuilder $queryBuilder, AbstractSortDefinition $definition)
 {
     $alias = $this->createAlias('Variant');
     if ($queryBuilder->hasState($alias)) {
         return $alias;
     }
     $queryBuilder->leftJoin('product', $this->getTableName(), $alias, $alias . '.articleID = product.id');
     $queryBuilder->addState($alias);
     return $alias;
 }
예제 #6
0
 /**
  * {@inheritdoc}
  */
 public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context)
 {
     if (!$query->hasState(self::STATE_INCLUDES_TOPSELLER_TABLE)) {
         $query->leftJoin('product', 's_articles_top_seller_ro', 'topSeller', 'topSeller.article_id = product.id');
         $query->addState(self::STATE_INCLUDES_TOPSELLER_TABLE);
     }
     $query->andWhere('topSeller.sales > :sales');
     /** @var SalesCondition $condition */
     $query->setParameter('sales', $condition->getMinSales());
 }
    /**
     * {@inheritdoc}
     */
    public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context)
    {
        $table = '
SELECT SUM(vote.points) / COUNT(vote.id) AS average, vote.articleID AS product_id
FROM s_articles_vote vote
GROUP BY vote.articleID';
        $query->innerJoin('product', '(' . $table . ')', 'voteAverage', 'voteAverage.product_id = product.id
             AND voteAverage.average >= :average');
        /** @var VoteAverageCondition $condition */
        $query->setParameter(':average', (double) $condition->getAverage());
        $query->addSelect('voteAverage.average');
        $query->addState(VoteAverageCondition::STATE_INCLUDES_VOTE_TABLE);
    }
 /**
  * {@inheritdoc}
  */
 public function generateCondition(ConditionInterface $condition, QueryBuilder $query, ShopContextInterface $context)
 {
     /** @var SearchTermCondition $condition */
     $searchQuery = $this->searchTermQueryBuilder->buildQuery($condition->getTerm());
     //no matching products found by the search query builder.
     //add condition that the result contains no product.
     if ($searchQuery == null) {
         $query->andWhere('0 = 1');
         return;
     }
     $queryString = $searchQuery->getSQL();
     $query->addSelect('searchTable.*');
     $query->addState(self::STATE_INCLUDES_RANKING);
     $query->innerJoin('product', '(' . $queryString . ')', 'searchTable', 'searchTable.product_id = product.id');
 }
예제 #9
0
 /**
  * @inheritdoc
  */
 public function joinAvailableVariant(QueryBuilder $query)
 {
     if ($query->hasState(self::STATE_INCLUDES_AVAILABLE_VARIANT)) {
         return;
     }
     $stockCondition = '';
     if ($this->config->get('hideNoInstock')) {
         $stockCondition = 'AND (product.laststock * availableVariant.instock) >= (product.laststock * availableVariant.minpurchase)';
     }
     $query->innerJoin('product', 's_articles_details', 'availableVariant', 'availableVariant.articleID = product.id
          AND availableVariant.active = 1 ' . $stockCondition);
     $query->addState(self::STATE_INCLUDES_AVAILABLE_VARIANT);
 }