From 826b8977415fdf4536113dc388390cf7fa932f48 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Thu, 26 Oct 2023 15:36:43 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=97=E3=83=A9=E3=83=B3=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E7=94=B3=E8=AB=8B=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChangePaymentIntervalOrderController.php | 33 --------- .../ChangePlanOrderController.php | 69 +++++++++++++++++++ .../ChangePlanOrderOptionsController.php | 55 +++++++++++++++ ...m.php => ChangePlanOrderOptionsParams.php} | 3 +- .../ChangePlanOrderParams.php | 22 ++++++ app/Kintone/Models/ChangePlanApplication.php | 27 ++++++++ app/Kintone/Models/GeneralApplication.php | 1 + app/Kintone/Models/SeasonTicketContract.php | 21 ++++++ .../Models/SeasonTicketContractPlan.php | 30 +++++++- .../CanChangePlanName.php | 27 ++++++++ app/Logic/GeneralApplicationManager.php | 5 ++ routes/api.php | 3 +- 12 files changed, 257 insertions(+), 39 deletions(-) delete mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsController.php rename app/Http/Controllers/Web/SeasonTicketContract/{ChangePaymentIntervalOrderParam.php => ChangePlanOrderOptionsParams.php} (75%) create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderParams.php create mode 100644 app/Kintone/Models/ChangePlanApplication.php create mode 100644 app/Kintone/Models/SubTable/SeasonTicketContractPlan/CanChangePlanName.php diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderController.php deleted file mode 100644 index e9101d6..0000000 --- a/app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderController.php +++ /dev/null @@ -1,33 +0,0 @@ -middleware('auth:sanctum'); - } - - protected function run(Request $request): JsonResponse - { - return $this->successResponse(); - } -} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderController.php new file mode 100644 index 0000000..e4af3c6 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderController.php @@ -0,0 +1,69 @@ +middleware('auth:sanctum'); + } + + protected function run(Request $request): JsonResponse + { + $param = $this->param; + + $customer = Customer::getSelf(); + $seasonTicketContract = SeasonTicketContract::find($param->seasonTicketContractRecordNo); + $parking = $seasonTicketContract->getParking(); + + $application = new ChangePlanApplication(); + $manager = new GeneralApplicationManager($application); + $manager + ->setCustomer($customer) + ->setSeasonTicketContract($seasonTicketContract) + ->setParking($parking) + ->makeApplication(); + + $application->planNameBefore = $seasonTicketContract->planName; + $application->planNameAfter = $param->planName; + $application->memo = $param->memo; + + // メール送信 + // $email = new StickerReOrderNotice($seasonTicketContract, $application, $customer); + // $email->setUser(Auth::user()); + // $emailMmanager = new EmailManager($email); + // $emailMmanager->confirm(); + + $application->save(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsController.php b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsController.php new file mode 100644 index 0000000..16b9ab8 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsController.php @@ -0,0 +1,55 @@ +middleware('auth:sanctum'); + } + + protected function run(Request $request): JsonResponse + { + $param = $this->param; + + $seasonTicketContract = SeasonTicketContract::find($param->seasonTicketContractRecordNo); + + $plan = SeasonTicketContractPlan::findByName($seasonTicketContract->planName); + + $ret = []; + foreach ($plan->canChangePlanNameList as $planName) { + $ret[] = $planName->planName; + } + + return $this->successResponse($ret); + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderParam.php b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsParams.php similarity index 75% rename from app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderParam.php rename to app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsParams.php index cc47260..5413859 100644 --- a/app/Http/Controllers/Web/SeasonTicketContract/ChangePaymentIntervalOrderParam.php +++ b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderOptionsParams.php @@ -3,12 +3,11 @@ namespace App\Http\Controllers\Web\SeasonTicketContract; use App\Http\Controllers\Web\BaseParam; -use App\Kintone\Models\GeneralApplication; /** * @property string $seasonTicketContractRecordNo */ -class ChangePaymentIntervalOrderParam extends BaseParam +class ChangePlanOrderOptionsParams extends BaseParam { public function rules(): array { diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderParams.php b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderParams.php new file mode 100644 index 0000000..660204f --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/ChangePlanOrderParams.php @@ -0,0 +1,22 @@ + $this->str(), + 'plan_name' => $this->str(), + 'memo' => $this->str(true), + ]; + } +} diff --git a/app/Kintone/Models/ChangePlanApplication.php b/app/Kintone/Models/ChangePlanApplication.php new file mode 100644 index 0000000..bc69da9 --- /dev/null +++ b/app/Kintone/Models/ChangePlanApplication.php @@ -0,0 +1,27 @@ + FieldType::SINGLE_LINE_TEXT, + self::FIELD_PLAN_NAME_AFTER => FieldType::SINGLE_LINE_TEXT, + self::FIELD_MEMO => FieldType::MULTI_LINE_TEXT, + ]; + + protected const FIELD_NAMES = [ + ...parent::FIELD_NAMES, + ]; +} diff --git a/app/Kintone/Models/GeneralApplication.php b/app/Kintone/Models/GeneralApplication.php index df95e7e..48a49a4 100644 --- a/app/Kintone/Models/GeneralApplication.php +++ b/app/Kintone/Models/GeneralApplication.php @@ -46,6 +46,7 @@ abstract class GeneralApplication extends KintoneModel protected const RELATIONS = [ SeasonTicketContract::class, + SeasonTicketContractPlan::class, Customer::class, Bank::class, ]; diff --git a/app/Kintone/Models/SeasonTicketContract.php b/app/Kintone/Models/SeasonTicketContract.php index 23d996a..e4594c8 100644 --- a/app/Kintone/Models/SeasonTicketContract.php +++ b/app/Kintone/Models/SeasonTicketContract.php @@ -2,6 +2,8 @@ namespace App\Kintone\Models; +use App\Util\DateUtil; +use Illuminate\Support\Carbon; use LogicException; /** @@ -12,6 +14,8 @@ use LogicException; * @property string planName * @property string vehicleNo * @property string registerNo + * @property ?Carbon contractStartDate + * @property ?Carbon contractEndDate */ class SeasonTicketContract extends KintoneModel { @@ -69,6 +73,13 @@ class SeasonTicketContract extends KintoneModel self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => 'other_license_images_upload_datetime', ]; + protected function toArrayCustom(): array + { + return [ + 'can_some_apply' => $this->canSomeApply(), + ]; + } + public function getParking(): Parking { return Parking::findByParkingName($this->parkingName); @@ -78,4 +89,14 @@ class SeasonTicketContract extends KintoneModel { return Customer::findByCustomerCode($this->customerCode); } + + /** + * 各種申請を行うことができるか判定する + * + * @return boolean + */ + public function canSomeApply(): bool + { + return $this->contractEndDate instanceof Carbon ? DateUtil::now() <= $this->contractEndDate : false; + } } diff --git a/app/Kintone/Models/SeasonTicketContractPlan.php b/app/Kintone/Models/SeasonTicketContractPlan.php index b0b906f..fd74d70 100644 --- a/app/Kintone/Models/SeasonTicketContractPlan.php +++ b/app/Kintone/Models/SeasonTicketContractPlan.php @@ -2,6 +2,8 @@ namespace App\Kintone\Models; +use App\Kintone\Models\SubTable\SeasonTicketContractPlan\CanChangePlanName; +use Illuminate\Support\Collection; /** * アプリ名 定期駐車場プランマスタ @@ -11,6 +13,7 @@ namespace App\Kintone\Models; * @property string vehicleType * @property ?int taxAmount * @property ?int taxRate + * @property Collection canChangePlanNameList */ class SeasonTicketContractPlan extends KintoneModel { @@ -23,6 +26,9 @@ class SeasonTicketContractPlan extends KintoneModel const FIELD_TAX_AMOUNT = "内税"; const FIELD_TAX_RATE = "税率"; + const FIELD_CAN_CHANGE_PLAN_NAME_LIST = "プラン変更申請にて変更可能なプラン一覧"; + const FIELD_CAN_CHANGE_PLAN_NAME_LIST_PLAN_NAME = "プラン変更申請にて変更可能なプラン一覧_定期_駐車場名_月額金額_駐車場備考_プラン_種別_支払パターン"; + protected const FIELDS = [ ...parent::FIELDS, self::FIELD_PARKING_NAME => FieldType::SINGLE_LINE_TEXT, @@ -30,6 +36,11 @@ class SeasonTicketContractPlan extends KintoneModel self::FIELD_VEHICLE_TYPE => FieldType::SINGLE_LINE_TEXT, self::FIELD_TAX_AMOUNT => FieldType::NUMBER, self::FIELD_TAX_RATE => FieldType::NUMBER, + self::FIELD_CAN_CHANGE_PLAN_NAME_LIST => FieldType::SUBTABLE, + ]; + + protected const SUB_TABLES = [ + self::FIELD_CAN_CHANGE_PLAN_NAME_LIST => CanChangePlanName::class, ]; protected const FIELD_NAMES = [ @@ -38,10 +49,10 @@ class SeasonTicketContractPlan extends KintoneModel protected function toArrayCustom(): array { - $item = $this->sendItem; return [ - 'has_season_ticket' => in_array("定期券", $item), - 'has_sticker' => in_array("シール", $item), + 'has_season_ticket' => $this->hasSeasonTicket(), + 'has_sticker' => $this->hasSticker(), + 'can_apply_change_plan' => $this->canApplyChangePlan(), ]; } @@ -49,4 +60,17 @@ class SeasonTicketContractPlan extends KintoneModel { return static::getAccess()->first(static::getQuery()->where(static::FIELD_PLAN_NAME, $name)); } + + public function hasSeasonTicket(): bool + { + return in_array("定期券", $this->sendItem); + } + public function hasSticker(): bool + { + return in_array("シール", $this->sendItem); + } + public function canApplyChangePlan(): bool + { + return $this->canChangePlanNameList->isNotEmpty(); + } } diff --git a/app/Kintone/Models/SubTable/SeasonTicketContractPlan/CanChangePlanName.php b/app/Kintone/Models/SubTable/SeasonTicketContractPlan/CanChangePlanName.php new file mode 100644 index 0000000..d22a588 --- /dev/null +++ b/app/Kintone/Models/SubTable/SeasonTicketContractPlan/CanChangePlanName.php @@ -0,0 +1,27 @@ +planName = data_get($data, SeasonTicketContractPlan::FIELD_CAN_CHANGE_PLAN_NAME_LIST_PLAN_NAME, ""); + + parent::__construct($data); + } + + public function toArray(): array + { + return [ + SeasonTicketContractPlan::FIELD_CAN_CHANGE_PLAN_NAME_LIST_PLAN_NAME => $this->planName + ]; + } +} diff --git a/app/Logic/GeneralApplicationManager.php b/app/Logic/GeneralApplicationManager.php index ef3ad67..331caac 100644 --- a/app/Logic/GeneralApplicationManager.php +++ b/app/Logic/GeneralApplicationManager.php @@ -4,6 +4,7 @@ namespace App\Logic; use App\Exceptions\AppCommonException; use App\Kintone\Models\BankAccountUpdateApplication; +use App\Kintone\Models\ChangePlanApplication; use App\Kintone\Models\Customer; use App\Kintone\Models\GeneralApplication; use App\Kintone\Models\Parking; @@ -66,6 +67,10 @@ class GeneralApplicationManager $this->setType("口座変更申請"); return; } + if ($model instanceof ChangePlanApplication) { + $this->setType("プラン変更"); + return; + } } public function setCustomer(Customer $customer): static diff --git a/routes/api.php b/routes/api.php index c30c3fb..8c34437 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,11 +22,12 @@ RouteHelper::get('/season-ticket-contracts', App\Http\Controllers\Web\SeasonTick RouteHelper::get('/season-ticket-contract/payment-plans', App\Http\Controllers\Web\SeasonTicketContract\PaymentPlansController::class); RouteHelper::post('/season-ticket-contract/season-ticket-re-order', App\Http\Controllers\Web\SeasonTicketContract\SeasonTicketReOrderController::class); RouteHelper::post('/season-ticket-contract/sticker-re-order', App\Http\Controllers\Web\SeasonTicketContract\StickerReOrderController::class); +RouteHelper::post('/season-ticket-contract/change-plan-order', App\Http\Controllers\Web\SeasonTicketContract\ChangePlanOrderController::class); +RouteHelper::get('/season-ticket-contract/change-plan-order-params', App\Http\Controllers\Web\SeasonTicketContract\ChangePlanOrderOptionsController::class); RouteHelper::post('/season-ticket-contract/parking-certificate-order', App\Http\Controllers\Web\SeasonTicketContract\ParkingCertificateOrderController::class); RouteHelper::post('/season-ticket-contract/termination-order', App\Http\Controllers\Web\SeasonTicketContract\TerminationOrderController::class); RouteHelper::get('/season-ticket-contract/termination-order/options', App\Http\Controllers\Web\SeasonTicketContract\TerminationOrderOptionsController::class); RouteHelper::post('/season-ticket-contract/update-vehicle-info-order', App\Http\Controllers\Web\SeasonTicketContract\UpdateVehicleInfoOrderController::class); -RouteHelper::post('/season-ticket-contract/change-payment-interval-order', App\Http\Controllers\Web\SeasonTicketContract\ChangePaymentIntervalOrderController::class); RouteHelper::post('/upload/student-license-images', App\Http\Controllers\Web\SeasonTicketContract\UploadStudentLicenseImagesController::class); RouteHelper::post('/upload/other-license-images', App\Http\Controllers\Web\SeasonTicketContract\UploadOtherLicenseImagesController::class);