/**
  * Applies filter to query by attribute
  *
  * @param FilterDatasourceAdapterInterface $ds
  * @param string                           $field
  * @param mixed                            $value
  * @param string                           $operator
  */
 public function applyFilterByAttribute(FilterDatasourceAdapterInterface $ds, $field, $value, $operator)
 {
     $attribute = $this->getAttribute($field);
     $productQueryBuilder = $this->getProductRepository()->getProductQueryBuilder($ds->getQueryBuilder());
     if ($attribute) {
         $productQueryBuilder->addAttributeFilter($attribute, $operator, $value);
     } else {
         $productQueryBuilder->addFieldFilter($field, $operator, $value);
     }
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $ids = $data['value'];
     $qb = $ds->getQueryBuilder();
     $repository = $this->util->getProductRepository();
     $pqb = $repository->getProductQueryBuilder($qb);
     $pqb->addFieldFilter('family', 'IN', $ids);
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $qb = $ds->getQueryBuilder();
     $value = current($data['value']);
     $repository = $this->util->getProductRepository();
     $pqb = $repository->getProductQueryBuilder($qb);
     $pqb->addFieldFilter('enabled', '=', $value);
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $associationType = $this->getAssociationType();
     $product = $this->getCurrentProduct();
     $productIds = $this->getAssociatedProductIds($product, $associationType);
     $operator = $data['value'] === BooleanFilterType::TYPE_YES ? 'IN' : 'NOT IN';
     $qb = $ds->getQueryBuilder();
     $repository = $this->util->getProductRepository();
     $pqb = $repository->getProductQueryBuilder($qb);
     $pqb->addFieldFilter('id', $operator, $productIds);
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $groupId = $this->extractor->getDatagridParameter('currentGroup');
     if (!$groupId) {
         throw new \LogicException('The current product group must be configured');
     }
     $value = [$groupId];
     $operator = $data['value'] === BooleanFilterType::TYPE_YES ? 'IN' : 'NOT IN';
     $qb = $ds->getQueryBuilder();
     $repository = $this->util->getProductRepository();
     $pqb = $repository->getProductQueryBuilder($qb);
     $pqb->addFieldFilter('groups', $operator, $value);
     return true;
 }
 /**
  * {@inheritdoc}
  */
 public function apply(FilterDatasourceAdapterInterface $ds, $data)
 {
     $data = $this->parseData($data);
     if (!$data) {
         return false;
     }
     $qb = $ds->getQueryBuilder();
     switch ($data['value']) {
         case BooleanFilterType::TYPE_YES:
             $operator = '=';
             break;
         case BooleanFilterType::TYPE_NO:
         default:
             $operator = '<';
             break;
     }
     $repository = $this->util->getProductRepository();
     $pqb = $repository->getProductQueryBuilder($qb);
     $pqb->addFieldFilter('completeness', $operator, '100');
     return true;
 }
 /**
  * Add filter to display categorized products
  *
  * @param FilterDatasourceAdapterInterface $ds
  * @param array                            $data
  *
  * @return boolean has been applied
  */
 protected function applyFilterByCategory(FilterDatasourceAdapterInterface $ds, $data)
 {
     $categoryRepository = $this->manager->getCategoryRepository();
     $productRepository = $this->manager->getProductCategoryRepository();
     $qb = $ds->getQueryBuilder();
     $category = $categoryRepository->find($data['categoryId']);
     if (!$category) {
         $category = $categoryRepository->find($data['treeId']);
     }
     if ($category) {
         $productIds = $this->getProductIdsInCategory($category, $data);
         $productRepository->applyFilterByIds($qb, $productIds, true);
         return true;
     }
     return false;
 }