From c51741ba3f96663e4a855d1f124ba77fa99331b3 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Fri, 26 Apr 2024 13:16:09 +0900 Subject: [PATCH] =?UTF-8?q?IC=E5=AE=9A=E6=9C=9F=E9=80=A3=E6=90=BA=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Web/Customer/BeforeDeleteController.php | 44 ++++++++++ .../Web/Customer/BeforeDeleteParam.php | 18 ++++ .../Web/Customer/BeforeUpdateController.php | 43 +++++++++ .../Web/Customer/BeforeUpdateParam.php | 27 ++++++ .../Controllers/Web/FromKintoneController.php | 15 +++- .../Web/HTICWeb/AdjustDataController.php | 76 ++++++++++++++++ .../Web/HTICWeb/AdjustDataParam.php | 25 ++++++ .../SeasonTicketContractController.php | 77 ++++++++++++++++ .../Web/HTICWeb/SeasonTicketContractParam.php | 41 +++++++++ .../Web/HTICWeb/UserController.php | 37 ++++++++ .../Controllers/Web/HTICWeb/UserParam.php | 17 ++++ .../Web/HTICWeb/UserRegisterController.php | 39 +++++++++ .../Web/HTICWeb/UserRegisterParam.php | 29 +++++++ .../BeforeCreateController.php | 77 ++++++++++++++++ .../BeforeCreateParam.php | 30 +++++++ .../BeforeDeleteController.php | 39 +++++++++ .../BeforeDeleteParam.php | 19 ++++ .../BeforeUpdateController.php | 76 ++++++++++++++++ .../BeforeUpdateParam.php | 30 +++++++ .../SeasonTicketContract/FetchController.php | 38 ++++++++ .../Web/SeasonTicketContract/FetchParam.php | 18 ++++ .../ParkingUseTypeChangeOrderController.php | 58 +++++++++++++ .../ParkingUseTypeChangeOrderParam.php | 24 +++++ app/Http/Controllers/Web/WebController.php | 13 +++ app/Http/Kernel.php | 1 + app/Http/Middleware/FromHTICWeb.php | 33 +++++++ app/Kintone/Models/Customer.php | 2 + .../DropDown/PaymentPlan/PaymentMethod.php | 13 +++ .../ParkingUseTypeChangeOrderApplication.php | 28 ++++++ app/Kintone/Models/PaymentPlan.php | 9 +- app/Kintone/Models/SeasonTicketContract.php | 36 ++++++++ app/Logic/GeneralApplicationManager.php | 5 ++ app/Providers/RouteServiceProvider.php | 5 ++ app/Transmissions/HTICWeb/Sender.php | 87 +++++++++++++++++++ config/custom.php | 8 ++ routes/api.php | 2 + routes/apiFromHTICWeb.php | 19 ++++ routes/apiFromKintone.php | 8 ++ routes/web.php | 6 ++ 39 files changed, 1169 insertions(+), 3 deletions(-) create mode 100644 app/Http/Controllers/Web/Customer/BeforeDeleteController.php create mode 100644 app/Http/Controllers/Web/Customer/BeforeDeleteParam.php create mode 100644 app/Http/Controllers/Web/Customer/BeforeUpdateController.php create mode 100644 app/Http/Controllers/Web/Customer/BeforeUpdateParam.php create mode 100644 app/Http/Controllers/Web/HTICWeb/AdjustDataController.php create mode 100644 app/Http/Controllers/Web/HTICWeb/AdjustDataParam.php create mode 100644 app/Http/Controllers/Web/HTICWeb/SeasonTicketContractController.php create mode 100644 app/Http/Controllers/Web/HTICWeb/SeasonTicketContractParam.php create mode 100644 app/Http/Controllers/Web/HTICWeb/UserController.php create mode 100644 app/Http/Controllers/Web/HTICWeb/UserParam.php create mode 100644 app/Http/Controllers/Web/HTICWeb/UserRegisterController.php create mode 100644 app/Http/Controllers/Web/HTICWeb/UserRegisterParam.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateParam.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteParam.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateParam.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/FetchController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/FetchParam.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderController.php create mode 100644 app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderParam.php create mode 100644 app/Http/Middleware/FromHTICWeb.php create mode 100644 app/Kintone/Models/DropDown/PaymentPlan/PaymentMethod.php create mode 100644 app/Kintone/Models/ParkingUseTypeChangeOrderApplication.php create mode 100644 app/Transmissions/HTICWeb/Sender.php create mode 100644 config/custom.php create mode 100644 routes/apiFromHTICWeb.php diff --git a/app/Http/Controllers/Web/Customer/BeforeDeleteController.php b/app/Http/Controllers/Web/Customer/BeforeDeleteController.php new file mode 100644 index 0000000..333917c --- /dev/null +++ b/app/Http/Controllers/Web/Customer/BeforeDeleteController.php @@ -0,0 +1,44 @@ +param; + + $this->sendUserDelete( + [ + ...$param->toArray(), + 'id' => $param->userId, + ] + ); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/Customer/BeforeDeleteParam.php b/app/Http/Controllers/Web/Customer/BeforeDeleteParam.php new file mode 100644 index 0000000..7509774 --- /dev/null +++ b/app/Http/Controllers/Web/Customer/BeforeDeleteParam.php @@ -0,0 +1,18 @@ + $this->numeric(), + ]; + } +} diff --git a/app/Http/Controllers/Web/Customer/BeforeUpdateController.php b/app/Http/Controllers/Web/Customer/BeforeUpdateController.php new file mode 100644 index 0000000..4d4dd06 --- /dev/null +++ b/app/Http/Controllers/Web/Customer/BeforeUpdateController.php @@ -0,0 +1,43 @@ +param; + + $res = $this->sendUserUpdate( + [ + ...$param->toArray(), + ] + ); + + return $this->successResponse($res->json("data")); + } +} diff --git a/app/Http/Controllers/Web/Customer/BeforeUpdateParam.php b/app/Http/Controllers/Web/Customer/BeforeUpdateParam.php new file mode 100644 index 0000000..324f394 --- /dev/null +++ b/app/Http/Controllers/Web/Customer/BeforeUpdateParam.php @@ -0,0 +1,27 @@ + $this->numeric(), + 'email' => $this->str([...Rule::email()]), + 'first_name' => $this->str(true), + 'last_name' => $this->str(true), + 'first_name_kana' => $this->str(true), + 'last_name_kana' => $this->str(true), + 'zip_code' => $this->str(true), + 'pref_code' => $this->str(true), + 'address1' => $this->str(true), + 'address2' => $this->str(true), + 'address3' => $this->str(true), + 'phone_number' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/FromKintoneController.php b/app/Http/Controllers/Web/FromKintoneController.php index 828c0ef..db204ec 100644 --- a/app/Http/Controllers/Web/FromKintoneController.php +++ b/app/Http/Controllers/Web/FromKintoneController.php @@ -16,11 +16,22 @@ abstract class FromKintoneController extends WebController { if ($this->resultCode === ResultCode::SECCESS) { return response()->json([ - 'result' => 'SUCCESS' + 'result' => 'SUCCESS', + 'data' => $this->getData(), ]); } + + $message = $this->getGeneralMessage() ?? ""; + if (!$message) { + $messages = $this->getMessages(); + if (is_array($message) && 0 < count($messages)) { + $message = $messages[array_key_first($message)]; + } + } + return response()->json([ - 'result' => 'FAILED' + 'result' => 'FAILED', + 'message' => $message, ]); } } diff --git a/app/Http/Controllers/Web/HTICWeb/AdjustDataController.php b/app/Http/Controllers/Web/HTICWeb/AdjustDataController.php new file mode 100644 index 0000000..cc03263 --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/AdjustDataController.php @@ -0,0 +1,76 @@ +param; + + // 契約の特定 + $query = SeasonTicketContract::getQuery() + ->where(SeasonTicketContract::FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE, $param->parkingManagementCode) + ->where(SeasonTicketContract::FIELD_IC_SEASON_TICEKT_SEASON_TICKET_SEQ_NO, $param->seasonTicketSeqNo); + $list = SeasonTicketContract::getAccess()->all($query); + if ($list->count() !== 1) { + // 対象不正のためスキップ + info("対象不正のためスキップ"); + return $this->successResponse(); + } + $seasonTicketContract = $list[0]; + + // 重複チェック + $query = PaymentPlan::getQuery() + ->where(PaymentPlan::FIELD_IC_SEASON_TICKET_CONTRACT_ID, $seasonTicketContract->icSeasonTicektContractId) + ->where(PaymentPlan::FIELD_CUSTOMER_CODE, $seasonTicketContract->customerCode) + ->whereDate(PaymentPlan::FIELD_APPROPRIATION_DATE, $param->adjustDatetime) + ->where(PaymentPlan::FIELD_APPROPRIATION_AMOUNT, $param->parkingCharge); + if (PaymentPlan::getAccess()->all($query)->isNotEmpty()) { + // 登録済みのためスキップ + info("登録済みのためスキップ"); + return $this->successResponse(); + } + + // データ保存 + $plan = new PaymentPlan(); + $plan->seasonTicketContractRecordNo = $seasonTicketContract->getRecordId(); + $plan->icSeasonTicketContractId = $seasonTicketContract->icSeasonTicektContractId; + $plan->paymentType = PaymentType::SEASON_TICKET; + $plan->paymentMethod = PaymentMethod::定期更新機; + $plan->paymentPlanDate = $param->adjustDatetime; + $plan->paymentPlanAmount = $param->parkingCharge; + $plan->appropriationDate = $param->adjustDatetime; + $plan->appropriationAmount = $param->parkingCharge; + $plan->remainingAmount = 0; + + $plan->save(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/AdjustDataParam.php b/app/Http/Controllers/Web/HTICWeb/AdjustDataParam.php new file mode 100644 index 0000000..7cdab4c --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/AdjustDataParam.php @@ -0,0 +1,25 @@ + $this->str(), + 'season_ticket_seq_no' => $this->numeric(), + 'parking_charge' => $this->numeric(), + 'adjust_datetime' => $this->date(), + ]; + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractController.php b/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractController.php new file mode 100644 index 0000000..a683cd1 --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractController.php @@ -0,0 +1,77 @@ +param; + + // 顧客マスタの特定 + $query = Customer::getQuery()->where(Customer::FIELD_IC_SEASON_TICEKT_USER_ID, $param->userId); + $customerList = Customer::getAccess()->all($query); + + if ($customerList->count() !== 1) { + // 対象不正のためスキップ + Log::warning("顧客不正のためスキップ"); + return $this->successResponse(); + } + + // 契約の特定 + $customer = $customerList[0]; + + $query = SeasonTicketContract::getQuery() + ->where(SeasonTicketContract::FIELD_CUSTOMER_CODE, $customer->customerCode) + ->where(SeasonTicketContract::FIELD_IC_SEASON_TICEKT_CONTRACT_ID, $param->seasonTicketContractId) + ->where(SeasonTicketContract::FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE, $param->parkingManagementCode); + + $seasonTicketContractList = SeasonTicketContract::getAccess()->all($query); + + if ($seasonTicketContractList->count() !== 1) { + // 対象不正のためスキップ + Log::warning("契約不正のためスキップ"); + return $this->successResponse(); + } + + // 更新 + $seasonTicketContract = $seasonTicketContractList[0]; + + $seasonTicketContract->icSeasonTicektSeasonTicketSeqNo = $param->seasonTicketSeqNo; + $seasonTicketContract->icSeasonTicektVehicleTypeName = $param->vehicleTypeName; + $seasonTicketContract->icSeasonTicektParkingUseTypeName = $param->parkingUseTypeName; + $seasonTicketContract->icSeasonTicektContractorTypeName = $param->contractorTypeLineNoName; + $seasonTicketContract->icSeasonTicektStartDate = $param->expirationStartDate; + $seasonTicketContract->icSeasonTicektEndDate = $param->expirationEndDate; + $seasonTicketContract->icSeasonTicektPositionMemo = $param->positionMemo; + $seasonTicketContract->icSeasonTicektMemo = $param->memo; + + $seasonTicketContract->save(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractParam.php b/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractParam.php new file mode 100644 index 0000000..a530bf7 --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/SeasonTicketContractParam.php @@ -0,0 +1,41 @@ + $this->numeric(), + 'season_ticket_contract_id' => $this->numeric(), + 'parking_management_code' => $this->str(), + 'season_ticket_seq_no' => $this->numeric(), + 'expiration_start_date' => $this->date(true), + 'expiration_end_date' => $this->date(true), + 'vehicle_type_name' => $this->str(), + 'parking_use_type_name' => $this->str(), + 'contractor_type_line_no_name' => $this->str(), + 'position_memo' => $this->str(), + 'memo' => $this->str(), + 'invalid_flg' => $this->boolean(), + ]; + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/UserController.php b/app/Http/Controllers/Web/HTICWeb/UserController.php new file mode 100644 index 0000000..b9ed0b5 --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/UserController.php @@ -0,0 +1,37 @@ +param; + + + + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/UserParam.php b/app/Http/Controllers/Web/HTICWeb/UserParam.php new file mode 100644 index 0000000..9bd37aa --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/UserParam.php @@ -0,0 +1,17 @@ +param; + + $res = $this->sendUserCreate($param->toArray()); + + return $this->successResponse($res->json('data')); + } +} diff --git a/app/Http/Controllers/Web/HTICWeb/UserRegisterParam.php b/app/Http/Controllers/Web/HTICWeb/UserRegisterParam.php new file mode 100644 index 0000000..987de67 --- /dev/null +++ b/app/Http/Controllers/Web/HTICWeb/UserRegisterParam.php @@ -0,0 +1,29 @@ + $this->str([...Rule::email()]), + 'first_name' => $this->str(true), + 'last_name' => $this->str(true), + 'first_name_kana' => $this->str(true), + 'last_name_kana' => $this->str(true), + 'zip_code' => $this->str(true), + 'pref_code' => $this->str(true), + 'address1' => $this->str(true), + 'address2' => $this->str(true), + 'address3' => $this->str(true), + 'phone_number' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateController.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateController.php new file mode 100644 index 0000000..8a79f44 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateController.php @@ -0,0 +1,77 @@ +param; + + + // 名称からコード値へ変換 + $res = $this->getSeasonTicketContractParams($param->toArray()); + + $contractorType = $this->getKey($res->json("data.contractor_type"), $param->contractorTypeName); + $parkingUseType = $this->getKey($res->json("data.parking_use_type"), $param->parkingUseTypeName); + $vehicleType = $this->getKey($res->json("data.vehicle_type"), $param->vehicleTypeName); + + if ($contractorType === null) { + throw new GeneralErrorMessageException("契約者タイプ不正"); + } + if ($parkingUseType === null) { + throw new GeneralErrorMessageException("駐車場利用方法不正"); + } + if ($vehicleType === null) { + throw new GeneralErrorMessageException("車両タイプ不正"); + } + + $res = $this->sendSeasonTicketContractCreate( + [ + ...$param->toArray(), + 'contractor_type_line_no' => $contractorType, + 'vehicle_type' => $vehicleType, + 'parking_use_type' => $parkingUseType, + ] + ); + + return $this->successResponse($res->json("data")); + } + + private function getKey(array $list, string $targetName) + { + foreach ($list as $ele) { + $key = array_key_first($ele); + $val = $ele[$key]; + if ($val === $targetName) { + return $key; + } + } + return null; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateParam.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateParam.php new file mode 100644 index 0000000..b20517e --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeCreateParam.php @@ -0,0 +1,30 @@ + $this->numeric(), + 'parking_management_code' => $this->str(), + 'season_ticket_seq_no' => $this->numeric(true), + 'vehicle_type_name' => $this->str(), + 'parking_use_type_name' => $this->str(), + 'contractor_type_name' => $this->str(), + 'expiration_start_date' => $this->date(true), + 'expiration_end_date' => $this->date(true), + 'position_memo' => $this->str(true), + 'memo' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteController.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteController.php new file mode 100644 index 0000000..6d7410d --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteController.php @@ -0,0 +1,39 @@ +param; + + $res = $this->sendSeasonTicketContractDelete($param->toArray()); + + return $this->successResponse($res->json()); + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteParam.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteParam.php new file mode 100644 index 0000000..2f51628 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeDeleteParam.php @@ -0,0 +1,19 @@ + $this->numeric(), + 'parking_management_code' => $this->str(), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateController.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateController.php new file mode 100644 index 0000000..08c1f8d --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateController.php @@ -0,0 +1,76 @@ +param; + + + // 名称からコード値へ変換 + $res = $this->getSeasonTicketContractParams($param->toArray()); + + $contractorType = $this->getKey($res->json("data.contractor_type"), $param->contractorTypeName); + $parkingUseType = $this->getKey($res->json("data.parking_use_type"), $param->parkingUseTypeName); + $vehicleType = $this->getKey($res->json("data.vehicle_type"), $param->vehicleTypeName); + + if ($contractorType === null) { + throw new GeneralErrorMessageException("契約者タイプ不正"); + } + if ($parkingUseType === null) { + throw new GeneralErrorMessageException("駐車場利用方法不正"); + } + if ($vehicleType === null) { + throw new GeneralErrorMessageException("車両タイプ不正"); + } + + $res = $this->sendSeasonTicketContractUpdate( + [ + ...$param->toArray(), + 'contractor_type_line_no' => $contractorType, + 'vehicle_type' => $vehicleType, + 'parking_use_type' => $parkingUseType, + ] + ); + return $this->successResponse($res->json("data")); + } + + private function getKey(array $list, string $targetName) + { + foreach ($list as $ele) { + $key = array_key_first($ele); + $val = $ele[$key]; + if ($val === $targetName) { + return $key; + } + } + return null; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateParam.php b/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateParam.php new file mode 100644 index 0000000..ca889f5 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/BeforeUpdateParam.php @@ -0,0 +1,30 @@ + $this->numeric(), + 'parking_management_code' => $this->str(), + 'season_ticket_seq_no' => $this->numeric(true), + 'vehicle_type_name' => $this->str(), + 'parking_use_type_name' => $this->str(), + 'contractor_type_name' => $this->str(), + 'expiration_start_date' => $this->date(true), + 'expiration_end_date' => $this->date(true), + 'position_memo' => $this->str(true), + 'memo' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/FetchController.php b/app/Http/Controllers/Web/SeasonTicketContract/FetchController.php new file mode 100644 index 0000000..6fefdbe --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/FetchController.php @@ -0,0 +1,38 @@ +param; + + $res = $this->getSeasonTicketContractFetch($param->toArray()); + return $this->successResponse($res->json("data")); + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/FetchParam.php b/app/Http/Controllers/Web/SeasonTicketContract/FetchParam.php new file mode 100644 index 0000000..96068a3 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/FetchParam.php @@ -0,0 +1,18 @@ + $this->numeric(), + ]; + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderController.php b/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderController.php new file mode 100644 index 0000000..eb38d0f --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderController.php @@ -0,0 +1,58 @@ +middleware('auth:sanctum'); + } + + protected function run(Request $request): JsonResponse + { + $param = $this->param; + + $parking = Parking::findByParkingName($param->parkingName); + $customer = Customer::getSelf(); + $seasonTicketContract = SeasonTicketContract::find($param->seasonTicketContractRecordNo); + + $application = new ParkingUseTypeChangeOrderApplication(); + $manager = new GeneralApplicationManager($application); + $manager + ->setCustomer($customer) + ->setSeasonTicketContract($seasonTicketContract) + ->setParking($parking) + ->makeApplication(); + + $application->parkingUseTypeBefore = $seasonTicketContract->icSeasonTicektParkingUseTypeName; + $application->parkingUseTypeAfter = $param->parkingUseType; + $application->memo = $param->memo; + + $application->save(); + + return $this->successResponse(); + } +} diff --git a/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderParam.php b/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderParam.php new file mode 100644 index 0000000..6cdfa95 --- /dev/null +++ b/app/Http/Controllers/Web/SeasonTicketContract/ParkingUseTypeChangeOrderParam.php @@ -0,0 +1,24 @@ + $this->str(), + 'parking_name' => $this->str(), + 'parking_use_type' => $this->str(), + 'memo' => $this->str(true), + ]; + } +} diff --git a/app/Http/Controllers/Web/WebController.php b/app/Http/Controllers/Web/WebController.php index 733b281..2b942d6 100644 --- a/app/Http/Controllers/Web/WebController.php +++ b/app/Http/Controllers/Web/WebController.php @@ -377,6 +377,19 @@ abstract class WebController extends BaseController return $this; } + protected function getData() + { + return $this->data; + } + protected function getGeneralMessage() + { + return $this->generalMessage; + } + protected function getMessages() + { + return $this->messages; + } + protected function setResultCode(ResultCode $resultCode) { $this->resultCode = $resultCode; diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 099dc96..35bcc07 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -65,5 +65,6 @@ class Kernel extends HttpKernel 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'fromKintone' => \App\Http\Middleware\FromKintoneMiddleware::class, + 'fromHTICWeb' => \App\Http\Middleware\FromHTICWeb::class, ]; } diff --git a/app/Http/Middleware/FromHTICWeb.php b/app/Http/Middleware/FromHTICWeb.php new file mode 100644 index 0000000..cc86f94 --- /dev/null +++ b/app/Http/Middleware/FromHTICWeb.php @@ -0,0 +1,33 @@ +has(self::API_KEY_NAME) === false) { + abort(403); + } + + if ($request->get(self::API_KEY_NAME) !== config("custom.ht-ic-web.apiKey")) { + abort(403); + } + + return $next($request); + } +} diff --git a/app/Kintone/Models/Customer.php b/app/Kintone/Models/Customer.php index 7347018..66d607d 100644 --- a/app/Kintone/Models/Customer.php +++ b/app/Kintone/Models/Customer.php @@ -29,6 +29,7 @@ class Customer extends KintoneModel const FIELD_ADDRESS = "住所"; const FIELD_BANK_BRANCH_ID = "ChargedBankBranchCode"; const FIELD_BANK_ACCOUNT_REGISTER_REMAIND_DATETIME = "口座登録催促予定日時"; + const FIELD_IC_SEASON_TICEKT_USER_ID = "IC定期関連情報_ユーザーID"; protected const FIELDS = [ ...parent::FIELDS, @@ -41,6 +42,7 @@ class Customer extends KintoneModel self::FIELD_ADDRESS => FieldType::SINGLE_LINE_TEXT, self::FIELD_BANK_BRANCH_ID => FieldType::SINGLE_LINE_TEXT, self::FIELD_BANK_ACCOUNT_REGISTER_REMAIND_DATETIME => FieldType::DATETIME, + self::FIELD_IC_SEASON_TICEKT_USER_ID => FieldType::NUMBER, ]; protected const FIELD_NAMES = [ diff --git a/app/Kintone/Models/DropDown/PaymentPlan/PaymentMethod.php b/app/Kintone/Models/DropDown/PaymentPlan/PaymentMethod.php new file mode 100644 index 0000000..feab057 --- /dev/null +++ b/app/Kintone/Models/DropDown/PaymentPlan/PaymentMethod.php @@ -0,0 +1,13 @@ + FieldType::SINGLE_LINE_TEXT, + self::FIELD_PARKING_USE_TYPE_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/PaymentPlan.php b/app/Kintone/Models/PaymentPlan.php index 498c794..e1452bb 100644 --- a/app/Kintone/Models/PaymentPlan.php +++ b/app/Kintone/Models/PaymentPlan.php @@ -9,7 +9,7 @@ use Illuminate\Support\Collection; /** * アプリ名 入金予定・結果 - * @property int SEASON_TICKET_CONTRACT_RECORD_NO + * @property int seasonTicketContractRecordNo * @property string parkingName * @property int parkingName * @property int customerCode @@ -26,6 +26,7 @@ use Illuminate\Support\Collection; * @property int firstPaymentEntryRecordNo * @property Collection depositList * @property string[] partialFee + * @property int icSeasonTicketContractId */ class PaymentPlan extends KintoneModel { @@ -49,6 +50,7 @@ class PaymentPlan extends KintoneModel const FIELD_DEPOSIT_LIST_NAME = "保証金明細_名称"; const FIELD_DEPOSIT_LIST_AMOUNT = "保証金明細_金額"; const FIELD_PARTIAL_FEE = "定期料金日割り分"; + const FIELD_IC_SEASON_TICKET_CONTRACT_ID = "IC定期_契約ID"; protected const FIELDS = [ ...parent::FIELDS, @@ -68,6 +70,7 @@ class PaymentPlan extends KintoneModel self::FIELD_FIRST_PAYMENT_ENTRY_RECORD_NO => FieldType::NUMBER, self::FIELD_DEPOSIT_LIST => FieldType::SUBTABLE, self::FIELD_PARTIAL_FEE => FieldType::CHECK_BOX, + self::FIELD_IC_SEASON_TICKET_CONTRACT_ID => FieldType::NUMBER, ]; protected const SUB_TABLES = [ @@ -85,6 +88,10 @@ class PaymentPlan extends KintoneModel self::FIELD_TARGET_MONTH => 'target_month', ]; + protected const RELATIONS = [ + SeasonTicketContract::class, + ]; + protected function toArrayCustom(): array { return [ diff --git a/app/Kintone/Models/SeasonTicketContract.php b/app/Kintone/Models/SeasonTicketContract.php index b5db1d5..9881fdf 100644 --- a/app/Kintone/Models/SeasonTicketContract.php +++ b/app/Kintone/Models/SeasonTicketContract.php @@ -17,6 +17,16 @@ use Illuminate\Support\Carbon; * @property string registerNo * @property ?Carbon contractStartDate * @property ?Carbon contractEndDate + * @property ?int icSeasonTicektContractId + * @property ?string icSeasonTicektParkingManagementCode + * @property ?int icSeasonTicektSeasonTicketSeqNo + * @property ?string icSeasonTicektVehicleTypeName + * @property ?string icSeasonTicektParkingUseTypeName + * @property ?string icSeasonTicektContractorTypeName + * @property ?Carbon icSeasonTicektStartDate + * @property ?Carbon icSeasonTicektEndDate + * @property ?string icSeasonTicektPositionMemo + * @property ?string icSeasonTicektMemo */ class SeasonTicketContract extends KintoneModel { @@ -40,6 +50,17 @@ class SeasonTicketContract extends KintoneModel const FIELD_STUDENT_LICENSE_EXPIRES_DATE = "学生証有効期限"; const FIELD_OTHER_LICENSE_EXPIRES_DATE = "障がい者手帳有効期限"; + const FIELD_IC_SEASON_TICEKT_CONTRACT_ID = "IC定期関連情報_契約ID"; + const FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE = "IC定期関連情報_駐車場管理コード"; + const FIELD_IC_SEASON_TICEKT_SEASON_TICKET_SEQ_NO = "IC定期関連情報_定期券番号"; + const FIELD_IC_SEASON_TICEKT_VEHICLE_TYPE_NAME = "IC定期関連情報_車種"; + const FIELD_IC_SEASON_TICEKT_PARKING_USE_TYPE_NAME = "IC定期関連情報_駐車場利用方法"; + const FIELD_IC_SEASON_TICEKT_CONTRACTOR_TYPE_NAME = "IC定期関連情報_契約者種類"; + const FIELD_IC_SEASON_TICEKT_START_DATE = "IC定期関連情報_有効期限開始"; + const FIELD_IC_SEASON_TICEKT_END_DATE = "IC定期関連情報_有効期限終了"; + const FIELD_IC_SEASON_TICEKT_POSITION_MEMO = "IC定期関連情報_駐車位置情報"; + const FIELD_IC_SEASON_TICEKT_MEMO = "IC定期関連情報_備考"; + protected const FIELDS = [ ...parent::FIELDS, self::FIELD_CUSTOMER_CODE => FieldType::NUMBER, @@ -58,6 +79,16 @@ class SeasonTicketContract extends KintoneModel self::FIELD_OTHER_LICENSE_IMAGES_UPLOAD_DATETIME => FieldType::DATETIME, self::FIELD_STUDENT_LICENSE_EXPIRES_DATE => FieldType::DATE, self::FIELD_OTHER_LICENSE_EXPIRES_DATE => FieldType::DATE, + self::FIELD_IC_SEASON_TICEKT_PARKING_MANAGEMENT_CODE => FieldType::SINGLE_LINE_TEXT, + self::FIELD_IC_SEASON_TICEKT_CONTRACT_ID => FieldType::NUMBER, + self::FIELD_IC_SEASON_TICEKT_SEASON_TICKET_SEQ_NO => FieldType::NUMBER, + self::FIELD_IC_SEASON_TICEKT_VEHICLE_TYPE_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_IC_SEASON_TICEKT_PARKING_USE_TYPE_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_IC_SEASON_TICEKT_CONTRACTOR_TYPE_NAME => FieldType::SINGLE_LINE_TEXT, + self::FIELD_IC_SEASON_TICEKT_START_DATE => FieldType::DATE, + self::FIELD_IC_SEASON_TICEKT_END_DATE => FieldType::DATE, + self::FIELD_IC_SEASON_TICEKT_POSITION_MEMO => FieldType::SINGLE_LINE_TEXT, + self::FIELD_IC_SEASON_TICEKT_MEMO => FieldType::MULTI_LINE_TEXT, ]; protected const FIELD_NAMES = [ @@ -85,6 +116,7 @@ class SeasonTicketContract extends KintoneModel 'can_parking_certificate_apply' => $this->canParkingCertificateApply(), 'can_change_plan_apply' => $this->canChangePlanApply(), 'is_terminated' => $this->isTerminated(), + 'is_ic_season_ticket' => $this->isIcSeasonTicket(), ]; } @@ -126,6 +158,10 @@ class SeasonTicketContract extends KintoneModel { return $this->contractEndDate instanceof Carbon ? $this->contractEndDate <= DateUtil::now() : false; } + public function isIcSeasonTicket(): bool + { + return !!$this->icSeasonTicektContractId; + } public function canParkingCertificateApply(): bool { diff --git a/app/Logic/GeneralApplicationManager.php b/app/Logic/GeneralApplicationManager.php index 331caac..0afb47c 100644 --- a/app/Logic/GeneralApplicationManager.php +++ b/app/Logic/GeneralApplicationManager.php @@ -9,6 +9,7 @@ use App\Kintone\Models\Customer; use App\Kintone\Models\GeneralApplication; use App\Kintone\Models\Parking; use App\Kintone\Models\ParkingCertificateApplication; +use App\Kintone\Models\ParkingUseTypeChangeOrderApplication; use App\Kintone\Models\SeasonTicketContract; use App\Kintone\Models\SeasonTicketReOrderApplication; use App\Kintone\Models\StickerReOrderApplication; @@ -47,6 +48,10 @@ class GeneralApplicationManager $this->setType("シール再発行申請"); return; } + if ($model instanceof ParkingUseTypeChangeOrderApplication) { + $this->setType("IC定期_駐車場利用方法変更申請"); + return; + } if ($model instanceof SeasonTicketReOrderApplication) { $this->setType("定期券再発行申請"); return; diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 41f4f04..93b335f 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -30,10 +30,15 @@ class RouteServiceProvider extends ServiceProvider Route::middleware('web') ->prefix('api') ->group(base_path('routes/api.php')); + Route::middleware('api') ->prefix('api-from-kintone') ->group(base_path('routes/apiFromKintone.php')); + Route::middleware(['api', "fromHTICWeb"]) + ->prefix('api/ht-ic-web') + ->group(base_path('routes/apiFromHTICWeb.php')); + Route::middleware('web') ->group(base_path('routes/web.php')); }); diff --git a/app/Transmissions/HTICWeb/Sender.php b/app/Transmissions/HTICWeb/Sender.php new file mode 100644 index 0000000..4b0b776 --- /dev/null +++ b/app/Transmissions/HTICWeb/Sender.php @@ -0,0 +1,87 @@ +sendToHTICWeb("seasonticketcontract/create", $contents); + } + protected function sendSeasonTicketContractUpdate(array $contents) + { + return $this->sendToHTICWeb("seasonticketcontract/update", $contents); + } + protected function sendSeasonTicketContractDelete(array $contents) + { + return $this->sendToHTICWeb("seasonticketcontract/delete", $contents); + } + protected function getSeasonTicketContractParams(array $contents) + { + return $this->sendToHTICWeb("seasonticketcontract/params", $contents); + } + protected function getSeasonTicketContractFetch(array $contents) + { + return $this->sendToHTICWeb("seasonticketcontract/fetch", $contents); + } + protected function sendUserCreate(array $contents) + { + return $this->sendToHTICWeb("user/create", $contents); + } + protected function sendUserUpdate(array $contents) + { + return $this->sendToHTICWeb("user/update", $contents); + } + protected function sendUserDelete(array $contents) + { + return $this->sendToHTICWeb("user/delete", $contents); + } + + private function sendToHTICWeb(string $url, array $contents) + { + $fullUrl = sprintf("%s/api/kyoto-public/%s", config("custom.ht-ic-web.url", ""), $url); + $customerCode = app()->environment([EnvironmentName::PRODUCTOIN->value]) ? "1163" : "9990"; + $sendContents = [ + ...$contents, + 'customer_code' => $customerCode, + 'ht-ic-web-api-key' => config("custom.ht-ic-web.apiKey", ""), + + ]; + logger([ + "senddata", + 'url' => $fullUrl, + "contents" => $sendContents + ]); + $res = Http::post($fullUrl, $sendContents); + + if ($res->failed()) { + throw $res->toException(); + } + + if ($res->json('result') !== 0) { + logger($res->json()); + + + $generalErrorMessage = $res->json('messages.general', ""); + if (!!$generalErrorMessage) { + throw new GeneralErrorMessageException($generalErrorMessage); + } + $messages = $res->json('messages.errors', []); + logger(['messages' => $messages]); + if (0 < count($messages)) { + $key = array_key_first($messages); + $message = $messages[$key]; + throw new GeneralErrorMessageException(sprintf("%s: %s", $key, $message)); + } + + throw new AppCommonException("HTICWeb連携失敗"); + } + + return $res; + } +} diff --git a/config/custom.php b/config/custom.php new file mode 100644 index 0000000..02cf31c --- /dev/null +++ b/config/custom.php @@ -0,0 +1,8 @@ + [ + 'apiKey' => env("HT_IC_WEB_API_KEY", ""), + 'url' => env("HT_IC_WEB_URL", ""), + ] +]; diff --git a/routes/api.php b/routes/api.php index 1ef64fa..def7c4e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,6 +1,7 @@ where('any', '.*');