1 | <?php |
||
31 | class OrderPdfService extends TcpdfFpdi |
||
32 | { |
||
33 | /** @var OrderRepository */ |
||
34 | protected $orderRepository; |
||
35 | |||
36 | /** @var OrderPdfRepository */ |
||
37 | protected $orderPdfRepository; |
||
38 | |||
39 | /** @var TaxRuleService */ |
||
40 | protected $taxRuleService; |
||
41 | /** |
||
42 | * @var Application |
||
43 | */ |
||
44 | private $eccubeConfig; |
||
45 | |||
46 | /** |
||
47 | * @var EccubeExtension |
||
48 | */ |
||
49 | private $eccubeExtension; |
||
50 | |||
51 | // ==================================== |
||
52 | // 定数宣言 |
||
53 | // ==================================== |
||
54 | |||
55 | /** ダウンロードするPDFファイルのデフォルト名 */ |
||
56 | const DEFAULT_PDF_FILE_NAME = 'nouhinsyo.pdf'; |
||
57 | |||
58 | /** FONT ゴシック */ |
||
59 | const FONT_GOTHIC = 'kozgopromedium'; |
||
60 | /** FONT 明朝 */ |
||
61 | const FONT_SJIS = 'kozminproregular'; |
||
62 | |||
63 | // ==================================== |
||
64 | // 変数宣言 |
||
65 | // ==================================== |
||
66 | |||
67 | /** @var BaseInfo */ |
||
68 | public $baseInfoRepository; |
||
69 | |||
70 | /** 購入詳細情報 ラベル配列 |
||
71 | * @var array |
||
72 | */ |
||
73 | private $labelCell = []; |
||
74 | |||
75 | /*** 購入詳細情報 幅サイズ配列 |
||
76 | * @var array |
||
77 | */ |
||
78 | private $widthCell = []; |
||
79 | |||
80 | /** 最後に処理した注文番号 @var string */ |
||
81 | private $lastOrderId = null; |
||
82 | |||
83 | // -------------------------------------- |
||
84 | // Font情報のバックアップデータ |
||
85 | /** @var string フォント名 */ |
||
86 | private $bakFontFamily; |
||
87 | /** @var string フォントスタイル */ |
||
88 | private $bakFontStyle; |
||
89 | /** @var string フォントサイズ */ |
||
90 | private $bakFontSize; |
||
91 | // -------------------------------------- |
||
92 | |||
93 | // lfTextのoffset |
||
94 | private $baseOffsetX = 0; |
||
95 | private $baseOffsetY = -4; |
||
96 | |||
97 | /** ダウンロードファイル名 @var string */ |
||
98 | private $downloadFileName = null; |
||
99 | |||
100 | /** 発行日 @var string */ |
||
101 | private $issueDate = ''; |
||
102 | |||
103 | /** |
||
104 | * OrderPdfService constructor. |
||
105 | * |
||
106 | * @param EccubeConfig $eccubeConfig |
||
107 | * @param OrderRepository $orderRepository |
||
108 | * @param TaxRuleService $taxRuleService |
||
109 | * @param BaseInfoRepository $baseInfoRepository |
||
110 | */ |
||
111 | 28 | public function __construct(EccubeConfig $eccubeConfig, OrderRepository $orderRepository, TaxRuleService $taxRuleService, BaseInfoRepository $baseInfoRepository, EccubeExtension $eccubeExtension) |
|
142 | |||
143 | /** |
||
144 | * 注文情報からPDFファイルを作成する. |
||
145 | * |
||
146 | * @param array $formData |
||
147 | * [KEY] |
||
148 | * ids: 注文番号 |
||
149 | * issue_date: 発行日 |
||
150 | * title: タイトル |
||
151 | * message1: メッセージ1行目 |
||
152 | * message2: メッセージ2行目 |
||
153 | * message3: メッセージ3行目 |
||
154 | * note1: 備考1行目 |
||
155 | * note2: 備考2行目 |
||
156 | * note3: 備考3行目 |
||
157 | * |
||
158 | * @return bool |
||
159 | */ |
||
160 | 3 | public function makePdf(array $formData) |
|
217 | |||
218 | /** |
||
219 | * PDFファイルを出力する. |
||
220 | * |
||
221 | * @return string|mixed |
||
222 | */ |
||
223 | 3 | public function outputPdf() |
|
227 | |||
228 | /** |
||
229 | * PDFファイル名を取得する |
||
230 | * PDFが1枚の時は注文番号をファイル名につける. |
||
231 | * |
||
232 | * @return string ファイル名 |
||
233 | */ |
||
234 | 3 | public function getPdfFileName() |
|
246 | |||
247 | /** |
||
248 | * フッターに発行日を出力する. |
||
249 | */ |
||
250 | 3 | public function Footer() |
|
254 | |||
255 | /** |
||
256 | * 作成するPDFのテンプレートファイルを指定する. |
||
257 | */ |
||
258 | 3 | protected function addPdfPage() |
|
269 | |||
270 | /** |
||
271 | * PDFに店舗情報を設定する |
||
272 | * ショップ名、ロゴ画像以外はdtb_helpに登録されたデータを使用する. |
||
273 | */ |
||
274 | 3 | protected function renderShopData() |
|
301 | |||
302 | /** |
||
303 | * メッセージを設定する. |
||
304 | * |
||
305 | * @param array $formData |
||
306 | */ |
||
307 | 3 | protected function renderMessageData(array $formData) |
|
313 | |||
314 | /** |
||
315 | * PDFに備考を設定数. |
||
316 | * |
||
317 | * @param array $formData |
||
318 | */ |
||
319 | 3 | protected function renderEtcData(array $formData) |
|
339 | |||
340 | /** |
||
341 | * タイトルをPDFに描画する. |
||
342 | * |
||
343 | * @param string $title |
||
344 | */ |
||
345 | 3 | protected function renderTitle($title) |
|
362 | |||
363 | /** |
||
364 | * 購入者情報を設定する. |
||
365 | * |
||
366 | * @param Order $Order |
||
367 | */ |
||
368 | 3 | protected function renderOrderData(Order $Order) |
|
416 | |||
417 | /** |
||
418 | * 購入商品詳細情報を設定する. |
||
419 | * |
||
420 | * @param Order $Order |
||
421 | */ |
||
422 | 3 | protected function renderOrderDetailData(Order $Order) |
|
423 | { |
||
424 | 3 | $arrOrder = []; |
|
425 | // テーブルの微調整を行うための購入商品詳細情報をarrayに変換する |
||
426 | |||
427 | // ========================================= |
||
428 | // 受注詳細情報 |
||
429 | // ========================================= |
||
430 | 3 | $i = 0; |
|
431 | /* @var OrderItem $OrderItem */ |
||
432 | 3 | foreach ($Order->getOrderItems() as $OrderItem) { |
|
433 | // class categoryの生成 |
||
434 | 3 | $classCategory = ''; |
|
435 | /** @var OrderItem $OrderItem */ |
||
436 | 3 | if ($OrderItem->getClassCategoryName1()) { |
|
437 | 3 | $classCategory .= ' [ '.$OrderItem->getClassCategoryName1(); |
|
438 | 3 | if ($OrderItem->getClassCategoryName2() == '') { |
|
439 | $classCategory .= ' ]'; |
||
440 | } else { |
||
441 | 3 | $classCategory .= ' * '.$OrderItem->getClassCategoryName2().' ]'; |
|
442 | } |
||
443 | } |
||
444 | // 税 |
||
445 | 3 | $tax = $this->taxRuleService->calcTax($OrderItem->getPrice(), $OrderItem->getTaxRate(), \Eccube\Entity\Master\RoundingType::ROUND); |
|
446 | 3 | $OrderItem->setPriceIncTax($OrderItem->getPrice() + $tax); |
|
447 | |||
448 | // product |
||
449 | 3 | $arrOrder[$i][0] = sprintf('%s / %s / %s', $OrderItem->getProductName(), $OrderItem->getProductCode(), $classCategory); |
|
450 | // 購入数量 |
||
451 | 3 | $arrOrder[$i][1] = number_format($OrderItem->getQuantity()); |
|
452 | // 税込金額(単価) |
||
453 | 3 | $arrOrder[$i][2] = $this->eccubeExtension->getPriceFilter($OrderItem->getPriceIncTax()); |
|
454 | // 小計(商品毎) |
||
455 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($OrderItem->getTotalPrice()); |
|
456 | |||
457 | 3 | ++$i; |
|
458 | } |
||
459 | |||
460 | // ========================================= |
||
461 | // 小計 |
||
462 | // ========================================= |
||
463 | 3 | $arrOrder[$i][0] = ''; |
|
464 | 3 | $arrOrder[$i][1] = ''; |
|
465 | 3 | $arrOrder[$i][2] = ''; |
|
466 | 3 | $arrOrder[$i][3] = ''; |
|
467 | |||
468 | 3 | ++$i; |
|
469 | 3 | $arrOrder[$i][0] = ''; |
|
470 | 3 | $arrOrder[$i][1] = ''; |
|
471 | 3 | $arrOrder[$i][2] = '商品合計'; |
|
472 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getSubtotal()); |
|
473 | |||
474 | 3 | ++$i; |
|
475 | 3 | $arrOrder[$i][0] = ''; |
|
476 | 3 | $arrOrder[$i][1] = ''; |
|
477 | 3 | $arrOrder[$i][2] = '送料'; |
|
478 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getDeliveryFeeTotal()); |
|
479 | |||
480 | 3 | ++$i; |
|
481 | 3 | $arrOrder[$i][0] = ''; |
|
482 | 3 | $arrOrder[$i][1] = ''; |
|
483 | 3 | $arrOrder[$i][2] = '手数料'; |
|
484 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getCharge()); |
|
485 | |||
486 | 3 | ++$i; |
|
487 | 3 | $arrOrder[$i][0] = ''; |
|
488 | 3 | $arrOrder[$i][1] = ''; |
|
489 | 3 | $arrOrder[$i][2] = '値引き'; |
|
490 | 3 | $arrOrder[$i][3] = '- '.$this->eccubeExtension->getPriceFilter($Order->getDiscount()); |
|
491 | |||
492 | 3 | ++$i; |
|
493 | 3 | $arrOrder[$i][0] = ''; |
|
494 | 3 | $arrOrder[$i][1] = ''; |
|
495 | 3 | $arrOrder[$i][2] = '請求金額'; |
|
496 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getPaymentTotal()); |
|
497 | |||
498 | // PDFに設定する |
||
499 | 3 | $this->setFancyTable($this->labelCell, $arrOrder, $this->widthCell); |
|
500 | } |
||
501 | |||
502 | /** |
||
503 | * PDFへのテキスト書き込み |
||
504 | * |
||
505 | * @param int $x X座標 |
||
506 | * @param int $y Y座標 |
||
507 | * @param string $text テキスト |
||
508 | * @param int $size フォントサイズ |
||
509 | * @param string $style フォントスタイル |
||
510 | */ |
||
511 | 3 | protected function lfText($x, $y, $text, $size = 0, $style = '') |
|
523 | |||
524 | /** |
||
525 | * Colored table. |
||
526 | * |
||
527 | * TODO: 後の列の高さが大きい場合、表示が乱れる。 |
||
528 | * |
||
529 | * @param array $header 出力するラベル名一覧 |
||
530 | * @param array $data 出力するデータ |
||
531 | * @param array $w 出力するセル幅一覧 |
||
532 | */ |
||
533 | 3 | protected function setFancyTable($header, $data, $w) |
|
609 | |||
610 | /** |
||
611 | * 基準座標を設定する. |
||
612 | * |
||
613 | * @param int $x |
||
614 | * @param int $y |
||
615 | */ |
||
616 | 3 | protected function setBasePosition($x = null, $y = null) |
|
627 | |||
628 | /** |
||
629 | * データが設定されていない場合にデフォルト値を設定する. |
||
630 | * |
||
631 | * @param array $formData |
||
632 | */ |
||
633 | 3 | protected function setDefaultData(array &$formData) |
|
648 | |||
649 | /** |
||
650 | * Font情報のバックアップ. |
||
651 | */ |
||
652 | 3 | protected function backupFont() |
|
659 | |||
660 | /** |
||
661 | * Font情報の復元. |
||
662 | */ |
||
663 | 3 | protected function restoreFont() |
|
667 | } |
||
668 |
Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.
Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..