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

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