diff --git a/app/Email/Members/EntryApprove.php b/app/Email/Members/EntryApprove.php index bce8951..cf03f1d 100644 --- a/app/Email/Members/EntryApprove.php +++ b/app/Email/Members/EntryApprove.php @@ -4,6 +4,7 @@ namespace App\Email\Members; use App\Kintone\Models\Parking; use App\Kintone\Models\SeasonTicketContractEntry; +use App\Kintone\Models\SeasonTicketContractPlan; class EntryApprove extends Members { @@ -11,6 +12,7 @@ class EntryApprove extends Members public function __construct( private Parking $parking, private SeasonTicketContractEntry $entry, + private SeasonTicketContractPlan $plan, ) { $this->setEmail($entry->email); parent::__construct(null); @@ -28,17 +30,21 @@ class EntryApprove extends Members public function getMemberParams(): array { + $entry = $this->entry; + return [ - 'customer_name' => $this->entry->customerName, - 'customer_name_kana' => $this->entry->customerNameKana, - 'parking_name' => $this->entry->parkingName, - 'type_name' => '##TODO##', - 'season_ticket_select' => '##TODO##', - 'plan_name' => '##TODO##', - 'vehicle_no' => $this->entry->vehicleNo, - 'use_start_date' => $this->entry->useStartDate->format('Y/m/d'), - 'payment_method' => $this->entry->paymentMethod, - 'amount' => '##TODO##', + 'customer_name' => $entry->customerName ?? "-", + 'customer_name_kana' => $entry->customerNameKana ?? "-", + 'parking_name' => $entry->parkingName ?? "-", + 'type_name' => "##TODO どの値を設定する??", //##TODO + 'season_ticket_select' => null, //##TODO + 'plan_name' => $entry->planName ?? "-", + 'vehicle_no' => $entry->vehicleNo ?? "-", + 'use_start_date' => $entry->useStartDate ? $entry->useStartDate->format('Y/m/d') : "-", + 'payment_method' => $entry->paymentMethod ?? "-", + 'amount' => number_format($entry->amount ?? 0), + 'paymentExplain' => EntryMessageBuilder::getPaymentExplainStr($this->entry), + 'taxExplain' => EntryMessageBuilder::getTaxExplain($this->plan), 'can_terminate_15' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_15, $this->parking->canTerminateDate), 'can_terminate_end_of_month' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->parking->canTerminateDate), ]; diff --git a/app/Email/Members/EntryMessageBuilder.php b/app/Email/Members/EntryMessageBuilder.php new file mode 100644 index 0000000..eca3aca --- /dev/null +++ b/app/Email/Members/EntryMessageBuilder.php @@ -0,0 +1,43 @@ +paymentLimitDate) { + return ""; + } + if (!$entry->firstAmount) { + return ""; + } + + $hiwariStr = !!$entry->hiwariAmount ? sprintf( + "%d月分日割分%s円と", + $entry->hiwariMonth, + number_format($entry->hiwariAmount) + ) : ""; + + return sprintf( + "※料金は利用日までの前払いのため、%s%d月分%s円 (合計%s円)を%sまでにお振込下さい。(手数料は振込者負担でお願い致します。)", + $hiwariStr, + $entry->targetMonth, + number_format($entry->targetAmount), + number_format($entry->firstAmount), + $entry->paymentLimitDate->format("Y年m月d日") + ); + } + + public static function getTaxExplain(SeasonTicketContractPlan $plan): string + { + return sprintf( + "(消費税等含む,適用税率%d%%  消費税額 %s円)", + $plan->taxRate ?? 0, + number_format($plan->taxAmount ?? 0), + ); + } +} diff --git a/app/Email/Members/EntryPaymentComplete.php b/app/Email/Members/EntryPaymentComplete.php index 727331d..05e2e9b 100644 --- a/app/Email/Members/EntryPaymentComplete.php +++ b/app/Email/Members/EntryPaymentComplete.php @@ -4,6 +4,7 @@ namespace App\Email\Members; use App\Kintone\Models\Parking; use App\Kintone\Models\SeasonTicketContractEntry; +use App\Kintone\Models\SeasonTicketContractPlan; class EntryPaymentComplete extends Members { @@ -11,6 +12,7 @@ class EntryPaymentComplete extends Members public function __construct( private Parking $parking, private SeasonTicketContractEntry $entry, + private SeasonTicketContractPlan $plan, ) { $this->setEmail($entry->email); parent::__construct(null); @@ -28,17 +30,21 @@ class EntryPaymentComplete extends Members public function getMemberParams(): array { + $entry = $this->entry; + return [ - 'customer_name' => $this->entry->customerName, - 'customer_name_kana' => $this->entry->customerNameKana, - 'parking_name' => $this->entry->parkingName, - 'type_name' => '##TODO##', - 'season_ticket_select' => '##TODO##', - 'plan_name' => '##TODO##', - 'vehicle_no' => $this->entry->vehicleNo, - 'use_start_date' => $this->entry->useStartDate->format('Y/m/d'), - 'payment_method' => $this->entry->paymentMethod, - 'amount' => '##TODO##', + 'customer_name' => $entry->customerName ?? "-", + 'customer_name_kana' => $entry->customerNameKana ?? "-", + 'parking_name' => $entry->parkingName ?? "-", + 'type_name' => "##TODO どの値を設定する??", //##TODO + 'season_ticket_select' => null, //##TODO + 'plan_name' => $entry->planName ?? "-", + 'vehicle_no' => $entry->vehicleNo ?? "-", + 'use_start_date' => $entry->useStartDate ? $entry->useStartDate->format('Y/m/d') : "-", + 'payment_method' => $entry->paymentMethod ?? "-", + 'amount' => number_format($entry->amount ?? 0), + 'paymentExplain' => EntryMessageBuilder::getPaymentExplainStr($this->entry), + 'taxExplain' => EntryMessageBuilder::getTaxExplain($this->plan), 'can_terminate_15' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_15, $this->parking->canTerminateDate), 'can_terminate_end_of_month' => in_array(Parking::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->parking->canTerminateDate), ]; diff --git a/app/Http/Controllers/Web/Email/EmailSendController.php b/app/Http/Controllers/Web/Email/EmailSendController.php index 96863a6..c22edb5 100644 --- a/app/Http/Controllers/Web/Email/EmailSendController.php +++ b/app/Http/Controllers/Web/Email/EmailSendController.php @@ -89,13 +89,15 @@ class EmailSendController extends FromKintoneController if ($emailId === Email::ENTRY_APPROVE) { $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo); $parking = $entry->getParking(); - $this->setEmail(new EntryApprove($parking, $entry)); + $plan = $entry->getPlan(); + $this->setEmail(new EntryApprove($parking, $entry, $plan)); return; } if ($emailId === Email::ENTRY_PAYMENT_COMPLETE) { $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo); $parking = $entry->getParking(); - $this->setEmail(new EntryPaymentComplete($parking, $entry)); + $plan = $entry->getPlan(); + $this->setEmail(new EntryPaymentComplete($parking, $entry, $plan)); return; } diff --git a/app/Http/Controllers/Web/Email/EmailSendParam.php b/app/Http/Controllers/Web/Email/EmailSendParam.php index 679b3f2..43b8e48 100644 --- a/app/Http/Controllers/Web/Email/EmailSendParam.php +++ b/app/Http/Controllers/Web/Email/EmailSendParam.php @@ -8,7 +8,7 @@ use Illuminate\Validation\Rules\Enum; /** * @property Email emailId - * @property ?string seasonTicketContractEntryRecordNo + * @property ?int seasonTicketContractEntryRecordNo * @property ?string applicationNo */ class EmailSendParam extends BaseParam @@ -17,7 +17,7 @@ class EmailSendParam extends BaseParam { return [ 'email_id' => $this->enum([new Enum(Email::class)]), - 'season_ticket_contract_entry_record_no' => $this->str(true), + 'season_ticket_contract_entry_record_no' => $this->numeric(true), 'application_no' => $this->str(true), ]; } diff --git a/app/Http/Controllers/Web/NoneParams.php b/app/Http/Controllers/Web/NoneParams.php new file mode 100644 index 0000000..92ca590 --- /dev/null +++ b/app/Http/Controllers/Web/NoneParams.php @@ -0,0 +1,13 @@ + FieldType::DROP_DOWN, self::FIELD_ENTRY_DATETIME => FieldType::DATETIME, self::FIELD_PLAN_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_SEASON_TICKET_PLAN_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_AMOUNT => FieldType::NUMBER, + self::FIELD_HIWARI_MONTH => FieldType::NUMBER, + self::FIELD_HIWARI_AMOUNT => FieldType::NUMBER, + self::FIELD_TARGET_MONTH => FieldType::NUMBER, + self::FIELD_TARGET_AMOUNT => FieldType::NUMBER, + self::FIELD_FIRST_AMOUNT => FieldType::NUMBER, + self::FIELD_PAYMENT_LIMIT_DATE => FieldType::DATE, ]; protected const FIELD_NAMES = [ @@ -69,4 +93,12 @@ class SeasonTicketContractEntry extends KintoneModel { return Parking::findByParkingName($this->parkingName); } + + public function getPlan(): ?SeasonTicketContractPlan + { + if (!$this->planName) { + return null; + } + return SeasonTicketContractPlan::findByName($this->seasonTicketPlanName); + } } diff --git a/app/Kintone/Models/SeasonTicketContractPlan.php b/app/Kintone/Models/SeasonTicketContractPlan.php index 02f83df..b0b906f 100644 --- a/app/Kintone/Models/SeasonTicketContractPlan.php +++ b/app/Kintone/Models/SeasonTicketContractPlan.php @@ -9,6 +9,8 @@ namespace App\Kintone\Models; * @property string parkingName * @property string[] sendItem * @property string vehicleType + * @property ?int taxAmount + * @property ?int taxRate */ class SeasonTicketContractPlan extends KintoneModel { @@ -18,12 +20,16 @@ class SeasonTicketContractPlan extends KintoneModel const FIELD_PARKING_NAME = "定期_駐車場名"; const FIELD_SEND_ITEM = "送付物"; const FIELD_VEHICLE_TYPE = "種別"; + const FIELD_TAX_AMOUNT = "内税"; + const FIELD_TAX_RATE = "税率"; protected const FIELDS = [ ...parent::FIELDS, self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT, self::FIELD_SEND_ITEM => FieldType::CHECK_BOX, self::FIELD_VEHICLE_TYPE => FieldType::SINGLE_LINE_TEXT, + self::FIELD_TAX_AMOUNT => FieldType::NUMBER, + self::FIELD_TAX_RATE => FieldType::NUMBER, ]; protected const FIELD_NAMES = [ @@ -38,4 +44,9 @@ class SeasonTicketContractPlan extends KintoneModel 'has_sticker' => in_array("シール", $item), ]; } + + public static function findByName(string $name): static + { + return static::getAccess()->first(static::getQuery()->where(static::FIELD_PLAN_NAME, $name)); + } } diff --git a/resources/views/emails/members/entry_approve.blade.php b/resources/views/emails/members/entry_approve.blade.php index 6843f0a..062f71c 100644 --- a/resources/views/emails/members/entry_approve.blade.php +++ b/resources/views/emails/members/entry_approve.blade.php @@ -20,21 +20,25 @@ ◆プラン {{ $plan_name }} +@if($season_ticket_select) ◆定期券の選択 {{ $season_ticket_select }} +@endif @if($vehicle_no) ◆利用車両番号 {{ $vehicle_no }} -@endif +@endif ◆利用開始日(希望) {{ $use_start_date }} ◆◆お支払方法及び定期駐車料金 お支払方法:{{ $payment_method }} -定期駐車料金:{{ $amount }} -※料金は利用日までの前払いのため、○月日割分○○円と○月分○○円 (合計○○円)を○年○月○日までにお振込下さい。(手数料は振込者負担でお願い致します。) +定期駐車料金:{{ $amount }}円 {{ $taxExplain }} +@if($paymentExplain) +{{ $paymentExplain }} +@endif 銀行:ゆうちょ銀行 店名:四四八(ヨンヨンハチ) diff --git a/resources/views/emails/members/entry_payment_complete.blade.php b/resources/views/emails/members/entry_payment_complete.blade.php index 20c5070..d3e2839 100644 --- a/resources/views/emails/members/entry_payment_complete.blade.php +++ b/resources/views/emails/members/entry_payment_complete.blade.php @@ -1,4 +1,4 @@ -@extends('emails.layouts.members') +@extends('emails.layouts.member') @section('contents') ご入金を確認致しました。誠にありがとうございます。 @@ -46,9 +46,11 @@ ◆プラン {{ $plan_name }} +@if($season_ticket_select) ◆定期券の選択 -XXXXXX +{{ $season_ticket_select }} +@endif @if($vehicle_no) ◆利用車両番号 {{ $vehicle_no }} @@ -59,7 +61,7 @@ XXXXXX ◆お支払方法及び定期駐車料金 お支払方法:{{ $payment_method }} -定期駐車料金:XXXX円(消費税等含む,適用税率1 0%  消費税額 XX円) +定期駐車料金:{{ $amount }}円 {{ $taxExplain }} ◆備考 定期利用にあたり、必ず各駐車場・駐輪場ページ掲載の定期利用取扱事項と、ホームページ・メ ール及び現地の案内に従いご利用下さい。