| @@ -0,0 +1,14 @@ | |||||
| import { AppID } from "@/common/appids"; | |||||
| import { makeRecordData } from "@/common/rest-api-client"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { 各種申請, 各種申請フィールド名, 状況Dropdown } from "@/types/各種申請"; | |||||
| export const 各種申請完了 = (record: 各種申請) => { | |||||
| bulkRequest.update({ | |||||
| app: AppID.各種申請, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [各種申請フィールド名.状況]: 状況Dropdown.完了, | |||||
| }), | |||||
| }); | |||||
| }; | |||||
| @@ -0,0 +1,65 @@ | |||||
| 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 { EmailID, sendEmail } from "@/mypage/メール"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { get顧客マスタ } from "@/rest-api/顧客マスタ"; | |||||
| import { 各種申請, 状況Dropdown, 申請種別Dropdown } from "@/types/各種申請"; | |||||
| import { 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { 各種申請完了 } from "./common"; | |||||
| export const 利用者情報変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.利用者情報変更 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "利用者情報変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 顧客マスタへの反映 | |||||
| const customer = await get顧客マスタ({ | |||||
| 顧客コード: Number(record.顧客コード.value), | |||||
| }); | |||||
| if (customer === null) throw new Error("顧客不正"); | |||||
| bulkRequest.update({ | |||||
| app: AppID.顧客マスタ, | |||||
| id: customer.$id.value, | |||||
| record: makeRecordData({ | |||||
| [顧客マスタフィールド名.顧客名]: | |||||
| record.利用者情報変更申請_変更後_氏名.value ?? "", | |||||
| [顧客マスタフィールド名.顧客名カナ]: | |||||
| record.利用者情報変更申請_変更後_氏名カナ.value ?? "", | |||||
| [顧客マスタフィールド名.契約者_郵便番号]: | |||||
| record.利用者情報変更申請_変更後_郵便番号.value ?? "", | |||||
| [顧客マスタフィールド名.住所]: | |||||
| record.利用者情報変更申請_変更後_住所.value ?? "", | |||||
| [顧客マスタフィールド名.電話番号]: | |||||
| record.利用者情報変更申請_変更後_電話番号.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.利用者情報変更完了, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Message("メール送信失敗 データは反映済み"); | |||||
| } | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,61 @@ | |||||
| 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 { ShowConfirmDialog, SuccessDialog } from "@/middleware/swal"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { get顧客マスタ } from "@/rest-api/顧客マスタ"; | |||||
| import { 各種申請, 状況Dropdown, 申請種別Dropdown } from "@/types/各種申請"; | |||||
| import { 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { 各種申請完了 } from "./common"; | |||||
| export const 口座変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.口座変更申請 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "口座変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| const customer = await get顧客マスタ({ | |||||
| 顧客コード: Number(record.顧客コード.value), | |||||
| }); | |||||
| if (customer === null) throw new Error("顧客不正"); | |||||
| // 顧客マスタへの反映 | |||||
| await bulkRequest.update({ | |||||
| app: AppID.顧客マスタ, | |||||
| id: customer.$id.value, | |||||
| record: makeRecordData({ | |||||
| [顧客マスタフィールド名.支払方法]: "口座振替", | |||||
| [顧客マスタフィールド名.口座登録催促予定日時]: "", | |||||
| [顧客マスタフィールド名.銀行支店コード]: | |||||
| record.口座変更申請_変更後_銀行支店ID.value, | |||||
| [顧客マスタフィールド名.引落預金種別]: | |||||
| record.口座変更申請_変更後_口座種目.value, | |||||
| [顧客マスタフィールド名.引落口座名義人カナ]: | |||||
| record.口座変更申請_変更後_口座名義カナ.value, | |||||
| [顧客マスタフィールド名.引落口座番号]: | |||||
| record.口座変更申請_変更後_口座番号.value, | |||||
| [顧客マスタフィールド名.ゆうちょ口座記号]: | |||||
| record.口座変更申請_変更後_ゆうちょ口座記号.value, | |||||
| [顧客マスタフィールド名.ゆうちょ口座番号]: | |||||
| record.口座変更申請_変更後_ゆうちょ口座番号.value, | |||||
| }), | |||||
| }); | |||||
| // 各種申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // 保存 | |||||
| await bulkRequest.save(); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,56 @@ | |||||
| 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 { 契約情報更新イベント } from "@/event/契約情報更新"; | |||||
| import { ShowConfirmDialog, SuccessDialog } from "@/middleware/swal"; | |||||
| import { EmailID, sendEmail } from "@/mypage/メール"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { get車室情報管理 } from "@/rest-api/車室情報管理"; | |||||
| import { 各種申請, 状況Dropdown, 申請種別Dropdown } from "@/types/各種申請"; | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| import { 各種申請完了 } from "./common"; | |||||
| export const 解約承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.解約申請 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "解約申請 承認", | |||||
| apptemplate(async ({ setEvent, needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 車室情報管理への反映 | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.契約情報.value, | |||||
| record: makeRecordData({ | |||||
| [車室情報管理フィールド名.解約日]: | |||||
| record.解約申請_解約希望日.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.解約承認, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Error("メール送信失敗"); | |||||
| } | |||||
| const 契約 = await get車室情報管理(record.契約情報.value); | |||||
| setEvent(new 契約情報更新イベント().getEvent(契約)); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,55 @@ | |||||
| 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 { ShowConfirmDialog, SuccessDialog } from "@/middleware/swal"; | |||||
| import { EmailID, sendEmail } from "@/mypage/メール"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { 各種申請, 状況Dropdown, 申請種別Dropdown } from "@/types/各種申請"; | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| import { 各種申請完了 } from "./common"; | |||||
| import { Message } from "@/exception"; | |||||
| export const 車両番号変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.車両番号_防犯登録番号変更 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "車両番号・防犯登録番号変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 車室情報管理アプリへの反映 | |||||
| const F = 車室情報管理フィールド名; | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [F.車両番号]: | |||||
| record.車両番号_防犯番号変更申請_変更後_車両番号.value ?? "", | |||||
| [F.防犯登録番号]: | |||||
| record.車両番号_防犯番号変更申請_変更後_防犯登録番号.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.車両番号_防犯登録番号変更完了, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Message("メール送信失敗 データは反映済み"); | |||||
| } | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,49 @@ | |||||
| import { apptemplate } from "@/common/app-template"; | |||||
| import { AppID } from "@/common/appids"; | |||||
| import { setHeaderButton } from "@/common/header-button"; | |||||
| import { getCreateUrl } from "@/rest-api/url"; | |||||
| import { | |||||
| 入金予定結果フィールド名, | |||||
| 支払方法Dropdown, | |||||
| 支払種別Dropdown, | |||||
| } from "@/types/入金予定結果"; | |||||
| import { | |||||
| 各種申請, | |||||
| 申請種別Dropdown, | |||||
| 車庫証明支払方法Dropdown, | |||||
| } from "@/types/各種申請"; | |||||
| export const 車庫証明発行手数料入金予定作成ボタン = (record: 各種申請) => { | |||||
| if (record.申請種別.value === 申請種別Dropdown.車庫証明発行申請) { | |||||
| setHeaderButton( | |||||
| "車庫証明発行手数料入金予定作成", | |||||
| apptemplate(async () => { | |||||
| const param: any = { | |||||
| [入金予定結果フィールド名.支払予定金額]: "3000", | |||||
| [入金予定結果フィールド名.車室情報管理レコード番号]: record.$id.value, | |||||
| [入金予定結果フィールド名.支払種別]: 支払種別Dropdown.事務手数料, | |||||
| }; | |||||
| param[入金予定結果フィールド名.支払方法] = (() => { | |||||
| if ( | |||||
| record.車庫証明発行申請_支払方法.value === | |||||
| 車庫証明支払方法Dropdown.口座引落 | |||||
| ) { | |||||
| return 支払方法Dropdown.SMBC口座振替; | |||||
| } | |||||
| if ( | |||||
| record.車庫証明発行申請_支払方法.value === | |||||
| 車庫証明支払方法Dropdown.お振込 | |||||
| ) { | |||||
| return 支払方法Dropdown.振込; | |||||
| } | |||||
| return ""; | |||||
| })(); | |||||
| const url = getCreateUrl( | |||||
| AppID.入金予定結果, | |||||
| new URLSearchParams(param) | |||||
| ); | |||||
| window.open(url, "_blank"); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -0,0 +1,97 @@ | |||||
| 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 { 契約情報更新イベント } from "@/event/契約情報更新"; | |||||
| import { | |||||
| ErrorDialog, | |||||
| FormDialog, | |||||
| ShowConfirmDialog, | |||||
| ShowFormDialog, | |||||
| SuccessDialog, | |||||
| } from "@/middleware/swal"; | |||||
| import { EmailID, sendEmail } from "@/mypage/メール"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { get車室情報管理 } from "@/rest-api/車室情報管理"; | |||||
| import { 各種申請, 状況Dropdown, 申請種別Dropdown } from "@/types/各種申請"; | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| import { 各種申請完了 } from "./common"; | |||||
| import { 定期契約更新 } from "@/mypage/IC定期"; | |||||
| import { Message } from "@/exception"; | |||||
| import { MessageBag } from "@/common/message"; | |||||
| export const 駐車場利用方法変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.IC定期_駐車場利用方法変更申請 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "駐車場利用方法変更申請 承認", | |||||
| apptemplate(async ({ setEvent, needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| let 契約 = await get車室情報管理(record.契約情報.value); | |||||
| let 定期券番号 = ""; | |||||
| if ( | |||||
| record.IC定期_駐車場利用方法変更申請_変更後.value === "貸与ICカード" | |||||
| ) { | |||||
| const form = await ShowFormDialog({ | |||||
| text: "定期券番号を入力してください", | |||||
| input: "number", | |||||
| }); | |||||
| if (!form.isConfirmed) return; | |||||
| 定期券番号 = form.value; | |||||
| } | |||||
| const message = new MessageBag(); | |||||
| const res = await 定期契約更新( | |||||
| { | |||||
| user_id: 契約.IC定期関連情報_利用者ID.value, | |||||
| parking_management_code: 契約.IC定期関連情報_駐車場管理コード.value, | |||||
| season_ticket_seq_no: 定期券番号, // 自動採番 | |||||
| vehicle_type_name: 契約.IC定期関連情報_車種.value, | |||||
| parking_use_type_name: | |||||
| record.IC定期_駐車場利用方法変更申請_変更後.value, | |||||
| contractor_type_name: 契約.IC定期関連情報_契約者種類.value, | |||||
| expiration_start_date: 契約.IC定期関連情報_有効期限開始.value ?? "", | |||||
| expiration_end_date: 契約.IC定期関連情報_有効期限開始.value ?? "", | |||||
| position_memo: 契約.IC定期関連情報_駐車位置情報.value, | |||||
| memo: 契約.IC定期関連情報_備考.value, | |||||
| }, | |||||
| message | |||||
| ); | |||||
| if (res === false) { | |||||
| throw new Message("IC定期連携失敗 " + message.getGeneralMessage()); | |||||
| } | |||||
| // 車室情報管理への反映 | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.契約情報.value, | |||||
| record: makeRecordData({ | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車場利用方法]: | |||||
| record.IC定期_駐車場利用方法変更申請_変更後.value ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_定期券番号]: String( | |||||
| res.season_ticket_seq_no | |||||
| ), | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| 契約 = await get車室情報管理(record.契約情報.value); | |||||
| setEvent(new 契約情報更新イベント().getEvent(契約)); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| @@ -1,267 +1,15 @@ | |||||
| import { apptemplate, eventHnalder } from "@/common/app-template"; | |||||
| import { AppID } from "@/common/appids"; | |||||
| import { initMenuBox, setHeaderButton } from "@/common/header-button"; | |||||
| import { eventHnalder } from "@/common/app-template"; | |||||
| import { initMenuBox } from "@/common/header-button"; | |||||
| import { KintoneEvent } from "@/common/kintone-event"; | import { KintoneEvent } from "@/common/kintone-event"; | ||||
| import { makeRecordData } from "@/common/rest-api-client"; | |||||
| import { 契約情報更新イベント } from "@/event/契約情報更新"; | |||||
| import { Message } from "@/exception"; | |||||
| import { ShowConfirmDialog, SuccessDialog } from "@/middleware/swal"; | |||||
| import { EmailID, sendEmail } from "@/mypage/メール"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { get車室情報管理 } from "@/rest-api/車室情報管理"; | |||||
| import { get顧客マスタ } from "@/rest-api/顧客マスタ"; | |||||
| import { | |||||
| 各種申請, | |||||
| 各種申請フィールド名, | |||||
| 状況Dropdown, | |||||
| 申請種別Dropdown, | |||||
| 申請詳細グループ, | |||||
| 車庫証明支払方法Dropdown, | |||||
| } from "@/types/各種申請"; | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| import { 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { setup } from ".."; | |||||
| import { 各種申請, 申請詳細グループ } from "@/types/各種申請"; | |||||
| import { get } from "lodash"; | import { get } from "lodash"; | ||||
| import { getCreateUrl } from "@/rest-api/url"; | |||||
| import { | |||||
| 入金予定結果フィールド名, | |||||
| 支払方法Dropdown, | |||||
| 支払種別Dropdown, | |||||
| } from "@/types/入金予定結果"; | |||||
| const 各種申請完了 = (record: 各種申請) => { | |||||
| bulkRequest.update({ | |||||
| app: AppID.各種申請, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [各種申請フィールド名.状況]: 状況Dropdown.完了, | |||||
| }), | |||||
| }); | |||||
| }; | |||||
| const 解約承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.解約申請 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "解約申請 承認", | |||||
| apptemplate(async ({ setEvent, needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 車室情報管理への反映 | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.契約情報.value, | |||||
| record: makeRecordData({ | |||||
| [車室情報管理フィールド名.解約日]: | |||||
| record.解約申請_解約希望日.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.解約承認, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Error("メール送信失敗"); | |||||
| } | |||||
| const 契約 = await get車室情報管理(record.契約情報.value); | |||||
| setEvent(new 契約情報更新イベント().getEvent(契約)); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| const 口座変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.口座変更申請 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "口座変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| const customer = await get顧客マスタ({ | |||||
| 顧客コード: Number(record.顧客コード.value), | |||||
| }); | |||||
| if (customer === null) throw new Error("顧客不正"); | |||||
| // 顧客マスタへの反映 | |||||
| await bulkRequest.update({ | |||||
| app: AppID.顧客マスタ, | |||||
| id: customer.$id.value, | |||||
| record: makeRecordData({ | |||||
| [顧客マスタフィールド名.支払方法]: "口座振替", | |||||
| [顧客マスタフィールド名.口座登録催促予定日時]: "", | |||||
| [顧客マスタフィールド名.銀行支店コード]: | |||||
| record.口座変更申請_変更後_銀行支店ID.value, | |||||
| [顧客マスタフィールド名.引落預金種別]: | |||||
| record.口座変更申請_変更後_口座種目.value, | |||||
| [顧客マスタフィールド名.引落口座名義人カナ]: | |||||
| record.口座変更申請_変更後_口座名義カナ.value, | |||||
| [顧客マスタフィールド名.引落口座番号]: | |||||
| record.口座変更申請_変更後_口座番号.value, | |||||
| [顧客マスタフィールド名.ゆうちょ口座記号]: | |||||
| record.口座変更申請_変更後_ゆうちょ口座記号.value, | |||||
| [顧客マスタフィールド名.ゆうちょ口座番号]: | |||||
| record.口座変更申請_変更後_ゆうちょ口座番号.value, | |||||
| }), | |||||
| }); | |||||
| // 各種申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // 保存 | |||||
| await bulkRequest.save(); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| const 利用者情報変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.利用者情報変更 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "利用者情報変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 顧客マスタへの反映 | |||||
| const customer = await get顧客マスタ({ | |||||
| 顧客コード: Number(record.顧客コード.value), | |||||
| }); | |||||
| if (customer === null) throw new Error("顧客不正"); | |||||
| bulkRequest.update({ | |||||
| app: AppID.顧客マスタ, | |||||
| id: customer.$id.value, | |||||
| record: makeRecordData({ | |||||
| [顧客マスタフィールド名.顧客名]: | |||||
| record.利用者情報変更申請_変更後_氏名.value ?? "", | |||||
| [顧客マスタフィールド名.顧客名カナ]: | |||||
| record.利用者情報変更申請_変更後_氏名カナ.value ?? "", | |||||
| [顧客マスタフィールド名.契約者_郵便番号]: | |||||
| record.利用者情報変更申請_変更後_郵便番号.value ?? "", | |||||
| [顧客マスタフィールド名.住所]: | |||||
| record.利用者情報変更申請_変更後_住所.value ?? "", | |||||
| [顧客マスタフィールド名.電話番号]: | |||||
| record.利用者情報変更申請_変更後_電話番号.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.利用者情報変更完了, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Message("メール送信失敗 データは反映済み"); | |||||
| } | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| const 車両番号変更承認ボタン = (record: 各種申請) => { | |||||
| if ( | |||||
| record.状況.value !== 状況Dropdown.完了 && | |||||
| record.申請種別.value === 申請種別Dropdown.車両番号_防犯登録番号変更 | |||||
| ) { | |||||
| setHeaderButton( | |||||
| "車両番号・防犯登録番号変更申請 承認", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ title: "承認しますか" }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| // 車室情報管理アプリへの反映 | |||||
| const F = 車室情報管理フィールド名; | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [F.車両番号]: | |||||
| record.車両番号_防犯番号変更申請_変更後_車両番号.value ?? "", | |||||
| [F.防犯登録番号]: | |||||
| record.車両番号_防犯番号変更申請_変更後_防犯登録番号.value ?? "", | |||||
| }), | |||||
| }); | |||||
| // 申請の完了 | |||||
| await 各種申請完了(record); | |||||
| // データ保存 | |||||
| await bulkRequest.save(); | |||||
| // メールの送信 | |||||
| const email = await sendEmail(EmailID.車両番号_防犯登録番号変更完了, { | |||||
| application_no: record.申請番号.value, | |||||
| }); | |||||
| if (!email) { | |||||
| throw new Message("メール送信失敗 データは反映済み"); | |||||
| } | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| const 車庫証明発行手数料入金予定作成 = (record: 各種申請) => { | |||||
| if (record.申請種別.value === 申請種別Dropdown.車庫証明発行申請) { | |||||
| setHeaderButton( | |||||
| "車庫証明発行手数料入金予定作成", | |||||
| apptemplate(async () => { | |||||
| const param: any = { | |||||
| [入金予定結果フィールド名.支払予定金額]: "3000", | |||||
| [入金予定結果フィールド名.車室情報管理レコード番号]: record.$id.value, | |||||
| [入金予定結果フィールド名.支払種別]: 支払種別Dropdown.事務手数料, | |||||
| }; | |||||
| param[入金予定結果フィールド名.支払方法] = (() => { | |||||
| if ( | |||||
| record.車庫証明発行申請_支払方法.value === | |||||
| 車庫証明支払方法Dropdown.口座引落 | |||||
| ) { | |||||
| return 支払方法Dropdown.SMBC口座振替; | |||||
| } | |||||
| if ( | |||||
| record.車庫証明発行申請_支払方法.value === | |||||
| 車庫証明支払方法Dropdown.お振込 | |||||
| ) { | |||||
| return 支払方法Dropdown.振込; | |||||
| } | |||||
| return ""; | |||||
| })(); | |||||
| const url = getCreateUrl( | |||||
| AppID.入金予定結果, | |||||
| new URLSearchParams(param) | |||||
| ); | |||||
| window.open(url, "_blank"); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| }; | |||||
| import { setup } from ".."; | |||||
| import { 口座変更承認ボタン } from "./buttons/口座変更承認ボタン"; | |||||
| import { 解約承認ボタン } from "./buttons/解約承認ボタン"; | |||||
| import { 利用者情報変更承認ボタン } from "./buttons/利用者情報変更承認ボタン"; | |||||
| import { 車両番号変更承認ボタン } from "./buttons/車両番号変更承認ボタン"; | |||||
| import { 車庫証明発行手数料入金予定作成ボタン } from "./buttons/車庫証明発行手数料入金予定作成ボタン"; | |||||
| import { 駐車場利用方法変更承認ボタン } from "./buttons/駐車場利用方法変更承認ボタン"; | |||||
| setup(() => { | setup(() => { | ||||
| kintone.events.on( | kintone.events.on( | ||||
| @@ -275,7 +23,8 @@ setup(() => { | |||||
| 解約承認ボタン(record); | 解約承認ボタン(record); | ||||
| 利用者情報変更承認ボタン(record); | 利用者情報変更承認ボタン(record); | ||||
| 車両番号変更承認ボタン(record); | 車両番号変更承認ボタン(record); | ||||
| 車庫証明発行手数料入金予定作成(record); | |||||
| 車庫証明発行手数料入金予定作成ボタン(record); | |||||
| 駐車場利用方法変更承認ボタン(record); | |||||
| }) | }) | ||||
| ); | ); | ||||
| @@ -17,12 +17,31 @@ import { 初回入金予定Checkbox, 定期申込予約 } from "@/types/定期 | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | ||||
| import { addDays } from "date-fns"; | import { addDays } from "date-fns"; | ||||
| export default function 保証金入金予定作成ボタン(record: 定期申込予約) { | |||||
| const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| if (!record.自動承認契約情報.value) { | |||||
| return false; | |||||
| } | |||||
| if (record.IC定期駐車場利用方法.value) { | |||||
| return false; | |||||
| } | |||||
| if ( | if ( | ||||
| !!record.自動承認契約情報.value && | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.保証金) && | |||||
| !record.初回入金予定_保証金入金予定.value | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.保証金) === | |||||
| false | |||||
| ) { | ) { | ||||
| return false; | |||||
| } | |||||
| if (record.初回入金予定_保証金入金予定.value) { | |||||
| false; | |||||
| } | |||||
| return true; | |||||
| }; | |||||
| export default function 保証金入金予定作成ボタン(record: 定期申込予約) { | |||||
| if (表示判定(record)) { | |||||
| setHeaderButton( | setHeaderButton( | ||||
| "保証金入金予定作成", | "保証金入金予定作成", | ||||
| apptemplate(async () => { | apptemplate(async () => { | ||||
| @@ -15,12 +15,31 @@ import { 初回入金予定Checkbox, 定期申込予約 } from "@/types/定期 | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | ||||
| import { addDays, addMonths, endOfMonth, setDate } from "date-fns"; | import { addDays, addMonths, endOfMonth, setDate } from "date-fns"; | ||||
| export default function 初月分入金予定作成ボタン(record: 定期申込予約) { | |||||
| const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| if (!record.自動承認契約情報.value) { | |||||
| return false; | |||||
| } | |||||
| if (record.IC定期駐車場利用方法.value) { | |||||
| return false; | |||||
| } | |||||
| if ( | if ( | ||||
| !!record.自動承認契約情報.value && | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.初月分) && | |||||
| !record.初回入金予定_初月分入金予定.value | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.初月分) === | |||||
| false | |||||
| ) { | ) { | ||||
| return false; | |||||
| } | |||||
| if (record.初回入金予定_初月分入金予定.value) { | |||||
| false; | |||||
| } | |||||
| return true; | |||||
| }; | |||||
| export default function 初月分入金予定作成ボタン(record: 定期申込予約) { | |||||
| if (表示判定(record)) { | |||||
| setHeaderButton( | setHeaderButton( | ||||
| "初月分入金予定作成", | "初月分入金予定作成", | ||||
| apptemplate(async () => { | apptemplate(async () => { | ||||
| @@ -41,6 +41,10 @@ const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (!!record.IC定期駐車場利用方法) { | |||||
| return false; | |||||
| } | |||||
| return true; | return true; | ||||
| }; | }; | ||||
| @@ -18,6 +18,10 @@ const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| return false; | return false; | ||||
| } | } | ||||
| if (!!record.IC定期駐車場利用方法) { | |||||
| return false; | |||||
| } | |||||
| return true; | return true; | ||||
| }; | }; | ||||
| @@ -16,12 +16,31 @@ import { 初回入金予定Checkbox, 定期申込予約 } from "@/types/定期 | |||||
| import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; | ||||
| import { addDays, endOfMonth } from "date-fns"; | import { addDays, endOfMonth } from "date-fns"; | ||||
| export default function 日割り入金予定作成ボタン(record: 定期申込予約) { | |||||
| const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| if (!record.自動承認契約情報.value) { | |||||
| return false; | |||||
| } | |||||
| if (record.IC定期駐車場利用方法.value) { | |||||
| return false; | |||||
| } | |||||
| if ( | if ( | ||||
| !!record.自動承認契約情報.value && | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.日割り分) && | |||||
| !record.初回入金予定_日割り分入金予定.value | |||||
| record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.日割り分) === | |||||
| false | |||||
| ) { | ) { | ||||
| return false; | |||||
| } | |||||
| if (record.初回入金予定_日割り分入金予定.value) { | |||||
| false; | |||||
| } | |||||
| return true; | |||||
| }; | |||||
| export default function 日割り入金予定作成ボタン(record: 定期申込予約) { | |||||
| if (表示判定(record)) { | |||||
| setHeaderButton( | setHeaderButton( | ||||
| "日割り分入金予定作成", | "日割り分入金予定作成", | ||||
| apptemplate(async () => { | apptemplate(async () => { | ||||
| @@ -4,6 +4,7 @@ import { 契約情報更新イベント } from "@/event/契約情報更新"; | |||||
| import { Message } from "@/exception"; | import { Message } from "@/exception"; | ||||
| import { | import { | ||||
| ShowConfirmDialog, | ShowConfirmDialog, | ||||
| ShowFormDialog, | |||||
| SuccessDialog, | SuccessDialog, | ||||
| WarningDialog, | WarningDialog, | ||||
| } from "@/middleware/swal"; | } from "@/middleware/swal"; | ||||
| @@ -39,15 +40,27 @@ export default function 自動承認ボタン(record: 定期申込予約) { | |||||
| const entry = new 申込(record); | const entry = new 申込(record); | ||||
| await entry.初期化(); | await entry.初期化(); | ||||
| if (record.IC定期駐車場利用方法.value === "貸与ICカード") { | |||||
| const form = await ShowFormDialog({ | |||||
| text: "定期券番号を入力してください", | |||||
| input: "number", | |||||
| }); | |||||
| if (!form.isConfirmed) return; | |||||
| entry.IC定期_定期券番号 = form.value; | |||||
| } | |||||
| await entry.選定(); | await entry.選定(); | ||||
| await SuccessDialog.fire(); | await SuccessDialog.fire(); | ||||
| await WarningDialog.fire({ | |||||
| timer: 2000, | |||||
| timerProgressBar: true, | |||||
| text: "各初回請求データを作成してください", | |||||
| }); | |||||
| if (!entry.isIC定期申込()) { | |||||
| await WarningDialog.fire({ | |||||
| timer: 2000, | |||||
| timerProgressBar: true, | |||||
| text: "各初回請求データを作成してください", | |||||
| }); | |||||
| } | |||||
| const 契約 = entry.作成後契約取得(); | const 契約 = entry.作成後契約取得(); | ||||
| if (!契約) throw new Error(); | if (!契約) throw new Error(); | ||||
| @@ -29,14 +29,21 @@ import { dateParse, formatDateStr, now } from "@/common/datetime"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | import bulkRequest from "@/rest-api/bulk"; | ||||
| import apiClient from "@/middleware/api-client"; | import apiClient from "@/middleware/api-client"; | ||||
| import { addMonths, getDate, setDate } from "date-fns"; | import { addMonths, getDate, setDate } from "date-fns"; | ||||
| import { ParkingNavi駐車場プラン } from "@/types/ParkingNavi駐車場プラン"; | |||||
| import { getParkingNavi駐車場プラン } from "@/rest-api/ParkingNavi駐車場プラン"; | |||||
| import { 利用者情報新規作成, 定期契約新規作成 } from "@/mypage/IC定期"; | |||||
| import { MessageBag } from "@/common/message"; | |||||
| export class 申込 { | export class 申込 { | ||||
| public IC定期_定期券番号: string = ""; | |||||
| private 定期申込予約: 定期申込予約; | private 定期申込予約: 定期申込予約; | ||||
| private 初期化済み: boolean = false; | private 初期化済み: boolean = false; | ||||
| private 顧客情報: { | private 顧客情報: { | ||||
| 顧客コード: number; | |||||
| } | null = null; | |||||
| 顧客コード?: number; | |||||
| IC定期利用者IC?: number; | |||||
| }; | |||||
| private 車室一覧: 車室情報2[] = []; | private 車室一覧: 車室情報2[] = []; | ||||
| private 契約一覧: 車室情報管理[] = []; | private 契約一覧: 車室情報管理[] = []; | ||||
| @@ -47,6 +54,7 @@ export class 申込 { | |||||
| constructor(定期申込予約: 定期申込予約) { | constructor(定期申込予約: 定期申込予約) { | ||||
| this.定期申込予約 = 定期申込予約; | this.定期申込予約 = 定期申込予約; | ||||
| this.顧客情報 = {}; | |||||
| } | } | ||||
| async 初期化() { | async 初期化() { | ||||
| @@ -54,10 +62,10 @@ export class 申込 { | |||||
| await this.契約対象車室取得(); | await this.契約対象車室取得(); | ||||
| // 対象のプランデータ取得 | // 対象のプランデータ取得 | ||||
| await this.契約情報取得(); | await this.契約情報取得(); | ||||
| // 自動承認データの取得 | |||||
| await this.自動承認グループ取得(); | |||||
| // 定期駐車場プランマスタデータの取得 | // 定期駐車場プランマスタデータの取得 | ||||
| await this.プラン取得(); | await this.プラン取得(); | ||||
| // 自動承認データの取得 | |||||
| await this.自動承認グループ取得(); | |||||
| this.初期化済み = true; | this.初期化済み = true; | ||||
| return this; | return this; | ||||
| @@ -85,6 +93,10 @@ export class 申込 { | |||||
| return this.作成後契約; | return this.作成後契約; | ||||
| } | } | ||||
| isIC定期申込() { | |||||
| return this.プラン?.IC定期駐車場.value[0] === "該当"; | |||||
| } | |||||
| private async 契約対象車室取得() { | private async 契約対象車室取得() { | ||||
| if (!this.定期申込予約.駐車場.value) { | if (!this.定期申込予約.駐車場.value) { | ||||
| throw new Message("駐車場名の設定をしてください"); | throw new Message("駐車場名の設定をしてください"); | ||||
| @@ -109,10 +121,14 @@ export class 申込 { | |||||
| if (!this.定期申込予約.定期駐車場プラン.value) { | if (!this.定期申込予約.定期駐車場プラン.value) { | ||||
| throw new Message("プラン名の設定をしてください"); | throw new Message("プラン名の設定をしてください"); | ||||
| } | } | ||||
| if (this.isIC定期申込()) { | |||||
| return; | |||||
| } | |||||
| this.自動承認グループ = await get自動承認グループ( | this.自動承認グループ = await get自動承認グループ( | ||||
| this.定期申込予約.定期駐車場プラン.value | this.定期申込予約.定期駐車場プラン.value | ||||
| ); | ); | ||||
| } | } | ||||
| private async プラン取得() { | private async プラン取得() { | ||||
| if (!this.定期申込予約.定期駐車場プラン.value) { | if (!this.定期申込予約.定期駐車場プラン.value) { | ||||
| throw new Message("プラン名の設定をしてください"); | throw new Message("プラン名の設定をしてください"); | ||||
| @@ -126,6 +142,9 @@ export class 申込 { | |||||
| if (!this.初期化済み) { | if (!this.初期化済み) { | ||||
| throw new Error("実装エラー 未初期化"); | throw new Error("実装エラー 未初期化"); | ||||
| } | } | ||||
| if (this.isIC定期申込()) { | |||||
| return null; | |||||
| } | |||||
| const target = this.自動承認グループ?.対象車室番号.value | const target = this.自動承認グループ?.対象車室番号.value | ||||
| .filter(({ value: 定義 }) => { | .filter(({ value: 定義 }) => { | ||||
| // 自動承認車室でない場合は対象外とする | // 自動承認車室でない場合は対象外とする | ||||
| @@ -191,9 +210,12 @@ export class 申込 { | |||||
| if (!confirm.isConfirmed) throw new CancelError(); | if (!confirm.isConfirmed) throw new CancelError(); | ||||
| this.顧客情報 = { | |||||
| 顧客コード: Number(customer[顧客マスタフィールド名.顧客コード].value), | |||||
| }; | |||||
| this.顧客情報.顧客コード = Number( | |||||
| customer[顧客マスタフィールド名.顧客コード].value | |||||
| ); | |||||
| this.顧客情報.IC定期利用者IC = Number( | |||||
| customer[顧客マスタフィールド名.IC定期関連情報_ユーザーID].value | |||||
| ); | |||||
| } else { | } else { | ||||
| await this.顧客マスタ作成(); | await this.顧客マスタ作成(); | ||||
| } | } | ||||
| @@ -216,61 +238,127 @@ export class 申込 { | |||||
| } | } | ||||
| const 郵便番号 = (() => { | const 郵便番号 = (() => { | ||||
| const all = this.定期申込予約.住所.value.substring(0, 7).trim(); | |||||
| const all = this.定期申込予約.住所.value | |||||
| .substring(0, 8) | |||||
| .replace(/-/g, "") | |||||
| .trim(); | |||||
| return sprintf("%s-%s", all.substring(0, 3), all.substring(3)); | return sprintf("%s-%s", all.substring(0, 3), all.substring(3)); | ||||
| })(); | })(); | ||||
| const 住所 = this.定期申込予約.住所.value.substring(7).trim(); | |||||
| const 住所 = this.定期申込予約.住所.value.substring(8).trim(); | |||||
| const data = makeRecordData({ | |||||
| [F.顧客コード]: String(顧客コード), | |||||
| [F.顧客名]: this.定期申込予約.氏名.value, | |||||
| [F.顧客名カナ]: this.定期申込予約.フリガナ.value, | |||||
| [F.電話番号]: this.定期申込予約.電話番号.value, | |||||
| [F.メールアドレス]: this.定期申込予約.メールアドレス.value, | |||||
| [F.SMBC契約番号]: String(await getNextSMBC番号()), | |||||
| [F.支払方法]: "口座振替", | |||||
| [F.振替日]: "27", //TODO | |||||
| [F.振替開始日]: 振替開始日, | |||||
| [F.契約者_郵便番号]: 郵便番号, | |||||
| [F.住所]: 住所, | |||||
| }); | |||||
| // IC定期連携 | |||||
| if (this.isIC定期申込()) { | |||||
| const message = new MessageBag(); | |||||
| const res = await 利用者情報新規作成( | |||||
| { | |||||
| email: this.定期申込予約.メールアドレス.value, | |||||
| first_name: this.定期申込予約.氏名.value, | |||||
| first_name_kana: this.定期申込予約.フリガナ.value, | |||||
| zip_code: 郵便番号.replace(/-/g, ""), | |||||
| address1: 住所, | |||||
| phone_number: this.定期申込予約.電話番号.value, | |||||
| }, | |||||
| message | |||||
| ); | |||||
| if (res === false) { | |||||
| throw new Message( | |||||
| "IC定期連携失敗 利用者情報 " + message.getGeneralMessage() | |||||
| ); | |||||
| } | |||||
| const 利用者ID = res.id; | |||||
| data[F.IC定期関連情報_ユーザーID] = { value: String(利用者ID) }; | |||||
| this.顧客情報.IC定期利用者IC = 利用者ID; | |||||
| } | |||||
| bulkRequest.create({ | bulkRequest.create({ | ||||
| app: AppID.顧客マスタ, | app: AppID.顧客マスタ, | ||||
| record: makeRecordData({ | |||||
| [F.顧客コード]: String(顧客コード), | |||||
| [F.顧客名]: this.定期申込予約.氏名.value, | |||||
| [F.顧客名カナ]: this.定期申込予約.フリガナ.value, | |||||
| [F.電話番号]: this.定期申込予約.電話番号.value, | |||||
| [F.メールアドレス]: this.定期申込予約.メールアドレス.value, | |||||
| [F.SMBC契約番号]: String(await getNextSMBC番号()), | |||||
| [F.支払方法]: "口座振替", | |||||
| [F.振替日]: "27", //TODO | |||||
| [F.振替開始日]: 振替開始日, | |||||
| [F.契約者_郵便番号]: 郵便番号, | |||||
| [F.住所]: 住所, | |||||
| }), | |||||
| record: data, | |||||
| }); | }); | ||||
| this.顧客情報 = { | |||||
| 顧客コード, | |||||
| }; | |||||
| this.顧客情報.顧客コード = 顧客コード; | |||||
| } | } | ||||
| private async 契約情報作成(対象車室: 車室情報2) { | |||||
| private async 契約情報作成(対象車室: 車室情報2 | null) { | |||||
| if (!this.顧客情報) throw new Error("顧客情報不正"); | if (!this.顧客情報) throw new Error("顧客情報不正"); | ||||
| if (!this.定期申込予約) throw new Error("定期申込予約不正"); | if (!this.定期申込予約) throw new Error("定期申込予約不正"); | ||||
| const F = 車室情報管理フィールド名; | const F = 車室情報管理フィールド名; | ||||
| const data = makeRecordData({ | |||||
| [F.顧客コード]: String(this.顧客情報.顧客コード), | |||||
| [F.契約日]: this.get契約開始日(), | |||||
| [F.車両番号]: this.定期申込予約.車両番号.value, | |||||
| [F.車室番号]: 対象車室?.車室番号.value ?? "IC定期", | |||||
| [F.プラン名]: this.定期申込予約.定期駐車場プラン.value, | |||||
| [F.定額_1月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_2月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_3月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_4月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_5月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_6月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_7月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_8月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_9月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_10月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_11月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_12月]: this.プラン?.契約金額.value ?? "", | |||||
| }); | |||||
| if (this.isIC定期申込()) { | |||||
| const message = new MessageBag(); | |||||
| const res = await 定期契約新規作成( | |||||
| { | |||||
| user_id: String(this.顧客情報.IC定期利用者IC ?? ""), | |||||
| parking_management_code: | |||||
| this.プラン?.IC定期_駐車場管理コード.value ?? "", | |||||
| vehicle_type_name: this.プラン?.IC定期_車種.value ?? "", | |||||
| parking_use_type_name: | |||||
| this.定期申込予約.IC定期駐車場利用方法.value ?? "", | |||||
| contractor_type_name: this.プラン?.IC定期_契約者種類.value ?? "", | |||||
| season_ticket_seq_no: this.IC定期_定期券番号, | |||||
| }, | |||||
| message | |||||
| ); | |||||
| if (res === false) { | |||||
| throw new Message( | |||||
| "IC定期連携失敗 契約情報 " + message.getGeneralMessage() | |||||
| ); | |||||
| } | |||||
| data[F.IC定期関連情報_契約ID] = { value: res.id }; | |||||
| data[F.IC定期関連情報_利用者ID] = { value: res.user_id }; | |||||
| data[F.IC定期関連情報_定期券番号] = { value: res.season_ticket_seq_no }; | |||||
| data[F.IC定期関連情報_契約者種類] = { | |||||
| value: this.プラン?.IC定期_契約者種類.value ?? "", | |||||
| }; | |||||
| data[F.IC定期関連情報_車種] = { | |||||
| value: this.プラン?.IC定期_車種.value ?? "", | |||||
| }; | |||||
| data[F.IC定期関連情報_駐車場管理コード] = { | |||||
| value: res.parking_management_code, | |||||
| }; | |||||
| data[F.IC定期関連情報_駐車場利用方法] = { | |||||
| value: this.定期申込予約.IC定期駐車場利用方法.value ?? "", | |||||
| }; | |||||
| } | |||||
| bulkRequest.create( | bulkRequest.create( | ||||
| { | { | ||||
| app: AppID.車室情報管理, | app: AppID.車室情報管理, | ||||
| record: makeRecordData({ | |||||
| [F.顧客コード]: String(this.顧客情報.顧客コード), | |||||
| [F.契約日]: this.get契約開始日(), | |||||
| [F.車両番号]: this.定期申込予約.車両番号.value, | |||||
| [F.車室番号]: 対象車室.車室番号.value, | |||||
| [F.プラン名]: this.定期申込予約.定期駐車場プラン.value, | |||||
| [F.定額_1月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_2月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_3月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_4月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_5月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_6月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_7月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_8月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_9月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_10月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_11月]: this.プラン?.契約金額.value ?? "", | |||||
| [F.定額_12月]: this.プラン?.契約金額.value ?? "", | |||||
| }), | |||||
| record: data, | |||||
| }, | }, | ||||
| async ({ id }) => { | async ({ id }) => { | ||||
| if (!id) throw new Error(); | if (!id) throw new Error(); | ||||
| @@ -292,7 +380,9 @@ export class 申込 { | |||||
| [F.定期駐車料金]: this.プラン.契約金額.value, | [F.定期駐車料金]: this.プラン.契約金額.value, | ||||
| [F.初回入金予定_必要分]: (() => { | [F.初回入金予定_必要分]: (() => { | ||||
| const ret: string[] = []; | const ret: string[] = []; | ||||
| if (this.isIC定期申込()) { | |||||
| return ret; | |||||
| } | |||||
| ret.push(初回入金予定Checkbox.初月分); | ret.push(初回入金予定Checkbox.初月分); | ||||
| const 契約日 = dateParse(this.定期申込予約.利用開始希望日.value); | const 契約日 = dateParse(this.定期申込予約.利用開始希望日.value); | ||||
| if (!契約日) throw new Error("契約日不正"); | if (!契約日) throw new Error("契約日不正"); | ||||
| @@ -0,0 +1,54 @@ | |||||
| 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 { 定期契約削除 } from "@/mypage/IC定期"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { 車室情報管理, 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| export default function IC定期削除ボタン(record: 車室情報管理) { | |||||
| if (!!record.IC定期関連情報_契約ID.value) { | |||||
| setHeaderButton( | |||||
| "IC定期削除", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowConfirmDialog({ | |||||
| text: "IC定期利用を終了しますか", | |||||
| }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| const res = await 定期契約削除({ | |||||
| user_id: record.IC定期関連情報_利用者ID.value, | |||||
| parking_management_code: record.IC定期関連情報_駐車場管理コード.value, | |||||
| }); | |||||
| if (res === false) { | |||||
| throw new Message("失敗しました"); | |||||
| } | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [車室情報管理フィールド名.IC定期関連情報_契約ID]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_利用者ID]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車場管理コード]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_定期券番号]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_車種]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車場利用方法]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_契約者種類]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_有効期限開始]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_有効期限終了]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車位置情報]: "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_備考]: "", | |||||
| }), | |||||
| }); | |||||
| await bulkRequest.save(); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,74 @@ | |||||
| import { apptemplate } from "@/common/app-template"; | |||||
| import { AppID } from "@/common/appids"; | |||||
| import { dateParse, formatDateStr } from "@/common/datetime"; | |||||
| import { setHeaderButton } from "@/common/header-button"; | |||||
| import { makeRecordData } from "@/common/rest-api-client"; | |||||
| import { Message } from "@/exception"; | |||||
| import { FormDialog, ShowFormDialog, SuccessDialog } from "@/middleware/swal"; | |||||
| import { 定期契約同期 } from "@/mypage/IC定期"; | |||||
| import bulkRequest from "@/rest-api/bulk"; | |||||
| import { 車室情報管理, 車室情報管理フィールド名 } from "@/types/車室情報管理"; | |||||
| export default function IC定期同期ボタン(record: 車室情報管理) { | |||||
| if (true || !record.IC定期関連情報_契約ID.value) { | |||||
| setHeaderButton( | |||||
| "IC定期同期", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | |||||
| const confirm = await ShowFormDialog({ | |||||
| title: "IC定期同期", | |||||
| text: "契約IDを入力してください", | |||||
| input: "number", | |||||
| }); | |||||
| if (!confirm.isConfirmed) return; | |||||
| const res = await 定期契約同期({ | |||||
| season_ticket_contract_id: String(confirm.value), | |||||
| }); | |||||
| if (res === false) { | |||||
| throw new Message("失敗しました"); | |||||
| } | |||||
| const getDate = (val: any) => { | |||||
| if (val) { | |||||
| return formatDateStr(new Date(val)); | |||||
| } | |||||
| return ""; | |||||
| }; | |||||
| bulkRequest.update({ | |||||
| app: AppID.車室情報管理, | |||||
| id: record.$id.value, | |||||
| record: makeRecordData({ | |||||
| [車室情報管理フィールド名.IC定期関連情報_契約ID]: confirm.value, | |||||
| [車室情報管理フィールド名.IC定期関連情報_利用者ID]: | |||||
| res.user_id ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車場管理コード]: | |||||
| res.parking_management_code ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_定期券番号]: | |||||
| res.season_ticket_seq_no ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_車種]: | |||||
| res.vehicle_type_name ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車場利用方法]: | |||||
| res.parking_use_type_name, | |||||
| [車室情報管理フィールド名.IC定期関連情報_契約者種類]: | |||||
| res.contractor_type_name ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_有効期限開始]: getDate( | |||||
| res.expiration_start_date | |||||
| ), | |||||
| [車室情報管理フィールド名.IC定期関連情報_有効期限終了]: getDate( | |||||
| res.expiration_end_date | |||||
| ), | |||||
| [車室情報管理フィールド名.IC定期関連情報_駐車位置情報]: | |||||
| res.position_memo ?? "", | |||||
| [車室情報管理フィールド名.IC定期関連情報_備考]: res.memo ?? "", | |||||
| }), | |||||
| }); | |||||
| await bulkRequest.save(); | |||||
| await SuccessDialog.fire(); | |||||
| needReloadAtEnd(true); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| } | |||||
| @@ -1,10 +1,72 @@ | |||||
| import { eventHnalder } from "@/common/app-template"; | import { eventHnalder } from "@/common/app-template"; | ||||
| import { initMenuBox } from "@/common/header-button"; | |||||
| import { KintoneEvent } from "@/common/kintone-event"; | import { KintoneEvent } from "@/common/kintone-event"; | ||||
| import { 契約情報更新イベント } from "@/event/契約情報更新"; | import { 契約情報更新イベント } from "@/event/契約情報更新"; | ||||
| import { | |||||
| ErrorDialog, | |||||
| SuccessDialog, | |||||
| showLoadingDialog, | |||||
| } from "@/middleware/swal"; | |||||
| import { 利用者情報削除, 定期契約削除, 定期契約更新 } from "@/mypage/IC定期"; | |||||
| import { 車室情報管理 } from "@/types/車室情報管理"; | import { 車室情報管理 } from "@/types/車室情報管理"; | ||||
| import { setup } from ".."; | import { setup } from ".."; | ||||
| import IC定期削除ボタン from "./buttons/IC定期削除ボタン"; | |||||
| import IC定期同期ボタン from "./buttons/IC定期同期ボタン"; | |||||
| import { MessageBag } from "@/common/message"; | |||||
| setup(() => { | setup(() => { | ||||
| kintone.events.on( | |||||
| [KintoneEvent.詳細.レコード詳細画面を表示した後], | |||||
| eventHnalder(async (event) => { | |||||
| const record: 車室情報管理 = event.record; | |||||
| await initMenuBox(); | |||||
| IC定期削除ボタン(record); | |||||
| IC定期同期ボタン(record); | |||||
| }) | |||||
| ); | |||||
| kintone.events.on( | |||||
| [KintoneEvent.編集.保存するとき], | |||||
| eventHnalder(async (event, { setEvent }) => { | |||||
| const record = event.record as 車室情報管理; | |||||
| // IC定期処理 | |||||
| if (!!record.IC定期関連情報_契約ID.value) { | |||||
| await showLoadingDialog(); | |||||
| const res = await 定期契約更新({ | |||||
| user_id: record.IC定期関連情報_利用者ID.value, | |||||
| parking_management_code: record.IC定期関連情報_駐車場管理コード.value, | |||||
| season_ticket_seq_no: record.IC定期関連情報_定期券番号.value, | |||||
| vehicle_type_name: record.IC定期関連情報_車種.value, | |||||
| parking_use_type_name: | |||||
| record.IC定期関連情報_駐車場利用方法.value ?? "", | |||||
| contractor_type_name: record.IC定期関連情報_契約者種類.value, | |||||
| expiration_start_date: record.IC定期関連情報_有効期限開始.value ?? "", | |||||
| expiration_end_date: record.IC定期関連情報_有効期限終了.value ?? "", | |||||
| position_memo: record.IC定期関連情報_駐車位置情報.value, | |||||
| memo: record.IC定期関連情報_備考.value, | |||||
| }); | |||||
| if (res === false) { | |||||
| ErrorDialog.fire({ | |||||
| text: "IC定期連携に失敗しました", | |||||
| }); | |||||
| return false; | |||||
| } | |||||
| // 定期券番号の自動採番結果を反映 | |||||
| record.IC定期関連情報_定期券番号.value = res.season_ticket_seq_no; | |||||
| await SuccessDialog.fire({ | |||||
| text: "IC定期連携成功", | |||||
| }); | |||||
| } | |||||
| return event; | |||||
| }) | |||||
| ); | |||||
| kintone.events.on( | kintone.events.on( | ||||
| [KintoneEvent.追加.保存に成功した後, KintoneEvent.編集.保存に成功した後], | [KintoneEvent.追加.保存に成功した後, KintoneEvent.編集.保存に成功した後], | ||||
| eventHnalder(async (event, { setEvent }) => { | eventHnalder(async (event, { setEvent }) => { | ||||
| @@ -13,4 +75,37 @@ setup(() => { | |||||
| setEvent(new 契約情報更新イベント().getEvent(record)); | setEvent(new 契約情報更新イベント().getEvent(record)); | ||||
| }) | }) | ||||
| ); | ); | ||||
| kintone.events.on( | |||||
| [KintoneEvent.詳細.レコードを削除する前], | |||||
| eventHnalder(async (event, { setEvent }) => { | |||||
| const record = event.record as 車室情報管理; | |||||
| // IC定期処理 | |||||
| if (!!record.IC定期関連情報_契約ID.value) { | |||||
| await showLoadingDialog(); | |||||
| const message = new MessageBag(); | |||||
| const res = await 定期契約削除( | |||||
| { | |||||
| user_id: record.IC定期関連情報_利用者ID.value, | |||||
| parking_management_code: | |||||
| record.IC定期関連情報_駐車場管理コード.value, | |||||
| }, | |||||
| message | |||||
| ); | |||||
| if (res === false) { | |||||
| ErrorDialog.fire({ | |||||
| text: "IC定期連携に失敗しました " + message.getGeneralMessage(), | |||||
| }); | |||||
| return false; | |||||
| } | |||||
| await SuccessDialog.fire({ | |||||
| text: "IC定期連携成功", | |||||
| }); | |||||
| } | |||||
| return event; | |||||
| }) | |||||
| ); | |||||
| }); | }); | ||||
| @@ -0,0 +1,12 @@ | |||||
| { | |||||
| "app": "", | |||||
| "scope": "ALL", | |||||
| "desktop": { | |||||
| "js": ["dist/顧客マスタ.js"], | |||||
| "css": [] | |||||
| }, | |||||
| "mobile": { | |||||
| "js": [], | |||||
| "css": [] | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,79 @@ | |||||
| import { eventHnalder } from "@/common/app-template"; | |||||
| import { KintoneEvent } from "@/common/kintone-event"; | |||||
| import { | |||||
| ErrorDialog, | |||||
| SuccessDialog, | |||||
| showLoadingDialog, | |||||
| } from "@/middleware/swal"; | |||||
| import { 利用者情報削除, 利用者情報更新 } from "@/mypage/IC定期"; | |||||
| import { 顧客マスタ, 顧客マスタフィールド名 } from "@/types/顧客マスタ"; | |||||
| import { setup } from ".."; | |||||
| import { MessageBag } from "@/common/message"; | |||||
| setup(() => { | |||||
| kintone.events.on( | |||||
| [KintoneEvent.編集.保存するとき], | |||||
| eventHnalder(async (event, { setEvent }) => { | |||||
| const record = event.record as 顧客マスタ; | |||||
| const F = 顧客マスタフィールド名; | |||||
| // IC定期処理 | |||||
| if (!!record.IC定期関連情報_ユーザーID.value) { | |||||
| await showLoadingDialog(); | |||||
| const res = await 利用者情報更新({ | |||||
| user_id: record.IC定期関連情報_ユーザーID.value, | |||||
| email: record[F.メールアドレス].value, | |||||
| first_name: record[F.顧客名].value, | |||||
| first_name_kana: record[F.顧客名カナ].value, | |||||
| zip_code: record[F.契約者_郵便番号].value.replace("-", ""), | |||||
| address1: record[F.住所].value, | |||||
| phone_number: record[F.電話番号].value, | |||||
| }); | |||||
| if (res === false) { | |||||
| ErrorDialog.fire({ | |||||
| text: "IC定期連携に失敗しました", | |||||
| }); | |||||
| return false; | |||||
| } | |||||
| await SuccessDialog.fire({ | |||||
| text: "IC定期連携成功", | |||||
| }); | |||||
| } | |||||
| 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; | |||||
| }) | |||||
| ); | |||||
| }); | |||||
| @@ -0,0 +1,27 @@ | |||||
| import { Dictionary } from "lodash"; | |||||
| export class MessageBag { | |||||
| private generalMessage: string = ""; | |||||
| private messages: Dictionary<string> = {}; | |||||
| add(message: string | Dictionary<string>) { | |||||
| if (typeof message === "string") { | |||||
| console.log({ setmessage: message }); | |||||
| this.generalMessage = message; | |||||
| return; | |||||
| } | |||||
| this.messages = { | |||||
| ...this.messages, | |||||
| ...message, | |||||
| }; | |||||
| } | |||||
| getGeneralMessage() { | |||||
| return this.generalMessage; | |||||
| } | |||||
| getMessages() { | |||||
| return this.messages; | |||||
| } | |||||
| } | |||||
| @@ -32,6 +32,13 @@ export const ConfirmDialog = Swal.mixin({ | |||||
| }, | }, | ||||
| }); | }); | ||||
| export const FormDialog = Swal.mixin({ | |||||
| input: "text", | |||||
| showCancelButton: true, | |||||
| cancelButtonText: "キャンセル", | |||||
| confirmButtonText: "実行", | |||||
| }); | |||||
| export const ShowConfirmDialog = (param: SweetAlertOptions) => { | export const ShowConfirmDialog = (param: SweetAlertOptions) => { | ||||
| return ConfirmDialog.fire(param).then((result) => { | return ConfirmDialog.fire(param).then((result) => { | ||||
| if (result.isConfirmed) { | if (result.isConfirmed) { | ||||
| @@ -41,6 +48,15 @@ export const ShowConfirmDialog = (param: SweetAlertOptions) => { | |||||
| }); | }); | ||||
| }; | }; | ||||
| export const ShowFormDialog = (param: SweetAlertOptions) => { | |||||
| return FormDialog.fire(param).then((result) => { | |||||
| if (result.isConfirmed) { | |||||
| showLoadingDialog(); | |||||
| } | |||||
| return result; | |||||
| }); | |||||
| }; | |||||
| export const LoadingDialog = Swal.mixin({ | export const LoadingDialog = Swal.mixin({ | ||||
| title: "実行中...", | title: "実行中...", | ||||
| text: "画面を閉じないでください", | text: "画面を閉じないでください", | ||||
| @@ -0,0 +1,145 @@ | |||||
| import { MessageBag } from "@/common/message"; | |||||
| import { MyPageApiID } from "."; | |||||
| import { send } from "./lib"; | |||||
| // ------------- | |||||
| export type 利用者情報新規作成Request = { | |||||
| email: string; | |||||
| first_name: string; | |||||
| first_name_kana: string; | |||||
| zip_code: string; | |||||
| address1: string; | |||||
| phone_number: string; | |||||
| }; | |||||
| export type 利用者情報新規作成Response = { | |||||
| id: number; | |||||
| }; | |||||
| export const 利用者情報新規作成 = async ( | |||||
| data: 利用者情報新規作成Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<利用者情報新規作成Response | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_利用者情報_新規作成, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| // ------------- | |||||
| export type 利用者情報更新Request = { | |||||
| user_id: string; | |||||
| email: string; | |||||
| first_name: string; | |||||
| first_name_kana: string; | |||||
| zip_code: string; | |||||
| address1: string; | |||||
| phone_number: string; | |||||
| }; | |||||
| export type 利用者情報更新Response = { | |||||
| id: number; | |||||
| }; | |||||
| export const 利用者情報更新 = async ( | |||||
| data: 利用者情報更新Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<利用者情報更新Response | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_利用者情報_更新, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| // ------------- | |||||
| export type 利用者情報削除Request = { | |||||
| user_id: string; | |||||
| }; | |||||
| export type 利用者情報削除Response = { | |||||
| id: number; | |||||
| }; | |||||
| export const 利用者情報削除 = async ( | |||||
| data: 利用者情報削除Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<利用者情報削除Response | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_利用者情報_削除, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| // ------------- | |||||
| export type 定期契約新規作成Request = { | |||||
| user_id: string; | |||||
| parking_management_code: string; | |||||
| season_ticket_seq_no?: string; | |||||
| vehicle_type_name: string; | |||||
| parking_use_type_name: string; | |||||
| contractor_type_name: string; | |||||
| }; | |||||
| export type 定期契約新規作成Response = { | |||||
| id: number; | |||||
| user_id: number; | |||||
| season_ticket_seq_no: number; | |||||
| parking_management_code: string; | |||||
| }; | |||||
| export const 定期契約新規作成 = async ( | |||||
| data: 定期契約新規作成Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<定期契約新規作成Response | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_定期契約_新規作成, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| // ------------- | |||||
| export type 定期契約更新Request = { | |||||
| user_id: string; | |||||
| parking_management_code: string; | |||||
| season_ticket_seq_no: string; | |||||
| vehicle_type_name: string; | |||||
| parking_use_type_name: string; | |||||
| contractor_type_name: string; | |||||
| expiration_start_date: string; | |||||
| expiration_end_date: string; | |||||
| position_memo: string; | |||||
| memo: string; | |||||
| }; | |||||
| export const 定期契約更新 = async ( | |||||
| data: 定期契約更新Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<定期契約更新Request | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_定期契約_更新, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| // ------------- | |||||
| export type 定期契約削除Request = { | |||||
| user_id: string; | |||||
| parking_management_code: string; | |||||
| }; | |||||
| export const 定期契約削除 = ( | |||||
| data: 定期契約削除Request, | |||||
| message: MessageBag | null = null | |||||
| ) => { | |||||
| return send(MyPageApiID.IC定期_定期契約_削除, data, message); | |||||
| }; | |||||
| // ------------- | |||||
| export type 定期契約同期Request = { | |||||
| season_ticket_contract_id: string; | |||||
| }; | |||||
| export const 定期契約同期 = async ( | |||||
| data: 定期契約同期Request, | |||||
| message: MessageBag | null = null | |||||
| ): Promise<定期契約更新Request | false> => { | |||||
| const res = await send(MyPageApiID.IC定期_定期契約_同期, data, message); | |||||
| if (res === false) { | |||||
| return false; | |||||
| } | |||||
| return res.data; | |||||
| }; | |||||
| @@ -4,5 +4,14 @@ export const MyPageApiID = { | |||||
| 定期選考一斉通知: "season-ticket-contract-selection/notice-to-candidates", | 定期選考一斉通知: "season-ticket-contract-selection/notice-to-candidates", | ||||
| 領収証発行: "receipt/create", | 領収証発行: "receipt/create", | ||||
| 領収証ファイル保存: "receipt/save", | 領収証ファイル保存: "receipt/save", | ||||
| // IC定期券連 | |||||
| IC定期_定期契約_新規作成: "season-ticket-contract/ht-ic-web/before/create", | |||||
| IC定期_定期契約_更新: "season-ticket-contract/ht-ic-web/before/update", | |||||
| IC定期_定期契約_削除: "season-ticket-contract/ht-ic-web/before/delete", | |||||
| IC定期_定期契約_同期: "season-ticket-contract/ht-ic-web/before/fetch", | |||||
| IC定期_利用者情報_新規作成: "user/ht-ic-web/before/create", | |||||
| IC定期_利用者情報_更新: "user/ht-ic-web/before/update", | |||||
| IC定期_利用者情報_削除: "user/ht-ic-web/before/delete", | |||||
| } as const; | } as const; | ||||
| export type MyPageApiID = (typeof MyPageApiID)[keyof typeof MyPageApiID]; | export type MyPageApiID = (typeof MyPageApiID)[keyof typeof MyPageApiID]; | ||||
| @@ -1,5 +1,7 @@ | |||||
| import { myPageConfig } from "@/config/mypage"; | import { myPageConfig } from "@/config/mypage"; | ||||
| import { MyPageApiID } from "."; | import { MyPageApiID } from "."; | ||||
| import { MessageBag } from "@/common/message"; | |||||
| import { get } from "lodash"; | |||||
| type MyPageApiResponse = { | type MyPageApiResponse = { | ||||
| result: "SUCCESS" | "FAILED"; | result: "SUCCESS" | "FAILED"; | ||||
| @@ -11,13 +13,16 @@ export const getUrl = (apiId: MyPageApiID) => { | |||||
| return [config.BASE_URL, "api-from-kintone", apiId].join("/"); | return [config.BASE_URL, "api-from-kintone", apiId].join("/"); | ||||
| }; | }; | ||||
| export const send = async (apiId: MyPageApiID, data: object) => { | |||||
| export const send = async ( | |||||
| apiId: MyPageApiID, | |||||
| data: object, | |||||
| message: MessageBag | null = null | |||||
| ) => { | |||||
| const url = getUrl(apiId); | const url = getUrl(apiId); | ||||
| const sendData = { | const sendData = { | ||||
| ...data, | ...data, | ||||
| token: config.TOKEN ?? "", | token: config.TOKEN ?? "", | ||||
| }; | }; | ||||
| console.info("MyPageAPICall", url, data); | |||||
| const res: any = await kintone.proxy( | const res: any = await kintone.proxy( | ||||
| url, | url, | ||||
| @@ -28,15 +33,23 @@ export const send = async (apiId: MyPageApiID, data: object) => { | |||||
| const status = res[1]; | const status = res[1]; | ||||
| if (status !== 200) { | if (status !== 200) { | ||||
| console.info("MyPageAPICall", url, data, undefined); | |||||
| console.error("http status not 200", res); | console.error("http status not 200", res); | ||||
| return false; | return false; | ||||
| } | } | ||||
| const obj = JSON.parse(res[0]); | const obj = JSON.parse(res[0]); | ||||
| console.info("MyPageAPICall", url, data, obj); | |||||
| if (obj.result === "SUCCESS") { | if (obj.result === "SUCCESS") { | ||||
| return true; | |||||
| return obj; | |||||
| } else { | } else { | ||||
| console.error("処理失敗", res); | |||||
| console.error("処理失敗", obj, res); | |||||
| if (message !== null) { | |||||
| const generalErrorMessage = get(obj, "message"); | |||||
| if (typeof generalErrorMessage === "string") { | |||||
| message.add(generalErrorMessage); | |||||
| } | |||||
| } | |||||
| return false; | return false; | ||||
| } | } | ||||
| }; | }; | ||||
| @@ -0,0 +1,39 @@ | |||||
| import { AppID } from "@/common/appids"; | |||||
| import { | |||||
| ParkingNavi駐車場プラン, | |||||
| ParkingNavi駐車場プランフィールド名, | |||||
| } from "@/types/ParkingNavi駐車場プラン"; | |||||
| import { KintoneRestAPIClient } from "@kintone/rest-api-client"; | |||||
| import { sprintf } from "sprintf"; | |||||
| const client = new KintoneRestAPIClient(); | |||||
| export const getParkingNavi駐車場プラン = async ( | |||||
| プラン名: string | |||||
| ): Promise<ParkingNavi駐車場プラン> => { | |||||
| const query = sprintf( | |||||
| sprintf( | |||||
| '%s = "%s"', | |||||
| ParkingNavi駐車場プランフィールド名.定期駐車場プラン, | |||||
| プラン名 | |||||
| ) | |||||
| ); | |||||
| const { records } = await client.record.getRecords<ParkingNavi駐車場プラン>({ | |||||
| app: AppID.ParkingNavi駐車場プラン, | |||||
| query, | |||||
| }); | |||||
| if (records.length !== 1) { | |||||
| throw new Error( | |||||
| sprintf( | |||||
| "ParkingNavi駐車場プラン取得数数エラー expect %d, actual %d query:%s", | |||||
| 1, | |||||
| records.length, | |||||
| query | |||||
| ) | |||||
| ); | |||||
| } | |||||
| return records[0]; | |||||
| }; | |||||
| @@ -19,6 +19,5 @@ export type ParkingNavi駐車場プラン = AppRecord & { | |||||
| [F.定期駐車場名]: KintoneRecordField.SingleLineText; | [F.定期駐車場名]: KintoneRecordField.SingleLineText; | ||||
| 状態: KintoneRecordField.RadioButton; | 状態: KintoneRecordField.RadioButton; | ||||
| [F.プラン名]: KintoneRecordField.SingleLineText; | [F.プラン名]: KintoneRecordField.SingleLineText; | ||||
| 割引: KintoneRecordField.CheckBox; | 割引: KintoneRecordField.CheckBox; | ||||
| }; | }; | ||||
| @@ -23,6 +23,7 @@ export const 申請種別Dropdown = { | |||||
| 利用者情報変更: "利用者情報変更", | 利用者情報変更: "利用者情報変更", | ||||
| 口座変更申請: "口座変更申請", | 口座変更申請: "口座変更申請", | ||||
| プラン変更: "プラン変更", | プラン変更: "プラン変更", | ||||
| IC定期_駐車場利用方法変更申請: "IC定期_駐車場利用方法変更申請", | |||||
| } as const; | } as const; | ||||
| export type 申請種別Dropdown = | export type 申請種別Dropdown = | ||||
| (typeof 申請種別Dropdown)[keyof typeof 申請種別Dropdown]; | (typeof 申請種別Dropdown)[keyof typeof 申請種別Dropdown]; | ||||
| @@ -43,6 +44,8 @@ export const 申請詳細グループ = { | |||||
| [申請種別Dropdown.利用者情報変更]: "利用者情報変更申請", | [申請種別Dropdown.利用者情報変更]: "利用者情報変更申請", | ||||
| [申請種別Dropdown.口座変更申請]: "口座変更申請", | [申請種別Dropdown.口座変更申請]: "口座変更申請", | ||||
| [申請種別Dropdown.プラン変更]: "プラン変更申請", | [申請種別Dropdown.プラン変更]: "プラン変更申請", | ||||
| [申請種別Dropdown.IC定期_駐車場利用方法変更申請]: | |||||
| "IC定期_駐車場利用方法変更申請", | |||||
| } as const; | } as const; | ||||
| export type 申請詳細グループ = | export type 申請詳細グループ = | ||||
| (typeof 申請詳細グループ)[keyof typeof 申請詳細グループ]; | (typeof 申請詳細グループ)[keyof typeof 申請詳細グループ]; | ||||
| @@ -127,4 +130,7 @@ export type 各種申請 = AppRecord & { | |||||
| 利用者情報変更申請_変更前_住所: KintoneRecordField.SingleLineText; | 利用者情報変更申請_変更前_住所: KintoneRecordField.SingleLineText; | ||||
| 利用者情報変更申請_変更前_電話番号: KintoneRecordField.SingleLineText; | 利用者情報変更申請_変更前_電話番号: KintoneRecordField.SingleLineText; | ||||
| 利用者情報変更申請_変更前_郵便番号: KintoneRecordField.SingleLineText; | 利用者情報変更申請_変更前_郵便番号: KintoneRecordField.SingleLineText; | ||||
| IC定期_駐車場利用方法変更申請_変更前: KintoneRecordField.SingleLineText; | |||||
| IC定期_駐車場利用方法変更申請_変更後: KintoneRecordField.SingleLineText; | |||||
| IC定期_駐車場利用方法変更申請_備考: KintoneRecordField.MultiLineText; | |||||
| }; | }; | ||||
| @@ -25,6 +25,7 @@ const F = { | |||||
| ParkingNavi駐車場: "ParkingNavi駐車場", | ParkingNavi駐車場: "ParkingNavi駐車場", | ||||
| ParkingNaviプラン: "ParkingNaviプラン", | ParkingNaviプラン: "ParkingNaviプラン", | ||||
| 定期駐車場プラン: "定期駐車場プラン", | 定期駐車場プラン: "定期駐車場プラン", | ||||
| IC定期駐車場利用方法: "IC定期駐車場利用方法", | |||||
| } as const; | } as const; | ||||
| export const 状態Dropdown = { | export const 状態Dropdown = { | ||||
| @@ -101,4 +102,5 @@ export type 定期申込予約 = AppRecord & { | |||||
| [F.初回入金予定_日割り分入金予定]: KintoneRecordField.SingleLineText; | [F.初回入金予定_日割り分入金予定]: KintoneRecordField.SingleLineText; | ||||
| [F.初回入金予定_保証金入金予定]: KintoneRecordField.SingleLineText; | [F.初回入金予定_保証金入金予定]: KintoneRecordField.SingleLineText; | ||||
| [F.初回入金予定_初回入金充当状態]: KintoneRecordField.SingleLineText; | [F.初回入金予定_初回入金充当状態]: KintoneRecordField.SingleLineText; | ||||
| [F.IC定期駐車場利用方法]: KintoneRecordField.SingleLineText; | |||||
| }; | }; | ||||
| @@ -9,6 +9,11 @@ const F = { | |||||
| 駐車場備考: "駐車場備考", | 駐車場備考: "駐車場備考", | ||||
| 種別: "種別", | 種別: "種別", | ||||
| 契約金額: "契約金額", | 契約金額: "契約金額", | ||||
| IC定期駐車場: "IC定期駐車場", | |||||
| IC定期_駐車場管理コード: "IC定期_駐車場管理コード", | |||||
| IC定期_車種: "IC定期_車種", | |||||
| IC定期_契約者種類: "IC定期_契約者種類", | |||||
| } as const; | } as const; | ||||
| // export const 支払種別Dropdown = { | // export const 支払種別Dropdown = { | ||||
| @@ -67,4 +72,8 @@ export type 定期駐車場プランマスタ = AppRecord & { | |||||
| }; | }; | ||||
| }[]; | }[]; | ||||
| }; | }; | ||||
| [F.IC定期駐車場]: KintoneRecordField.CheckBox; | |||||
| [F.IC定期_駐車場管理コード]: KintoneRecordField.SingleLineText; | |||||
| [F.IC定期_車種]: KintoneRecordField.Dropdown; | |||||
| [F.IC定期_契約者種類]: KintoneRecordField.SingleLineText; | |||||
| }; | }; | ||||
| @@ -25,6 +25,18 @@ const F = { | |||||
| 定額_12月: "定額_12月", | 定額_12月: "定額_12月", | ||||
| 入金予定日: "入金予定日", | 入金予定日: "入金予定日", | ||||
| IC定期関連情報_契約ID: "IC定期関連情報_契約ID", | |||||
| IC定期関連情報_利用者ID: "IC定期関連情報_利用者ID", | |||||
| IC定期関連情報_駐車場管理コード: "IC定期関連情報_駐車場管理コード", | |||||
| IC定期関連情報_定期券番号: "IC定期関連情報_定期券番号", | |||||
| IC定期関連情報_車種: "IC定期関連情報_車種", | |||||
| IC定期関連情報_駐車場利用方法: "IC定期関連情報_駐車場利用方法", | |||||
| IC定期関連情報_契約者種類: "IC定期関連情報_契約者種類", | |||||
| IC定期関連情報_有効期限開始: "IC定期関連情報_有効期限開始", | |||||
| IC定期関連情報_有効期限終了: "IC定期関連情報_有効期限終了", | |||||
| IC定期関連情報_駐車位置情報: "IC定期関連情報_駐車位置情報", | |||||
| IC定期関連情報_備考: "IC定期関連情報_備考", | |||||
| } as const; | } as const; | ||||
| // export const 支払種別Dropdown = { | // export const 支払種別Dropdown = { | ||||
| @@ -143,4 +155,17 @@ export type 車室情報管理 = AppRecord & { | |||||
| 学生証画像: KintoneRecordField.File; | 学生証画像: KintoneRecordField.File; | ||||
| 障がい者手帳画像: KintoneRecordField.File; | 障がい者手帳画像: KintoneRecordField.File; | ||||
| 解約届: KintoneRecordField.File; | 解約届: KintoneRecordField.File; | ||||
| // IC定期関連 | |||||
| IC定期関連情報_契約ID: KintoneRecordField.Number; | |||||
| IC定期関連情報_利用者ID: KintoneRecordField.Number; | |||||
| IC定期関連情報_駐車場管理コード: KintoneRecordField.SingleLineText; | |||||
| IC定期関連情報_定期券番号: KintoneRecordField.Number; | |||||
| IC定期関連情報_車種: KintoneRecordField.SingleLineText; | |||||
| IC定期関連情報_駐車場利用方法: KintoneRecordField.Dropdown; | |||||
| IC定期関連情報_契約者種類: KintoneRecordField.SingleLineText; | |||||
| IC定期関連情報_有効期限開始: KintoneRecordField.Date; | |||||
| IC定期関連情報_有効期限終了: KintoneRecordField.Date; | |||||
| IC定期関連情報_駐車位置情報: KintoneRecordField.SingleLineText; | |||||
| IC定期関連情報_備考: KintoneRecordField.MultiLineText; | |||||
| }; | }; | ||||
| @@ -21,6 +21,8 @@ const F = { | |||||
| メールアドレス: "メールアドレス", | メールアドレス: "メールアドレス", | ||||
| SMBC契約番号: "ContractNo", | SMBC契約番号: "ContractNo", | ||||
| 支払方法: "支払方法", | 支払方法: "支払方法", | ||||
| IC定期関連情報_ユーザーID: "IC定期関連情報_ユーザーID", | |||||
| } as const; | } as const; | ||||
| // export const 支払種別Dropdown = { | // export const 支払種別Dropdown = { | ||||
| @@ -87,4 +89,5 @@ export type 顧客マスタ = AppRecord & { | |||||
| 領収書: KintoneRecordField.Dropdown; | 領収書: KintoneRecordField.Dropdown; | ||||
| 領収書名_入力: KintoneRecordField.SingleLineText; | 領収書名_入力: KintoneRecordField.SingleLineText; | ||||
| 領収書名: KintoneRecordField.SingleLineText; | 領収書名: KintoneRecordField.SingleLineText; | ||||
| [F.IC定期関連情報_ユーザーID]: KintoneRecordField.Number; | |||||
| }; | }; | ||||