<?php
/*
* This file is part of Receipt Pdf plugin
*
* Copyright (C) 2018 NinePoint Co. LTD. All Rights Reserved.
*
* Copyright (C) 2016 LOCKON CO.,LTD. All Rights Reserved.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Plugin\ReceiptPdf2\Controller;
use Eccube\Controller\AbstractController;
use Eccube\Repository\OrderPdfRepository;
use Eccube\Repository\ShippingRepository;
use Plugin\ReceiptPdf2\Common\ReceiptPdfCommonData;
use Plugin\ReceiptPdf2\Entity\ReceiptPdfConfig;
use Plugin\ReceiptPdf2\Form\Type\ReceiptPdfType;
use Plugin\ReceiptPdf2\Repository\ReceiptPdfConfigRepository;
use Plugin\ReceiptPdf2\Repository\ReceiptPdfRepository;
use Plugin\ReceiptPdf2\Service\ReceiptPdfService;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class ReceiptPdfController extends AbstractController
{
/** @var ReceiptPdfConfigRepository */
protected $receiptPdfConfigRepository;
/** @var ReceiptPdfService */
protected $receiptPdfService;
/** @var ReceiptPdfRepository */
protected $receiptPdfRepository;
/** @var ShippingRepository */
protected $shippingRepository;
/**
* OrderController constructor.
*
* @param ReceiptPdfConfigRepository $receiptPdfConfigRepository
* @param ReceiptPdfService $receiptPdfService
*
*/
public function __construct(
ReceiptPdfConfigRepository $receiptPdfConfigRepository,
ReceiptPdfService $receiptPdfService,
ReceiptPdfRepository $receiptPdfRepository,
ShippingRepository $shippingRepository
) {
$this->receiptPdfConfigRepository = $receiptPdfConfigRepository;
$this->receiptPdfService = $receiptPdfService;
$this->receiptPdfRepository = $receiptPdfRepository;
$this->shippingRepository = $shippingRepository;
}
/**
* @Route("/%eccube_admin_route%/receipt_pdf2/receipt_pdf", name="plugin_admin_receipt_pdf")
* @Template("@ReceiptPdf2/admin/receipt_pdf.twig")
*
* @param Request $request
*
* @return array|RedirectResponse
*/
public function index(Request $request)
{
// requestから出荷番号IDの一覧を取得する.
$ids = $request->get('ids', []);
if (count($ids) == 0) {
$this->addError('出荷番号IDが取得できませんでした。', 'admin');
log_info('The Order cannot found!');
return $this->redirectToRoute('admin_order');
}
$ReceiptPdfConfig = $this->receiptPdfConfigRepository->find($this->getUser());
$common = new ReceiptPdfCommonData();
if (!$ReceiptPdfConfig) {
$ReceiptPdfConfig = new ReceiptPdfConfig();
$ReceiptPdfConfig
->setTitle($common::DEFAULT_DATA_TITLE)
->setMessage1($common::DEFAULT_DATA_MESSAGE1)
->setMessage2($common::DEFAULT_DATA_MESSAGE2)
->setMessage3($common::DEFAULT_DATA_MESSAGE3);
}
// 複数配送の確認
$is_multiple = 0;
foreach ($ids as $id) {
$Shipping = $this->shippingRepository->find($id);
$Order = $Shipping->getOrder();
if ($Order->isMultiple()) {
++$is_multiple;
}
}
$builder = $this->formFactory->createBuilder(ReceiptPdfType::class, $ReceiptPdfConfig);
$builder->get('is_multiple')->setData($is_multiple)->setDataLocked(true);
$form = $builder->getForm();
// Formへの設定
$form->get('ids')->setData(implode(',', $ids));
return [
'form' => $form->createView(),
];
}
/**
* @Route("/%eccube_admin_route%/receipt_pdf2/admin_receipt_pdf_download", name="admin_receipt_pdf_download")
*
* @param Request $request
*
* @return Response
*/
public function exportPdfDownload(Request $request)
{
file_put_contents('/home/dober/testman.biz/public_html/yamaria-ec-demo/var/log/dev/debug.log', "export pdf\n", FILE_APPEND);
$builder = $this->formFactory->createBuilder(ReceiptPdfType::class);
$form = $builder->getForm();
$form->handleRequest($request);
// Validation
if (!$form->isValid()) {
$this->addError('必要な項目が入力させていません。', 'admin');
log_info('The parameter is invalid!');
// 帳票出力画面を表示
return $this->showReceiptPdf($form);
}
$arrData = $form->getData();
$specification_flg = $form->get('specification_flg')->getData();
$receipt_flg = $form->get('receipt_flg')->getData();
if(($specification_flg != 1) && ($receipt_flg != 1)){
// 帳票出力画面を表示
return $this->showReceiptPdf($form);
}
// 購入情報からPDFを作成する
$status = $this->receiptPdfService->makePdf($arrData);
// 異常終了した場合の処理
if (!$status) {
$this->addError('PDF作成に失敗しました。', 'admin');
log_info('Unable to create pdf files! Process have problems!');
// 帳票出力画面を表示
return $this->showReceiptPdf($form);
}
// 出荷番号をStringからarrayに変換
$ids = explode(',', $arrData['ids']);
// 出荷番号件数をカウント
$countIds = count($ids);
// ダウンロードする
$response = new Response(
$this->receiptPdfService->outputPdf($countIds),
200,
['content-type' => 'application/pdf']
);
$downloadKind = $form->get('download_kind')->getData();
// レスポンスヘッダーにContent-Dispositionをセットし、ファイル名を指定
if ($downloadKind == 1) {
$response->headers->set('Content-Disposition', 'attachment; filename="'.$this->receiptPdfService->getPdfFileName($countIds).'"');
} else {
$response->headers->set('Content-Disposition', 'inline; filename="'.$this->receiptPdfService->getPdfFileName($countIds).'"');
}
log_info('OrderPdf download success!', ['Order ID' => implode(',', $request->get('ids', []))]);
$arrData['admin'] = $this->getUser();
$isSpecificationDataSave = $form->get('default1')->getData();
if ($isSpecificationDataSave == 1) {
// Save input to DB
$this->receiptPdfRepository->specificationDataSave($arrData);
}
$isReceiptDataSave = $form->get('default2')->getData();
if ($isReceiptDataSave == 1) {
// Save input to DB
$this->receiptPdfRepository->receiptDataSave($arrData);
}
return $response;
}
/**
* showReceiptPdf
*/
public function showReceiptPdf($form)
{
$common = new ReceiptPdfCommonData();
//$pluginPath = $this->eccubeConfig->get('plugin_realdir').$common::TWIG_FILE_PATH;
$pluginPath = $common::TWIG_FILE_PATH;
return $this->render($pluginPath, [
'form' => $form->createView(),
]);
}
}