347 lines
15 KiB
JavaScript
347 lines
15 KiB
JavaScript
/*
|
|
** Views/Partial/LCA/DetailSurveyForm/RiskAssmtForm/WaterUsage.cshtml is using this controller
|
|
*/
|
|
|
|
var arr = window.location.href.split("/");
|
|
if (arr[3].indexOf('app') == 0)
|
|
baseUrl = '';
|
|
else
|
|
baseUrl = '/' + arr[3];
|
|
|
|
angular.module('CarbonFootprint')
|
|
.controller('WaterUsageController', ['$q', '$scope', '$http', '$routeParams', 'ParameterCacheService', 'LCADetailCacheService', 'DATE_CONSTANTS', 'UploadFile', 'MultiLanguageService',
|
|
function ($q, $scope, $http, $routeParams, ParameterCacheService, LCADetailCacheService, DATE_CONSTANTS, UploadFile, MultiLanguageService) {
|
|
// Multi-language resource object
|
|
var Resource,
|
|
inited = false;
|
|
// this property controlls modal form , will be passed to table-edit-modal directive
|
|
$scope.modalFormOption = {};
|
|
$scope.Editable = false;
|
|
$scope.yearSelected = {};
|
|
|
|
// 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;
|
|
}
|
|
|
|
/* modelBuilder for create & export */
|
|
$scope.modelBuilder = {
|
|
create: function (data, LCAID) {
|
|
try {
|
|
var model = {
|
|
// importing only depends on the order of data, not month
|
|
Scalar: parseFloat(data[1]) ? data[1] : 0,
|
|
Comment: data[2],
|
|
ReferenceFileLink: data[3],
|
|
LCAID: LCAID
|
|
};
|
|
|
|
// check imported data length and model length (-1 for LCAID)
|
|
// remove -1 because we add 1 new column(month) for display
|
|
if (data.length !== getObjectSize(model))
|
|
throw Resource['EXCELFileFormatWrong'];
|
|
|
|
return model;
|
|
}
|
|
catch (err) {
|
|
return { error: err };
|
|
}
|
|
|
|
},
|
|
export: function (list) {
|
|
var csv = '\uFEFF';
|
|
// header
|
|
csv += Resource['StaticLabelGlobal_Month'] + '\t'
|
|
+ Resource['WaterUsage'] + '\t'
|
|
+ Resource['DescriptionAndExplanation'] + '\t'
|
|
+ Resource['StaticLabelEvidenceOfElectronicFile'] + Resource['StaticLabelEvidenceOfElectronicFileDescription'];
|
|
|
|
// body
|
|
angular.forEach(list, function (entry) {
|
|
csv += '\r\n';
|
|
//column 1
|
|
csv += entry.Month + '\t'
|
|
//column 2
|
|
csv += entry.Scalar + '\t';
|
|
//column 3
|
|
csv += entry.Comment + '\t'
|
|
//column 4
|
|
csv += entry.ReferenceFileLink;
|
|
})
|
|
require([baseUrl+'/Scripts/FileSaver.js'],
|
|
function requrieSuccess(SaveAs) {
|
|
var textFileAsBlob = new Blob([csv], { type: 'text;charset=utf-8,' });
|
|
saveAs(textFileAsBlob, "Export_WaterUsage.txt")
|
|
},
|
|
function requireError(error) {
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
/* 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.WaterUsages);
|
|
})
|
|
return deferred.promise;
|
|
},
|
|
saveAsyncFn: batchCreateAndUpdateCache
|
|
}
|
|
$scope.quoteModal = {
|
|
show: false
|
|
};
|
|
|
|
$scope.$on('changeSelectedTab', function (event, args) {
|
|
if (!inited && args.selectedTab == 'WaterUsage') {
|
|
inited = true;
|
|
|
|
// Get data and prepare $scope.model
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
var lcaDetail = response[0];
|
|
var waterUsages = response[1].data.WaterUsages;
|
|
var sheetHeader = response[1].data.SheetHeader ? response[1].data.SheetHeader : {};
|
|
|
|
var sources = response[1].data.options;
|
|
// prepare area and correspondent year
|
|
var area = [];
|
|
var yearSource = {};
|
|
var areaYear = [];
|
|
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) });
|
|
}
|
|
|
|
var startDate = new Date(lcaDetail.StartDate);
|
|
var endDate = new Date(lcaDetail.EndDate);
|
|
// 將起訖日期改為同年第一與最後一天
|
|
startDate.setMonth(0, 1);
|
|
endDate.setMonth(11, 31);
|
|
|
|
// prepare row data
|
|
var steamModel = [];
|
|
var currentDate = startDate;
|
|
var i = 0;
|
|
while (currentDate < endDate) {
|
|
if (waterUsages.length > 0 && (waterUsages.length - i - 1) >= 0) {
|
|
var row = waterUsages[waterUsages.length - i - 1];
|
|
row.Month = DATE_CONSTANTS.months[currentDate.getMonth()];
|
|
row.newYear = { Year: row.Year, ParameterID: row.ParameterID };
|
|
steamModel[i++] = row;
|
|
}
|
|
else {
|
|
steamModel[i++] = {
|
|
ID: 0,
|
|
Index: i,
|
|
Year: 0,
|
|
newYear: {},
|
|
Scalar: 0,
|
|
Month: DATE_CONSTANTS.months[currentDate.getMonth()],
|
|
ReferenceFileLink: '',
|
|
LCAID: $routeParams.LCAID,
|
|
KgCO2e: 0,
|
|
Comment: ""
|
|
};
|
|
}
|
|
currentDate.setMonth(currentDate.getMonth() + 1);
|
|
}
|
|
|
|
$scope.model = steamModel;
|
|
$scope.area = area;
|
|
$scope.areaYear = areaYear;
|
|
$scope.changeYear = function (area) {
|
|
$scope.areaYear = yearSource[area];
|
|
};
|
|
$scope.sources = sources;
|
|
calculateSum();
|
|
|
|
// initial year
|
|
if (waterUsages.length > 0) {
|
|
$scope.areaSelected = waterUsages[0].Area;
|
|
$scope.changeYear($scope.areaSelected);
|
|
$scope.yearSelected.Year = waterUsages[0].Year;
|
|
$scope.yearSelected.ParameterID = waterUsages[0].ParameterID;
|
|
}
|
|
|
|
// $scope.sheetHeader is parent's object
|
|
$scope.sheetHeader.SheetFillerName = sheetHeader.SheetFillerName;
|
|
$scope.sheetHeader.Phone = sheetHeader.Phone;
|
|
$scope.sheetHeader.Department = sheetHeader.Department;
|
|
|
|
}, 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.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);
|
|
});
|
|
}
|
|
});
|
|
|
|
// 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.uploadFile = function (rowIndex) {
|
|
UploadFile.uploadFile($scope, $scope.model[rowIndex]);
|
|
};
|
|
|
|
|
|
/**
|
|
* Private function: save all async
|
|
* @param {[Array]} : array of parsed objects
|
|
* @return {[promise]}
|
|
*/
|
|
function batchCreateAndUpdateCache(parsedList) {
|
|
var deferred = $q.defer();
|
|
// remove redundant content
|
|
if (parsedList.length > $scope.model.length) {
|
|
parsedList.splice($scope.model.length, parsedList.length - $scope.model.length);
|
|
}
|
|
|
|
//set index by order
|
|
var index = 1
|
|
angular.forEach(parsedList, function (item) {
|
|
item.Index = index;
|
|
index++;
|
|
})
|
|
|
|
// sava all
|
|
$http.post($scope.baseUrl+'/api/RiskAssmtWaterUsage/SaveWaterUsages/', parsedList)
|
|
.success(function (data) {
|
|
// close modals
|
|
$scope.fileImportModal.show = false;
|
|
$scope.quoteModal.show = false;
|
|
|
|
// update $scope.model
|
|
for (var i = 0; i < $scope.model.length; i++) {
|
|
if (data.result[i]) {
|
|
$scope.model[i].Scalar = data.result[i].Scalar;
|
|
$scope.model[i].Comment = data.result[i].Comment
|
|
}
|
|
else {
|
|
$scope.model[i].Scalar = 0;
|
|
}
|
|
$scope.model[i].Year = null;
|
|
$scope.model[i].KgCO2e = 0;
|
|
$scope.model[i].Comment = data.result[i].Comment;
|
|
}
|
|
calculateSum();
|
|
|
|
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/RiskAssmtWaterUsage/GetWaterUsages/' + LCAID)])
|
|
.then(function (data) {
|
|
deferred.resolve(data);
|
|
})
|
|
return deferred.promise;
|
|
}
|
|
|
|
function calculateSum() {
|
|
var sumScalar = 0;
|
|
var sumKgCO2e = 0;
|
|
angular.forEach($scope.model, function (item) {
|
|
sumScalar += item.Scalar;
|
|
sumKgCO2e += item.KgCO2e;
|
|
});
|
|
$scope.sumScalar = sumScalar;
|
|
$scope.sumKgCO2e = sumKgCO2e;
|
|
}
|
|
|
|
$scope.saveData = function () {
|
|
$scope.Editable = false;
|
|
angular.forEach($scope.model, function (item) {
|
|
item.Scalar = item.newScalar;
|
|
item.Year = $scope.yearSelected.Year
|
|
item.Comment = item.newComment;
|
|
item.ParameterID = $scope.yearSelected.ParameterID;
|
|
item.Area = $scope.areaSelected;
|
|
|
|
});
|
|
$http.post($scope.baseUrl+'/api/RiskAssmtWaterUsage/SaveWaterUsages/', $scope.model).then(function (response) {
|
|
angular.forEach($scope.model, function (entry, index) {
|
|
entry.KgCO2e = response.data.result[index].KgCO2e;
|
|
})
|
|
calculateSum();
|
|
});
|
|
|
|
};
|
|
|
|
$scope.cancelData = function () {
|
|
$scope.Editable = false;
|
|
angular.forEach($scope.model, function (item) {
|
|
item.newScalar = item.Scalar;
|
|
item.newComment = item.Comment;
|
|
item.newYear.Year = item.Year;
|
|
});
|
|
};
|
|
|
|
$scope.editProcess = function (selected) {
|
|
$scope.Editable = true;
|
|
angular.forEach($scope.model, function (item) {
|
|
item.newScalar = item.Scalar;
|
|
item.newComment = item.Comment;
|
|
item.newYear.ParameterID = item.ParameterID;
|
|
});
|
|
};
|
|
}]); |