/* プリザンターに新規ユーザー登録するためのサンプルスクリプト */ 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); } }