京都のkintone用javascript
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

91 行
3.5KB

  1. import { apptemplate } from "@/common/app-template";
  2. import { AppID } from "@/common/appids";
  3. import { dateParse, formatDateStr } from "@/common/datetime";
  4. import { setHeaderButton } from "@/common/header-button";
  5. import 定期駐車場料金計算 from "@/logic/定期駐車場料金計算";
  6. import { getCreateUrl, makeUrlSearchParams } from "@/rest-api/url";
  7. import { get定期駐車場プランマスタ } from "@/rest-api/定期駐車場プランマスタ";
  8. import { get車室情報管理 } from "@/rest-api/車室情報管理";
  9. import {
  10. 入金予定結果フィールド名,
  11. 支払方法Dropdown,
  12. 支払種別Dropdown,
  13. } from "@/types/入金予定結果";
  14. import { 初回入金予定Checkbox, 定期申込予約 } from "@/types/定期申込予約";
  15. import { 車室情報管理フィールド名 } from "@/types/車室情報管理";
  16. import { addDays, addMonths, endOfMonth, setDate } from "date-fns";
  17. const 表示判定 = (record: 定期申込予約): boolean => {
  18. if (!record.自動承認契約情報.value) {
  19. return false;
  20. }
  21. if (record.IC定期駐車場利用方法.value) {
  22. return false;
  23. }
  24. if (
  25. record.初回入金予定_必要分.value.includes(初回入金予定Checkbox.初月分) ===
  26. false
  27. ) {
  28. return false;
  29. }
  30. if (!!record.初回入金予定_初月分入金予定.value) {
  31. return false;
  32. }
  33. return true;
  34. };
  35. export default function 初月分入金予定作成ボタン(record: 定期申込予約) {
  36. if (表示判定(record)) {
  37. setHeaderButton(
  38. "初月分入金予定作成",
  39. apptemplate(async () => {
  40. // 計算
  41. const 契約 = await get車室情報管理(record.自動承認契約情報.value);
  42. const 契約日 = dateParse(契約.契約日.value);
  43. if (契約日 === null) return;
  44. const プラン = await get定期駐車場プランマスタ(
  45. 契約[車室情報管理フィールド名.プラン名].value
  46. );
  47. const 開始日 = (() => {
  48. if (契約日.getDate() === 1) {
  49. return 契約日;
  50. }
  51. return setDate(addMonths(契約日, 1), 1);
  52. })();
  53. const 終了日 = endOfMonth(開始日);
  54. const 計算 = new 定期駐車場料金計算(プラン);
  55. const 請求金額 = 計算.期間の計算(開始日, 終了日);
  56. const param = makeUrlSearchParams({
  57. [入金予定結果フィールド名.車室情報管理レコード番号]:
  58. record.自動承認契約情報.value,
  59. [入金予定結果フィールド名.初回振り込み関連申込レコード番号]:
  60. record.$id.value,
  61. [入金予定結果フィールド名.支払予定金額]: String(請求金額),
  62. [入金予定結果フィールド名.支払方法]: 支払方法Dropdown.振込,
  63. [入金予定結果フィールド名.支払種別]: 支払種別Dropdown.定期料金,
  64. [入金予定結果フィールド名.支払対象_利用_年]: String(
  65. 開始日.getFullYear()
  66. ),
  67. [入金予定結果フィールド名.支払対象_利用_月]: String(
  68. 開始日.getMonth() + 1
  69. ),
  70. [入金予定結果フィールド名.支払対象_利用_月間数]: "1",
  71. [入金予定結果フィールド名.支払予定日]: formatDateStr(
  72. addDays(契約日, -1)
  73. ),
  74. });
  75. const url = getCreateUrl(AppID.入金予定結果, param);
  76. window.open(url, "_blank", "popup");
  77. })
  78. );
  79. }
  80. }