1 | <?php |
||
32 | class OrderPdfService extends TcpdfFpdi |
||
33 | { |
||
34 | /** @var OrderRepository */ |
||
35 | protected $orderRepository; |
||
36 | |||
37 | /** @var ShippingRepository */ |
||
38 | protected $shippingRepository; |
||
39 | |||
40 | /** @var OrderPdfRepository */ |
||
41 | protected $orderPdfRepository; |
||
42 | |||
43 | /** @var TaxRuleService */ |
||
44 | protected $taxRuleService; |
||
45 | |||
46 | /** |
||
47 | * @var Application |
||
48 | */ |
||
49 | private $eccubeConfig; |
||
50 | |||
51 | /** |
||
52 | * @var EccubeExtension |
||
53 | */ |
||
54 | private $eccubeExtension; |
||
55 | |||
56 | // ==================================== |
||
57 | // 定数宣言 |
||
58 | // ==================================== |
||
59 | |||
60 | /** ダウンロードするPDFファイルのデフォルト名 */ |
||
61 | const DEFAULT_PDF_FILE_NAME = 'nouhinsyo.pdf'; |
||
62 | |||
63 | /** FONT ゴシック */ |
||
64 | const FONT_GOTHIC = 'kozgopromedium'; |
||
65 | /** FONT 明朝 */ |
||
66 | const FONT_SJIS = 'kozminproregular'; |
||
67 | |||
68 | // ==================================== |
||
69 | // 変数宣言 |
||
70 | // ==================================== |
||
71 | |||
72 | /** @var BaseInfo */ |
||
73 | public $baseInfoRepository; |
||
74 | |||
75 | /** 購入詳細情報 ラベル配列 |
||
76 | * @var array |
||
77 | */ |
||
78 | private $labelCell = []; |
||
79 | |||
80 | /*** 購入詳細情報 幅サイズ配列 |
||
81 | * @var array |
||
82 | */ |
||
83 | private $widthCell = []; |
||
84 | |||
85 | /** 最後に処理した注文番号 @var string */ |
||
86 | private $lastOrderId = null; |
||
87 | |||
88 | // -------------------------------------- |
||
89 | // Font情報のバックアップデータ |
||
90 | /** @var string フォント名 */ |
||
91 | private $bakFontFamily; |
||
92 | /** @var string フォントスタイル */ |
||
93 | private $bakFontStyle; |
||
94 | /** @var string フォントサイズ */ |
||
95 | private $bakFontSize; |
||
96 | // -------------------------------------- |
||
97 | |||
98 | // lfTextのoffset |
||
99 | private $baseOffsetX = 0; |
||
100 | private $baseOffsetY = -4; |
||
101 | |||
102 | /** ダウンロードファイル名 @var string */ |
||
103 | private $downloadFileName = null; |
||
104 | |||
105 | /** 発行日 @var string */ |
||
106 | private $issueDate = ''; |
||
107 | |||
108 | /** |
||
109 | * OrderPdfService constructor. |
||
110 | * |
||
111 | * @param EccubeConfig $eccubeConfig |
||
112 | * @param OrderRepository $orderRepository |
||
113 | * @param ShippingRepository $shippingRepository |
||
114 | * @param TaxRuleService $taxRuleService |
||
115 | * @param BaseInfoRepository $baseInfoRepository |
||
116 | */ |
||
117 | 28 | public function __construct(EccubeConfig $eccubeConfig, OrderRepository $orderRepository, ShippingRepository $shippingRepository, TaxRuleService $taxRuleService, BaseInfoRepository $baseInfoRepository, EccubeExtension $eccubeExtension) |
|
149 | |||
150 | /** |
||
151 | * 注文情報からPDFファイルを作成する. |
||
152 | * |
||
153 | * @param array $formData |
||
154 | * [KEY] |
||
155 | * ids: 注文番号 |
||
156 | * issue_date: 発行日 |
||
157 | * title: タイトル |
||
158 | * message1: メッセージ1行目 |
||
159 | * message2: メッセージ2行目 |
||
160 | * message3: メッセージ3行目 |
||
161 | * note1: 備考1行目 |
||
162 | * note2: 備考2行目 |
||
163 | * note3: 備考3行目 |
||
164 | * |
||
165 | * @return bool |
||
166 | */ |
||
167 | 3 | public function makePdf(array $formData) |
|
224 | |||
225 | /** |
||
226 | * PDFファイルを出力する. |
||
227 | * |
||
228 | * @return string|mixed |
||
229 | */ |
||
230 | 3 | public function outputPdf() |
|
234 | |||
235 | /** |
||
236 | * PDFファイル名を取得する |
||
237 | * PDFが1枚の時は注文番号をファイル名につける. |
||
238 | * |
||
239 | * @return string ファイル名 |
||
240 | */ |
||
241 | 3 | public function getPdfFileName() |
|
253 | |||
254 | /** |
||
255 | * フッターに発行日を出力する. |
||
256 | */ |
||
257 | 3 | public function Footer() |
|
261 | |||
262 | /** |
||
263 | * 作成するPDFのテンプレートファイルを指定する. |
||
264 | */ |
||
265 | 3 | protected function addPdfPage() |
|
276 | |||
277 | /** |
||
278 | * PDFに店舗情報を設定する |
||
279 | * ショップ名、ロゴ画像以外はdtb_helpに登録されたデータを使用する. |
||
280 | */ |
||
281 | 3 | protected function renderShopData() |
|
308 | |||
309 | /** |
||
310 | * メッセージを設定する. |
||
311 | * |
||
312 | * @param array $formData |
||
313 | */ |
||
314 | 3 | protected function renderMessageData(array $formData) |
|
320 | |||
321 | /** |
||
322 | * PDFに備考を設定数. |
||
323 | * |
||
324 | * @param array $formData |
||
325 | */ |
||
326 | 3 | protected function renderEtcData(array $formData) |
|
346 | |||
347 | /** |
||
348 | * タイトルをPDFに描画する. |
||
349 | * |
||
350 | * @param string $title |
||
351 | */ |
||
352 | 3 | protected function renderTitle($title) |
|
369 | |||
370 | /** |
||
371 | * 購入者情報を設定する. |
||
372 | * |
||
373 | * @param Shipping $Shipping |
||
374 | */ |
||
375 | 3 | protected function renderOrderData(Shipping $Shipping) |
|
425 | |||
426 | /** |
||
427 | * 購入商品詳細情報を設定する. |
||
428 | * |
||
429 | * @param Shipping $Shipping |
||
430 | */ |
||
431 | 3 | protected function renderOrderDetailData(Shipping $Shipping) |
|
432 | { |
||
433 | 3 | $arrOrder = []; |
|
434 | // テーブルの微調整を行うための購入商品詳細情報をarrayに変換する |
||
435 | |||
436 | // ========================================= |
||
437 | // 受注詳細情報 |
||
438 | // ========================================= |
||
439 | 3 | $i = 0; |
|
440 | /* @var OrderItem $OrderItem */ |
||
441 | 3 | foreach ($Shipping->getOrderItems() as $OrderItem) { |
|
442 | // class categoryの生成 |
||
443 | 3 | $classCategory = ''; |
|
444 | /** @var OrderItem $OrderItem */ |
||
445 | 3 | if ($OrderItem->getClassCategoryName1()) { |
|
446 | 3 | $classCategory .= ' [ '.$OrderItem->getClassCategoryName1(); |
|
447 | 3 | if ($OrderItem->getClassCategoryName2() == '') { |
|
448 | 2 | $classCategory .= ' ]'; |
|
449 | } else { |
||
450 | 1 | $classCategory .= ' * '.$OrderItem->getClassCategoryName2().' ]'; |
|
451 | } |
||
452 | } |
||
453 | |||
454 | // product |
||
455 | 3 | $arrOrder[$i][0] = sprintf('%s / %s / %s', $OrderItem->getProductName(), $OrderItem->getProductCode(), $classCategory); |
|
456 | // 購入数量 |
||
457 | 3 | $arrOrder[$i][1] = number_format($OrderItem->getQuantity()); |
|
458 | // 税込金額(単価) |
||
459 | 3 | $arrOrder[$i][2] = $this->eccubeExtension->getPriceFilter($OrderItem->getPrice()); |
|
460 | // 小計(商品毎) |
||
461 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($OrderItem->getTotalPrice()); |
|
462 | |||
463 | 3 | ++$i; |
|
464 | } |
||
465 | |||
466 | 3 | $Order = $Shipping->getOrder(); |
|
467 | |||
468 | // ========================================= |
||
469 | // 小計 |
||
470 | // ========================================= |
||
471 | 3 | $arrOrder[$i][0] = ''; |
|
472 | 3 | $arrOrder[$i][1] = ''; |
|
473 | 3 | $arrOrder[$i][2] = ''; |
|
474 | 3 | $arrOrder[$i][3] = ''; |
|
475 | |||
476 | 3 | ++$i; |
|
477 | 3 | $arrOrder[$i][0] = ''; |
|
478 | 3 | $arrOrder[$i][1] = ''; |
|
479 | 3 | $arrOrder[$i][2] = '商品合計'; |
|
480 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getSubtotal()); |
|
481 | |||
482 | 3 | ++$i; |
|
483 | 3 | $arrOrder[$i][0] = ''; |
|
484 | 3 | $arrOrder[$i][1] = ''; |
|
485 | 3 | $arrOrder[$i][2] = '送料'; |
|
486 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getDeliveryFeeTotal()); |
|
487 | |||
488 | 3 | ++$i; |
|
489 | 3 | $arrOrder[$i][0] = ''; |
|
490 | 3 | $arrOrder[$i][1] = ''; |
|
491 | 3 | $arrOrder[$i][2] = '手数料'; |
|
492 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getCharge()); |
|
493 | |||
494 | 3 | ++$i; |
|
495 | 3 | $arrOrder[$i][0] = ''; |
|
496 | 3 | $arrOrder[$i][1] = ''; |
|
497 | 3 | $arrOrder[$i][2] = '値引き'; |
|
498 | 3 | $arrOrder[$i][3] = '- '.$this->eccubeExtension->getPriceFilter($Order->getDiscount()); |
|
499 | |||
500 | 3 | ++$i; |
|
501 | 3 | $arrOrder[$i][0] = ''; |
|
502 | 3 | $arrOrder[$i][1] = ''; |
|
503 | 3 | $arrOrder[$i][2] = '請求金額'; |
|
504 | 3 | $arrOrder[$i][3] = $this->eccubeExtension->getPriceFilter($Order->getPaymentTotal()); |
|
505 | |||
506 | // PDFに設定する |
||
507 | 3 | $this->setFancyTable($this->labelCell, $arrOrder, $this->widthCell); |
|
508 | } |
||
509 | |||
510 | /** |
||
511 | * PDFへのテキスト書き込み |
||
512 | * |
||
513 | * @param int $x X座標 |
||
514 | * @param int $y Y座標 |
||
515 | * @param string $text テキスト |
||
516 | * @param int $size フォントサイズ |
||
517 | * @param string $style フォントスタイル |
||
518 | */ |
||
519 | 3 | protected function lfText($x, $y, $text, $size = 0, $style = '') |
|
531 | |||
532 | /** |
||
533 | * Colored table. |
||
534 | * |
||
535 | * TODO: 後の列の高さが大きい場合、表示が乱れる。 |
||
536 | * |
||
537 | * @param array $header 出力するラベル名一覧 |
||
538 | * @param array $data 出力するデータ |
||
539 | * @param array $w 出力するセル幅一覧 |
||
540 | */ |
||
541 | 3 | protected function setFancyTable($header, $data, $w) |
|
617 | |||
618 | /** |
||
619 | * 基準座標を設定する. |
||
620 | * |
||
621 | * @param int $x |
||
622 | * @param int $y |
||
623 | */ |
||
624 | 3 | protected function setBasePosition($x = null, $y = null) |
|
635 | |||
636 | /** |
||
637 | * データが設定されていない場合にデフォルト値を設定する. |
||
638 | * |
||
639 | * @param array $formData |
||
640 | */ |
||
641 | 3 | protected function setDefaultData(array &$formData) |
|
656 | |||
657 | /** |
||
658 | * Font情報のバックアップ. |
||
659 | */ |
||
660 | 3 | protected function backupFont() |
|
667 | |||
668 | /** |
||
669 | * Font情報の復元. |
||
670 | */ |
||
671 | 3 | protected function restoreFont() |
|
675 | } |
||
676 |
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..