ken_nogi/NodeSrv/apps/org-master-sync/sample/sampleアカウント作成スクリプト.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

489 lines
14 KiB
JavaScript

/*
プリザンターに新規ユーザー登録するためのサンプルスクリプト
*/
let apiKey = '6504c8a807677a3a576e10327f3c19876c55736ee45d4a845796b9e7f5e087bfd4bd0d8184863da8cf1733ca635111432ab334aea59102b06a96ee6d2c05190d';
let baseUrl = 'https://' + location.hostname + '/pleasanter/';
let userData = {};
$p.events.on_editor_load = function () {
// 初期処理
$p.ex.checkUserData();
};
//組織コード取得・更新
$p.on('change', 'ClassH', function () {
$p.ex.getDeptData();
});
$p.ex.getDeptData = function () {
let deptId = $('#Results_ClassH').val();
let json = {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnFilterHash": {
"DeptId": deptId
}
}
}
$.ajax({
"type": "post",
"async": false,
"url": baseUrl + "api/depts/get",
"data": JSON.stringify(json),
"contentType": "application/json",
"scriptCharset": "utf-8",
"dataType": "json",
success: function (data) {
//console.log(data.Response.Data[0]);
if (data.Response.TotalCount > 0) {
let deptCode = data.Response.Data[0].DeptCode;
$p.set($('#Results_ClassU'), deptCode);
}
},
error: function (data) {
console.log(data);
$p.set($('#Results_ClassU'), "");
}
});
}
//メールアドレス作成
$p.ex.createMailAddress = function () {
if ($('#Results_ClassO').val() == '') {
window.alert('ドメインが未選択です。');
return false;
}
if ($('#Results_ClassO').val() != '' && $('#Results_ClassE').val() != '' && $('#Results_ClassF').val() != '') {
let lastName = $('#Results_ClassE').val().toLowerCase();
let firstName = $('#Results_ClassF').val().toLowerCase();
let domain = $('#Results_ClassO').val().toLowerCase();
let mailAddress = firstName + '.' + lastName + '@' + domain;
mailAddress = mailAddress.replace(/[\u0020\u3000]+/g, '.');
$p.set($('#Results_ClassQ'), mailAddress.toLowerCase());
$p.ex.createXbizMailStr();
}
}
$p.ex.numberingSet = async function () {
//番号設定
/*
ネクストイノベーション
西東京建設
愛知建設
FIT
君津住宅
デザイノ
その他
*/
let company = $('#Results_ClassG').val();
let baseNum = '';
let year = new Date().getFullYear().toString().slice(-2);
let month = (new Date().getMonth() + 1);
let code = '';
switch (company) {
case 'ネクストイノベーション':
case '西東京建設':
case '愛知建設':
case 'FIT':
case 'ネクストホールディングス':
case '第一建材':
case 'その他':
code = 'next';
if (month < 4) {
baseNum = (parseInt(year) - 5);
} else {
baseNum = (parseInt(year) - 4);
}
break;
case '君津住宅':
code = 'kmjco';
if (month < 4) {
baseNum = (parseInt(year) + 9);
} else {
baseNum = (parseInt(year) + 10);
}
break;
case 'デザイノ':
code = 'clev';
if (month < 4) {
baseNum = (parseInt(year) - 22);
} else {
baseNum = (parseInt(year) - 21);
}
break;
}
//プリザンターへゲット処理
const pleasanterUrl = baseUrl + 'api/items/' + $p.siteId() + '/get'
const jsonBody = {
'ApiVersion': 1.1,
'ApiKey': apiKey,
'View': {
'ColumnSorterHash': {
'NumA': 'desc'
},
'ColumnFilterHash': {
'ClassG': '["君津住宅"]',
'NumA': '[",90000"]'
},
}
};
if (company != '君津住宅') {
jsonBody.View['ColumnFilterNegatives'] = ["ClassG"];
}
console.log(jsonBody);
const pleasanterRes = await fetch(pleasanterUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(jsonBody)
});
const resData = await pleasanterRes.json();
console.log(resData);
if (resData.Response.TotalCount > 0) {
let lastNum = resData.Response.Data[0].NumHash.NumA;
if (lastNum == $('#Results_NumA').val()) {
lastNum = resData.Response.Data[1].NumHash.NumA;
}
// 下3桁取得・次番号作成
let lastNumStr = String(lastNum);
let last3 = lastNumStr.slice(-3);
let last3Num = parseInt(last3, 10) || 0;
let nextNumSeq = last3Num + 1;
let nextNum = String(nextNumSeq).padStart(3, '0');
let systemId = code + baseNum + nextNum;
if (company == '君津住宅') {
$p.set($('#Results_NumA'), baseNum + '' + nextNum);
} else {
$p.set($('#Results_NumA'), nextNum);
}
$p.set($('#Results_ClassP'), systemId);
$p.ex.createXbizMailStr();
} else {
return false;
}
return true;
}
$p.ex.processScript = function (proccessButton) {
//押されたボタンからプロセス番号を取得
let procNum = proccessButton[0].id.replace('Process_', '');
console.log('processScript ' + procNum);
// プロセス番号に応じた処理
switch (procNum) {
case '1': //メールアドレス登録
$p.ex.createMailAddress();
// プロセス実行
$p.execProcess($('#Process_' + procNum));
break;
case '2':
(async () => {
await $p.ex.numberingSet();
// プロセス実行
$p.execProcess($('#Process_' + procNum));
return;
})();
break;
case '3':
break;
case '4':
break;
case '5':
break;
case '6':
break;
}
}
//XBIZメール登録文字列の作成
$p.ex.createXbizMailStr = function () {
let shainCd = $('#Results_ClassP').val();
if (shainCd == '') {
return false;
}
let mailAddr = $('#Results_ClassQ').val();
let name = $('#Results_ClassA').val() + $('#Results_ClassC').val();
let code = shainCd.slice(-5);
let size = 2000;
let pass = '';
let xbiz = 0;
let domain = $('#Results_ClassO').val();
/*
next-hd.co.jp
eco-ntk.com
actie.jp
nextinnovation.co.jp
cleverlyhome.jp
fitjpn.com
kimijyu.co.jp
a-graph.co.jp
gmail.com
なし
*/
switch (domain) {
case 'next-hd.co.jp':
pass = 'NextHd0' + code.slice(-3) + '#';
xbiz = 1;
break;
case 'eco-ntk.com':
pass = 'Nito0' + code.slice(-3) + '#';
xbiz = 1;
break;
case 'nextinnovation.co.jp':
pass = 'Next0' + code.slice(-3) + '#';
xbiz = 1;
break;
case 'actie.jp':
pass = 'Aichi0' + code.slice(-3) + '#';
xbiz = 1;
break;
case 'cleverlyhome.jp':
pass = 'Clev0' + code.slice(-3) + '#';
break;
case 'fitjpn.com':
pass = 'FitJ0' + code.slice(-3) + '#';
xbiz = 1;
break;
case 'kimijyu.co.jp':
pass = 'Kimi0' + code.slice(-3) + '#';
break;
case 'a-graph.co.jp':
pass = 'AGrap0' + code.slice(-3) + '#';
break;
case 'gmail.com':
pass = 'GmXyz' + code.slice(-3) + '#';
break;
case 'なし':
pass = '---';
break;
default:
pass = '---';
}
if (xbiz) {
let xbizStr = mailAddr + ',' + pass + ',' + size + ',' + name + '/' + code;
$p.set($('#Results_ClassV'), xbizStr);
} else {
$p.set($('#Results_ClassV'), '---');
}
}
//ユーザー登録状態の確認
$p.ex.checkUserData = function () {
//ユーザーがすでに存在するか確認
let loginId = $('#Results_ClassP').val();
let mailAddr = $('#Results_ClassQ').val();
if (loginId != '' && mailAddr != '') {
let json = {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ApiGetMailAddresses": true,
"ColumnFilterHash": {
"LoginId": loginId
}
}
}
$.ajax({
"type": "post",
"async": false,
"url": baseUrl + "api/users/get",
"data": JSON.stringify(json),
"contentType": "application/json",
"scriptCharset": "utf-8",
"dataType": "json",
success: function (data) {
console.log(data);
if (data.Response.TotalCount > 0) {
//ユーザーが存在する
userData = data.Response.Data[0];
} else {
//ユーザーが存在しない
let div = document.createElement('div');
let button = document.createElement('button');
button.id = 'CreateUserBtn';
button.type = 'button';
button.textContent = 'プリザンターアカウント作成';
div.style.margin = '5px';
div.append(button);
$('#Guide').after(div);
$('#CreateUserBtn').button({
icon: 'ui-icon-document'
}).on('click', function () {
$p.ex.createPleasanterUser();
});
//$('#Results_ClassP').after($createBtn);
}
},
error: function (data) {
console.log(data);
}
})
}
}
//プリザンターアカウント登録
$p.ex.createPleasanterUser = function () {
let shainCd = $('#Results_ClassP').val();
let mailAddr = $('#Results_ClassQ').val();
let deptId = $('#Results_ClassH').val();
let deptCode = $('#Results_ClassU').val();
let name = $('#Results_ClassA').val() + " " + $('#Results_ClassC').val();
if (shainCd != '' && mailAddr != '' && deptId != '' && name != '' && deptCode != '') {
//プリザンターアカウント登録
let mailAddrs = [];
mailAddrs.push(mailAddr);
let PasswordExpirationTime = new Date(2010, 12, 31);
let json = {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"LoginId": shainCd,
"Name": name,
"Password": "Password91",
"PasswordExpirationTime": PasswordExpirationTime,
"Language": "ja",
"TimeZone": "Asia/Tokyo",
"DeptId": deptId,
"DeptCode": deptCode,
"AllowApi": true,
"AllowCreationAtTopSite": false,
"AllowGroupAdministration": false,
"AllowGroupCreation": false,
"MailAddresses": mailAddrs
}
$.ajax({
"type": "post",
"async": false,
"url": baseUrl + "api/users/create",
"data": JSON.stringify(json),
"contentType": "application/json",
"scriptCharset": "utf-8",
"dataType": "json",
success: async function (data) {
console.log(data);
let userId = data.Id;
let groupList = JSON.parse($('#groupData').val());
for (let key in groupList) {
let group = groupList[key];
console.log(group);
await $p.ex.addUserGroup(group.groupId, userId);
}
$p.set($('#Results_CheckK'), 'on');
window.alert('プリザンターアカウントを登録しました。');
$('#UpdateCommand').click();
},
error: function (data) {
console.log(data);
}
});
}
}
$p.ex.addUserGroup = async function (groupId, userId) {
//let groupId = "27";
let userName = $('#Results_ClassA').val() + " " + $('#Results_ClassC').val();
let loginId = $('#Results_ClassP').val();
let nowTime = new Date().toLocaleString();
//Group情報の取得
let groupJson = {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"View": {
"ColumnFilterHash": {
"GroupId": "[" + groupId + "]"
}
}
}
const groupsGetUrl = baseUrl + "api/groups/get"
const groupRes = await fetch(groupsGetUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(groupJson)
});
const groupData = await groupRes.json();
if (groupData.Response.TotalCount > 0) {
// グループ情報が取得できた場合
let group = groupData.Response.Data[0];
console.log(group);
let groupBody = group.Body;
let groupName = group.GroupName;
let groupMembersOrg = group.GroupMembers.concat();
let member = 'User,' + userId + ',False';
groupMembersOrg.push(member);
groupBody = groupBody + '\n' +
loginId + '/' + userName + '/' + nowTime + '/追加登録'
let updateJson = {
"ApiVersion": 1.1,
"ApiKey": apiKey,
"GroupName": groupName,
"Body": groupBody,
"GroupMembers": groupMembersOrg
};
const groupUpdateUrl = baseUrl + "api/groups/" + groupId + "/update"
const updateRes = await fetch(groupUpdateUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(updateJson)
});
const updateData = await updateRes.json();
console.log(updateData);
}
}