app/Customize/Controller/MyPageController.php line 182

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 $request, PaginatorInterface $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($event, EccubeEvents::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 $request, PaginatorInterface $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. $this->eccubeConfig['eccube_search_pmax']
  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($event, EccubeEvents::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, $userData, trans('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($event, EccubeEvents::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 $request, CustomerAddress $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($event, EccubeEvents::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, $userData, trans('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($event, EccubeEvents::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, $userData, trans('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($event, EccubeEvents::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($event, EccubeEvents::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($event, EccubeEvents::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 $request, Product $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($event, EccubeEvents::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 $request, ReportPdf2FtService $reportPdf2Service)
  567. {
  568. $shipping_ids = $request->get('ids');
  569. $delivery_order = $request->get('delivery', 0);
  570. $arrData = [
  571. "ids" => $shipping_ids,
  572. "issue_date" => new DateTime(),
  573. "title" => $delivery_order == 1 ? "お買上げ明細書(納品書)" : "領収書",
  574. "message1" => $delivery_order == 1 ? "このたびはお買上げいただきありがとうございます。" : null,
  575. "message2" => $delivery_order == 1 ? "下記の内容にて納品させていただきます。" : null,
  576. "message3" => $delivery_order == 1 ? "ご確認くださいますよう、お願いいたします。" : null,
  577. "note1" => null,
  578. "note2" => null,
  579. "note3" => null,
  580. "default" => false,
  581. "delivery_multi" => "0",
  582. "add_page" => null,
  583. "tyohyo_type" => $delivery_order == 1 ? "1" : 4,
  584. "comment1" => "plugin_report_pdf2.admin.order.delivery_note_message__estimate1",
  585. "comment2" => "plugin_report_pdf2.admin.order.delivery_note_message__estimate2",
  586. "comment3" => "plugin_report_pdf2.admin.order.delivery_note_message__estimate3",
  587. "comment4" => "plugin_report_pdf2.admin.order.delivery_note_message__estimate4",
  588. "comment5" => "plugin_report_pdf2.admin.order.delivery_note_message__estimate5",
  589. "seikyu1" => null,
  590. "seikyu2" => null,
  591. "seikyu3" => null,
  592. "ryosyu_no" => null,
  593. "ryosyu_tadasi" => null,
  594. "ryosyu_show" => null,
  595. "contact_show" => null,
  596. "number_show" => null,
  597. "haiso_show" => "2",
  598. "change_name" => null,
  599. ];
  600. $reportPdf2Service->makePdf($arrData);
  601. $filename = str_replace("OrderId-", $delivery_order == 0 ? '請求書-' : '納品書-', $reportPdf2Service->getPdfFileName());
  602. $response = new Response(
  603. $reportPdf2Service->outputPdf(),
  604. 200,
  605. ['content-type' => 'application/pdf']
  606. );
  607. $response->headers->set('Content-Disposition', 'attachment; filename="' . $filename . '"');
  608. return $response;
  609. }
  610. }