demo20230512/Browser_Local/js/BasicLogic.js

1909 lines
68 KiB
JavaScript
Raw Normal View History

2023-05-12 10:20:28 +08:00
/*
Logic Solution
WeeeCarbonFootprint
Basic Logics
*/
function isProductLCA(type, undefine) {
//console.log('isProductLCA: ', isProductLCA);
//alert('detecting isProductLCA');
if (type == undefine) return false;
else if (type == null) return false;
else if (type.indexOf('Product') != -1) return true
else return false;
}
function returnEmptyStringIfObjIsNullorUndefined(obj)
{
if (obj) return obj
else return '';
}
function setOrderIcon(order, order_items) {
for (var key in order_items) {
order_items[key].Order_Class = 'Order';
}
order_items[order].Order_Class = 'Order_Active'
}
function setSidebar(oi, n) {
var sidebar = [];
for (var o = 0; o < n; o++) {
sidebar.push(oi[o]);
}
return sidebar;
}
function aliasCompare(prop, value) {
if (prop === value)
return prop;
if (typeof (prop) === 'undefined' || prop.length == 0)
return;
if (prop.substring(prop.length - 1, prop.length) != ')')
return;
var i = prop.indexOf('(');
if (i < 0)
return;
var str1 = prop.substring(0, i);
var str2 = prop.substring(i + 1, prop.length - 1);
if (str1 == value)
return str1;
if (str2 == value)
return str2;
}
/**
* Get object key by its value
* @param {[Object]}
* @param {[...]} : value
* @return {[...]} : key
*/
function getKeyByValue(object, value) {
var val2 = value.trim();
for (var prop in object) {
if (object.hasOwnProperty(prop)) {
if (object[prop] === val2) {
return prop;
}
var testAlias = aliasCompare(object[prop], value)
if (typeof (testAlias) != 'undefined' && testAlias.length>0)
return prop;
} else {
}
}
//console.log('getKeyByValue', object, value);
}
/**
* Get object size of its properites
* @param {[Object]} obj
* @return {[Number]}
*/
function getObjectSize(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
}
// 計算有幾個全型字、中文字
function countLength(stringToCount) {
if (typeof stringToCount == 'string') {
var c = stringToCount.match(/[^ -~]/g);
return stringToCount.length + (c ? c.length : 0);
} else if (typeof stringToCount == 'object') {
var n = 0;
for (var i = 0; i < stringToCount.length; i++) {
var c = stringToCount[i][Object.keys(stringToCount[i])].match(/[^ -~]/g);
n += stringToCount[i][Object.keys(stringToCount[i])].length + (c ? c.length : 0)
}
return n;
}
}
function setTableHeaderAndToolMenu(oi, _st) {
for (var t = 0; t < oi.Table_Header.length; t++) {
// 工具列若有圈選項目則顯示
if (typeof oi.Radio != 'undefined') {
_st[t].item_radio_content = oi.Radio[t];
var radio = oi.Radio[0][Object.keys(oi.Radio[0])[0]];
_st[t].radio = radio[Setkeys(radio)[0]];
// 表單項目若有圈選項目則剔除非圈選項目之表單欄位
var table_header = SetTableHeader(oi.Table_Header[t], Object.keys(oi.Radio[t][0])[0]);
_st[t].Table_Header = table_header.th;
_st[t].Table_Header_Other = table_header.tho;
} else {
_st[t].Table_Header = oi.Table_Header[t];
}
// 計算表單總寬
_st[t].Table_Width = SetTableTotalWidth(_st[t].Table_Header, oi, t);
}
}
// View Table 若有 Radio 選項,則暫時剃除非選種項目之表單清單
function SetTableHeader(table_header, radio) {
var new_table_header = [];
var new_table_header_other = [];
for (var j = 0; j < table_header.length; j++) {
if (typeof table_header[j].Show == 'undefined') {
new_table_header.push(table_header[j]);
} else {
var non = false;
for (var s = 0; s < table_header[j].Show.length; s++) {
if (table_header[j].Show[s] == radio) {
new_table_header.push(table_header[j]);
non = true;
break;
}
}
if (!non) {
table_header[j].key = j;
new_table_header_other.push(table_header[j]);
}
}
}
return { th: new_table_header, tho: new_table_header_other };
}
// 設定表單各欄寬若為0則重新計算
function SetCellWidth(th) {
for (var i = 0; i < th.length; i++) {
for (var j = 0; j < th[i].length; j++) {
if (th[i][j].Width == 0) {
th[i][j].Width = countLength(th[i][j].Name) * 13;
}
}
}
return th;
}
// 欄位寬度加總
function add(table_header) {
var t = 0;
for (var i = 0; i < table_header.length; i++) {
t += table_header[i].Width;
}
return t;
}
// 計算表單總寬
function SetTableTotalWidth(th, oi, st) {
var Table_Width = add(th);
if (typeof st != 'undefined' && st != null) {
if (oi != null && typeof oi.Table_Left_Title != 'undefined' && oi.Table_Left_Title != null) {
if (oi.Table_Left_Title[st]) {
Table_Width += 200;
}
}
}
return Table_Width;
}
// Set Object order by id
function Setkeys(obj) {
return obj ? Object.keys(obj) : [];
}
// 將從 Server 端接收的資料重整為 View Data
function RewriteDataRowToKey(sd, th, C) {
var Data_Row = [];
var thl = th.length;
for (var j = 0; j < sd.length; j++) {
var dr = {};
for (var t = 0, _th = th; t < thl; t++) {
var keyname = setKeyTitle(_th[t].Keys);
var tdata = sd[j][keyname];
dr[keyname] = tdata;
if (keyname == 'DQI') {
dr.DQI = C.DQI[tdata];
} else if (keyname == 'MaterialType') {
dr.MaterialType = C.MaterialType[tdata];
}
dr.ID = sd[j].ID;
}
Data_Row.push(dr);
}
return Data_Row;
}
// 設定表單最下面的編輯列及上傳列
function SetTableFooter(oi, f, survey_table, st) {
var dl = survey_table[st].Table_Header.length;
var fl = f.toLowerCase();
if (typeof oi[f] != 'undefined') {
if (oi[f][st]) {
var th = survey_table[st].Table_Header;
survey_table[st][fl] = [];
for (var fu = 0; fu < dl - 1; fu++) {
survey_table[st][fl].push(
{ Type: 'edit', Width: th[fu].Width }
);
}
}
}
}
// 設定資料陣列各列 edit 狀態是否開啟
function SetEditState(dr) {
var editstate = {};
for (var d in dr) {
editstate[d] = {};
editstate[d].edit = false;
}
return editstate;
}
// 解析 json 數字串聯陣列
function mergeNumber(data) {
var a = 0;
var temp = '';
while (typeof data[a] != 'undefined') {
temp = temp + data[a];
a++;
}
return parseFloat(temp);
}
// 檢查 Product 中某欄位是否有填正確資料
function ProductCheckNone(pst, type) {
if (typeof pst != 'undefined' && typeof pst[type] != 'undefined' && pst[type] != null && pst[type] != '') {
return false;
}
return true;
}
// 初始化資料陣列,每頁十筆資料,每十頁為一組
function pageListItem(all_data, current_page) {
var total_page = 0;
if (all_data.length % 10 > 0) {
total_page = parseInt(all_data.length / 10) + 1;
} else {
total_page = all_data.length / 10;
}
var page_lists = [];
if (total_page <= 10) {
for (var i = 0; i < total_page; i++) {
page_lists.push(i + 1);
}
} else {
for (var i = 0; i < 10; i++) {
page_lists.push(i + 1);
}
}
// 若無資料,亦為一頁
if (page_lists.length == 0) {
page_lists.push(1);
}
return { total_page: total_page, page_lists: page_lists };
}
// 分頁資料切換
function pageListItemChange(all_data, current_page) {
var Data_Row = [];
var l = all_data.length - (current_page - 1) * 10 < 10 ? all_data.length - (current_page - 1) * 10 : 10;
for (var i = 0; i < l; i++) {
Data_Row.push(all_data[i + (current_page - 1) * 10]);
}
return Data_Row;
}
// 計算各月份加總
function caculateTotal(_st) {
var Total = [];
if (_st.Table_Header.length > 0) {
if (_st.Table_Header[_st.Table_Header.length - 1].Name == 'Total') {
for (var d = 0, _dr = _st.Data_Row; d < _st.Data_Row.length; d++) {
var total = 0;
for (var t = 0, _th = _st.Table_Header; t < _st.Table_Header.length - 1; t++) {
total += _dr[d][_th[t].Keys[0]];
}
Total.push(total);
}
}
}
return Total;
}
// 取得現階段瀏覽器縮放比例
// 整個案子沒用到
function getScreenRatioLevel() {
var screenCssPixelRatio = (window.outerWidth - 8) / window.innerWidth;
var zoomLevel = 'unknown';
var row_height = 30;
if (screenCssPixelRatio >= .32 && screenCssPixelRatio <= .51) {
zoomLevel = '-4';
} else if (screenCssPixelRatio <= .68) {
zoomLevel = '-3';
} else if (screenCssPixelRatio <= .76) {
zoomLevel = '-2';
} else if (screenCssPixelRatio <= .92) {
zoomLevel = '-1';
} else if (screenCssPixelRatio <= 1.0) {
zoomLevel = '0';
} else if (screenCssPixelRatio <= 1.11) {
zoomLevel = '1';
} else if (screenCssPixelRatio <= 1.26) {
zoomLevel = '2';
} else if (screenCssPixelRatio <= 1.51) {
zoomLevel = '3';
} else if (screenCssPixelRatio <= 1.76) {
zoomLevel = '4';
} else if (screenCssPixelRatio <= 2.02) {
zoomLevel = '5';
}
return row_height;
}
// 檢查必填欄位是否有填正確資料
function checkFilled(dr, th) {
var nf = [];
var st = dr.Data_Row_Edit;
var all_filled = true;
for (var t = 0; t < th.length; t++) {
nf.push(false);
if (typeof th[t].Require != 'undefined' && th[t].Require) {
var keyname = setKeyTitle(th[t].Keys);
if (th[t].Type == 'number') {
//console.log(keyname);
//console.log(st);
if (keyname == 'WaterBOD') {
var b = st.WaterBOD.data;
var c = st.WaterCOD.data;
var m = st.WaterCMD.data;
if (b == 0 && c == 0) {
nf[t] = true;
nf[t + 1] = true;
all_filled = false;
if (m == null) nf[t + 2] = true;
} else {
if (m == null) {
nf[t + 2] = true;
all_filled = false;
} else {
if (c != 0) st.Scalar.data = c * m;
else st.Scalar.data = b * m;
}
}
if (b == null) st.WaterBOD.data = 0;
if (c == null) st.WaterCOD.data = 0;
} else if (keyname == 'WaterCOD' || keyname == 'WaterCMD') {
} else if (st[keyname].data == null) {
if ((typeof dr.MaterialType != 'undefined' && dr.MaterialType == '間接材料' && keyname == 'Quantity')
|| (typeof st[keyname] != 'undefined' && keyname == 'InputParameterValue')) {
} else {
nf[t] = true;
all_filled = false;
}
}
} else if (th[t].Type == 'select') {
if (dr[keyname] == null) {
nf[t] = true;
all_filled = false;
}
} else if (th[t].Type == 'simapro') {
if (dr[keyname] == null) {
nf[t] = true;
all_filled = false;
}
} else if (th[t].Type == 'date') {
if (dr[keyname] == null || new Date(dr[keyname]) == 'Invalid Date') {
nf[t] = true;
all_filled = false;
}
}
}
}
return { all_filled: all_filled, error_list: nf };
}
// 將 Key 重新串接,讓 Data_Row 降至一階矩陣
function setKeyTitle(keys) {
var s = keys[0];
for (var i = 1; i < keys.length; i++) {
s += '_' + keys[i];
}
return s;
}
// Check CSV 的標題列是否跟當前表格符合,且需符合多國語言
function checkCSVFileHeader(scope, file_header, file_error_message) {
var _st = scope.Survey_Table[0];
var _oi = scope.oi[scope.current_item_id];
var nonheader = 0;
var leftheader = 0;
var _th = _oi.Table_Header[0];
if (typeof _st.Table_Left_Title != 'undefined') {
if (file_header[0] != _st.Table_Left_Title[0]) {
alert(file_error_message);
return false;
} else {
leftheader++;
}
}
// Radio 判斷
if (typeof scope.radio_id != 'undefined') {
var radio = _oi.Radio[0][0];
var first_header_compare = radio[Setkeys(radio)[0]];
_th = [];
for (var t = 0; t < _oi.Table_Header[0].length; t++) {
if ((typeof _oi.Table_Header[0][t].Show != 'undefined' && _oi.Table_Header[0][t].Show == first_header_compare)
|| typeof _oi.Table_Header[0][t].Show == 'undefined') {
_th.push(_oi.Table_Header[0][t]);
}
}
}
for (var th = 0; th < _th.length; th++) {
if (file_header[file_header.length - 1] == '') {
file_header.splice(file_header.length - 1, 1);
}
if (_th[th].Type == 'no' || _th[th].Type == 'formula' || _th[th].Name == 'Total' || _th[th].Type == 'upload' || _th[th].Type == 'simapro') {
nonheader++;
} else {
if (typeof _th[th].Name != 'undefined' && _th[th].Name != file_header[th - nonheader + leftheader]) {
alert(file_error_message);
return false;
}
}
}
return leftheader;
}
// Check CSV Upload 的資料列
function checkDataRowforTable(result_row, _st, st, scope, leftheader, radio_count) {
if (typeof result_row != 'undefined' && result_row != null && st != -1) {
if (result_row[result_row.length - 1] == '') {
result_row.splice(result_row.length - 1, 1);
}
if (leftheader == 0) {
return result_row;
} else if (leftheader == 1) {
if (typeof _st[st + 1] != 'undefined') {
if (result_row[0] == _st[st + 1].Table_Left_Title[0]) {
st++;
}
}
if (result_row[0] != _st[st].Table_Left_Title[0]) {
result_row.splice(0, 1);
var null_data = isNullData(result_row, '');
if (null_data) return null;
var total = 0;
for (var r = 0; r < result_row.length; r++) {
total += parseFloat(result_row[r]);
}
result_row.push(total);
return result_row;
}
}
}
}
function getRadioTableCount(result_row, _oi) {
var check_header = false;
if (typeof result_row != 'undefined' && typeof _oi.Radio != 'undefined') {
for (var o = 0; o < Setkeys(_oi.Radio[0][0]).length; o++) {
for (var t = 0, _th = _oi.Table_Header[0]; t < _oi.Table_Header[0].length; t++) {
if (typeof _th[t].Show != 'undefined' && result_row[0] == _oi.Radio[0][0][Setkeys(_oi.Radio[0][0])[o]]
|| typeof _th[t].Show == 'undefined' && result_row[0] == _th[t].Name) {
check_header = true;
return { count: 1, check_header: check_header };
}
}
}
}
return { count: 0, check_header: check_header };
}
function isNullData(result_row, compare) {
var null_data = true;
for (var r = 0; r < result_row.length; r++) {
if (result_row[r] != compare) null_data = false;
}
return null_data;
}
function setCSVDataToDataRow(row, d, _dr, _th, tlt, r, supplier) {
_dr.push({});
var nondata = 0;
if (tlt == null) {
_dr[d].Type = r;
for (var th = 0; th < _th.length; th++) {
var keyname = setKeyTitle(_th[th].Keys);
if (_th[th].Type == 'no') {
_dr[d].No = d + 1;
nondata++;
} else if (_th[th].Type == 'formula') {
// WasteWater 的 CMD 也要計算
// Transport 的 Tom*Km 也要計算
if (keyname != 'KgCO2e') _dr[d][keyname] = null;
else if (keyname == 'Scalar') {
if (_th[th].Name == 'Ton*Km') {
_dr[d][keyname] = (_dr[d].TransportWeight / 1000) * _dr[d].TransportDistance;
}
}
else _dr[d][keyname] = 0;
nondata++;
} else if (_th[th].Type == 'simapro') {
nondata++;
} else {
if (row[th - nondata] == '' || row[th - nondata] == 'null') {
if (_th[th].Type == 'number' && keyname != 'InputParameterValue') _dr[d][keyname] = 0;
else _dr[d][keyname] = null;
} else {
if (_th[th].Type == 'number') _dr[d][keyname] = parseFloat(row[th - nondata]);
else if (_th[th].Type == 'allnumber') _dr[d][keyname] = parseFloat(row[th - nondata]);
else _dr[d][keyname] = row[th - nondata];
if (keyname == 'SupplierCompany') {
for (var s in supplier) if (row[th - nondata] == supplier[s].Name) _dr[d][keyname + 'ID'] = supplier[s].ID;
}
}
}
}
} else {
var total = 0;
if (tlt == 'WorkRatio' || tlt == 'TotalHour' || tlt == 'TotalPower') {
for (var da in _dr[d - 1]) {
if (da != 'Total') {
if (tlt == 'WorkRatio') {
_dr[d][da] = _dr[d - 1][da] / 8;
} else if (tlt == 'TotalHour') {
_dr[d][da] = _dr[d - 3][da] * _dr[d - 2][da] * _dr[d - 1][da];
} else if (tlt == 'TotalPower') {
_dr[d][da] = _dr[d - 4][da] + _dr[d - 3][da] + _dr[d - 1][da] + _dr[d - 1][da];
}
total += _dr[d][da];
}
}
_dr[d].Total = total;
} else {
for (var th = 0; th < _th.length; th++) {
if (_th[th].Keys[0] != 'Total') _dr[d][_th[th].Keys[0]] = parseFloat(row[th]);
}
}
}
}
function setSelect(roi, scope, CONSTANTS, _dr, _th, ridx) {
// 資料來源要重新 load from server
var _st = scope.Survey_Table[0];
var parameter_config = setParameterNameAndParameterOptions(roi, scope, ridx);
var OPS1 = parameter_config.OPS1;
var OPS2 = parameter_config.OPS2;
var PIDname1 = parameter_config.PIDname1;
var PIDname2 = parameter_config.PIDname2;
for (var d = 0; d < _dr.length; d++) {
var ContaminationType = '';
var parameter_value1 = [];
var parameter_value2 = [];
if (roi != 'Refrigerant') {
parameter_value1 = getParameterValueForTable(OPS1, _dr[d][PIDname1]);
} else {
parameter_value1 = getParameterValueForTable(OPS1, _dr[d][PIDname1]);
parameter_value2 = getParameterValueForTable(OPS2, _dr[d][PIDname2]);
}
setDataRowSelectOption(_th, _dr[d], OPS1, CONSTANTS, OPS2, scope.Supplier);
if (typeof parameter_value1 != 'undefined') {
setDataRowSelectValue(_th, _dr[d], CONSTANTS, parameter_value1, parameter_value2, scope.Supplier);
}
}
}
function setParameterNameAndParameterOptions(roi, scope, ridx) {
var PIDname1 = 'ParameterID';
var PIDname2 = 'ParameterID2';
var OPS1 = scope[roi + 'Options'];
var OPS2 = null;
if (roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) {
PIDname1 = 'ParameterTypeID';
} else if (roi == 'WorkHour' || roi.indexOf('Usage') > -1) {
} else if (roi == 'Refrigerant') {
OPS1 = scope[roi + 'Options1'];
OPS2 = scope[roi + 'Options2'];
} else if (roi == 'Kitchen' || roi == 'Waste') {
if (roi == 'Waste') {
OPS1 = scope[roi + 'Options' + (ridx + 1)];
PIDname1 = 'ParameterID';
}
} else {
if (roi == 'Transport' || roi == 'WasteTransport' || roi == 'FireEquipment' || roi == 'OtherCompound') {
PIDname1 = 'ParameterID';
}
}
return { PIDname1: PIDname1, PIDname2: PIDname2, OPS1: OPS1, OPS2: OPS2 };
}
function setDataRowSelectOption(_th, _drd, OPS1, CONSTANTS, OPS2, supplier) {
var ContaminationType = '';
for (var th = 0; th < _th.length; th++) {
var keyname = setKeyTitle(_th[th].Keys);
if (keyname.indexOf('ContaminationType') > -1) {
ContaminationType = keyname;
_drd[keyname + 'select'] = setSelectOptions(OPS1);
} else if (keyname.indexOf('ProcessType') > -1) {
if (typeof _drd[ContaminationType] != 'undefined' && _drd[ContaminationType] != '')
_drd[keyname + 'select'] = setSelectOptions(OPS1[_drd[ContaminationType]]);
} else if (keyname == 'Area') {
_drd[keyname + 'select'] = setSelectOptions(OPS1);
} else if (keyname == 'FuelType') {
if (typeof _drd.Area != 'undefined' && _drd.Area != '')
_drd[keyname + 'select'] = setSelectOptions(OPS1[_drd.Area]);
} else if (keyname == 'Year') {
if (typeof _drd.Area != 'undefined' && typeof _drd.FuelType != 'undefined' && _drd.FuelType != '' && _drd.FuelType != '')
_drd[keyname + 'select'] = setSelectOptions(OPS1[_drd.Area][_drd.FuelType]);
} else if (keyname == 'ParameterType') {
_drd.ParameterTypeselect = setSelectOptions(OPS1);
} else if (keyname == 'Unit') {
_drd.Unitselect = setSelectOptions(OPS2);
} else if (keyname == 'TransportType') {
_drd[keyname + 'select'] = setSelectOptions(OPS1);
} else if (keyname == 'VanType') {
if (typeof _drd.TransportType != 'undefined' && _drd.TransportType != '')
_drd[keyname + 'select'] = setSelectOptions(OPS1[_drd.TransportType]);
} else if (keyname == 'DQI') {
_drd[keyname + 'select'] = CONSTANTS[keyname];
} else if (keyname == 'Source') {
_drd[keyname + 'select'] = setSelectOptions(OPS1);
} else if (keyname == 'RefrigerantType') {
_drd[keyname + 'select'] = setSelectOptions(OPS1);
} else if (keyname == 'EquipmentType') {
_drd[keyname + 'select'] = setSelectOptions(OPS2);
} else if (keyname == 'MaterialType') {
_drd[keyname + 'select'] = CONSTANTS[keyname];
} else if (keyname == 'Type') {
_drd[keyname + 'select'] = CONSTANTS[keyname];
} else if (keyname == 'SupplierCompany') {
_drd[keyname + 'select'] = supplier;
}
}
}
function setDataRowSelectValue(_th, _drd, CONSTANTS, parameter_value1, parameter_value2, supplier) {
for (var th = 0; th < _th.length; th++) {
var keyname = setKeyTitle(_th[th].Keys);
if (keyname.indexOf('ContaminationType') > -1) {
ContaminationType = keyname;
_drd[keyname] = parameter_value1[1];
} else if (keyname.indexOf('ProcessType') > -1) {
_drd[keyname] = '\"' + parameter_value1[2] + '\"';
} else if (keyname == 'Area') {
_drd[keyname] = parameter_value1[1];
} else if (keyname == 'FuelType') {
_drd[keyname] = '\"' + parameter_value1[2] + '\"';
} else if (keyname == 'Year') {
_drd[keyname] = '\"' + parameter_value1[3] + '\"';
} else if (keyname == 'ParameterType') {
_drd.ParameterType = parameter_value1[1];
} else if (keyname == 'TransportType') {
_drd[keyname] = parameter_value1[1];
} else if (keyname == 'VanType') {
_drd[keyname] = '\"' + parameter_value1[2] + '\"';
} else if (keyname == 'DQI') {
_drd[keyname] = CONSTANTS[keyname][_drd[keyname]];
} else if (keyname == 'Source') {
_drd[keyname] = parameter_value1[1];
} else if (keyname == 'RefrigerantType') {
_drd[keyname] = parameter_value1[1];
} else if (keyname == 'EquipmentType') {
_drd[keyname] = parameter_value2[1];
} else if (keyname == 'Unit') {
} else if (keyname == 'MaterialType') {
_drd[keyname] = CONSTANTS.MaterialType[_drd[keyname]];
} else if (keyname == 'Type') {
_drd[keyname] = CONSTANTS.Type[_drd[keyname]];
} else if (keyname == 'SupplierCompany') {
for (var i in supplier) {
if (_drd[keyname + 'ID'] == supplier[i].ID) _drd[keyname] == supplier[i].Name;
}
}
}
}
function setPageProductName(MyLCAdata, ps, ProductID) {
Query(MyLCAdata, 'Product', 'Get').then(function (response) {
ps.Product = response;
ps.Product_Selected = getUniqueItem(ProductID, response, null, 'ID');
ps.ProductSelected = getUniqueItem(ProductID, response, null, 'ID');
});
}
function setTableSelectOptionsToScope(response, scope) {
var roi = scope.current_item;
if (roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) {
scope.Material = response.materials;
scope[roi + 'Options'] = getOptionsName(roi, 0, response);
scope[roi + 'UnitOptions'] = getOptionsName(roi, 1, response);
} else if (roi == 'WorkHour' || roi.indexOf('Usage') > -1) {
scope[roi] = response[roi + 's'];
scope[roi + 'Options'] = getOptionsName(roi, 0, response);
} else {
scope[roi] = response[roi + 's'];
if (typeof scope.oi[scope.current_item_id].Radio != 'undefined') {
var _radio = scope.oi[scope.current_item_id].Radio[0][0];
for (var rd = 0; rd < Setkeys(_radio).length; rd++) {
for (var o in _radio) {
if (_radio[o] == scope.Survey_Table[0].radio && o == Setkeys(_radio)[rd]) {
// 有RADIO資料
scope.radio_id = rd;
if (roi != 'Kitchen') {
scope[roi + 'Options'] = getOptionsName(roi, rd, response);
scope[roi + 'Options1'] = getOptionsName(roi, 0, response);
scope[roi + 'Options2'] = getOptionsName(roi, 1, response);
} else {
scope[roi + 'Options'] = getOptionsName(roi, 0, response);
}
break;
}
}
}
}
// 沒有 Radio Button 的表的 Options 解析
if (roi == 'Transport' || roi == 'WasteTransport' || roi == 'Vehicle' || roi == 'GasolineEquipment' || roi == 'FireEquipment' || roi == 'OtherCompound') {
scope[roi + 'Options'] = getOptionsName(roi, 0, response);
} else if (roi == 'Refrigerant') {
scope[roi + 'Options1'] = getOptionsName(roi, 0, response);
scope[roi + 'Options2'] = getOptionsName(roi, 1, response);
}
}
}
function getParameterValueForTable(OPS, compare) {
for (var ops1 in OPS) {
for (var ops2 in OPS[ops1]) {
for (var ops3 in OPS[ops1][ops2]) {
if (typeof OPS[ops1][ops2][ops3] == 'string') {
if (compare == OPS[ops1][ops2][ops3]) {
return { 1: ops1, 2: ops2 };
}
} else {
for (var ops4 in OPS[ops1][ops2][ops3]) {
if (compare == OPS[ops1][ops2][ops3][ops4]) {
return { 1: ops1, 2: ops2, 3: ops3 };
}
}
}
}
}
}
}
function setMonthlyTableSendData(scope, st, _tth, _dr) {
var send_data = {};
var _st = scope.Survey_Table[st];
send_data.ID = 0;
send_data.Index = _tth;
send_data.Type = st;
send_data.LCAID = scope.product_survey.LCA.ID;
var roi = scope.current_item;
var row_length = 5;
for (var k = 0, _k = Setkeys(_st.Table_Left_Title) ; k < scope.tempcount; k++) {
send_data[_k[k + 1]] = _dr[k + st * row_length][Setkeys(_dr[k + st * row_length])[_tth]];
}
return send_data;
}
function getOptionsName(roi, n, response) {
var opname = '';
if (n == 0) opname = 'options';
else opname = 'options' + (n + 1);
if ((roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) && n == 0) opname = 'optiontypes';
else if ((roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) && n == 1) opname = 'optionunits';
if (roi != 'Vehicle' && roi != 'GasolineEquipment' && roi != 'Kitchen' && roi != 'WorkHour' && roi.indexOf('Usage') == -1) return setOptions(response[opname], 2);
else return setOptions(response[opname], 3);
}
function setOptions(_res, t) {
var scope = {};
var k = 0;
for (var op in _res) {
if (typeof _res[op] != 'undefined' && _res[op] != null) {
var t2 = setOptionsArray(_res, op, scope);
if (t == 2) {
scope[t2.first][t2.second] = [];
scope[t2.first][t2.second].push(op);
} else if (t == 3) {
var t3 = setOptionsArray(t2.second, null, scope[t2.first]);
scope[t2.first][t3.first][t3.second] = [];
scope[t2.first][t3.first][t3.second].push(op);
}
}
}
return scope;
}
function setOptionsArray(res, op, scope) {
var str = '';
var d = -1;
if (typeof res[op] != 'undefined') str = res[op];
else str = res;
d = str.indexOf(',');
var ds = distributeString(str, d);
var first = ds.first;
var second = ds.second;
if (typeof scope[first] == 'undefined') scope[first] = [];
return { first: first, second: second };
}
function distributeString(str, idx) {
if (idx > -1) return { first: str.substr(0, idx).trim(), second: str.substr(idx + 1).trim() };
else return { first: str.trim(), second: str.trim() };
}
function rewriteParameterIDtoParameterType(roi, DR, SD, res, radio_id) {
var opname = 'options';
var PIDname = 'ParameterID';
if (roi == 'Waste' || roi == 'Transport' || roi == 'WasteTransport' || roi == 'FireEquipment' || roi == 'OtherCompound') {
PIDname = 'ParameterID';
} else if (roi == 'Refrigerant') {
splitParameterValue(DR, SD, res[opname], PIDname, opname, roi);
splitParameterValue(DR, SD, res['options2'], 'ParameterID2', 'options2', roi);
return false;
}
if (typeof radio_id != 'undefined' && roi == 'Waste') {
if (radio_id == SD.Type) {
if (SD.Type != 0) opname = opname + (SD.Type + 1);
}
}
splitParameterValue(DR, SD, res[opname], PIDname, opname, roi);
}
function splitParameterValue(DR, SD, options, PIDname, opname, roi) {
var PID = SD[PIDname];
if (PID != null) {
var pv = splitValue(options[PID]);
var first = pv.first;
var second = pv.second;
if (roi == 'Waste' || roi == 'Transport' || roi == 'WasteTransport' || roi == 'FireEquipment' || roi == 'OtherCompound') {
for (var dre in DR) {
if (dre.indexOf('ContaminationType') > -1) {
DR[dre] = first;
} else if (dre.indexOf('ProcessType') > -1) {
DR[dre] = second;
} else if (dre.indexOf('TransportType') > -1) {
DR[dre] = first;
} else if (dre.indexOf('VanType') > -1) {
DR[dre] = second;
} else if (dre.indexOf('Source') > -1) {
DR[dre] = first;
}
}
} else if (roi == 'Vehicle' || roi == 'GasolineEquipment' || roi == 'Kitchen') {
var third = splitValue(second).second;
second = splitValue(second).first;
for (var dre in DR) {
if (dre.indexOf('Area') > -1) {
DR[dre] = first;
} else if (dre.indexOf('FuelType') > -1) {
DR[dre] = second;
} else if (dre.indexOf('Year') > -1) {
DR[dre] = third;
}
}
} else if (roi == 'Refrigerant') {
for (var dre in DR) {
if (dre.indexOf('RefrigerantType') > -1 && opname == 'options') {
DR[dre] = first;
} else if (dre.indexOf('EquipmentType') > -1 && opname == 'options2') {
DR[dre] = first;
}
}
}
}
}
function splitValue(pv) {
var one = '';
var two = '';
if (pv.indexOf(',') > -1) {
two = pv.substr(pv.indexOf(',') + 1);
one = pv.substr(0, pv.indexOf(','));
} else {
two = pv;
one = pv;
}
return { first: one.trim(), second: two.trim() }
}
function setSelectOptions(options) {
var ops = [];
for (var opt in options) {
var addops = true;
for (var s = 0; s < ops.length; s++) {
if (ops[s] == opt) {
addops = false;
break;
}
}
if (addops) {
ops.push(opt);
}
}
return ops;
}
function createCSVUploadElement() {
var upload = createUploadElement('csv');
return upload;
}
function createUploadElement(accept_type) {
var upload = document.createElement('input');
upload.setAttribute('type', 'file');
upload.setAttribute('style', '0');
upload.setAttribute('id', 'getFile');
if (typeof accept_type != 'undefined') {
upload.setAttribute('accept', accept_type);
}
return upload;
}
function getUniqueItem(currentItem, compareItem, returnParameter, compareItemParameter) {
if (typeof currentItem != 'undefined') {
for (var i = 0; i < compareItem.length; i++) {
if (currentItem == compareItem[i][compareItemParameter]) {
if (returnParameter != null) return compareItem[i][returnParameter];
else return compareItem[i];
}
}
}
return null;
}
function setRowDataFromApiData(response) {
var all = [];
for (var r = 0; r < response.length; r++) {
all[r] = {};
for (var key in response[r]) {
if (key == 'CreatedDate' || key == 'ReplyDate') {
if (response[r][key] != null) {
all[r][key] = new Date(response[r][key]).toLocaleString();
} else {
all[r][key] = null;
}
} else {
all[r][key] = response[r][key];
}
}
}
return all;
}
function setMonthlyTableHeader(ps, MC, table_header) {
console.log(ps.Start_Date);
console.log(ps.End_Date);
if (typeof ps.Start_Date != 'undefined' && typeof ps.End_Date != 'undefined') {
var sy = parseInt(ps.Start_Date.substr(0, 4));
var sm = parseInt(ps.Start_Date.substr(5, 2));
var ey = parseInt(ps.End_Date.substr(0, 4));
var em = parseInt(ps.End_Date.substr(5, 2));
var l = (ey - sy) * 12 + (em - sm + 1);
for (var ad = 0; ad < l; ad++) {
var m = sm + ad;
var y = 0;
while (m > 12) {
m = m - 12;
y++;
}
var key = sy + y + '-' + (m % 12 != 0 ? m % 12 : 12);
var mcdata = { "Name": MC[m % 12 != 0 ? m % 12 - 1 : 11].Name, "Type": "number", "Width": 70, "Keys": [key] };
table_header.push(mcdata);
}
table_header.push({ "Name": "Total", "Keys": ["Total"], "Type": "text", "Width": 0 });
}
}
function setCSVHeader(tlt, th) {
var csv_header = '';
if (typeof tlt != 'undefined') {
table_left_title = Setkeys(tlt);
csv_header += tlt[table_left_title[0]] + ',';
}
for (var t = 0, th; t < th.length; t++) {
if (th[t].Type != 'no' && th[t].Type != 'formula' && th[t].Type != 'upload' && th[t].Name != 'Total' && th[t].Type != 'simapro') {
csv_header += th[t].Name + ',';
}
}
return csv_header;
}
function setCSVRow(tlt, th, dr, supplier) {
var csv_row = '';
for (var d = 0; d < dr.length; d++) {
if (typeof tlt != 'undefined') {
table_left_title = Setkeys(tlt);
if (table_left_title[d + 1] == 'WorkRatio' || table_left_title[d + 1] == 'TotalHour' || table_left_title[d + 1] == 'TotalPower') {
break;
}
csv_row += tlt[table_left_title[d + 1]] + ',';
}
for (var t = 0; t < th.length; t++) {
var keyname = setKeyTitle(th[t].Keys);
if (th[t].Type != 'no' && th[t].Type != 'formula' && th[t].Type != 'upload' && th[t].Name != 'Total' && th[t].Type != 'simapro') {
if (dr[d][keyname] == null) dr[d][keyname] = '';
if (keyname == 'SupplierCompany') {
for (var s in supplier) if (dr[d][keyname + 'ID'] == supplier[s].ID) dr[d][keyname] = supplier[s].Name;
}
csv_row += dr[d][keyname] + ',';
}
}
csv_row += '\n';
}
return csv_row;
}
function setCSVSingleTable(tlt, th, dr, supplier) {
var csv = '';
var csv_header = setCSVHeader(tlt, th);
csv_header += '\n';
var csv_row = setCSVRow(tlt, th, dr, supplier);
csv += csv_header + csv_row + '\n';
return csv;
}
function setCSVSingleHeader(scope, st, rc) {
var table_header = [];
var all_header = [];
var _st = scope.Survey_Table;
var radio = [scope.current_item];
if (st > -1) {
if (typeof scope.radio_id != 'undefined') {
radio = [];
var _rad = scope.oi[scope.current_item_id].Radio[0][0];
radio.push(_rad[Setkeys(_rad)[rc]]);
}
all_header = scope.oi[scope.current_item_id].Table_Header[st];
table_header = setRadioSingleHeader(all_header, radio, st);
}
return table_header;
}
function setRadioSingleHeader(all_header, radio, r) {
var table_header = [];
if (typeof all_header != 'undefined' && all_header != null) {
for (var h = 0; h < all_header.length; h++) {
if (typeof all_header[h].Show == 'undefined' || all_header[h].Show[0] == radio[r]) {
table_header.push(all_header[h]);
}
}
}
return table_header;
}
function setCSVSingleRow(roi, all_data, table_header, r) {
var table_row = [];
var n = 0;
for (var d = 0; d < all_data.length; d++) {
var m = r;
var type = null;
var set_row = true;
if (roi.indexOf('LCI') == -1) {
type = all_data[d].Type;
} else {
if (roi.indexOf('Direct') > -1) m = 0;
else if (roi.indexOf('Indirect') > -1) m = 1;
else if (roi.indexOf('Wrap') > -1) m = 2;
type = all_data[d].MaterialType;
}
if (typeof type != 'undefined' && m != type && roi != 'Vehicle') {
set_row = false;
}
if (set_row) {
table_row.push({});
for (var h = 0; h < table_header.length; h++) {
for (var key in all_data[d]) {
table_row[n][key] = all_data[d][key];
}
}
n++;
}
}
return table_row;
}
function createCSVDownloadLink(csv, roi) {
var textFileAsBlob = new Blob([csv], { type: 'text;charset=utf-8,' });
var fileNameToSaveAs = roi + '.txt';
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
if (window.webkitURL != null) {
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else {
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
return downloadLink;
}
function createEXCELDownloadLink() {
var downloadLink = document.createElement("a");
downloadLink.download = 'application/vnd.ms-excel';
return downloadLink;
}
function getCacheName(roi) {
if (roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) return 'Material';
else return roi;
}
function setApiConfig(roi, LCAID) {
var parameter_api_config = {};
var delete_api_config = {};
var save_all_api_config = {};
if (roi.indexOf('LCI') > -1 || roi.indexOf('High') > -1) {
parameter_api_config.Controller = 'Material';
delete_api_config.Controller = 'Material';
if (roi.indexOf('Direct') > -1) delete_api_config.pa2 = 0;
else if (roi.indexOf('Indirect') > -1) delete_api_config.pa2 = 1;
else if (roi.indexOf('Wrap') > -1) delete_api_config.pa2 = 2;
save_all_api_config.Controller = 'Material';
} else if (roi == 'WorkHour' || roi.indexOf('Usage') > -1) {
delete_api_config.Controller = roi;
save_all_api_config.Controller = roi;
} else {
parameter_api_config.Controller = roi;
delete_api_config.Controller = roi;
save_all_api_config.Controller = roi;
}
parameter_api_config.Action = 'Get' + parameter_api_config.Controller + 's';
parameter_api_config.pa1 = LCAID;
delete_api_config.Action = 'Delete' + delete_api_config.Controller + 's';
delete_api_config.pa1 = LCAID;
save_all_api_config.Action = 'Save' + save_all_api_config.Controller + 's';
return { parameter_api_config: parameter_api_config, delete_api_config: delete_api_config, save_all_api_config: save_all_api_config };
}
// Return array of string values, or NULL if CSV string not well formed.
function CSVtoArray(text) {
var re_valid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*)*$/;
var re_value = /(?!\s*$)\s*(?:'([^'\\]*(?:\\[\S\s][^'\\]*)*)'|"([^"\\]*(?:\\[\S\s][^"\\]*)*)"|([^,'"\s\\]*(?:\s+[^,'"\s\\]+)*))\s*(?:,|$)/g;
// Return NULL if input string is not well formed CSV string.
console.log(re_valid.test(text));
if (!re_valid.test(text)) return null;
var a = []; // Initialize array to receive values.
text.replace(re_value, // "Walk" the string using replace with callback.
function (m0, m1, m2, m3) {
// Remove backslash from \' in single quoted values.
if (m1 !== undefined) a.push(m1.replace(/\\'/g, "'"));
// Remove backslash from \" in double quoted values.
else if (m2 !== undefined) a.push(m2.replace(/\\"/g, '"'));
else if (m3 !== undefined) a.push(m3);
return ''; // Return empty string.
});
// Handle special case of empty last value.
if (/,\s*$/.test(text)) a.push('');
return a;
}
function setUncommonData(roi, _dr, send_data, CONSTANTS) {
if (roi.indexOf('Transport') > -1) {
if (typeof _dr.TransportWeight != 'undefined' && _dr.TransportWeight != null) {
_dr.Scalar = (_dr.TransportWeight / 1000) * _dr.TransportDistance;
} else {
_dr.Scalar = 0;
}
send_data.Scalar = _dr.Scalar;
} else if (roi.indexOf('Vehicle') > -1) {
_dr.Type = CONSTANTS.Type[_dr.Type];
} else if (roi.indexOf('High') > -1) {
_dr.MaterialType = CONSTANTS.MaterialType[_dr.MaterialType];
}
}
function getDataRange(iMPLCA, CONSTANTS) {
var date_range = 0;
if (iMPLCA.StartDate != null && iMPLCA.EndDate != null) {
var sdate = new Date(iMPLCA.StartDate);
var edate = new Date(iMPLCA.EndDate);
var sy = sdate.getFullYear();
var sm = sdate.getMonth();
var sd = sdate.getDate();
var ey = edate.getFullYear();
var em = edate.getMonth();
var ed = edate.getDate();
var k = 0;
for (var y = sy; y < ey + 1; y++) {
if (y != ey) {
for (var m = sm; m < 12; m++) {
date_range += CONSTANTS.days[m];
}
} else {
for (var m = 0; m < em; m++) {
date_range += CONSTANTS.days[m];
}
}
}
date_range = date_range - sd + ed + 1;
}
date_range = date_range / 365;
return date_range;
}
function getCONSTANTSIndex(CONSTANTS, keyname, compare) {
for (var q = 0; q < CONSTANTS[keyname].length; q++) {
if (compare == CONSTANTS[keyname][q]) return q;
}
}
function surveyFormHeight(width, dr, footer_upload) {
var sh = 30;
if (typeof width != 'undefined' && width > 882) sh += 17;
if (typeof dr != 'undefined') {
for (var d = 0, _dr = dr; d < dr.length; d++) {
sh += 29;
if (typeof _dr[d].ChildMaterials != 'undefined' && _dr[d].child_expand) {
for (var dc = 0, _drc = _dr[d].ChildMaterials; dc < _dr[d].ChildMaterials.length; dc++) {
sh += 29;
}
}
}
}
if (typeof footer_upload != 'undefined') sh += 31;
if (sh > 595) sh = 595;
sh += 'px';
return sh;
}
function async($q, multi_language_fn_parameter_config) {
var deferred = $q.defer();
SetMultiLanguageToAllConfig(multi_language_fn_parameter_config, function (success) {
if (success) {
deferred.resolve(success);
} else {
deferred.reject(success);
}
});
return deferred.promise;
}
// MultiLanguage
function SetMultiLanguageToAllConfig(pa, callback) {
var cookie_culture = pa._culture;
var SURVEY_MODEL_CONFIG = pa.SURVEY;
var LCA_MODEL_CONFIG = pa.LCA;
var SIMAPRO_MODEL_CONFIG = pa.SIMAPRO;
var CONSTANTS_CONFIG = pa.CONSTANTS;
var MultiLanguage_CONFIG = pa.MultiLanguage;
var PRODUCT_MODEL_CONFIG = pa.PRODUCT;
var FAB_MODEL_CONFIG = pa.FAB;
var REPORT_MODEL_CONFIG = pa.REPORT;
var MANAGEMENT_MODEL_CONFIG = pa.MANAGEMENT;
var _culture = 'zh-tw';
var _culture_file_name = 'Root';
if (typeof cookie_culture != 'undefined') {
_culture = cookie_culture;
}
if (_culture == 'zh-tw') {
_culture_file_name = 'Root';
} else if (_culture == 'zh-cn') {
_culture_file_name = 'zh';
} else if (_culture == 'en-us') {
_culture_file_name = 'en';
}
var arr = window.location.href.split("/");
if (arr[3].indexOf('app') == 0)
baseUrl = '';
else
baseUrl = '/' + arr[3];
// MultiLanguage Error
require([baseUrl+'/Scripts/Nls/' + _culture_file_name + '/app-resx.js'],
function requrieSuccess(mapping_data) {
for (var config in MultiLanguage_CONFIG) {
var config_name = config.substr(0, config.indexOf('_'));
var CONFIG = null;
if (config_name == 'SURVEY') CONFIG = SURVEY_MODEL_CONFIG;
else if (config_name == 'LCA') CONFIG = LCA_MODEL_CONFIG;
else if (config_name == 'SIMAPRO') CONFIG = SIMAPRO_MODEL_CONFIG;
else if (config_name == 'CONSTANTS') CONFIG = CONSTANTS_CONFIG;
else if (config_name == 'PRODUCT') CONFIG = PRODUCT_MODEL_CONFIG;
else if (config_name == 'FAB') CONFIG = FAB_MODEL_CONFIG;
else if (config_name == 'REPORT') CONFIG = REPORT_MODEL_CONFIG;
else if (config_name == 'MANAGEMENT') CONFIG = MANAGEMENT_MODEL_CONFIG;
if (config.indexOf('HEADER') > -1 && config.indexOf('TABHEADER') == -1) {
var _config = CONFIG;
if (config_name != 'SURVEY') _config = CONFIG.SURVEY_ORDER_CONFIG;
SetMultiLanguageForHeader(MultiLanguage_CONFIG[config], _config, mapping_data);
} else if (config.indexOf('ORDERITEM') > -1) {
SetMultiLanguageForOrderItem(MultiLanguage_CONFIG[config], CONFIG, mapping_data);
} else if (config.indexOf('TABHEADER') > -1) {
SetMultiLanguageForTabHeader(MultiLanguage_CONFIG[config], CONFIG.tabItems, mapping_data);
} else if (config.indexOf('CONSTANTS') > -1) {
SetMultiLanguageForCONSTANTS(MultiLanguage_CONFIG[config], CONFIG, mapping_data);
} else if (config.indexOf('RADIO') > -1) {
SetMultiLanguageForRADIO(MultiLanguage_CONFIG[config], CONFIG, mapping_data);
} else if (config.indexOf('MONTHLY') > -1) {
SetMultiLanguageForMONTHLY(MultiLanguage_CONFIG[config], CONFIG, mapping_data);
} else {
SetMultiLanguageForForm(MultiLanguage_CONFIG[config], CONFIG, mapping_data);
}
}
callback(true);
},
function requireError(error) {
callback(false);
}
);
}
function SetMultiLanguageForHeader(mapping, config, mapping_data) {
for (var mp in mapping) {
if (typeof mapping[mp] == 'object') {
getConfigHeader(mapping[mp], config[mp], mapping_data);
} else if (typeof mapping[mp] == 'string') {
getConfigHeader(mapping, config, mapping_data);
break;
}
}
}
function SetMultiLanguageForTabHeader(mapping, config, mapping_data) {
for (var mp in mapping) {
for (var t = 0; t < config.length; t++) {
if (mp == config[t].name) {
updateConfigMultiLanguage(mapping[mp], config[t], mapping_data);
}
}
}
}
function SetMultiLanguageForRADIO(mapping, config, mapping_data) {
for (var mp in mapping) {
for (var m in mapping[mp]) {
if (typeof mapping[mp][m] == 'object') {
for (var i = 0; i < config[mp].Item.length; i++) {
if (config[mp].Item[i].Name == m) {
updateConfigMultiLanguage(mapping[mp][m], config[mp].Item[i].Radio[0][0], mapping_data);
break;
}
}
} else if (typeof mapping[mp][m] == 'string') {
updateConfigMultiLanguage(mapping[mp], config.SURVEY_ORDER_CONFIG[mp].Radio, mapping_data);
}
}
}
}
function SetMultiLanguageForCONSTANTS(mapping, config, mapping_data) {
for (var mp in mapping) {
for (var m in mapping[mp]) {
config[mp][m] = mapping_data[mapping[mp][m]];
}
}
}
function SetMultiLanguageForMONTHLY(mapping, config, mapping_data) {
for (var mp in mapping) {
for (var m in mapping[mp]) {
for (var i = 0; i < config[mp].Item.length; i++) {
if (config[mp].Item[i].Name == m) {
for (var tlt = 0, _tlt = config[mp].Item[i].Table_Left_Title; tlt < config[mp].Item[i].Table_Left_Title.length; tlt++) {
updateConfigMultiLanguage(mapping[mp][m][tlt], _tlt[tlt], mapping_data);
}
break;
}
}
}
}
}
function getConfigHeader(mapping, ch, mapping_data) {
for (var m in mapping) {
if (typeof mapping[m] == 'object') {
for (var i = 0; i < ch.Item.length; i++) {
if (typeof ch.Item[i].Name != 'undefined' && ch.Item[i].Name == m) {
SetMultiLanguageHeader(mapping[m], ch.Item[i], mapping_data);
break;
}
}
} else {
SetMultiLanguageHeader(mapping, ch, mapping_data);
}
}
}
function SetMultiLanguageHeader(mapping, ch, mapping_data) {
for (var c in ch) {
if (c == 'Table_Header') {
for (var s = 0; s < ch[c].length; s++) {
for (var h = 0; h < ch[c][s].length; h++) {
if (typeof ch[c][s][h].Show != 'undefined' && ch[c][s][h].Keys[0] == 'Scalar') {
if (ch[c][s][h].Show == 'WasteWater') {
updateConfigMultiLanguage(mapping['WaterScalar'], ch[c][s][h], mapping_data);
} else if (ch[c][s][h].Show == 'WasteOther') {
updateConfigMultiLanguage(mapping['OtherScalar'], ch[c][s][h], mapping_data);
}
} else {
updateConfigMultiLanguage(mapping[setKeyTitle(ch[c][s][h].Keys)], ch[c][s][h], mapping_data);
}
}
}
break;
}
if (typeof ch[c] == 'object') {
getConfigHeader(mapping, ch[c], mapping_data);
}
}
}
function SetMultiLanguageForOrderItem(mapping, config, mapping_data) {
for (var mp in mapping) {
if (typeof config[mp] != 'undefined') {
for (var i = 0; i < config[mp].Item.length; i++) {
if (typeof mapping[mp][config[mp].Item[i].Name] != 'undefined') {
updateConfigMultiLanguage(mapping[mp][config[mp].Item[i].Name], config[mp].Item[i], mapping_data)
}
}
}
}
}
function SetMultiLanguageForForm(mapping, config, mapping_data) {
for (var mp in mapping) {
if (typeof config[mp] != 'undefined') {
updateConfigMultiLanguage(mapping[mp], config[mp], mapping_data)
}
}
}
function updateConfigMultiLanguage(mapping, ch, mapping_data) {
if (typeof mapping != 'undefined' && mapping != '' && mapping != null) {
if (typeof ch.ChN != 'undefined') {
ch.ChN = mapping_data[mapping];
} else if (typeof ch.Name != 'undefined') {
ch.Name = mapping_data[mapping];
} else if (typeof ch.title != 'undefined') {
ch.title = mapping_data[mapping];
} else {
for (var m in mapping) {
ch[m] = mapping_data[mapping[m]];
}
}
}
}
function resetLCAState(scope, td) {
if (typeof td != 'undefined' && td != null) {
if (typeof scope.targetChildRow == 'undefined' || scope.targetChildRow == -1) {
var dr = scope.Survey_Table[0].Data_Row[td];
for (var d in dr.Data_Row_Edit) {
dr.Data_Row_Edit[d].edit = false;
dr.Data_Row_Edit[d].required = false;
}
} else {
var cm = scope.Survey_Table[0].Data_Row[scope.targetRow].ChildMaterials;
for (var c = 0; c < cm.length; c++) {
for (var d in cm[c].Data_Row_Edit) {
cm[c].Data_Row_Edit[d].edit = false;
cm[c].Data_Row_Edit[d].required = false;
}
}
}
}
scope.targetColumn = -1;
scope.targetRow = -1;
scope.targetChildRow = -1;
scope.targetTable = -1;
scope.Table_Edit_State = false;
scope.Table_Add_State = false;
scope.Enable_Add_Child = false;
scope.Table_Child_Add_State = false;
scope.Table_Child_Edit_State = false;
}
function setParameterID(sd, scope) {
var roi = scope.current_item;
var options = scope[roi + 'Options'];
var op1 = getOptionsItem(options, sd);
var op2 = getOptionsItem(options[op1], sd);
if (roi == 'Waste') {
if (sd.Type == 0) options = scope[roi + 'Options1'];
else if (sd.Type == 1) options = scope[roi + 'Options2'];
op1 = getOptionsItem(options, sd);
op2 = getOptionsItem(options[op1], sd);
sd.ParameterID = parseInt(options[op1][op2][0]);
return sd.ParameterID;
} else if (roi == 'Transport' || roi == 'WasteTransport' || roi == 'FireEquipment' || roi == 'OtherCompound') {
if (typeof op1 != 'undefined' && op1 != null && typeof op2 != 'undefined' && op2 != null) {
sd.ParameterID = parseInt(options[op1][op2][0]);
} else {
sd.ParameterID = null;
}
return sd.ParameterID;
} else if (roi == 'Vehicle' || roi == 'GasolineEquipment' || roi == 'Kitchen') {
var op3 = getOptionsItem(options[op1][op2], sd);
sd.ParameterID = parseInt(options[op1][op2][op3][0]);
return sd.ParameterID;
}
}
function getOptionsItem(options, compare) {
for (var ops in options) {
for (var c in compare) {
if (typeof compare[c] == 'string' && compare[c].substr(0, 1) == '"' && compare[c].substr(compare[c].length - 1) == '"') {
compare[c] = compare[c].substr(1, compare[c].length - 2);
}
if (compare[c] == ops) return ops;
}
}
return null;
}
function checkFileType(file, type) {
var file_type = '';
if (typeof type != 'undefined') file_type = type;
if (file.type.indexOf(file_type) > -1) return true;
return false;
}
function uploadFile(h, f) {
//console.log('uploadFile', h, f);
var frm = new FormData();
frm.append('file', f);
var arr = window.location.href.split("/");
if (arr[3].indexOf('app') == 0)
baseUrl = '';
else
baseUrl = '/' + arr[3];
return h.post(baseUrl+'/api/Upload', frm, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
});
}
function setOrderItems(SFC, isProductLCA) {
var order_items = {};
for (var o in SFC) {
order_items[o] = {};
for (var l in SFC[o]) {
if (l != 'Item') {
order_items[o][l] = SFC[o][l];
} else {
if (isProductLCA) {
order_items[o][l] = SFC[o][l];
} else {
var organization_item = [0, 6, 11, 14, 16];
order_items[o][l] = [];
for (var t = 0; t < SFC[o][l].length; t++) {
for (var oi = 0; oi < organization_item.length; oi++) {
if (t == organization_item[oi]) {
order_items[o][l].push(SFC[o][l][t]);
}
}
}
}
}
}
}
return order_items;
}
function setMaterialsServerData(materials, roi) {
var Server_Data = [];
var n = 1;
for (var m = 0; m < materials.length; m++) {
if (!materials[m].isChild) {
materials[m].row_height = 30;
materials[m].No = n;
if (roi == 'LCI_Direct_Material' && materials[m].MaterialType == 0) {
Server_Data.push(materials[m]);
n++;
} else if (roi == 'LCI_Indirect_Material' && materials[m].MaterialType == 1) {
Server_Data.push(materials[m]);
n++;
} else if (roi == 'LCI_Wrap_Material' && materials[m].MaterialType == 2) {
Server_Data.push(materials[m]);
n++;
} else if (roi == 'High_Level_Analysis') {
Server_Data.push(materials[m]);
n++;
}
}
}
return Server_Data;
}
function setNonMaterialServerData(response, itemname, scope, filter) {
var n = 1;
var Server_Data = [];
for (var m = 0; m < response[itemname].length; m++) {
var set_server_data = true;
if (typeof scope.radio_id != 'undefined' && response[itemname][m].Type != scope.radio_id) {
set_server_data = false;
}
if (set_server_data) {
response[itemname][m].No = n;
for (var res in response[itemname][m]) {
if (res.indexOf('Date') > -1) {
response[itemname][m][res] = filter('date')(new Date(response[itemname][m][res]), 'yyyy/MM/dd');
}
}
Server_Data.push(response[itemname][m]);
n++;
}
}
return Server_Data;
}
function setMonthlyTableArea(res) {
var Usage_Area_Selected = null;
for (var r = 0; r < res.length; r++) {
if (res[r].Area != null) {
Usage_Area_Selected = res[r].Area;
break;
}
}
return Usage_Area_Selected;
}
function setResponseIndex(res, _st, s, th) {
var res_index = -1;
for (var r = 0; r < res.length; r++) {
if (_st.length > 1) {
if (res[r].Index == th && res[r].Type == s) res_index = r;
} else {
if (res[r].Index == th) res_index = r;
}
}
return res_index;
}
function initTableRowData(res, _th, _dr, _st, s, th) {
for (var l = 1; l < Setkeys(_st[s].Table_Left_Title).length; l++) _dr.push([]);
for (var th = 0; th < _th.length; th++) {
var keyname = setKeyTitle(_th[th].Keys);
var res_index = setResponseIndex(res, _st, s, th);
if (res_index != -1) {
if (res[res_index].Type != 'undefined') {
_th[th].ID = res[res_index].ID;
for (var l = 1; l < Setkeys(_st[s].Table_Left_Title).length; l++) {
if (res[res_index][Setkeys(_st[s].Table_Left_Title)[l]] != null) {
_dr[l - 1][keyname] = res[res_index][Setkeys(_st[s].Table_Left_Title)[l]];
} else {
if (Setkeys(_st[s].Table_Left_Title)[l] != 'Area' && Setkeys(_st[s].Table_Left_Title)[l] != 'Year') {
_dr[l - 1][keyname] = 0;
} else {
_dr[l - 1][keyname] = null;
}
}
}
}
} else {
for (var d = 0; d < _dr.length; d++) {
if (Setkeys(_st[s].Table_Left_Title)[d + 1] != 'Area' && Setkeys(_st[s].Table_Left_Title)[d + 1] != 'Year') {
_dr[d][keyname] = 0;
} else {
_dr[d][keyname] = null;
}
}
_th[th].ID = 0;
}
}
}
function setCSVUploadMonthlyTableData(_tlt, _th, _dr, Table_Edit_State) {
var send_data = {};
for (var tlt = 1; tlt < Setkeys(_tlt).length; tlt++) {
if (typeof _dr[tlt - 1][setKeyTitle(_th.Keys)] != 'undefined' && _dr[tlt - 1][setKeyTitle(_th.Keys)] != null) {
if (Table_Edit_State) {
if (Setkeys(_tlt)[tlt] != 'Year') {
send_data[Setkeys(_tlt)[tlt]] = _dr[tlt - 1].Data_Row_Edit[setKeyTitle(_th.Keys)].data;
} else {
send_data[Setkeys(_tlt)[tlt]] = _dr[tlt - 1][setKeyTitle(_th.Keys)];
}
} else {
send_data[Setkeys(_tlt)[tlt]] = _dr[tlt - 1][setKeyTitle(_th.Keys)];
}
}
}
return send_data;
}
function compare(scope) {
if (scope.KgCO2e_total_count != 0) {
var current_percentage = scope.KgCO2e_select_count / scope.KgCO2e_total_count * 100;
var pcr_percentage = scope.PCR_percentage;
if (current_percentage < pcr_percentage) {
scope.percentage_compare = '<';
} else if (current_percentage == pcr_percentage) {
scope.percentage_compare = '=';
} else if (current_percentage > pcr_percentage) {
scope.percentage_compare = '>';
}
} else {
scope.percentage_compare = '?';
}
}
function checkTableEditValidation(dr, th) {
var all_need_filled = true;
for (var t = 0; t < th.length; t++) {
var keyname = setKeyTitle(th[t].Keys);
if (th[t].Require) { // 若欄位為必填
if (th[t].Type != 'select') {
if (dr.Data_Row_Edit[keyname].data == '' || dr.Data_Row_Edit[keyname].data == null) {
dr.Data_Row_Edit[keyname].required = true;
all_need_filled = false;
}
} else {
if (dr[keyname] == '' || dr[keyname] == null) {
dr.Data_Row_Edit[keyname].required = true;
all_need_filled = false;
}
}
} else if (typeof th[t].Require == 'undefined' || !th[t].Require) { // 若欄位為非必填
if (th[t].Type == 'email') {
if (typeof dr.Data_Row_Edit[keyname].data != 'undefined' && dr.Data_Row_Edit[keyname].data != '' && dr.Data_Row_Edit[keyname].data != null) {
if (dr.Data_Row_Edit[keyname].data.indexOf('@') > -1) {
if (!/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b/.test(dr.Data_Row_Edit[keyname].data)) {
dr.Data_Row_Edit[keyname].required = true;
all_need_filled = false;
} else {
dr.Data_Row_Edit[keyname].required = false;
}
} else {
dr.Data_Row_Edit[keyname].required = true;
all_need_filled = false;
}
}
}
}
}
if (all_need_filled) return true;
else return false;
}
function calculateWasteWaterScalar(dre) {
var b = dre.WaterBOD.data;
var c = dre.WaterCOD.data;
var m = dre.WaterCMD.data;
if (b == 0 && c == 0) {
} else {
if (m == null) {
} else {
if (c != 0) dre.Scalar.data = c * m;
else dre.Scalar.data = b * m;
}
}
if (b == null) dre.WaterBOD.data = 0;
if (c == null) dre.WaterCOD.data = 0;
}
function splitCSVFileData(data, _st) {
var result = [];
if (data.indexOf('\r\n') > -1) {
var current = data.substr(0, data.indexOf('\r\n'));
var last = data.substr(data.indexOf('\r\n') + 1);
var isheader = true;
//console.log(data.indexOf(','));
//console.log(data.indexOf('\r\n'));
//console.log(current);
var gg = 0;
while (last.indexOf(',') > -1) {
result.push(splitCSVDataRow(current, _st, isheader));
isheader = false;
current = last.substr(0, last.indexOf('\r\n'));
//console.log(current);
last = last.substr(last.indexOf('\r\n') + 1);
//gg++;
//if (gg > 100) break;
}
} else {
var row_data_length = findDataRowLength(_st);
var row_count = 0;
var last = data;
//console.log(row_data_length);
//var gg = 0;
while (last.indexOf(',') > -1) {
result.push([]);
for (var d = 0; d < row_data_length; d++) {
var current = last.substr(0, last.indexOf(','));
last = last.substr(last.indexOf(',') + 1);
if (d == 0 && current.indexOf('\n') > -1) current = current.substr(current.indexOf('\n') + 1);
result[row_count].push(current);
}
row_count++;
//gg++;
//if (gg > 15) break;
}
}
return result;
}
function splitCSVDataRow(row_data, _st, isheader) {
var _th = _st[0].Table_Header;
var nondata = 0;
var temp = '';
var row = [];
var current = row_data.substr(0, row_data.indexOf(','));
var last = row_data.substr(row_data.indexOf(',') + 1);
//console.log(current);
//console.log(last);
for (var t = 0; t < _th.length; t++) {
if (_th[t].Type == 'no' || _th[t].Type == 'formula' || _th[t].Name == 'Total' || _th[t].Type == 'upload' || _th[t].Type == 'simapro' || _th[t].Type == 'encoding') {
nondata++;
} else {
if (_th[t].Keys[0] == 'Description') {
if (isheader) {
//console.log(last);
current = current + last.substr(0, last.indexOf('"'));
row.push(last);
last = last.substr(last.indexOf('"') + 1);
} else {
current = current + last.substr(0, last.indexOf('"'));
row.push(current);
last = last.substr(last.indexOf('"') + 1);
}
} else {
//console.log(_th[t].Name);
//console.log(current);
//console.log(last, '\r\n');
//console.log(current.indexOf(','));
//console.log(current.indexOf('\r\n'));
row.push(current);
current = last.substr(0, last.indexOf(','));
last = last.substr(last.indexOf(',') + 1);
}
}
}
return row;
}
function findDataRowLength(_st) {
var nondata = 0;
var _th = _st[0].Table_Header;
for (var t = 0; t < _th.length; t++) {
if (_th[t].Type == 'no' || _th[t].Type == 'formula' || _th[t].Name == 'Total' || _th[t].Type == 'upload' || _th[t].Type == 'simapro' || _th[t].Type == 'encoding') {
nondata++;
}
}
return _th.length - nondata;
}
function validateDate(testdate) {
var regx1 = /^\d{4}\/\d{2}\/\d{1}$/;
var regx2 = /^\d{4}\/\d{2}\/\d{2}$/;
var regx3 = /^\d{4}\/\d{1}\/\d{1}$/;
var regx4 = /^\d{4}\/\d{1}\/\d{2}$/;
var ck1 = regx1.test(testdate);
var ck2 = regx2.test(testdate);
var ck3 = regx3.test(testdate);
var ck4 = regx4.test(testdate);
return (ck1 || ck2 || ck3 || ck4);
}
function addDays(date, days) {
var result = new Date(date);
result.setDate(result.getDate() + days);
return result;
}