725 lines
36 KiB
JavaScript
725 lines
36 KiB
JavaScript
/*
|
|
** Views/Partial/LCA/PowerUsage.cshtml is using this controller
|
|
*/
|
|
|
|
angular.module('CarbonFootprint')
|
|
.controller('LCAPowerUsageCtrl', ['$q', '$scope', '$http', '$routeParams', '$cookies', '$timeout', 'ParameterCacheService', 'LCADetailCacheService', 'DATE_CONSTANTS', 'UploadFile', 'MultiLanguageService', 'ExportCsvService',
|
|
function ($q, $scope, $http, $routeParams, $cookies, $timeout, ParameterCacheService, LCADetailCacheService, DATE_CONSTANTS, UploadFile, MultiLanguageService, ExportCsvService) {
|
|
|
|
// Multi-language resource object
|
|
var Resource;
|
|
|
|
// This property controlls modal form , will be passed to table-edit-modal directive
|
|
$scope.modalFormOption = {};
|
|
$scope.Editable = false;
|
|
$scope.dataQualityOption = {};
|
|
$scope.dataQualityOption.data = {};
|
|
$scope.yearSelected = {};
|
|
//Record the amount of months in one of the two types of power, in order to correct the data when import
|
|
$scope.monthAmount = 0;
|
|
|
|
// set $scope.baseUrl
|
|
var baseUrl = $scope.baseUrl;
|
|
if (typeof (baseUrl) === 'undefined' || baseUrl == null) {
|
|
var arr = window.location.href.split("/");
|
|
if (arr[3].indexOf('app') == 0)
|
|
baseUrl = '';
|
|
else
|
|
baseUrl = '/' + arr[3];
|
|
$scope.baseUrl = baseUrl;
|
|
}
|
|
|
|
// Sync 'ParameterID' based on 'Source', because ngModel of <select> is bind to 'Source'
|
|
$scope.$watch('selectRow.toBeEdit.Source', function (newValue) {
|
|
angular.forEach($scope.sources, function (value, key) {
|
|
if (value === newValue) {
|
|
$scope.selectRow.toBeEdit.ParameterID = key;
|
|
}
|
|
});
|
|
}, true);
|
|
|
|
$scope.uploadFileNormal = function (rowIndex) {
|
|
UploadFile.uploadFile($scope, $scope.modelPowerNormal[rowIndex]);
|
|
};
|
|
|
|
$scope.uploadFileGreen = function (rowIndex) {
|
|
UploadFile.uploadFile($scope, $scope.modelPowerGreen[rowIndex]);
|
|
};
|
|
|
|
/* modelBuilder for create & export */
|
|
$scope.modelBuilder = {
|
|
create: function (data, LCAID) {
|
|
try {
|
|
// check Type
|
|
var typeID=0;
|
|
var typeName = data[1];
|
|
//if (typeName == Resource['PowerNormal'])
|
|
// typeID = 0;
|
|
//else
|
|
if (typeName == Resource['PowerGreen'])
|
|
typeID = 1;
|
|
|
|
var model = {
|
|
// Importing only depends on the order of data, not month
|
|
Type: typeID,
|
|
Peak: parseFloat(data[1]) ? data[1].replaceAll(',','') : 0,
|
|
HalfPeak: parseFloat(data[2]) ? data[2].replaceAll(',', '') : 0,
|
|
OffPeak: parseFloat(data[3]) ? data[3].replaceAll(',', '') : 0,
|
|
SaturdayHalfPeak: parseFloat(data[4]) ? data[4].replaceAll(',', '') : 0,
|
|
Description: data[5],
|
|
ReferenceFileLink: data[6],
|
|
LCAID: LCAID
|
|
};
|
|
model.Scalar = parseFloat(model.Peak) + parseFloat(model.HalfPeak) + parseFloat(model.OffPeak) + parseFloat(model.SaturdayHalfPeak);
|
|
// Check imported data length and model length (-1 for LCAID, -1 for Scalar)
|
|
// + 1 length for month
|
|
if (data.length !== getObjectSize(model) - 1 - 1 ) {
|
|
throw Resource['EXCELFileFormatWrong'];
|
|
}
|
|
// if find incorrect Type
|
|
if (model.Type === undefined)
|
|
throw Resource['PowerNormal'] + '/' + Resource['PowerGreen'] + ' Error';
|
|
|
|
return model;
|
|
} catch (err) {
|
|
return { error: err };
|
|
}
|
|
},
|
|
export: function (list1, list2) {
|
|
var list = list1.concat(list2);
|
|
var data = [];
|
|
|
|
// header
|
|
data.push([Resource['StaticLabelGlobal_Month'],
|
|
//Resource['PowerNormal'] + '/' + Resource['PowerGreen'],
|
|
Resource['Peak'],
|
|
Resource['HalfPeak'],
|
|
Resource['OffPeak'],
|
|
Resource['SaturdayHalfPeak'],
|
|
Resource['DescriptionAndExplanation'],
|
|
Resource['StaticLabelEvidenceOfElectronicFile'] + Resource['StaticLabelEvidenceOfElectronicFileDescription']]);
|
|
|
|
// body
|
|
angular.forEach(list, function (entry) {
|
|
var csv = [];
|
|
//column 1
|
|
csv.push(entry.Month);
|
|
//column 2
|
|
//if (entry.Type == 0)
|
|
// csv.push(Resource['PowerNormal']);
|
|
//else
|
|
// csv.push(Resource['PowerGreen']);
|
|
//column 3
|
|
csv.push(entry.Peak);
|
|
//column 4
|
|
csv.push(entry.HalfPeak);
|
|
//column 5
|
|
csv.push(entry.OffPeak);
|
|
//column 6
|
|
csv.push(entry.SaturdayHalfPeak);
|
|
//column 7
|
|
csv.push(entry.Description);
|
|
//column 8
|
|
csv.push(entry.ReferenceFileLink);
|
|
|
|
data.push(csv);
|
|
})
|
|
ExportCsvService.startExport(data, "Export_PowerUsage.csv");
|
|
}
|
|
};
|
|
|
|
/* file import options & modal control */
|
|
$scope.fileImportOptions = {
|
|
modelBuilder: $scope.modelBuilder,
|
|
saveAsync: batchCreateAndUpdateCache
|
|
};
|
|
|
|
$scope.fileImportModal = {
|
|
show: false
|
|
};
|
|
|
|
/* quote options & modal control */
|
|
$scope.quoteOptions = {
|
|
queryDataAsyncFn: function (LCAID) {
|
|
var deferred = $q.defer();
|
|
getAllDataAsync(LCAID).then(function (data) {
|
|
deferred.resolve(data[1].data.PowerUsages.sort((a, b) => a.Index - b.Index));
|
|
})
|
|
return deferred.promise;
|
|
},
|
|
saveAsyncFn: batchCreateAndUpdateCache
|
|
};
|
|
|
|
$scope.quoteModal = {
|
|
show: false
|
|
};
|
|
|
|
// Get data and prepare $scope.model
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
var lcaDetail = response[0];
|
|
var powerUsages = response[1].data.PowerUsages;
|
|
var sources = response[1].data.options;
|
|
var sheetHeader = response[1].data.SheetHeader ? response[1].data.SheetHeader : {};
|
|
//console.log('response[1].data', response[1].data);
|
|
$scope.factor = response[1].data.factor;
|
|
// Prepare area and correspondent year
|
|
var area = [];
|
|
var yearSource = {};
|
|
var areaYear = [];
|
|
|
|
// Prepare row data
|
|
var startDate = new Date(lcaDetail.StartDate);
|
|
var endDate = new Date(lcaDetail.EndDate);
|
|
// 將起訖日期改為同年第一與最後一天
|
|
startDate.setMonth(0,1);
|
|
endDate.setMonth(11,31);
|
|
|
|
var powerNormalModel = [];
|
|
var powerGreenModel = [];
|
|
var normalIndex = 0;
|
|
var greenIndex = 0;
|
|
var i = 0;
|
|
var currentDate = angular.copy(startDate);
|
|
|
|
while ((powerUsages.length - i - 1) >= 0) {
|
|
if (powerUsages.length > 0) {
|
|
var row = powerUsages[powerUsages.length - i - 1];
|
|
if (row.Type === 0) {
|
|
// power normal
|
|
powerNormalModel[normalIndex++] = row;
|
|
}
|
|
else {
|
|
// Type == 1, power green
|
|
powerGreenModel[greenIndex++] = row;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
|
|
/*
|
|
* CFT-566 import problem: the following section deals with error made before fixing cft-566 problem
|
|
*/
|
|
|
|
while (currentDate < endDate) {
|
|
currentDate.setMonth(currentDate.getMonth() + 1);
|
|
$scope.monthAmount++;
|
|
}
|
|
currentDate = startDate;
|
|
if (powerGreenModel.length <= 0 && powerNormalModel.length == $scope.monthAmount * 2) {
|
|
powerGreenModel = powerNormalModel.slice($scope.monthAmount);
|
|
powerNormalModel = powerNormalModel.slice(0, $scope.monthAmount);
|
|
}
|
|
/*
|
|
* CFT-566 End section
|
|
*/
|
|
|
|
for (var key in sources) {
|
|
var items = sources[key].split(',');
|
|
if (area.indexOf(items[0]) === -1)
|
|
area.push(items[0]);
|
|
|
|
if (typeof yearSource[items[0]] === 'undefined')
|
|
yearSource[items[0]] = [];
|
|
yearSource[items[0]].push({ Year: items[2], ParameterID: parseInt(key) });
|
|
}
|
|
|
|
for (var key in yearSource) {
|
|
yearSource[key].sort(function (y1, y2) {
|
|
return y1.Year - y2.Year;
|
|
});
|
|
}
|
|
|
|
var normalIndex = 0;
|
|
var greenIndex = 0;
|
|
while (currentDate < endDate) {
|
|
var currentMonth = DATE_CONSTANTS.months[currentDate.getMonth()];
|
|
var currentYear = currentDate.getFullYear();
|
|
|
|
if ((powerNormalModel.length - normalIndex - 1) >= 0) {
|
|
var row = powerNormalModel[normalIndex];
|
|
row.Month = currentMonth;
|
|
row.newYear = { Year: row.Year, ParameterID: row.ParameterID };
|
|
row.showYear = currentYear;
|
|
powerNormalModel[normalIndex++] = row;
|
|
} else {
|
|
powerNormalModel[normalIndex++] = {
|
|
ID: 0,
|
|
Index: normalIndex,
|
|
Year: 0,
|
|
newYear: {},
|
|
showYear: currentYear,
|
|
Scalar: 0,
|
|
Month: currentMonth,
|
|
ReferenceFileLink: '',
|
|
LCAID: $routeParams.LCAID,
|
|
Peak: 0,
|
|
HalfPeak: 0,
|
|
SaturdayHalfPeak: 0,
|
|
OffPeak: 0,
|
|
KgCO2e: 0,
|
|
Description: "",
|
|
Type:0
|
|
};
|
|
}
|
|
|
|
if ((powerGreenModel.length - greenIndex - 1) >= 0) {
|
|
var row = powerGreenModel[greenIndex];
|
|
row.Month = currentMonth;
|
|
row.newYear = { Year: row.Year, ParameterID: row.ParameterID };
|
|
row.showYear = currentYear;
|
|
powerGreenModel[greenIndex++] = row;
|
|
} else {
|
|
powerGreenModel[greenIndex++] = {
|
|
ID: 0,
|
|
Index: greenIndex,
|
|
Year: 0,
|
|
newYear: {},
|
|
showYear: currentYear,
|
|
Scalar: 0,
|
|
Month: currentMonth,
|
|
ReferenceFileLink: '',
|
|
LCAID: $routeParams.LCAID,
|
|
Peak: 0,
|
|
HalfPeak: 0,
|
|
SaturdayHalfPeak: 0,
|
|
OffPeak: 0,
|
|
KgCO2e: 0,
|
|
Description: "",
|
|
Type: 1
|
|
};
|
|
}
|
|
|
|
currentDate.setMonth(currentDate.getMonth() + 1);
|
|
}
|
|
|
|
$scope.modelPowerNormal = powerNormalModel;
|
|
$scope.modelPowerGreen = powerGreenModel;
|
|
$scope.area = area;
|
|
$scope.areaYear = areaYear;
|
|
|
|
$scope.changeYear = function (area) {
|
|
$scope.areaYear = yearSource[area];
|
|
//console.log(area); // 這偶而會null, 先保留
|
|
$scope.areaSelected = area;
|
|
};
|
|
$scope.onYearChange = function (theYear) {
|
|
$scope.yearSelected = theYear;
|
|
// 這裡要call api 取得排放係數
|
|
$http.get($scope.baseUrl+'/api/Parameter/GetValue/' + theYear.ParameterID)
|
|
.success(function (data, status, headers, config) {
|
|
//console.log('success', data, status, headers, config);
|
|
//$('#emitFactor').val(data);
|
|
$scope.factor = data;
|
|
})
|
|
.error(function (data, status, headers, config) {
|
|
//console.log('error', data, status);
|
|
console.log('error', data, status, headers, config);
|
|
});
|
|
};
|
|
$scope.onActivityChange = function (theActivity) {
|
|
//console.log('onActivityChange');
|
|
//console.log(theActivity);
|
|
$scope.activityDataType = theActivity;
|
|
};
|
|
$scope.onEmitparaChange = function (theEmitpara) {
|
|
//console.log('onEmitparaChange');
|
|
//console.log(theEmitpara);
|
|
$scope.emitParaType = theEmitpara;
|
|
};
|
|
$scope.sources = sources;
|
|
|
|
calculateNormalSum();
|
|
calculateGreenSum();
|
|
|
|
//CFT-104, set area to taiwan by default.
|
|
var lang = $cookies._culture;
|
|
if (lang == "zh-tw") {
|
|
$scope.areaSelected = "台灣";
|
|
} else if (lang == "zh-cn") {
|
|
$scope.areaSelected = "台湾";
|
|
} else if (lang == "en-us") {
|
|
if (area && angular.isArray(area)) {
|
|
for (var i = 0; i < area.length; i++) {
|
|
if (area[i].toLowerCase() == "taiwan") {
|
|
$scope.areaSelected = area[i];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (typeof ($scope.areaSelected)!=='undefined')
|
|
$scope.changeYear($scope.areaSelected);
|
|
|
|
// initial year
|
|
if (powerUsages.length > 0) {
|
|
$scope.areaSelected = powerUsages[0].Area;
|
|
$scope.changeYear($scope.areaSelected);
|
|
$scope.yearSelected.Year = powerUsages[0].Year;
|
|
$scope.yearSelected.ParameterID = powerUsages[0].ParameterID;
|
|
//$scope.yearSelected = { Year=powerUsages[0].Year, ParameterID=powerUsages[0].ParameterID };
|
|
//console.log(powerUsages[0]);
|
|
//var tmp = {
|
|
// Year=powerUsages[0].Year, ParameterID=powerUsages[0].ParameterID
|
|
//};
|
|
//console.log(tmp);
|
|
}
|
|
|
|
// $scope.sheetHeader is parent's object
|
|
$scope.sheetHeader.SheetFillerName = sheetHeader.SheetFillerName;
|
|
$scope.sheetHeader.Phone = sheetHeader.Phone;
|
|
$scope.sheetHeader.Department = sheetHeader.Department;
|
|
|
|
//$scope.activityOptions = [];
|
|
|
|
//angular.forEach(response[1].data.ActivityOptions, function (key, value) {
|
|
// $scope.activityOptions.push(value);
|
|
//});
|
|
|
|
//$scope.emitParaOptions = [];
|
|
|
|
//angular.forEach(response[1].data.EmitParaOptions, function (key, value) {
|
|
// $scope.emitParaOptions.push(value);
|
|
//});
|
|
|
|
//console.log('lcaDetail', lcaDetail);
|
|
$scope.activityDataType = 0;
|
|
$scope.emitParaType = 0;
|
|
$scope.activityOptions = response[1].data.ActivityOptions;
|
|
$scope.emitParaOptions = response[1].data.EmitParaOptions;
|
|
|
|
$timeout(function () {
|
|
//console.log('$timeout', lcaDetail);
|
|
$scope.activityDataType = lcaDetail.activityDataTypePowerUsage;
|
|
$scope.emitParaType = lcaDetail.emitParaTypePowerUsage;
|
|
});
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
// Get the lca status
|
|
LCADetailCacheService.getLCADetailAsync($routeParams.LCAID)
|
|
.then(function (lcaDetail) {
|
|
|
|
// int 0, 1, 2, 3, 4
|
|
$scope.lcaStatus = lcaDetail.Status;
|
|
$scope.dataQualityOption.showSaveBtn = lcaDetail.Status == 1;
|
|
// $scope.modalFormOption.editable = $scope.lcaStatus == 0;
|
|
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
// Get multilanguage resource
|
|
MultiLanguageService.getResourceAsync()
|
|
.then(function (resource) {
|
|
Resource = resource;
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
/**
|
|
* Private function: save all async
|
|
* @param {[Array]} : array of parsed objects
|
|
* @return {[promise]}
|
|
*/
|
|
function batchCreateAndUpdateCache(parsedList) {
|
|
var deferred = $q.defer();
|
|
|
|
var powerNormalModel = [];
|
|
var powerGreenModel = [];
|
|
var normalIndex = 0;
|
|
var greenIndex = 0;
|
|
|
|
// group and set index
|
|
for (var i in parsedList) {
|
|
//if (parsedList[i].Type == 0 && normalIndex < $scope.modelPowerNormal.length) {
|
|
if (parsedList[i].Type == 0 && normalIndex < $scope.modelPowerNormal.length) {
|
|
normalIndex++;
|
|
parsedList[i].Index = normalIndex;
|
|
parsedList[i].Scalar = parseFloat(parsedList[i].Peak) + parseFloat(parsedList[i].HalfPeak) + parseFloat(parsedList[i].OffPeak) + parseFloat(parsedList[i].SaturdayHalfPeak);
|
|
parsedList[i].KgCO2e = parsedList[i].Scalar * parseFloat($scope.factor);
|
|
parsedList[i].Year = $scope.yearSelected.Year; //item.newYear.Year;
|
|
parsedList[i].ParameterID = $scope.yearSelected.ParameterID;// item.newYear.ParameterID;
|
|
parsedList[i].Area = $scope.areaSelected;
|
|
powerNormalModel.push(parsedList[i]);
|
|
}
|
|
//else if (parsedList[i].Type == 1 && normalIndex < $scope.modelPowerGreen.length) {
|
|
else if ((normalIndex >= $scope.monthAmount && greenIndex <= $scope.monthAmount) || (parsedList[i].Type == 1 && normalIndex < $scope.modelPowerGreen.length)) {
|
|
greenIndex++;
|
|
parsedList[i].Type = 1;
|
|
parsedList[i].Index = greenIndex;
|
|
parsedList[i].Scalar = parseFloat(parsedList[i].Peak) + parseFloat(parsedList[i].HalfPeak) + parseFloat(parsedList[i].OffPeak) + parseFloat(parsedList[i].SaturdayHalfPeak);
|
|
parsedList[i].KgCO2e = parsedList[i].Scalar * parseFloat($scope.factor);
|
|
parsedList[i].Year = $scope.yearSelected.Year; //item.newYear.Year;
|
|
parsedList[i].ParameterID = $scope.yearSelected.ParameterID;// item.newYear.ParameterID;
|
|
parsedList[i].Area = $scope.areaSelected;
|
|
powerGreenModel.push(parsedList[i]);
|
|
}
|
|
}
|
|
|
|
// remove redundant content
|
|
parsedList = powerNormalModel.concat(powerGreenModel);
|
|
|
|
// sava all
|
|
// need to clear LCA cache since the save api may change activityDataTypePowerUsage and emitParaTypePowerUsage
|
|
LCADetailCacheService.clearLCADetailFromCache($routeParams.LCAID);
|
|
$http.post($scope.baseUrl+'/api/PowerUsage/SavePowerUsages/' + $routeParams.LCAID + '/'
|
|
+ getActivityDataType() + '/' + getEmitParaType(), parsedList)
|
|
.success(function (data) {
|
|
|
|
// Close modals
|
|
$scope.fileImportModal.show = false;
|
|
$scope.quoteModal.show = false;
|
|
|
|
// group by Type
|
|
var powerNormalModel = [];
|
|
var powerGreenModel = [];
|
|
|
|
angular.forEach(data.result, function (item) {
|
|
if (item.Type == 0)
|
|
powerNormalModel.push(item);
|
|
else
|
|
powerGreenModel.push(item);
|
|
})
|
|
|
|
// Update $scope.modelPowerNormal
|
|
for (var i = 0; i < $scope.modelPowerNormal.length; i++) {
|
|
if (data.result[i]) {
|
|
$scope.modelPowerNormal[i].Peak = data.result[i].Peak;
|
|
$scope.modelPowerNormal[i].HalfPeak = data.result[i].HalfPeak;
|
|
$scope.modelPowerNormal[i].OffPeak = data.result[i].OffPeak;
|
|
$scope.modelPowerNormal[i].SaturdayHalfPeak = data.result[i].SaturdayHalfPeak;
|
|
$scope.modelPowerNormal[i].Scalar = data.result[i].Scalar;
|
|
$scope.modelPowerNormal[i].Description=data.result[i].Description
|
|
$scope.modelPowerNormal[i].KgCO2e = data.result[i].KgCO2e;
|
|
} else {
|
|
$scope.modelPowerNormal[i].Peak = 0;
|
|
$scope.modelPowerNormal[i].HalfPeak = 0;
|
|
$scope.modelPowerNormal[i].OffPeak = 0;
|
|
$scope.modelPowerNormal[i].SaturdayHalfPeak = 0;
|
|
$scope.modelPowerNormal[i].Scalar = 0;
|
|
$scope.modelPowerNormal[i].KgCO2e = 0;
|
|
}
|
|
}
|
|
|
|
// Update $scope.modelPowerGreen
|
|
for (var i = 0; i < $scope.modelPowerGreen.length; i++) {
|
|
if (data.result[i]) {
|
|
$scope.modelPowerGreen[i].Peak = data.result[i + $scope.modelPowerNormal.length].Peak;
|
|
$scope.modelPowerGreen[i].HalfPeak = data.result[i + $scope.modelPowerNormal.length].HalfPeak;
|
|
$scope.modelPowerGreen[i].OffPeak = data.result[i + $scope.modelPowerNormal.length].OffPeak;
|
|
$scope.modelPowerGreen[i].SaturdayHalfPeak = data.result[i + $scope.modelPowerNormal.length].SaturdayHalfPeak;
|
|
$scope.modelPowerGreen[i].Scalar = data.result[i + $scope.modelPowerNormal.length].Scalar;
|
|
$scope.modelPowerGreen[i].Description = data.result[i + $scope.modelPowerNormal.length].Description
|
|
$scope.modelPowerGreen[i].KgCO2e = data.result[i].KgCO2e;
|
|
} else {
|
|
$scope.modelPowerGreen[i].Peak = 0;
|
|
$scope.modelPowerGreen[i].HalfPeak = 0;
|
|
$scope.modelPowerGreen[i].OffPeak = 0;
|
|
$scope.modelPowerGreen[i].SaturdayHalfPeak = 0;
|
|
$scope.modelPowerGreen[i].Scalar = 0;
|
|
$scope.modelPowerGreen[i].KgCO2e = 0;
|
|
}
|
|
}
|
|
|
|
calculateNormalSum();
|
|
calculateGreenSum();
|
|
|
|
deferred.resolve(data);
|
|
})
|
|
.error(function (e) {
|
|
console.log(e.Message);
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
/**
|
|
* Get all list data from server
|
|
* @param {[Int]} : LCAID
|
|
* @return {[promise]}
|
|
*/
|
|
function getAllDataAsync(LCAID) {
|
|
var deferred = $q.defer();
|
|
|
|
$q.all([LCADetailCacheService.getLCADetailAsync(LCAID),
|
|
$http.get($scope.baseUrl+'/api/PowerUsage/GetPowerUsages/' + LCAID)])
|
|
.then(function (data) {
|
|
deferred.resolve(data);
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function calculateNormalSum() {
|
|
var sumScalar = 0;
|
|
var sumKgCO2e = 0;
|
|
|
|
angular.forEach($scope.modelPowerNormal, function (item) {
|
|
sumScalar += item.Scalar;
|
|
sumKgCO2e += item.KgCO2e;
|
|
});
|
|
|
|
$scope.sumNormalScalar = sumScalar;
|
|
$scope.sumNormalKgCO2e = sumKgCO2e;
|
|
}
|
|
|
|
function calculateGreenSum() {
|
|
var sumScalar = 0;
|
|
var sumKgCO2e = 0;
|
|
|
|
angular.forEach($scope.modelPowerGreen, function (item) {
|
|
sumScalar += item.Scalar;
|
|
sumKgCO2e += item.KgCO2e;
|
|
});
|
|
|
|
$scope.sumGreenScalar = sumScalar;
|
|
$scope.sumGreenKgCO2e = sumKgCO2e;
|
|
}
|
|
|
|
function getActivityDataType() {
|
|
var activityDataType = $('#activityDataType').val();// $scope.activityDataType;
|
|
if (typeof (activityDataType) === 'undefined')
|
|
activityDataType = 0;
|
|
return activityDataType;
|
|
}
|
|
|
|
function getEmitParaType() {
|
|
var emitParaType = $('#emitParaType').val();// $scope.emitParaType;
|
|
if (typeof (emitParaType) === 'undefined')
|
|
emitParaType = 0;
|
|
return emitParaType;
|
|
}
|
|
|
|
$scope.saveData = function () {
|
|
$scope.Editable = false;
|
|
var modelPower = [];
|
|
//用電量儲存資料
|
|
//console.log('saveData');
|
|
////console.log($scope.areaSelect);
|
|
//console.log($scope.areaSelected);
|
|
////console.log($scope.yearSelect);
|
|
//console.log($scope.yearSelected);
|
|
|
|
angular.forEach($scope.modelPowerNormal, function (item) {
|
|
item.Peak = item.newPeak;
|
|
item.HalfPeak = item.newHalfPeak;
|
|
item.OffPeak = item.newOffPeak;
|
|
item.SaturdayHalfPeak = item.newSaturdayHalfPeak;
|
|
item.Scalar = item.Peak + item.HalfPeak + item.OffPeak + item.SaturdayHalfPeak;
|
|
item.Description = item.newDescription;
|
|
item.Year = $scope.yearSelected.Year; //item.newYear.Year;
|
|
item.ParameterID = $scope.yearSelected.ParameterID;// item.newYear.ParameterID;
|
|
item.Area = $scope.areaSelected;
|
|
modelPower.push(item);
|
|
});
|
|
|
|
angular.forEach($scope.modelPowerGreen, function (item) {
|
|
item.Peak = item.newPeak;
|
|
item.HalfPeak = item.newHalfPeak;
|
|
item.OffPeak = item.newOffPeak;
|
|
item.SaturdayHalfPeak = item.newSaturdayHalfPeak;
|
|
item.Scalar = item.Peak + item.HalfPeak + item.OffPeak + item.SaturdayHalfPeak;
|
|
item.Description = item.newDescription;
|
|
item.Year = $scope.yearSelected.Year; //item.newYear.Year;
|
|
item.ParameterID = $scope.yearSelected.ParameterID;// item.newYear.ParameterID;
|
|
item.Area = $scope.areaSelected;
|
|
modelPower.push(item);
|
|
});
|
|
|
|
// need to clear LCA cache since the save api may change activityDataTypePowerUsage and emitParaTypePowerUsage
|
|
LCADetailCacheService.clearLCADetailFromCache($routeParams.LCAID);
|
|
$http.post($scope.baseUrl+'/api/PowerUsage/SavePowerUsages/' + $routeParams.LCAID + '/'
|
|
+ getActivityDataType() + '/' + getEmitParaType()
|
|
, modelPower).then(function (response) {
|
|
angular.forEach(modelPower, function (entry, index) {
|
|
entry.KgCO2e = response.data.result[index].KgCO2e;
|
|
})
|
|
calculateNormalSum();
|
|
calculateGreenSum();
|
|
});
|
|
};
|
|
|
|
$scope.cancelData = function () {
|
|
$scope.Editable = false;
|
|
doCancel($scope.modelPowerNormal);
|
|
doCancel($scope.modelPowerGreen);
|
|
};
|
|
|
|
function doCancel(model) {
|
|
angular.forEach(model, function (item) {
|
|
item.newPeak = item.Peak;
|
|
item.newHalfPeak = item.HalfPeak;
|
|
item.newOffPeak = item.OffPeak;
|
|
item.newSaturdayHalfPeak = item.SaturdayHalfPeak;
|
|
item.newYear.Year = item.Year;
|
|
item.newDescription = item.Description;
|
|
item.ReferenceFileLink = item.newReferenceFileLink;
|
|
});
|
|
}
|
|
|
|
$scope.editProcess = function () {
|
|
$scope.Editable = true;
|
|
doEdit($scope.modelPowerNormal);
|
|
doEdit($scope.modelPowerGreen);
|
|
};
|
|
|
|
function doEdit(model) {
|
|
angular.forEach(model, function (item) {
|
|
item.newPeak = item.Peak;
|
|
item.newHalfPeak = item.HalfPeak;
|
|
item.newOffPeak = item.OffPeak;
|
|
item.newSaturdayHalfPeak = item.SaturdayHalfPeak;
|
|
item.newDescription = item.Description;
|
|
item.newYear.ParameterID = item.ParameterID;
|
|
item.newReferenceFileLink = item.ReferenceFileLink;
|
|
});
|
|
}
|
|
|
|
$scope.deleteFile = function (row) {
|
|
if (confirm(Resource['DeleteItemMsg'])) {
|
|
row.ReferenceFileLink = '';
|
|
}
|
|
};
|
|
|
|
$scope.onAllocationChange = function (Allocation) {
|
|
$scope.Allocation = Allocation
|
|
if ($scope.Allocation == 0) //重量分配
|
|
//$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, $scope.product.Weight, $scope.lcaDetail.FabProductionWeight);
|
|
$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs * $scope.product.Weight/ $scope.lcaDetail.FabProductionWeight, 1, $scope.lcaDetail.ProductProductionPcs);
|
|
else if ($scope.Allocation == 1) //面積分配
|
|
//$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, $scope.product.AreaSize, $scope.lcaDetail.FabProductionArea);
|
|
$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs * $scope.product.AreaSize / $scope.lcaDetail.FabProductionArea, 1, $scope.lcaDetail.ProductProductionPcs);
|
|
else if ($scope.Allocation == 2) //產量分配
|
|
//$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, 1, $scope.lcaDetail.FabProductionPcs);
|
|
$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, 1, $scope.lcaDetail.FabProductionPcs);
|
|
else if ($scope.Allocation == 3) //經濟分配
|
|
//$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, $scope.lcaDetail.ProductProductionEconomic, $scope.lcaDetail.FabProductionEconomic);
|
|
$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionEconomic / $scope.lcaDetail.FabProductionEconomic, 1, $scope.lcaDetail.ProductProductionPcs);
|
|
else if ($scope.Allocation == 4) //工時分配
|
|
//$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs, $scope.lcaDetail.ProductProductionHour, $scope.lcaDetail.FabProductionHour);
|
|
$scope.Ratio = $scope.calculate($scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionHour / $scope.lcaDetail.FabProductionHour, 1, $scope.lcaDetail.ProductProductionPcs);
|
|
else if ($scope.Allocation == 99) //不分配
|
|
$scope.Ratio = 1;
|
|
|
|
$http.post($scope.baseUrl+'/api/LCA/SaveAllocation/' + $routeParams.LCAID + '/' + $routeParams.DetailType + '/' + $scope.Allocation)
|
|
.success(function (data) {
|
|
$scope.modifyCacheAllocation();
|
|
})
|
|
}
|
|
|
|
$scope.dataQualityShow = function () {
|
|
$http.get($scope.baseUrl+'/api/DataQualityLevel/GetByTableLCAID/' + $routeParams.LCAID + '/LCACommonSurveyForm_PowerUsages/'
|
|
).success(function (data) {
|
|
angular.copy(data, $scope.dataQualityOption.data);
|
|
//todo !!... load pre saved data
|
|
//$scope.dataQualityOption.Fi = 0.0123;//test only;
|
|
//todo !!... 還需要總碳排量才能算出 碳排量佔比
|
|
$scope.dataQualityOption.show = true;
|
|
}).error(function (data, status) {
|
|
alert(data.ExceptionMessage);
|
|
});
|
|
};
|
|
}
|
|
]); |