217 lines
9.4 KiB
JavaScript
217 lines
9.4 KiB
JavaScript
/*
|
|
** Views/Partial/LCA/BOM.cshtml is using this controller
|
|
*/
|
|
|
|
angular.module('CarbonFootprint')
|
|
.controller('MaterialC3EmissionController', ['$scope', '$http', '$routeParams', 'JoinSurveyItemAndParameter', 'MultiLanguageService', '$q','$filter',
|
|
function ($scope, $http, $routeParams, JoinService, MultiLanguageService, $q, $filter) {
|
|
// Multi-language resource object
|
|
var resource,
|
|
inited = false;
|
|
|
|
// This property controlls modal form, will be passed to table-edit-modal directive
|
|
$scope.modalFormOption = {};
|
|
$scope.model = [];
|
|
|
|
// 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;
|
|
}
|
|
|
|
$scope.calcActivityAndEmission = function (model) {
|
|
var annualPurchaseAmount = model.AnnualPurchaseAmount || 0;
|
|
var materialSpec = model.MaterialSpec || 0;
|
|
var kgCO2e = model.KgCO2e || 0;
|
|
|
|
model.ActivityIntensity = annualPurchaseAmount * materialSpec;
|
|
model.Emission = model.ActivityIntensity * kgCO2e;
|
|
};
|
|
|
|
$scope.calcEmission = function (model) {
|
|
var kgCO2e = model.KgCO2e || 0;
|
|
model.Emission = model.ActivityIntensity * kgCO2e;
|
|
};
|
|
|
|
$scope.selectSimaproProcess = function (selectedMaterial, model) {
|
|
$scope.simaproOption = {};
|
|
$scope.simaproOption.show = true;
|
|
$scope.simaproOption.onOk = function (selectedParameter, selectedCategory) {
|
|
//console.log(selectedParameter);
|
|
|
|
//selectedMaterial.ParameterID = selectedParameter.ID;
|
|
//selectedMaterial.ParameterTypeID = selectedCategory.ID;
|
|
//selectedMaterial.HighLevelAnalyzeResult = selectedMaterial.KgCO2e = selectedParameter.Value * selectedMaterial.Scalar;
|
|
//selectedMaterial.HighLevelAnalyzeResult = selectedMaterial.HighLevelAnalyzeResult * (selectedMaterial.Quantity || 0);
|
|
//selectedMaterial.localDisplayEncoding = selectedParameter.Encoding;
|
|
selectedMaterial.Unit = selectedParameter.Unit;
|
|
selectedMaterial.KgCO2e = selectedParameter.Value;
|
|
var model = selectedMaterial;
|
|
var annualPurchaseAmount = model.AnnualPurchaseAmount || 0;
|
|
var materialSpec = model.MaterialSpec || 0;
|
|
var kgCO2e = model.KgCO2e || 0;
|
|
model.ActivityIntensity = annualPurchaseAmount * materialSpec;
|
|
model.Emission = model.ActivityIntensity * kgCO2e;
|
|
//LCADetailCacheService.updateMaterialsAsync([selectedMaterial]);
|
|
}
|
|
};
|
|
|
|
$scope.createProcess = function () {
|
|
|
|
// Create an object & select it
|
|
var toBeCreated = {};
|
|
toBeCreated.ID = 0;
|
|
toBeCreated.LCAID = $routeParams.LCAID;
|
|
toBeCreated.AnnualPurchaseAmount = 0;
|
|
toBeCreated.TransferredMaterialSpec = 0;
|
|
toBeCreated.KgCO2e = 0;
|
|
//toBeCreated.TransferredMaterialSpecUnit = 'kg';
|
|
toBeCreated.ActivityIntensityUnit = 'kg';
|
|
toBeCreated.Unit = 'kg';
|
|
|
|
// just for testing
|
|
//toBeCreated.MaterialName = 'PC外殼採購量(Kg)';
|
|
//toBeCreated.AnnualPurchaseAmount = 115916;
|
|
//toBeCreated.MaterialSpec = 0.03159
|
|
////toBeCreated.TransferredMaterialSpec = 0.03159;
|
|
//toBeCreated.ActivityIntensity = toBeCreated.AnnualPurchaseAmount * toBeCreated.MaterialSpec;
|
|
//toBeCreated.KgCO2e = 9.42;
|
|
//toBeCreated.Emission = toBeCreated.ActivityIntensity * toBeCreated.KgCO2e;
|
|
//toBeCreated.Comment = '產品碳足跡計算服務平台聚碳酸酯(非光氣法,一般級)Polycarbonate, PC-2014';
|
|
|
|
// For modal form
|
|
$scope.selectRow.toBeEdit = toBeCreated;
|
|
$scope.modalFormOption.show = true;
|
|
|
|
$scope.save = function () {
|
|
if (!validateModel(toBeCreated)) {
|
|
return;
|
|
}
|
|
if (!$scope.checkMaterialNoUnique($scope.model, toBeCreated))
|
|
return;
|
|
|
|
$http.post($scope.baseUrl+'/api/MaterialC3Emission/Save/' + $routeParams.LCAID + "/" + toBeCreated.ID, toBeCreated)
|
|
.success(function (data) {
|
|
$scope.model.unshift(data);
|
|
$scope.modalFormOption.show = false;
|
|
})
|
|
.error(function (error) {
|
|
console.log(error);
|
|
});
|
|
};
|
|
};
|
|
|
|
$scope.editProcess = function (selected) {
|
|
var toBeEdit = $scope.selectRow.toBeEdit = angular.copy(selected);
|
|
|
|
$scope.modalFormOption.show = true;
|
|
|
|
$scope.save = function () {
|
|
if (!validateModel(toBeEdit)) {
|
|
return;
|
|
}
|
|
if (!$scope.checkMaterialNoUnique($scope.model, toBeEdit))
|
|
return;
|
|
|
|
$http.post($scope.baseUrl+'/api/MaterialC3Emission/Save/' + toBeEdit.LCAID + "/" + toBeEdit.ID, toBeEdit)
|
|
.success(function (data) {
|
|
angular.copy(data, selected);
|
|
$scope.modalFormOption.show = false;
|
|
});
|
|
};
|
|
};
|
|
|
|
// 檢查同一盤查單料號必須唯一
|
|
$scope.checkMaterialNoUnique = function (model, toBeEdit) {
|
|
var cnts = 0
|
|
//console.log('checkMaterialNoUnique');
|
|
//console.log( model);
|
|
//console.log( toBeEdit);
|
|
for (let i = 0; i < model.length; i++) {
|
|
if ( toBeEdit.ID == model[i].ID)
|
|
continue;
|
|
if (model[i].MaterialNo == toBeEdit.MaterialNo) {
|
|
cnts = cnts + 1;
|
|
}
|
|
//console.log(cnts);
|
|
if (cnts > 0) {
|
|
alert('同一盤查單料號必須唯一');
|
|
return false;
|
|
}
|
|
}
|
|
//model.forEach(function (item) {
|
|
// if (item.MaterialNo == toBeEdit.MaterialNo)
|
|
// cnts = cnts + 1;
|
|
// console.log(cnts);
|
|
// if (cnts > 0) {
|
|
// alert('同一盤查單料號必須唯一');
|
|
// return false;
|
|
// }
|
|
//});
|
|
return true;
|
|
};
|
|
$scope.deleteProcess = function (selected) {
|
|
var isConfirm = confirm(resource.DeleteItemMsg);
|
|
|
|
if (isConfirm) {
|
|
$http.delete($scope.baseUrl+"/api/MaterialC3Emission/Delete/" + selected.ID)
|
|
.success(function () {
|
|
var index = $scope.model.indexOf(selected);
|
|
$scope.model.splice(index, 1);
|
|
|
|
// This operate is base on selectRow directive in TableEdit.js file
|
|
$scope.selectRow.unSelect();
|
|
});
|
|
}
|
|
};
|
|
|
|
$scope.$on('changeSelectedTab', function (event, args) {
|
|
if (!inited && args.selectedTab == 'MaterialC3Emission') {
|
|
inited = true;
|
|
|
|
// Get data and prepare $scope.model
|
|
getAllDataAsync($routeParams.LCAID)
|
|
.then(function (response) {
|
|
$scope.model = response.Materials;
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
|
|
// Get multilanguage resource
|
|
MultiLanguageService.getResourceAsync()
|
|
.then(function (response) {
|
|
resource = response;
|
|
}, function (error) {
|
|
console.log(error);
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* Get all list data from server
|
|
* @param {[Int]} : LCAID
|
|
* @return {[promise]}
|
|
*/
|
|
function getAllDataAsync(LCAID) {
|
|
var deferred = $q.defer();
|
|
$http.get($scope.baseUrl+'/api/MaterialC3Emission/GetByLcaId/' + LCAID)
|
|
.success(function (data) {
|
|
deferred.resolve(data);
|
|
})
|
|
.error(function () {
|
|
deferred.resolve(null);
|
|
})
|
|
return deferred.promise;
|
|
}
|
|
|
|
function validateModel(model) {
|
|
model.AnnualPurchaseAmount = Math.round(model.AnnualPurchaseAmount || 0);
|
|
|
|
return true;
|
|
}
|
|
}]); |