Example #1
0
 /**
  * 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);
 }