領収証発行サービス
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.6KB

  1. <?php
  2. namespace App\Logic\ReceiptIssuingOrder;
  3. use App\Codes\PrefCode;
  4. use App\Events\ReceiptIssuingOrder\DownloadedEvent;
  5. use App\Exceptions\AppCommonException;
  6. use App\Files\PDF\Receipt\A4Receipt;
  7. use App\Files\TmpFile;
  8. use App\Models\ReceiptIssuingOrder;
  9. use App\Models\ReceiptIssuingOrderTax;
  10. use App\Util\DateUtil;
  11. use Barryvdh\Snappy\PdfWrapper;
  12. use PDF;
  13. class PDFDownLoadManager extends ReceiptIssuingOrderManager
  14. {
  15. public function __construct(
  16. protected ReceiptIssuingOrder $order,
  17. ) {
  18. parent::__construct($order);
  19. }
  20. public function downlaodA4()
  21. {
  22. $order = $this->order;
  23. $ret = $this->makeA4()
  24. ->inline();
  25. if ($order->status_receipt_download_datetime === null) {
  26. $order->status_receipt_download_datetime = DateUtil::now();
  27. // イベント登録
  28. DownloadedEvent::dispatch($this->order);
  29. }
  30. $this->save();
  31. return $ret;
  32. }
  33. public function getA4File(): A4Receipt
  34. {
  35. $ret = $this->makeA4()
  36. ->output();
  37. $file = new A4Receipt();
  38. $file->put($ret);
  39. return $file;
  40. }
  41. protected function makeA4(): PdfWrapper
  42. {
  43. $data = $this->getPDFData();
  44. $pdf = PDF::loadView('pdf/receipt_a4', $data);
  45. // はがきサイズを指定
  46. $ret = $pdf->setPaper('A4')
  47. ->setOption('encoding', 'utf-8');
  48. return $ret;
  49. }
  50. public function downlaodLetter()
  51. {
  52. $data = $this->getPDFData();
  53. $pdf = PDF::loadView('pdf/receipt_letter', $data);
  54. // はがきサイズを指定
  55. $ret = $pdf->setOption('page-height', 148)
  56. ->setOption('page-width', 100)
  57. ->setOption('encoding', 'utf-8')
  58. ->inline();
  59. return $ret;
  60. }
  61. protected function getPDFData()
  62. {
  63. $o = $this->order;
  64. $tax = $o->receiptIssuingOrderTaxes->firstOrFail();
  65. return [
  66. ...$this->order->toArray(),
  67. ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => $o->status_receipt_confirm_datetime->format('Y/m/d'),
  68. ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE => $o->receipt_use_date->format('Y/m/d'),
  69. ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => number_format($o->receipt_amount),
  70. 'pref_name' => PrefCode::getName($o->mail_pref_code),
  71. ReceiptIssuingOrderTax::COL_NAME_TAX_RATE => data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE, 0),
  72. ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => number_format(data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT, 0)),
  73. ];
  74. }
  75. }