src/Repository/OrderItemRepository.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Order;
  4. use App\Entity\OrderItem;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. class OrderItemRepository extends GeneralRepository
  7. {
  8.     private $definedAlias = [];
  9.     public function init()
  10.     {
  11.         parent::init();
  12.         $this->definedAlias = [];
  13.     }
  14.     public function __construct(EntityManagerInterface $em)
  15.     {
  16.         $classMetadata $em->getClassMetadata(OrderItem::class);
  17.         parent::__construct($em$classMetadata);
  18.         $this->setLetter('oi');
  19.         $this->setDefaultSort([
  20.             'field' => 'createdAt',
  21.             'order' => 'DESC'
  22.         ]);
  23.         $this->setDefaultLimit(10);
  24.     }
  25.     public function setSearchParams($params)
  26.     {
  27.         parent::setSearchParams($params);
  28.         if (isset($params['product'])) {
  29.             $this->product($params['product']);
  30.         }
  31.         if (isset($params['productIn'])) {
  32.             $this->productIn($params['productIn']);
  33.         }
  34.         if (isset($params['before'])) {
  35.             $this->before($params['before']);
  36.         }
  37.         if (isset($params['after'])) {
  38.             $this->after($params['after']);
  39.         }
  40.         if (isset($params['visibleOrder'])) {
  41.             if ($params['visibleOrder']) {
  42.                 $this->visibleOrderOnly();
  43.             }
  44.         }
  45.         if (isset($params['emptySavingOny'])) {
  46.             if ($params['emptySavingOny']) {
  47.                 $this->emptySavingOnly();
  48.             }
  49.         }
  50.         if (isset($params['emptyByCustomerOccurence'])) {
  51.             if ($params['emptyByCustomerOccurence']) {
  52.                 $this->emptyByCustomerOccurence();
  53.             }
  54.         }
  55.         if (isset($params['occurenceEqual'])) {
  56.             $this->occurenceEqual($params['occurenceEqual']);
  57.         }
  58.         if (isset($params['orderedBy'])) {
  59.             $this->orderedBy($params['orderedBy']);
  60.         }
  61.     }
  62.     private function occurenceEqual($occurence)
  63.     {
  64.         $this->qb
  65.             ->andWhere($this->letter '.boughtByCustomerOccurence = :occurence')
  66.             ->setParameter(':occurence'$occurence);
  67.     }
  68.     private function orderedBy($customers)
  69.     {
  70.         $this->joinOrder();
  71.         $this->qb
  72.             ->andWhere('o.customer IN (:customers)')
  73.             ->setParameter(':customers'$customers);
  74.     }
  75.     private function joinOrder()
  76.     {
  77.         if (! in_array('o'$this->definedAlias)) {
  78.             $this->qb->leftJoin(Order::class, 'o''WITH''o.id = ' $this->letter '.order');
  79.             $this->definedAlias[] = 'o';
  80.         }
  81.     }
  82.     private function visibleOrderOnly()
  83.     {
  84.         $this->joinOrder();
  85.         $this->qb
  86.             ->andWhere('o.visible = :visible')
  87.             ->setParameter(':visible'true);
  88.     }
  89.     private function productIn($products)
  90.     {
  91.         $this->qb
  92.             ->andWhere($this->letter '.product IN (:products)')
  93.             ->setParameter(':products'$products);
  94.     }
  95.     private function product($product)
  96.     {
  97.         $this->qb
  98.             ->andWhere($this->letter '.product = :product')
  99.             ->setParameter(':product'$product);
  100.     }
  101.     private function before($dt)
  102.     {
  103.         $this->qb
  104.             ->andWhere($this->letter '.createdAt <= :before')
  105.             ->setParameter(':before'$dt);
  106.     }
  107.     private function after($dt)
  108.     {
  109.         $this->qb
  110.             ->andWhere($this->letter '.createdAt >= :after')
  111.             ->setParameter(':after'$dt);
  112.     }
  113.     private function emptySavingOnly()
  114.     {
  115.         $this->qb
  116.             ->andWhere($this->letter '.totalSavingExcludingTax IS NULL');
  117.     }
  118.     private function emptyByCustomerOccurence()
  119.     {
  120.         $this->qb
  121.             ->andWhere($this->letter '.boughtByCustomerOccurence IS NULL');
  122.     }
  123. }