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