/** * Filters the displayed fields by the passed filter value. * * @param \Doctrine\ORM\QueryBuilder $builder * @param array|null $filters * @return \Doctrine\ORM\QueryBuilder */ protected function filterListQuery(\Doctrine\ORM\QueryBuilder $builder, $filters = null) { $expr = Shopware()->Models()->getExpressionBuilder(); if (!empty($filters)) { foreach ($filters as $filter) { if (empty($filter['property']) || $filter['value'] === null || $filter['value'] === '') { continue; } switch ($filter['property']) { case "free": $builder->andWhere($expr->orX($expr->like('orders.number', '?1'), $expr->like('orders.invoiceAmount', '?1'), $expr->like('orders.transactionId', '?1'), $expr->like('billing.company', '?3'), $expr->like('customer.email', '?3'), $expr->like('billing.lastName', '?3'), $expr->like('billing.firstName', '?3'), $expr->like('orders.comment', '?3'), $expr->like('orders.customerComment', '?3'), $expr->like('orders.internalComment', '?3'))); $builder->setParameter(1, $filter['value'] . '%'); $builder->setParameter(3, '%' . $filter['value'] . '%'); break; case "from": $tmp = new \DateTime($filter['value']); $builder->andWhere('orders.orderTime > :orderTimeFrom'); $builder->setParameter('orderTimeFrom', $tmp->format('Ymd')); break; case "to": $tmp = new \Zend_Date($filter['value']); $tmp->setHour('23'); $tmp->setMinute('59'); $tmp->setSecond('59'); $builder->andWhere('orders.orderTime <= :orderTimeTo'); $builder->setParameter('orderTimeTo', $tmp->get('yyyy-MM-dd HH:mm:ss')); break; case 'details.articleNumber': $builder->leftJoin('orders.details', 'details'); $builder->andWhere('details.articleNumber LIKE :articleNumber'); $builder->setParameter('articleNumber', $filter['value']); break; default: $builder->addFilter(array($filter)); } } } return $builder; }
/** * Adds filters to the query results. * * <code> * $this->addFilter($builder, array(array( * 'property' => 'name' * 'value' => 'A%' * ))); * </code> * * @param QueryBuilder $builder * @param array $filter * @return QueryBuilder */ public function addFilter(QueryBuilder $builder, array $filter) { return $builder->addFilter($filter); }