app/Customize/Controller/MyPageController.php line 184

Open in your IDE?
  1. <?php
  2. namespace Customize\Controller;
  3. use Customize\Repository\CampaignRepository;
  4. use Customize\Repository\CouponRepository;
  5. use Eccube\Entity\Product;
  6. use Eccube\Repository\OrderRepository;
  7. use Eccube\Service\OrderHelper;
  8. use Knp\Component\Pager\PaginatorInterface;
  9. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  10. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  13. use Symfony\Component\HttpFoundation\Request;
  14. use Eccube\Event\EccubeEvents;
  15. use Eccube\Event\EventArgs;
  16. use Eccube\Repository\CustomerFavoriteProductRepository;
  17. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  18. use Eccube\Form\Type\Front\EntryType;
  19. use Eccube\Repository\BaseInfoRepository;
  20. use Eccube\Service\MailService;
  21. use Eccube\Entity\CustomerAddress;
  22. use Eccube\Entity\Master\CustomerStatus;
  23. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  24. use Eccube\Form\Type\Front\CustomerAddressType;
  25. use Eccube\Repository\CustomerAddressRepository;
  26. use Eccube\Repository\PageRepository;
  27. use Eccube\Service\CartService;
  28. use Eccube\Repository\Master\CustomerStatusRepository;
  29. use Eccube\Util\StringUtil;
  30. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  31. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  32. use Customize\Repository\CustomPluginCouponRepository;
  33. use DateTime;
  34. use Eccube\Form\Type\Admin\OrderPdfType;
  35. use Eccube\Service\OrderPdfService;
  36. use Plugin\CouponPro42\Repository\CouponRepository as RepositoryCouponRepository;
  37. use Plugin\ReportPdf2Ft\Service\ReportPdf2FtService;
  38. use Symfony\Component\HttpFoundation\JsonResponse;
  39. use Eccube\Entity\Customer;
  40. use Customize\Repository\WorkingTimeRepository;
  41. class MyPageController extends BaseController
  42. {
  43.   protected $orderHelper;
  44.   protected $couponRepository;
  45.   /**
  46.    * @var OrderRepository
  47.    */
  48.   protected $orderRepository;
  49.   protected $customerFavoriteProductRepository;
  50.   /**
  51.    * @var CustomerRepository
  52.    */
  53.   protected $customerRepository;
  54.   /**
  55.    * @var EncoderFactoryInterface
  56.    */
  57.   protected $encoderFactory;
  58.   /**
  59.    * @var baseInfoRepository
  60.    */
  61.   /**
  62.    * @var MailService
  63.    */
  64.   protected $mailService;
  65.   protected $baseInfoRepository;
  66.   private const SESSION_KEY_PRE_EMAIL 'eccube.front.mypage.change.preEmail';
  67.   /**
  68.    * @var BaseInfo
  69.    */
  70.   protected $BaseInfo;
  71.   /**
  72.    * @var CustomerAddressRepository
  73.    */
  74.   protected $customerAddressRepository;
  75.   /**
  76.    * @var PageRepository
  77.    */
  78.   private $pageRepository;
  79.   /**
  80.    * @var CustomerStatusRepository
  81.    */
  82.   protected $customerStatusRepository;
  83.   /**
  84.    * @var CartService
  85.    */
  86.   private $cartService;
  87.   /**
  88.    * @var TokenStorage
  89.    */
  90.   protected $tokenStorage;
  91.   protected $customPluginCouponRepository;
  92.   protected $couponOrderProRepository;
  93.   protected $workingTimeRepository;
  94.   public function __construct(
  95.     OrderRepository $orderRepository,
  96.     OrderHelper $orderHelper,
  97.     CouponRepository $couponRepository,
  98.     CustomerFavoriteProductRepository $customerFavoriteProductRepository,
  99.     CustomerAddressRepository $customerAddressRepository,
  100.     BaseInfoRepository $baseInfoRepository,
  101.     MailService $mailService,
  102.     PageRepository $pageRepository,
  103.     CustomerStatusRepository $customerStatusRepository,
  104.     CartService $cartService,
  105.     CustomPluginCouponRepository $customPluginCouponRepository,
  106.     TokenStorageInterface $tokenStorage,
  107.     RepositoryCouponRepository $couponOrderProRepository,
  108.     WorkingTimeRepository $workingTimeRepository
  109.   ) {
  110.     $this->BaseInfo $baseInfoRepository->get();
  111.     $this->orderHelper $orderHelper;
  112.     $this->couponRepository $couponRepository;
  113.     $this->orderRepository $orderRepository;
  114.     $this->customerFavoriteProductRepository $customerFavoriteProductRepository;
  115.     $this->customerAddressRepository $customerAddressRepository;
  116.     $this->baseInfoRepository $baseInfoRepository;
  117.     $this->mailService $mailService;
  118.     $this->pageRepository $pageRepository;
  119.     $this->customerStatusRepository $customerStatusRepository;
  120.     $this->cartService $cartService;
  121.     $this->tokenStorage $tokenStorage;
  122.     $this->customPluginCouponRepository $customPluginCouponRepository;
  123.     $this->couponOrderProRepository $couponOrderProRepository;
  124.     $this->workingTimeRepository $workingTimeRepository;
  125.   }
  126.   /**
  127.    * @Method("GET")
  128.    * @Route("/mypage_wishlist", name="mypage_wishlist")
  129.    * @Template("@user_data/mypage/mypage_wishlist.twig")
  130.    */
  131.   public function mypage_wishlist(Request $requestPaginatorInterface $paginator)
  132.   {
  133.     if ($this->orderHelper->isLoginRequired()) {
  134.       $this->setLoginTargetPath($this->generateUrl('mypage_wishlist', [], UrlGeneratorInterface::ABSOLUTE_URL));
  135.       return $this->redirect('/mypage-login');
  136.     }
  137.     $Customer $this->getUser();
  138.     $couponPro $this->couponOrderProRepository->fetchCouponsForMypage($Customer);
  139.     // paginator
  140.     $qb $this->customerFavoriteProductRepository->getQueryBuilderByCustomer($Customer);
  141.     $event = new EventArgs(
  142.       [
  143.         'qb' => $qb,
  144.         'Customer' => $Customer,
  145.       ],
  146.       $request
  147.     );
  148.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_MYPAGE_FAVORITE_SEARCH);
  149.     $pagination $paginator->paginate(
  150.       $qb,
  151.       $request->get('page_no'1),
  152.       $this->eccubeConfig['eccube_search_pmax'],
  153.       ['wrap-queries' => true]
  154.     );
  155.     return [
  156.       'couponPro' => $couponPro,
  157.       'pagination' => $pagination,
  158.       'data' => $qb->getQuery()->getResult()
  159.     ];
  160.   }
  161.   /**
  162.    * @Method("GET")
  163.    * @Route("/mypage_index", name="mypage_index")
  164.    * @Template("@user_data/mypage/mypage_index.twig")
  165.    */
  166.   public function mypage_index(Request $requestPaginatorInterface $paginator)
  167.   {
  168.     if ($this->orderHelper->isLoginRequired()) {
  169.       $this->setLoginTargetPath($this->generateUrl('mypage_index', [], UrlGeneratorInterface::ABSOLUTE_URL));
  170.       return $this->redirect('/mypage-login');
  171.     }
  172.     $Customer $this->getUser();
  173.     $couponPro $this->couponOrderProRepository->fetchCouponsForMypage($Customer);
  174.     // 購入処理中/決済処理中ステータスの受注を非表示にする.
  175.     $this->entityManager
  176.       ->getFilters()
  177.       ->enable('incomplete_order_status_hidden');
  178.     $qb $this->orderRepository->getQueryBuilderByCustomer($Customer);
  179.     $pagination $paginator->paginate(
  180.       $qb,
  181.       $request->get('pageno'1),
  182.       100
  183.     );
  184.     $workingTime $this->workingTimeRepository->getTopWorkingTime();
  185.     return [
  186.       'couponPro' => $couponPro,
  187.       'pagination' => $pagination,
  188.       'working_time' => $workingTime,
  189.     ];
  190.   }
  191.   /**
  192.    * @Route("/mypage_address", name="mypage_address", methods={"GET"})
  193.    * @Template("@user_data/mypage/mypage_address.twig")
  194.    */
  195.   public function mypage_address()
  196.   {
  197.     if ($this->orderHelper->isLoginRequired()) {
  198.       $this->setLoginTargetPath($this->generateUrl('mypage_address', [], UrlGeneratorInterface::ABSOLUTE_URL));
  199.       return $this->redirect('/mypage-login');
  200.     }
  201.     $Customer $this->getUser();
  202.     $couponPro $this->couponOrderProRepository->fetchCouponsForMypage($Customer);
  203.     return [
  204.       'couponPro' => $couponPro,
  205.       'Customer' => $Customer
  206.     ];
  207.   }
  208.   /**
  209.    * お届け先編集画面.
  210.    *
  211.    * @Route("/mypage_address/new", name="mypage_address_new", methods={"GET", "POST"})
  212.    * @Route("/mypage_address/{id}/edit", name="mypage_address_edit", requirements={"id" = "\d+"}, methods={"GET", "POST"})
  213.    * @Template("@user_data/mypage/mypage_address_edit.twig")
  214.    */
  215.   public function mypage_address_edit(Request $request$id null)
  216.   {
  217.     if ($this->orderHelper->isLoginRequired()) {
  218.       $this->setLoginTargetPath($this->generateUrl('mypage_address_new', [], UrlGeneratorInterface::ABSOLUTE_URL));
  219.       return $this->redirect('/mypage-login');
  220.     }
  221.     $Customer $this->getUser();
  222.     // 配送先住所最大値判定
  223.     // $idが存在する際は、追加処理ではなく、編集の処理ため本ロジックスキップ
  224.     if (is_null($id)) {
  225.       $addressCurrNum count($Customer->getCustomerAddresses());
  226.       $addressMax $this->eccubeConfig['eccube_deliv_addr_max'];
  227.       if ($addressCurrNum >= $addressMax) {
  228.         throw new NotFoundHttpException();
  229.       }
  230.       $CustomerAddress = new CustomerAddress();
  231.       $CustomerAddress->setCustomer($Customer);
  232.     } else {
  233.       $CustomerAddress $this->customerAddressRepository->findOneBy(
  234.         [
  235.           'id' => $id,
  236.           'Customer' => $Customer,
  237.         ]
  238.       );
  239.       if (!$CustomerAddress) {
  240.         throw new NotFoundHttpException();
  241.       }
  242.     }
  243.     $parentPage $request->get('parent_page'null);
  244.     // 正しい遷移かをチェック
  245.     $allowedParents = [
  246.       $this->generateUrl('mypage_address'),
  247.       $this->generateUrl('shopping_redirect_to'),
  248.     ];
  249.     // 遷移が正しくない場合、デフォルトであるマイページの配送先追加の画面を設定する
  250.     if (!in_array($parentPage$allowedParents)) {
  251.       // @deprecated 使用されていないコード
  252.       $parentPage $this->generateUrl('mypage_address');
  253.     }
  254.     $builder $this->formFactory
  255.       ->createBuilder(CustomerAddressType::class, $CustomerAddress);
  256.     $event = new EventArgs(
  257.       [
  258.         'builder' => $builder,
  259.         'Customer' => $Customer,
  260.         'CustomerAddress' => $CustomerAddress,
  261.       ],
  262.       $request
  263.     );
  264.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_DELIVERY_EDIT_INITIALIZE);
  265.     $form $builder->getForm();
  266.     $form->handleRequest($request);
  267.     if ($form->isSubmitted() && $form->isValid()) {
  268.       log_info('お届け先登録開始', [$id]);
  269.       $this->entityManager->persist($CustomerAddress);
  270.       $this->entityManager->flush();
  271.       // 会員情報変更時にメールを送信
  272.       if ($this->BaseInfo->isOptionMailNotifier()) {
  273.         // 情報のセット
  274.         $userData['userAgent'] = $request->headers->get('User-Agent');
  275.         $userData['ipAddress'] = $request->getClientIp();
  276.         $this->mailService->sendCustomerChangeNotifyMail($Customer$userDatatrans('front.mypage.delivery.notify_title'));
  277.       }
  278.       log_info('お届け先登録完了', [$id]);
  279.       $event = new EventArgs(
  280.         [
  281.           'form' => $form,
  282.           'Customer' => $Customer,
  283.           'CustomerAddress' => $CustomerAddress,
  284.         ],
  285.         $request
  286.       );
  287.       $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_DELIVERY_EDIT_COMPLETE);
  288.       if ($request->query->has('order')) {
  289.         return $this->redirect($this->generateUrl('cart_input'));
  290.       }
  291.       return $this->redirect($this->generateUrl('mypage_address'));
  292.     }
  293.     return [
  294.       'form' => $form->createView(),
  295.       'parentPage' => $parentPage,
  296.       'BaseInfo' => $this->BaseInfo,
  297.     ];
  298.   }
  299.   /**
  300.    * お届け先を削除する.
  301.    *
  302.    * @Route("/mypage_address/{id}/delete", name="mypage_address_delete", methods={"DELETE"})
  303.    */
  304.   public function mypage_address_delete(Request $requestCustomerAddress $CustomerAddress)
  305.   {
  306.     if ($this->orderHelper->isLoginRequired()) {
  307.       return $this->redirect('/mypage-login');
  308.     }
  309.     $this->isTokenValid();
  310.     log_info('お届け先削除開始', [$CustomerAddress->getId()]);
  311.     $Customer $this->getUser();
  312.     if ($Customer->getId() != $CustomerAddress->getCustomer()->getId()) {
  313.       throw new BadRequestHttpException();
  314.     }
  315.     $this->customerAddressRepository->delete($CustomerAddress);
  316.     $event = new EventArgs(
  317.       [
  318.         'Customer' => $Customer,
  319.         'CustomerAddress' => $CustomerAddress,
  320.       ],
  321.       $request
  322.     );
  323.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_DELIVERY_DELETE_COMPLETE);
  324.     // 会員情報変更時にメールを送信
  325.     if ($this->BaseInfo->isOptionMailNotifier()) {
  326.       // 情報のセット
  327.       $userData['userAgent'] = $request->headers->get('User-Agent');
  328.       $userData['ipAddress'] = $request->getClientIp();
  329.       $this->mailService->sendCustomerChangeNotifyMail($Customer$userDatatrans('front.mypage.delivery.notify_title'));
  330.     }
  331.     log_info('お届け先削除完了', [$CustomerAddress->getId()]);
  332.     return $this->redirect($this->generateUrl('mypage_delivery'));
  333.   }
  334.   /**
  335.    * 会員情報編集画面.
  336.    *
  337.    * @Route("/mypage_membership", name="mypage_membership", methods={"GET", "POST"})
  338.    * @Template("@user_data/mypage/mypage_membership.twig")
  339.    */
  340.   public function index(Request $request)
  341.   {
  342.     if ($this->orderHelper->isLoginRequired()) {
  343.       $this->setLoginTargetPath($this->generateUrl('mypage_membership', [], UrlGeneratorInterface::ABSOLUTE_URL));
  344.       return $this->redirect('/mypage-login');
  345.     }
  346.     /** @var Customer $Customer */
  347.     $Customer $this->getUser();
  348.     $Customer->setPlainPassword($this->eccubeConfig['eccube_default_password']);
  349.     /* @var $builder \Symfony\Component\Form\FormBuilderInterface */
  350.     $builder $this->formFactory->createBuilder(EntryType::class, $Customer);
  351.     $event = new EventArgs(
  352.       [
  353.         'builder' => $builder,
  354.         'Customer' => $Customer,
  355.       ],
  356.       $request
  357.     );
  358.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_CHANGE_INDEX_INITIALIZE);
  359.     /* @var $form \Symfony\Component\Form\FormInterface */
  360.     $form $builder->getForm();
  361.     $form->handleRequest($request);
  362.     if ($form->isSubmitted() && $form->isValid()) {
  363.       log_info('会員編集開始');
  364.       if ($Customer->getPlainPassword() !== $this->eccubeConfig['eccube_default_password']) {
  365.         $encoder $this->encoderFactory->getEncoder($Customer);
  366.         if ($Customer->getSalt() === null) {
  367.           $Customer->setSalt($encoder->createSalt());
  368.         }
  369.         $Customer->setPassword(
  370.           $encoder->encodePassword($Customer->getPlainPassword(), $Customer->getSalt())
  371.         );
  372.       }
  373.       if (method_exists($Customer'setMailmagaFlg')) {
  374.         $mailmagaFlg $form->get('mailmaga_flg')->getData();
  375.         if (!$mailmagaFlg) {
  376.             $Customer->setMailmagaFlg(0);
  377.         } else {
  378.             $Customer->setMailmagaFlg(1);
  379.         }
  380.       }
  381.       // 会員情報変更時にメールを送信
  382.       if ($this->baseInfoRepository->get()->isOptionMailNotifier()) {
  383.         // 情報のセット
  384.         $userData['userAgent'] = $request->headers->get('User-Agent');
  385.         $userData['preEmail'] = $request->getSession()->get(self::SESSION_KEY_PRE_EMAIL);
  386.         $userData['ipAddress'] = $request->getClientIp();
  387.         // メール送信
  388.         $this->mailService->sendCustomerChangeNotifyMail($Customer$userDatatrans('front.mypage.customer.notify_title'));
  389.       }
  390.       $this->session->remove(self::SESSION_KEY_PRE_EMAIL);
  391.       $this->entityManager->flush();
  392.       log_info('会員編集完了');
  393.       $event = new EventArgs(
  394.         [
  395.           'form' => $form,
  396.           'Customer' => $Customer,
  397.         ],
  398.         $request
  399.       );
  400.       $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_CHANGE_INDEX_COMPLETE);
  401.       return $this->redirect($this->generateUrl('mypage_membership_complete'));
  402.     }
  403.     $preEmail $form->get('email')->getData();
  404.     $this->session->set(self::SESSION_KEY_PRE_EMAIL$preEmail);
  405.     return [
  406.       'form' => $form->createView(),
  407.     ];
  408.   }
  409.   /**
  410.    * 会員情報編集完了画面.
  411.    *
  412.    * @Route("/mypage_membership/complete", name="mypage_membership_complete", methods={"GET"})
  413.    * @Template("@user_data/mypage/mypage_membership_complete.twig")
  414.    */
  415.   public function complete(Request $request)
  416.   {
  417.     if ($this->orderHelper->isLoginRequired()) {
  418.       return $this->redirect('/mypage-login');
  419.     }
  420.     return [];
  421.   }
  422.   /**
  423.    * @Route("/mypage_mailmagazine", name="mypage_mail", methods={"GET"})
  424.    * @Route("/mypage-withdraw", name="mypage-withdraw", methods={"POST"})
  425.    * @Template("@user_data/mypage/mypage_mailmagazine.twig")
  426.    */
  427.   public function mypageMailmagazine(Request $request)
  428.   {
  429.     if ($this->orderHelper->isLoginRequired()) {
  430.       $this->setLoginTargetPath($this->generateUrl('mypage-withdraw', [], UrlGeneratorInterface::ABSOLUTE_URL));
  431.       return $this->redirect('/mypage-login');
  432.     }
  433.     $builder $this->formFactory->createBuilder();
  434.     $event = new EventArgs(
  435.       [
  436.         'builder' => $builder,
  437.       ],
  438.       $request
  439.     );
  440.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_WITHDRAW_INDEX_INITIALIZE);
  441.     $form $builder->getForm();
  442.     $form->handleRequest($request);
  443.     $Customer $this->getUser();
  444.     $mailmagaFlg null;
  445.     if (method_exists($Customer'getMailmagaFlg')) {
  446.         $mailmagaFlg $Customer->getMailmagaFlg();
  447.     }
  448.     $couponPro $this->couponOrderProRepository->fetchCouponsForMypage($this->getUser());
  449.     if ($form->isSubmitted() && $form->isValid()) {
  450.       switch ($request->get('mode')) {
  451.         case 'complete':
  452.           log_info('退会処理開始');
  453.           /* @var $Customer \Eccube\Entity\Customer */
  454.           $Customer $this->getUser();
  455.           $email $Customer->getEmail();
  456.           // 退会ステータスに変更
  457.           $CustomerStatus $this->customerStatusRepository->find(CustomerStatus::WITHDRAWING);
  458.           $Customer->setStatus($CustomerStatus);
  459.           $Customer->setEmail(StringUtil::random(60) . '@dummy.dummy');
  460.           $this->entityManager->flush();
  461.           log_info('退会処理完了');
  462.           $event = new EventArgs(
  463.             [
  464.               'form' => $form,
  465.               'Customer' => $Customer,
  466.             ],
  467.             $request
  468.           );
  469.           $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_WITHDRAW_INDEX_COMPLETE);
  470.           // メール送信
  471.           $this->mailService->sendCustomerWithdrawMail($Customer$email);
  472.           // カートと受注のセッションを削除
  473.           $this->cartService->clear();
  474.           $this->orderHelper->removeSession();
  475.           // ログアウト
  476.           $this->tokenStorage->setToken(null);
  477.           log_info('ログアウト完了');
  478.           return [
  479.             'couponPro' => $couponPro,
  480.             'form' => $form->createView(),
  481.             'complete' => true
  482.           ];
  483.       }
  484.     }
  485.     return [
  486.       'couponPro' => $couponPro,
  487.       'form' => $form->createView(),
  488.       'mailmagaFlg' => $mailmagaFlg,
  489.       'complete' => false
  490.     ];
  491.   }
  492.   /**
  493.    * @Route("/mypage-mailmagazine-update", name="mypage_mail_update_flag", methods={"POST"})
  494.    * @return JsonResponse
  495.    */
  496.   public function updateMailFlag(Request $request)
  497.   {
  498.     if (!$this->getUser()) {
  499.         return new JsonResponse(['error' => 'Unauthorized'], 401);
  500.     }
  501.     $customer $this->getUser();
  502.     $flag $request->request->get('flag'0);
  503.     if (method_exists($customer'setMailmagaFlg')) {
  504.       $customer->setMailmagaFlg((int)$flag);
  505.       $this->entityManager->flush();
  506.       return new JsonResponse([
  507.           'success' => true,
  508.           'message' => $flag 'メルマガに登録しました。' 'メルマガを解除しました。'
  509.       ]);
  510.     }
  511.     return new JsonResponse([
  512.         'success' => false,
  513.         'message' => 'MailMagazine42 プラグインがインストールされていません。'
  514.     ]);
  515.   }
  516.   /**
  517.    * 退会完了画面.
  518.    *
  519.    * @Route("/mypage_withdraw/complete", name="mypage_withdraw_done", methods={"GET"})
  520.    * @Template("Mypage/withdraw_complete.twig")
  521.    */
  522.   public function withdraw_complete(Request $request)
  523.   {
  524.     if ($this->orderHelper->isLoginRequired()) {
  525.       return $this->redirect('/mypage-login');
  526.     }
  527.     return [];
  528.   }
  529.   /**
  530.    * お気に入り商品を削除する.
  531.    *
  532.    * @Route("/mypage_wishlist/{id}/delete", name="mypage_wishlist_delete", methods={"GET"}, requirements={"id" = "\d+"})
  533.    */
  534.   public function delete(Request $requestProduct $Product)
  535.   {
  536.     if ($this->orderHelper->isLoginRequired()) {
  537.       return $this->redirect('/mypage-login');
  538.     }
  539.     $this->isTokenValid();
  540.     $Customer $this->getUser();
  541.     log_info('お気に入り商品削除開始', [$Customer->getId(), $Product->getId()]);
  542.     $CustomerFavoriteProduct $this->customerFavoriteProductRepository->findOneBy(['Customer' => $Customer'Product' => $Product]);
  543.     if ($CustomerFavoriteProduct) {
  544.       $this->customerFavoriteProductRepository->delete($CustomerFavoriteProduct);
  545.     } else {
  546.       throw new BadRequestHttpException();
  547.     }
  548.     $event = new EventArgs(
  549.       [
  550.         'Customer' => $Customer,
  551.         'CustomerFavoriteProduct' => $CustomerFavoriteProduct,
  552.       ],
  553.       $request
  554.     );
  555.     $this->eventDispatcher->dispatch($eventEccubeEvents::FRONT_MYPAGE_MYPAGE_DELETE_COMPLETE);
  556.     log_info('お気に入り商品削除完了', [$Customer->getId(), $CustomerFavoriteProduct->getId()]);
  557.     return $this->redirect($this->generateUrl('mypage_favorite'));
  558.   }
  559.   /**
  560.    * @Route("/order/export/pdf/my-page", methods={"GET"}, name="mypage_order_export_pdf")
  561.    *
  562.    * @param Request $request
  563.    *
  564.    * @return Response
  565.    */
  566.   public function export_custom(Request $requestReportPdf2FtService $reportPdf2Service)
  567.   {
  568.     $orderId $request->get('orderId');
  569.     $type $request->get('type');
  570.     $order $this->orderRepository->findOneBy(['id' => $orderId]);
  571.     if(!$order){
  572.       dd('Order not found!');
  573.     }
  574.     $shipping_ids = [];
  575.     foreach($order->getShippings() as $shipping){
  576.       $shipping_ids[] = $shipping['id'];
  577.     }
  578.     $ids_string implode(','$shipping_ids);
  579.     $title "";
  580.     $message1 "";
  581.     $message2 "";
  582.     $message3 "";
  583.     $tyohyo_type "1";
  584.     $contact_show 1;
  585.     $number_show 1;
  586.     $haiso_show 2;
  587.     $filename_download "";
  588.     $ryosyu_no null;
  589.     switch ($type) {
  590.       case 'quotation':
  591.         $title "見積書";
  592.         $message1 "このたびはお買上げいただきありがとうございます。";
  593.         $message2 "下記の内容にて納品させていただきます。";
  594.         $message3 "ご確認くださいますよう、お願いいたします。";
  595.         $tyohyo_type "2";
  596.         $contact_show 1;
  597.         $number_show 1;
  598.         $haiso_show 1;
  599.         $filename_download "見積書";
  600.         break;
  601.       case 'receipt':
  602.         $title "領収書";
  603.         $message1 "このたびはお買上げいただきありがとうございます";
  604.         $message2 "下記の内容にて納品させていただきます。";
  605.         $message3 "ご確認くださいますよう、お願いいたします。";
  606.         $tyohyo_type "4";
  607.         $contact_show 1;
  608.         $number_show 1;
  609.         $haiso_show 1;
  610.         $filename_download "領収書";
  611.         $ryosyu_no$order->getOrderNo();
  612.         break;
  613.       case 'invoice':
  614.         $title "請求書";
  615.         $message1 "";
  616.         $message2 "";
  617.         $message3 "";
  618.         $tyohyo_type "3";
  619.         $contact_show 2;
  620.         $number_show 2;
  621.         $haiso_show 2;
  622.         $filename_download "請求書";
  623.         break;
  624.       case 'delivery':
  625.         $title "お買上げ明細書(納品書)";
  626.         $message1 "このたびはお買上げいただきありがとうございます。";
  627.         $message2 "下記の内容にて納品させていただきます。";
  628.         $message3 "ご確認くださいますよう、お願いいたします。";
  629.         $tyohyo_type "1";
  630.         $contact_show 1;
  631.         $number_show 1;
  632.         $haiso_show 1;
  633.         $filename_download "納品書";
  634.         break;
  635.       default: 
  636.         dd('Invalid type!');  
  637.     }
  638.     $arrData = [
  639.       "ids" => $ids_string,
  640.       "issue_date" => new DateTime(),
  641.       "title" => $title,
  642.       "message1" => $message1,
  643.       "message2" => $message2,
  644.       "message3" => $message3,
  645.       "note1" => null,
  646.       "note2" => null,
  647.       "note3" => null,
  648.       "default" => ,
  649.       "delivery_multi" => "0",
  650.       "add_page" => null,
  651.       "tyohyo_type" => $tyohyo_type,
  652.       "comment1" => "",
  653.       "comment2" => "",
  654.       "comment3" => "",
  655.       "comment4" => "",
  656.       "comment5" => "",
  657.       "seikyu1" => null,
  658.       "seikyu2" => null,
  659.       "seikyu3" => null,
  660.       "ryosyu_no" => $ryosyu_no,
  661.       "ryosyu_tadasi" => null,
  662.       "ryosyu_show" => null,
  663.       "contact_show" => $contact_show,
  664.       "number_show" => $number_show,
  665.       "haiso_show" => $haiso_show,
  666.       "change_name" => null,
  667.     ];
  668.     $reportPdf2Service->makePdf($arrData);
  669.     $filename str_replace("OrderId-",  $filename_download$reportPdf2Service->getPdfFileName());
  670.     $response = new Response(
  671.       $reportPdf2Service->outputPdf(),
  672.       200,
  673.       ['content-type' => 'application/pdf']
  674.     );
  675.     $response->headers->set('Content-Disposition''attachment; filename="' $filename '"');
  676.     return $response;
  677.   }
  678. }