app/Customize/Repository/Admin/SearchOrderCustomizer.php line 62

Open in your IDE?
  1. <?php
  2. namespace Customize\Repository\Admin;
  3. use Customize\Entity\ProductSchool;
  4. use Customize\Repository\ProductSchoolRepository;
  5. use Doctrine\ORM\QueryBuilder;
  6. use Eccube\Doctrine\Query\QueryCustomizer;
  7. use Customize\Repository\ProductStoreRepository;
  8. use Eccube\Common\EccubeConfig;
  9. use Eccube\Repository\CustomerRepository;
  10. use Eccube\Repository\QueryKey;
  11. use Eccube\Request\Context;
  12. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  13. class SearchOrderCustomizer implements QueryCustomizer
  14. {
  15.     /**
  16.      * @var Context
  17.      */
  18.     private $context;
  19.     private $productStoreRepository;
  20.     private $productSchoolRepository;
  21.     private $session;
  22.     private $config;
  23.     private $customerRepository;
  24.     /**
  25.      * SearchOrderCustomizer constructor.
  26.      *
  27.      * @param Context $context
  28.      */
  29.     public function __construct(Context $context,
  30.         ProductStoreRepository $productStoreRepository,
  31.         ProductSchoolRepository $productSchoolRepository,
  32.         CustomerRepository $customerRepository,
  33.         SessionInterface $session,
  34.         EccubeConfig $config)
  35.     {
  36.         $this->context $context;
  37.         $this->productStoreRepository $productStoreRepository;
  38.         $this->productSchoolRepository $productSchoolRepository;
  39.         $this->customerRepository $customerRepository;
  40.         $this->session $session;
  41.         $this->config $config;
  42.     }
  43.     /**
  44.      * {@inheritdoc}
  45.      */
  46.     public function customize(QueryBuilder $builder$params$queryKey)
  47.     {
  48.         $pl_store false;
  49.         // store
  50.         //0:システム管理者 && 1:企業責任者
  51.         if (isset($params['store']) && $obj_store $params['store']) {
  52.             $pl_store true;
  53.             $store_id $obj_store->getStoreId();
  54.         }
  55.         //2:店舗責任者 || 3:閲覧者
  56.         else {
  57.             $user unserialize($this->session->get('_security_admin'))->getUser();
  58.             $user_authority $user->getAuthority();
  59.             $ls_new_member = [$this->config['member_viewer_id'], $this->config['member_store_manager_id']];
  60.             if(in_array($user->getId(), $ls_new_member)) {
  61.                 $pl_store true;
  62.                 $store_id 0;
  63.                 $user_store $user->getStore();
  64.                 if($user_store) {
  65.                     $store_id $user_store->getStoreId();
  66.                 }
  67.             }
  68.         }
  69.         $arr_store_product_id = [];
  70.         //store
  71.         if(isset($store_id)) {
  72.             $arr_product_store $this->productStoreRepository
  73.                 ->createQueryBuilder('ps')
  74.                 ->innerJoin('ps.Product''psp')
  75.                 ->innerJoin('ps.Store''pss')
  76.                 ->select('psp.id')
  77.                 ->where('pss.store_id = :store_id')
  78.                 ->setParameter('store_id'$store_id)
  79.                 ->getQuery()
  80.                 ->getResult();
  81.             if($arr_product_store) {
  82.                 foreach ($arr_product_store as $item_product_store) {
  83.                     if(!in_array($item_product_store$arr_store_product_id)) {
  84.                         $arr_store_product_id[] = $item_product_store['id'];
  85.                     }
  86.                 }
  87.             }
  88.         }
  89.         if ($pl_store){
  90.             if($arr_store_product_id) {
  91.                 $builder->andWhere($builder->expr()->in('oi.Product'':product_id'))
  92.                     ->setParameter('product_id'$arr_store_product_id);
  93.             } else {
  94.                 //条件があっていない場合は
  95.                 $builder->andWhere('o.id = 0');
  96.             }
  97.         }
  98.         // school
  99.         if (!empty($params['school']) && ($obj_school $params['school'])) {
  100.             $school_id $obj_school->getSchoolId();
  101.             $arr_product_school $this->customerRepository
  102.                 ->createQueryBuilder('c')
  103.                 ->innerJoin('c.School''cs')
  104.                 ->select('c.id')
  105.                 ->where('cs.school_id = :school_id')
  106.                 ->setParameter('school_id'$school_id)
  107.                 ->getQuery()
  108.                 ->getResult();
  109.             if($arr_product_school) {
  110.                 $arr_customer_id =[];
  111.                 foreach ($arr_product_school as $arr_product_school_item) {
  112.                     if(!in_array($arr_product_school_item['id'], $arr_customer_id)) {
  113.                         $arr_customer_id[] = $arr_product_school_item['id'];
  114.                     }
  115.                 }
  116.                 $builder->innerJoin('o.Customer''oc')->andWhere($builder->expr()->in('oc.id'':customer_id'))
  117.                     ->setParameter('customer_id'$arr_customer_id);
  118.             } else {
  119.                 //学校がない場合は
  120.                 $builder->andWhere('o.id = 0');
  121.             }
  122.         }
  123.         if (!empty($params['school_code'])) {
  124.             $builder
  125.                 ->leftJoin('o.Customer''oc')
  126.                 ->leftJoin('oc.School''ocs')
  127.                 ->andWhere('ocs.school_code = :school_code')
  128.                 ->setParameter('school_code'$params['school_code']);
  129.         }
  130.         if (isset($params['prev_school']) && $params['prev_school'] != '') {
  131.             $builder->andWhere('o.prev_school LIKE :prev_school')
  132.                 ->setParameter('prev_school''%' $params['prev_school'] . '%');
  133.         }
  134.         if (!empty($params['stocking_date_start']) && $params['stocking_date_start']) {
  135.             $date $params['stocking_date_start'];
  136.             $builder
  137.                 ->andWhere('o.stocking_date >= :stocking_date_start')
  138.                 ->setParameter('stocking_date_start'$date);
  139.         }
  140.         if (!empty($params['stocking_date_end']) && $params['stocking_date_end']) {
  141.             $date $params['stocking_date_end'];
  142.             $date $date->setTime(23,59,59);
  143.             $builder
  144.                 ->andWhere('o.stocking_date <= :stocking_date_end')
  145.                 ->setParameter('stocking_date_end'$date);
  146.         }
  147.         //仮注文日
  148.         if (!empty($params['temp_order_date_start']) && $params['temp_order_date_start']) {
  149.             $params['status'] = [$this->config['order_temporary']];
  150.             $date $params['temp_order_date_start'];
  151.             //$builder->andWhere('o.temporary_order_date >= :order_date_start')
  152.             //    ->setParameter('order_date_start', $date);
  153.             $builder->andWhere('o.create_date >= :order_date_start')
  154.                     ->setParameter('order_date_start'$date);
  155.         }
  156.         if (!empty($params['temp_order_date_end']) && $params['temp_order_date_end']) {
  157.             $date $params['temp_order_date_end'];
  158.             $date $date->setTime(23,59,59);
  159.             //$builder->andWhere('o.temporary_order_date < :order_date_end')
  160.             //    ->setParameter('order_date_end', $date);
  161.             $builder->andWhere('o.create_date <= :order_date_end')
  162.                     ->setParameter('order_date_end'$date);
  163.         }
  164.         //本注文日
  165.         if (!empty($params['formal_order_date_start']) && $params['formal_order_date_start']) {
  166.             $date $params['formal_order_date_start'];
  167.             $builder->andWhere('o.order_date >= :order_date_start')
  168.                 ->setParameter('order_date_start'$date);
  169.         }
  170.         if (!empty($params['formal_order_date_end']) && $params['formal_order_date_end']) {
  171.             $date $params['formal_order_date_end'];
  172.             $date $date->setTime(23,59,59);
  173.             $builder->andWhere('o.order_date <= :order_date_end')
  174.                 ->setParameter('order_date_end'$date);
  175.         }
  176.         if (!empty($params['ids']) && count($params['ids'])) {
  177.             $builder->andWhere("s.id IN(:shipping_ids)")
  178.                 ->setParameter('shipping_ids'array_values($params['ids']));
  179.         }
  180.         // 配送方法
  181.         if (!empty($params['delivery']) && count($params['delivery'])) {
  182.             $deliveries = [];
  183.             foreach ($params['delivery'] as $delivery) {
  184.                 $deliveries[] = $delivery->getId();
  185.             }
  186.             $builder
  187.                 ->leftJoin('s.Delivery''d')
  188.                 ->andWhere($builder->expr()->in('d.id'':deliveries'))
  189.                 ->setParameter('deliveries'$deliveries);
  190.         }
  191.     }
  192.     /**
  193.      * {@inheritdoc}
  194.      */
  195.     public function getQueryKey()
  196.     {
  197.         return QueryKey::ORDER_SEARCH_ADMIN;
  198.     }
  199. }