findByMerchantQuery(); $query = $this->filterOrderValid($query); $query->select('count(e.id)'); $query->andWhere('e.user = :user'); $query->innerJoin('e.orderReductionCredits', 'orc'); $query->andWhere('orc.reductionCredit = :reductionCredit'); $query->setParameter('reductionCredit', $reductionCredit); $query->setParameter('user', $user); return $query->getQuery()->getSingleScalarResult(); } public function countValidOrderWithReductionCart($reductionCart){ $query = $this->findByMerchantQuery(); $query = $this->filterOrderValid($query); $query->select('count(e.id)'); $query->join('e.orderReductionCarts', 'orc'); $query->andWhere('orc.reductionCart = :reductionCart'); $query->setParameter('reductionCart', $reductionCart); return $query->getQuery()->getSingleScalarResult(); } public function countValidOrderWithReductionCartPerUser($reductionCart, $user){ $query = $this->findByMerchantQuery(); $query = $this->filterOrderValid($query); $query->select('count(e.id)'); $query->andWhere('e.user = :user'); $query->join('e.orderReductionCarts', 'orc'); $query->andWhere('orc.reductionCart = :reductionCart'); $query->setParameter('reductionCart', $reductionCart); $query->setParameter('user', $user); return $query->getQuery()->getSingleScalarResult(); } public function filterOrderValid(?QueryBuilder $query) :QueryBuilder { $query->leftJoin('e.orderStatus', 'os'); $query->andWhere('os.alias IN (:alias)'); $query->setParameter('alias', $this->statusAliasAsValid); return $query; } public function filterOrderCart($query) { $query->leftJoin('e.orderStatus', 'os'); $query->andWhere('os.alias IN (:alias)'); $query->setParameter('alias', $this->statusAliasAsCart); return $query; } public function findCartCurrent($params) { $query = $this->findByMerchantQuery() ; if(isset($params['user'])) { $query->andWhere('e.user = :user')->setParameter('user', $params['user']) ; } if(isset($params['visitor'])) { $query->andWhere('e.visitor = :visitor')->setParameter('visitor', $params['visitor']) ; } $query = $this->filterOrderCart($query); $query->leftJoin('e.orderReductionCarts', 'orderReductionCarts') ->addSelect('orderReductionCarts'); $results = $query->getQuery()->getResult() ; if($results) { return $results[0] ; } return null ; } public function findAllBy($params = []) { $query = $this->findByMerchantQuery() ; if(isset($params['count']) && $params['count']) { $query->select('count(e.id)') ; } if(isset($params['dateStart']) || isset($params['dateEnd'])) { $params['dateField'] = isset($params['dateField']) ? $params['dateField'] : 'validationDate' ; } if(isset($params['dateStart'])) { $query->andWhere('e.'.$params['dateField'].' >= :dateStart')->setParameter('dateStart', $params['dateStart']) ; } if(isset($params['dateEnd'])) { $query->andWhere('e.'.$params['dateField'].' <= :dateEnd')->setParameter('dateEnd', $params['dateEnd']) ; } if(isset($params['isCart'])) { $query = $this->filterOrderCart($query) ; } if(isset($params['isValid'])) { $query = $this->filterOrderValid($query) ; } if(isset($params['user'])) { $query->andWhere('e.user = :user')->setParameter('user', $params['user']) ; } $query->orderBy('e.id', 'DESC') ; $query->leftJoin('e.deliveryAvailabilityZone', 'deliveryAvailabilityZone') ; $query->leftJoin('deliveryAvailabilityZone.deliverySlot', 'deliverySlotZone') ; $query->addOrderBy('deliverySlotZone.day', 'ASC') ; $query->addOrderBy('deliverySlotZone.timeStart', 'ASC') ; $query->leftJoin('e.deliveryAvailabilityPointSale', 'deliveryAvailabilityPointSale') ; $query->leftJoin('deliveryAvailabilityPointSale.deliverySlot', 'deliverySlotPointSale') ; $query->addOrderBy('deliverySlotPointSale.day', 'ASC') ; $query->addOrderBy('deliverySlotPointSale.timeStart', 'ASC') ; if(isset($params['count']) && $params['count']) { return $query->getQuery()->getSingleScalarResult(); } else { return $query->getQuery()->getResult() ; } } public function findLastOrderValidOfWeek($weekNumber){ $query = $this->findByMerchantQuery(); $query = $this->filterOrderValid($query); $query->andWhere('e.weekNumber = :weekNumber'); $query->setParameter('weekNumber', $weekNumber); $query->orderBy('e.validationDate','DESC'); return $query->getQuery()->getOneOrNullResult(); } }