/* ** Views/Partial/LCA/BOM.cshtml is using this controller */ angular.module('CarbonFootprint') .controller('ItemPurchaseController', ['$scope', '$http', '$routeParams', 'Notification', 'JoinSurveyItemAndParameter', 'MultiLanguageService', '$q','$filter', function ($scope, $http, $routeParams, Notification, JoinService, MultiLanguageService, $q, $filter) { // Multi-language resource object var resource, inited = false; const LANDKGCO2E = 0.235; const SEAKGCO2E = 0.0198; const AIRKGCO2E = 0.0198; // 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; } // !!... 當materialNo變更時帶出選項 $scope.changeMaterialNo = function (selectRow) { console.log('changeMaterialNo'); console.log(selectRow); // call api 取得原料欄位 $http.post($scope.baseUrl+'/api/MaterialC3Emission/GetByLcaIdMaterialNo/' + $routeParams.LCAID + '/' + selectRow.toBeEdit.MaterialNo ) .success(function (data) { //console.log('data return'); //console.log(data); selectRow.toBeEdit.ElementName = data.MaterialName; selectRow.toBeEdit.ElementWeight = data.MaterialSpec; selectRow.toBeEdit.ElementWeightUnit = data.Unit; selectRow.toBeEdit.PurchaseAmount = data.AnnualPurchaseAmount; selectRow.toBeEdit.ActivityIntensity = data.ActivityIntensity; getAllDataAsync($routeParams.LCAID) .then(function (response) { $scope.model = response.Significances; }, function (error) { console.log(error); Notification.error({ message: error.ExceptionMessage, positionX: 'center', delay: 3000 }); }); }) .error(function (error) { console.log(error); Notification.error({ message: error.ExceptionMessage, positionX: 'center', delay: 3000 }); }); } $scope.changeActivityIntensity = function (toBeEdit) { var shippingDistance = toBeEdit.ShippingDistance || 0; toBeEdit.ActivityIntensity = toBeEdit.PurchaseAmount * toBeEdit.ElementWeight; toBeEdit.ShippingAmt = toBeEdit.ActivityIntensity / 1000; toBeEdit.TransportTkmland = toBeEdit.ShippingAmt * toBeEdit.TransportLand; toBeEdit.TransportTkmland3 = toBeEdit.ShippingAmt * (toBeEdit.TransportTkmland3 || 0); toBeEdit.TotalTkmland = toBeEdit.TransportTkmland + toBeEdit.TransportTkmland3; toBeEdit.TransportLandCo2e = toBeEdit.TotalTkmland * LANDKGCO2E; toBeEdit.TransportTkmsea = toBeEdit.ShippingAmt * toBeEdit.TransportSea; toBeEdit.TransportSeaCo2e = toBeEdit.TransportTkmsea * SEAKGCO2E; toBeEdit.TransportTkmair = toBeEdit.ShippingAmt * toBeEdit.TransportAir; toBeEdit.TransportAirCo2e = toBeEdit.TransportTkmair * AIRKGCO2E; toBeEdit.TKM = toBeEdit.ShippingAmt * shippingDistance; }; $scope.changeTransportLand = function (toBeEdit) { toBeEdit.ShippingAmt = toBeEdit.ActivityIntensity / 1000; toBeEdit.TransportTkmland = toBeEdit.ShippingAmt * toBeEdit.TransportLand; toBeEdit.TotalTkmland = toBeEdit.TransportTkmland + (toBeEdit.TransportTkmland3 || 0); toBeEdit.TransportLandCo2e = toBeEdit.TotalTkmland * LANDKGCO2E; toBeEdit.ShippingDistance = calcShippingDistance(toBeEdit); toBeEdit.TKM = toBeEdit.ShippingAmt * toBeEdit.ShippingDistance; }; $scope.changeTransportSea = function (toBeEdit) { toBeEdit.ShippingAmt = toBeEdit.ActivityIntensity / 1000; toBeEdit.TransportTkmsea = toBeEdit.ShippingAmt * toBeEdit.TransportSea; toBeEdit.TransportSeaCo2e = toBeEdit.TransportTkmsea * SEAKGCO2E; toBeEdit.ShippingDistance = calcShippingDistance(toBeEdit); toBeEdit.TKM = toBeEdit.ShippingAmt * toBeEdit.ShippingDistance; }; $scope.changeTransportAir = function (toBeEdit) { toBeEdit.ShippingAmt = toBeEdit.ActivityIntensity / 1000; toBeEdit.TransportTkmair = toBeEdit.ShippingAmt * toBeEdit.TransportAir; toBeEdit.TransportAirCo2e = toBeEdit.TransportTkmair * AIRKGCO2E; toBeEdit.ShippingDistance = calcShippingDistance(toBeEdit); toBeEdit.TKM = toBeEdit.ShippingAmt * toBeEdit.ShippingDistance; }; $scope.changeTransportLand3 = function (toBeEdit) { toBeEdit.ShippingAmt = toBeEdit.ActivityIntensity / 1000; toBeEdit.TransportTkmland3 = toBeEdit.ShippingAmt * toBeEdit.TransportLand3; toBeEdit.TotalTkmland = toBeEdit.TransportTkmland + toBeEdit.TransportTkmland3; toBeEdit.TransportLandCo2e = toBeEdit.TotalTkmland * LANDKGCO2E; toBeEdit.ShippingDistance = calcShippingDistance(toBeEdit); toBeEdit.TKM = toBeEdit.ShippingAmt * toBeEdit.ShippingDistance; }; $scope.syncProcess = function () { $http.post($scope.baseUrl+'/api/ItemPurchase/Sync/' + $routeParams.LCAID) .success(function (data) { getAllDataAsync($routeParams.LCAID) .then(function (response) { $scope.model = response.Purchases; $scope.MaterialNoLst = response.MaterialNoLst; }, function (error) { console.log(error); Notification.error({ message: error.ExceptionMessage, positionX: 'center', delay: 3000 }); }); // Get multilanguage resource MultiLanguageService.getResourceAsync() .then(function (response) { resource = response; }, function (error) { console.log(error); }); }) .error(function (error) { console.log(error); Notification.error({ message: error.ExceptionMessage, positionX: 'center', delay: 3000 }); }); }; $scope.createProcess = function () { // Create an object & select it var toBeCreated = {}; toBeCreated.ID = 0; toBeCreated.LCAID = $routeParams.LCAID; toBeCreated.TransportSea = 0; toBeCreated.TransportTkmsea = 0; toBeCreated.TransportSeaCo2e = 0; toBeCreated.TransportAir = 0; toBeCreated.TransportTkmair = 0; toBeCreated.TransportAirCo2e = 0; //toBeCreated.AnnualPurchaseAmount = 0; //toBeCreated.TransferredMaterialSpec = 0; //toBeCreated.KgCO2e = 0; // just for testing //toBeCreated.MaterialNo = '520-98765-R2'; //toBeCreated.ElementNo = 'CASE'; //toBeCreated.ElementName = 'PC外殼採購量(Kg)' //toBeCreated.ElementWeight = 0.03159; //toBeCreated.ElementWeightUnit = 'kg'; //toBeCreated.PurchaseAmount = 115916; //toBeCreated.ActivityIntensity = toBeCreated.PurchaseAmount * toBeCreated.ElementWeight; //toBeCreated.VendorName = '深圳市承运机电有限公司'; //toBeCreated.ShippingAddr = '深圳市宝安区松岗街道塘下涌第三工业区桂花路2号第五栋'; //toBeCreated.ShippingAmt = toBeCreated.ActivityIntensity / 1000; //toBeCreated.ShippingDistance = 56.4; //toBeCreated.TKM = toBeCreated.ShippingAmt * toBeCreated.ShippingDistance; //toBeCreated.TradeCondition = '货交YM或DK'; //toBeCreated.Url = 'https://www.badiu.com'; // For modal form $scope.selectRow.toBeEdit = toBeCreated; $scope.modalFormOption.show = true; $scope.save = function () { if (!validateModel(toBeCreated)) { return; } $http.post($scope.baseUrl+'/api/ItemPurchase/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; } $http.post($scope.baseUrl+'/api/ItemPurchase/Save/' + toBeEdit.LCAID + "/" + toBeEdit.ID, toBeEdit) .success(function (data) { angular.copy(data, selected); $scope.modalFormOption.show = false; }); }; }; $scope.deleteProcess = function (selected) { var isConfirm = confirm(resource.DeleteItemMsg); if (isConfirm) { $http.delete($scope.baseUrl+"/api/ItemPurchase/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 == 'ItemPurchase') { // inited = true; // Get data and prepare $scope.model getAllDataAsync($routeParams.LCAID) .then(function (response) { $scope.model = response.Purchases; $scope.MaterialNoLst = response.MaterialNoLst; }, 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/ItemPurchase/GetByLcaId/' + LCAID) .success(function (data) { deferred.resolve(data); }) .error(function () { deferred.resolve(null); }) return deferred.promise; } function validateModel(model) { model.TransportSea = model.TransportSea || 0; model.TransportTkmsea = model.TransportTkmsea || 0; model.TransportSeaCo2e = model.TransportSeaCo2e || 0; model.TransportAir = model.TransportAir || 0; model.TransportTkmair = model.TransportTkmair || 0; model.TransportAirCo2e = model.TransportAirCo2e || 0; model.TransportLand3 = model.TransportLand3 || 0; if (model.TransportLand3 > 0 && model.TransportSea == 0 && model.TransportAir == 0) { Notification.error({ message: '路程二海運或空运必须填一项内容', positionX: 'center', delay: 3000 }); return false; } if (model.TransportSea > 0 && model.TransportAir > 0) { Notification.error({ message: '路程二海運或空运只能填一项内容', positionX: 'center', delay: 3000 }); return false; } return true; } function calcShippingDistance(model) { var transportLand = model.TransportLand || 0, transportSea = model.TransportSea || 0, transportAir = model.TransportAir || 0, transportLand3 = model.TransportLand3 || 0; return transportLand + transportSea + transportAir + transportLand3; } }]);