1893 lines
68 KiB
JavaScript
1893 lines
68 KiB
JavaScript
//jexcel next-hd.netサーバ配置
|
||
loadcdn('script', 'https://next-hd.net/jexcel/jexcel.min.js');
|
||
loadcdn('css', 'https://next-hd.net/jexcel/jexcel.min.css');
|
||
loadcdn('script', 'https://next-hd.net/jexcel/jsuites.min.js');
|
||
loadcdn('css', 'https://next-hd.net/jexcel/jsuites.min.css');
|
||
|
||
let pageLoading = 0;
|
||
let editableFlag = true;
|
||
let myData;
|
||
let apiKey = '6504c8a807677a3a576e10327f3c19876c55736ee45d4a845796b9e7f5e087bfd4bd0d8184863da8cf1733ca635111432ab334aea59102b06a96ee6d2c05190d';
|
||
|
||
window.addEventListener('load', function () {
|
||
tableLoad = 0;
|
||
if (pageLoading == 0) {
|
||
console.log('load Event');
|
||
onLoad();
|
||
}
|
||
});
|
||
|
||
$p.events.on_editor_load = function () {
|
||
tableLoad = 0;
|
||
if (pageLoading == 1) {
|
||
console.log('on Editor Load');
|
||
onLoad();
|
||
}
|
||
//setKankeisya();
|
||
|
||
}
|
||
|
||
function onLoad() {
|
||
//ステータスチェック
|
||
let status = $('#Results_Status').val();
|
||
if (status == '100' || status == '110' || status == '200' || status == '300') {
|
||
editableFlag = true;
|
||
} else {
|
||
editableFlag = false;
|
||
}
|
||
|
||
if ($p.userId() == '460' || $p.userId() == '678' || $p.userId() == '421') {
|
||
editableFlag = true;
|
||
}
|
||
|
||
pageLoading = 1;
|
||
|
||
/*実績情報収集反映*/
|
||
getMyData();
|
||
getJissekiData();
|
||
|
||
createTable();
|
||
createSpreadsheet();
|
||
summaryCalc();
|
||
|
||
labelOption();
|
||
//createEigyoGaiTable();
|
||
//createMembersTable();
|
||
|
||
//$p.ex.columnReadOnly('DateA');
|
||
//$p.ex.columnReadOnly('DateB');
|
||
//$p.ex.columnReadOnly('DateC');
|
||
|
||
createSummaryButton();
|
||
}
|
||
|
||
function getMyData() {
|
||
let thisId = $p.id();
|
||
|
||
$p.apiGet({
|
||
'id': thisId,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
myData = data.Response.Data[0];
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
|
||
});
|
||
}
|
||
|
||
//実績計上テーブルからデータ取得
|
||
function getJissekiData() {
|
||
let jissekiTable = '263191';
|
||
let classE = myData.ClassHash.ClassB //計上営業所
|
||
|
||
let jissekiA = {
|
||
'1': [],
|
||
'2': [],
|
||
'3': [],
|
||
'4': [],
|
||
'5': [],
|
||
'6': [],
|
||
'7': [],
|
||
'8': [],
|
||
'9': [],
|
||
'10': [],
|
||
'11': [],
|
||
'12': []
|
||
};
|
||
let jissekiB = {
|
||
'1': [],
|
||
'2': [],
|
||
'3': [],
|
||
'4': [],
|
||
'5': [],
|
||
'6': [],
|
||
'7': [],
|
||
'8': [],
|
||
'9': [],
|
||
'10': [],
|
||
'11': [],
|
||
'12': []
|
||
};
|
||
let jissekiC = {
|
||
'1': [],
|
||
'2': [],
|
||
'3': [],
|
||
'4': [],
|
||
'5': [],
|
||
'6': [],
|
||
'7': [],
|
||
'8': [],
|
||
'9': [],
|
||
'10': [],
|
||
'11': [],
|
||
'12': []
|
||
};
|
||
|
||
//絞り込み日付
|
||
let sYear = myData.ClassHash.ClassZ;
|
||
let eYear = parseFloat(myData.ClassHash.ClassZ) + 1;
|
||
let sDate = sYear + '/04/01 00:00:00';
|
||
let eDate = eYear + '/04/30 23:59:59';
|
||
|
||
//着工と完成は当月まで
|
||
let thisMonthLastDay = new Date();
|
||
thisMonthLastDay.setMonth(thisMonthLastDay.getMonth() + 1, 0)
|
||
let eDate1 = thisMonthLastDay.getFullYear() + '/' +
|
||
(thisMonthLastDay.getMonth() + 1).toString().padStart(2, '0') + '/' +
|
||
(thisMonthLastDay.getDate()).toString().padStart(2, '0') + ' 23:59:59';
|
||
|
||
console.log(eDate1);
|
||
|
||
//受注(本契約のみ)
|
||
$p.apiGet({
|
||
'id': jissekiTable,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'View': {
|
||
'ColumnFilterHash': {
|
||
'ClassE': '["' + classE + '"]', //計上営業所
|
||
'ClassO': '["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]', //契約カウント月
|
||
'DateA': '["' + sDate + ',' + eDate + '"]', //契約日
|
||
'DateB': '["\t"]', //設計契約日は空欄
|
||
},
|
||
'ColumnSorterHash': {
|
||
'DateA': 'asc',
|
||
}
|
||
|
||
}
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
//console.log(data);
|
||
$.each(data.Response.Data, function (index, value) {
|
||
let countMonth = parseFloat(value.ClassHash.ClassO.replace('月', ''));
|
||
let date0 = new Date(value.DateHash.DateA);
|
||
date0.setHours(date0.getHours() + 9);
|
||
let countYear = date0.getFullYear();
|
||
|
||
if (countMonth <= 3 && countYear == sYear) {
|
||
//対象外
|
||
} else if (countMonth == 4 && countYear == eYear) {
|
||
//対象外
|
||
} else {
|
||
let kubun = value.ClassHash.ClassD;
|
||
let cname = value.ClassHash.ClassC;
|
||
let ukeoi = parseFloat(value.NumHash.NumA);
|
||
let arari = parseFloat(value.NumHash.NumB);
|
||
let arariPer = Math.floor(arari / ukeoi * 1000) / 10;
|
||
let tanto = value.ClassHash.ClassF;
|
||
|
||
let data0 = {
|
||
'0': '0',
|
||
'1': date0,
|
||
'2': kubun,
|
||
'3': cname,
|
||
'4': ukeoi,
|
||
'5': arariPer,
|
||
'6': arari,
|
||
'7': tanto,
|
||
}
|
||
jissekiA[countMonth].push(data0);
|
||
}
|
||
});
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
});
|
||
|
||
//受注(設計契約)
|
||
$p.apiGet({
|
||
'id': jissekiTable,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'View': {
|
||
'ColumnFilterHash': {
|
||
'ClassE': '["' + classE + '"]', //計上営業所
|
||
'ClassO': '["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]', //契約カウント月
|
||
'DateB': '["' + sDate + ',' + eDate + '"]', //設計契約日
|
||
},
|
||
'ColumnSorterHash': {
|
||
'DateB': 'asc',
|
||
}
|
||
|
||
}
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
//console.log(data);
|
||
$.each(data.Response.Data, function (index, value) {
|
||
let countMonth = parseFloat(value.ClassHash.ClassO.replace('月', ''));
|
||
let date0 = new Date(value.DateHash.DateB);
|
||
date0.setHours(date0.getHours() + 9);
|
||
let countYear = date0.getFullYear();
|
||
|
||
if (countMonth <= 3 && countYear == sYear) {
|
||
//対象外
|
||
} else if (countMonth == 4 && countYear == eYear) {
|
||
//対象外
|
||
} else {
|
||
let kubun = value.ClassHash.ClassD;
|
||
let cname = '[設]' + value.ClassHash.ClassC;
|
||
let ukeoi = parseFloat(value.NumHash.NumC);
|
||
let arari = parseFloat(value.NumHash.NumD);
|
||
let tanto = value.ClassHash.ClassF;
|
||
|
||
//本契約ありの場合は、本契約の金額に差し替え・案件名の先頭に[請]を点ける
|
||
if (value.DateHash.DateA != '1899-12-30T00:00:00') {
|
||
cname = '[本]' + value.ClassHash.ClassC;
|
||
ukeoi = parseFloat(value.NumHash.NumA);
|
||
arari = parseFloat(value.NumHash.NumB);
|
||
} else {
|
||
cname = '[設]' + value.ClassHash.ClassC;
|
||
}
|
||
|
||
let arariPer = Math.floor(arari / ukeoi * 1000) / 10;
|
||
|
||
let data0 = {
|
||
'0': '0',
|
||
'1': date0,
|
||
'2': kubun,
|
||
'3': cname,
|
||
'4': ukeoi,
|
||
'5': arariPer,
|
||
'6': arari,
|
||
'7': tanto,
|
||
}
|
||
jissekiA[countMonth].push(data0);
|
||
}
|
||
});
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
});
|
||
|
||
//着工
|
||
$p.apiGet({
|
||
'id': jissekiTable,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'View': {
|
||
'ColumnFilterHash': {
|
||
'ClassE': '["' + classE + '"]',
|
||
'DateC': '["' + sDate + ',' + eDate1 + '"]',
|
||
},
|
||
'ColumnSorterHash': {
|
||
'DateC': 'asc',
|
||
}
|
||
|
||
}
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
//console.log(data);
|
||
let num = 1;
|
||
let month0 = 0;
|
||
$.each(data.Response.Data, function (index, value) {
|
||
let date0 = new Date(value.DateHash.DateC);
|
||
date0.setHours(date0.getHours() + 9);
|
||
|
||
let month = date0.getMonth() + 1;
|
||
let kubun = value.ClassHash.ClassD;
|
||
let cname = value.ClassHash.ClassC;
|
||
let ukeoi = parseFloat(value.NumHash.NumA);
|
||
let arari = parseFloat(value.NumHash.NumB);
|
||
let arariPer = Math.floor(arari / ukeoi * 1000) / 10;
|
||
let tanto = value.ClassHash.ClassF;
|
||
|
||
if (index > 0 && month0 != month) {
|
||
num = 1;
|
||
}
|
||
|
||
let data0 = {
|
||
'0': num,
|
||
'1': date0,
|
||
'2': kubun,
|
||
'3': cname,
|
||
'4': ukeoi,
|
||
'5': arariPer,
|
||
'6': arari,
|
||
'7': tanto,
|
||
}
|
||
jissekiB[month].push(data0);
|
||
|
||
num = num + 1;
|
||
month0 = month;
|
||
});
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
});
|
||
|
||
//完成
|
||
$p.apiGet({
|
||
'id': jissekiTable,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'View': {
|
||
'ColumnFilterHash': {
|
||
'ClassE': '["' + classE + '"]',
|
||
'DateD': '["' + sDate + ',' + eDate1 + '"]',
|
||
},
|
||
'ColumnSorterHash': {
|
||
'DateD': 'asc',
|
||
}
|
||
|
||
}
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
//console.log(data);
|
||
let num = 1;
|
||
let month0 = 0;
|
||
$.each(data.Response.Data, function (index, value) {
|
||
let date0 = new Date(value.DateHash.DateD);
|
||
date0.setHours(date0.getHours() + 9);
|
||
|
||
let month = date0.getMonth() + 1;
|
||
let kubun = value.ClassHash.ClassD;
|
||
let cname = value.ClassHash.ClassC;
|
||
let ukeoi = parseFloat(value.NumHash.NumA);
|
||
let arari = parseFloat(value.NumHash.NumB);
|
||
let arariPer = Math.floor(arari / ukeoi * 1000) / 10;
|
||
let tanto = value.ClassHash.ClassF;
|
||
|
||
if (index > 0 && month0 != month) {
|
||
num = 1;
|
||
}
|
||
|
||
let data0 = {
|
||
'0': num,
|
||
'1': date0,
|
||
'2': kubun,
|
||
'3': cname,
|
||
'4': ukeoi,
|
||
'5': arariPer,
|
||
'6': arari,
|
||
'7': tanto,
|
||
}
|
||
jissekiC[month].push(data0);
|
||
|
||
num = num + 1;
|
||
month0 = month;
|
||
});
|
||
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
});
|
||
|
||
let jissekiTemplate = JSON.parse('[{"0": "1","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "2","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "3","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "4","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "5","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "6","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "7","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "8","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "9","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "10","1": "","2": "","3": "","4": "","5": "","6": "","7": ""}]');
|
||
|
||
for (i = 1; i <= 12; i++) {
|
||
let desc1 = (i + 20).toString().padStart(3, '0');
|
||
if (jissekiA[i].length) {
|
||
for (j = 0; j < jissekiA[i].length; j++) {
|
||
//console.log(jissekiA[i]);
|
||
let num = j + 1;
|
||
jissekiA[i][j]['0'] = num.toString();
|
||
}
|
||
|
||
for (k = 0; k < 10; k++) {
|
||
if (k >= jissekiA[i].length) {
|
||
jissekiA[i][k] = {
|
||
"0": (k + 1).toString(),
|
||
"1": "",
|
||
"2": "",
|
||
"3": "",
|
||
"4": "",
|
||
"5": "",
|
||
"6": "",
|
||
"7": ""
|
||
}
|
||
}
|
||
}
|
||
$p.set($('#Results_Description' + desc1), JSON.stringify(jissekiA[i]));
|
||
} else {
|
||
$p.set($('#Results_Description' + desc1), JSON.stringify(jissekiTemplate));
|
||
}
|
||
|
||
let desc2 = (i + 80).toString().padStart(3, '0');
|
||
if (jissekiB[i].length) {
|
||
for (k = 0; k < 10; k++) {
|
||
if (k >= jissekiB[i].length) {
|
||
jissekiB[i][k] = {
|
||
"0": (k + 1).toString(),
|
||
"1": "",
|
||
"2": "",
|
||
"3": "",
|
||
"4": "",
|
||
"5": "",
|
||
"6": "",
|
||
"7": ""
|
||
}
|
||
}
|
||
}
|
||
$p.set($('#Results_Description' + desc2), JSON.stringify(jissekiB[i]));
|
||
} else {
|
||
$p.set($('#Results_Description' + desc2), JSON.stringify(jissekiTemplate));
|
||
}
|
||
|
||
let desc3 = (i + 140).toString().padStart(3, '0');
|
||
if (jissekiC[i].length) {
|
||
for (k = 0; k < 10; k++) {
|
||
if (k >= jissekiC[i].length) {
|
||
jissekiC[i][k] = {
|
||
"0": (k + 1).toString(),
|
||
"1": "",
|
||
"2": "",
|
||
"3": "",
|
||
"4": "",
|
||
"5": "",
|
||
"6": "",
|
||
"7": ""
|
||
}
|
||
}
|
||
}
|
||
$p.set($('#Results_Description' + desc3), JSON.stringify(jissekiC[i]));
|
||
} else {
|
||
$p.set($('#Results_Description' + desc3), JSON.stringify(jissekiTemplate));
|
||
}
|
||
}
|
||
|
||
//console.log(jissekiA);
|
||
//console.log(jissekiB);
|
||
//console.log(jissekiC);
|
||
|
||
}
|
||
|
||
|
||
function createSummaryButton() {
|
||
let button = document.createElement('button');
|
||
let url = 'https://nextoffice.next-hd.co.jp/pleasanter/profit_loss/profit_loss.html?reqId=' + $p.id();
|
||
button.type = 'button';
|
||
button.id = 'openSummaryWindowButton';
|
||
button.innerHTML = ' ▶▶▶損益計算書を開く ';
|
||
button.setAttribute('onclick', 'window.open("' + url + '","_blank")');
|
||
button.style.marginLeft = '15px';
|
||
|
||
$('#HeaderTitle').append(button);
|
||
|
||
$('#openSummaryWindowButton').button();
|
||
|
||
}
|
||
|
||
$('.YesNoDatePicker').click(function () {
|
||
$.each($('div.day'), function (index, value) {
|
||
//console.log(value);
|
||
value.innerText = value.innerText.replaceAll('日', '');
|
||
})
|
||
|
||
})
|
||
|
||
/*
|
||
$p.on('change', 'ClassZ', function () {
|
||
let limitDate = '';
|
||
let nendo = $('#Results_ClassZ').val();
|
||
if (nendo == '2023') {
|
||
limitDate = '2024/02/28 12:00';
|
||
|
||
} else if (nendo == '2024') {
|
||
limitDate = '2024/04/05 12:00';
|
||
|
||
}
|
||
|
||
$p.set($('#Results_DateA'), limitDate);
|
||
|
||
})
|
||
*/
|
||
|
||
function labelOption() {
|
||
let checkA = $('#Results_CheckA').prop("checked");
|
||
let tanka = $('#Results_NumA').val();
|
||
let arariPer = $('#Results_NumB').val();
|
||
let tenpo = $('#Results_ClassB option:selected').text();
|
||
//let span = document.createElement('span');
|
||
|
||
let labelName1 = '';
|
||
let labelName2 = '';
|
||
let labelName3 = '';
|
||
|
||
if (checkA) {
|
||
labelName1 = '契約' + ' ' + tenpo;
|
||
labelName2 = '着工' + ' ' + tenpo;
|
||
labelName3 = '売上' + ' ' + tenpo;
|
||
|
||
} else {
|
||
labelName1 = '受注' + ' ' + tenpo + ' 1棟単価:' + tanka + ' 粗利基準:' + arariPer + '%';
|
||
labelName2 = '着工' + ' ' + tenpo + ' 1棟単価:' + tanka + ' 粗利基準:' + arariPer + '%';
|
||
labelName3 = '完成' + ' ' + tenpo + ' 1棟単価:' + tanka + ' 粗利基準:' + arariPer + '%';
|
||
|
||
}
|
||
|
||
//ラベルの色変更
|
||
$.each($('label.field-section'), function (index, value) {
|
||
$('label.field-section.juchuLabel').text("受注");
|
||
|
||
switch (value.innerText) {
|
||
case '受注・契約':
|
||
value.classList.add('juchuLabel');
|
||
break;
|
||
case '着工':
|
||
value.classList.add('chakoLabel');
|
||
break;
|
||
case '完成・売上':
|
||
value.classList.add('kanseiLabel');
|
||
break;
|
||
}
|
||
});
|
||
|
||
$('label.field-section.juchuLabel').text(labelName1);
|
||
$('label.field-section.chakoLabel').text(labelName2);
|
||
$('label.field-section.kanseiLabel').text(labelName3);
|
||
|
||
if (checkA) {
|
||
$('#SectionFields4Container').hide();
|
||
$('#SectionFields7Container').hide();
|
||
$('#SectionFields10Container').hide();
|
||
$('#SectionFields13Container').hide();
|
||
|
||
}
|
||
|
||
}
|
||
|
||
//SpreadSheetを保管するTableタグの生成
|
||
function createTable() {
|
||
let colName = ['計画', '実績', '合計'];
|
||
|
||
for (m = 1; m <= 12; m += 3) {
|
||
for (i = 0; i <= 160; i += 60) {
|
||
let table = document.createElement('table');
|
||
table.id = 'jigyoTable';
|
||
let thead = document.createElement('thead');
|
||
let tbody = document.createElement('tbody');
|
||
|
||
let c = 0;
|
||
for (j = i; j <= i + 40; j += 20) {
|
||
|
||
if (j == i) {
|
||
let tr = document.createElement('tr');
|
||
let th = document.createElement('th');
|
||
tr.append(th);
|
||
for (month = m; month < m + 3; month++) {
|
||
let th = document.createElement('th');
|
||
th.classList.add('head1');
|
||
th.id = 'month_' + month;
|
||
th.innerHTML = month + '月';
|
||
tr.append(th);
|
||
}
|
||
thead.append(tr);
|
||
table.append(thead);
|
||
}
|
||
|
||
let tr = document.createElement('tr');
|
||
let td = document.createElement('td');
|
||
td.classList.add('head2');
|
||
td.classList.add('head2_' + c);
|
||
td.innerHTML = colName[c];
|
||
tr.append(td);
|
||
for (mm = j + m; mm < j + m + 3; mm++) {
|
||
let td = document.createElement('td');
|
||
td.classList.add('tableBody');
|
||
td.id = 'table_' + (mm).toString().padStart(3, '0');
|
||
//td.innerHTML = ' ';
|
||
tr.append(td);
|
||
}
|
||
|
||
c++;
|
||
tbody.append(tr);
|
||
}
|
||
table.append(tbody);
|
||
//console.log(table);
|
||
let desc = (i + m).toString().padStart(3, '0');
|
||
$('#Results_Description' + desc + 'Field').after(table);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
function createSpreadsheet() {
|
||
//1月~12月
|
||
for (let month1 = 4; month1 < 16; month1++) {
|
||
let month2;
|
||
(month1 >= 13) ? month2 = month1 - 12 : month2 = month1;
|
||
|
||
let count = 1;
|
||
|
||
for (let i = 0; i <= 160; i += 20) {
|
||
let tableId = (month2 + i).toString().padStart(3, '0');
|
||
|
||
switch (count) {
|
||
case 1: //計画
|
||
createKeikakuTable(tableId);
|
||
break;
|
||
case 2: //実績
|
||
createJissekiTable(tableId);
|
||
break;
|
||
case 3: //合計
|
||
createGoukeiTable(tableId);
|
||
break
|
||
}
|
||
|
||
if (count < 3) {
|
||
count += 1;
|
||
} else {
|
||
count = 1;
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
let keikakuTable = {};
|
||
|
||
function createKeikakuTable(tableId) {
|
||
let dataArea = '#Results_Description' + tableId;
|
||
let tableArea = '#table_' + tableId;
|
||
|
||
//スプレッドシートベース
|
||
let keikakuTableEl = document.createElement('div');
|
||
keikakuTableEl.classList.add('keikakuTable');
|
||
keikakuTableEl.id = 'Keikaku_' + tableId;
|
||
|
||
//保管エリアからデータ取得
|
||
let descData = $(dataArea).val();
|
||
let keikakuData;
|
||
if (descData) {
|
||
keikakuData = JSON.parse(descData);
|
||
} else {
|
||
keikakuData = JSON.parse('[{"0": "1","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "2","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "3","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "4","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "5","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "6","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "7","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "8","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "9","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "10","1": "","2": "","3": "","4": "","5": "","6": "","7": ""}]');
|
||
$p.set($(dataArea), JSON.stringify(keikakuData));
|
||
}
|
||
|
||
$(tableArea).append(keikakuTableEl);
|
||
|
||
keikakuTable[tableId] = jspreadsheet(document.getElementById('Keikaku_' + tableId), {
|
||
data: keikakuData,
|
||
columns: [{
|
||
type: 'text',
|
||
title: '#',
|
||
width: 25,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'calendar',
|
||
title: '日付',
|
||
width: 80,
|
||
align: 'center',
|
||
options: {
|
||
format: 'MM/DD',
|
||
months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
|
||
weekdays: ['日曜日', '月曜日', '木曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
|
||
weekdays_short: ['日', '月', '火', '水', '木', '金', '土']
|
||
},
|
||
readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '区分',
|
||
width: 60,
|
||
align: 'center',
|
||
}, {
|
||
type: 'text',
|
||
title: '施主名',
|
||
width: 140,
|
||
align: 'left',
|
||
}, {
|
||
type: 'number',
|
||
title: '請負金額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益率',
|
||
width: 60,
|
||
mask: '#,##0.0%;[Red]#,##0.0%',
|
||
align: 'right',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '担当者',
|
||
width: 60,
|
||
align: 'center',
|
||
}],
|
||
allowInsertColumn: false,
|
||
allowInsertRow: false,
|
||
allowManualInsertRow: false,
|
||
allowDeleteColumn: false,
|
||
allowDeletingAllRows: false,
|
||
columnSorting: false,
|
||
columnResize: false,
|
||
minSpareRows: 0,
|
||
editable: editableFlag,
|
||
contextMenu: false,
|
||
onchange: function (el, cell, x, y, value, oldValue) {
|
||
keikakuCalc(tableId);
|
||
}
|
||
});
|
||
|
||
keikakuTable[tableId].hideIndex();
|
||
|
||
}
|
||
|
||
let jissekiTable = {};
|
||
|
||
function createJissekiTable(tableId) {
|
||
let dataArea = '#Results_Description' + tableId;
|
||
let tableArea = '#table_' + tableId;
|
||
|
||
//スプレッドシートベース
|
||
let jissekiTableEl = document.createElement('div');
|
||
jissekiTableEl.classList.add('jissekiTable');
|
||
jissekiTableEl.id = 'jisseki_' + tableId;
|
||
|
||
//保管エリアからデータ取得
|
||
let descData = $(dataArea).val();
|
||
let jissekiData;
|
||
if (descData) {
|
||
jissekiData = JSON.parse(descData);
|
||
} else {
|
||
jissekiData = JSON.parse('[{"0": "1","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "2","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "3","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "4","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "5","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "6","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "7","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "8","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "9","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "10","1": "","2": "","3": "","4": "","5": "","6": "","7": ""}]');
|
||
$p.set($(dataArea), JSON.stringify(jissekiData));
|
||
}
|
||
|
||
$(tableArea).append(jissekiTableEl);
|
||
|
||
jissekiTable[tableId] = jspreadsheet(document.getElementById('jisseki_' + tableId), {
|
||
data: jissekiData,
|
||
columns: [{
|
||
type: 'text',
|
||
title: '#',
|
||
width: 25,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'calendar',
|
||
title: '日付',
|
||
width: 80,
|
||
align: 'center',
|
||
options: {
|
||
format: 'MM/DD',
|
||
months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
|
||
weekdays: ['日曜日', '月曜日', '木曜日', '水曜日', '木曜日', '金曜日', '土曜日'],
|
||
weekdays_short: ['日', '月', '火', '水', '木', '金', '土']
|
||
},
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '区分',
|
||
width: 60,
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '施主名',
|
||
width: 140,
|
||
align: 'left',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '請負金額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益率',
|
||
width: 60,
|
||
mask: '#,##0.0%;[Red]#,##0.0%',
|
||
align: 'right',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '担当者',
|
||
width: 60,
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}],
|
||
allowInsertColumn: false,
|
||
allowInsertRow: false,
|
||
allowManualInsertRow: false,
|
||
allowDeleteColumn: false,
|
||
allowDeletingAllRows: false,
|
||
columnSorting: false,
|
||
columnResize: false,
|
||
minSpareRows: 0,
|
||
editable: false,
|
||
contextMenu: false,
|
||
onchange: function (el, cell, x, y, value, oldValue) {
|
||
jissekiCalc(tableId);
|
||
}
|
||
|
||
});
|
||
|
||
jissekiTable[tableId].hideIndex();
|
||
|
||
}
|
||
|
||
let goukeiTable = {};
|
||
|
||
function createGoukeiTable(tableId) {
|
||
let dataArea = '#Results_Description' + tableId;
|
||
let tableArea = '#table_' + tableId;
|
||
|
||
//スプレッドシートベース
|
||
let goukeiTableEl = document.createElement('div');
|
||
goukeiTableEl.classList.add('goukeiTable');
|
||
goukeiTableEl.id = 'goukei_' + tableId;
|
||
|
||
//保管エリアからデータ取得
|
||
let descData = $(dataArea).val();
|
||
let goukeiData;
|
||
if (descData) {
|
||
goukeiData = JSON.parse(descData);
|
||
} else {
|
||
goukeiData = JSON.parse('[{"0": "当月","1": "計画","2": "","3": "","4": "","5": "","6": "請負金額"},{"0": "","1": "実績","2": "","3": "","4": "","5": "","6": "0%"},{"0": "","1": "差異","2": "","3": "","4": "","5": "","6": ""},{"0": "累計","1": "計画","2": "","3": "","4": "","5": "","6": "棟数"},{"0": "","1": "実績","2": "","3": "","4": "","5": "","6": "0%"},{"0": "","1": "差異","2": "","3": "","4": "","5": "","6": ""}]');
|
||
}
|
||
|
||
$(tableArea).append(goukeiTableEl);
|
||
|
||
goukeiTable[tableId] = jspreadsheet(document.getElementById('goukei_' + tableId), {
|
||
data: goukeiData,
|
||
columns: [{
|
||
type: 'text',
|
||
title: '#',
|
||
width: 25,
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '##',
|
||
width: 30,
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '棟数',
|
||
width: 60,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '請負金額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益率',
|
||
width: 60,
|
||
mask: '#,##0.00%;[Red]#,##0.00%',
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '利益額',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '累計達成率',
|
||
width: 160,
|
||
align: 'center',
|
||
//readOnly: true,
|
||
}],
|
||
allowInsertColumn: false,
|
||
allowInsertRow: false,
|
||
allowManualInsertRow: false,
|
||
allowDeleteColumn: false,
|
||
allowDeletingAllRows: false,
|
||
columnSorting: false,
|
||
columnResize: false,
|
||
minSpareRows: 0,
|
||
editable: false,
|
||
contextMenu: false,
|
||
});
|
||
|
||
goukeiTable[tableId].hideIndex();
|
||
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="0"]').attr('rowspan', 3);
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="0"]').css({
|
||
'vertical-align': 'middle',
|
||
'writing-mode': 'vertical-rl'
|
||
});
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="1"]').hide();
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="2"]').hide();
|
||
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="3"]').attr('rowspan', 3);
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="3"]').css({
|
||
'vertical-align': 'middle',
|
||
'writing-mode': 'vertical-rl'
|
||
});
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="4"]').hide();
|
||
$('#goukei_' + tableId + ' td[data-x="0"][data-y="5"]').hide();
|
||
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="1"]').attr('rowspan', 2);
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="1"]').css({
|
||
'font-size': '2.0em',
|
||
'font-weight': 'bold',
|
||
'vertical-align': 'middle',
|
||
});
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="2"]').hide();
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="4"]').attr('rowspan', 2);
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="4"]').css({
|
||
'font-size': '2.0em',
|
||
'font-weight': 'bold',
|
||
'vertical-align': 'middle',
|
||
});
|
||
$('#goukei_' + tableId + ' td[data-x="6"][data-y="5"]').hide();
|
||
$(function () {
|
||
$('#goukei_' + tableId + ' td').each(function () {
|
||
var test = $(this).text();
|
||
$(this).text(test.replace(/-/g, "▲"));
|
||
});
|
||
});
|
||
|
||
}
|
||
|
||
//計画 計算
|
||
function keikakuCalc(tableId) {
|
||
let dataArea = '#Results_Description' + tableId;
|
||
|
||
//基本単価・粗利
|
||
let tanka = parseFloat($('#Results_NumA').val().toString().replaceAll(/[¥,]/g, ''));
|
||
let arariPer = parseFloat($('#Results_NumB').val().toString().replaceAll(/[¥,]/g, ''));
|
||
let arari = Math.floor(tanka * arariPer / 100);
|
||
|
||
let keikakuData = keikakuTable[tableId].getData();
|
||
|
||
for (i = 0; i < keikakuData.length; i++) {
|
||
if (keikakuData[i][3] != '') {
|
||
if (keikakuData[i][4] == '') {
|
||
keikakuData[i][4] = tanka;
|
||
keikakuData[i][5] = arariPer;
|
||
keikakuData[i][6] = arari;
|
||
} else {
|
||
if (keikakuData[i][4] != '' && keikakuData[i][4] > 0 && keikakuData[i][6] != '' && keikakuData[i][6] > 0) {
|
||
let ukeoi = keikakuData[i][4];
|
||
let arari = keikakuData[i][6];
|
||
let arariPer = Math.floor(arari / ukeoi * 1000) / 10;
|
||
|
||
keikakuData[i][4] = ukeoi;
|
||
keikakuData[i][5] = arariPer;
|
||
keikakuData[i][6] = arari;
|
||
}
|
||
|
||
}
|
||
} else {
|
||
keikakuData[i][4] = '';
|
||
keikakuData[i][5] = '';
|
||
keikakuData[i][6] = '';
|
||
}
|
||
}
|
||
|
||
keikakuTable[tableId].setData(keikakuData);
|
||
$p.set($(dataArea), JSON.stringify(keikakuTable[tableId].getJson()));
|
||
|
||
summaryCalc();
|
||
}
|
||
|
||
//実績計算
|
||
function jissekiCalc(tableId) {
|
||
let dataArea = '#Results_Description' + tableId;
|
||
|
||
//let tanka = parseFloat($('#Results_NumA').val().toString().replaceAll(/[¥,]/g, ''));
|
||
//let arariPer = parseFloat($('#Results_NumB').val().toString().replaceAll(/[¥,]/g, ''));
|
||
//let arari = Math.floor(tanka * arariPer / 100);
|
||
|
||
let jissekiData = jissekiTable[tableId].getData();
|
||
|
||
for (i = 0; i < jissekiData.length; i++) {
|
||
if (jissekiData[i][3] != '') {
|
||
if (jissekiData[i][4] != '' && jissekiData[i][4] > 0) {
|
||
if (jissekiData[i][6] != '' && jissekiData[i][6] > 0) {
|
||
jissekiData[i][5] = Math.floor(jissekiData[i][6] / jissekiData[i][4] * 1000) / 10;
|
||
}
|
||
}
|
||
} else {
|
||
jissekiData[i][4] = '';
|
||
jissekiData[i][5] = '';
|
||
jissekiData[i][6] = '';
|
||
}
|
||
}
|
||
|
||
jissekiTable[tableId].setData(jissekiData);
|
||
$p.set($(dataArea), JSON.stringify(jissekiTable[tableId].getJson()));
|
||
|
||
summaryCalc();
|
||
}
|
||
|
||
//合計・累計計算
|
||
function summaryCalc() {
|
||
//受注j、着工c、完成k
|
||
//計画keikaku、実績jisseki
|
||
|
||
//累積テーブル初期化
|
||
let keikakuCumulative = {};
|
||
let jissekiCumulative = {};
|
||
for (let month1 = 4; month1 < 16; month1++) {
|
||
let month2;
|
||
(month1 >= 13) ? month2 = month1 - 12 : month2 = month1;
|
||
for (let i = 40; i <= 160; i += 60) {
|
||
let tableId = (month2 + i).toString().padStart(3, '0');
|
||
keikakuCumulative[tableId] = [0, 0, 0, 0, 0, 0];
|
||
jissekiCumulative[tableId] = [0, 0, 0, 0, 0, 0];
|
||
}
|
||
}
|
||
|
||
for (let month1 = 4; month1 < 16; month1++) {
|
||
let month2;
|
||
(month1 >= 13) ? month2 = month1 - 12 : month2 = month1;
|
||
|
||
for (let i = 0; i <= 120; i += 60) {
|
||
let tableId = (month2 + i).toString().padStart(3, '0');
|
||
|
||
let keikakuTableId = tableId;
|
||
let jissekiTableId = (month2 + i + 20).toString().padStart(3, '0');
|
||
let goukeiTableId = (month2 + i + 40).toString().padStart(3, '0');
|
||
|
||
let keikakuData = keikakuTable[keikakuTableId].getData();
|
||
let jissekiData = jissekiTable[jissekiTableId].getData();
|
||
let goukeiData = goukeiTable[goukeiTableId].getData();
|
||
|
||
let keikakuDataArea = '#Results_Description' + keikakuTableId;
|
||
let jissekiDataArea = '#Results_Description' + jissekiTableId;
|
||
let goukeiDataArea = '#Results_Description' + goukeiTableId;
|
||
|
||
let keikakuSum = [0, 0, 0, 0, 0, 0];
|
||
let jissekiSum = [0, 0, 0, 0, 0, 0];
|
||
|
||
for (j = 0; j < keikakuData.length; j++) {
|
||
if (keikakuData[j][4] > 0) {
|
||
keikakuSum[1] += parseFloat(keikakuData[j][4].toString().replaceAll(/[¥,]/g, '')); //請負金額計上
|
||
keikakuSum[3] += parseFloat(keikakuData[j][6].toString().replaceAll(/[¥,]/g, '')); //利益額計上
|
||
if (keikakuData[j][2] != "カウント外") {
|
||
keikakuSum[0]++; //棟数計上
|
||
keikakuSum[4] += parseFloat(keikakuData[j][4].toString().replaceAll(/[¥,]/g, '')); //請負金額計上
|
||
keikakuSum[5] += parseFloat(keikakuData[j][6].toString().replaceAll(/[¥,]/g, '')); //利益額計上
|
||
}
|
||
}
|
||
}
|
||
if (keikakuSum[4] > 0 && keikakuSum[5] > 0) {
|
||
//keikakuSum[2] = Math.floor(keikakuSum[2] / keikakuSum[0] * 100) / 100;
|
||
keikakuSum[2] = Math.floor(keikakuSum[5] / keikakuSum[4] * 10000) / 100;
|
||
}
|
||
|
||
for (j = 0; j < jissekiData.length; j++) {
|
||
if (jissekiData[j][4] > 0) {
|
||
jissekiSum[1] += parseFloat(jissekiData[j][4].toString().replaceAll(/[¥,]/g, '')); //請負金額計上
|
||
jissekiSum[3] += parseFloat(jissekiData[j][6].toString().replaceAll(/[¥,]/g, '')); //利益額計上
|
||
if (jissekiData[j][2] != "カウント外") {
|
||
jissekiSum[0]++; //棟数計上
|
||
jissekiSum[4] += parseFloat(jissekiData[j][4].toString().replaceAll(/[¥,]/g, '')); //請負金額計上
|
||
jissekiSum[5] += parseFloat(jissekiData[j][6].toString().replaceAll(/[¥,]/g, '')); //利益額計上
|
||
}
|
||
}
|
||
}
|
||
if (jissekiSum[4] > 0 && jissekiSum[5] > 0) {
|
||
//jissekiSum[2] = Math.floor(jissekiSum[2] / jissekiSum[0] * 100) / 100;
|
||
jissekiSum[2] = Math.floor(jissekiSum[5] / jissekiSum[4] * 10000) / 100;
|
||
}
|
||
|
||
//当月 計画
|
||
goukeiData[0][2] = keikakuSum[0]; //棟数
|
||
goukeiData[0][3] = keikakuSum[1]; //請負金額
|
||
goukeiData[0][4] = keikakuSum[2]; //利益率
|
||
goukeiData[0][5] = keikakuSum[3]; //利益額
|
||
|
||
//当月 実績
|
||
goukeiData[1][2] = jissekiSum[0]; //棟数
|
||
goukeiData[1][3] = jissekiSum[1]; //請負金額
|
||
goukeiData[1][4] = jissekiSum[2]; //利益率
|
||
goukeiData[1][5] = jissekiSum[3]; //利益額
|
||
|
||
//当月 差異
|
||
goukeiData[2][2] = jissekiSum[0] - keikakuSum[0];
|
||
goukeiData[2][3] = jissekiSum[1] - keikakuSum[1];
|
||
goukeiData[2][4] = jissekiSum[2] - keikakuSum[2];
|
||
goukeiData[2][5] = jissekiSum[3] - keikakuSum[3];
|
||
|
||
|
||
//累計
|
||
for (let month3 = month1; month3 < 16; month3++) {
|
||
let month2;
|
||
(month3 >= 13) ? month2 = month3 - 12 : month2 = month3;
|
||
let tableId = (month2 + i + 40).toString().padStart(3, '0');
|
||
|
||
keikakuCumulative[tableId][0] += keikakuSum[0];
|
||
keikakuCumulative[tableId][1] += keikakuSum[1];
|
||
keikakuCumulative[tableId][3] += keikakuSum[3];
|
||
keikakuCumulative[tableId][4] += keikakuSum[4];
|
||
keikakuCumulative[tableId][5] += keikakuSum[5];
|
||
if (keikakuCumulative[tableId][1] > 0) {
|
||
keikakuCumulative[tableId][2] = Math.floor(keikakuCumulative[tableId][5] / keikakuCumulative[tableId][4] * 10000) / 100;
|
||
} else {
|
||
keikakuCumulative[tableId][2] = 0;
|
||
}
|
||
|
||
jissekiCumulative[tableId][0] += jissekiSum[0];
|
||
jissekiCumulative[tableId][1] += jissekiSum[1];
|
||
jissekiCumulative[tableId][3] += jissekiSum[3];
|
||
jissekiCumulative[tableId][4] += jissekiSum[4];
|
||
jissekiCumulative[tableId][5] += jissekiSum[5];
|
||
if (jissekiCumulative[tableId][1] > 0) {
|
||
jissekiCumulative[tableId][2] = Math.floor(jissekiCumulative[tableId][5] / jissekiCumulative[tableId][4] * 10000) / 100;
|
||
} else {
|
||
jissekiCumulative[tableId][2] = 0;
|
||
}
|
||
|
||
}
|
||
|
||
//累計 計画
|
||
goukeiData[3][2] = keikakuCumulative[goukeiTableId][0]; //棟数
|
||
goukeiData[3][3] = keikakuCumulative[goukeiTableId][1]; //請負金額
|
||
goukeiData[3][4] = keikakuCumulative[goukeiTableId][2]; //利益率
|
||
goukeiData[3][5] = keikakuCumulative[goukeiTableId][3]; //利益額
|
||
|
||
//累計 実績
|
||
goukeiData[4][2] = jissekiCumulative[goukeiTableId][0]; //棟数
|
||
goukeiData[4][3] = jissekiCumulative[goukeiTableId][1]; //請負金額
|
||
goukeiData[4][4] = jissekiCumulative[goukeiTableId][2]; //利益率
|
||
goukeiData[4][5] = jissekiCumulative[goukeiTableId][3]; //利益額
|
||
|
||
//累計 差異
|
||
goukeiData[5][2] = jissekiCumulative[goukeiTableId][0] - keikakuCumulative[goukeiTableId][0];
|
||
goukeiData[5][3] = jissekiCumulative[goukeiTableId][1] - keikakuCumulative[goukeiTableId][1];
|
||
goukeiData[5][4] = jissekiCumulative[goukeiTableId][2] - keikakuCumulative[goukeiTableId][2];
|
||
goukeiData[5][5] = jissekiCumulative[goukeiTableId][3] - keikakuCumulative[goukeiTableId][3];
|
||
|
||
//達成率
|
||
if (keikakuCumulative[goukeiTableId][1] > 0 && jissekiCumulative[goukeiTableId][1] > 0) {
|
||
goukeiData[1][6] = (Math.floor(jissekiCumulative[goukeiTableId][1] / keikakuCumulative[goukeiTableId][1] * 10000) / 100).toString() + '%';
|
||
} else {
|
||
goukeiData[1][6] = '0%';
|
||
}
|
||
if (keikakuCumulative[goukeiTableId][0] > 0 && jissekiCumulative[goukeiTableId][0] > 0) {
|
||
goukeiData[4][6] = (Math.floor(jissekiCumulative[goukeiTableId][0] / keikakuCumulative[goukeiTableId][0] * 10000) / 100).toString() + '%';
|
||
} else {
|
||
goukeiData[4][6] = '0%';
|
||
}
|
||
|
||
goukeiTable[goukeiTableId].setData(goukeiData);
|
||
$p.set($(goukeiDataArea), JSON.stringify(goukeiTable[goukeiTableId].getJson()));
|
||
|
||
|
||
//goukeiテーブル見た目修正
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="0"]').attr('rowspan', 3);
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="0"]').css({
|
||
'vertical-align': 'middle',
|
||
'writing-mode': 'vertical-rl'
|
||
});
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="1"]').hide();
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="2"]').hide();
|
||
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="3"]').attr('rowspan', 3);
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="3"]').css({
|
||
'vertical-align': 'middle',
|
||
'writing-mode': 'vertical-rl'
|
||
});
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="4"]').hide();
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="0"][data-y="5"]').hide();
|
||
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="1"]').attr('rowspan', 2);
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="1"]').css({
|
||
'font-size': '2.0em',
|
||
'font-weight': 'bold',
|
||
'vertical-align': 'middle',
|
||
});
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="2"]').hide();
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="4"]').attr('rowspan', 2);
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="4"]').css({
|
||
'font-size': '2.0em',
|
||
'font-weight': 'bold',
|
||
'vertical-align': 'middle',
|
||
});
|
||
$('#goukei_' + goukeiTableId + ' td[data-x="6"][data-y="5"]').hide();
|
||
|
||
$(function () {
|
||
$('#goukei_' + goukeiTableId + ' td').each(function () {
|
||
var test = $(this).text();
|
||
$(this).text(test.replace(/-/g, "▲"));
|
||
});
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
}
|
||
|
||
let eigyoGaiTable;
|
||
|
||
function createEigyoGaiTable() {
|
||
let tableId = 'X';
|
||
let dataArea = '#Results_Description' + tableId;
|
||
|
||
//スプレッドシートベース
|
||
let eigyoGaiTableEl = document.createElement('div');
|
||
eigyoGaiTableEl.classList.add('eigyoGaiTable');
|
||
eigyoGaiTableEl.id = 'eigyoGaiTable';
|
||
|
||
//保管エリアからデータ取得
|
||
let descData = $(dataArea).val();
|
||
let eigyouGaiData;
|
||
if (descData) {
|
||
eigyouGaiData = JSON.parse(descData);
|
||
} else {
|
||
eigyouGaiData = JSON.parse('[{"0":"営業外収益","1":"計画","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"実績","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"営業外費用","1":"計画","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"実績","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"}]');
|
||
}
|
||
|
||
$(dataArea + 'Field').after(eigyoGaiTableEl);
|
||
|
||
eigyoGaiTable = jspreadsheet(document.getElementById('eigyoGaiTable'), {
|
||
data: eigyouGaiData,
|
||
columns: [{
|
||
type: 'text',
|
||
title: '#',
|
||
width: 40,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '項目',
|
||
width: 40,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '4月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '5月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '6月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '7月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '8月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '9月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '10月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '11月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '12月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '1月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '2月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '3月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}],
|
||
allowInsertColumn: false,
|
||
allowInsertRow: false,
|
||
allowManualInsertRow: false,
|
||
allowDeleteColumn: false,
|
||
allowDeletingAllRows: false,
|
||
columnSorting: false,
|
||
columnResize: false,
|
||
minSpareRows: 0,
|
||
editable: editableFlag,
|
||
contextMenu: false,
|
||
onchange: function (el, cell, x, y, value, oldValue) {
|
||
if (value == '') eigyoGaiTable.setValue(cell, '0', true);
|
||
$p.set($('#Results_DescriptionX'), JSON.stringify(eigyoGaiTable.getJson()));
|
||
}
|
||
});
|
||
|
||
eigyoGaiTable.hideIndex();
|
||
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="0"]').attr('rowspan', 2);
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="0"]').css({
|
||
'vertical-align': 'middle',
|
||
});
|
||
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="1"]').hide();
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="2"]').attr('rowspan', 2);
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="2"]').css({
|
||
'vertical-align': 'middle',
|
||
});
|
||
$('#eigyoGaiTable td[data-x="0"][data-y="3"]').hide();
|
||
|
||
let message = document.createElement('div');
|
||
message.innerText = '各月に発生した収益またはコストを入力する';
|
||
|
||
$(dataArea + 'Field').after(message);
|
||
|
||
}
|
||
|
||
let membersTable;
|
||
|
||
function createMembersTable() {
|
||
let tableId = 'Y';
|
||
let dataArea = '#Results_Description' + tableId;
|
||
|
||
//スプレッドシートベース
|
||
let membersTableEl = document.createElement('div');
|
||
membersTableEl.classList.add('membersTable');
|
||
membersTableEl.id = 'membersTable';
|
||
|
||
//保管エリアからデータ取得
|
||
let descData = $(dataArea).val();
|
||
let eigyouGaiData;
|
||
if (descData) {
|
||
eigyouGaiData = JSON.parse(descData);
|
||
} else {
|
||
eigyouGaiData = JSON.parse('[{"0":"人員増減","1":"所長","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"営業A","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"営業B","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"営業C","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"設計","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"IC","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"工務","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"事務","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"アシスタント","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"パート","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"アルバイト","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"},{"0":"0","1":"その他","2":"0","3":"0","4":"0","5":"0","6":"0","7":"0","8":"0","9":"0","10":"0","11":"0","12":"0","13":"0"}]');
|
||
}
|
||
|
||
$(dataArea + 'Field').after(membersTableEl);
|
||
|
||
membersTable = jspreadsheet(document.getElementById('membersTable'), {
|
||
data: eigyouGaiData,
|
||
columns: [{
|
||
type: 'text',
|
||
title: '#',
|
||
width: 40,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'text',
|
||
title: '項目',
|
||
width: 40,
|
||
align: 'center',
|
||
readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '4月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '5月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '6月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '7月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '8月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '9月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '10月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '11月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '12月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '1月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '2月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}, {
|
||
type: 'number',
|
||
title: '3月',
|
||
width: 80,
|
||
mask: '#,##0;[Red]#,##0',
|
||
align: 'right',
|
||
//readOnly: true,
|
||
}],
|
||
allowInsertColumn: false,
|
||
allowInsertRow: false,
|
||
allowManualInsertRow: false,
|
||
allowDeleteColumn: false,
|
||
allowDeletingAllRows: false,
|
||
columnSorting: false,
|
||
columnResize: false,
|
||
minSpareRows: 0,
|
||
editable: editableFlag,
|
||
contextMenu: false,
|
||
onchange: function (el, cell, x, y, value, oldValue) {
|
||
if (value == '') membersTable.setValue(cell, '0', true);
|
||
$p.set($('#Results_DescriptionY'), JSON.stringify(membersTable.getJson()));
|
||
}
|
||
});
|
||
|
||
membersTable.hideIndex();
|
||
|
||
$('#membersTable td[data-x="0"][data-y="0"]').attr('rowspan', 12);
|
||
$('#membersTable td[data-x="0"][data-y="0"]').css({
|
||
'vertical-align': 'middle',
|
||
'writing-mode': 'vertical-rl'
|
||
});
|
||
|
||
$('#membersTable td[data-x="0"][data-y="1"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="2"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="3"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="4"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="5"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="6"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="7"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="8"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="9"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="10"]').hide();
|
||
$('#membersTable td[data-x="0"][data-y="11"]').hide();
|
||
|
||
let message = document.createElement('div');
|
||
message.innerText = '各月の人員の増減を入力する';
|
||
|
||
$(dataArea + 'Field').after(message);
|
||
|
||
|
||
}
|
||
|
||
$p.events.after_send_Update = function (args) {
|
||
let status = $('#Results_Status').val();
|
||
if (status == '901') {
|
||
summaryRecord();
|
||
}
|
||
}
|
||
|
||
function summaryRecord() {
|
||
let classA = myData.ClassHash.ClassA;
|
||
let classB = myData.ClassHash.ClassB;
|
||
let classC = myData.ClassHash.ClassC;
|
||
let classD = myData.ClassHash.ClassD;
|
||
let classE = myData.ClassHash.ClassE;
|
||
let classH = myData.ClassHash.ClassH;
|
||
let classZ = myData.ClassHash.ClassZ;
|
||
|
||
//キー
|
||
//ClassA : エリア
|
||
//ClassB : 営業所
|
||
//ClassC : 所長
|
||
//ClassD : 担当役員
|
||
//ClassE : 主要ブランド
|
||
//ClassH : 大分類
|
||
|
||
//ClassK : ソート
|
||
//ClassZ : 年度
|
||
//ClassY : 月
|
||
//ClassV : 分類 受注 着工 完成
|
||
|
||
//(当月)計画
|
||
//Num001 : 棟数
|
||
//Num002 : 請負金額
|
||
//Num003 : 利益率
|
||
//Num004 : 利益額
|
||
//(当月)実績
|
||
//Num011 : 棟数
|
||
//Num012 : 請負金額
|
||
//Num013 : 利益率
|
||
//Num014 : 利益額
|
||
//(累計)計画
|
||
//Num021 : 棟数
|
||
//Num022 : 請負金額
|
||
//Num023 : 利益率
|
||
//Num024 : 利益額
|
||
//(累計)実績
|
||
//Num031 : 棟数
|
||
//Num032 : 請負金額
|
||
//Num033 : 利益率
|
||
//Num034 : 利益額
|
||
|
||
for (i = 1; i <= 12; i++) {
|
||
let sortKey;
|
||
|
||
if (i >= 4) {
|
||
sortKey = (i - 3).toString().padStart(3, '0');
|
||
} else {
|
||
sortKey = (i + 9).toString().padStart(3, '0');
|
||
}
|
||
|
||
let count = 1;
|
||
|
||
for (j = 40; j <= 160; j += 60) {
|
||
let tableId = (i + j).toString().padStart(3, '0');
|
||
let goukeiData = goukeiTable[tableId].getData();
|
||
|
||
let classHash = {
|
||
'ClassA': classA,
|
||
'ClassB': classB,
|
||
'ClassC': classC,
|
||
'ClassD': classD,
|
||
'ClassE': classE,
|
||
'ClassH': classH,
|
||
'ClassK': sortKey,
|
||
'ClassY': i,
|
||
'ClassV': count,
|
||
'ClassZ': classZ,
|
||
}
|
||
|
||
let numHash = {
|
||
'Num001': goukeiData[0][2],
|
||
'Num002': goukeiData[0][3],
|
||
'Num003': goukeiData[0][4],
|
||
'Num004': goukeiData[0][5],
|
||
'Num011': goukeiData[1][2],
|
||
'Num012': goukeiData[1][3],
|
||
'Num013': goukeiData[1][4],
|
||
'Num014': goukeiData[1][5],
|
||
'Num021': goukeiData[3][2],
|
||
'Num022': goukeiData[3][3],
|
||
'Num023': goukeiData[3][4],
|
||
'Num024': goukeiData[3][5],
|
||
'Num031': goukeiData[4][2],
|
||
'Num032': goukeiData[4][3],
|
||
'Num033': goukeiData[4][4],
|
||
'Num034': goukeiData[4][5],
|
||
}
|
||
|
||
let json = {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'Keys': [
|
||
'ClassA',
|
||
'ClassB',
|
||
'ClassV',
|
||
'ClassY',
|
||
'ClassZ',
|
||
],
|
||
'ClassHash': classHash,
|
||
'NumHash': numHash,
|
||
};
|
||
|
||
upsertRecord(json);
|
||
count++;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
function upsertRecord(json) {
|
||
let shukeiTable = '214922';
|
||
//集計情報を集計テーブルに保存・更新
|
||
//集計テーブル 214922
|
||
|
||
let url = 'https://' + location.hostname + '/pleasanter/api/items/' + shukeiTable + '/upsert';
|
||
|
||
$.ajax({
|
||
"type": "post",
|
||
"url": url,
|
||
"contentType": "application/json",
|
||
"data": JSON.stringify(json),
|
||
"success": function (data) {
|
||
console.log(data);
|
||
},
|
||
"error": function (data) {
|
||
console.log(data);
|
||
}
|
||
})
|
||
}
|
||
|
||
/*
|
||
//項目を読み取り専用にするスクリプト
|
||
//標準の読み取り専用チェックを入れると、値の参照や入れ込みのためのスクリプトに影響が出るため
|
||
//純粋に操作不能にするのみのスクリプトを作成
|
||
//第1引数:カラム番号(例:ClassA,DateAなど)
|
||
//第2引数:フォントカラー
|
||
//第3引数:背景カラー
|
||
//第4引数:文字の太さ(normal or bold)
|
||
//第2引数以降は任意
|
||
//-----------------------------------------------------------------------------------------------------------
|
||
$p.ex.columnReadOnly = function (col, color = '#000000', bgColor = '#f5f5f5', weight = 'normal') {
|
||
//テーブルの種類を取得
|
||
let ref = $('#ReferenceType').val();
|
||
|
||
if (col) {
|
||
//項目情報取得
|
||
let colName = ref + '_' + col;
|
||
console.log(colName + ' ReadOnly');
|
||
|
||
//CSS定義
|
||
$('#' + colName).css({
|
||
'pointer-events': 'none',
|
||
'color': color,
|
||
'background-color': bgColor,
|
||
'font-weight': weight,
|
||
'display': 'block'
|
||
});
|
||
|
||
//タブ移動禁止
|
||
$('#' + colName).prop('tabindex', '-1');
|
||
|
||
//前要素がある場合、非表示処理
|
||
let prev = $('#' + colName).prev();
|
||
while (prev.length) {
|
||
prev.css('display', 'none');
|
||
prev = prev.prev();
|
||
}
|
||
|
||
//次要素がある場合、非表示処理
|
||
let next = $('#' + colName).next();
|
||
while (next.length) {
|
||
next.css('display', 'none');
|
||
next = next.next();
|
||
}
|
||
|
||
//ラベルクリック禁止・表示あり
|
||
$('label[for="' + colName + '"').css({
|
||
'pointer-events': 'none',
|
||
'display': 'block'
|
||
});
|
||
|
||
//説明欄(テキストエリア)調整
|
||
//高さ300以上の場合は300固定
|
||
if ($('#' + colName).get(0).localName == 'textarea') {
|
||
let height = $('#' + colName).get(0).scrollHeight;
|
||
if (height > 300) height = 300;
|
||
$('#' + colName).css({
|
||
'overflow': 'hidden',
|
||
'height': height
|
||
});
|
||
}
|
||
|
||
} else {
|
||
console.log('error');
|
||
}
|
||
}
|
||
*/
|
||
|
||
$p.events.before_validate = function (args) {
|
||
//処理内容
|
||
//保存前処理
|
||
|
||
//諸経費合計の保存
|
||
$p.ex.keihiSummary();
|
||
|
||
//スラッシュ削除
|
||
//数字からカンマとスペースと円マーク削除
|
||
|
||
for (i = 1; i <= 12; i++) {
|
||
for (j = 0; j <= 120; j = j + 60) {
|
||
let desc1 = (i + j).toString().padStart(3, '0');
|
||
let descData = JSON.parse($('#Results_Description' + desc1).val());
|
||
//console.log($('#Results_Description' + desc1).val());
|
||
for (x = 0; x < descData.length; x++) {
|
||
descData[x]['2'] = descData[x]['2'] != '' ? descData[x]['2'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['3'] = descData[x]['3'] != '' ? descData[x]['3'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['7'] = descData[x]['7'] != '' ? descData[x]['7'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['4'] = descData[x]['4'] != '' ? parseFloat(descData[x]['4'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
descData[x]['5'] = descData[x]['5'] != '' ? parseFloat(descData[x]['5'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
descData[x]['6'] = descData[x]['6'] != '' ? parseFloat(descData[x]['6'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
}
|
||
$p.set($('#Results_Description' + desc1), JSON.stringify(descData));
|
||
//console.log($('#Results_Description' + desc1).val());
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
//諸経費合計計算
|
||
$p.ex.keihiSummary = function () {
|
||
let num001 = parseFloat($('#Results_Num001').val().toString().replaceAll(/[¥,]/g, '')); //人件費
|
||
let num002 = parseFloat($('#Results_Num002').val().toString().replaceAll(/[¥,]/g, '')); //販売費
|
||
let num011 = parseFloat($('#Results_Num011').val().toString().replaceAll(/[¥,]/g, '')); //減価償却費
|
||
let num012 = parseFloat($('#Results_Num012').val().toString().replaceAll(/[¥,]/g, '')); //地代・家賃
|
||
let num013 = parseFloat($('#Results_Num013').val().toString().replaceAll(/[¥,]/g, '')); //その他経費
|
||
let num014 = parseFloat($('#Results_Num014').val().toString().replaceAll(/[¥,]/g, '')); //本社経費
|
||
|
||
let sum = num001 + num002 + num011 + num012 + num013 + num014;
|
||
|
||
//諸経費合計の保存
|
||
$p.set($('#Results_Num015'), sum);
|
||
|
||
}
|
||
|
||
function updateAllRecord() {
|
||
let apiKey = '6504c8a807677a3a576e10327f3c19876c55736ee45d4a845796b9e7f5e087bfd4bd0d8184863da8cf1733ca635111432ab334aea59102b06a96ee6d2c05190d';
|
||
|
||
//let tableId = '214737'//全部
|
||
let tableId = '214737' //
|
||
|
||
$p.apiGet({
|
||
'id': tableId,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
},
|
||
'async': false,
|
||
'done': function (data) {
|
||
//console.log(data.Response.Data);
|
||
$.each(data.Response.Data, function (index, value) {
|
||
let resultId = value.ResultId;
|
||
for (i = 1; i <= 12; i++) {
|
||
for (j = 0; j <= 120; j = j + 60) {
|
||
let desc1 = (i + j).toString().padStart(3, '0');
|
||
if (value.DescriptionHash['Description' + desc1] != '') {
|
||
let descData = JSON.parse(value.DescriptionHash['Description' + desc1]);
|
||
//console.log(value.DescriptionHash['Description' + desc1]);
|
||
for (x = 0; x < descData.length; x++) {
|
||
descData[x]['2'] = descData[x]['2'] != '' ? descData[x]['2'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['3'] = descData[x]['3'] != '' ? descData[x]['3'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['7'] = descData[x]['7'] != '' ? descData[x]['7'].toString().replaceAll(/[,/]/g, '_') : '';
|
||
descData[x]['4'] = descData[x]['4'] != '' ? parseFloat(descData[x]['4'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
descData[x]['5'] = descData[x]['5'] != '' ? parseFloat(descData[x]['5'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
descData[x]['6'] = descData[x]['6'] != '' ? parseFloat(descData[x]['6'].toString().replaceAll(/[¥, ]/g, '')) : '';
|
||
}
|
||
value.DescriptionHash['Description' + desc1] = JSON.stringify(descData);
|
||
//console.log(value.DescriptionHash['Description' + desc1]);
|
||
} else {
|
||
//'[{"0": "1","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "2","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "3","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "4","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "5","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "6","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "7","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "8","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "9","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "10","1": "","2": "","3": "","4": "","5": "","6": "","7": ""}]'
|
||
value.DescriptionHash['Description' + desc1] = '[{"0": "1","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "2","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "3","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "4","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "5","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "6","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "7","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "8","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "9","1": "","2": "","3": "","4": "","5": "","6": "","7": ""},{"0": "10","1": "","2": "","3": "","4": "","5": "","6": "","7": ""}]';
|
||
}
|
||
}
|
||
}
|
||
|
||
//説明欄データ更新
|
||
$p.apiUpdate({
|
||
'id': resultId,
|
||
'data': {
|
||
'ApiVersion': 1.1,
|
||
'ApiKey': apiKey,
|
||
'DescriptionHash': value.DescriptionHash,
|
||
},
|
||
'done': function (data) {
|
||
//console.log(data);
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
})
|
||
})
|
||
},
|
||
'fail': function (data) {
|
||
console.log(data);
|
||
}
|
||
|
||
});
|
||
}
|
||
|