ken_nogi/NodeSrv/apps/org-master-sync/scripts/mark-retired-check001.js
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。
NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは
別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter
インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-04 15:37:06 +09:00

67 lines
2.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";
/*
* プリザンター実ユーザー側で既に「退職済み」マーキングされている人Name先頭が"(退職) "、
* またはBodyが"退職済み"に対応するマスタレコードClass011=プリザンターUserId一致
* Check001退職済み、基本情報タブに新規追加をtrueに一括更新する。
* 既定はドライラン(対象一覧の表示のみ)。実際に送信するには --execute を付ける。
*
* 実行: node scripts/mark-retired-check001.js [--execute]
*/
const { getSiteItems, getAllUsers, updateSiteItem } = require("../src/lib/pleasanterClient");
const BASE_URL = process.env.PLEASANTER_BASE_URL;
const API_KEY = process.env.PLEASANTER_API_KEY;
const SITE_ID = process.env.PLEASANTER_MASTER_SITE_ID;
if (!BASE_URL || !API_KEY || !SITE_ID) {
console.error("PLEASANTER_BASE_URL / PLEASANTER_API_KEY / PLEASANTER_MASTER_SITE_ID が未設定");
process.exit(1);
}
function isRetiredPleasanterUser(pUser) {
return pUser.Name.startsWith("(退職) ") || pUser.Body === "退職済み";
}
async function main() {
const execute = process.argv.includes("--execute");
const config = { baseUrl: BASE_URL, apiKey: API_KEY, siteId: SITE_ID };
const [masterItems, pleasanterUsers] = await Promise.all([
getSiteItems(config),
getAllUsers(config),
]);
const retiredUserIds = new Set(
pleasanterUsers.filter(isRetiredPleasanterUser).map((u) => String(u.UserId))
);
console.log(`プリザンター側「退職済み」判定件数: ${retiredUserIds.size}`);
const targets = masterItems.filter(
(i) => i.Class011 && retiredUserIds.has(i.Class011) && i.Check001 !== true
);
const alreadyTrue = masterItems.filter(
(i) => i.Class011 && retiredUserIds.has(i.Class011) && i.Check001 === true
).length;
console.log(`マスタ内で更新対象Check001をtrueにする: ${targets.length}`);
console.log(`マスタ内で既にCheck001=trueだったもの: ${alreadyTrue}`);
console.log("更新対象サンプル:", JSON.stringify(targets.slice(0, 5).map((i) => ({ ResultId: i.ResultId, Class011: i.Class011, Class013: i.Class013 }))));
if (!execute) {
console.log("\n[ドライラン] --execute を付けずに実行したため送信していません。");
return;
}
let updated = 0;
for (const item of targets) {
await updateSiteItem({ baseUrl: BASE_URL, apiKey: API_KEY, itemId: item.ResultId, fields: { Check001: true } });
updated++;
}
console.log(`\n[OK] ${updated}件のCheck001をtrueに更新しました。`);
}
main().catch((e) => {
console.error(e);
process.exit(1);
});