From 02ce2318120da51502163cb2b4f1bcd140b33994 Mon Sep 17 00:00:00 2001 From: "sosuke.iwabuchi" Date: Thu, 28 Mar 2024 23:48:36 +0900 Subject: [PATCH] =?UTF-8?q?=E7=94=B3=E8=BE=BC=E3=81=AE=E3=83=97=E3=83=A9?= =?UTF-8?q?=E3=83=B3=E5=90=8D=E3=82=92=E8=A8=AD=E5=AE=9A=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../buttons/定期駐車場プラン入力.ts | 73 +++++++++++++++++++ src/apps/定期申込予約/index.tsx | 2 + src/common/appids.ts | 1 + src/config/kintone.ts | 3 + src/types/ParkingNavi駐車場プラン.ts | 24 ++++++ src/types/定期申込予約.ts | 12 ++- 6 files changed, 111 insertions(+), 4 deletions(-) create mode 100644 src/apps/定期申込予約/buttons/定期駐車場プラン入力.ts create mode 100644 src/types/ParkingNavi駐車場プラン.ts diff --git a/src/apps/定期申込予約/buttons/定期駐車場プラン入力.ts b/src/apps/定期申込予約/buttons/定期駐車場プラン入力.ts new file mode 100644 index 0000000..d087946 --- /dev/null +++ b/src/apps/定期申込予約/buttons/定期駐車場プラン入力.ts @@ -0,0 +1,73 @@ +import { apptemplate } from "@/common/app-template"; +import { AppID } from "@/common/appids"; +import { setHeaderButton } from "@/common/header-button"; +import { makeRecordData } from "@/common/rest-api-client"; +import { Message } from "@/exception"; +import { ShowConfirmDialog, SuccessDialog } from "@/middleware/swal"; +import bulkRequest from "@/rest-api/bulk"; +import { QueryBuilder } from "@/rest-api/query"; +import { + ParkingNavi駐車場プラン, + ParkingNavi駐車場プランフィールド名, +} from "@/types/ParkingNavi駐車場プラン"; +import { 定期申込予約, 定期申込予約フィールド名 } from "@/types/定期申込予約"; +import { KintoneRestAPIClient } from "@kintone/rest-api-client"; +import { sprintf } from "sprintf"; + +const 表示判定 = (record: 定期申込予約): boolean => { + return true; +}; + +export default function 定期駐車場プラン入力(record: 定期申込予約) { + if (表示判定(record)) { + setHeaderButton( + "定期駐車場プラン入力", + apptemplate(async ({ needReloadAtEnd }) => { + const confirmMessage = (() => { + if (!!record.承認メール送信日時.value) { + return "定期駐車場プラン名を入力しますか?"; + } + return "送信しますか?"; + })(); + const confirm = await ShowConfirmDialog({ + text: confirmMessage, + }); + if (!confirm.isConfirmed) return; + + const client = new KintoneRestAPIClient(); + const F = ParkingNavi駐車場プランフィールド名; + const builder = new QueryBuilder(); + builder.where(F.parkingnavi駐車場名, record.ParkingNavi駐車場.value); + builder.where(F.プラン名, record.ParkingNaviプラン.value); + const records = await client.record.getRecords( + { + app: AppID.ParkingNavi駐車場プラン, + query: builder.build(), + } + ); + + if (records.records.length === 0) { + throw new Message("ParkingNavi駐車場が設定されていません"); + } + if (records.records.length > 1) { + throw new Message("ParkingNavi駐車場が2つ以上設定されています"); + } + const parkingNavi = records.records[0]; + + bulkRequest.update({ + app: AppID.定期申込予約, + id: record.$id.value, + record: makeRecordData({ + [定期申込予約フィールド名.駐車場名]: parkingNavi.定期駐車場名.value, + [定期申込予約フィールド名.定期駐車場プラン]: + parkingNavi.定期駐車場プラン.value, + }), + }); + + await bulkRequest.save(); + await SuccessDialog.fire(); + needReloadAtEnd(true); + }) + ); + } +} diff --git a/src/apps/定期申込予約/index.tsx b/src/apps/定期申込予約/index.tsx index e16ea3e..4b51b62 100644 --- a/src/apps/定期申込予約/index.tsx +++ b/src/apps/定期申込予約/index.tsx @@ -9,6 +9,7 @@ import 受付メール送信ボタン from "./buttons/受付メール送信ボ import 日割り入金予定作成ボタン from "./buttons/日割り入金予定作成ボタン"; import 自動承認ボタン from "./buttons/自動承認ボタン"; import 承認メール送信ボタン from "./buttons/承認メール送信ボタン"; +import 定期駐車場プラン入力 from "./buttons/定期駐車場プラン入力"; setup(() => { kintone.events.on( @@ -24,6 +25,7 @@ setup(() => { 保証金入金予定作成ボタン(record); 受付メール送信ボタン(record); 承認メール送信ボタン(record); + 定期駐車場プラン入力(record); }) ); }); diff --git a/src/common/appids.ts b/src/common/appids.ts index 05a86ff..e0dd77b 100644 --- a/src/common/appids.ts +++ b/src/common/appids.ts @@ -13,5 +13,6 @@ export const AppID = { 車室情報2: APP_ID.車室情報2, 自動承認グループ: APP_ID.自動承認グループ, 定期駐車場プランマスタ: APP_ID.定期駐車場プランマスタ, + ParkingNavi駐車場プラン: APP_ID.ParkingNavi駐車場プラン, } as const; export type AppID = (typeof AppID)[keyof typeof AppID]; diff --git a/src/config/kintone.ts b/src/config/kintone.ts index 5ca91d8..9ac94a4 100644 --- a/src/config/kintone.ts +++ b/src/config/kintone.ts @@ -10,6 +10,7 @@ export type KintoneConfig = { 車室情報2: number; 自動承認グループ: number; 定期駐車場プランマスタ: number; + ParkingNavi駐車場プラン: number; }; }; @@ -27,6 +28,7 @@ export const kintoneConfig = (): KintoneConfig => { 車室情報2: 279, 自動承認グループ: 286, 定期駐車場プランマスタ: 257, + ParkingNavi駐車場プラン: 297, }, }; } else if (process.env.NODE_ENV === "production") { @@ -42,6 +44,7 @@ export const kintoneConfig = (): KintoneConfig => { 車室情報2: 868, 自動承認グループ: 869, 定期駐車場プランマスタ: 259, + ParkingNavi駐車場プラン: 866, }, }; } else { diff --git a/src/types/ParkingNavi駐車場プラン.ts b/src/types/ParkingNavi駐車場プラン.ts new file mode 100644 index 0000000..46d12c8 --- /dev/null +++ b/src/types/ParkingNavi駐車場プラン.ts @@ -0,0 +1,24 @@ +import { KintoneRecordField } from "@kintone/rest-api-client"; +import { AppRecord } from "."; + +const F = { + parkingnavi駐車場名: "parkingnavi駐車場名", + プラン名: "プラン名", + 定期駐車場名: "定期駐車場名", + 定期駐車場プラン: "定期駐車場プラン", +} as const; + +export const ParkingNavi駐車場プランフィールド名 = F; + +export type ParkingNavi駐車場プラン = AppRecord & { + [F.parkingnavi駐車場名]: KintoneRecordField.SingleLineText; + [F.定期駐車場プラン]: KintoneRecordField.SingleLineText; + 金額: KintoneRecordField.Number; + プランNo: KintoneRecordField.SingleLineText; + 車種種別: KintoneRecordField.Dropdown; + [F.定期駐車場名]: KintoneRecordField.SingleLineText; + 状態: KintoneRecordField.RadioButton; + [F.プラン名]: KintoneRecordField.SingleLineText; + + 割引: KintoneRecordField.CheckBox; +}; diff --git a/src/types/定期申込予約.ts b/src/types/定期申込予約.ts index 70d4606..552ad03 100644 --- a/src/types/定期申込予約.ts +++ b/src/types/定期申込予約.ts @@ -21,6 +21,10 @@ const F = { 初回入金予定_日割り分入金予定: "初回入金予定_日割り分入金予定", 初回入金予定_保証金入金予定: "初回入金予定_保証金入金予定", 初回入金予定_初回入金充当状態: "初回入金予定_初回入金充当状態", + ParkingNavi駐車場コード: "ParkingNavi駐車場コード", + ParkingNavi駐車場: "ParkingNavi駐車場", + ParkingNaviプラン: "ParkingNaviプラン", + 定期駐車場プラン: "定期駐車場プラン", } as const; export const 状態Dropdown = { @@ -58,7 +62,7 @@ export type 定期申込予約 = AppRecord & { 受付順: KintoneRecordField.Number; 申込番号: KintoneRecordField.SingleLineText; 利用方法: KintoneRecordField.MultiLineText; - 定期駐車場プラン: KintoneRecordField.SingleLineText; + [F.定期駐車場プラン]: KintoneRecordField.SingleLineText; 台数: KintoneRecordField.SingleLineText; 防犯登録番号: KintoneRecordField.SingleLineText; 請求対象分_月: KintoneRecordField.Number; @@ -72,19 +76,19 @@ export type 定期申込予約 = AppRecord & { 住所: KintoneRecordField.SingleLineText; 電話番号: KintoneRecordField.SingleLineText; 受付日: KintoneRecordField.Date; - ParkingNavi駐車場コード: KintoneRecordField.SingleLineText; + [F.ParkingNavi駐車場コード]: KintoneRecordField.SingleLineText; フリガナ: KintoneRecordField.SingleLineText; 利用開始希望日: KintoneRecordField.Date; メモ: KintoneRecordField.MultiLineText; 車室番号: KintoneRecordField.SingleLineText; - ParkingNavi駐車場: KintoneRecordField.SingleLineText; + [F.ParkingNavi駐車場]: KintoneRecordField.SingleLineText; [F.駐車場名]: KintoneRecordField.SingleLineText; [F.振込期日]: KintoneRecordField.Date; 日割り分_金額: KintoneRecordField.Number; 自動承認メモ: KintoneRecordField.MultiLineText; 車両番号: KintoneRecordField.SingleLineText; [F.請求対象分_金額]: KintoneRecordField.Number; - ParkingNaviプラン: KintoneRecordField.SingleLineText; + [F.ParkingNaviプラン]: KintoneRecordField.SingleLineText; [F.日割り分_月]: KintoneRecordField.Number; 支払方法: KintoneRecordField.Dropdown; [F.自動承認ステータス]: KintoneRecordField.SingleLineText;