Compare commits
16 Commits
39338c0cc5
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 0a5ea3a14c | |||
| 69eaad036b | |||
| 7eef96d8b5 | |||
| 9adbe69a70 | |||
| 4ac71b4232 | |||
| a1098a1166 | |||
| 089b5f79f8 | |||
| 2ff79c58ee | |||
| 301e202c49 | |||
| 8801e60604 | |||
| e00eae5930 | |||
| 0120ea00ac | |||
| 612d49fe61 | |||
| d2d011640f | |||
| c5cf6c0c22 | |||
| 1d06e25626 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
12
document/開発仕様書(2次開発)/横山台こども園様_開発仕様書_20250911/メモ.txt
Normal file
12
document/開発仕様書(2次開発)/横山台こども園様_開発仕様書_20250911/メモ.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
下記アプリについて項目等の変更があります。
|
||||
スペーステンプレートをお送りしておりますので、お手数ですが環境の差し替えをお願いいたします。
|
||||
|
||||
■個別配慮
|
||||
・入力項目を4月~翌年3月分追加
|
||||
・システム情報にユーザー名出力用項目追加
|
||||
|
||||
■20250911にお送りした仕様書の全アプリ
|
||||
・プロセス管理を変更
|
||||
|
||||
また、「個別支援計画」アプリは前回までにアプリになります。
|
||||
見積もりには含めているアプリですが、私の方で標準の範囲で作成しております。
|
||||
Binary file not shown.
43
src/env.dev.js
Normal file
43
src/env.dev.js
Normal file
@@ -0,0 +1,43 @@
|
||||
"use strict";
|
||||
|
||||
// 園児管理システム(09/11)
|
||||
// https://alicorn.cybozu.com/k/#/space/21
|
||||
const env = {
|
||||
"園児別出欠簿入力": {
|
||||
appId: 250,
|
||||
excelName: "出欠集計表",
|
||||
view: {
|
||||
linkFor0to1: 13352636,
|
||||
linkForOthers: 13352638,
|
||||
}
|
||||
},
|
||||
"0,1歳日誌出力用": {
|
||||
appId: 255,
|
||||
excelName: "ゆり・つき1視診表",
|
||||
},
|
||||
"2歳以上日誌出力用": {
|
||||
appId: 256,
|
||||
excelName: "幼児日誌",
|
||||
},
|
||||
"個別配慮": {
|
||||
appId: 251,
|
||||
excelName: "個別配慮",
|
||||
},
|
||||
"園児台帳": {
|
||||
appId: 247,
|
||||
},
|
||||
"保育・教育日数マスタ": {
|
||||
appId: 253,
|
||||
},
|
||||
"Excelテンプレート": {
|
||||
appId: 254
|
||||
},
|
||||
"担任マスタ": {
|
||||
appId: 259
|
||||
}
|
||||
};
|
||||
|
||||
const warekiStartYear = {
|
||||
"平成": 1989,
|
||||
"令和": 2019,
|
||||
}
|
||||
17
src/env.js
17
src/env.js
@@ -1,9 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
// https://alicorn.cybozu.com/k/#/space/15/thread/22
|
||||
const env = {
|
||||
"園児別出欠簿入力": {
|
||||
appId: 182,
|
||||
appId: 19,
|
||||
excelName: "出欠集計表",
|
||||
view: {
|
||||
linkFor0to1: 13352636,
|
||||
@@ -11,28 +10,28 @@ const env = {
|
||||
}
|
||||
},
|
||||
"0,1歳日誌出力用": {
|
||||
appId: 186,
|
||||
appId: 47,
|
||||
excelName: "ゆり・つき1視診表",
|
||||
},
|
||||
"2歳以上日誌出力用": {
|
||||
appId: 187,
|
||||
appId: 48,
|
||||
excelName: "幼児日誌",
|
||||
},
|
||||
"個別配慮": {
|
||||
appId: 183,
|
||||
appId: 23,
|
||||
excelName: "個別配慮",
|
||||
},
|
||||
"園児台帳": {
|
||||
appId: 179,
|
||||
appId: 16,
|
||||
},
|
||||
"保育・教育日数マスタ": {
|
||||
appId: 184,
|
||||
appId: 41,
|
||||
},
|
||||
"Excelテンプレート": {
|
||||
appId: 185
|
||||
appId: 46
|
||||
},
|
||||
"担任マスタ": {
|
||||
appId: 190
|
||||
appId: 52
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
283
src/pvc.ProcessBatchApprovalHandler.js
Normal file
283
src/pvc.ProcessBatchApprovalHandler.js
Normal file
@@ -0,0 +1,283 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* 一括承認処理を管理するクラス
|
||||
* 特定のビューでレコードの一括承認機能を提供する
|
||||
*/
|
||||
class BatchApprovalHandler {
|
||||
/**
|
||||
* コンストラクタ
|
||||
* @param {number} mineView - マイビューのID
|
||||
* @param {string} classifyField - 分類フィールドのプレースホルダー
|
||||
* @param {Object} btnClassifyMap - 年齢分類マッピングオブジェクト
|
||||
* @param {Object} actionMap - アクション名マッピングオブジェクト
|
||||
* @param {Function} getStatusPrefix - ステータス接頭辞を取得する関数
|
||||
* @param {Object} statusFieldMap
|
||||
* @param {string} classifyFormField
|
||||
*/
|
||||
constructor(mineView, classifyField, btnClassifyMap, actionMap, getStatusPrefix, statusFieldMap, classifyFormField = "学年") {
|
||||
this.mineView = mineView;
|
||||
this.classifyField = classifyField;
|
||||
this.btnClassifyMap = btnClassifyMap;
|
||||
this.actionMap = actionMap;
|
||||
this.getStatusPrefix = getStatusPrefix;
|
||||
this.statusFieldMap = statusFieldMap;
|
||||
this.classifyFormField = classifyFormField;
|
||||
this.stopFlag = false;
|
||||
}
|
||||
|
||||
stopProcess() {
|
||||
this.stopFlag = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 一括承認ボタンを作成する
|
||||
* @method
|
||||
*/
|
||||
createApproveBtn() {
|
||||
const headerSpace = getHeaderSpace('single-label-line');
|
||||
const elements = createBtnGroupArea('batch-approve-area', '一括承認', this.handleApproveData.bind(this), {
|
||||
btnElId: 'batch-btn'
|
||||
});
|
||||
|
||||
if (elements && headerSpace) {
|
||||
headerSpace.appendChild(elements['batch-approve-area']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 一括承認処理を実行する
|
||||
* @method
|
||||
* @param {Event} e - イベントオブジェクト
|
||||
*/
|
||||
async handleApproveData(e) {
|
||||
this.stopFlag = false;
|
||||
const appId = kintone.app.getId();
|
||||
const loginUser = kintone.getLoginUser();
|
||||
|
||||
loading(true, '一括承認処理中...');
|
||||
showError(false);
|
||||
|
||||
const api = new KintoneRestAPIClient();
|
||||
|
||||
// レコードを取得
|
||||
const records = await this.getRecords(api, appId, loginUser.code);
|
||||
if (!records || records.length === 0) {
|
||||
loading(false);
|
||||
return e;
|
||||
}
|
||||
|
||||
// ステータスを更新
|
||||
const result = await this.updateRecordsStatus(api, appId, records);
|
||||
|
||||
if (result && result.success > 0) {
|
||||
// 承認者情報を更新
|
||||
await this.updateRecords(api, appId, records, result.successIds, loginUser);
|
||||
await this.showSuccessDialog(result);
|
||||
}
|
||||
loading(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 成功ダイアログを表示する
|
||||
* @method
|
||||
* @param {Object} result - 処理結果
|
||||
*/
|
||||
async showSuccessDialog(result) {
|
||||
const contentEl = document.createElement('div');
|
||||
contentEl.style.fontSize = '16px';
|
||||
|
||||
if (result.success === result.total) {
|
||||
contentEl.innerHTML = `✅ 全${result.total}件のレコードを承認しました`;
|
||||
} else {
|
||||
const successText = `✅ ${result.success}件のレコードを承認済み`;
|
||||
const failedText = `⚠️ ${result.total - result.success}件の承認に失敗`;
|
||||
contentEl.innerHTML = `${successText}<br>${failedText}<br><br>合計: ${result.total}件`;
|
||||
}
|
||||
|
||||
showDialog({
|
||||
title: '一括承認完了',
|
||||
content: contentEl,
|
||||
ok: '更新して確認',
|
||||
cancel: false,
|
||||
onClose: () => { location.reload(); }
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* アクションプロセスマップを読み込む
|
||||
* @method
|
||||
* @param {Object} api - Kintone REST API クライアント
|
||||
* @param {number} appId - アプリID
|
||||
*/
|
||||
async loadActionProcessMap(api, appId) {
|
||||
try {
|
||||
const result = await api.app.getProcessManagement({
|
||||
app: appId,
|
||||
preview: false
|
||||
});
|
||||
|
||||
const actionProcessMap = {};
|
||||
result.actions.forEach(action => {
|
||||
actionProcessMap[action.from + ":" + action.name] = action;
|
||||
});
|
||||
|
||||
return actionProcessMap;
|
||||
} catch (error) {
|
||||
showError(true, 'プロセス管理情報の読み取りに失敗しました\n - ' + error.message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* レコードを取得する
|
||||
* @method
|
||||
* @param {Object} api - Kintone REST API クライアント
|
||||
* @param {number} appId - アプリID
|
||||
* @param {string} loginUserCd - ログインユーザーコード
|
||||
*/
|
||||
async getRecords(api, appId, loginUserCd) {
|
||||
try {
|
||||
return await api.record.getAllRecordsWithId({
|
||||
app: appId,
|
||||
condition: `作業者 in ("${loginUserCd}")`
|
||||
});
|
||||
} catch (error) {
|
||||
showError(true, 'レコードの読み取りに失敗しました\n - ' + error.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* レコードを更新する
|
||||
* @method
|
||||
* @param {Object} api - Kintone REST API クライアント
|
||||
* @param {number} appId - アプリID
|
||||
* @param {Array} oldRecords - 更新前レコード
|
||||
* @param {Set} successIds - 成功したレコードID
|
||||
* @param {Object} loginUser - ログインユーザー情報
|
||||
*/
|
||||
async updateRecords(api, appId, oldRecords, successIds, loginUser) {
|
||||
const actionProcessMap = await this.loadActionProcessMap(api, appId);
|
||||
if (!actionProcessMap) {
|
||||
return;
|
||||
}
|
||||
const updateFieldRecords = [];
|
||||
|
||||
for (const record of oldRecords) {
|
||||
const updateKey = this.getRecordAutoUpdateField(record, actionProcessMap, successIds);
|
||||
if (updateKey) {
|
||||
updateFieldRecords.push({
|
||||
'id': record.$id.value,
|
||||
'record': {
|
||||
[updateKey]: {
|
||||
'value': loginUser.name
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (updateFieldRecords.length > 0) {
|
||||
try {
|
||||
await api.record.updateAllRecords({
|
||||
app: appId,
|
||||
records: updateFieldRecords
|
||||
});
|
||||
} catch (error) {
|
||||
showError(true, 'レコード更新に失敗しました\n - ' + error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 自動更新フィールド名を取得する
|
||||
* @method
|
||||
* @param {Object} record - レコードオブジェクト
|
||||
* @param {Object} actionProcessMap - アクションプロセスマップ
|
||||
* @param {Set} successIds - 成功したレコードID
|
||||
*/
|
||||
getRecordAutoUpdateField(record, actionProcessMap, successIds) {
|
||||
const id = record.$id.value;
|
||||
if (!successIds.has(id)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const oldStatus = record.ステータス.value;
|
||||
const actionName = record.action;
|
||||
|
||||
const action = actionProcessMap[oldStatus + ":" + actionName];
|
||||
return action ? this.statusFieldMap[action.to] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* レコードステータスを更新する
|
||||
* @method
|
||||
* @param {Object} api - Kintone REST API クライアント
|
||||
* @param {number} appId - アプリID
|
||||
* @param {Array} records - 更新対象レコード
|
||||
*/
|
||||
async updateRecordsStatus(api, appId, records) {
|
||||
const updateRecords = []
|
||||
for (const record of records) {
|
||||
const actionToPerform = this.getActionName(record);
|
||||
if (this.stopFlag) {
|
||||
return
|
||||
}
|
||||
if (!!actionToPerform) {
|
||||
record.action = actionToPerform;
|
||||
updateRecords.push({
|
||||
id: record.$id.value,
|
||||
action: actionToPerform,
|
||||
revision: record.$revision.value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const result = {
|
||||
success: 0,
|
||||
total: records.length,
|
||||
successIds: new Set(),
|
||||
};
|
||||
|
||||
const batchSize = 100; // Kintone APIの制限
|
||||
for (let i = 0; i < updateRecords.length; i += batchSize) {
|
||||
const batch = updateRecords.slice(i, i + batchSize);
|
||||
|
||||
try {
|
||||
const response = await api.record.updateRecordsStatus({
|
||||
app: appId,
|
||||
records: batch
|
||||
});
|
||||
|
||||
result.success += response.records.length;
|
||||
response.records.forEach(record => {
|
||||
result.successIds.add(record.id);
|
||||
});
|
||||
} catch (error) {
|
||||
showError(true, `レコードステータス更新エラー\n - ${error.message}`);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* アクション名を取得する
|
||||
* @method
|
||||
* @param {string} record - レコードオブジェクト
|
||||
*/
|
||||
getActionName(record) {
|
||||
const yearStr = record[this.classifyFormField]?.value || '';
|
||||
const status = record.ステータス.value;
|
||||
const actionTemplate = this.actionMap[this.getStatusPrefix(status)] || '';
|
||||
const btnClassify = this.btnClassifyMap[yearStr] || '';
|
||||
return actionTemplate.replaceAll(this.classifyField, btnClassify);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// グローバルにクラスを公開
|
||||
window.BatchApprovalHandler = BatchApprovalHandler;
|
||||
|
||||
})();
|
||||
@@ -501,20 +501,3 @@ function groupingBySex(list) {
|
||||
return [male, female];
|
||||
}, [[], []]);
|
||||
}
|
||||
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中': '担任',
|
||||
'主幹確認中': '指導',
|
||||
'園長確認中': '主幹',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
function addApproveFlowAction() {
|
||||
return kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中(0~2歳)': '担任',
|
||||
'指導教諭確認中(3~5歳)': '担任',
|
||||
'園長確認中': '指導',
|
||||
'完了': '園長'
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
const statusFieldMap = {
|
||||
'主幹確認中(4週目)': '指導',
|
||||
'園長確認中(4週目)': '主幹',
|
||||
'完了(4週目)': '園長',
|
||||
'担任作成中(5週目)': '園長',
|
||||
'主幹確認中(5週目)': '指導',
|
||||
'園長確認中(5週目)': '主幹',
|
||||
'完了(5週目)': '園長',
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中': '担任',
|
||||
'主幹確認中': '指導',
|
||||
'園長確認中': '主幹',
|
||||
'完了': '園長'
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
const statusFieldMap = {
|
||||
'主幹確認中(1学期)': '指導1',
|
||||
'園長確認中(1学期)': '主幹1',
|
||||
'完了(1学期)': '園長1',
|
||||
'担任作成中(2学期)': '園長1',
|
||||
'主幹確認中(2学期)': '指導2',
|
||||
'園長確認中(2学期)': '主幹2',
|
||||
'完了(2学期)': '園長2',
|
||||
'担任作成中(3学期)': '園長2',
|
||||
'主幹確認中(3学期)': '指導3',
|
||||
'園長確認中(3学期)': '主幹3',
|
||||
'完了(3学期)': '園長3',
|
||||
}
|
||||
@@ -2,8 +2,6 @@
|
||||
"use strict";
|
||||
const APP_ENV = env["園児別出欠簿入力"];
|
||||
|
||||
addApproveFlowAction();
|
||||
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
const headerSpace = getHeaderSpace('single-label-line');
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中': '担任',
|
||||
'主幹確認中': '指導',
|
||||
'園長確認中': '主幹',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
23
src/10.個別支援計画/pvc.main.js
Normal file
23
src/10.個別支援計画/pvc.main.js
Normal file
@@ -0,0 +1,23 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
kintone.events.on(["app.record.create.show","app.record.edit.show"], function(event) {
|
||||
var record = event.record;
|
||||
record.担当_文字列.value = record.担当.value.map(function(user) {return user.name}).join(",");
|
||||
record.コーディネーター_文字列.value = record.コーディネーター.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
kintone.events.on(["app.record.create.change.担当","app.record.edit.change.担当", "app.record.index.edit.change.担当"], function(event) {
|
||||
var record = event.record;
|
||||
record.担当_文字列.value = record.担当.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
kintone.events.on(["app.record.create.change.コーディネーター","app.record.edit.change.コーディネーター", "app.record.index.edit.change.コーディネーター"], function(event) {
|
||||
var record = event.record;
|
||||
record.コーディネーター_文字列.value = record.コーディネーター.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
23
src/10.個別支援計画/pvc.processAutoUpdate.js
Normal file
23
src/10.個別支援計画/pvc.processAutoUpdate.js
Normal file
@@ -0,0 +1,23 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
"園長確認中(1学期)": "指導1",
|
||||
"担任作成中(2学期)": "園長1",
|
||||
"園長確認中(2学期)": "指導2",
|
||||
"担任作成中(3学期)": "園長2",
|
||||
"園長確認中(3学期)": "指導3",
|
||||
"完了": "園長3"
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
54
src/10.個別支援計画/pvc.processBatchApproval.js
Normal file
54
src/10.個別支援計画/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,54 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 13353711;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"0歳児": "(0~2歳)",
|
||||
"1歳児": "(0~2歳)",
|
||||
"2歳児": "(0~2歳)",
|
||||
"3歳児": "(3~5歳)",
|
||||
"4歳児": "(3~5歳)",
|
||||
"5歳児": "(3~5歳)",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼${classifyField}`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"園長確認中": `承認する${classifyField}`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap
|
||||
);
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -2,8 +2,6 @@
|
||||
"use strict";
|
||||
const APP_ENV = env["0,1歳日誌出力用"];
|
||||
|
||||
addApproveFlowAction();
|
||||
|
||||
kintone.events.on("app.record.detail.show", (event) => {
|
||||
const headerSpace = getHeaderSpace('', true);
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中(0~2歳)': '担任',
|
||||
'園長確認中': '指導',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
@@ -2,8 +2,6 @@
|
||||
"use strict";
|
||||
const APP_ENV = env["2歳以上日誌出力用"];
|
||||
|
||||
addApproveFlowAction();
|
||||
|
||||
kintone.events.on("app.record.detail.show", (event) => {
|
||||
const headerSpace = getHeaderSpace('', true);
|
||||
|
||||
21
src/12.2歳以上日誌出力用/pvc.processAutoUpdate.js
Normal file
21
src/12.2歳以上日誌出力用/pvc.processAutoUpdate.js
Normal file
@@ -0,0 +1,21 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中(0~2歳)': '担任',
|
||||
'指導教諭確認中(3~5歳)': '担任',
|
||||
'園長確認中': '指導',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -5,11 +5,13 @@
|
||||
"app.record.create.show",
|
||||
"app.record.edit.show",
|
||||
"app.record.create.change.担当",
|
||||
"app.record.edit.change.担当"
|
||||
"app.record.edit.change.担当",
|
||||
"app.record.index.edit.change.担当"
|
||||
];
|
||||
|
||||
kintone.events.on(events, function(event) {
|
||||
var record = event.record;
|
||||
//kintone.app.record.setFieldShown("担任", false);
|
||||
record.担任.value = record.担当.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
@@ -1,6 +1,13 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'園長確認中': '指導',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
50
src/2.保育計画 月案(0歳児用)/pvc.processBatchApproval.js
Normal file
50
src/2.保育計画 月案(0歳児用)/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,50 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 8352036;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"0歳児": "",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"主幹確認中": `承認する`,
|
||||
"園長確認中": `承認する`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap
|
||||
);
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
1
src/3.保育計画 月案/KintoneRestAPIClient.min.js
vendored
Normal file
1
src/3.保育計画 月案/KintoneRestAPIClient.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2433
src/3.保育計画 月案/kuc.min.js
vendored
Normal file
2433
src/3.保育計画 月案/kuc.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
19
src/3.保育計画 月案/pvc.main.js
Normal file
19
src/3.保育計画 月案/pvc.main.js
Normal file
@@ -0,0 +1,19 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
var events = [
|
||||
"app.record.create.show",
|
||||
"app.record.edit.show",
|
||||
"app.record.create.change.担当",
|
||||
"app.record.edit.change.担当",
|
||||
"app.record.index.edit.change.担当"
|
||||
];
|
||||
|
||||
kintone.events.on(events, function(event) {
|
||||
var record = event.record;
|
||||
//kintone.app.record.setFieldShown("担任", false);
|
||||
record.担任.value = record.担当.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -1,6 +1,13 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'園長確認中': '指導',
|
||||
'完了': '園長'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
55
src/3.保育計画 月案/pvc.processBatchApproval.js
Normal file
55
src/3.保育計画 月案/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,55 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 8352036;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"1歳児": "(0~2歳)",
|
||||
"2歳児": "(0~2歳)",
|
||||
"3歳児": "(3~5歳)",
|
||||
"4歳児": "(3~5歳)",
|
||||
"5歳児": "(3~5歳)",
|
||||
"5歳児": "(3~5歳)",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼${classifyField}`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"主幹確認中": `承認する`,
|
||||
"園長確認中": `承認する${classifyField}`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap
|
||||
);
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
1
src/4.保育計画 週案/KintoneRestAPIClient.min.js
vendored
Normal file
1
src/4.保育計画 週案/KintoneRestAPIClient.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2433
src/4.保育計画 週案/kuc.min.js
vendored
Normal file
2433
src/4.保育計画 週案/kuc.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -5,7 +5,8 @@
|
||||
"app.record.create.show",
|
||||
"app.record.edit.show",
|
||||
"app.record.create.change.担任",
|
||||
"app.record.edit.change.担任"
|
||||
"app.record.edit.change.担任",
|
||||
"app.record.index.edit.change.担任"
|
||||
];
|
||||
|
||||
kintone.events.on(events, function(event) {
|
||||
22
src/4.保育計画 週案/pvc.processAutoUpdate.js
Normal file
22
src/4.保育計画 週案/pvc.processAutoUpdate.js
Normal file
@@ -0,0 +1,22 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'園長確認中(4週目)': '指導',
|
||||
'完了(4週目)': '園長',
|
||||
'担任作成中(5週目)': '園長',
|
||||
'園長確認中(5週目)': '指導',
|
||||
'完了(5週目)': '園長',
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
154
src/4.保育計画 週案/pvc.processBatchApproval.js
Normal file
154
src/4.保育計画 週案/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,154 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 8352036;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"0歳児": "0~2歳",
|
||||
"1歳児": "0~2歳",
|
||||
"2歳児": "0~2歳",
|
||||
"3歳児": "3~5歳",
|
||||
"4歳児": "3~5歳",
|
||||
"5歳児": "3~5歳",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼(${classifyField})`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"園長確認中": `承認する(${classifyField})`
|
||||
}
|
||||
|
||||
// ダイアログ要素と次のステータスを格納する変数
|
||||
let askDialogEl;
|
||||
let nextStatus;
|
||||
// 次のステータスのテンプレートオブジェクト
|
||||
const nextStatusTemplate = {
|
||||
"next": `承認する(${classifyField}、5週目作成依頼)`,
|
||||
"end": `承認する(${classifyField}、完了)`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap,
|
||||
"担当学年"
|
||||
);
|
||||
|
||||
// 元のgetActionNameメソッドを保存
|
||||
const originalGetActionName = batchApproval.getActionName;
|
||||
|
||||
// getActionNameメソッドをオーバーライド
|
||||
batchApproval.getActionName = function (record) {
|
||||
const status = record.ステータス.value;
|
||||
// 「園長確認中(4週目)」以外のステータスは元の処理を実行
|
||||
if (status !== '園長確認中(4週目)') {
|
||||
return originalGetActionName.call(this, record);
|
||||
}
|
||||
// 週目に応じて異なるステータスに遷移する場合、ユーザーに選択させる
|
||||
if (!nextStatus) {
|
||||
askNextStatus(batchApproval)
|
||||
batchApproval.stopProcess();
|
||||
return
|
||||
}
|
||||
return getSpecialActionName(record);
|
||||
};
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
/**
|
||||
* 特殊なアクション名を取得する
|
||||
* @param {Object} record - レコードオブジェクト
|
||||
* @returns {string} アクション名
|
||||
*/
|
||||
function getSpecialActionName(record) {
|
||||
const template = nextStatusTemplate[nextStatus];
|
||||
const yearStr = record.担当学年.value || '';
|
||||
const btnClassify = btnClassifyMap[yearStr] || '';
|
||||
return template.replaceAll(classifyField, btnClassify);
|
||||
}
|
||||
|
||||
/**
|
||||
* 次のステータスをユーザーに問い合わせる
|
||||
* @param {Object} batchApproval - BatchApprovalHandlerインスタンス
|
||||
*/
|
||||
function askNextStatus(batchApproval) {
|
||||
askDialogEl = new Kuc.Dialog({
|
||||
title: '一括承認を一時停止',
|
||||
content: makeDialog(batchApproval),
|
||||
footerVisible: false
|
||||
});
|
||||
askDialogEl.open();
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* ダイアログ内容を作成する
|
||||
* @param {Object} batchApproval - BatchApprovalHandlerインスタンス
|
||||
* @returns {HTMLElement} ダイアログのコンテンツ要素
|
||||
*/
|
||||
function makeDialog(batchApproval) {
|
||||
const contentEl = document.createElement('div');
|
||||
contentEl.innerHTML = `
|
||||
<p>
|
||||
「園長確認中(4週目)」の記録について、次のステータスを選択してください:
|
||||
</p>
|
||||
`;
|
||||
|
||||
const divEl = document.createElement('div');
|
||||
divEl.style.textAlign = 'center';
|
||||
|
||||
// 5週目作成依頼ボタン
|
||||
const nextButton = new Kuc.Button({
|
||||
text: '承認する(5週目作成依頼)',
|
||||
type: 'submit',
|
||||
});
|
||||
nextButton.style.paddingRight = '16px';
|
||||
nextButton.addEventListener('click', (event) => {
|
||||
askDialogEl.close();
|
||||
nextStatus = "next";
|
||||
batchApproval.handleApproveData()
|
||||
});
|
||||
divEl.appendChild(nextButton);
|
||||
|
||||
|
||||
// 完了ボタン
|
||||
const endButton = new Kuc.Button({
|
||||
text: '承認する(完了)',
|
||||
type: 'submit',
|
||||
});
|
||||
endButton.addEventListener('click', (event) => {
|
||||
askDialogEl.close();
|
||||
nextStatus = "end";
|
||||
batchApproval.handleApproveData()
|
||||
});
|
||||
divEl.appendChild(endButton);
|
||||
|
||||
contentEl.appendChild(divEl);
|
||||
return contentEl;
|
||||
}
|
||||
})();
|
||||
1
src/6.個別配慮/KintoneRestAPIClient.min.js
vendored
Normal file
1
src/6.個別配慮/KintoneRestAPIClient.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2433
src/6.個別配慮/kuc.min.js
vendored
Normal file
2433
src/6.個別配慮/kuc.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1,9 +1,9 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
const APP_ENV = env["個別配慮"];
|
||||
// 20250911に追加された、月次サフィックスを持つフィールドのリスト
|
||||
const monthlyField = ['子どもの姿', '保育者援助_配慮_環境構成', '反省_評価', '主幹', '園長', '担任', '指導']
|
||||
|
||||
addApproveFlowAction();
|
||||
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
const headerSpace = getHeaderSpace('single-label-line');
|
||||
|
||||
@@ -25,27 +25,58 @@
|
||||
showError(false);
|
||||
const api = new KintoneRestAPIClient();
|
||||
|
||||
const monthNumber = Number(month);
|
||||
const yearNumber = Number(year);
|
||||
// 本アプリからデータを読み取る
|
||||
const currentAppRecords = await getRecords(api, year, month);
|
||||
const currentAppRecords = await getYearlyRecords(api, yearNumber, monthNumber);
|
||||
if (!currentAppRecords) {
|
||||
// エラー
|
||||
loading(false);
|
||||
return e;
|
||||
}
|
||||
|
||||
const eachChildUniqueRecord = {};
|
||||
// 各児童の最新の記録を取得する(日付フィールドに基づく)
|
||||
for (const record of currentAppRecords) {
|
||||
const key = record['園児ユニークキー'].value;
|
||||
const existData = eachChildUniqueRecord[key];
|
||||
if (!existData || existData['日付'].value < record['日付'].value) {
|
||||
eachChildUniqueRecord[key] = record;
|
||||
}
|
||||
}
|
||||
const records = Object.values(eachChildUniqueRecord);
|
||||
|
||||
// 指定された月のデータを、月次サフィックスのないフィールドにマッピングする(例:「子どもの姿_5月」=>「子どもの姿」)
|
||||
// 既存のコード(元々は月次サフィックスのないフィールドを使用)を極力変更しないようにするため
|
||||
// 4月のデータはデフォルトで月次サフィックスのないフィールドに格納されているため、4月の処理はスキップする
|
||||
if (monthNumber !== 4) {
|
||||
for (const field of monthlyField) {
|
||||
for (const record of records) {
|
||||
record[field].value = record[`${field}_${monthNumber}月`].value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const excelName = APP_ENV.excelName;
|
||||
await createExcelAndDownload({
|
||||
api,
|
||||
excelName,
|
||||
exportName: getExcelName(excelName, year + month),
|
||||
bizLogic: writeExcel(currentAppRecords, year, month),
|
||||
bizLogic: writeExcel(records, year, month),
|
||||
});
|
||||
loading(false);
|
||||
}
|
||||
|
||||
async function getRecords(api, year, month) {
|
||||
const firstDate = getFormatDateString(year, month, 1)
|
||||
const lastDate = getFormatDateString(getLastDate(year, month));
|
||||
async function getYearlyRecords(api, year, month) {
|
||||
let fromYear = year;
|
||||
let toYear = year;
|
||||
if (month < 4) {
|
||||
fromYear--;
|
||||
} else {
|
||||
toYear++;
|
||||
}
|
||||
const firstDate = getFormatDateString(fromYear, 4, 1)
|
||||
const lastDate = getFormatDateString(getLastDate(toYear, 3));
|
||||
try {
|
||||
return await api.record.getAllRecordsWithId({
|
||||
app: env["個別配慮"].appId,
|
||||
@@ -125,7 +156,6 @@
|
||||
const sortedRecords = records.sort((a, b) => Number(a['出席番号'].value) - Number(b['出席番号'].value));
|
||||
|
||||
// 2. sort by 学年
|
||||
debugger;
|
||||
const termOrder = {};
|
||||
termItems.forEach((item, index) => {
|
||||
termOrder[item.value] = index;
|
||||
76
src/6.個別配慮/pvc.processAutoUpdate.js
Normal file
76
src/6.個別配慮/pvc.processAutoUpdate.js
Normal file
@@ -0,0 +1,76 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'指導教諭確認中(0~2歳、4月)': '担任',
|
||||
'指導教諭確認中(3~5歳、4月)': '担任',
|
||||
'園長確認中(4月)': '指導',
|
||||
'担任作成中(5月)': '園長',
|
||||
|
||||
'指導教諭確認中(0~2歳、5月)': '担任_5月',
|
||||
'指導教諭確認中(3~5歳、5月)': '担任_5月',
|
||||
'園長確認中(5月)': '指導_5月',
|
||||
'担任作成中(6月)': '園長_5月',
|
||||
|
||||
'指導教諭確認中(0~2歳、6月)': '担任_6月',
|
||||
'指導教諭確認中(3~5歳、6月)': '担任_6月',
|
||||
'園長確認中(6月)': '指導_6月',
|
||||
'担任作成中(7月)': '園長_6月',
|
||||
|
||||
'指導教諭確認中(0~2歳、7月)': '担任_7月',
|
||||
'指導教諭確認中(3~5歳、7月)': '担任_7月',
|
||||
'園長確認中(7月)': '指導_7月',
|
||||
'担任作成中(8月)': '園長_7月',
|
||||
|
||||
'指導教諭確認中(0~2歳、8月)': '担任_8月',
|
||||
'指導教諭確認中(3~5歳、8月)': '担任_8月',
|
||||
'園長確認中(8月)': '指導_8月',
|
||||
'担任作成中(9月)': '園長_8月',
|
||||
|
||||
'指導教諭確認中(0~2歳、9月)': '担任_9月',
|
||||
'指導教諭確認中(3~5歳、9月)': '担任_9月',
|
||||
'園長確認中(9月)': '指導_9月',
|
||||
'担任作成中(10月)': '園長_9月',
|
||||
|
||||
'指導教諭確認中(0~2歳、10月)': '担任_10月',
|
||||
'指導教諭確認中(3~5歳、10月)': '担任_10月',
|
||||
'園長確認中(10月)': '指導_10月',
|
||||
'担任作成中(11月)': '園長_10月',
|
||||
|
||||
'指導教諭確認中(0~2歳、11月)': '担任_11月',
|
||||
'指導教諭確認中(3~5歳、11月)': '担任_11月',
|
||||
'園長確認中(11月)': '指導_11月',
|
||||
'担任作成中(12月)': '園長_11月',
|
||||
|
||||
'指導教諭確認中(0~2歳、12月)': '担任_12月',
|
||||
'指導教諭確認中(3~5歳、12月)': '担任_12月',
|
||||
'園長確認中(12月)': '指導_12月',
|
||||
'担任作成中(1月)': '園長_12月',
|
||||
|
||||
'指導教諭確認中(0~2歳、1月)': '担任_1月',
|
||||
'指導教諭確認中(3~5歳、1月)': '担任_1月',
|
||||
'園長確認中(1月)': '指導_1月',
|
||||
'担任作成中(2月)': '園長_1月',
|
||||
|
||||
'指導教諭確認中(0~2歳、2月)': '担任_2月',
|
||||
'指導教諭確認中(3~5歳、2月)': '担任_2月',
|
||||
'園長確認中(2月)': '指導_2月',
|
||||
'担任作成中(3月)': '園長_2月',
|
||||
|
||||
'指導教諭確認中(0~2歳、3月)': '担任_3月',
|
||||
'指導教諭確認中(3~5歳、3月)': '担任_3月',
|
||||
'園長確認中(3月)': '指導_3月',
|
||||
'完了': '園長_3月'
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
54
src/6.個別配慮/pvc.processBatchApproval.js
Normal file
54
src/6.個別配慮/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,54 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 13352233;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"0歳児": "(0~2歳)",
|
||||
"1歳児": "(0~2歳)",
|
||||
"2歳児": "(0~2歳)",
|
||||
"3歳児": "(3~5歳)",
|
||||
"4歳児": "(3~5歳)",
|
||||
"5歳児": "(3~5歳)",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼${classifyField}`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"園長確認中": `承認する${classifyField}`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap
|
||||
);
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
1
src/7.園児台帳/KintoneRestAPIClient.min.js
vendored
Normal file
1
src/7.園児台帳/KintoneRestAPIClient.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2433
src/7.園児台帳/kuc.min.js
vendored
Normal file
2433
src/7.園児台帳/kuc.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/8.学期反省・評価/KintoneRestAPIClient.min.js
vendored
Normal file
1
src/8.学期反省・評価/KintoneRestAPIClient.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2433
src/8.学期反省・評価/kuc.min.js
vendored
Normal file
2433
src/8.学期反省・評価/kuc.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -9,19 +9,19 @@
|
||||
return event;
|
||||
});
|
||||
|
||||
kintone.events.on(["app.record.create.change.担当1","app.record.edit.change.担当1"], function(event) {
|
||||
kintone.events.on(["app.record.create.change.担当1","app.record.edit.change.担当1", "app.record.index.edit.change.担当1"], function(event) {
|
||||
var record = event.record;
|
||||
record.担任1.value = record.担当1.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
kintone.events.on(["app.record.create.change.担当2","app.record.edit.change.担当2"], function(event) {
|
||||
kintone.events.on(["app.record.create.change.担当2","app.record.edit.change.担当2", "app.record.index.edit.change.担当2"], function(event) {
|
||||
var record = event.record;
|
||||
record.担任2.value = record.担当2.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
});
|
||||
|
||||
kintone.events.on(["app.record.create.change.担当3","app.record.edit.change.担当3"], function(event) {
|
||||
kintone.events.on(["app.record.create.change.担当3","app.record.edit.change.担当3", "app.record.index.edit.change.担当3"], function(event) {
|
||||
var record = event.record;
|
||||
record.担任3.value = record.担当3.value.map(function(user) {return user.name}).join(",");
|
||||
return event;
|
||||
23
src/8.学期反省・評価/pvc.processAutoUpdate.js
Normal file
23
src/8.学期反省・評価/pvc.processAutoUpdate.js
Normal file
@@ -0,0 +1,23 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
const statusFieldMap = {
|
||||
'園長確認中(1学期)': '指導1',
|
||||
'担任作成中(2学期)': '園長1',
|
||||
'園長確認中(2学期)': '指導2',
|
||||
'担任作成中(3学期)': '園長2',
|
||||
'園長確認中(3学期)': '指導3',
|
||||
'完了(3学期)': '園長3',
|
||||
}
|
||||
|
||||
window._StatusFieldMap = statusFieldMap
|
||||
|
||||
kintone.events.on("app.record.detail.process.proceed", (event) => {
|
||||
const field = statusFieldMap[event.nextStatus.value];
|
||||
if (field) {
|
||||
event.record[field].value = kintone.getLoginUser().name;
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
54
src/8.学期反省・評価/pvc.processBatchApproval.js
Normal file
54
src/8.学期反省・評価/pvc.processBatchApproval.js
Normal file
@@ -0,0 +1,54 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
// マイビューのID
|
||||
const mineView = 13352759;
|
||||
// 分類フィールドのプレースホルダー
|
||||
const classifyField = "${classify}";
|
||||
|
||||
// ボタン分類マッピング
|
||||
const btnClassifyMap = {
|
||||
"0歳児": "(0~2歳)",
|
||||
"1歳児": "(0~2歳)",
|
||||
"2歳児": "(0~2歳)",
|
||||
"3歳児": "(3~5歳)",
|
||||
"4歳児": "(3~5歳)",
|
||||
"5歳児": "(3~5歳)",
|
||||
}
|
||||
|
||||
// アクションマッピング
|
||||
const actionMap = {
|
||||
"担任作成中": `指導教諭確認依頼${classifyField}`,
|
||||
"指導教諭確認中": `承認する`,
|
||||
"園長確認中": `承認する${classifyField}`
|
||||
}
|
||||
|
||||
/**
|
||||
* ステータスから接頭辞を取得する
|
||||
* @param {string} status - ステータス文字列
|
||||
*/
|
||||
const getStatusPrefix = (status) => {
|
||||
return status.split("(")[0];
|
||||
};
|
||||
|
||||
// kintoneイベントの登録
|
||||
kintone.events.on("app.record.index.show", (event) => {
|
||||
// 特定のビューの場合のみ処理を実行
|
||||
if (event.viewId === mineView) {
|
||||
// BatchApprovalHandlerクラスのインスタンスを作成
|
||||
const batchApproval = new BatchApprovalHandler(
|
||||
mineView,
|
||||
classifyField,
|
||||
btnClassifyMap,
|
||||
actionMap,
|
||||
getStatusPrefix,
|
||||
_StatusFieldMap
|
||||
);
|
||||
|
||||
// 一括承認ボタンを作成
|
||||
batchApproval.createApproveBtn();
|
||||
}
|
||||
return event;
|
||||
});
|
||||
|
||||
})();
|
||||
@@ -1,59 +1,104 @@
|
||||
# 不要ファイル削除のお願い
|
||||
# 【新機能用ファイルアップロード】
|
||||
|
||||
以下の各アプリのカスタマイズ画面から、**新機能対応** ファイルをアップロードしてください。
|
||||
|
||||
また、 **スマートフォン用のJavaScript/CSSファイル** が不要になったため、こちらも全て削除してください。
|
||||
|
||||
|
||||
## 1.園児別出欠簿入力
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19)
|
||||
|
||||
| 削除 | | 新規(更新) |
|
||||
| ------------------------ | - | --- |
|
||||
| `utils.js` | → | `utils.js` |
|
||||
| `ExtractHandler.js` | → | `ExtractHandler.js` |
|
||||
| `detail-page-desktop.js` | → | `detail-page-desktop.js` |
|
||||
|
||||
|
||||
以下の各アプリのカスタマイズ画面から、スマートフォン用のJavaScript / CSSファイルを削除してください。
|
||||
|
||||
## 2.保育計画 月案(0歳児用)
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=77](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=77)
|
||||
|
||||
※ **スマートフォン用のJavaScript / CSSファイル** を削除してください。
|
||||
|
||||
| 削除(スマートフォン用) |
|
||||
| --- |
|
||||
| `env.js` |
|
||||
| `main.mobile.js` |
|
||||
|
||||
|
||||
|
||||
## 3.保育計画 月案
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=17](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=17)
|
||||
|
||||
※ **スマートフォン用のJavaScript / CSSファイル** を削除してください。
|
||||
|
||||
| 削除(スマートフォン用) |
|
||||
| --- |
|
||||
| `env.js` |
|
||||
| `main.mobile.js` |
|
||||
|
||||
|
||||
|
||||
## 4.保育計画 週案
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=18](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=18)
|
||||
|
||||
## 7.園児台帳
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=16](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=16)
|
||||
※ **スマートフォン用のJavaScript / CSSファイル** を削除してください。
|
||||
|
||||
## 8.学期反省・評価
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49)
|
||||
| 削除(スマートフォン用) |
|
||||
| --- |
|
||||
| `env.js` |
|
||||
| `main.mobile.js` |
|
||||
|
||||
---
|
||||
|
||||
# 更新ファイルアップロードのお願い
|
||||
|
||||
以下の各アプリのカスタマイズ画面から、該当ファイルをアップロードしてください。
|
||||
|
||||
## 1.園児別出欠簿入力
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19)
|
||||
|
||||
**更新ファイル**:
|
||||
- `utils.js`
|
||||
- `ExtractHandler.js`
|
||||
- `detail-page-desktop.js`
|
||||
|
||||
## 6.個別配慮
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=23](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=23)
|
||||
|
||||
**更新ファイル**:
|
||||
- `main.js`
|
||||
| 削除 | | 新規(更新) |
|
||||
| --------- | - | --- |
|
||||
| `main.js` | → | `main.js` |
|
||||
|
||||
|
||||
|
||||
## 7.園児台帳
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=16](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=16)
|
||||
|
||||
**更新ファイル**:
|
||||
- `env.js`
|
||||
- `KintoneRestAPIClient.min.js`
|
||||
- `kuc.min.js`
|
||||
- `utils.js`
|
||||
- `main.js`
|
||||
| 削除 | | 新規(更新) |
|
||||
| --------- | -- | --- |
|
||||
| `main.js` | ┐ | `KintoneRestAPIClient.min.js` |
|
||||
| | │ | `kuc.min.js` |
|
||||
| | │ | `env.js` |
|
||||
| | │ | `utils.js` |
|
||||
| | └▸ | `main.js` |
|
||||
|
||||
※ **スマートフォン用のJavaScript / CSSファイル** を削除してください。
|
||||
|
||||
| 削除(スマートフォン用) |
|
||||
| --- |
|
||||
| `main.mobile.js` |
|
||||
|
||||
|
||||
|
||||
## 8.学期反省・評価
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49)
|
||||
|
||||
※ **スマートフォン用のJavaScript / CSSファイル** を削除してください。
|
||||
|
||||
| 削除(スマートフォン用) |
|
||||
| --- |
|
||||
| `env.js` |
|
||||
| `main.mobile.js` |
|
||||
|
||||
|
||||
|
||||
## 保育・教育日数マスタ
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=41](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=41)
|
||||
|
||||
**更新ファイル**:
|
||||
- `main.js`
|
||||
- `main.css`
|
||||
| 削除 | | 新規(更新) |
|
||||
| --- | - | --- |
|
||||
| | | `main.js` |
|
||||
| | | `main.css` |
|
||||
|
||||
**フォーム更新**:
|
||||
- スペース追加:「calendar-area」
|
||||
|
||||
BIN
納品物説明/20250911/branch.png
Normal file
BIN
納品物説明/20250911/branch.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 70 KiB |
154
納品物説明/20250911/readme.md
Normal file
154
納品物説明/20250911/readme.md
Normal file
@@ -0,0 +1,154 @@
|
||||
# 【新機能用ファイルアップロード】
|
||||
|
||||
以下の各アプリのカスタマイズ画面から、**新機能対応** ファイルをアップロードしてください。
|
||||
|
||||
> 「(作業者が自分)」一覧にて、「一括承認」ボタンを作成する。
|
||||
> 
|
||||
|
||||
|
||||
## 1.園児別出欠簿入力
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=19)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| -------------- | ------------------------- | --- |
|
||||
| ~~`utils.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| ~~`main.js`~~ | `src/1.園児別出欠簿入力/` | `pvc.main.js` |
|
||||
| | `src/1.園児別出欠簿入力/` | `pvc.processAutoUpdate.js` |
|
||||
|
||||
|
||||
|
||||
## 10.個別支援計画
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=37](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=37)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| --- | ----------------------- | --- |
|
||||
| | `src/10.個別支援計画/` | `KintoneRestAPIClient.min.js` |
|
||||
| | `src/10.個別支援計画/` | `kuc.min.js` |
|
||||
| | `src/` | `pvc.utils.js` |
|
||||
| | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/10.個別支援計画/` | `pvc.main.js` |
|
||||
| | `src/10.個別支援計画/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/10.個別支援計画/` | `pvc.processBatchApproval.js` |
|
||||
|
||||
|
||||
|
||||
## 11.0,1歳日誌出力用
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=47](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=47)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| -------------- | -------------------------- | --- |
|
||||
| ~~`utils.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| ~~`main.js`~~ | `src/11.0,1歳日誌出力用/` | `pvc.main.js` |
|
||||
| | `src/11.0,1歳日誌出力用/` | `pvc.processAutoUpdate.js` |
|
||||
|
||||
|
||||
|
||||
## 12.2歳以上日誌出力用
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=48](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=48)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| -------------- | ---------------------------- | --- |
|
||||
| ~~`utils.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| ~~`main.js`~~ | `src/12.2歳以上日誌出力用/` | `pvc.main.js` |
|
||||
| | `src/12.2歳以上日誌出力用/` | `pvc.processAutoUpdate.js` |
|
||||
|
||||
|
||||
|
||||
## 2.保育計画 月案(0歳児用)
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=77](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=77)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| ----------------- | ----------------------- | --- |
|
||||
| ~~`env.js`~~ | `src/2.保育計画 月案(0歳児用)/` | `KintoneRestAPIClient.min.js` |
|
||||
| ~~`main.js`~~ | `src/2.保育計画 月案(0歳児用)/` | `kuc.min.js` |
|
||||
| ~~`pvc.main.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/2.保育計画 月案(0歳児用)/` | `pvc.main.js` |
|
||||
| | `src/2.保育計画 月案(0歳児用)/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/2.保育計画 月案(0歳児用)/` | `pvc.processBatchApproval.js` |
|
||||
|
||||
|
||||
|
||||
## 3.保育計画 月案
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=17](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=17)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| ----------------- | ----------------------- | --- |
|
||||
| ~~`env.js`~~ | `src/3.保育計画 月案/` | `KintoneRestAPIClient.min.js` |
|
||||
| ~~`main.js`~~ | `src/3.保育計画 月案/` | `kuc.min.js` |
|
||||
| ~~`pvc.main.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/3.保育計画 月案/` | `pvc.main.js` |
|
||||
| | `src/3.保育計画 月案/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/3.保育計画 月案/` | `pvc.processBatchApproval.js` |
|
||||
|
||||
|
||||
|
||||
## 4.保育計画 週案
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=18](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=18)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| ----------------- | ----------------------- | --- |
|
||||
| ~~`env.js`~~ | `src/4.保育計画 週案/` | `KintoneRestAPIClient.min.js` |
|
||||
| ~~`main.js`~~ | `src/4.保育計画 週案/` | `kuc.min.js` |
|
||||
| ~~`pvc.main.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/4.保育計画 週案/` | `pvc.main.js` |
|
||||
| | `src/4.保育計画 週案/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/4.保育計画 週案/` | `pvc.processBatchApproval.js` |
|
||||
|
||||
|
||||
> 「(作業者が自分)」一覧で「一括承認」ボタンをクリックしたとき
|
||||
>
|
||||
> 「4.保育計画 週案」で分岐が発生する場合、ユーザーに選択させるダイアログがポップアップ表示されます
|
||||
>
|
||||
> 
|
||||
|
||||
|
||||
## 6.個別配慮
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=23](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=23)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| -------------- | ------------------ | --- |
|
||||
| ~~`utils.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| ~~`main.js`~~ | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/6.個別配慮/` | `pvc.main.js` |
|
||||
| | `src/6.個別配慮/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/6.個別配慮/` | `pvc.processBatchApproval.js` |
|
||||
|
||||
|
||||
>
|
||||
> ### 「6.個別配慮」項目におけるデータ修正のお願い
|
||||
>
|
||||
> 「6.個別配慮」項目において、各園児につき年間1件のデータ記録を保持し、かつ、該当する月のマッピング項目にデータが正しく記録される状態にすることです。
|
||||
>
|
||||
> #### データ処理のロジックについて
|
||||
>
|
||||
> システム側で以下のロジックに則ってデータの読み取りと選択を行います。ご確認いただき、データの準備にご協力ください。
|
||||
>
|
||||
> 1. **年度内データの読み取り**
|
||||
> 対象期間内のすべてのデータを読み取ります。
|
||||
> * **例**: `「入力開始日付(当月1日)」 > '2025/03/31' AND < '2026/04/01'`
|
||||
>
|
||||
> 2. **最新データの選択(園児ごと)**
|
||||
> 同一園児に複数のデータ記録が存在する場合、最新の日付のデータを1件選択します。
|
||||
> * **例**: 8月1日と9月1日のデータがある場合、9月1日のデータを選択します。
|
||||
>
|
||||
> 3. **月次マッピング項目からのデータ抽出**
|
||||
> 選択されたデータから、指定された月のマッピング項目のデータを抽出します。
|
||||
> * **例**: 9月のデータを出力する場合、そのデータ内の「子供の姿_9月」項目から情報を抽出します。
|
||||
>
|
||||
|
||||
|
||||
## 8.学期反省・評価
|
||||
**管理画面URL**: [https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49](https://sagamikouseikai.cybozu.com/k/admin/app/customize?app=49)
|
||||
|
||||
| 削除 | 新規(更新) | ファイル |
|
||||
| ----------------- | ----------------------- | --- |
|
||||
| ~~`env.js`~~ | `src/8.学期反省・評価/` | `KintoneRestAPIClient.min.js` |
|
||||
| ~~`main.js`~~ | `src/8.学期反省・評価/` | `kuc.min.js` |
|
||||
| ~~`pvc.main.js`~~ | `src/` | `pvc.utils.js` |
|
||||
| | `src/` | `pvc.ProcessBatchApprovalHandler.js` |
|
||||
| | `src/8.学期反省・評価/` | `pvc.main.js` |
|
||||
| | `src/8.学期反省・評価/` | `pvc.processAutoUpdate.js` |
|
||||
| | `src/8.学期反省・評価/` | `pvc.processBatchApproval.js` |
|
||||
BIN
納品物説明/20250911/success.png
Normal file
BIN
納品物説明/20250911/success.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 65 KiB |
Reference in New Issue
Block a user