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>
489 lines
14 KiB
JavaScript
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);
|
|
|
|
}
|
|
}
|