app/Plugin/EccubePaymentLite42/Service/GetProductClassesRegularCycles.php line 31

Open in your IDE?
  1. <?php
  2. namespace Plugin\EccubePaymentLite42\Service;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Eccube\Entity\Order;
  5. use Eccube\Entity\ProductClass;
  6. use Eccube\Repository\ProductClassRepository;
  7. use Plugin\EccubePaymentLite42\Entity\ProductClassRegularCycle;
  8. use Plugin\EccubePaymentLite42\Entity\RegularCycle;
  9. class GetProductClassesRegularCycles
  10. {
  11.     /**
  12.      * @var ProductClassRepository
  13.      */
  14.     private $productClassRepository;
  15.     /**
  16.      * @var EntityManagerInterface
  17.      */
  18.     private $entityManager;
  19.     public function __construct(
  20.         ProductClassRepository $productClassRepository,
  21.         EntityManagerInterface $entityManager
  22.     ) {
  23.         $this->productClassRepository $productClassRepository;
  24.         $this->entityManager $entityManager;
  25.     }
  26.     public function handle(Order $Order)
  27.     {
  28.         $productClassIds $this->getProductClassIds($Order);
  29.         $regularCycleIds $this->getRegularCycleIds($Order);
  30.         $qb $this
  31.             ->entityManager
  32.             ->createQueryBuilder();
  33.         $qb
  34.             ->select('rc')
  35.             ->from(ProductClass::class, 'pc')
  36.             ->innerJoin(ProductClassRegularCycle::class, 'pcrc')
  37.             ->innerJoin(RegularCycle::class, 'rc')
  38.             ->where(
  39.                 $qb->expr()->in('pc.id'':productClassIds')
  40.             )
  41.             ->andWhere(
  42.                 $qb->expr()->in('rc.id'':regularCycleIds')
  43.             )
  44.             ->setParameter('productClassIds'$productClassIds)
  45.             ->setParameter('regularCycleIds'$regularCycleIds)
  46.             ->orderBy('rc.sort_no''DESC')
  47.         ;
  48.         return $qb
  49.             ->getQuery()
  50.             ->getResult();
  51.     }
  52.     private function getProductClassIds(Order $Order)
  53.     {
  54.         $productClassIds = [];
  55.         foreach ($Order->getProductOrderItems() as $key => $OrderItem) {
  56.             $productClassId $OrderItem->getProductClass()->getId();
  57.             $productClassIds[$productClassId] = $productClassId;
  58.         }
  59.         return $productClassIds;
  60.     }
  61.     private function getRegularCycleIds(Order $Order)
  62.     {
  63.         $regularCycleIds = [];
  64.         foreach ($Order->getProductOrderItems() as $key => $OrderItem) {
  65.             $tempRegularCycleIds = [];
  66.             foreach ($OrderItem->getProductClass()->getRegularCycle() as $regularCycle) {
  67.                 /** @var RegularCycle $regularCycle */
  68.                 $regularCycleId $regularCycle->getId();
  69.                 $tempRegularCycleIds[] = $regularCycleId;
  70.             }
  71.             if ($key === 0) {
  72.                 $regularCycleIds $tempRegularCycleIds;
  73.                 continue;
  74.             }
  75.             $regularCycleIds array_intersect($regularCycleIds$tempRegularCycleIds);
  76.         }
  77.         return $regularCycleIds;
  78.     }
  79. }