import { apptemplate, eventHnalder } from "@/common/app-template"; import { initMenuBox, setHeaderButton } from "@/common/header-button"; import { KintoneEvent } from "@/common/kintone-event"; import { ShowConfirmDialog, SuccessDialog, WarningDialog, } from "@/middleware/swal"; import { saveReceipt } from "@/mypage/領収証発行"; import { 領収証 } from "@/types/領収証"; import { setup } from ".."; import { 車室情報2, 車室情報2フィールド名 } from "@/types/車室情報2"; import { 契約状況同期 } from "@/logic/契約状況同期"; import bulkRequest from "@/rest-api/bulk"; import { KintoneRestAPIClient } from "@kintone/rest-api-client"; import { AppID } from "@/common/appids"; import { QueryBuilder } from "@/rest-api/query"; import { 定期申込予約フィールド名, 状態Dropdown } from "@/types/定期申込予約"; import { getCreateUrl } from "@/rest-api/url"; import { 定期予約選考フィールド名 } from "@/types/定期予約選考"; const client = new KintoneRestAPIClient(); setup(() => { const 申込確認 = async (record: 車室情報2) => { const query = new QueryBuilder(); query .whereIn(定期申込予約フィールド名.状態, [ 状態Dropdown.予約, 状態Dropdown.空き待ち, ]) .where(定期申込予約フィールド名.駐車場名, record.定期駐車場.value); const { records } = await client.record.getRecords({ app: AppID.定期申込予約, query: query.build(), }); return records.length !== 0; }; kintone.events.on( [KintoneEvent.詳細.レコード詳細画面を表示した後], eventHnalder(async (event) => { const record = event.record as 車室情報2; await initMenuBox(); // 契約状況同期 setHeaderButton( "契約状況同期", apptemplate(async ({ needReloadAtEnd }) => { const confirm = await ShowConfirmDialog({ text: "契約状況を同期しますか", }); if (!confirm.isConfirmed) return; await 契約状況同期(record.定期駐車場.value, record.車室番号.value); await bulkRequest.save(); await SuccessDialog.fire(); needReloadAtEnd(true); }) ); // 選考開始 setHeaderButton( "空き募集", apptemplate(async () => { // 候補者がいるか確認 const 申込有無 = await 申込確認(record); if (!申込有無) { await WarningDialog.fire({ title: "申込者がいないため募集できません", }); return; } const url = getCreateUrl( AppID.定期予約選考, new URLSearchParams({ [定期予約選考フィールド名.対象車室一覧_車室レコード番号]: record.$id.value, [定期予約選考フィールド名.駐車場名]: record.定期駐車場.value, }) ); window.open(url, "_blank"); }) ); }) ); });