demo20230512/Browser_Local/js/BasicLogic.js
2023-05-12 10:20:28 +08:00

1909 lines
68 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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;
}