diff --git a/src/apps/kt-kintone-lib/index.ts b/src/apps/kt-kintone-lib/index.ts deleted file mode 100644 index f5ffb35..0000000 --- a/src/apps/kt-kintone-lib/index.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { EmailID, sendEmail } from "@/mypage/メール"; -import { makeReceipt } from "@/mypage/領収証発行"; - -/** - * windowのグローバルオブジェクトに関数を登録する - * 本typescriptプロジェクト以外からも関数を参照できるようにするためのAPI - */ - -declare global { - interface Window { - KtKintoneLib: typeof KtKintoneLib; - } -} - -namespace KtKintoneLib { - // MyPageAPIを呼び出すための関数群 - export namespace api { - // 領収証作成API - export function 領収証作成( - 入金予定実績レコード番号: number[] - ): Promise { - return makeReceipt(入金予定実績レコード番号); - } - - // メール送信API群 - export namespace メール送信 { - export function 解約承認(申請番号: string): Promise { - return sendEmail(EmailID.解約承認, { - application_no: 申請番号, - }); - } - export function 車両番号防犯登録番号変更完了( - 申請番号: string - ): Promise { - return sendEmail(EmailID.車両番号_防犯登録番号変更完了, { - application_no: 申請番号, - }); - } - export function 利用者情報変更完了(申請番号: string): Promise { - return sendEmail(EmailID.利用者情報変更完了, { - application_no: 申請番号, - }); - } - export function プラン変更完了(申請番号: string): Promise { - return sendEmail(EmailID.プラン変更完了, { - application_no: 申請番号, - }); - } - export function 申込受付( - 定期申込予約レコード番号: number - ): Promise { - return sendEmail(EmailID.申込受付, { - season_ticket_contract_entry_record_no: 定期申込予約レコード番号, - }); - } - export function 申込承認( - 定期申込予約レコード番号: number - ): Promise { - return sendEmail(EmailID.申込承認, { - season_ticket_contract_entry_record_no: 定期申込予約レコード番号, - }); - } - export function 口座振替未納者通知( - 車室情報管理レコード番号: number, - 入金予定結果レコード番号: number - ): Promise { - return sendEmail(EmailID.口座振替_未納者通知, { - season_ticket_contract_record_no: 車室情報管理レコード番号, - payment_plan_record_no: 入金予定結果レコード番号, - }); - } - } - } -} - -window.KtKintoneLib = KtKintoneLib; diff --git a/src/apps/定期申込予約/buttons/受付メール送信ボタン.ts b/src/apps/定期申込予約/buttons/受付メール_ゆうちょ_送信ボタン.ts similarity index 93% rename from src/apps/定期申込予約/buttons/受付メール送信ボタン.ts rename to src/apps/定期申込予約/buttons/受付メール_ゆうちょ_送信ボタン.ts index 5450ea5..b0e5d72 100644 --- a/src/apps/定期申込予約/buttons/受付メール送信ボタン.ts +++ b/src/apps/定期申込予約/buttons/受付メール_ゆうちょ_送信ボタン.ts @@ -48,13 +48,13 @@ const 表示判定 = (record: 定期申込予約): boolean => { return true; }; -export default function 受付メール送信ボタン(record: 定期申込予約) { +export default function 受付メール_ゆうちょ_送信ボタン(record: 定期申込予約) { if (表示判定(record)) { setHeaderButton( - "受付メール送信", + "受付メール送信 ゆうちょ", apptemplate(async ({ needReloadAtEnd }) => { const confirmMessage = (() => { - if (!!record.受付メール送信日時.value) { + if (!!record.受付メール送信日時_ゆうちょ.value) { return "送信しますか?(再送信)"; } return "送信しますか?"; @@ -102,7 +102,7 @@ export default function 受付メール送信ボタン(record: 定期申込予 } // メール送信 - const emailSuccess = await sendEmail(EmailID.申込受付, { + const emailSuccess = await sendEmail(EmailID.申込受付_ゆうちょ, { season_ticket_contract_entry_record_no: Number(record.$id.value), }); @@ -114,9 +114,8 @@ export default function 受付メール送信ボタン(record: 定期申込予 app: AppID.定期申込予約, id: record.$id.value, record: makeRecordData({ - [定期申込予約フィールド名.受付メール送信日時]: makeDatetimeStr( - now() - ), + [定期申込予約フィールド名.受付メール送信日時_ゆうちょ]: + makeDatetimeStr(now()), }), }); diff --git a/src/apps/定期申込予約/buttons/受付メール_バンクチェック_送信ボタン.ts b/src/apps/定期申込予約/buttons/受付メール_バンクチェック_送信ボタン.ts new file mode 100644 index 0000000..8e884e0 --- /dev/null +++ b/src/apps/定期申込予約/buttons/受付メール_バンクチェック_送信ボタン.ts @@ -0,0 +1,130 @@ +import { apptemplate } from "@/common/app-template"; +import { AppID } from "@/common/appids"; +import { now } from "@/common/datetime"; +import { setHeaderButton } from "@/common/header-button"; +import { makeDatetimeStr, 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 { QueryBuilder } from "@/rest-api/query"; +import { 入金予定結果, 入金予定結果フィールド名 } from "@/types/入金予定結果"; +import { + 初回入金予定Checkbox, + 定期申込予約, + 定期申込予約フィールド名, +} from "@/types/定期申込予約"; +import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; +import { KintoneRestAPIClient } from "@kintone/rest-api-client"; + +const 表示判定 = (record: 定期申込予約): boolean => { + if (!record.自動承認契約情報.value) { + return false; + } + + if (!!record.IC定期駐車場利用方法.value) { + return false; + } + + if ( + record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.初月分) && + !record.初回入金予定_初月分入金予定.value + ) { + return false; + } + if ( + record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.日割り分) && + !record.初回入金予定_日割り分入金予定.value + ) { + return false; + } + if ( + record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.保証金) && + !record.初回入金予定_保証金入金予定.value + ) { + return false; + } + + 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 = 入金予定結果フィールド名; + const builder = new QueryBuilder(); + builder.where(F.初回振り込み関連申込レコード番号, record.$id.value); + const { records } = await client.record.getRecords<入金予定結果>({ + app: AppID.入金予定結果, + query: builder.build(), + }); + + // 入金予定日を車室情報管理アプリにも登録する + if (0 < records.length) { + const 車室契約情報レコード番号 = record.自動承認契約情報.value; + if (!車室契約情報レコード番号) { + throw new Message("契約情報不明"); + } + + const 支払予定日 = records[0][F.支払予定日].value; + if (!支払予定日) { + throw new Message("支払予定日不明"); + } + const 合計金額: number = (() => { + let num = 0; + records.forEach((ele) => { + num += Number(ele[F.支払予定金額].value); + }); + return num; + })(); + + bulkRequest.update({ + app: AppID.車室情報管理, + id: record.自動承認契約情報.value, + record: makeRecordData({ + [車室情報管理フィールド名.入金予定日]: 支払予定日, + }), + }); + } + + // メール送信 + const emailSuccess = await sendEmail(EmailID.申込受付_バンクチェック, { + season_ticket_contract_entry_record_no: Number(record.$id.value), + }); + + if (!emailSuccess) { + throw new Message("メール送信に失敗しました"); + } + + bulkRequest.update({ + app: AppID.定期申込予約, + id: record.$id.value, + record: makeRecordData({ + [定期申込予約フィールド名.受付メール送信日時_バンクチェック]: + makeDatetimeStr(now()), + }), + }); + + await bulkRequest.save(); + await SuccessDialog.fire(); + needReloadAtEnd(true); + }) + ); + } +} diff --git a/src/apps/定期申込予約/index.tsx b/src/apps/定期申込予約/index.tsx index dfd8edc..3c573a3 100644 --- a/src/apps/定期申込予約/index.tsx +++ b/src/apps/定期申込予約/index.tsx @@ -5,12 +5,13 @@ import { 定期申込予約 } from "@/types/定期申込予約"; import { setup } from ".."; import 保証金入金予定作成ボタン from "./buttons/保証金入金予定作成ボタン"; import 初月分入金予定作成ボタン from "./buttons/初月分入金予定作成ボタン"; -import 受付メール送信ボタン from "./buttons/受付メール送信ボタン"; import 日割り入金予定作成ボタン from "./buttons/日割り入金予定作成ボタン"; import 自動承認ボタン from "./buttons/自動承認ボタン"; import 承認メール送信ボタン from "./buttons/承認メール送信ボタン"; import 定期駐車場プラン入力 from "./buttons/定期駐車場プラン入力"; import バンクチェック登録ボタン from "./buttons/バンクチェック登録ボタン"; +import 受付メール_ゆうちょ_送信ボタン from "./buttons/受付メール_ゆうちょ_送信ボタン"; +import 受付メール_バンクチェック_送信ボタン from "./buttons/受付メール_バンクチェック_送信ボタン"; setup(() => { kintone.events.on( @@ -24,7 +25,8 @@ setup(() => { 初月分入金予定作成ボタン(record); 日割り入金予定作成ボタン(record); 保証金入金予定作成ボタン(record); - 受付メール送信ボタン(record); + 受付メール_ゆうちょ_送信ボタン(record); + 受付メール_バンクチェック_送信ボタン(record); 承認メール送信ボタン(record); 定期駐車場プラン入力(record); バンクチェック登録ボタン(record); diff --git a/src/common/rest-api-client.ts b/src/common/rest-api-client.ts index e60415c..1b2bf60 100644 --- a/src/common/rest-api-client.ts +++ b/src/common/rest-api-client.ts @@ -40,6 +40,7 @@ export const makeSubTableRecordData = (data: { [key: string]: any }[]) => { } = { value: {} }; Object.keys(row).forEach((key) => { const val = get(row, key); + console.log("HEIHEI", { key, row, val }); obj.value[key] = val; }); return obj; diff --git a/src/mypage/メール.ts b/src/mypage/メール.ts index ba5bf5a..b2752c2 100644 --- a/src/mypage/メール.ts +++ b/src/mypage/メール.ts @@ -8,7 +8,8 @@ export const EmailID = { 利用者情報変更完了: "利用者情報変更完了", 振替頻度変更完了: "振替頻度変更完了", プラン変更完了: "プラン変更完了", - 申込受付: "申込受付", + 申込受付_バンクチェック: "申込受付_バンクチェック", + 申込受付_ゆうちょ: "申込受付_ゆうちょ", 申込承認: "申込承認", 定期選考_一斉通知: "定期選考_一斉通知", 定期選考_当選のお知らせ: "定期選考_当選のお知らせ", diff --git a/src/types/入金予定結果.ts b/src/types/入金予定結果.ts index 7212be6..dc4cc42 100644 --- a/src/types/入金予定結果.ts +++ b/src/types/入金予定結果.ts @@ -1,7 +1,6 @@ import { KintoneRecordField } from "@kintone/rest-api-client"; import { AppRecord } from "."; import get from "lodash/get"; -import set from "lodash/set"; import has from "lodash/has"; const F = { @@ -64,7 +63,9 @@ export const 保証金明細行データ作成 = (data: object): 保証金明細 Object.keys(row).forEach((target) => { if (has(data, target)) { - set(row, target + ".value", get(data, target)); + if (target === "保証金明細_金額" || target === "保証金明細_名称") { + row[target].value = get(data, target) ?? ""; + } } }); diff --git a/src/types/定期申込予約.ts b/src/types/定期申込予約.ts index 578c112..248a390 100644 --- a/src/types/定期申込予約.ts +++ b/src/types/定期申込予約.ts @@ -7,14 +7,15 @@ const F = { 利用開始希望日: "利用開始希望日", 駐車場名: "駐車場", 定期駐車料金: "定期駐車料金", - 振込期日: "振込期日", - 日割り分_月: "日割り分_月", - 日割り分_金額: "日割り分_金額", - 請求対象分_月: "請求対象分_月", - 請求対象分_金額: "請求対象分_金額", - 初回振り込み合計額: "初回振り込み合計額", + // 振込期日: "振込期日", + // 日割り分_月: "日割り分_月", + // 日割り分_金額: "日割り分_金額", + // 請求対象分_月: "請求対象分_月", + // 請求対象分_金額: "請求対象分_金額", + // 初回振り込み合計額: "初回振り込み合計額", 自動承認契約情報: "自動承認契約情報", - 受付メール送信日時: "受付メール送信日時", + 受付メール送信日時_バンクチェック: "受付メール送信日時_バンクチェック", + 受付メール送信日時_ゆうちょ: "受付メール送信日時_ゆうちょ", 承認メール送信日時: "承認メール送信日時", 初回入金予定_必要分: "初回入金予定_必要分", 初回入金予定_初月分入金予定: "初回入金予定_初月分入金予定", @@ -67,7 +68,7 @@ export type 定期申込予約 = AppRecord & { 台数: KintoneRecordField.SingleLineText; 防犯登録番号: KintoneRecordField.SingleLineText; 請求対象分_月: KintoneRecordField.Number; - [F.初回振り込み合計額]: KintoneRecordField.Number; + // [F.初回振り込み合計額]: KintoneRecordField.Number; メールアドレス: KintoneRecordField.SingleLineText; 受付日時: KintoneRecordField.DateTime; 学生手帳: KintoneRecordField.SingleLineText; @@ -84,18 +85,19 @@ export type 定期申込予約 = AppRecord & { 車室番号: KintoneRecordField.SingleLineText; [F.ParkingNavi駐車場]: KintoneRecordField.SingleLineText; [F.駐車場名]: KintoneRecordField.SingleLineText; - [F.振込期日]: KintoneRecordField.Date; + // [F.振込期日]: KintoneRecordField.Date; 日割り分_金額: KintoneRecordField.Number; 自動承認メモ: KintoneRecordField.MultiLineText; 車両番号: KintoneRecordField.SingleLineText; - [F.請求対象分_金額]: KintoneRecordField.Number; + // [F.請求対象分_金額]: KintoneRecordField.Number; [F.ParkingNaviプラン]: KintoneRecordField.SingleLineText; - [F.日割り分_月]: KintoneRecordField.Number; + // [F.日割り分_月]: KintoneRecordField.Number; 支払方法: KintoneRecordField.Dropdown; [F.自動承認ステータス]: KintoneRecordField.SingleLineText; [F.状態]: KintoneRecordField.Dropdown; [F.自動承認契約情報]: KintoneRecordField.Number; - [F.受付メール送信日時]: KintoneRecordField.DateTime; + [F.受付メール送信日時_バンクチェック]: KintoneRecordField.DateTime; + [F.受付メール送信日時_ゆうちょ]: KintoneRecordField.DateTime; [F.承認メール送信日時]: KintoneRecordField.DateTime; [F.初回入金予定_必要分]: KintoneRecordField.CheckBox; [F.初回入金予定_初月分入金予定]: KintoneRecordField.Number;