| @@ -22,7 +22,7 @@ import { 定期駐車場プランマスタ } from "@/types/定期駐車場プラ | |||||
| import { 自動承認グループ } from "@/types/自動承認グループ"; | import { 自動承認グループ } from "@/types/自動承認グループ"; | ||||
| import { 車室情報管理, 車室情報管理フィールド名 } from "@/types/車室情報管理"; | import { 車室情報管理, 車室情報管理フィールド名 } from "@/types/車室情報管理"; | ||||
| import { 車室情報2, 車室情報2モデル } from "@/types/車室情報2"; | import { 車室情報2, 車室情報2モデル } from "@/types/車室情報2"; | ||||
| import { 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { 顧客マスタ, 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { sprintf } from "sprintf"; | import { sprintf } from "sprintf"; | ||||
| import { CancelError, Message } from "@/exception"; | import { CancelError, Message } from "@/exception"; | ||||
| import { dateParse, formatDateStr, now } from "@/common/datetime"; | import { dateParse, formatDateStr, now } from "@/common/datetime"; | ||||
| @@ -197,10 +197,13 @@ export class 申込 { | |||||
| private async 顧客マスタ取得() { | private async 顧客マスタ取得() { | ||||
| const customer = await get顧客マスタ({ | const customer = await get顧客マスタ({ | ||||
| メールアドレス: this.定期申込予約.メールアドレス.value, | メールアドレス: this.定期申込予約.メールアドレス.value, | ||||
| 親アカウント: true, | |||||
| 必須: false, | 必須: false, | ||||
| }); | }); | ||||
| if (customer) { | if (customer) { | ||||
| const confirm = await ShowConfirmDialog({ | const confirm = await ShowConfirmDialog({ | ||||
| showDenyButton: true, | |||||
| denyButtonText: "子アカウント新規作成", | |||||
| html: sprintf( | html: sprintf( | ||||
| "<p>既存顧客<a href='%s' target='_blank'>[%s]</a>様へ契約を追加しますか</p>", | "<p>既存顧客<a href='%s' target='_blank'>[%s]</a>様へ契約を追加しますか</p>", | ||||
| getDetailUrl(AppID.顧客マスタ, customer.$id.value), | getDetailUrl(AppID.顧客マスタ, customer.$id.value), | ||||
| @@ -208,20 +211,24 @@ export class 申込 { | |||||
| ), | ), | ||||
| }); | }); | ||||
| if (!confirm.isConfirmed) throw new CancelError(); | |||||
| this.顧客情報.顧客コード = Number( | |||||
| customer[顧客マスタフィールド名.顧客コード].value | |||||
| ); | |||||
| this.顧客情報.IC定期利用者IC = Number( | |||||
| customer[顧客マスタフィールド名.IC定期関連情報_ユーザーID].value | |||||
| ); | |||||
| if (confirm.isConfirmed) { | |||||
| this.顧客情報.顧客コード = Number( | |||||
| customer[顧客マスタフィールド名.顧客コード].value | |||||
| ); | |||||
| this.顧客情報.IC定期利用者IC = Number( | |||||
| customer[顧客マスタフィールド名.IC定期関連情報_ユーザーID].value | |||||
| ); | |||||
| } else if (confirm.isDenied) { | |||||
| await this.顧客マスタ作成(customer); | |||||
| } else { | |||||
| throw new CancelError(); | |||||
| } | |||||
| } else { | } else { | ||||
| await this.顧客マスタ作成(); | await this.顧客マスタ作成(); | ||||
| } | } | ||||
| } | } | ||||
| private async 顧客マスタ作成() { | |||||
| private async 顧客マスタ作成(親顧客マスタ?: 顧客マスタ) { | |||||
| const F = 顧客マスタフィールド名; | const F = 顧客マスタフィールド名; | ||||
| const 顧客コード = await getNext顧客コード(); | const 顧客コード = await getNext顧客コード(); | ||||
| @@ -248,6 +255,7 @@ export class 申込 { | |||||
| const data = makeRecordData({ | const data = makeRecordData({ | ||||
| [F.顧客コード]: String(顧客コード), | [F.顧客コード]: String(顧客コード), | ||||
| [F.顧客コード親]: 親顧客マスタ?.CustomerCodeParent.value ?? "", | |||||
| [F.顧客名]: this.定期申込予約.氏名.value, | [F.顧客名]: this.定期申込予約.氏名.value, | ||||
| [F.顧客名カナ]: this.定期申込予約.フリガナ.value, | [F.顧客名カナ]: this.定期申込予約.フリガナ.value, | ||||
| [F.電話番号]: this.定期申込予約.電話番号.value, | [F.電話番号]: this.定期申込予約.電話番号.value, | ||||
| @@ -271,6 +279,9 @@ export class 申込 { | |||||
| zip_code: 郵便番号.replace(/-/g, ""), | zip_code: 郵便番号.replace(/-/g, ""), | ||||
| address1: 住所, | address1: 住所, | ||||
| phone_number: this.定期申込予約.電話番号.value, | phone_number: this.定期申込予約.電話番号.value, | ||||
| parent_user_id: 親顧客マスタ | |||||
| ? 親顧客マスタ.IC定期関連情報_ユーザーID.value | |||||
| : undefined, | |||||
| }, | }, | ||||
| message | message | ||||
| ); | ); | ||||
| @@ -281,6 +292,9 @@ export class 申込 { | |||||
| } | } | ||||
| const 利用者ID = res.id; | const 利用者ID = res.id; | ||||
| data[F.IC定期関連情報_ユーザーID] = { value: String(利用者ID) }; | data[F.IC定期関連情報_ユーザーID] = { value: String(利用者ID) }; | ||||
| data[F.IC定期関連情報_親ユーザーID] = { | |||||
| value: 親顧客マスタ?.IC定期関連情報_親ユーザーID.value ?? "", | |||||
| }; | |||||
| this.顧客情報.IC定期利用者IC = 利用者ID; | this.顧客情報.IC定期利用者IC = 利用者ID; | ||||
| } | } | ||||
| @@ -37,6 +37,7 @@ setup(() => { | |||||
| const res = await 利用者情報更新({ | const res = await 利用者情報更新({ | ||||
| user_id: record.IC定期関連情報_ユーザーID.value, | user_id: record.IC定期関連情報_ユーザーID.value, | ||||
| parent_user_id: record.IC定期関連情報_親ユーザーID.value, | |||||
| email: record[F.メールアドレス].value, | email: record[F.メールアドレス].value, | ||||
| first_name: record[F.顧客名].value, | first_name: record[F.顧客名].value, | ||||
| first_name_kana: record[F.顧客名カナ].value, | first_name_kana: record[F.顧客名カナ].value, | ||||
| @@ -60,4 +61,36 @@ setup(() => { | |||||
| return event; | return event; | ||||
| }) | }) | ||||
| ); | ); | ||||
| kintone.events.on( | |||||
| [KintoneEvent.詳細.レコードを削除する前], | |||||
| eventHnalder(async (event, { setEvent }) => { | |||||
| const record = event.record as 顧客マスタ; | |||||
| const F = 顧客マスタフィールド名; | |||||
| // IC定期処理 | |||||
| if (!!record.IC定期関連情報_ユーザーID.value) { | |||||
| await showLoadingDialog(); | |||||
| const message = new MessageBag(); | |||||
| const res = await 利用者情報削除( | |||||
| { | |||||
| user_id: record.IC定期関連情報_ユーザーID.value, | |||||
| }, | |||||
| message | |||||
| ); | |||||
| if (res === false) { | |||||
| ErrorDialog.fire({ | |||||
| text: "IC定期連携に失敗しました " + message.getGeneralMessage(), | |||||
| }); | |||||
| return false; | |||||
| } | |||||
| await SuccessDialog.fire({ | |||||
| text: "IC定期連携成功", | |||||
| }); | |||||
| } | |||||
| return event; | |||||
| }) | |||||
| ); | |||||
| }); | }); | ||||
| @@ -10,6 +10,7 @@ export type 利用者情報新規作成Request = { | |||||
| zip_code: string; | zip_code: string; | ||||
| address1: string; | address1: string; | ||||
| phone_number: string; | phone_number: string; | ||||
| parent_user_id?: string; | |||||
| }; | }; | ||||
| export type 利用者情報新規作成Response = { | export type 利用者情報新規作成Response = { | ||||
| id: number; | id: number; | ||||
| @@ -34,6 +35,7 @@ export type 利用者情報更新Request = { | |||||
| zip_code: string; | zip_code: string; | ||||
| address1: string; | address1: string; | ||||
| phone_number: string; | phone_number: string; | ||||
| parent_user_id?: string; | |||||
| }; | }; | ||||
| export type 利用者情報更新Response = { | export type 利用者情報更新Response = { | ||||
| id: number; | id: number; | ||||
| @@ -13,6 +13,7 @@ type Props = { | |||||
| 顧客コード?: number; | 顧客コード?: number; | ||||
| メールアドレス?: string; | メールアドレス?: string; | ||||
| 電話番号?: string; | 電話番号?: string; | ||||
| 親アカウント?: boolean; | |||||
| 必須?: boolean; | 必須?: boolean; | ||||
| }; | }; | ||||
| export const get顧客マスタ = async ({ | export const get顧客マスタ = async ({ | ||||
| @@ -20,6 +21,7 @@ export const get顧客マスタ = async ({ | |||||
| 顧客コード, | 顧客コード, | ||||
| メールアドレス, | メールアドレス, | ||||
| 電話番号, | 電話番号, | ||||
| 親アカウント, | |||||
| 必須 = true, | 必須 = true, | ||||
| }: Props): Promise<顧客マスタ | null> => { | }: Props): Promise<顧客マスタ | null> => { | ||||
| const builder = new QueryBuilder(); | const builder = new QueryBuilder(); | ||||
| @@ -37,6 +39,13 @@ export const get顧客マスタ = async ({ | |||||
| builder.where(顧客マスタフィールド名.電話番号, 電話番号); | builder.where(顧客マスタフィールド名.電話番号, 電話番号); | ||||
| } | } | ||||
| if (親アカウント === true) { | |||||
| builder.where(顧客マスタフィールド名.顧客コード親, ""); | |||||
| } | |||||
| if (親アカウント === false) { | |||||
| builder.where(顧客マスタフィールド名.顧客コード親, "", "!="); | |||||
| } | |||||
| const { records } = await client.record.getRecords<顧客マスタ>({ | const { records } = await client.record.getRecords<顧客マスタ>({ | ||||
| app: AppID.顧客マスタ, | app: AppID.顧客マスタ, | ||||
| query: builder.build(), | query: builder.build(), | ||||
| @@ -3,6 +3,7 @@ import { AppRecord } from "."; | |||||
| const F = { | const F = { | ||||
| 顧客コード: "CustomerCode", | 顧客コード: "CustomerCode", | ||||
| 顧客コード親: "CustomerCodeParent", | |||||
| 銀行支店コード: "ChargedBankBranchCode", | 銀行支店コード: "ChargedBankBranchCode", | ||||
| 引落預金種別: "ChargedDepositType", | 引落預金種別: "ChargedDepositType", | ||||
| 引落口座名義人カナ: "ChargedAccountsKana", | 引落口座名義人カナ: "ChargedAccountsKana", | ||||
| @@ -23,6 +24,7 @@ const F = { | |||||
| 支払方法: "支払方法", | 支払方法: "支払方法", | ||||
| IC定期関連情報_ユーザーID: "IC定期関連情報_ユーザーID", | IC定期関連情報_ユーザーID: "IC定期関連情報_ユーザーID", | ||||
| IC定期関連情報_親ユーザーID: "IC定期関連情報_親ユーザーID", | |||||
| } as const; | } as const; | ||||
| // export const 支払種別Dropdown = { | // export const 支払種別Dropdown = { | ||||
| @@ -49,6 +51,7 @@ export type 顧客マスタ = AppRecord & { | |||||
| [F.引落預金種別]: KintoneRecordField.Number; | [F.引落預金種別]: KintoneRecordField.Number; | ||||
| [F.SMBC契約番号]: KintoneRecordField.SingleLineText; | [F.SMBC契約番号]: KintoneRecordField.SingleLineText; | ||||
| [F.顧客コード]: KintoneRecordField.Number; | [F.顧客コード]: KintoneRecordField.Number; | ||||
| [F.顧客コード親]: KintoneRecordField.Number; | |||||
| [F.顧客名]: KintoneRecordField.SingleLineText; | [F.顧客名]: KintoneRecordField.SingleLineText; | ||||
| SMBC口座名義_1: KintoneRecordField.SingleLineText; | SMBC口座名義_1: KintoneRecordField.SingleLineText; | ||||
| SMBC処理完了: KintoneRecordField.Dropdown; | SMBC処理完了: KintoneRecordField.Dropdown; | ||||
| @@ -90,4 +93,5 @@ export type 顧客マスタ = AppRecord & { | |||||
| 領収書名_入力: KintoneRecordField.SingleLineText; | 領収書名_入力: KintoneRecordField.SingleLineText; | ||||
| 領収書名: KintoneRecordField.SingleLineText; | 領収書名: KintoneRecordField.SingleLineText; | ||||
| [F.IC定期関連情報_ユーザーID]: KintoneRecordField.Number; | [F.IC定期関連情報_ユーザーID]: KintoneRecordField.Number; | ||||
| [F.IC定期関連情報_親ユーザーID]: KintoneRecordField.Number; | |||||
| }; | }; | ||||