demo20230512/Browser_Local/js/LCA/DetailSurveyForm/RiskAssmt/MaterialC3EmissionController.js
2023-05-12 10:20:28 +08:00

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;
}
}]);