import { apptemplate } from "@/common/app-template"; import { AppID } from "@/common/appids"; import { dateParse, formatDateStr } from "@/common/datetime"; import { setHeaderButton } from "@/common/header-button"; import 定期駐車場料金計算 from "@/logic/定期駐車場料金計算"; import { getCreateUrl, makeUrlSearchParams } from "@/rest-api/url"; import { get定期駐車場プランマスタ } from "@/rest-api/定期駐車場プランマスタ"; import { get車室情報管理 } from "@/rest-api/車室情報管理"; import { 入金予定結果フィールド名, 支払方法Dropdown, 支払種別Dropdown, } from "@/types/入金予定結果"; import { 初回入金予定Checkbox, 定期申込予約 } from "@/types/定期申込予約"; import { 車室情報管理フィールド名 } from "@/types/車室情報管理"; import { addDays, addMonths, endOfMonth, setDate } from "date-fns"; const 表示判定 = (record: 定期申込予約): boolean => { if (!record.自動承認契約情報.value) { return false; } if (record.IC定期駐車場利用方法.value) { return false; } if ( record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.初月分) === false ) { return false; } if (!!record.初回入金予定_初月分入金予定.value) { return false; } return true; }; export default function 初月分入金予定作成ボタン(record: 定期申込予約) { if (表示判定(record)) { setHeaderButton( "初月分入金予定作成", apptemplate(async () => { // 計算 const 契約 = await get車室情報管理(record.自動承認契約情報.value); const 契約日 = dateParse(契約.契約日.value); if (契約日 === null) return; const プラン = await get定期駐車場プランマスタ( 契約[車室情報管理フィールド名.プラン名].value ); const 開始日 = (() => { if (契約日.getDate() === 1) { return 契約日; } return setDate(addMonths(契約日, 1), 1); })(); const 終了日 = endOfMonth(開始日); const 計算 = new 定期駐車場料金計算(プラン); const 請求金額 = 計算.期間の計算(開始日, 終了日); const param = makeUrlSearchParams({ [入金予定結果フィールド名.車室情報管理レコード番号]: record.自動承認契約情報.value, [入金予定結果フィールド名.初回振り込み関連申込レコード番号]: record.$id.value, [入金予定結果フィールド名.支払予定金額]: String(請求金額), [入金予定結果フィールド名.支払方法]: 支払方法Dropdown.振込, [入金予定結果フィールド名.支払種別]: 支払種別Dropdown.定期料金, [入金予定結果フィールド名.支払対象_利用_年]: String( 開始日.getFullYear() ), [入金予定結果フィールド名.支払対象_利用_月]: String( 開始日.getMonth() + 1 ), [入金予定結果フィールド名.支払対象_利用_月間数]: "1", [入金予定結果フィールド名.支払予定日]: formatDateStr( addDays(契約日, -1) ), }); const url = getCreateUrl(AppID.入金予定結果, param); window.open(url, "_blank", "popup"); }) ); } }