298 lines
14 KiB
JavaScript
298 lines
14 KiB
JavaScript
/*
|
|
** 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;
|
|
}
|
|
}]); |