app/Plugin/ClaimPdf42/Controller/ClaimDownload/ClaimDownloadController.php line 166

Open in your IDE?
  1. <?php
  2. namespace Plugin\ClaimPdf42\Controller\ClaimDownload;
  3. use Eccube\Controller\AbstractController;
  4. use Knp\Component\Pager\PaginatorInterface;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Eccube\Repository\PageRepository;
  9. use Eccube\Repository\ProductRepository;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Eccube\Repository\OrderRepository;
  12. use Eccube\Entity\BaseInfo;
  13. use Eccube\Entity\Master\ProductStatus;
  14. use Eccube\Event\EccubeEvents;
  15. use Eccube\Event\EventArgs;
  16. use Eccube\Form\Type\AddCartType;
  17. use Eccube\Form\Type\SearchProductType;
  18. use Eccube\Repository\BaseInfoRepository;
  19. use Eccube\Repository\CustomerFavoriteProductRepository;
  20. use Eccube\Repository\Master\ProductListMaxRepository;
  21. use Eccube\Service\PurchaseFlow\PurchaseContext;
  22. use Eccube\Service\PurchaseFlow\PurchaseFlow;
  23. use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
  24. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  25. use Eccube\Entity\Master\OrderStatus;
  26. use Eccube\Entity\Order;
  27. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  28. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  29. use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
  30. use Symfony\Component\Form\FormBuilder;
  31. use Symfony\Component\HttpFoundation\RedirectResponse;
  32. use Symfony\Component\HttpFoundation\StreamedResponse;
  33. use Eccube\Repository\ShippingRepository;
  34. use Plugin\ClaimPdf42\Entity\ClaimPdf;
  35. use Plugin\ClaimPdf42\Entity\ClaimHistory;
  36. use Plugin\ClaimPdf42\Form\Type\Admin\ClaimPdfType;
  37. use Plugin\ClaimPdf42\Form\Type\Admin\ClaimHistoryType;
  38. use Plugin\ClaimPdf42\Repository\ClaimPdfRepository;
  39. use Plugin\ClaimPdf42\Repository\ClaimHistoryRepository;
  40. use Plugin\ClaimPdf42\Service\ClaimPdfService;
  41. use Plugin\ClaimPdf42\Service\ClaimViewService;
  42. use Eccube\Twig\Extension\EccubeExtension;
  43. use Eccube\Common\EccubeConfig;
  44. use Eccube\Service\MailService;
  45. use Symfony\Component\Mailer\MailerInterface;
  46. use Symfony\Component\Mime\Email;
  47. // ページ表示作業
  48. // dtb_page
  49. // INSERT INTO `dtb_page` (`master_page_id`, `page_name`, `url`, `file_name`, `edit_type`, `author`, `description`, `keyword`, `meta_robots`, `meta_tags`, `discriminator_type`) VALUES(NULL, 'NEWS 詳細', 'cm_blog_page_detail', 'web/detail', 2, NULL, NULL, NULL, NULL, NULL, 'page');
  50. // dtb_page_layout
  51. // page_id を 合わせるために、dtb_page_layout の page_id を 162 にする必要があります。
  52. // INSERT INTO `dtb_page_layout` (``, `layout_id`, `sort_no`, `discriminator_type`) VALUES (162, 2, 129, 'pagelayout');
  53. class ClaimDownloadController extends AbstractController
  54. {
  55.     /**
  56.      * @var OrderRepository
  57.      */
  58.     protected $orderRepository;
  59.     /**
  60.      * MypageController constructor.
  61.      *
  62.      * @param OrderRepository $orderRepository
  63.      */
  64.     /**
  65.      * @var ClaimHistoryRepository
  66.      */
  67.     protected $ClaimHistoryRepository;
  68.     /**
  69.      * @var ClaimPdfService
  70.      */
  71.     protected $claimPdfService;
  72.     /**
  73.      * @var ClaimViewService
  74.      */
  75.     protected $claimViewService;
  76.     /**
  77.      * @var EccubeConfig
  78.      */
  79.     protected  $eccubeConfig;
  80.     /**
  81.      * @var EccubeExtension
  82.      */
  83.     private $eccubeExtension;
  84.     private $mailService;
  85.     /**
  86.      * @var BaseInfo
  87.      */
  88.     protected $BaseInfo;
  89.     
  90.     private $mailer;
  91.     public function __construct(
  92.         ClaimViewService $claimViewService,
  93.         PageRepository $pageRepository,
  94.         ProductRepository $productRepository,
  95.         OrderRepository $orderRepository,
  96.         ClaimHistoryRepository $claimHistoryRepository,
  97.         shippingRepository $shippingRepository,
  98.         ClaimPdfService $claimPdfService,
  99.         EccubeExtension $eccubeExtension,
  100.         EccubeConfig $eccubeConfig,
  101.         MailService $mailService,
  102.         BaseInfoRepository $baseInfoRepository,
  103.         MailerInterface $mailer
  104.         
  105.     ){
  106.         $this->pageRepository $pageRepository;
  107.         $this->productRepository $productRepository;
  108.         $this->orderRepository $orderRepository;
  109.         $this->claimHistoryRepository $claimHistoryRepository;
  110.         $this->shippingRepository $shippingRepository;
  111.         $this->claimPdfService $claimPdfService;
  112.         $this->claimViewService $claimViewService;
  113.         $this->eccubeConfig $eccubeConfig;
  114.         $this->eccubeExtension $eccubeExtension;
  115.         $this->mailService $mailService;
  116.         $this->BaseInfo $baseInfoRepository->get();
  117.         $this->mailer $mailer;
  118.     }
  119.     /**
  120.      * @Route("/ClaimeDownload/{id}/", name="claim_download")
  121.      * @Template("web/ClaimDownload.twig")
  122.      */
  123.     public function index(Request $request$id)
  124.     {
  125.         $RequestId $id;
  126.         $ErrorMessage null;
  127.         // paginator
  128.         
  129.         //オーダー情報がない場合
  130.         $Order $this->orderRepository->findOneBy(['pre_order_id'=>$id]);
  131.         if (!$Order) {
  132.             $ErrorMessage '受注情報が存在しません';
  133.             return [
  134.                 'ErrorMessage' => $ErrorMessage,
  135.             ];
  136.         }
  137.         // ここでは$OrderはEccube\Entity\Orderオブジェクトになるので直接メソッドを呼び出せる
  138.         $orderStatus $Order->getOrderStatus()->getId();
  139.         
  140.         if($orderStatus !== 5){
  141.             
  142.             //NEW    新規受付.    1
  143.             //CANCEL    注文取消し.    3
  144.             //IN_PROGRESS    対応中.    4
  145.             //DELIVERED    発送済み.    5
  146.             //PAID    入金済み.    6
  147.             //PENDING    決済処理中.    7
  148.             //PROCESSING    購入処理中.    8
  149.             //RETURNED    返品    9
  150.             
  151.             //注文取消し.
  152.             if($orderStatus == 3){
  153.                 $ErrorMessage 'ご注文のキャンセルを承りましたので、こちら機能はご利用いただけません。';
  154.             }else{
  155.                 $ErrorMessage 'こちらの機能はご注文の製品の発送後に有効となります。ご注文の製品の発送後再度ご確認ください。';
  156.             }
  157.             return [
  158.                 'ErrorMessage' => $ErrorMessage,
  159.             ];
  160.         }
  161.         //ショッピング情報がない場合
  162.         $Shopping $Order->getShippings()->first();
  163.         if (!$Shopping) {
  164.             $ErrorMessage '受注情報が存在しません';
  165.             return [
  166.                 'ErrorMessage' => $ErrorMessage,
  167.             ];
  168.         }
  169.         
  170.         $History $this->claimHistoryRepository->findBy(['pre_order_id'=>$id]);
  171.         if($History){
  172.             $ErrorMessage '領収書は発行済みです';
  173.             return [
  174.                 'ErrorMessage' => $ErrorMessage,
  175.             ];
  176.         }
  177.         $ids[] = $Shopping->getId();
  178.         
  179.         $orderId_tmp "";
  180.         $orderId_cnt 0;
  181.         // 受注ID配列テーブルを作成する
  182.         foreach ($ids as $id) {
  183.             // 出荷番号から出荷情報を取得する
  184.             $Shipping $this->shippingRepository->find($id);
  185.             // 出荷情報から受注情報を取得する
  186.             $orderData_tmp $Shipping->getOrder();
  187.             // 設定条件:初回または同一受注番号でない場合(複数配送の場合は同一受注番号が複数存在する)
  188.             if ($orderId_tmp == "" or $orderId_tmp != $orderData_tmp->getId()) {
  189.                 // 受注番号を取得して設定
  190.                 $orderIdDatas[$orderId_cnt] = $orderData_tmp->getId();
  191.                 $orderId_tmp $orderIdDatas[$orderId_cnt];
  192.                 $orderId_cnt++;
  193.             }
  194.         }
  195.         /** @var ClaimPdf $ClaimPdf */
  196.         $ClaimPdf $this->claimHistoryRepository->findBy([ 'shipping_id' => $this->getUser() ]);
  197.         if (empty($ClaimPdf)) {
  198.             $ClaimPdf = new ClaimPdf();
  199.             $ClaimPdf
  200.                 ->setTitleNouhin(trans('admin.order.delivery_note_title_nouhin__default'))
  201.                 ->setMessage1Nouhin(trans('admin.order.delivery_note_message__default1'))
  202.                 ->setMessage2Nouhin(trans('admin.order.delivery_note_message__default2'))
  203.                 ->setMessage3Nouhin(trans('admin.order.delivery_note_message__default3'))
  204.                 ->setTitleNouhinShipping(trans('admin.order.delivery_note_title_otodoke__default'))
  205.                 ->setMessage1NouhinShipping(trans('admin.order.delivery_note_message__default7'))
  206.                 ->setMessage2NouhinShipping(trans('admin.order.delivery_note_message__default8'))
  207.                 ->setMessage3NouhinShipping(trans(''))
  208.                 ->setTitleOtodoke(trans('admin.order.delivery_note_title_otodoke__default'))
  209.                 ->setMessage1Otodoke(trans('admin.order.delivery_note_message__default7'))
  210.                 ->setMessage2Otodoke(trans('admin.order.delivery_note_message__default8'))
  211.                 ->setMessage3Otodoke(trans(''))
  212.                 ->setTitleSeikyu(trans('admin.order.delivery_note_title_seikyu__default'))
  213.                 ->setMessage1Seikyu(trans('admin.order.delivery_note_message__default4'))
  214.                 ->setMessage2Seikyu(trans('admin.order.delivery_note_message__default5'))
  215.                 ->setMessage3Seikyu(trans('admin.order.delivery_note_message__default6'))
  216.                 ->setHurikomiBank(trans(''))
  217.                 ->setHurikomiBankSiten(trans(''))
  218.                 ->setHurikomiBankKouza(trans(''))
  219.                 ->setHurikomiFreeArea(trans(''));
  220.         }
  221.         /**
  222.          * @var FormBuilder
  223.          */
  224.         $builder $this->formFactory->createBuilder(ClaimHistoryType::class, $ClaimPdf);
  225.         /* @var \Symfony\Component\Form\Form $form */
  226.         $form $builder->getForm();
  227.         // Formへの設定
  228.         $form->get('ids')->setData(implode(','$ids));
  229.         $form->get('orderids')->setData(implode(','$orderIdDatas));
  230.         //$form->get('orderdatetime_st')->setData($orderDatetimeStart);
  231.         //$form->get('orderdatetime_en')->setData($orderDatetimeEnd);
  232.         
  233.         return [
  234.             'requestId' => $RequestId,
  235.             'form' => $form->createView(),
  236.             'ErrorMessage' => $ErrorMessage,
  237.         ];
  238.         
  239.     }
  240.     /**
  241.      * @Route("/ClaimeDownload/download", name="claimpdf_download_pdf")
  242.      * @Template("web/ClaimDownload.twig")
  243.      *
  244.      * @param Request $request
  245.      *
  246.      * @return Response
  247.      */
  248.     public function exportClaimPdfDownload(Request $request)
  249.     {
  250.         /**
  251.          * @var FormBuilder
  252.          */
  253.         $builder $this->formFactory->createBuilder(ClaimHistoryType::class);
  254.         /* @var \Symfony\Component\Form\Form $form */
  255.         $form $builder->getForm();
  256.         $form->handleRequest($request);
  257.         // Validation
  258.         if (!$form->isValid()) {
  259.             log_info('The parameter is invalid!');
  260.             return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
  261.                 'form' => $form->createView(),
  262.             ]);
  263.         }
  264.         $formData $form->getData();
  265.         $data = array();
  266.         $data["orderDatetime"]["st"] = $form->get('orderdatetime_st')->getData();
  267.         $data["orderDatetime"]["en"] = $form->get('orderdatetime_en')->getData();
  268.         $data["orderIds"] = $form->get('orderids')->getData();
  269.         $data["outputKbn"] = $form->get('outputkbn')->getData();
  270.         $data["title"] = $form->get('title')->getData();
  271.         $data["message1"] = $form->get('message1')->getData();
  272.         $data["message2"] = $form->get('message2')->getData();
  273.         $data["message3"] = $form->get('message3')->getData();
  274.         $data["atenaKbn"] = $form->get('ryosyu_atena')->getData();
  275.         $data["ryosyu_add_company"] = $form->get('ryosyu_add_company')->getData(); // 会社名追加@hanari
  276.         $data["ryosyu_add_name"] = $form->get('ryosyu_add_name')->getData();  // 宛名追加@hanari
  277.         
  278.         $OrderId $form->get('orderids')->getData();
  279.         $Order $this->orderRepository->find(['id'=> $OrderId ]);
  280.         $formData['shipping_id'] = $formData['ids'];
  281.         $formData['order_id'] = $Order->getId();
  282.         $formData['pre_order_id'] = $Order->getPreOrderId();
  283.         
  284.         // 出力帳票により処理を振り分ける
  285.         switch($data["outputKbn"]) {
  286.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin'):
  287.                 $formData['title_nouhin'] = $data["title"];
  288.                 $formData['message1_nouhin'] = $data["message1"];
  289.                 $formData['message2_nouhin'] = $data["message2"];
  290.                 $formData['message3_nouhin'] = $data["message3"];
  291.                 break;
  292.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
  293.                 $formData['title_nouhin_shipping'] = $data["title"];
  294.                 $formData['message1_nouhin_shipping'] = $data["message1"];
  295.                 $formData['message2_nouhin_shipping'] = $data["message2"];
  296.                 $formData['message3_nouhin_shipping'] = $data["message3"];
  297.                 break;
  298.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
  299.                 $formData['title_otodoke'] = $data["title"];
  300.                 $formData['message1_otodoke'] = $data["message1"];
  301.                 $formData['message2_otodoke'] = $data["message2"];
  302.                 $formData['message3_otodoke'] = $data["message3"];
  303.                 break;
  304.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu'):
  305.                 $formData['title_seikyu'] = $data["title"];
  306.                 $formData['message1_seikyu'] = $data["message1"];
  307.                 $formData['message2_seikyu'] = $data["message2"];
  308.                 $formData['message3_seikyu'] = $data["message3"];
  309.                 break;
  310.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
  311.                 $formData['title_seikyu'] = $data["title"];
  312.                 $formData['message1_seikyu'] = $data["message1"];
  313.                 $formData['message2_seikyu'] = $data["message2"];
  314.                 $formData['message3_seikyu'] = $data["message3"];
  315.                 break;
  316.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
  317.                 $formData['title_seikyu'] = $data["title"];
  318.                 $formData['message1_seikyu'] = $data["message1"];
  319.                 $formData['message2_seikyu'] = $data["message2"];
  320.                 $formData['message3_seikyu'] = $data["message3"];
  321.                 break;
  322.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_ryosyu'):
  323.                 break;
  324.             default:
  325.         }
  326.         // 購入情報からPDFを作成する
  327.         $status $this->claimPdfService->makePdf($formData$data);
  328.         // 異常終了した場合の処理
  329.         if (!$status) {
  330.             $this->addError('admin.order.delivery_note_download_error''admin');
  331.             log_info('Unable to create pdf files! Process have problems!');
  332.             return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
  333.                 'form' => $form->createView(),
  334.             ]);
  335.         }
  336.         // ダウンロードする
  337.         $response = new Response(
  338.             $this->claimPdfService->outputPdf(),
  339.             200,
  340.             ['content-type' => 'application/pdf']
  341.         );
  342.         $downloadKind $form->get('download_kind')->getData();
  343.         // レスポンスヘッダーにContent-Dispositionをセットし、ファイル名を指定
  344.         if ($downloadKind == 1) {
  345.             $response->headers->set('Content-Disposition''attachment; filename="'.$this->claimPdfService->getPdfFileName().'"');
  346.         } else {
  347.             $response->headers->set('Content-Disposition''inline; filename="'.$this->claimPdfService->getPdfFileName().'"');
  348.         }
  349.         log_info('ClaimPdf download success!', ['Order ID' => implode(','$request->get('ids', []))]);
  350.         $isDefault = isset($formData['default']) ? $formData['default'] : false;
  351.         //データをセーブ
  352.         $user $this->getUser();
  353.         if(!$user){
  354.             $user 'gest';
  355.         }
  356.         
  357.         $formData['admin'] = $user;
  358.         $this->claimHistoryRepository->save($formData);
  359.         // PDFダウンロード完了メールを送信
  360.         $this->sendDownloadCompletionMail($formData$data);
  361.         return $response;
  362.     }
  363.     
  364.     
  365.     /**
  366.      * @Route("/ClaimeDownload/{id}/view/", name="claimpdf_download_pdf_view")
  367.      * @Template("web/ClaimDownloadView.twig")
  368.      *
  369.      * @param Request $request
  370.      *
  371.      * @return Response
  372.      */
  373.     public function exportClaimPdfview(Request $request$id)
  374.     {
  375.         
  376.         $RequestId $id;
  377.         $ErrorMessage null;
  378.         // paginator
  379.         //オーダー情報がない場合
  380.         $Order $this->orderRepository->findOneBy(['pre_order_id'=>$id]);
  381.         if (!$Order) {
  382.             $ErrorMessage '受注情報が存在しません';
  383.             return [
  384.                 'ErrorMessage' => $ErrorMessage,
  385.             ];
  386.         }
  387.         
  388.         // ここでは$OrderはEccube\Entity\Orderオブジェクトになるので直接メソッドを呼び出せる
  389.         $orderStatus $Order->getOrderStatus()->getId();
  390.         //dump($orderStatus);
  391.         if($orderStatus !== 5){
  392.             /*
  393.             NEW    新規受付.    1
  394.             CANCEL    注文取消し.    3
  395.             IN_PROGRESS    対応中.    4
  396.             DELIVERED    発送済み.    5
  397.             PAID    入金済み.    6
  398.             PENDING    決済処理中.    7
  399.             PROCESSING    購入処理中.    8
  400.             RETURNED    返品    9
  401.             */
  402.             //注文取消し.
  403.             if($orderStatus == 3){
  404.                 $ErrorMessage 'ご注文のキャンセルを承りましたので、こちら機能はご利用いただけません。';
  405.             }else{
  406.                 $ErrorMessage 'こちらの機能はご注文の製品の発送後に有効となります。ご注文の製品の発送後再度ご確認ください。';
  407.             }
  408.             return [
  409.                 'ErrorMessage' => $ErrorMessage,
  410.             ];
  411.         }
  412.         
  413.         //ショッピング情報がない場合
  414.         $Shopping $Order->getShippings()->first();
  415.         if (!$Shopping) {
  416.             $ErrorMessage '受注情報が存在しません';
  417.             return [
  418.                 'ErrorMessage' => $ErrorMessage,
  419.             ];
  420.         }
  421.         
  422.         $History $this->claimHistoryRepository->findBy(['pre_order_id'=>$id]);
  423.         if($History){
  424.             $ErrorMessage '領収書は発行済みです';
  425.             return [
  426.                 'ErrorMessage' => $ErrorMessage,
  427.             ];
  428.         }
  429.         
  430.         
  431.         /**
  432.          * @var FormBuilder
  433.          */
  434.         $builder $this->formFactory->createBuilder(ClaimHistoryType::class);
  435.         /* @var \Symfony\Component\Form\Form $form */
  436.         $form $builder->getForm();
  437.         $form->handleRequest($request);
  438.         // Validation
  439.         if (!$form->isValid()) {
  440.             log_info('The parameter is invalid!');
  441.             return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
  442.                 'form' => $form->createView(),
  443.                 'BaseInfo' => $this->BaseInfo,
  444.             ]);
  445.         }
  446.         $formData $form->getData();
  447.         $data = array();
  448.         $data["orderDatetime"]["st"] = $form->get('orderdatetime_st')->getData();
  449.         $data["orderDatetime"]["en"] = $form->get('orderdatetime_en')->getData();
  450.         $data["orderIds"] = $form->get('orderids')->getData();
  451.         $data["outputKbn"] = $form->get('outputkbn')->getData();
  452.         $data["title"] = $form->get('title')->getData();
  453.         $data["message1"] = $form->get('message1')->getData();
  454.         $data["message2"] = $form->get('message2')->getData();
  455.         $data["message3"] = $form->get('message3')->getData();
  456.         $data["atenaKbn"] = $form->get('ryosyu_atena')->getData();
  457.         $data["ryosyu_add_company"] = $form->get('ryosyu_add_company')->getData(); // 会社名追加@hanari
  458.         $data["ryosyu_add_name"] = $form->get('ryosyu_add_name')->getData();  // 宛名追加@hanari
  459.         // 出力帳票により処理を振り分ける
  460.         switch($data["outputKbn"]) {
  461.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin'):
  462.                 $formData['title_nouhin'] = $data["title"];
  463.                 $formData['message1_nouhin'] = $data["message1"];
  464.                 $formData['message2_nouhin'] = $data["message2"];
  465.                 $formData['message3_nouhin'] = $data["message3"];
  466.                 break;
  467.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
  468.                 $formData['title_nouhin_shipping'] = $data["title"];
  469.                 $formData['message1_nouhin_shipping'] = $data["message1"];
  470.                 $formData['message2_nouhin_shipping'] = $data["message2"];
  471.                 $formData['message3_nouhin_shipping'] = $data["message3"];
  472.                 break;
  473.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
  474.                 $formData['title_otodoke'] = $data["title"];
  475.                 $formData['message1_otodoke'] = $data["message1"];
  476.                 $formData['message2_otodoke'] = $data["message2"];
  477.                 $formData['message3_otodoke'] = $data["message3"];
  478.                 break;
  479.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu'):
  480.                 $formData['title_seikyu'] = $data["title"];
  481.                 $formData['message1_seikyu'] = $data["message1"];
  482.                 $formData['message2_seikyu'] = $data["message2"];
  483.                 $formData['message3_seikyu'] = $data["message3"];
  484.                 break;
  485.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
  486.                 $formData['title_seikyu'] = $data["title"];
  487.                 $formData['message1_seikyu'] = $data["message1"];
  488.                 $formData['message2_seikyu'] = $data["message2"];
  489.                 $formData['message3_seikyu'] = $data["message3"];
  490.                 break;
  491.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
  492.                 $formData['title_seikyu'] = $data["title"];
  493.                 $formData['message1_seikyu'] = $data["message1"];
  494.                 $formData['message2_seikyu'] = $data["message2"];
  495.                 $formData['message3_seikyu'] = $data["message3"];
  496.                 break;
  497.             case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_ryosyu'):
  498.                 break;
  499.             default:
  500.         }
  501.         // 購入情報からPDFを作成する
  502.         //$status = $this->claimViewService->makePdf($formData, $data);
  503.         // 受注番号をStringからarrayに変換
  504.         $orderIdDatas explode(','$data["orderIds"]);
  505.         foreach ($orderIdDatas as $orderId) {
  506.             
  507.             //dump($orderId);
  508.             // 受注番号から受注情報を取得する
  509.             $orderData $this->orderRepository->find($orderId);
  510.             
  511.             
  512.             // 総合計金額
  513.             $data['paymentTotalText'] = $this->eccubeExtension->getPriceFilter($orderData->getPaymentTotal());
  514.             
  515.             // ご注文日
  516.             $date_tmp $orderData->getCreateDate()->format('Y/m/d H:i');
  517.             if ($orderData->getOrderDate()) {
  518.                 $date_tmp $orderData->getOrderDate()->format('Y/m/d');
  519.             }
  520.             $data['orderDate'] = '[ ご注文日 ]' $date_tmp;
  521.             // 注文番号
  522.             $data['orderId'] = '[ 注文番号 ]' $orderData->getId();
  523.             
  524.             
  525.             //dump($orderData);
  526.             $arrOrder = array();
  527.             // =========================================
  528.             // 受注詳細情報
  529.             // =========================================
  530.             $i 0;
  531.             $proTax10 0;
  532.             $proTax08 0;
  533.             foreach ($orderData->getItems() as $OrderItem) {
  534.                 //dump($OrderItem);
  535.                 // 以下の条件の場合は、処理をスキップする(画面非表示処理)
  536.                 // 商品明細以外の明細の場合
  537.                 if ($OrderItem->isProduct() == false) {
  538.                     continue;
  539.                 }
  540.                 // class categoryの生成
  541.                 $classCategory '';
  542.                 /** @var OrderItem $OrderItem */
  543.                 if ($OrderItem->getClassCategoryName1()) {
  544.                     $classCategory .= ' [ '.$OrderItem->getClassCategoryName1();
  545.                     if ($OrderItem->getClassCategoryName2() == '') {
  546.                         $classCategory .= ' ]';
  547.                     } else {
  548.                         $classCategory .= ' * '.$OrderItem->getClassCategoryName2().' ]';
  549.                     }
  550.                 }
  551.                 // product
  552.                 $productName $OrderItem->getProductName();
  553.                 if (null !== $OrderItem->getProductCode()) {
  554.                     $productName .= ' / '.$OrderItem->getProductCode();
  555.                 }
  556.                 if ($classCategory) {
  557.                     $productName .= ' / '.$classCategory;
  558.                 }
  559.                 // 軽減税率対応
  560.                 $proNameCate "";
  561.                 switch($OrderItem->getTaxRate()) {
  562.                 case $this->eccubeConfig->get('eccube_claim_pdf_taxrate_10'):
  563.                     $proNameCate $productName;
  564.                     $proTax10 $proTax10 $OrderItem->getTotalPrice();
  565.                     break;
  566.                 case $this->eccubeConfig->get('eccube_claim_pdf_taxrate_08'):
  567.                     $proNameCate $productName.' ※';
  568.                     $proTax08 $proTax08 $OrderItem->getTotalPrice();
  569.                     break;
  570.                 default:
  571.                     $proNameCate $productName;
  572.                 }
  573.                 
  574.                 $arrOrder[$i][0] = $proNameCate;
  575.                 // 購入数量
  576.                 $arrOrder[$i][1] = number_format($OrderItem->getQuantity());
  577.                 // 単価(税込)
  578.                 $arrOrder[$i][2] = $this->eccubeExtension->getPriceFilter($OrderItem->getPriceIncTax());
  579.                 // 小計(商品毎)
  580.                 $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($OrderItem->getTotalPrice());
  581.                 ++$i;
  582.             }
  583.             // =========================================
  584.             // 小計
  585.             // =========================================
  586.             ++$i;
  587.             $arrOrder[$i][0] = '';
  588.             $arrOrder[$i][1] = '';
  589.             $arrOrder[$i][2] = '';
  590.             $arrOrder[$i][3] = '';
  591.             ++$i;
  592.             $arrOrder[$i][0] = '';
  593.             $arrOrder[$i][1] = '';
  594.             $arrOrder[$i][2] = '商品合計';
  595.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getSubtotal());
  596.             ++$i;
  597.             $arrOrder[$i][0] = '';
  598.             $arrOrder[$i][1] = '';
  599.             $arrOrder[$i][2] = '送料';
  600.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getDeliveryFeeTotal());
  601.             ++$i;
  602.             $arrOrder[$i][0] = '';
  603.             $arrOrder[$i][1] = '';
  604.             $arrOrder[$i][2] = '手数料';
  605.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getCharge());
  606.             ++$i;
  607.             $arrOrder[$i][0] = '';
  608.             $arrOrder[$i][1] = '';
  609.             $arrOrder[$i][2] = '値引き';
  610.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getTaxableDiscount());
  611.             ++$i;
  612.             $arrOrder[$i][0] = '';
  613.             $arrOrder[$i][1] = '';
  614.             $arrOrder[$i][2] = '合計';
  615.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getTaxableTotal());
  616.             ++$i;
  617.             $arrOrder[$i][0] = '';
  618.             $arrOrder[$i][1] = '';
  619.             $arrOrder[$i][2] = '';
  620.             $arrOrder[$i][3] = '';
  621.             foreach ($orderData->getTaxFreeDiscountItems() as $Item) {
  622.                 ++$i;
  623.                 $arrOrder[$i][0] = '';
  624.                 $arrOrder[$i][1] = '';
  625.                 $arrOrder[$i][2] = $Item->getProductName();
  626.                 $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Item->getTotalPrice());
  627.             }
  628.             ++$i;
  629.             $arrOrder[$i][0] = '';
  630.             $arrOrder[$i][1] = '';
  631.             $arrOrder[$i][2] = '合計金額';
  632.             $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getPaymentTotal());
  633.         }
  634.  
  635.  
  636.         $taxMes '';
  637.         // 消費税率
  638.         foreach ($orderData->getTotalByTaxRate() as $rate => $total) {
  639.             if ($rate == 0) {
  640.                 $taxMes .= '(10%対象: ';
  641.                 $taxMes .= $this->eccubeExtension->getPriceFilter($total);
  642.                 $taxMes .= ' 内消費税: '.$this->eccubeExtension->getPriceFilter(floor( ($total/1.1) * 0.1)  ) . ')';
  643.             }else{
  644.                 $taxMes .= '('.$rate.'%対象: ';
  645.                 $taxMes .= $this->eccubeExtension->getPriceFilter($total);
  646.                 $taxMes .= ' 内消費税: '.$this->eccubeExtension->getPriceFilter(floor( ($total/1.1) * 0.1)  ) . ')';
  647.             }
  648.         }
  649.  
  650.         //dump($arrOrder);
  651.         //dump($formData);
  652.         //dump($taxMes);
  653.         //dump($data);
  654.         
  655.         return [
  656.             'id' => $id,
  657.             'formData' => $formData,
  658.             'arrOrder' => $arrOrder,
  659.             'data' => $data,
  660.             'taxMes' => $taxMes,
  661.             'requestId' => $RequestId,
  662.             'form' => $form->createView(),
  663.             'ErrorMessage' => $ErrorMessage,
  664.         ];
  665.         
  666.     }
  667.     /**
  668.      * 管理者宛にPDFダウンロード完了メールを送信する.
  669.      *
  670.      * @param array $formData
  671.      * @param array $data
  672.      */
  673.     private function sendDownloadCompletionMail(array $formData, array $data): void
  674.     {
  675.         $adminUser $this->getUser();
  676.         $adminName is_object($adminUser) ? $adminUser->getName01() : '不明';
  677.         $adminEmail $this->BaseInfo->getEmail01();
  678.         $pdfFileName $this->claimPdfService->getPdfFileName();
  679.         $orderIds is_array($data['orderIds']) ? implode(','$data['orderIds']) : $data['orderIds'];
  680.         $outputKbn $data['outputKbn'];
  681.         $title $data['title'];
  682.         $outputKbnLabel $this->getOutputKbnLabel($outputKbn); // 出力区分ラベルを取得するメソッド(別途実装)
  683.         if ($adminEmail) {
  684.             $subject '[EC-CUBE] PDFダウンロード完了通知';
  685.             $body $this->renderView('@ClaimPdf42/mail/pdf_download_complete.twig', [
  686.                 'download_date' => new \DateTime(),
  687.                 'admin_name' => $adminName,
  688.                 'file_name' => $pdfFileName,
  689.                 'order_ids' => $orderIds,
  690.                 'output_kbn_label' => $outputKbnLabel,
  691.                 'title' => $title,
  692.             ]);
  693.         // EccubeConfig から送信元アドレスを取得
  694.         $fromEmail $this->BaseInfo->getEmail01();
  695.         $fromName '管理者';
  696.         $from $fromEmail;
  697.         if ($fromName) {
  698.             $from "{$fromName} <{$fromEmail}>";
  699.         }
  700.             $email = (new Email())
  701.                 ->from($from// 修正後の変数を使用
  702.                 ->to($adminEmail)
  703.                 ->subject($subject)
  704.                 ->html($body);
  705.             try {
  706.                 $this->mailer->send($email);
  707.                 log_info('管理者宛にPDFダウンロード完了メールを送信しました。', ['to' => $adminEmail'file_name' => $fileName'order_ids' => $orderIds]);
  708.             } catch (\Throwable $e) {
  709.                 log_error('メール送信に失敗しました。', ['error' => $e->getMessage()]);
  710.             }
  711.         } else {
  712.             log_warning('管理者メールアドレスが設定されていません。PDFダウンロード完了メールの送信に失敗しました。');
  713.         }
  714.     }
  715.     private function getOutputKbnLabel($outputKbn): string
  716.     {
  717.         $config $this->eccubeConfig;
  718.         switch ($outputKbn) {
  719.             case $config->get('eccube_claim_pdf_output_kbn_nouhin'):
  720.                 return '納品書';
  721.             case $config->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
  722.                 return '納品書(送り状付)';
  723.             case $config->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
  724.                 return 'お届け票';
  725.             case $config->get('eccube_claim_pdf_output_kbn_seikyu'):
  726.                 return '請求書';
  727.             case $config->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
  728.                 return '請求書(まとめ)';
  729.             case $config->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
  730.                 return '請求書(会社別まとめ)';
  731.             case $config->get('eccube_claim_pdf_output_kbn_ryosyu'):
  732.                 return '領収書';
  733.             default:
  734.                 return '不明';
  735.         }
  736.     }
  737. }