diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 108c7b5..bdd1b1e 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -13,6 +13,7 @@ class Kernel extends ConsoleKernel protected function schedule(Schedule $schedule): void { Schedules\HeartBeat::register($schedule); + Schedules\PollSMSSendOrder::register($schedule); } /** diff --git a/app/Console/Schedules/PollSMSSendOrder.php b/app/Console/Schedules/PollSMSSendOrder.php new file mode 100644 index 0000000..a8ec38c --- /dev/null +++ b/app/Console/Schedules/PollSMSSendOrder.php @@ -0,0 +1,17 @@ +command(CommandsPollSMSSendOrder::class) + ->everyMinute() + ->description("SMS送信状況確認"); + } +} diff --git a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php index f2efb3c..9cb92ff 100644 --- a/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php +++ b/app/Http/Controllers/Web/Custom/HelloTechno/ReceiptIssuingsOrdersParam.php @@ -4,8 +4,10 @@ namespace App\Http\Controllers\Web\Custom\HelloTechno; use App\Http\Controllers\Web\BaseParam; use App\Models\ReceiptIssuingHTParkingCustomOrder as HT; +use App\Models\ReceiptIssuingOrder; /** + * @property ?string $id * @property ?string $customerCode * @property ?string $customerName * @property ?string $parkingManagementCode @@ -20,6 +22,7 @@ class ReceiptIssuingsOrdersParam extends BaseParam return array_merge( [ + ReceiptIssuingOrder::COL_NAME_ID => $this->str(true), HT::COL_NAME_CUSTOMER_CODE => $this->str(true), HT::COL_NAME_CUSTOMER_NAME => $this->str(true), HT::COL_NAME_PARKING_MANAGEMENT_CODE => $this->str(true), diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadController.php b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadController.php index 57c00a2..f2a4bff 100644 --- a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadController.php +++ b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadController.php @@ -4,7 +4,7 @@ namespace App\Http\Controllers\Web\ReceiptIssuingOrder; use App\Http\Controllers\Web\IParam; use App\Http\Controllers\Web\WebController; -use App\Logic\ReceiptIssuingOrder\PDFDownLoadManager; +use App\Logic\ReceiptIssuingOrder\Custom\HelloTechno\PDFDownLoadManagerHelloTechno; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -22,7 +22,7 @@ class DownloadController extends WebController public function __construct( protected DownloadParam $param, - private PDFDownLoadManager $manager + private PDFDownLoadManagerHelloTechno $manager ) { parent::__construct(); } @@ -37,6 +37,5 @@ class DownloadController extends WebController $param = $this->param; return $this->manager->initByToken($param->accessToken)->downlaodA4(); - // return $this->manager->initByToken($param->accessToken)->downlaodLetter(); } } diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php new file mode 100644 index 0000000..fa8a187 --- /dev/null +++ b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterController.php @@ -0,0 +1,41 @@ +param; + } + + protected function run(Request $request): Response + { + $param = $this->param; + + return $this->manager->initById($param->id)->downlaodLetter(); + } +} diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterParam.php b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterParam.php new file mode 100644 index 0000000..c3ba669 --- /dev/null +++ b/app/Http/Controllers/Web/ReceiptIssuingOrder/DownloadLetterParam.php @@ -0,0 +1,19 @@ + $this->str(), + ]; + } +} diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteController.php b/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteController.php new file mode 100644 index 0000000..800d1d2 --- /dev/null +++ b/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteController.php @@ -0,0 +1,53 @@ +param; + } + + protected function run(Request $request): JsonResponse + { + $param = $this->param; + + + $this->manager->initById($param->id) + ->checkTimestamp($param->timestamp) + ->fill( + [ + ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE => $param->statusMailPostDate + ] + ) + ->update(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteParam.php b/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteParam.php new file mode 100644 index 0000000..5d12503 --- /dev/null +++ b/app/Http/Controllers/Web/ReceiptIssuingOrder/MailPostCompleteParam.php @@ -0,0 +1,27 @@ + $this->str(), + ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE => $this->date(), + ], + $this->timestamp(), + ); + } +} diff --git a/app/Logic/ReceiptIssuingOrder/Custom/HelloTechno/PDFDownLoadManagerHelloTechno.php b/app/Logic/ReceiptIssuingOrder/Custom/HelloTechno/PDFDownLoadManagerHelloTechno.php new file mode 100644 index 0000000..52b44e6 --- /dev/null +++ b/app/Logic/ReceiptIssuingOrder/Custom/HelloTechno/PDFDownLoadManagerHelloTechno.php @@ -0,0 +1,42 @@ +customOrder = ReceiptIssuingHTParkingCustomOrder::whereReceiptIssuingOrderId($this->order->id)->firstOrFail(); + return $this; + } + + public function initById(string $id) + { + parent::initById($id); + + $this->customOrder = ReceiptIssuingHTParkingCustomOrder::whereReceiptIssuingOrderId($this->order->id)->firstOrFail(); + return $this; + } + + protected function getPDFData() + { + return [ + ...parent::getPDFData(), + ...$this->customOrder->toArray(), + ]; + } +} diff --git a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php index a223aa6..56cc856 100644 --- a/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php +++ b/app/Logic/ReceiptIssuingOrder/PDFDownLoadManager.php @@ -22,13 +22,10 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager { $order = $this->order; - // $data = [ - // 'amount' - // ]; + $data = $this->getPDFData(); - - $pdf = PDF::loadView('pdf/receipt_a4', $order->toArray()); + $pdf = PDF::loadView('pdf/receipt_a4', $data); // はがきサイズを指定 $ret = $pdf->setPaper('A4') ->setOption('encoding', 'utf-8') @@ -44,14 +41,8 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager public function downlaodLetter() { $order = $this->order; - - // $data = [ - // 'amount' - // ]; - - - - $pdf = PDF::loadView('pdf/receipt_letter', $order->toArray()); + $data = $this->getPDFData(); + $pdf = PDF::loadView('pdf/receipt_letter', $data); // はがきサイズを指定 $ret = $pdf->setOption('page-height', 148) ->setOption('page-width', 100) @@ -65,4 +56,15 @@ class PDFDownLoadManager extends ReceiptIssuingOrderManager return $ret; } + + protected function getPDFData() + { + $o = $this->order; + 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) + ]; + } } diff --git a/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php b/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php index ae46d98..b03667d 100644 --- a/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php +++ b/app/Logic/ReceiptIssuingOrder/ReceiptIssuingOrderManager.php @@ -66,6 +66,10 @@ abstract class ReceiptIssuingOrderManager } if ($this->order->updated_at->notEqualTo($timestamp)) { + logger([ + 'request' => $timestamp, + 'current' => $this->order->updated_at, + ]); throw new ExclusiveException(); } diff --git a/app/Models/ReceiptIssuingOrder.php b/app/Models/ReceiptIssuingOrder.php index a54b463..d16dc21 100644 --- a/app/Models/ReceiptIssuingOrder.php +++ b/app/Models/ReceiptIssuingOrder.php @@ -37,7 +37,6 @@ class ReceiptIssuingOrder extends AppModel const COL_NAME_RECEIPT_PURPOSE = "receipt_purpose"; const COL_NAME_RECEIPT_INVOICE_NO = "receipt_invoice_no"; const COL_NAME_RECEIPT_AMOUNT = "receipt_amount"; - const COL_NAME_RECEIPT_HOW_TO_RECEIVE = "receipt_how_to_receive"; const COL_NAME_EMAIL = "email"; const COL_NAME_MAIL_PREF_CODE = "mail_pref_code"; const COL_NAME_MAIL_ZIP_CODE = "mail_zip_code"; diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php index b66521f..702bfa5 100644 --- a/app/Repositories/BaseRepository.php +++ b/app/Repositories/BaseRepository.php @@ -3,6 +3,7 @@ namespace App\Repositories; use Illuminate\Database\Query\Builder; +use Illuminate\Support\Arr; abstract class BaseRepository { @@ -72,4 +73,9 @@ abstract class BaseRepository $as = $as ? " as {$as}" : ""; return implode('.', $targets) . $as; } + protected function makeColumnNameForSelect(array $targets, ?string $as = null): string + { + $as = $as ? " as {$as}" : " as " . Arr::last($targets); + return implode('.', $targets) . $as; + } } diff --git a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php index d71ffad..ccc2575 100644 --- a/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php +++ b/app/Repositories/Custom/HelloTechno/ReceiptIssuingOrderRepository.php @@ -52,6 +52,8 @@ class ReceiptIssuingOrderRepository extends BaseRepository }); // -----検索条件 + // ID + $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_ORDER, ReceiptIssuingOrder::COL_NAME_ID])); // 運営会社 $this->where($table, $condition, $this->makeColumnName([static::TABLE_CUSTOM_ORDER, CustomOrder::COL_NAME_CUSTOMER_CODE])); @@ -88,15 +90,48 @@ class ReceiptIssuingOrderRepository extends BaseRepository $custom = static::TABLE_CUSTOM_ORDER; $handler = static::TABLE_HANDLER; $columns = [ - $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'), - $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'), - $this->makeColumnName([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'), - $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'), - $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'), - $this->makeColumnName([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'), - $this->makeColumnName([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'), - $this->makeColumnName([$handler, User::COL_NAME_ID], 'handler_id'), - $this->makeColumnName([$handler, User::COL_NAME_NAME], 'handler_name'), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ID], 'id'), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_NAME], 'status_name'), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ORDER_DATETIME], 'order_datetime'), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY1]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SUMMARY_KEY2]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_ACCESS_TOKEN_EXPIRES_AT]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_DONE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_SMS_SEND_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_FIRST_ACCESS_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_CONFIRM_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_ORDER_MAIL_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_DOWNLOAD_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_MAIL_POST_DATE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_DOWNLOAD_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_ORDER_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_STATUS_RECEIPT_EMAIL_SEND_DATETIME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_PHONE_NUMBER]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_SMS_SEND_SUCCESS]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NO]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_USE_DATE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_SHOP_NAME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_ISSUER]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_NAME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_PURPOSE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_INVOICE_NO]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_RECEIPT_AMOUNT]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_EMAIL]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_PREF_CODE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ZIP_CODE]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS1]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS2]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_ADDRESS3]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MAIL_NAME]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_MEMO]), + $this->makeColumnNameForSelect([$order, ReceiptIssuingOrder::COL_NAME_UPDATED_AT]), + $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_CODE], 'customer_code'), + $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_MANAGEMENT_CODE], 'parking_management_code'), + $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_CUSTOMER_NAME], 'customer_name'), + $this->makeColumnNameForSelect([$custom, CustomOrder::COL_NAME_PARKING_NAME], 'parking_name'), + $this->makeColumnNameForSelect([$handler, User::COL_NAME_ID], 'handler_id'), + $this->makeColumnNameForSelect([$handler, User::COL_NAME_NAME], 'handler_name'), ]; diff --git a/resources/views/pdf/receipt_a4.blade.php b/resources/views/pdf/receipt_a4.blade.php index 053e689..03907c0 100644 --- a/resources/views/pdf/receipt_a4.blade.php +++ b/resources/views/pdf/receipt_a4.blade.php @@ -16,19 +16,19 @@
-

発行日 2023/05/29

-

領収証番号 20230529-123456

+

発行日 {{ $status_receipt_confirm_datetime }}

+

領収証番号 {{ $receipt_no }}

領収証

- 株式会社サテライトテクノロジーズ 様 + {{ $receipt_name }} 様
- ¥1,600- + ¥{{ $receipt_amount }} -
(内税 10%対象) @@ -39,14 +39,14 @@ 内消費税 ¥160-
-

但し 駐車料金として

+

但し {{ $receipt_purpose }}として

上記正に領収いたしました。

-

利用日 : 2023/05/28

-

駐車場名 : 浜松町サテ駐車場

+

利用日 : {{ $receipt_use_date }}

+

駐車場名 : {{ $parking_name }}

-

発行者 株式会社パーキングサテライト

-

インボイス登録番号 T1234567890123

+

発行者 {{ $customer_name }}

+

インボイス登録番号 {{ $receipt_invoice_no }}

diff --git a/resources/views/pdf/receipt_letter.blade.php b/resources/views/pdf/receipt_letter.blade.php index 41a6358..86a0271 100644 --- a/resources/views/pdf/receipt_letter.blade.php +++ b/resources/views/pdf/receipt_letter.blade.php @@ -35,26 +35,30 @@
-
発行日 2023/05/23
-
No 20230523-123456
+
発行日 {{ $status_receipt_confirm_datetime }}
+
No {{ $receipt_no }}
-
株式会社 サテライトテクノロジーズ 様
-
利用日 2023/10/12
+
{{ $receipt_name }} 様
+
利用日 {{ $receipt_use_date }}
- ¥{{ number_format($receipt_amount) }}-  + ¥{{ $receipt_amount }} - 
-
内消費税 ¥160- (10%対象)
+
内消費税 ¥XXX- (10%対象)
-
但し、北堀江第一駐車場 駐車料金として +
+ 但し、{{ $parking_name }} +
+
+ {{ $receipt_purpose }}として
上記正に領収いたしました。
-
運営会社 スーパーパーキング株式会社
-
インボイス登録番号 T1234567890123
+
運営会社 {{ $customer_name }}
+
インボイス登録番号 {{ $receipt_invoice_no }}
発行元及び返送先
〒550-0014
diff --git a/routes/api.php b/routes/api.php index 2a4e072..a8808d4 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,6 +20,7 @@ RouteHelper::get('/logout', App\Http\Controllers\Web\Auth\LogoutController::clas RouteHelper::get('/app-token-check', App\Http\Controllers\Web\ReceiptIssuingOrder\TokenCheckController::class); RouteHelper::post('/receipt-issuing-order/confirm', App\Http\Controllers\Web\ReceiptIssuingOrder\ConfirmController::class); RouteHelper::post('/receipt-issuing-order/mail-order', App\Http\Controllers\Web\ReceiptIssuingOrder\MailOrderController::class); +RouteHelper::post('/receipt-issuing-order/mail-complete', App\Http\Controllers\Web\ReceiptIssuingOrder\MailPostCompleteController::class); RouteHelper::get('/receipt/download', App\Http\Controllers\Web\ReceiptIssuingOrder\TokenCheckController::class); diff --git a/routes/web.php b/routes/web.php index 936a0e2..ad21819 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,6 +21,7 @@ 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); // ルーティングで適合しない場合はフロント側のRoutingにゆだねる RouteHelper::get('/{any?}', App\Http\Controllers\Web\IndexController::class)->where('any', '.*');