<?php namespace Lc\ShopBundle\Repository; use Doctrine\ORM\EntityManager; use Lc\ShopBundle\Context\DefaultRepositoryInterface; use Lc\ShopBundle\Context\MerchantUtilsInterface; use Lc\ShopBundle\Context\OrderUtilsInterface; use Lc\ShopBundle\Context\ReductionCartInterface; /** * @method ReductionCartInterface|null find($id, $lockMode = null, $lockVersion = null) * @method ReductionCartInterface|null findOneBy(array $criteria, array $orderBy = null) * @method ReductionCartInterface[] findAll() * @method ReductionCartInterface[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class ReductionCartRepository extends BaseRepository implements DefaultRepositoryInterface { protected $orderUtils ; public function __construct(EntityManager $entityManager, MerchantUtilsInterface $merchantUtils, OrderUtilsInterface $orderUtils) { parent::__construct($entityManager, $merchantUtils); $this->orderUtils = $orderUtils ; } public function getInterfaceClass() { return ReductionCartInterface::class; } public function findOneByCode($code) { $query = $this->findByMerchantQuery() ; $query->andWhere('e.codes LIKE :code')->setParameter('code', '%'.$code.'%') ; return $query->getQuery()->getOneOrNullResult() ; } public function getValuesOfFieldType(){ $query = $this->findByMerchantQuery() ; $query->select('DISTINCT e.type'); $query->andWhere('e.status = 1'); return $query->getQuery()->getResult() ; } public function getValuesOfFieldCode(){ $query = $this->findByMerchantQuery() ; $query->select('DISTINCT e.codes'); $query->andWhere('e.status = 1'); return $query->getQuery()->getResult() ; } public function getEligibleReductionCart($order) { $query = $this->findByMerchantQuery() ; $query->andWhere('e.status = 1'); return $query->getQuery()->getResult(); } public function findAllAvailableForUser($user) { $reductionCarts = $this->findAll() ; $reductionCartsArray = [] ; foreach($reductionCarts as $reductionCart) { if($this->orderUtils->isReductionCartMatchWithUser($reductionCart, $user) && $this->orderUtils->isReductionCartMatchWithGroupUser($reductionCart, $user) && $this->orderUtils->countReductionCartAvailableForUser($reductionCart, $user)) { $reductionCartsArray[] = $reductionCart ; } } return $reductionCartsArray ; } }