app/Plugin/CodeacLinepay/Controller/Admin/PaymentStatusController.php line 81

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * https://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Plugin\CodeacLinepay\Controller\Admin;
  13. use Eccube\Common\Constant;
  14. use Eccube\Controller\AbstractController;
  15. use Eccube\Entity\Order;
  16. use Eccube\Repository\Master\PageMaxRepository;
  17. use Eccube\Repository\OrderRepository;
  18. use Eccube\Util\FormUtil;
  19. use Knp\Component\Pager\PaginatorInterface;
  20. use Plugin\CodeacLinepay\Form\Type\Admin\SearchPaymentType;
  21. use Plugin\CodeacLinepay\Repository\PaymentStatusRepository;
  22. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  24. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  25. use Symfony\Component\HttpFoundation\Request;
  26. /**
  27.  * 決済状況管理
  28.  */
  29. class PaymentStatusController extends AbstractController
  30. {
  31.     /**
  32.      * @var PaymentStatusRepository
  33.      */
  34.     protected $paymentStatusRepository;
  35.     /**
  36.      * @var PageMaxRepository
  37.      */
  38.     protected $pageMaxRepository;
  39.     /**
  40.      * @var OrderRepository
  41.      */
  42.     protected $orderRepository;
  43.     /**
  44.      * @var array
  45.      */
  46.     protected $bulkActions = [
  47.         ['id' => 1'name' => '一括売上'],
  48.         ['id' => 2'name' => '一括取消'],
  49.         ['id' => 3'name' => '一括再オーソリ'],
  50.     ];
  51.     /**
  52.      * PaymentController constructor.
  53.      *
  54.      * @param OrderStatusRepository $orderStatusRepository
  55.      */
  56.     public function __construct(
  57.         PaymentStatusRepository $paymentStatusRepository,
  58.         PageMaxRepository $pageMaxRepository,
  59.         OrderRepository $orderRepository
  60.     ) {
  61.         $this->paymentStatusRepository $paymentStatusRepository;
  62.         $this->pageMaxRepository $pageMaxRepository;
  63.         $this->orderRepository $orderRepository;
  64.     }
  65.     /**
  66.      * 決済状況一覧画面
  67.      *
  68.      * @Route("/%eccube_admin_route%/codeac_linepay/payment_status", name="codeac_linepay_admin_payment_status")
  69.      * @Route("/%eccube_admin_route%/codeac_linepay/payment_status/{page_no}", requirements={"page_no" = "\d+"}, name="codeac_linepay_admin_payment_status_pageno")
  70.      * @Template("@CodeacLinepay/admin/payment_status.twig")
  71.      */
  72.     public function index(Request $request$page_no nullPaginatorInterface $paginator)
  73.     {
  74.         $searchForm $this->createForm(SearchPaymentType::class);
  75.         /**
  76.          * ページの表示件数は, 以下の順に優先される.
  77.          * - リクエストパラメータ
  78.          * - セッション
  79.          * - デフォルト値
  80.          * また, セッションに保存する際は mtb_page_maxと照合し, 一致した場合のみ保存する.
  81.          **/
  82.         $page_count $this->session->get('codeac_linepay.admin.payment_status.search.page_count',
  83.             $this->eccubeConfig->get('eccube_default_page_count'));
  84.         $page_count_param = (int) $request->get('page_count');
  85.         $pageMaxis $this->pageMaxRepository->findAll();
  86.         if ($page_count_param) {
  87.             foreach ($pageMaxis as $pageMax) {
  88.                 if ($page_count_param == $pageMax->getName()) {
  89.                     $page_count $pageMax->getName();
  90.                     $this->session->set('codeac_linepay.admin.payment_status.search.page_count'$page_count);
  91.                     break;
  92.                 }
  93.             }
  94.         }
  95.         if ('POST' === $request->getMethod()) {
  96.             $searchForm->handleRequest($request);
  97.             if ($searchForm->isValid()) {
  98.                 /**
  99.                  * 検索が実行された場合は, セッションに検索条件を保存する.
  100.                  * ページ番号は最初のページ番号に初期化する.
  101.                  */
  102.                 $page_no 1;
  103.                 $searchData $searchForm->getData();
  104.                 // 検索条件, ページ番号をセッションに保持.
  105.                 $this->session->set('codeac_linepay.admin.payment_status.search'FormUtil::getViewData($searchForm));
  106.                 $this->session->set('codeac_linepay.admin.payment_status.search.page_no'$page_no);
  107.             } else {
  108.                 // 検索エラーの際は, 詳細検索枠を開いてエラー表示する.
  109.                 return [
  110.                     'searchForm' => $searchForm->createView(),
  111.                     'pagination' => [],
  112.                     'pageMaxis' => $pageMaxis,
  113.                     'page_no' => $page_no,
  114.                     'page_count' => $page_count,
  115.                     'has_errors' => true,
  116.                 ];
  117.             }
  118.         } else {
  119.             if (null !== $page_no || $request->get('resume')) {
  120.                 /*
  121.                  * ページ送りの場合または、他画面から戻ってきた場合は, セッションから検索条件を復旧する.
  122.                  */
  123.                 if ($page_no) {
  124.                     // ページ送りで遷移した場合.
  125.                     $this->session->set('codeac_linepay.admin.payment_status.search.page_no', (int) $page_no);
  126.                 } else {
  127.                     // 他画面から遷移した場合.
  128.                     $page_no $this->session->get('codeac_linepay.admin.payment_status.search.page_no'1);
  129.                 }
  130.                 $viewData $this->session->get('codeac_linepay.admin.payment_status.search', []);
  131.                 $searchData FormUtil::submitAndGetData($searchForm$viewData);
  132.             } else {
  133.                 /**
  134.                  * 初期表示の場合.
  135.                  */
  136.                 $page_no 1;
  137.                 $searchData = [];
  138.                 // セッション中の検索条件, ページ番号を初期化.
  139.                 $this->session->set('codeac_linepay.admin.payment_status.search'$searchData);
  140.                 $this->session->set('codeac_linepay.admin.payment_status.search.page_no'$page_no);
  141.             }
  142.         }
  143.         $qb $this->createQueryBuilder($searchData);
  144.         $pagination $paginator->paginate(
  145.             $qb,
  146.             $page_no,
  147.             $page_count
  148.         );
  149.         return [
  150.             'searchForm' => $searchForm->createView(),
  151.             'pagination' => $pagination,
  152.             'pageMaxis' => $pageMaxis,
  153.             'page_no' => $page_no,
  154.             'page_count' => $page_count,
  155.             'has_errors' => false,
  156.             'bulkActions' => $this->bulkActions,
  157.         ];
  158.     }
  159.     /**
  160.      * 一括処理.
  161.      *
  162.      * @Method("POST")
  163.      * @Route("/%eccube_admin_route%/codeac_linepay/payment_status/bulk_action/{id}", requirements={"id" = "\d+"}, name="codeac_linepay_admin_payment_status_bulk_action")
  164.      */
  165.     public function bulkAction(Request $request$id)
  166.     {
  167.         if (!isset($this->bulkActions[$id])) {
  168.             throw new BadRequestHttpException();
  169.         }
  170.         $this->isTokenValid();
  171.         /** @var Order[] $Orders */
  172.         $Orders $this->orderRepository->findBy(['id' => $request->get('ids')]);
  173.         $count 0;
  174.         foreach ($Orders as $Order) {
  175.             switch ($id) {
  176.                 // 一括売上
  177.                 case 1:
  178.                     // 通信処理
  179.                     // Order等の更新処理
  180.                     break;
  181.                 // 一括取消
  182.                 case 2:
  183.                     // 通信処理
  184.                     // Order等の更新処理
  185.                     break;
  186.                 // 一括再オーソリ
  187.                 case 3:
  188.                     // 通信処理
  189.                     // Order等の更新処理
  190.                     break;
  191.             }
  192.             $this->entityManager->flush($Order);
  193.             $count++;
  194.         }
  195.         $this->addSuccess(trans('codeac_linepay.admin.payment_status.bulk_action.success', ['%count%' => $count]),
  196.             'admin');
  197.         return $this->redirectToRoute('codeac_linepay_admin_payment_status_pageno', ['resume' => Constant::ENABLED]);
  198.     }
  199.     private function createQueryBuilder(array $searchData)
  200.     {
  201.         $qb $this->entityManager->createQueryBuilder();
  202.         $qb->select('o')
  203.             ->from(Order::class, 'o')
  204.             ->orderBy('o.order_date''DESC')
  205.             ->addOrderBy('o.id''DESC');
  206.         if (!empty($searchData['Payments']) && count($searchData['Payments']) > 0) {
  207.             $qb->andWhere($qb->expr()->in('o.Payment'':Payments'))
  208.                 ->setParameter('Payments'$searchData['Payments']);
  209.         }
  210.         if (!empty($searchData['OrderStatuses']) && count($searchData['OrderStatuses']) > 0) {
  211.             $qb->andWhere($qb->expr()->in('o.OrderStatus'':OrderStatuses'))
  212.                 ->setParameter('OrderStatuses'$searchData['OrderStatuses']);
  213.         }
  214.         if (!empty($searchData['PaymentStatuses']) && count($searchData['PaymentStatuses']) > 0) {
  215.             $qb->andWhere($qb->expr()->in('o.CodeacLinepayPaymentStatus'':PaymentStatuses'))
  216.                 ->setParameter('PaymentStatuses'$searchData['PaymentStatuses']);
  217.         }
  218.         return $qb;
  219.     }
  220. }