|
- <?php
-
- namespace Lc\CaracoleBundle\Repository\Order;
-
- use App\Entity\Delivery\DeliveryAvailabilityPointSale;
- use App\Entity\Delivery\DeliveryAvailabilityZone;
- use App\Entity\PointSale\PointSale;
- use Knp\Component\Pager\PaginatorInterface;
- use Lc\CaracoleBundle\Model\Address\AddressInterface;
- use Lc\CaracoleBundle\Model\Merchant\MerchantInterface;
- use Lc\CaracoleBundle\Model\Order\OrderReductionCartInterface;
- use Lc\CaracoleBundle\Model\Order\OrderReductionCreditInterface;
- use Lc\CaracoleBundle\Model\Reduction\ReductionCartInterface;
- use Lc\CaracoleBundle\Model\Reduction\ReductionCreditInterface;
- use Lc\CaracoleBundle\Model\User\VisitorInterface;
- use Lc\CaracoleBundle\Repository\SectionRepositoryQueryTrait;
- use Lc\SovBundle\Model\User\UserInterface;
- use Lc\SovBundle\Repository\AbstractRepositoryQuery;
- use DateTime;
-
- class OrderShopRepositoryQuery extends AbstractRepositoryQuery
- {
- use SectionRepositoryQueryTrait;
-
- protected bool $isJoinProduct = false;
- protected bool $isJoinOrderProduct = false;
- protected bool $isJoinOrderReductionCredits = false;
- protected bool $isJoinOrderReductionCarts = false;
- protected bool $isJoinOrderStatus = false;
- protected bool $isJoinMerchant = false;
- protected bool $isJoinSection = false;
- protected bool $isJoinComplementaryOrderShops = false;
- protected bool $isJoinDeliveryPointSale = false;
-
- public function __construct(OrderShopRepository $repository, PaginatorInterface $paginator)
- {
- parent::__construct($repository, 'r', $paginator);
- }
-
- // @TODO : nécessaire ?
- public function selectParam($select): self
- {
- return $this
- ->addSelect($select);
- }
-
- public function selectCount(): self
- {
- return $this
- ->select('count(r.id) as total');
- }
-
- public function filterByMerchant(MerchantInterface $merchant)
- {
- $this->joinMerchant();
- return $this->andWhere('s.merchant = :merchant')
- ->setParameter('merchant', $merchant);
- }
-
- public function filterByUser(UserInterface $user): self
- {
- return $this
- ->andWhere('.user = :user')
- ->setParameter('user', $user);
- }
-
- public function filterIsMerchantOnline(): self
- {
- $this->joinMerchant();
- return $this
- ->andWhere('merchant.status = :status')
- ->setParameter(':status', 1);
- }
-
- public function filterByDateStart(string $dateField, DateTime $dateStart): self
- {
- return $this
- ->andWhere('.' . $dateField . ' >= :dateStart')
- ->setParameter('dateStart', $dateStart);
- }
-
- public function filterByDateEnd(string $dateField, DateTime $dateEnd): self
- {
- return $this
- ->andWhere('.' . $dateField . ' <= :dateEnd')
- ->setParameter('dateEnd', $dateEnd);
- }
-
- public function filterByVisitor(VisitorInterface $visitor): self
- {
- return $this
- ->andWhere('.visitor = :visitor')
- ->setParameter('visitor', $visitor);
- }
-
- public function filterByAddress(AddressInterface $address): self
- {
- return $this
- ->andWhere('.deliveryAddress = :address OR .invoiceAddress = :address')
- ->setParameter('address', $address);
- }
-
- public function filterByStatus(array $statusArray): self
- {
- $this->joinOrderStatus();
-
- return $this
- ->andWhere('os.alias IN (:alias)')
- ->setParameter('alias', $statusArray);
- }
-
- public function filterByReductionCredit(ReductionCreditInterface $reductionCredit): self
- {
- $this->joinOrderReductionCredits();
-
- return $this
- ->andWhere('orc.reductionCredit = :reductionCredit')
- ->setParameter('reductionCredit', $reductionCredit);
- }
-
- public function filterByReductionCart(ReductionCartInterface $reductionCart): self
- {
- $this->joinOrderReductionCarts();
-
- return $this
- ->andWhere('orcart.reductionCart = :reductionCart')
- ->setParameter('reductionCart', $reductionCart);
- }
-
- public function filterByCycleNumber(int $cycleNumber): self
- {
- return $this
- ->andWhere('.cycleNumber = :cycleNumber')
- ->setParameter('cycleNumber', $cycleNumber);
- }
-
- public function filterIsNotComplementaryOrderShop(): self
- {
- return $this
- ->andWhere('.mainOrderShop = false OR .mainOrderShop IS NULL');
- }
-
- public function filterIsNullMainOrderShop(): self
- {
- return $this
- ->andWhere('.mainOrderShop IS NULL');
- }
-
- public function selectOrderReductionCarts(): self
- {
- $this->joinOrderReductionCarts();
-
- return $this->addSelect('orcart');
- }
-
- public function joinOrderProduct(): self
- {
- if (!$this->isJoinOrderProduct) {
- $this->isJoinOrderProduct = true;
-
- return $this
- ->innerJoin('.orderProducts', 'op');
- }
- return $this;
- }
-
- public function joinOrderReductionCredits(): self
- {
- if (!$this->isJoinOrderReductionCredits) {
- $this->isJoinOrderReductionCredits = true;
-
- return $this
- ->innerJoin('.orderReductionCredits', 'orc');
- }
- return $this;
- }
-
- public function joinOrderStatus(): self
- {
- if (!$this->isJoinOrderStatus) {
- $this->isJoinOrderStatus = true;
-
- return $this
- ->leftJoin('.orderStatus', 'os');
- }
- return $this;
- }
-
- public function joinOrderReductionCarts(): self
- {
- if (!$this->isJoinOrderReductionCarts) {
- $this->isJoinOrderReductionCarts = true;
-
- return $this
- ->leftJoin('.orderReductionCarts', 'orcart');
- }
- return $this;
- }
-
- public function joinMerchant(): self
- {
- $this->joinSection();
- if (!$this->isJoinMerchant) {
- $this->isJoinMerchant = true;
-
- return $this
- ->leftJoin('s.merchant', 'merchant');
- }
- return $this;
- }
-
- public function joinSection(): self
- {
- if (!$this->isJoinSection) {
- $this->isJoinSection = true;
-
- return $this
- ->leftJoin('.section', 's');
- }
- return $this;
- }
-
- public function joinComplementaryOrderShops(): self
- {
- if (!$this->isJoinComplementaryOrderShops) {
- $this->isJoinComplementaryOrderShops = true;
-
- return $this
- ->leftJoin('.complementaryOrderShops', 'complementaryOrderShops');
- }
- return $this;
- }
-
- public function joinDeliveryPointSale(): self
- {
- if (!$this->isJoinDeliveryPointSale) {
- $this->isJoinDeliveryPointSale = true;
-
- return $this
- ->leftJoin('.deliveryPointSale', 'pointSale');
- }
- return $this;
- }
-
- }
|