diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php b/app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterController.php similarity index 94% rename from app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php rename to app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterController.php index fa8a187..dd6e5cf 100644 --- a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php +++ b/app/Http/Controllers/Web/Custom/HelloTechno/DownloadLetterController.php @@ -1,6 +1,6 @@ roleAllow(UserRole::NORMAL_ADMIN); + } + + protected function getParam(): IParam + { + return $this->param; + } + + protected function run(Request $request): Response + { + $param = $this->param; + + $a = $param->toArray(); + try { + $this->transaction->beginTransaction(); + + $targets = $this->repository->get( + [ + ...$param->toArray(), + ReceiptIssuingOrderRepository::CONDITION_CONTRACT_ID => $this->loginUser()->getCurrentContractId(), + ReceiptIssuingOrderRepository::CONDITION_IS_CONFIRMED => true, + ReceiptIssuingOrderRepository::CONDITION_HAS_MAILORDER => true, + ] + ); + $models = ReceiptIssuingOrder::findMany(Arr::pluck($targets, ReceiptIssuingOrder::COL_NAME_ID)); + + $documents = $this->manager->initForDownloadLetters()->downlaodLetters($models); + + $this->updatePostDate($models); + + $this->transaction->commit(); + } catch (Exception $e) { + $this->transaction->rollBack(); + throw $e; + } + + + return $documents; + } + + private function updatePostDate(Collection $models) + { + + foreach ($models as $order) { + + $manager = UpdateManager::instance(); + + $messages = $manager->initById($order->id) + ->mailPosted(DateUtil::now()) + ->update(); + + if (count($messages) !== 0) { + throw new AppCommonException(Arr::first($messages)); + } + } + } +} diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersParam.php b/app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersParam.php new file mode 100644 index 0000000..e16f950 --- /dev/null +++ b/app/Http/Controllers/Web/Custom/HelloTechno/DownloadLettersParam.php @@ -0,0 +1,12 @@ +initialized = true; + return $this; + } + public function initByToken(string $token) { parent::initByToken($token); @@ -32,11 +41,45 @@ class PDFDownLoadManagerHelloTechno extends PDFDownLoadManager return $this; } - protected function getPDFData() + /** + * @param Collection $list + */ + public function downlaodLetters(Collection $list) { + + $data = []; + foreach ($list as $ele) { + $data[] = $this->getPDFData($ele); + } + + $pdf = PDF::loadView('pdf/receipt_letters', [ + 'orders' => $data + ]); + // はがきサイズを指定 + $ret = $pdf->setOption('page-height', 148) + ->setOption('page-width', 100) + ->setOption('encoding', 'utf-8') + ->inline(); + + + + + return $ret; + } + + protected function getPDFData(?ReceiptIssuingOrder $order = null) + { + + $p = parent::getPDFData($order); + if ($order !== null) { + $c = ReceiptIssuingHTParkingCustomOrder::whereReceiptIssuingOrderId($order->id)->firstOrFail()->toArray(); + } else { + $c = $this->customOrder->toArray(); + } + return [ - ...parent::getPDFData(), - ...$this->customOrder->toArray(), + ...$p, + ...$c, ]; } } diff --git a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php index dc13f23..21db602 100644 --- a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php +++ b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php @@ -11,6 +11,7 @@ use App\Models\ReceiptIssuingOrder; use App\Models\ReceiptIssuingOrderTax; use App\Util\DateUtil; use Barryvdh\Snappy\PdfWrapper; +use Illuminate\Database\Eloquent\Collection; use PDF; class PDFDownLoadManager extends ReceiptIssuingOrderManager @@ -22,7 +23,10 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager parent::__construct($order); } - + public function initForDownloadLetters() + { + $this->initialized = true; + } public function downlaodA4() { @@ -78,18 +82,20 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager return $ret; } - protected function getPDFData() + protected function getPDFData(?ReceiptIssuingOrder $order = null) { - $o = $this->order; - $tax = $o->receiptIssuingOrderTaxes->firstOrFail(); + if ($order === null) { + $order = $this->order; + } + $tax = $order->receiptIssuingOrderTaxes->first() ?? new ReceiptIssuingOrderTax(); return [ - ...$this->order->toArray(), - ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => $o->status_receipt_confirm_datetime->format('Y/m/d'), - ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE => $o->receipt_use_date->format('Y/m/d'), - ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => number_format($o->receipt_amount), - 'pref_name' => PrefCode::getName($o->mail_pref_code), - ReceiptIssuingOrderTax::COL_NAME_TAX_RATE => data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE, 0), - ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => number_format(data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT, 0)), + ...$order->toArray(), + ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME => $order->status_receipt_confirm_datetime->format('Y/m/d'), + ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE => $order->receipt_use_date->format('Y/m/d'), + ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT => number_format($order->receipt_amount), + 'pref_name' => PrefCode::getName($order->mail_pref_code), + ReceiptIssuingOrderTax::COL_NAME_TAX_RATE => data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_RATE, 0) ?? 0, + ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT => number_format(data_get($tax, ReceiptIssuingOrderTax::COL_NAME_TAX_AMOUNT, 0)) ?? 0, ]; } } diff --git a/app/Logic/ReceiptIssuingOrder/UpdateManager.php b/app/Logic/ReceiptIssuingOrder/UpdateManager.php index 5fc03b7..5c671ad 100644 --- a/app/Logic/ReceiptIssuingOrder/UpdateManager.php +++ b/app/Logic/ReceiptIssuingOrder/UpdateManager.php @@ -9,6 +9,7 @@ use App\Events\ReceiptIssuingOrder\EmailOrderEvent; use App\Events\ReceiptIssuingOrder\MailOrderEvent; use App\Events\ReceiptIssuingOrder\MailPostedEvent; use App\Exceptions\AppCommonException; +use App\Features\InstanceAble; use App\Files\PDF\Receipt\A4Receipt; use App\Jobs\ReceiptIssuingOrder\PollEmailSendStatus; use App\Logic\EmailManager; @@ -21,6 +22,7 @@ use LogicException; class UpdateManager extends ReceiptIssuingOrderManager { + use InstanceAble; public function __construct( protected ReceiptIssuingOrder $order, @@ -68,10 +70,14 @@ class UpdateManager extends ReceiptIssuingOrderManager */ public function mailPosted(Carbon $postDate): static { - $this->order->status_mail_post_date = $postDate; - // イベント登録 - MailPostedEvent::dispatch($this->order); + if ($this->order->status_mail_post_date === null) { + // ステータス更新 + $this->order->status_mail_post_date = $postDate; + + // イベント登録 + MailPostedEvent::dispatch($this->order); + } return $this; } diff --git a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php index 57f13a9..d970913 100644 --- a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php +++ b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php @@ -39,6 +39,9 @@ class ReceiptIssuingOrderRepository extends BaseRepository const CONDITION_RECEIPT_NO = 'receipt_no'; + const CONDITION_IS_CONFIRMED = 'is_confirmed'; + const CONDITION_HAS_MAILORDER = 'has_mailorder'; + const TABLE_ORDER = "order"; const TABLE_CUSTOM_ORDER = "custom_order"; const TABLE_HANDLER = "handler"; @@ -138,6 +141,26 @@ class ReceiptIssuingOrderRepository extends BaseRepository // 領収証番号 $this->where($table, $condition, static::CONDITION_RECEIPT_NO, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO])); + // 確定済み + $isConfirmed = data_get($condition, static::CONDITION_IS_CONFIRMED); + if ($isConfirmed !== null) { + if ($isConfirmed === true) { + $table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME])); + } else if ($isConfirmed === false) { + $table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME])); + } + } + + // 郵送依頼あり + $hasMailOrder = data_get($condition, static::CONDITION_HAS_MAILORDER); + if ($hasMailOrder !== null) { + if ($hasMailOrder === true) { + $table->whereNotNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME])); + } else if ($hasMailOrder === false) { + $table->whereNull($this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME])); + } + } + $table->select($this->columns()); diff --git a/resources/views/pdf/receipt_letters.blade.php b/resources/views/pdf/receipt_letters.blade.php new file mode 100644 index 0000000..0aaf365 --- /dev/null +++ b/resources/views/pdf/receipt_letters.blade.php @@ -0,0 +1,103 @@ + + + + + + 領収証 + + + + + + + + @foreach($orders as $order) +
+
+
+ +
〒{{ sprintf("%s-%s", substr($order['mail_zip_code'], 0, 3), substr($order['mail_zip_code'], 3) ) }}
+
+ {{ $order['pref_name'] }} +
+ @if($order['mail_address1']) +
+ {{ $order['mail_address1'] }} +
+ @endif + @if($order['mail_address2']) +
+ {{ $order['mail_address2'] }} +
+ @endif + @if($order['mail_address3']) +
+ {{ $order['mail_address3'] }} +
+ @endif +
+ {{ $order['mail_name'] }} 様 +
+
+
+
+
+
+
+

+
+
+

領収証

+
+
+
+
発行日 {{ $order['status_receipt_confirm_datetime'] }}
+
No {{ $order['receipt_no'] }}
+
+
+
+
{{ $order['receipt_name'] }} 様
+
利用日 {{ $order['receipt_use_date'] }}
+
+ +
+ ¥{{ $order['receipt_amount'] }} -  +
+
内消費税 ¥{{ $order['tax_amount'] }}- (10%対象)
+
+
+
+ 但し、{{ $order['parking_name'] }} +
+
+ {{ $order['receipt_purpose'] }}として +
+
上記正に領収いたしました。
+
運営会社 {{ $order['customer_name'] }}
+
インボイス登録番号 {{ $order['receipt_invoice_no'] }}
+
発行元及び返送先
+
+
〒550-0014
+
+
+ 大阪府大阪市西区北堀江2-2-25 +
+
+ 久慈ビル南館5階 +
+
ハローテクノ株式会社
+
+ +
TEL:06-7638-6575
+
FAX:06-6536-5600
+
+
+
+
+ @endforeach + + + + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 9730cf3..46be77a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,7 +21,8 @@ RouteHelper::post('/receiptIssuingOrder/create', App\Http\Controllers\Web\Receip // 領収証ダウンロード RouteHelper::get('/receipt/download', App\Http\Controllers\Web\ReceiptIssuingOrder\DownloadController::class); -RouteHelper::get('/receipt-letter/download', App\Http\Controllers\Web\ReceiptIssuingOrder\DownloadLetterController::class); +RouteHelper::get('/custom/hello-techno/receipt-letter/download', App\Http\Controllers\Web\Custom\HelloTechno\DownloadLetterController::class); +RouteHelper::get('/custom/hello-techno/receipt-letters/download', App\Http\Controllers\Web\Custom\HelloTechno\DownloadLettersController::class); // CSVダウンロード RouteHelper::get('/custom/hello-techno/use-summary/csv', App\Http\Controllers\Web\Custom\HelloTechno\UseSummaryCSVController::class);