<?php
namespace Plugin\ClaimPdf42\Controller\ClaimDownload;
use Eccube\Controller\AbstractController;
use Knp\Component\Pager\PaginatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Eccube\Repository\PageRepository;
use Eccube\Repository\ProductRepository;
use Symfony\Component\HttpFoundation\Response;
use Eccube\Repository\OrderRepository;
use Eccube\Entity\BaseInfo;
use Eccube\Entity\Master\ProductStatus;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Eccube\Form\Type\AddCartType;
use Eccube\Form\Type\SearchProductType;
use Eccube\Repository\BaseInfoRepository;
use Eccube\Repository\CustomerFavoriteProductRepository;
use Eccube\Repository\Master\ProductListMaxRepository;
use Eccube\Service\PurchaseFlow\PurchaseContext;
use Eccube\Service\PurchaseFlow\PurchaseFlow;
use Knp\Bundle\PaginatorBundle\Pagination\SlidingPagination;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Eccube\Repository\ShippingRepository;
use Plugin\ClaimPdf42\Entity\ClaimPdf;
use Plugin\ClaimPdf42\Entity\ClaimHistory;
use Plugin\ClaimPdf42\Form\Type\Admin\ClaimPdfType;
use Plugin\ClaimPdf42\Form\Type\Admin\ClaimHistoryType;
use Plugin\ClaimPdf42\Repository\ClaimPdfRepository;
use Plugin\ClaimPdf42\Repository\ClaimHistoryRepository;
use Plugin\ClaimPdf42\Service\ClaimPdfService;
use Plugin\ClaimPdf42\Service\ClaimViewService;
use Eccube\Twig\Extension\EccubeExtension;
use Eccube\Common\EccubeConfig;
use Eccube\Service\MailService;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
// ページ表示作業
// dtb_page
// 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');
// dtb_page_layout
// page_id を 合わせるために、dtb_page_layout の page_id を 162 にする必要があります。
// INSERT INTO `dtb_page_layout` (``, `layout_id`, `sort_no`, `discriminator_type`) VALUES (162, 2, 129, 'pagelayout');
class ClaimDownloadController extends AbstractController
{
/**
* @var OrderRepository
*/
protected $orderRepository;
/**
* MypageController constructor.
*
* @param OrderRepository $orderRepository
*/
/**
* @var ClaimHistoryRepository
*/
protected $ClaimHistoryRepository;
/**
* @var ClaimPdfService
*/
protected $claimPdfService;
/**
* @var ClaimViewService
*/
protected $claimViewService;
/**
* @var EccubeConfig
*/
protected $eccubeConfig;
/**
* @var EccubeExtension
*/
private $eccubeExtension;
private $mailService;
/**
* @var BaseInfo
*/
protected $BaseInfo;
private $mailer;
public function __construct(
ClaimViewService $claimViewService,
PageRepository $pageRepository,
ProductRepository $productRepository,
OrderRepository $orderRepository,
ClaimHistoryRepository $claimHistoryRepository,
shippingRepository $shippingRepository,
ClaimPdfService $claimPdfService,
EccubeExtension $eccubeExtension,
EccubeConfig $eccubeConfig,
MailService $mailService,
BaseInfoRepository $baseInfoRepository,
MailerInterface $mailer
){
$this->pageRepository = $pageRepository;
$this->productRepository = $productRepository;
$this->orderRepository = $orderRepository;
$this->claimHistoryRepository = $claimHistoryRepository;
$this->shippingRepository = $shippingRepository;
$this->claimPdfService = $claimPdfService;
$this->claimViewService = $claimViewService;
$this->eccubeConfig = $eccubeConfig;
$this->eccubeExtension = $eccubeExtension;
$this->mailService = $mailService;
$this->BaseInfo = $baseInfoRepository->get();
$this->mailer = $mailer;
}
/**
* @Route("/ClaimeDownload/{id}/", name="claim_download")
* @Template("web/ClaimDownload.twig")
*/
public function index(Request $request, $id)
{
$RequestId = $id;
$ErrorMessage = null;
// paginator
//オーダー情報がない場合
$Order = $this->orderRepository->findBy(['pre_order_id'=>$id]);
if (!$Order) {
$ErrorMessage = '受注情報が存在しません';
return [
'ErrorMessage' => $ErrorMessage,
];
}
//ショッピング情報がない場合
$Shopping = $Order[0]->getShippings()->first();
if (!$Shopping) {
$ErrorMessage = '受注情報が存在しません';
return [
'ErrorMessage' => $ErrorMessage,
];
}
$History = $this->claimHistoryRepository->findBy(['pre_order_id'=>$id]);
if($History){
$ErrorMessage = '領収書は発行済みです';
return [
'ErrorMessage' => $ErrorMessage,
];
}
$ids[] = $Shopping->getId();
$orderId_tmp = "";
$orderId_cnt = 0;
// 受注ID配列テーブルを作成する
foreach ($ids as $id) {
// 出荷番号から出荷情報を取得する
$Shipping = $this->shippingRepository->find($id);
// 出荷情報から受注情報を取得する
$orderData_tmp = $Shipping->getOrder();
// 設定条件:初回または同一受注番号でない場合(複数配送の場合は同一受注番号が複数存在する)
if ($orderId_tmp == "" or $orderId_tmp != $orderData_tmp->getId()) {
// 受注番号を取得して設定
$orderIdDatas[$orderId_cnt] = $orderData_tmp->getId();
$orderId_tmp = $orderIdDatas[$orderId_cnt];
$orderId_cnt++;
}
}
/** @var ClaimPdf $ClaimPdf */
$ClaimPdf = $this->claimHistoryRepository->findBy([ 'shipping_id' => $this->getUser() ]);
if (empty($ClaimPdf)) {
$ClaimPdf = new ClaimPdf();
$ClaimPdf
->setTitleNouhin(trans('admin.order.delivery_note_title_nouhin__default'))
->setMessage1Nouhin(trans('admin.order.delivery_note_message__default1'))
->setMessage2Nouhin(trans('admin.order.delivery_note_message__default2'))
->setMessage3Nouhin(trans('admin.order.delivery_note_message__default3'))
->setTitleNouhinShipping(trans('admin.order.delivery_note_title_otodoke__default'))
->setMessage1NouhinShipping(trans('admin.order.delivery_note_message__default7'))
->setMessage2NouhinShipping(trans('admin.order.delivery_note_message__default8'))
->setMessage3NouhinShipping(trans(''))
->setTitleOtodoke(trans('admin.order.delivery_note_title_otodoke__default'))
->setMessage1Otodoke(trans('admin.order.delivery_note_message__default7'))
->setMessage2Otodoke(trans('admin.order.delivery_note_message__default8'))
->setMessage3Otodoke(trans(''))
->setTitleSeikyu(trans('admin.order.delivery_note_title_seikyu__default'))
->setMessage1Seikyu(trans('admin.order.delivery_note_message__default4'))
->setMessage2Seikyu(trans('admin.order.delivery_note_message__default5'))
->setMessage3Seikyu(trans('admin.order.delivery_note_message__default6'))
->setHurikomiBank(trans(''))
->setHurikomiBankSiten(trans(''))
->setHurikomiBankKouza(trans(''))
->setHurikomiFreeArea(trans(''));
}
/**
* @var FormBuilder
*/
$builder = $this->formFactory->createBuilder(ClaimHistoryType::class, $ClaimPdf);
/* @var \Symfony\Component\Form\Form $form */
$form = $builder->getForm();
// Formへの設定
$form->get('ids')->setData(implode(',', $ids));
$form->get('orderids')->setData(implode(',', $orderIdDatas));
//$form->get('orderdatetime_st')->setData($orderDatetimeStart);
//$form->get('orderdatetime_en')->setData($orderDatetimeEnd);
return [
'requestId' => $RequestId,
'form' => $form->createView(),
'ErrorMessage' => $ErrorMessage,
];
}
/**
* @Route("/ClaimeDownload/download", name="claimpdf_download_pdf")
* @Template("web/ClaimDownload.twig")
*
* @param Request $request
*
* @return Response
*/
public function exportClaimPdfDownload(Request $request)
{
/**
* @var FormBuilder
*/
$builder = $this->formFactory->createBuilder(ClaimHistoryType::class);
/* @var \Symfony\Component\Form\Form $form */
$form = $builder->getForm();
$form->handleRequest($request);
// Validation
if (!$form->isValid()) {
log_info('The parameter is invalid!');
return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
'form' => $form->createView(),
]);
}
$formData = $form->getData();
$data = array();
$data["orderDatetime"]["st"] = $form->get('orderdatetime_st')->getData();
$data["orderDatetime"]["en"] = $form->get('orderdatetime_en')->getData();
$data["orderIds"] = $form->get('orderids')->getData();
$data["outputKbn"] = $form->get('outputkbn')->getData();
$data["title"] = $form->get('title')->getData();
$data["message1"] = $form->get('message1')->getData();
$data["message2"] = $form->get('message2')->getData();
$data["message3"] = $form->get('message3')->getData();
$data["atenaKbn"] = $form->get('ryosyu_atena')->getData();
$data["ryosyu_add_company"] = $form->get('ryosyu_add_company')->getData(); // 会社名追加@hanari
$data["ryosyu_add_name"] = $form->get('ryosyu_add_name')->getData(); // 宛名追加@hanari
$OrderId = $form->get('orderids')->getData();
$Order = $this->orderRepository->find(['id'=> $OrderId ]);
$formData['shipping_id'] = $formData['ids'];
$formData['order_id'] = $Order->getId();
$formData['pre_order_id'] = $Order->getPreOrderId();
// 出力帳票により処理を振り分ける
switch($data["outputKbn"]) {
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin'):
$formData['title_nouhin'] = $data["title"];
$formData['message1_nouhin'] = $data["message1"];
$formData['message2_nouhin'] = $data["message2"];
$formData['message3_nouhin'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
$formData['title_nouhin_shipping'] = $data["title"];
$formData['message1_nouhin_shipping'] = $data["message1"];
$formData['message2_nouhin_shipping'] = $data["message2"];
$formData['message3_nouhin_shipping'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
$formData['title_otodoke'] = $data["title"];
$formData['message1_otodoke'] = $data["message1"];
$formData['message2_otodoke'] = $data["message2"];
$formData['message3_otodoke'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_ryosyu'):
break;
default:
}
// 購入情報からPDFを作成する
$status = $this->claimPdfService->makePdf($formData, $data);
// 異常終了した場合の処理
if (!$status) {
$this->addError('admin.order.delivery_note_download_error', 'admin');
log_info('Unable to create pdf files! Process have problems!');
return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
'form' => $form->createView(),
]);
}
// ダウンロードする
$response = new Response(
$this->claimPdfService->outputPdf(),
200,
['content-type' => 'application/pdf']
);
$downloadKind = $form->get('download_kind')->getData();
// レスポンスヘッダーにContent-Dispositionをセットし、ファイル名を指定
if ($downloadKind == 1) {
$response->headers->set('Content-Disposition', 'attachment; filename="'.$this->claimPdfService->getPdfFileName().'"');
} else {
$response->headers->set('Content-Disposition', 'inline; filename="'.$this->claimPdfService->getPdfFileName().'"');
}
log_info('ClaimPdf download success!', ['Order ID' => implode(',', $request->get('ids', []))]);
$isDefault = isset($formData['default']) ? $formData['default'] : false;
//データをセーブ
$user = $this->getUser();
if(!$user){
$user = 'gest';
}
$formData['admin'] = $user;
$this->claimHistoryRepository->save($formData);
// PDFダウンロード完了メールを送信
$this->sendDownloadCompletionMail($formData, $data);
return $response;
}
/**
* @Route("/ClaimeDownload/{id}/view/", name="claimpdf_download_pdf_view")
* @Template("web/ClaimDownloadView.twig")
*
* @param Request $request
*
* @return Response
*/
public function exportClaimPdfview(Request $request, $id)
{
$RequestId = $id;
$ErrorMessage = null;
// paginator
//オーダー情報がない場合
$Order = $this->orderRepository->findBy(['pre_order_id'=>$id]);
if (!$Order) {
$ErrorMessage = '受注情報が存在しません';
return [
'ErrorMessage' => $ErrorMessage,
];
}
//ショッピング情報がない場合
$Shopping = $Order[0]->getShippings()->first();
if (!$Shopping) {
$ErrorMessage = '受注情報が存在しません';
return [
'ErrorMessage' => $ErrorMessage,
];
}
$History = $this->claimHistoryRepository->findBy(['pre_order_id'=>$id]);
if($History){
$ErrorMessage = '領収書は発行済みです';
return [
'ErrorMessage' => $ErrorMessage,
];
}
/**
* @var FormBuilder
*/
$builder = $this->formFactory->createBuilder(ClaimHistoryType::class);
/* @var \Symfony\Component\Form\Form $form */
$form = $builder->getForm();
$form->handleRequest($request);
// Validation
if (!$form->isValid()) {
log_info('The parameter is invalid!');
return $this->render('@ClaimPdf42/ClaimDownload/claimpdf.twig', [
'form' => $form->createView(),
]);
}
$formData = $form->getData();
$data = array();
$data["orderDatetime"]["st"] = $form->get('orderdatetime_st')->getData();
$data["orderDatetime"]["en"] = $form->get('orderdatetime_en')->getData();
$data["orderIds"] = $form->get('orderids')->getData();
$data["outputKbn"] = $form->get('outputkbn')->getData();
$data["title"] = $form->get('title')->getData();
$data["message1"] = $form->get('message1')->getData();
$data["message2"] = $form->get('message2')->getData();
$data["message3"] = $form->get('message3')->getData();
$data["atenaKbn"] = $form->get('ryosyu_atena')->getData();
$data["ryosyu_add_company"] = $form->get('ryosyu_add_company')->getData(); // 会社名追加@hanari
$data["ryosyu_add_name"] = $form->get('ryosyu_add_name')->getData(); // 宛名追加@hanari
// 出力帳票により処理を振り分ける
switch($data["outputKbn"]) {
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin'):
$formData['title_nouhin'] = $data["title"];
$formData['message1_nouhin'] = $data["message1"];
$formData['message2_nouhin'] = $data["message2"];
$formData['message3_nouhin'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
$formData['title_nouhin_shipping'] = $data["title"];
$formData['message1_nouhin_shipping'] = $data["message1"];
$formData['message2_nouhin_shipping'] = $data["message2"];
$formData['message3_nouhin_shipping'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
$formData['title_otodoke'] = $data["title"];
$formData['message1_otodoke'] = $data["message1"];
$formData['message2_otodoke'] = $data["message2"];
$formData['message3_otodoke'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
$formData['title_seikyu'] = $data["title"];
$formData['message1_seikyu'] = $data["message1"];
$formData['message2_seikyu'] = $data["message2"];
$formData['message3_seikyu'] = $data["message3"];
break;
case $this->eccubeConfig->get('eccube_claim_pdf_output_kbn_ryosyu'):
break;
default:
}
// 購入情報からPDFを作成する
//$status = $this->claimViewService->makePdf($formData, $data);
// 受注番号をStringからarrayに変換
$orderIdDatas = explode(',', $data["orderIds"]);
foreach ($orderIdDatas as $orderId) {
//dump($orderId);
// 受注番号から受注情報を取得する
$orderData = $this->orderRepository->find($orderId);
// 総合計金額
$data['paymentTotalText'] = $this->eccubeExtension->getPriceFilter($orderData->getPaymentTotal());
// ご注文日
$date_tmp = $orderData->getCreateDate()->format('Y/m/d H:i');
if ($orderData->getOrderDate()) {
$date_tmp = $orderData->getOrderDate()->format('Y/m/d');
}
$data['orderDate'] = '[ ご注文日 ]' . $date_tmp;
// 注文番号
$data['orderId'] = '[ 注文番号 ]' . $orderData->getId();
//dump($orderData);
$arrOrder = array();
// =========================================
// 受注詳細情報
// =========================================
$i = 0;
$proTax10 = 0;
$proTax08 = 0;
foreach ($orderData->getItems() as $OrderItem) {
//dump($OrderItem);
// 以下の条件の場合は、処理をスキップする(画面非表示処理)
// 商品明細以外の明細の場合
if ($OrderItem->isProduct() == false) {
continue;
}
// class categoryの生成
$classCategory = '';
/** @var OrderItem $OrderItem */
if ($OrderItem->getClassCategoryName1()) {
$classCategory .= ' [ '.$OrderItem->getClassCategoryName1();
if ($OrderItem->getClassCategoryName2() == '') {
$classCategory .= ' ]';
} else {
$classCategory .= ' * '.$OrderItem->getClassCategoryName2().' ]';
}
}
// product
$productName = $OrderItem->getProductName();
if (null !== $OrderItem->getProductCode()) {
$productName .= ' / '.$OrderItem->getProductCode();
}
if ($classCategory) {
$productName .= ' / '.$classCategory;
}
// 軽減税率対応
$proNameCate = "";
switch($OrderItem->getTaxRate()) {
case $this->eccubeConfig->get('eccube_claim_pdf_taxrate_10'):
$proNameCate = $productName;
$proTax10 = $proTax10 + $OrderItem->getTotalPrice();
break;
case $this->eccubeConfig->get('eccube_claim_pdf_taxrate_08'):
$proNameCate = $productName.' ※';
$proTax08 = $proTax08 + $OrderItem->getTotalPrice();
break;
default:
$proNameCate = $productName;
}
$arrOrder[$i][0] = $proNameCate;
// 購入数量
$arrOrder[$i][1] = number_format($OrderItem->getQuantity());
// 単価(税込)
$arrOrder[$i][2] = $this->eccubeExtension->getPriceFilter($OrderItem->getPriceIncTax());
// 小計(商品毎)
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($OrderItem->getTotalPrice());
++$i;
}
// =========================================
// 小計
// =========================================
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '';
$arrOrder[$i][3] = '';
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '商品合計';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getSubtotal());
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '送料';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getDeliveryFeeTotal());
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '手数料';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getCharge());
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '値引き';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getTaxableDiscount());
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '合計';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getTaxableTotal());
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '';
$arrOrder[$i][3] = '';
foreach ($orderData->getTaxFreeDiscountItems() as $Item) {
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = $Item->getProductName();
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Item->getTotalPrice());
}
++$i;
$arrOrder[$i][0] = '';
$arrOrder[$i][1] = '';
$arrOrder[$i][2] = '合計金額';
$arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($orderData->getPaymentTotal());
}
$taxMes = '';
foreach ($orderData->getTotalByTaxRate() as $rate => $total) {
$taxMes .= '('.$rate.'%対象: ';
$taxMes .= $this->eccubeExtension->getPriceFilter($total);
$taxMes .= ' 内消費税: '.$this->eccubeExtension->getPriceFilter($orderData->getTaxByTaxRate()[$rate]).')';
}
dump($arrOrder);
dump($formData);
dump($taxMes);
dump($data);
return [
'id' => $id,
'formData' => $formData,
'arrOrder' => $arrOrder,
'data' => $data,
'taxMes' => $taxMes,
'requestId' => $RequestId,
'form' => $form->createView(),
'ErrorMessage' => $ErrorMessage,
];
}
/**
* 管理者宛にPDFダウンロード完了メールを送信する.
*
* @param array $formData
* @param array $data
*/
private function sendDownloadCompletionMail(array $formData, array $data): void
{
$adminUser = $this->getUser();
$adminName = is_object($adminUser) ? $adminUser->getName01() : '不明';
$adminEmail = $this->BaseInfo->getEmail01();
$pdfFileName = $this->claimPdfService->getPdfFileName();
$orderIds = is_array($data['orderIds']) ? implode(',', $data['orderIds']) : $data['orderIds'];
$outputKbn = $data['outputKbn'];
$title = $data['title'];
$outputKbnLabel = $this->getOutputKbnLabel($outputKbn); // 出力区分ラベルを取得するメソッド(別途実装)
if ($adminEmail) {
$subject = '[EC-CUBE] PDFダウンロード完了通知';
$body = $this->renderView('@ClaimPdf42/mail/pdf_download_complete.twig', [
'download_date' => new \DateTime(),
'admin_name' => $adminName,
'file_name' => $pdfFileName,
'order_ids' => $orderIds,
'output_kbn_label' => $outputKbnLabel,
'title' => $title,
]);
// EccubeConfig から送信元アドレスを取得
$fromEmail = $this->BaseInfo->getEmail01();
$fromName = '管理者';
$from = $fromEmail;
if ($fromName) {
$from = "{$fromName} <{$fromEmail}>";
}
$email = (new Email())
->from($from) // 修正後の変数を使用
->to($adminEmail)
->subject($subject)
->html($body);
try {
$this->mailer->send($email);
log_info('管理者宛にPDFダウンロード完了メールを送信しました。', ['to' => $adminEmail, 'file_name' => $fileName, 'order_ids' => $orderIds]);
} catch (\Throwable $e) {
log_error('メール送信に失敗しました。', ['error' => $e->getMessage()]);
}
} else {
log_warning('管理者メールアドレスが設定されていません。PDFダウンロード完了メールの送信に失敗しました。');
}
}
private function getOutputKbnLabel($outputKbn): string
{
$config = $this->eccubeConfig;
switch ($outputKbn) {
case $config->get('eccube_claim_pdf_output_kbn_nouhin'):
return '納品書';
case $config->get('eccube_claim_pdf_output_kbn_nouhin_shipping'):
return '納品書(送り状付)';
case $config->get('eccube_claim_pdf_output_kbn_nouhin_otodoke'):
return 'お届け票';
case $config->get('eccube_claim_pdf_output_kbn_seikyu'):
return '請求書';
case $config->get('eccube_claim_pdf_output_kbn_seikyu_matome'):
return '請求書(まとめ)';
case $config->get('eccube_claim_pdf_output_kbn_seikyu_matome_company'):
return '請求書(会社別まとめ)';
case $config->get('eccube_claim_pdf_output_kbn_ryosyu'):
return '領収書';
default:
return '不明';
}
}
}