app/Plugin/RemisePayment42/Repository/RemiseACMemberRepository.php line 24

Open in your IDE?
  1. <?php
  2. namespace Plugin\RemisePayment42\Repository;
  3. use Eccube\Repository\AbstractRepository;
  4. use Doctrine\Persistence\ManagerRegistry as RegistryInterface;
  5. use Symfony\Component\HttpKernel\KernelInterface;
  6. use Eccube\Doctrine\Query\Queries;
  7. use Eccube\Util\StringUtil;
  8. use Eccube\Entity\Master\OrderItemType;
  9. use Plugin\RemisePayment42\Entity\RemiseACMember;
  10. /**
  11.  * ルミーズ定期購買メンバ情報アクセスクラス
  12.  */
  13. class RemiseACMemberRepository extends AbstractRepository
  14. {
  15.     /**
  16.      * コンストラクタ
  17.      *
  18.      * @param RegistryInterface $registry
  19.      */
  20.     public function __construct(RegistryInterface $registryQueries $queries)
  21.     {
  22.         parent::__construct($registryRemiseACMember::class);
  23.         $this->queries $queries;
  24.     }
  25.     /**
  26.      * get query builder.
  27.      *
  28.      * @param  array $searchData
  29.      *
  30.      * @return \Doctrine\ORM\QueryBuilder
  31.      */
  32.     public function getQueryBuilderBySearchDataForAdmin($searchData)
  33.     {
  34.         $qb $this->createQueryBuilder('rms_acm');
  35.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResultCard''rms_orc''WITH''rms_orc.member_id = rms_acm.id');
  36.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResult''rms_or''WITH''rms_or.id = rms_orc.id');
  37.         $qb->innerJoin('\Eccube\Entity\Order''ec_o''WITH''ec_o.id = rms_or.id');
  38.         $qb->select('rms_acm');
  39.         $qb->groupBy('rms_acm.id');
  40.         $qb->orderBy('rms_acm.update_date''DESC');
  41.         // multi
  42.         if (isset($searchData['multi']) && StringUtil::isNotBlank($searchData['multi'])) {
  43.             $multiCustomerId preg_match('/^\d{0,10}$/'$searchData['multi']) ? $searchData['multi'] : null;
  44.             $qb
  45.             ->andWhere(
  46.                 'rms_acm.id = :multi'
  47.                 ' OR ec_o.Customer = :multi_customer_id'
  48.                 ' OR CONCAT(ec_o.name01, ec_o.name02) LIKE :likemulti'
  49.                 )
  50.                 ->setParameter('multi'$searchData['multi'])
  51.                 ->setParameter('multi_customer_id'$multiCustomerId)
  52.                 ->setParameter('likemulti''%' preg_replace("/( | )/"""$searchData['multi'] ) . '%');
  53.         }
  54.         // 定期購買の状態
  55.         if (isset($searchData['status']) && StringUtil::isNotBlank($searchData['status'])) {
  56.             $qb
  57.             ->andWhere('rms_acm.status = :status')
  58.             ->setParameter('status'$searchData['status']);
  59.         }
  60.         // メンバーID(ルミーズ発番のID)
  61.         if (isset($searchData['member_id']) && StringUtil::isNotBlank($searchData['member_id'])) {
  62.             $qb
  63.             ->andWhere('rms_acm.id = :member_id')
  64.             ->setParameter('member_id'$searchData['member_id']);
  65.         }
  66.         // 注文番号
  67.         if (isset($searchData['order_no']) && StringUtil::isNotBlank($searchData['order_no'])) {
  68.             $qb
  69.             ->andWhere('ec_o.order_no = :order_no')
  70.             ->setParameter('order_no'$searchData['order_no']);
  71.         }
  72.         // 会員番号
  73.         if (isset($searchData['customer_id']) && StringUtil::isNotBlank($searchData['customer_id'])) {
  74.             $customerId preg_match('/^\d{0,10}$/'$searchData['customer_id']) ? $searchData['customer_id'] : null;
  75.             $qb
  76.             ->andWhere('ec_o.Customer = :customer_id')
  77.             ->setParameter('customer_id'$customerId);
  78.         }
  79.         // お名前
  80.         if (isset($searchData['customer_name']) && StringUtil::isNotBlank($searchData['customer_name'])) {
  81.             $qb
  82.             ->andWhere('CONCAT(ec_o.name01, ec_o.name02) LIKE :customer_name')
  83.             ->setParameter('customer_name''%' preg_replace("/( | )/"""$searchData['customer_name'] ) . '%');
  84.         }
  85.         // お名前(フリガナ)
  86.         if (isset($searchData['customer_kana']) && StringUtil::isNotBlank($searchData['customer_kana'])) {
  87.             $qb
  88.             ->andWhere('CONCAT(ec_o.kana01, ec_o.kana02) LIKE :customer_kana')
  89.             ->setParameter('customer_kana''%' preg_replace("/( | )/"""$searchData['customer_kana'] ) . '%');
  90.         }
  91.         // メールアドレス
  92.         if (isset($searchData['customer_mail']) && StringUtil::isNotBlank($searchData['customer_mail'])) {
  93.             $qb
  94.             ->andWhere('ec_o.email = :customer_mail')
  95.             ->setParameter('customer_mail'$searchData['customer_mail']);
  96.         }
  97.         // 電話番号
  98.         if (isset($searchData['customer_tel']) && StringUtil::isNotBlank($searchData['customer_tel'])) {
  99.             $qb
  100.             ->andWhere('ec_o.phone_number LIKE :customer_tel')
  101.             ->setParameter('customer_tel'$searchData['customer_tel']);
  102.         }
  103.         // 購入商品名
  104.         if (isset($searchData['product_name']) && StringUtil::isNotBlank($searchData['product_name'])) {
  105.         $qb->leftJoin('\Eccube\Entity\OrderItem''ec_oi''WITH''ec_oi.Order = ec_o.id')
  106.             ->andWhere('ec_oi.OrderItemType = :order_item_type_id')
  107.             ->andWhere('ec_oi.product_name LIKE :product_name')
  108.             ->setParameter('order_item_type_id'OrderItemType::PRODUCT)
  109.             ->setParameter('product_name''%' $searchData['product_name'] . '%');
  110.         }
  111.         // 定期購買金額
  112.         if (isset($searchData['total_start']) && StringUtil::isNotBlank($searchData['total_start'])) {
  113.             $qb
  114.             ->andWhere('rms_acm.total >= :total_start')
  115.             ->setParameter('total_start'$searchData['total_start']);
  116.         }
  117.         if (isset($searchData['total_end']) && StringUtil::isNotBlank($searchData['total_end'])) {
  118.             $qb
  119.             ->andWhere('rms_acm.total <= :total_end')
  120.             ->setParameter('total_end'$searchData['total_end']);
  121.         }
  122.         // 受注日
  123.         if (!empty($searchData['order_date_start']) && $searchData['order_date_start']) {
  124.             $date $searchData['order_date_start']
  125.             ->format('Y-m-d H:i:s');
  126.             $qb
  127.             ->andWhere('ec_o.order_date >= :order_date_start')
  128.             ->setParameter('order_date_start'$date);
  129.         }
  130.         if (!empty($searchData['order_date_end']) && $searchData['order_date_end']) {
  131.             $date = clone $searchData['order_date_end'];
  132.             $date $date
  133.             ->modify('+1 days')
  134.             ->format('Y-m-d H:i:s');
  135.             $qb
  136.             ->andWhere('ec_o.order_date < :order_date_end')
  137.             ->setParameter('order_date_end'$date);
  138.         }
  139.         // 次回課金日
  140.         if (!empty($searchData['next_date_start']) && $searchData['next_date_start']) {
  141.             $date $searchData['next_date_start']
  142.             ->format('Y-m-d H:i:s');
  143.             $qb
  144.             ->andWhere('rms_acm.next_date >= :next_date_start')
  145.             ->setParameter('next_date_start'$date);
  146.         }
  147.         if (!empty($searchData['next_date_end']) && $searchData['next_date_end']) {
  148.             $date = clone $searchData['next_date_end'];
  149.             $date $date
  150.             ->modify('+1 days')
  151.             ->format('Y-m-d H:i:s');
  152.             $qb
  153.             ->andWhere('rms_acm.next_date < :next_date_end')
  154.             ->setParameter('next_date_end'$date);
  155.         }
  156.         return $this->queries->customize('RemiseACMember.getQueryBuilderBySearchData'$qb$searchData);
  157.     }
  158.     /**
  159.      * @param $customerIds
  160.      *
  161.      * @return RemiseACMember|null|object
  162.      */
  163.     public function getCustomersByCustomerIds($customerIds)
  164.     {
  165.         $qb $this->createQueryBuilder('rms_acm');
  166.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResultCard''rms_orc''WITH''rms_orc.member_id = rms_acm.id');
  167.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResult''rms_or''WITH''rms_or.id = rms_orc.id');
  168.         $qb->innerJoin('\Eccube\Entity\Order''ec_o''WITH''ec_o.id = rms_orc.id');
  169.         $qb->innerJoin('\Eccube\Entity\Customer''ec_cus''WITH''ec_cus.id = ec_o.Customer');
  170.         $qb->select('ec_cus');
  171.         $qb->groupBy('ec_cus.id');
  172.         // 顧客を指定
  173.         $qb
  174.         ->where("ec_o.Customer IN (:customerIds)")
  175.         ->setParameter('customerIds'$customerIds);
  176.         // 定期購買継続中を絞り込む
  177.         $qb
  178.         ->andWhere('rms_acm.status = :status')
  179.         ->setParameter('status'1);
  180.         $res $qb->getQuery()->getResult();
  181.         return $res;
  182.     }
  183.     /**
  184.      * @param $customerIds
  185.      *
  186.      * @return RemiseACMember|null|object
  187.      */
  188.     public function getRemiseACMembersByCustomerId($customerId)
  189.     {
  190.         $qb $this->createQueryBuilder('rms_acm');
  191.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResultCard''rms_orc''WITH''rms_orc.member_id = rms_acm.id');
  192.         $qb->innerJoin('\Plugin\RemisePayment42\Entity\OrderResult''rms_or''WITH''rms_or.id = rms_orc.id');
  193.         $qb->innerJoin('\Eccube\Entity\Order''ec_o''WITH''ec_o.id = rms_orc.id');
  194.         $qb->select('rms_acm');
  195.         $qb->orderBy('rms_acm.update_date''DESC');
  196.         // 顧客を指定
  197.         $qb
  198.         ->where("ec_o.Customer = :customerId")
  199.         ->setParameter('customerId'$customerId);
  200.         // 定期購買継続中を絞り込む
  201.         $qb
  202.         ->andWhere('rms_acm.status = :status')
  203.         ->setParameter('status'1);
  204.         $res $qb->getQuery()->getResult();
  205.         return $res;
  206.     }
  207. }