From a37b4885adf497209dc527c6d4d629875b9a1332 Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Thu, 28 Aug 2025 11:50:35 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=E5=9C=92=E5=85=90=E5=88=A5=E5=87=BA?= =?UTF-8?q?=E6=AC=A0=E7=B0=BF=E5=85=A5=E5=8A=9B=E3=80=8D=E6=95=99=E8=82=B2?= =?UTF-8?q?=E6=97=A5=E6=95=B0=E8=A8=88=E7=AE=97=E5=BC=8F=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils.js | 12 +++++++++ src/園児別出欠簿入力/ExtractHandler.js | 34 ++++++++++++++++++++------ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/src/utils.js b/src/utils.js index 8e64a09..919f9e1 100644 --- a/src/utils.js +++ b/src/utils.js @@ -222,6 +222,18 @@ function convertToWesternYear(year, era) { return warekiStartYear[era] + year - 1; } +function getYearRange() { + const today = new Date(); + let year = today.getFullYear(); + if (today.getMonth() + 1 < 4) { + year -= 1; + } + return { + 'start': getFormatDateString(year, 4, 1), + 'end': getFormatDateString(year + 1, 3, 31) + } +} + function getFormatDateString(dateObjOrYear, month, date) { let year = dateObjOrYear; if (typeof dateObjOrYear === "object" && !month && !date) { diff --git a/src/園児別出欠簿入力/ExtractHandler.js b/src/園児別出欠簿入力/ExtractHandler.js index a990abc..1184be6 100644 --- a/src/園児別出欠簿入力/ExtractHandler.js +++ b/src/園児別出欠簿入力/ExtractHandler.js @@ -108,9 +108,13 @@ class ExtractHandler { try { const data = await api.record.getAllRecordsWithId({ app: env["保育・教育日数マスタ"].appId, - fields: ['教育日数' + month, '保育日数' + month], + fields: ['教育日数' + month, '保育日数' + month, '休日_' + month + '月'], condition: `年度 = "${year}"` }); + if (!data || !data[0]) { + showError(true, '保育・教育日数マスタのデータが存在しません。'); + return; + } return data && data[0]; } catch (e) { showError(true, '保育・教育日数マスタのデータ読み取りエラー\n - ' + e); @@ -124,16 +128,23 @@ class ExtractHandler { fields: ['担任'], condition: `学年 in ("${term}")` }); - return data && data[0] && data[0]['担任']?.value.map((x)=>x.name).join('、') || ''; + return data && data[0] && data[0]['担任']?.value.map((x) => x.name).join('、') || ''; } catch (e) { showError(true, '担任マスタのデータ読み取りエラー\n - ' + e); } } + toHolidaySet = (str) => { + if (!str) { + return new Set(); + } + return new Set(str.split(',')) + } + writeExcel = ({ records, recordMap, childMaster, dayMaster, termTeacher }, term, { era, year, westernYear, month }) => { const teachDays = Number(dayMaster['教育日数' + month].value); const careDays = Number(dayMaster['保育日数' + month].value); - + const holidaySet = this.toHolidaySet(dayMaster['休日_' + month + '月'].value); return async (api, worksheet) => { const baseCells = findCellsInfo(worksheet, ['13', '16', '19', '25', '(担 任)', '1', '番号']); @@ -216,6 +227,7 @@ class ExtractHandler { '出席停止': 0, '病欠': 0, '自欠': 0, + '休日欠席': 0 } // 日 recordWrapper.list.forEach((record, i) => { @@ -224,10 +236,18 @@ class ExtractHandler { if (res === '出席') { return; } - if (res === '出席停止' && record["出席停止理由"].value) { - reasons.push(record["出席停止理由"].value); + if (res === '出席停止') { + if (record["出席停止理由"].value) { + reasons.push(record["出席停止理由"].value); + } + updateCell(row, { base, right: 2 + i }, '×'); + return } - updateCell(row, { base, right: 2 + i }, res === '出席停止' ? '×' : '/'); + // 欠席 + if (holidaySet.has(record['登園日'].value)) { + sum['休日欠席']++; + } + updateCell(row, { base, right: 2 + i }, '/'); }) // 出 席 @@ -238,7 +258,7 @@ class ExtractHandler { updateCell(row, { base, right: 36 }, sum['自欠']); // 教育日数 // updateCell(row, { base, right: 37 }, sum['出席'] + sum['出席停止'] - sum['病欠'] - sum['自欠']); - updateCell(row, { base, right: 37 }, teachDays - sum['病欠'] - sum['自欠']); + updateCell(row, { base, right: 37 }, teachDays - sum['病欠'] - sum['自欠'] + sum['休日欠席']); // 備考 updateCell(row, { base, right: 38 }, reasons.join("\n"));