| @@ -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<boolean> { | |||||
| return makeReceipt(入金予定実績レコード番号); | |||||
| } | |||||
| // メール送信API群 | |||||
| export namespace メール送信 { | |||||
| export function 解約承認(申請番号: string): Promise<boolean> { | |||||
| return sendEmail(EmailID.解約承認, { | |||||
| application_no: 申請番号, | |||||
| }); | |||||
| } | |||||
| export function 車両番号防犯登録番号変更完了( | |||||
| 申請番号: string | |||||
| ): Promise<boolean> { | |||||
| return sendEmail(EmailID.車両番号_防犯登録番号変更完了, { | |||||
| application_no: 申請番号, | |||||
| }); | |||||
| } | |||||
| export function 利用者情報変更完了(申請番号: string): Promise<boolean> { | |||||
| return sendEmail(EmailID.利用者情報変更完了, { | |||||
| application_no: 申請番号, | |||||
| }); | |||||
| } | |||||
| export function プラン変更完了(申請番号: string): Promise<boolean> { | |||||
| return sendEmail(EmailID.プラン変更完了, { | |||||
| application_no: 申請番号, | |||||
| }); | |||||
| } | |||||
| export function 申込受付( | |||||
| 定期申込予約レコード番号: number | |||||
| ): Promise<boolean> { | |||||
| return sendEmail(EmailID.申込受付, { | |||||
| season_ticket_contract_entry_record_no: 定期申込予約レコード番号, | |||||
| }); | |||||
| } | |||||
| export function 申込承認( | |||||
| 定期申込予約レコード番号: number | |||||
| ): Promise<boolean> { | |||||
| return sendEmail(EmailID.申込承認, { | |||||
| season_ticket_contract_entry_record_no: 定期申込予約レコード番号, | |||||
| }); | |||||
| } | |||||
| export function 口座振替未納者通知( | |||||
| 車室情報管理レコード番号: number, | |||||
| 入金予定結果レコード番号: number | |||||
| ): Promise<boolean> { | |||||
| return sendEmail(EmailID.口座振替_未納者通知, { | |||||
| season_ticket_contract_record_no: 車室情報管理レコード番号, | |||||
| payment_plan_record_no: 入金予定結果レコード番号, | |||||
| }); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| window.KtKintoneLib = KtKintoneLib; | |||||
| @@ -48,13 +48,13 @@ const 表示判定 = (record: 定期申込予約): boolean => { | |||||
| return true; | return true; | ||||
| }; | }; | ||||
| export default function 受付メール送信ボタン(record: 定期申込予約) { | |||||
| export default function 受付メール_ゆうちょ_送信ボタン(record: 定期申込予約) { | |||||
| if (表示判定(record)) { | if (表示判定(record)) { | ||||
| setHeaderButton( | setHeaderButton( | ||||
| "受付メール送信", | |||||
| "受付メール送信 ゆうちょ", | |||||
| apptemplate(async ({ needReloadAtEnd }) => { | apptemplate(async ({ needReloadAtEnd }) => { | ||||
| const confirmMessage = (() => { | const confirmMessage = (() => { | ||||
| if (!!record.受付メール送信日時.value) { | |||||
| if (!!record.受付メール送信日時_ゆうちょ.value) { | |||||
| return "送信しますか?(再送信)"; | return "送信しますか?(再送信)"; | ||||
| } | } | ||||
| 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), | season_ticket_contract_entry_record_no: Number(record.$id.value), | ||||
| }); | }); | ||||
| @@ -114,9 +114,8 @@ export default function 受付メール送信ボタン(record: 定期申込予 | |||||
| app: AppID.定期申込予約, | app: AppID.定期申込予約, | ||||
| id: record.$id.value, | id: record.$id.value, | ||||
| record: makeRecordData({ | record: makeRecordData({ | ||||
| [定期申込予約フィールド名.受付メール送信日時]: makeDatetimeStr( | |||||
| now() | |||||
| ), | |||||
| [定期申込予約フィールド名.受付メール送信日時_ゆうちょ]: | |||||
| makeDatetimeStr(now()), | |||||
| }), | }), | ||||
| }); | }); | ||||
| @@ -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); | |||||
| }) | |||||
| ); | |||||
| } | |||||
| } | |||||
| @@ -5,12 +5,13 @@ import { 定期申込予約 } from "@/types/定期申込予約"; | |||||
| import { setup } from ".."; | 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/承認メール送信ボタン"; | import 承認メール送信ボタン from "./buttons/承認メール送信ボタン"; | ||||
| 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( | ||||
| @@ -24,7 +25,8 @@ setup(() => { | |||||
| 初月分入金予定作成ボタン(record); | 初月分入金予定作成ボタン(record); | ||||
| 日割り入金予定作成ボタン(record); | 日割り入金予定作成ボタン(record); | ||||
| 保証金入金予定作成ボタン(record); | 保証金入金予定作成ボタン(record); | ||||
| 受付メール送信ボタン(record); | |||||
| 受付メール_ゆうちょ_送信ボタン(record); | |||||
| 受付メール_バンクチェック_送信ボタン(record); | |||||
| 承認メール送信ボタン(record); | 承認メール送信ボタン(record); | ||||
| 定期駐車場プラン入力(record); | 定期駐車場プラン入力(record); | ||||
| バンクチェック登録ボタン(record); | バンクチェック登録ボタン(record); | ||||
| @@ -40,6 +40,7 @@ export const makeSubTableRecordData = (data: { [key: string]: any }[]) => { | |||||
| } = { value: {} }; | } = { value: {} }; | ||||
| Object.keys(row).forEach((key) => { | Object.keys(row).forEach((key) => { | ||||
| const val = get(row, key); | const val = get(row, key); | ||||
| console.log("HEIHEI", { key, row, val }); | |||||
| obj.value[key] = val; | obj.value[key] = val; | ||||
| }); | }); | ||||
| return obj; | return obj; | ||||
| @@ -8,7 +8,8 @@ export const EmailID = { | |||||
| 利用者情報変更完了: "利用者情報変更完了", | 利用者情報変更完了: "利用者情報変更完了", | ||||
| 振替頻度変更完了: "振替頻度変更完了", | 振替頻度変更完了: "振替頻度変更完了", | ||||
| プラン変更完了: "プラン変更完了", | プラン変更完了: "プラン変更完了", | ||||
| 申込受付: "申込受付", | |||||
| 申込受付_バンクチェック: "申込受付_バンクチェック", | |||||
| 申込受付_ゆうちょ: "申込受付_ゆうちょ", | |||||
| 申込承認: "申込承認", | 申込承認: "申込承認", | ||||
| 定期選考_一斉通知: "定期選考_一斉通知", | 定期選考_一斉通知: "定期選考_一斉通知", | ||||
| 定期選考_当選のお知らせ: "定期選考_当選のお知らせ", | 定期選考_当選のお知らせ: "定期選考_当選のお知らせ", | ||||
| @@ -1,7 +1,6 @@ | |||||
| import { KintoneRecordField } from "@kintone/rest-api-client"; | import { KintoneRecordField } from "@kintone/rest-api-client"; | ||||
| import { AppRecord } from "."; | import { AppRecord } from "."; | ||||
| import get from "lodash/get"; | import get from "lodash/get"; | ||||
| import set from "lodash/set"; | |||||
| import has from "lodash/has"; | import has from "lodash/has"; | ||||
| const F = { | const F = { | ||||
| @@ -64,7 +63,9 @@ export const 保証金明細行データ作成 = (data: object): 保証金明細 | |||||
| Object.keys(row).forEach((target) => { | Object.keys(row).forEach((target) => { | ||||
| if (has(data, target)) { | if (has(data, target)) { | ||||
| set(row, target + ".value", get(data, target)); | |||||
| if (target === "保証金明細_金額" || target === "保証金明細_名称") { | |||||
| row[target].value = get(data, target) ?? ""; | |||||
| } | |||||
| } | } | ||||
| }); | }); | ||||
| @@ -7,14 +7,15 @@ const F = { | |||||
| 利用開始希望日: "利用開始希望日", | 利用開始希望日: "利用開始希望日", | ||||
| 駐車場名: "駐車場", | 駐車場名: "駐車場", | ||||
| 定期駐車料金: "定期駐車料金", | 定期駐車料金: "定期駐車料金", | ||||
| 振込期日: "振込期日", | |||||
| 日割り分_月: "日割り分_月", | |||||
| 日割り分_金額: "日割り分_金額", | |||||
| 請求対象分_月: "請求対象分_月", | |||||
| 請求対象分_金額: "請求対象分_金額", | |||||
| 初回振り込み合計額: "初回振り込み合計額", | |||||
| // 振込期日: "振込期日", | |||||
| // 日割り分_月: "日割り分_月", | |||||
| // 日割り分_金額: "日割り分_金額", | |||||
| // 請求対象分_月: "請求対象分_月", | |||||
| // 請求対象分_金額: "請求対象分_金額", | |||||
| // 初回振り込み合計額: "初回振り込み合計額", | |||||
| 自動承認契約情報: "自動承認契約情報", | 自動承認契約情報: "自動承認契約情報", | ||||
| 受付メール送信日時: "受付メール送信日時", | |||||
| 受付メール送信日時_バンクチェック: "受付メール送信日時_バンクチェック", | |||||
| 受付メール送信日時_ゆうちょ: "受付メール送信日時_ゆうちょ", | |||||
| 承認メール送信日時: "承認メール送信日時", | 承認メール送信日時: "承認メール送信日時", | ||||
| 初回入金予定_必要分: "初回入金予定_必要分", | 初回入金予定_必要分: "初回入金予定_必要分", | ||||
| 初回入金予定_初月分入金予定: "初回入金予定_初月分入金予定", | 初回入金予定_初月分入金予定: "初回入金予定_初月分入金予定", | ||||
| @@ -67,7 +68,7 @@ export type 定期申込予約 = AppRecord & { | |||||
| 台数: KintoneRecordField.SingleLineText; | 台数: KintoneRecordField.SingleLineText; | ||||
| 防犯登録番号: KintoneRecordField.SingleLineText; | 防犯登録番号: KintoneRecordField.SingleLineText; | ||||
| 請求対象分_月: KintoneRecordField.Number; | 請求対象分_月: KintoneRecordField.Number; | ||||
| [F.初回振り込み合計額]: KintoneRecordField.Number; | |||||
| // [F.初回振り込み合計額]: KintoneRecordField.Number; | |||||
| メールアドレス: KintoneRecordField.SingleLineText; | メールアドレス: KintoneRecordField.SingleLineText; | ||||
| 受付日時: KintoneRecordField.DateTime; | 受付日時: KintoneRecordField.DateTime; | ||||
| 学生手帳: KintoneRecordField.SingleLineText; | 学生手帳: KintoneRecordField.SingleLineText; | ||||
| @@ -84,18 +85,19 @@ export type 定期申込予約 = AppRecord & { | |||||
| 車室番号: KintoneRecordField.SingleLineText; | 車室番号: KintoneRecordField.SingleLineText; | ||||
| [F.ParkingNavi駐車場]: KintoneRecordField.SingleLineText; | [F.ParkingNavi駐車場]: KintoneRecordField.SingleLineText; | ||||
| [F.駐車場名]: KintoneRecordField.SingleLineText; | [F.駐車場名]: KintoneRecordField.SingleLineText; | ||||
| [F.振込期日]: KintoneRecordField.Date; | |||||
| // [F.振込期日]: KintoneRecordField.Date; | |||||
| 日割り分_金額: KintoneRecordField.Number; | 日割り分_金額: KintoneRecordField.Number; | ||||
| 自動承認メモ: KintoneRecordField.MultiLineText; | 自動承認メモ: KintoneRecordField.MultiLineText; | ||||
| 車両番号: KintoneRecordField.SingleLineText; | 車両番号: KintoneRecordField.SingleLineText; | ||||
| [F.請求対象分_金額]: KintoneRecordField.Number; | |||||
| // [F.請求対象分_金額]: KintoneRecordField.Number; | |||||
| [F.ParkingNaviプラン]: KintoneRecordField.SingleLineText; | [F.ParkingNaviプラン]: KintoneRecordField.SingleLineText; | ||||
| [F.日割り分_月]: KintoneRecordField.Number; | |||||
| // [F.日割り分_月]: KintoneRecordField.Number; | |||||
| 支払方法: KintoneRecordField.Dropdown; | 支払方法: KintoneRecordField.Dropdown; | ||||
| [F.自動承認ステータス]: KintoneRecordField.SingleLineText; | [F.自動承認ステータス]: KintoneRecordField.SingleLineText; | ||||
| [F.状態]: KintoneRecordField.Dropdown; | [F.状態]: KintoneRecordField.Dropdown; | ||||
| [F.自動承認契約情報]: KintoneRecordField.Number; | [F.自動承認契約情報]: KintoneRecordField.Number; | ||||
| [F.受付メール送信日時]: KintoneRecordField.DateTime; | |||||
| [F.受付メール送信日時_バンクチェック]: KintoneRecordField.DateTime; | |||||
| [F.受付メール送信日時_ゆうちょ]: KintoneRecordField.DateTime; | |||||
| [F.承認メール送信日時]: KintoneRecordField.DateTime; | [F.承認メール送信日時]: KintoneRecordField.DateTime; | ||||
| [F.初回入金予定_必要分]: KintoneRecordField.CheckBox; | [F.初回入金予定_必要分]: KintoneRecordField.CheckBox; | ||||
| [F.初回入金予定_初月分入金予定]: KintoneRecordField.Number; | [F.初回入金予定_初月分入金予定]: KintoneRecordField.Number; | ||||