| @@ -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; | |||
| }; | |||
| 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()), | |||
| }), | |||
| }); | |||
| @@ -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 保証金入金予定作成ボタン 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); | |||
| @@ -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; | |||
| @@ -8,7 +8,8 @@ export const EmailID = { | |||
| 利用者情報変更完了: "利用者情報変更完了", | |||
| 振替頻度変更完了: "振替頻度変更完了", | |||
| プラン変更完了: "プラン変更完了", | |||
| 申込受付: "申込受付", | |||
| 申込受付_バンクチェック: "申込受付_バンクチェック", | |||
| 申込受付_ゆうちょ: "申込受付_ゆうちょ", | |||
| 申込承認: "申込承認", | |||
| 定期選考_一斉通知: "定期選考_一斉通知", | |||
| 定期選考_当選のお知らせ: "定期選考_当選のお知らせ", | |||
| @@ -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) ?? ""; | |||
| } | |||
| } | |||
| }); | |||
| @@ -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; | |||