apply pattern when username change

This commit is contained in:
2026-03-11 17:43:03 +08:00
parent 7c31cd9b97
commit 96315d5f8f
3 changed files with 135 additions and 59 deletions

View File

@@ -144,27 +144,7 @@
// 管理者かどうかを取得
isAdmin = groupCodes.indexOf(adminGroupCode) !== -1;
var editUserCode = record.engineer_mechanic.value.length > 0 ? record.engineer_mechanic.value[0].code : "";
return getSystemControlRecord(editUserCode).then(function (systemRecord) {
if (systemRecord != null) {
// サービスレポート承認者グループに所属するユーザーかどうかを取得
const serviceReportAuthorizerCodes =
systemRecord.サービスレポート承認者グループ.value.map(function (
group
) {
return group.code;
});
isServiceReportAuthorizer = serviceReportAuthorizerCodes.some(
function (serviceReportAuthorizerCode) {
return groupCodes.indexOf(serviceReportAuthorizerCode) !== -1;
}
);
// システムコントロール情報の設定
setSystemControlField(systemRecord, record);
setSystemInfo(record);
}
});
return fetchSystemControlAndUpdateFields(record, groupCodes);
})
.then(function () {
setHiddenField(isAdmin);
@@ -183,6 +163,41 @@
}
);
/**
* 「engineer_mechanic」変更時の処理を行います。
*/
kintone.events.on(
[
"app.record.create.change.engineer_mechanic",
"app.record.edit.change.engineer_mechanic",
],
function (
/** @type {kintone.AppEvent__サービスレポート_出張経費精算入力} */
event
) {
const record = event.record;
if (record.engineer_mechanic.value.length > 0) {
pvc.util.ui.showSpinner();
getLoginUserGroupCodes()
.then(function (groupCodes) {
return fetchSystemControlAndUpdateFields(record, groupCodes);
})
.then(function () {
setDisabledField(record, isServiceReportAuthorizer);
kintone.app.record.set(event);
pvc.util.ui.hideSpinner();
})
.catch(function (error) {
pvc.util.ui.hideSpinner();
console.error(error);
alert("システムエラーが発生しました");
});
}
return event;
}
);
/**
* 「作業時間情報」変更時の処理を行います。
*/
@@ -987,6 +1002,36 @@
return pvc.util.array.sum(includeTimeNumList);
}
/**
* 指定されたユーザーコードのシステムコントロール情報を取得してフィールドに設定します。
* @param {kintone.AppRecord__サービスレポート_出張経費精算入力} record
* @param {string[]} groupCodes - ログインユーザーの所属グループコードリスト
* @returns {Promise<void>}
*/
function fetchSystemControlAndUpdateFields(record, groupCodes) {
var userCode = record.engineer_mechanic.value.length > 0 ? record.engineer_mechanic.value[0].code : "";
return getSystemControlRecord(userCode).then(function (systemRecord) {
if (systemRecord != null) {
// サービスレポート承認者グループに所属するユーザーかどうかを取得
const serviceReportAuthorizerCodes =
systemRecord.サービスレポート承認者グループ.value.map(function (
group
) {
return group.code;
});
isServiceReportAuthorizer = serviceReportAuthorizerCodes.some(
function (serviceReportAuthorizerCode) {
return groupCodes.indexOf(serviceReportAuthorizerCode) !== -1;
}
);
// システムコントロール情報の設定
setSystemControlField(systemRecord, record);
setSystemInfo(record);
}
});
}
/**
* システムコントロールのレコードを取得します。
* @param {string} userCode - ユーザーコードengineer_mechanic.コード)

View File

@@ -53,15 +53,9 @@
setHiddenTableRowButton();
pvc.util.ui.showSpinner();
var userCode = record.氏名.value.length > 0 ? record.氏名.value[0].code : "";
return getSystemControlRecord(userCode)
.then(function (systemRecord) {
return fetchAndSetSystemControlInfo(record)
.then(function () {
pvc.util.ui.hideSpinner();
if (systemRecord != null) {
setSystemControlField(systemRecord, record);
setSystemInfo(record);
}
return event;
})
.catch(function (error) {
@@ -90,39 +84,42 @@
) {
const record = event.record;
const sinseiNengetu = pvc.util.obj.toNumber(record.申請年月.value) || 0;
// 既存の申請年月変更時の処理を継続
if (isNengetuNum(sinseiNengetu) && record.氏名.value.length > 0) {
kintone.Promise.resolve().then(function () {
pvc.util.ui.showSpinner();
pvc.util.ui.showSpinner();
// 「氏名」変更時にシステムコントロールの情報を取得
fetchAndSetSystemControlInfo(record)
.then(function () {
/** @type {{ record: kintone.AppRecord__勤怠申請入力_内勤者用 }} */
const r = kintone.app.record.get();
return existsDuplicateData(r.record)
.then(function (isExists) {
if (isExists) {
// 重複するデータが既に存在する場合
alert("既に登録済です。");
return;
}
/** @type {{ record: kintone.AppRecord__勤怠申請入力_内勤者用 }} */
const r = kintone.app.record.get();
return existsDuplicateData(r.record)
.then(function (isExists) {
if (isExists) {
// 重複するデータが既に存在する場合
alert("既に登録済です。");
return;
}
// 就業届テーブルにデータを作成
return setSyuugyouTodokeTable(r.record).then(function () {
// 使用不可を設定
setDisabledField(r.record);
// 就業届テーブルにデータを作成
return setSyuugyouTodokeTable(r.record).then(function () {
// 使用不可を設定
setDisabledField(r.record);
// レコードに値を設定
kintone.app.record.set(r);
});
})
.then(function () {
// スピナーを非表示
pvc.util.ui.hideSpinner();
})
.catch(function (error) {
pvc.util.ui.hideSpinner();
console.error(error);
alert("システムエラーが発生しました");
});
});
// レコードに値を設定
kintone.app.record.set(r);
});
})
})
.then(function () {
// スピナーを非表示
pvc.util.ui.hideSpinner();
})
.catch(function (error) {
pvc.util.ui.hideSpinner();
console.error(error);
alert("システムエラーが発生しました");
});
}
return event;
}
@@ -719,6 +716,21 @@
return strValue.length === 6 && 1 <= mm && mm <= 12;
}
/**
* 指定されたユーザーコードのシステムコントロール情報を取得してフィールドに設定します。
* @param {kintone.AppRecord__勤怠申請入力_内勤者用} record
* @returns {Promise<void>}
*/
function fetchAndSetSystemControlInfo(record) {
var userCode = record.氏名.value.length > 0 ? record.氏名.value[0].code : "";
return getSystemControlRecord(userCode).then(function (systemRecord) {
if (systemRecord != null) {
setSystemControlField(systemRecord, record);
setSystemInfo(record);
}
});
}
/**
* システムコントロールのレコードを取得します。
* @param {string} userCode - ユーザーコード(氏名.コード)

View File

@@ -1,6 +1,25 @@
(function () {
"use strict";
/**
* 新規登録・編集画面保存時の処理
* 氏名に複数のユーザーが設定されている場合は、エラーを表示して保存をキャンセルする
*/
kintone.events.on(
["app.record.create.submit", "app.record.edit.submit"],
function (event) {
const record = event.record;
// 氏名に複数のユーザーが設定されている場合は、エラーを表示して保存をキャンセル
if (record.氏名.value.length > 1) {
event.error = "氏名にユーザーが複数設定されています";
return event;
}
return event;
}
);
/**
* 一覧画面の編集保存時の処理
*/