From 7357527fdb811c8e61bbb050fbcdb56bd03c4813 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Wed, 4 Oct 2023 11:59:13 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=83=AB=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Codes/Email.php | 12 ++ app/Email/Members/EntryApprove.php | 31 ++-- app/Email/Members/EntryPaymentComplete.php | 27 ++-- app/Email/Members/Members.php | 12 +- .../Members/ParkingCertificateOrderNotice.php | 7 +- .../Members/SeasonTicketReOrderNotice.php | 7 +- app/Email/Members/StickerReOrderNotice.php | 7 +- app/Email/Members/TerminateOrderApprove.php | 7 +- app/Email/Members/TerminateOrderComplete.php | 7 +- app/Email/Members/TerminateOrderNotice.php | 7 +- .../Members/UserInfoUpdateOrderApprove.php | 7 +- .../Members/UserInfoUpdateOrderNotice.php | 7 +- .../Members/VehicleInfoUpdateOrderApprove.php | 7 +- .../Members/VehicleInfoUpdateOrderNotice.php | 7 +- .../Web/Email/EmailSendController.php | 141 ++++++++++++++++++ .../Controllers/Web/Email/EmailSendParam.php | 26 ++++ .../ParkingCertificateOrderController.php | 2 +- .../SeasonTicketReOrderController.php | 2 +- .../StickerReOrderController.php | 2 +- .../TerminationOrderController.php | 2 +- .../TerminationOrderOptionsController.php | 10 ++ .../UpdateVehicleInfoOrderController.php | 2 +- app/Kintone/KintoneAccess.php | 8 +- app/Kintone/Models/Customer.php | 5 + app/Kintone/Models/GeneralApplication.php | 10 ++ app/Kintone/Models/KintoneModel.php | 2 +- app/Kintone/Models/Parking.php | 27 +++- app/Kintone/Models/SeasonTicketContract.php | 12 ++ .../Models/SeasonTicketContractEntry.php | 54 +++++++ app/Providers/RouteServiceProvider.php | 3 + config/kintone.php | 1 + config/mail.php | 4 +- .../emails/members/entry_approve.blade.php | 2 +- routes/api_email.php | 16 ++ 34 files changed, 420 insertions(+), 63 deletions(-) create mode 100644 app/Codes/Email.php create mode 100644 app/Http/Controllers/Web/Email/EmailSendController.php create mode 100644 app/Http/Controllers/Web/Email/EmailSendParam.php create mode 100644 app/Kintone/Models/SeasonTicketContractEntry.php create mode 100644 routes/api_email.php diff --git a/app/Codes/Email.php b/app/Codes/Email.php new file mode 100644 index 0000000..ebb14b5 --- /dev/null +++ b/app/Codes/Email.php @@ -0,0 +1,12 @@ +setEmail($entry->email); + parent::__construct(null); } public function getTemplateName(): string { - return 'emails.members.vehicle_info_update_order_notice'; + return 'emails.members.entry_approve'; } public function getSubject(): string { - return "車両番号・防犯登録番号変更受付のお知らせ"; + return "【利用確認事項】申込受付 月極定期駐車場ナビ"; } public function getMemberParams(): array { return [ - 'customer_name_kana' => $this->customer->customerNameKana, - 'parking_name' => '##TODO##', + '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' => '##TODO##', - 'use_start_date' => '##TODO##', - 'payment_method' => '##TODO##', + 'vehicle_no' => $this->entry->vehicleNo, + 'use_start_date' => $this->entry->useStartDate->format('Y/m/d'), + 'payment_method' => $this->entry->paymentMethod, 'amount' => '##TODO##', - 'can_terminate_15' => true, - 'can_terminate_end_of_month' => true, + '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/EntryPaymentComplete.php b/app/Email/Members/EntryPaymentComplete.php index 720a4d3..727331d 100644 --- a/app/Email/Members/EntryPaymentComplete.php +++ b/app/Email/Members/EntryPaymentComplete.php @@ -2,17 +2,18 @@ namespace App\Email\Members; -use App\Kintone\Models\Customer; -use App\Kintone\Models\SeasonTicketContract; +use App\Kintone\Models\Parking; +use App\Kintone\Models\SeasonTicketContractEntry; class EntryPaymentComplete extends Members { public function __construct( - protected Customer $customer, - private SeasonTicketContract $seasonTicketContract, + private Parking $parking, + private SeasonTicketContractEntry $entry, ) { - parent::__construct($customer); + $this->setEmail($entry->email); + parent::__construct(null); } public function getTemplateName(): string @@ -28,16 +29,18 @@ class EntryPaymentComplete extends Members public function getMemberParams(): array { return [ - 'customer_name_kana' => $this->customer->customerNameKana, - 'parking_name' => '##TODO##', + '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' => '##TODO##', - 'use_start_date' => '##TODO##', - 'payment_method' => '##TODO##', + 'vehicle_no' => $this->entry->vehicleNo, + 'use_start_date' => $this->entry->useStartDate->format('Y/m/d'), + 'payment_method' => $this->entry->paymentMethod, 'amount' => '##TODO##', - 'can_terminate_15' => true, - 'can_terminate_end_of_month' => true, + '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/Members.php b/app/Email/Members/Members.php index 0ecb421..2178946 100644 --- a/app/Email/Members/Members.php +++ b/app/Email/Members/Members.php @@ -8,16 +8,18 @@ use App\Kintone\Models\Customer; abstract class Members extends BaseEmailer { - public function __construct(protected Customer $customer) + public function __construct(protected ?Customer $customer) { - $this->setEmail($customer->email); + if ($customer !== null) { + $this->setEmail($customer->email); + } } public function getParams(): array { - return array_merge($this->getMemberParams(), [ - 'customer_name' => $this->customer->customerName - ]); + return array_merge([ + 'customer_name' => $this->customer ? $this->customer->customerName : "", + ], $this->getMemberParams()); } abstract public function getMemberParams(): array; diff --git a/app/Email/Members/ParkingCertificateOrderNotice.php b/app/Email/Members/ParkingCertificateOrderNotice.php index 20c4d47..46423bc 100644 --- a/app/Email/Members/ParkingCertificateOrderNotice.php +++ b/app/Email/Members/ParkingCertificateOrderNotice.php @@ -10,10 +10,13 @@ class ParkingCertificateOrderNotice extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private ParkingCertificateApplication $app + private ParkingCertificateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/SeasonTicketReOrderNotice.php b/app/Email/Members/SeasonTicketReOrderNotice.php index c4e6a99..b1ac16e 100644 --- a/app/Email/Members/SeasonTicketReOrderNotice.php +++ b/app/Email/Members/SeasonTicketReOrderNotice.php @@ -10,10 +10,13 @@ class SeasonTicketReOrderNotice extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private SeasonTicketReOrderApplication $app + private SeasonTicketReOrderApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/StickerReOrderNotice.php b/app/Email/Members/StickerReOrderNotice.php index 755b51d..6e65eb4 100644 --- a/app/Email/Members/StickerReOrderNotice.php +++ b/app/Email/Members/StickerReOrderNotice.php @@ -10,10 +10,13 @@ class StickerReOrderNotice extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private StickerReOrderApplication $app + private StickerReOrderApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/TerminateOrderApprove.php b/app/Email/Members/TerminateOrderApprove.php index bd754f5..fdd9673 100644 --- a/app/Email/Members/TerminateOrderApprove.php +++ b/app/Email/Members/TerminateOrderApprove.php @@ -10,10 +10,13 @@ class TerminateOrderApprove extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private TerminateApplication $app + private TerminateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/TerminateOrderComplete.php b/app/Email/Members/TerminateOrderComplete.php index ea008b1..546bc3b 100644 --- a/app/Email/Members/TerminateOrderComplete.php +++ b/app/Email/Members/TerminateOrderComplete.php @@ -10,10 +10,13 @@ class TerminateOrderComplete extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private TerminateApplication $app + private TerminateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/TerminateOrderNotice.php b/app/Email/Members/TerminateOrderNotice.php index c6544d1..cc4af27 100644 --- a/app/Email/Members/TerminateOrderNotice.php +++ b/app/Email/Members/TerminateOrderNotice.php @@ -10,10 +10,13 @@ class TerminateOrderNotice extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private TerminateApplication $app + private TerminateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/UserInfoUpdateOrderApprove.php b/app/Email/Members/UserInfoUpdateOrderApprove.php index 2e4f00a..ebb773f 100644 --- a/app/Email/Members/UserInfoUpdateOrderApprove.php +++ b/app/Email/Members/UserInfoUpdateOrderApprove.php @@ -10,10 +10,13 @@ class UserInfoUpdateOrderApprove extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private UserInfoUpdateApplication $app + private UserInfoUpdateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/UserInfoUpdateOrderNotice.php b/app/Email/Members/UserInfoUpdateOrderNotice.php index 45aac53..d61eab7 100644 --- a/app/Email/Members/UserInfoUpdateOrderNotice.php +++ b/app/Email/Members/UserInfoUpdateOrderNotice.php @@ -9,9 +9,12 @@ class UserInfoUpdateOrderNotice extends Members { public function __construct( - protected Customer $customer, - private UserInfoUpdateApplication $app + private UserInfoUpdateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/VehicleInfoUpdateOrderApprove.php b/app/Email/Members/VehicleInfoUpdateOrderApprove.php index a52ff18..488cc7a 100644 --- a/app/Email/Members/VehicleInfoUpdateOrderApprove.php +++ b/app/Email/Members/VehicleInfoUpdateOrderApprove.php @@ -10,10 +10,13 @@ class VehicleInfoUpdateOrderApprove extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private VehicleInfoUpdateApplication $app + private VehicleInfoUpdateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Email/Members/VehicleInfoUpdateOrderNotice.php b/app/Email/Members/VehicleInfoUpdateOrderNotice.php index 52b0683..8ac351a 100644 --- a/app/Email/Members/VehicleInfoUpdateOrderNotice.php +++ b/app/Email/Members/VehicleInfoUpdateOrderNotice.php @@ -10,10 +10,13 @@ class VehicleInfoUpdateOrderNotice extends Members { public function __construct( - protected Customer $customer, private SeasonTicketContract $seasonTicketContract, - private VehicleInfoUpdateApplication $app + private VehicleInfoUpdateApplication $app, + protected ?Customer $customer = null, ) { + if ($customer === null) { + $customer = $app->getCustomer(); + } parent::__construct($customer); } diff --git a/app/Http/Controllers/Web/Email/EmailSendController.php b/app/Http/Controllers/Web/Email/EmailSendController.php new file mode 100644 index 0000000..2a6738a --- /dev/null +++ b/app/Http/Controllers/Web/Email/EmailSendController.php @@ -0,0 +1,141 @@ +checkToken(); + + // メール作成 + $this->getEmail(); + + // 送信 + if ($this->emailManager === null) { + throw new LogicException("EmailManager不正"); + } + $this->emailManager->confirm(); + } catch (Exception $e) { + logger($e->getMessage()); + logger($e->getFile()); + logger($e->getLine()); + return $this->failed(); + } + + return $this->success(); + } + + private function success() + { + return response()->json([ + 'result' => 'SUCCESS' + ]); + } + + private function failed() + { + return response()->json([ + 'result' => 'FAILED' + ]); + } + + private function checkToken() + { + + $currectToken = config('mail.emailSendOrderToken'); + + if ($this->param->token !== $currectToken) { + logs()->warning("Email送信依頼トークン不正"); + throw new Exception("Email送信依頼トークン不正"); + } + } + + private function getEmail() + { + $emailId = $this->param->emailId; + + if ($emailId === Email::TERMINATE_ORDER_APPROVE) { + $application = TerminateApplication::findByApplicationNo($this->param->applicationNo); + $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo); + $this->setEmail(new TerminateOrderApprove($seasonTicketContract, $application)); + return; + } + if ($emailId === Email::VEHICLE_INFO_UPDATE_ORDER_APPROVE) { + $application = VehicleInfoUpdateApplication::findByApplicationNo($this->param->applicationNo); + $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo); + $this->setEmail(new VehicleInfoUpdateOrderApprove($seasonTicketContract, $application)); + return; + } + if ($emailId === Email::USER_INFO_UPDATE_ORDER_APPROVE) { + $application = UserInfoUpdateApplication::findByApplicationNo($this->param->applicationNo); + $seasonTicketContract = SeasonTicketContract::find($application->seasonTicketContractRecordNo); + $this->setEmail(new UserInfoUpdateOrderApprove($seasonTicketContract, $application)); + return; + } + if ($emailId === Email::ENTRY_APPROVE) { + $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo); + $parking = $entry->getParking(); + $this->setEmail(new EntryApprove($parking, $entry)); + return; + } + if ($emailId === Email::ENTRY_PAYMENT_COMPLETE) { + $entry = SeasonTicketContractEntry::find($this->param->seasonTicketContractEntryRecordNo); + $parking = $entry->getParking(); + $this->setEmail(new EntryPaymentComplete($parking, $entry)); + return; + } + + + if ($this->email === null || $this->emailManager === null) { + throw new LogicException("setEmail不正"); + } + } + + private function setEmail(BaseEmailer $email) + { + $this->email = $email; + $this->emailManager = new EmailManager($email); + } +} diff --git a/app/Http/Controllers/Web/Email/EmailSendParam.php b/app/Http/Controllers/Web/Email/EmailSendParam.php new file mode 100644 index 0000000..8d69f64 --- /dev/null +++ b/app/Http/Controllers/Web/Email/EmailSendParam.php @@ -0,0 +1,26 @@ + $this->enum([new Enum(Email::class)]), + 'token' => $this->str(true), + 'season_ticket_contract_entry_record_no' => $this->str(true), + 'application_no' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php index 6ffdb25..0e904db 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/ParkingCertificateOrderController.php @@ -65,7 +65,7 @@ class ParkingCertificateOrderController extends WebController $application->memo = $param->memo; // メール送信 - $email = new ParkingCertificateOrderNotice($customer, $seasonTicketContract, $application); + $email = new ParkingCertificateOrderNotice($seasonTicketContract, $application, $customer); $email->setUser(Auth::user()); $emailMmanager = new EmailManager($email); $emailMmanager->confirm(); diff --git a/app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php index 1c13ba5..6b9a75c 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/SeasonTicketReOrderController.php @@ -54,7 +54,7 @@ class SeasonTicketReOrderController extends WebController $application->memo = $param->memo; // メール送信 - $email = new SeasonTicketReOrderNotice($customer, $seasonTicketContract, $application); + $email = new SeasonTicketReOrderNotice($seasonTicketContract, $application, $customer); $email->setUser(Auth::user()); $emailMmanager = new EmailManager($email); $emailMmanager->confirm(); diff --git a/app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php index 9289b07..7f4fc39 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/StickerReOrderController.php @@ -55,7 +55,7 @@ class StickerReOrderController extends WebController $application->memo = $param->memo; // メール送信 - $email = new StickerReOrderNotice($customer, $seasonTicketContract, $application); + $email = new StickerReOrderNotice($seasonTicketContract, $application, $customer); $email->setUser(Auth::user()); $emailMmanager = new EmailManager($email); $emailMmanager->confirm(); diff --git a/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php index aa4f39c..4d2ff23 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderController.php @@ -57,7 +57,7 @@ class TerminationOrderController extends WebController $application->memo = $param->memo; // メール送信 - $email = new TerminateOrderNotice($customer, $seasonTicketContract, $application); + $email = new TerminateOrderNotice($seasonTicketContract, $application, $customer); $email->setUser(Auth::user()); $emailMmanager = new EmailManager($email); $emailMmanager->confirm(); diff --git a/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php b/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php index 316dcdb..544b3ec 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/TerminationOrderOptionsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Web\SeasonTicketContract; use App\Http\Controllers\Web\WebController; +use App\Kintone\Models\SeasonTicketContract; use App\Util\DateUtil; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -33,6 +34,15 @@ class TerminationOrderOptionsController extends WebController $monthes = []; + // $seasonTicketContract = SeasonTicketContract::find($param->seasonTicketContractRecordNo); + + // $parking = $seasonTicketContract->getParking(); + + // $today = DateUtil::now(); + + // $canEndOfMonth = $parking-> + + foreach (range(0, 3) as $m) { $target = DateUtil::now()->addMonth($m)->endOfMonth(); $monthes[] = $target->format('Y/m/d'); diff --git a/app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php index 2b08e15..55cefcc 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/UpdateVehicleInfoOrderController.php @@ -58,7 +58,7 @@ class UpdateVehicleInfoOrderController extends WebController $application->memo = $param->memo; // メール送信 - $email = new VehicleInfoUpdateOrderNotice($customer, $seasonTicketContract, $application); + $email = new VehicleInfoUpdateOrderNotice($seasonTicketContract, $application, $customer); $email->setUser(Auth::user()); $emailMmanager = new EmailManager($email); $emailMmanager->confirm(); diff --git a/app/Kintone/KintoneAccess.php b/app/Kintone/KintoneAccess.php index 9dbc5b3..40a37b2 100644 --- a/app/Kintone/KintoneAccess.php +++ b/app/Kintone/KintoneAccess.php @@ -19,6 +19,7 @@ class KintoneAccess { private string $appName; + private ?string $modelName; private string $host; private string $apiToken = ""; private int $appId; @@ -43,9 +44,10 @@ class KintoneAccess private const URL_APP_FORM_FIELDS = "/k/v1/app/form/fields.json"; - public function __construct(string $appName) + public function __construct(string $appName, ?string $modelName) { $this->appName = $appName; + $this->modelName = $modelName; $key = "kintone.host"; $host = config($key); @@ -118,7 +120,7 @@ class KintoneAccess throw $e; } } - $result = new $this->appName(); + $result = $this->modelName ? new $this->modelName() : new $this->appName(); $result->setDataFromRecordResponse($response['record']); return $result; @@ -157,7 +159,7 @@ class KintoneAccess /** * @var KintoneModel $model */ - $model = new $this->appName(); + $model = $this->modelName ? new $this->modelName() : new $this->appName(); $model->setDataFromRecordResponse($data); $ret->put($model->getRecordId(), $model); diff --git a/app/Kintone/Models/Customer.php b/app/Kintone/Models/Customer.php index b4687d7..c28c067 100644 --- a/app/Kintone/Models/Customer.php +++ b/app/Kintone/Models/Customer.php @@ -51,4 +51,9 @@ class Customer extends KintoneModel { return static::getAccess()->find(Auth::user()->kintone_id); } + + public static function findByCustomerCode(string $customerCode) + { + return static::getAccess()->first(static::getQuery()->where(self::FIELD_CUSTOMER_CODE, $customerCode)); + } } diff --git a/app/Kintone/Models/GeneralApplication.php b/app/Kintone/Models/GeneralApplication.php index bfe6565..a4ba0b3 100644 --- a/app/Kintone/Models/GeneralApplication.php +++ b/app/Kintone/Models/GeneralApplication.php @@ -48,4 +48,14 @@ abstract class GeneralApplication extends KintoneModel SeasonTicketContract::class, Customer::class, ]; + + public static function findByApplicationNo(string $applicationNo): static + { + return static::getAccess()->first(static::getQuery()->where(static::FIELD_APPLICATION_NO, $applicationNo)); + } + + public function getCustomer(): Customer + { + return Customer::findByCustomerCode($this->customerCode); + } } diff --git a/app/Kintone/Models/KintoneModel.php b/app/Kintone/Models/KintoneModel.php index c344c54..6991edd 100644 --- a/app/Kintone/Models/KintoneModel.php +++ b/app/Kintone/Models/KintoneModel.php @@ -62,7 +62,7 @@ abstract class KintoneModel return $store->get($target); } - $access = new KintoneAccess($target); + $access = new KintoneAccess($target, static::class); $access->setFields(array_keys(static::FIELDS)); foreach (static::RELATIONS as $relation) { diff --git a/app/Kintone/Models/Parking.php b/app/Kintone/Models/Parking.php index 39886cd..d1def00 100644 --- a/app/Kintone/Models/Parking.php +++ b/app/Kintone/Models/Parking.php @@ -2,19 +2,35 @@ namespace App\Kintone\Models; +use App\Util\DateUtil; +use Illuminate\Support\Carbon; + /** * アプリ名 定期駐車場マスタ - * @property string $parkingName + * @property string parkingName + * @property array canTerminateDate + * @property array canTerminateRule */ class Parking extends KintoneModel { const CONFIG_KEY = "KINTONE_APP_PARKING"; const FIELD_PARKING_NAME = "駐車場名"; + const FIELD_CAN_TERMINATE_DATE = "解約可能日"; + const FIELD_CAN_TERMINATE_RULE = "解約ルール"; + + + const ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH = "末日"; + const ELEMENT_CAN_TERMINATE_DATE_15 = "15日"; + + const ELEMENT_CAN_TERMINATE_RULE_UNTIL_10 = "10日まで申込は当月可"; + const ELEMENT_CAN_TERMINATE_RULE_TODAY = "当日解約可"; protected const FIELDS = [ ...parent::FIELDS, self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_CAN_TERMINATE_DATE => FieldType::CHECK_BOX, + self::FIELD_CAN_TERMINATE_RULE => FieldType::CHECK_BOX, ]; protected const FIELD_NAMES = [ @@ -26,4 +42,13 @@ class Parking extends KintoneModel { return static::getAccess()->first(static::getQuery()->where(static::FIELD_PARKING_NAME, $parkingName)); } + + public function canTerminateDateEndOfMonth(): bool + { + return in_array(self::ELEMENT_CAN_TERMINATE_DATE_END_OF_MONTH, $this->canTerminateDate); + } + public function canTerminateDate15(): bool + { + return in_array(self::ELEMENT_CAN_TERMINATE_DATE_15, $this->canTerminateDate); + } } diff --git a/app/Kintone/Models/SeasonTicketContract.php b/app/Kintone/Models/SeasonTicketContract.php index 9a6df29..7451bbd 100644 --- a/app/Kintone/Models/SeasonTicketContract.php +++ b/app/Kintone/Models/SeasonTicketContract.php @@ -6,7 +6,9 @@ use LogicException; /** * アプリ名 車室情報管理 + * @property string customerCode * @property string seasonTicketSeqNo + * @property string parkingName * @property string vehicleNo * @property string registerNo */ @@ -59,4 +61,14 @@ class SeasonTicketContract extends KintoneModel self::FIELD_STUDENT_LICENSE_IMAGES_UPLOAD_DATETIME => 'student_license_images_upload_datetime', self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => 'other_license_images_upload_datetime', ]; + + public function getParking(): Parking + { + return Parking::findByParkingName($this->parkingName); + } + + public function getCustomer(): Customer + { + return Customer::findByCustomerCode($this->customerCode); + } } diff --git a/app/Kintone/Models/SeasonTicketContractEntry.php b/app/Kintone/Models/SeasonTicketContractEntry.php new file mode 100644 index 0000000..67fe9a2 --- /dev/null +++ b/app/Kintone/Models/SeasonTicketContractEntry.php @@ -0,0 +1,54 @@ + FieldType::SINGLE_LINE_TEXT, + self::FIELD_CUSTOMER_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_CUSTOMER_NAME_KANA => FieldType::SINGLE_LINE_TEXT, + self::FIELD_PHONE_NO => FieldType::SINGLE_LINE_TEXT, + self::FIELD_ADDRESS => FieldType::SINGLE_LINE_TEXT, + self::FIELD_EMAIL => FieldType::SINGLE_LINE_TEXT, + self::FIELD_USE_START_DATE => FieldType::DATE, + self::FIELD_VEHICLE_NO => FieldType::SINGLE_LINE_TEXT, + self::FIELD_PAYMENT_METHOD => FieldType::DROP_DOWN, + ]; + + protected const FIELD_NAMES = [ + ...parent::FIELD_NAMES, + ]; + + public function getParking(): Parking + { + return Parking::findByParkingName($this->parkingName); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index e40d0fa..113f31e 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -30,6 +30,9 @@ class RouteServiceProvider extends ServiceProvider Route::middleware('web') ->prefix('api') ->group(base_path('routes/api.php')); + Route::middleware('api') + ->prefix('api-email') + ->group(base_path('routes/api_email.php')); Route::middleware('web') ->group(base_path('routes/web.php')); diff --git a/config/kintone.php b/config/kintone.php index 8451c4d..cdb9275 100644 --- a/config/kintone.php +++ b/config/kintone.php @@ -29,6 +29,7 @@ return [ ...App\Kintone\Models\Customer::setConfig(), ...App\Kintone\Models\Parking::setConfig(), ...App\Kintone\Models\SeasonTicketContract::setConfig(), + ...App\Kintone\Models\SeasonTicketContractEntry::setConfig(), ...App\Kintone\Models\PaymentPlan::setConfig(), ...App\Kintone\Models\GeneralApplication::setConfig(), ...App\Kintone\Models\FAQ::setConfig(), diff --git a/config/mail.php b/config/mail.php index 712e7c8..9922b1b 100644 --- a/config/mail.php +++ b/config/mail.php @@ -123,6 +123,8 @@ return [ ], ], - 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT') + 'developmentEmail' => env('MAIL_ADDRESS_DEVELOPMENT'), + + 'emailSendOrderToken' => env('MAIL_SEND_ORDER_TOKEN'), ]; diff --git a/resources/views/emails/members/entry_approve.blade.php b/resources/views/emails/members/entry_approve.blade.php index 79c8f65..6843f0a 100644 --- a/resources/views/emails/members/entry_approve.blade.php +++ b/resources/views/emails/members/entry_approve.blade.php @@ -1,4 +1,4 @@ -@extends('emails.layouts.members') +@extends('emails.layouts.member') @section('contents') 定期利用取扱事項を同意のうえ、定期利用申込みを頂き誠にありがとうございます。 diff --git a/routes/api_email.php b/routes/api_email.php new file mode 100644 index 0000000..c4aa765 --- /dev/null +++ b/routes/api_email.php @@ -0,0 +1,16 @@ +