0,1歳日誌データ連携
This commit is contained in:
BIN
document/PVC.one
BIN
document/PVC.one
Binary file not shown.
@@ -136,7 +136,7 @@ function createBtnGroupArea(groupId, btnLabel, btnOnClick, { btnElId = false, ye
|
||||
function checkInputData(map, { btnLabel, yearElId, monthElId, dateElId, classElId }) {
|
||||
const year = yearElId && map[yearElId].value;
|
||||
const month = monthElId && map[monthElId].value;
|
||||
const date = dateElId && (map[dateElId].value === 'end' ? getLastDate(year, month) : map[dateElId].value);
|
||||
const date = dateElId && (map[dateElId].value === 'end' ? getLastDate(year, month).getDate() : map[dateElId].value);
|
||||
const className = classElId && map[classElId].value;
|
||||
|
||||
const errorMsgs = [];
|
||||
@@ -170,7 +170,7 @@ function checkInputData(map, { btnLabel, yearElId, monthElId, dateElId, classElI
|
||||
}
|
||||
|
||||
function getLastDate(year, month) {
|
||||
return new Date(year, month, 0).getDate();
|
||||
return new Date(year, month, 0);
|
||||
}
|
||||
|
||||
function createBtn(id, label, onClick) {
|
||||
@@ -239,9 +239,9 @@ function getFormatDateString(dateObjOrYear, month, date) {
|
||||
}
|
||||
const formatY = year;
|
||||
const formatM = String(month).padStart(2, '0');
|
||||
const formatD = date ? String(date).padStart(2, '0') : '';
|
||||
const formatD = String(date).padStart(2, '0');
|
||||
|
||||
return formatY + '-' + formatM + (formatD && ('-' + formatD));
|
||||
return `${formatY}-${formatM}-${formatD}`;
|
||||
}
|
||||
|
||||
function loading(show, text) {
|
||||
|
||||
@@ -17,24 +17,194 @@ class Link1Handler {
|
||||
showError(false);
|
||||
const api = new KintoneRestAPIClient();
|
||||
|
||||
const dateString = getFormatDateString(year, month);
|
||||
|
||||
// 本アプリからデータを読み取る
|
||||
// const currentAppRecords = await this.getRecords(api, dateString);
|
||||
// if (!currentAppRecords) {
|
||||
// // エラー
|
||||
// loading(false);
|
||||
// return;
|
||||
// }
|
||||
const currentAppRecords = await this.getRecords(api, year, month);
|
||||
if (!currentAppRecords) {
|
||||
// エラー
|
||||
loading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// const record = this.generateRecord(dateString, currentAppRecords);
|
||||
// console.log(record);
|
||||
// console.log(currentAppRecords);
|
||||
const recordsWrapper = await this.generateRecords(api, year, month, currentAppRecords);
|
||||
// console.log(recordsWrapper);
|
||||
|
||||
// const result = await this.insertOrUpdateData(api, record, dateString);
|
||||
// if (result) {
|
||||
// showSuccess(true, "日誌データ連携作成完了");
|
||||
// }
|
||||
// loading(false);
|
||||
const result = await this.insertOrUpdateData(api, recordsWrapper);
|
||||
if (result) {
|
||||
// TODO dialog
|
||||
showSuccess(true, "日誌データ連携作成完了");
|
||||
this.showSuccessDialog(result, year, month);
|
||||
}
|
||||
loading(false);
|
||||
}
|
||||
|
||||
showSuccessDialog(result, year, month) {
|
||||
const dateString = year + '年' + month + '月';
|
||||
const contentEl = document.createElement('div');
|
||||
contentEl.style.fontSize = '16px';
|
||||
if (result.updateResult && result.insertResult) {
|
||||
contentEl.innerHTML = `${dateString}の${result.updateResult.records.length}人の園児の日誌を更新し、${result.insertResult.records.length}人の園児の日誌を新規作成しました。`
|
||||
} else if (result.updateResult) {
|
||||
contentEl.innerHTML = `${dateString}の${result.updateResult.records.length}人の園児の日誌が更新されました。`;
|
||||
} else if (result.insertResult) {
|
||||
contentEl.innerHTML = `${dateString}の${result.insertResult.records.length}人の園児の日誌が生成されました`;
|
||||
} else {
|
||||
contentEl.innerHTML = `${dateString}の園児の日誌に生成するデータはありませんでした。`
|
||||
}
|
||||
showDialog({
|
||||
title: '日誌データ連携作成完了',
|
||||
content: contentEl,
|
||||
ok: 'アプリへ行く',
|
||||
cancel: '閉じる',
|
||||
onOk: () => { window.open(`${location.origin}/k/${env["0,1歳日誌出力用"].appId}/`) },
|
||||
});
|
||||
}
|
||||
|
||||
insertOrUpdateData = async (api, recordsWrapper) => {
|
||||
try {
|
||||
const param = {
|
||||
app: env["0,1歳日誌出力用"].appId,
|
||||
}
|
||||
|
||||
let insertResult;
|
||||
if (recordsWrapper['insert'].length) {
|
||||
param.records = recordsWrapper['insert'];
|
||||
insertResult = await api.record.addAllRecords(param);
|
||||
}
|
||||
|
||||
let updateResult;
|
||||
if (recordsWrapper['update'].length) {
|
||||
param.records = recordsWrapper['update'];
|
||||
// 本アプリの当日データでテーブルを上書きし、対応する園児データがない行を【削除】します
|
||||
updateResult = await api.record.updateAllRecords(param);
|
||||
}
|
||||
|
||||
return {
|
||||
recordsWrapper,
|
||||
insertResult,
|
||||
updateResult
|
||||
};
|
||||
} catch (e) {
|
||||
showError(true, '日誌データ連携作成失敗\n - ' + e);
|
||||
}
|
||||
};
|
||||
|
||||
generateRecords = async (api, year, month, records) => {
|
||||
const generatedRecordIdMap = await this.getGeneratedRecordIdMap(api, year, month);
|
||||
if (!generatedRecordIdMap) {
|
||||
// エラー
|
||||
loading(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const kidsMap = {};
|
||||
records.forEach((record) => {
|
||||
const uniqueKey = record['園児ユニークキー'].value;
|
||||
let map = kidsMap[uniqueKey];
|
||||
if (!map) {
|
||||
map = {
|
||||
existId: generatedRecordIdMap[uniqueKey],
|
||||
list: [],
|
||||
'年': { 'value': Number(year) },
|
||||
'月': { 'value': Number(month) },
|
||||
'クラス': { 'value': record['クラス'].value },
|
||||
'出席番号': { 'value': record['出席番号'].value },
|
||||
'園児名': { 'value': record['園児名'].value },
|
||||
'園児ユニークキー': { 'value': uniqueKey },
|
||||
'帳票出力用_テーブル': { 'value': undefined },
|
||||
};
|
||||
kidsMap[uniqueKey] = map
|
||||
}
|
||||
record['date'] = Number(record['登園日'].value.split('-')[2]);
|
||||
map.list.push(record);
|
||||
});
|
||||
// console.log(generatedRecordIdMap);
|
||||
// console.log(kidsMap);
|
||||
|
||||
const result = {
|
||||
'update': [],
|
||||
'insert': []
|
||||
}
|
||||
|
||||
Object.values(kidsMap).forEach((recordWrapper) => {
|
||||
const subtable = Array.from({ length: 31 }, (_e, i) => ({
|
||||
value: {
|
||||
'日付': { 'value': i + 1 },
|
||||
'出欠': { 'value': '出席停止' },
|
||||
}
|
||||
}));
|
||||
recordWrapper.list.forEach((record) => {
|
||||
subtable[record['date'] - 1] = {
|
||||
value: {
|
||||
'日付': { 'value': record['date'] },
|
||||
'出欠': { 'value': record['出欠'].value },
|
||||
'降園': { 'value': record['帰園時刻'].value },
|
||||
'検温時刻1': { 'value': record['検温時刻1'].value },
|
||||
'体温1': { 'value': record['体温1'].value },
|
||||
'検温時刻2': { 'value': record['検温時刻2'].value },
|
||||
'体温2': { 'value': record['体温2'].value },
|
||||
'検温時刻3': { 'value': record['検温時刻3'].value },
|
||||
'体温3': { 'value': record['体温3'].value },
|
||||
'食事量': { 'value': record['食事量_結合'].value },
|
||||
'排便': { 'value': record['排便'].value },
|
||||
'睡眠開始時間1': { 'value': record['睡眠開始時間1'].value },
|
||||
'睡眠終了時間1': { 'value': record['睡眠終了時間1'].value },
|
||||
'睡眠開始時間2': { 'value': record['睡眠開始時間2'].value },
|
||||
'睡眠終了時間2': { 'value': record['睡眠終了時間2'].value },
|
||||
'保護者から': { 'value': record['保護者から'].value },
|
||||
'園での様子_伝達事項': { 'value': record['園での様子_伝達事項'].value },
|
||||
'評価反省': { 'value': record['評価反省'].value },
|
||||
}
|
||||
}
|
||||
})
|
||||
recordWrapper['帳票出力用_テーブル'].value = subtable;
|
||||
const id = recordWrapper['existId'];
|
||||
delete recordWrapper['list'];
|
||||
delete recordWrapper['existId'];
|
||||
if (id) {
|
||||
result['update'].push({
|
||||
id,
|
||||
record: recordWrapper
|
||||
});
|
||||
} else {
|
||||
result['insert'].push(recordWrapper);
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
getRecords = async (api, year, month) => {
|
||||
const firstDate = getFormatDateString(year, month, 1)
|
||||
const lastDate = getFormatDateString(getLastDate(year, month));
|
||||
try {
|
||||
return await api.record.getAllRecordsWithId({
|
||||
app: env["園児別出欠簿入力"].appId,
|
||||
condition: `学年 in ("0歳児", "1歳児") and 登園日 >= "${firstDate}" and 登園日 <= "${lastDate}"`
|
||||
});
|
||||
} catch (e) {
|
||||
showError(true, '本アプリのデータ読み取りエラー\n - ' + e);
|
||||
loading(false);
|
||||
}
|
||||
}
|
||||
|
||||
getGeneratedRecordIdMap = async (api, year, month) => {
|
||||
try {
|
||||
const result = await api.record.getAllRecordsWithId({
|
||||
app: env["0,1歳日誌出力用"].appId,
|
||||
fields: ["$id", "園児ユニークキー"],
|
||||
condition: `年 = ${year} and 月 = ${month}`
|
||||
});
|
||||
const map = {}
|
||||
result.forEach((record) => {
|
||||
const uniqueKey = record['園児ユニークキー'].value;
|
||||
map[uniqueKey] = record['$id'].value;
|
||||
});
|
||||
return map;
|
||||
} catch (e) {
|
||||
showError(true, '日誌データ読み取りエラー\n - ' + e);
|
||||
loading(false);
|
||||
}
|
||||
}
|
||||
|
||||
static getInstance(headerSpace) {
|
||||
|
||||
@@ -30,25 +30,26 @@ class Link2Handler {
|
||||
}
|
||||
|
||||
const record = this.generateRecord(dateString, currentAppRecords);
|
||||
console.log(record);
|
||||
// console.log(record);
|
||||
|
||||
const result = await this.insertOrUpdateData(api, record, dateString);
|
||||
if (result) {
|
||||
// showSuccess(true, "日誌データ連携作成完了");
|
||||
this.showSuccessDialog(result);
|
||||
this.showSuccessDialog(result, year, month, date);
|
||||
}
|
||||
loading(false);
|
||||
}
|
||||
|
||||
showSuccessDialog(result) {
|
||||
showSuccessDialog(result, year, month, date) {
|
||||
const dateString = year + '年' + month + '月' + date + '日';
|
||||
const contentEl = document.createElement('div');
|
||||
contentEl.style.fontSize = '16px';
|
||||
if (!result.size) {
|
||||
contentEl.innerHTML = `${result.dateString}に園児別テーブルに追加するデータはありませんでした。`;
|
||||
contentEl.innerHTML = `${dateString}の園児別テーブルに追加するデータはありませんでした。`;
|
||||
} else if (result.type === 'update') {
|
||||
contentEl.innerHTML = `${result.dateString}の園児別テーブルに${result.size}件のデータを再作成しました。`;
|
||||
contentEl.innerHTML = `${dateString}の園児別テーブルに${result.size}件のデータを再作成しました。`;
|
||||
} else {
|
||||
contentEl.innerHTML = `${result.dateString}の日誌は生成しましたが、園児別テーブルに${result.size}件のデータを追加しました。`;
|
||||
contentEl.innerHTML = `${dateString}の日誌は生成しましたが、園児別テーブルに${result.size}件のデータを追加しました。`;
|
||||
}
|
||||
showDialog({
|
||||
title: '日誌データ連携作成完了',
|
||||
@@ -68,7 +69,7 @@ class Link2Handler {
|
||||
condition: `学年 not in ("", "0歳児", "1歳児") and 登園日 = "${dateString}"`
|
||||
});
|
||||
} catch (e) {
|
||||
showError(true, '園児台帳アプリのデータ読み取りエラー\n - ' + e);
|
||||
showError(true, '本アプリのデータ読み取りエラー\n - ' + e);
|
||||
loading(false);
|
||||
}
|
||||
}
|
||||
@@ -108,7 +109,6 @@ class Link2Handler {
|
||||
id: generatedRecordId,
|
||||
type: generatedRecordId ? 'update' : 'insert',
|
||||
size: record["園児別テーブル"].value.length,
|
||||
dateString
|
||||
};
|
||||
|
||||
let awaitResult;
|
||||
|
||||
Reference in New Issue
Block a user