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

374 lines
18 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Logic Solution
WeeeCarbonFootprint
responsible for joining fab , product , pcr ,VerifierCompany , though LCA data
used by views/partial/LCA/Detail.cshtml
view included from LCADetailLayoutController.js
*/
angular.module('CarbonFootprint')
.controller('LCADetailController',
['$scope', '$http', 'LCADetailCacheService', '$routeParams', 'ProductDetailCacheService', 'MultiLanguageService', '$timeout',
function ($scope, $http, LCADetailCacheService, $routeParams, ProductDetailCacheService, MultiLanguageService, $timeout) {
// Multi-language resource object
var resource;
$scope.pcsAllocationRatio = 0;
$scope.weightAllocationRatio = 0;
$scope.areaAllocationRatio = 0;
$scope.economicAllocationRatio = 0;
$scope.workhourAllocationRatio = 0;
$scope.fileImportModal = {
show: false
};
var formData = new FormData;
$scope.hasFile = false;
$scope.selectFile = function (file) {
formData.append($routeParams.LCAID + "_ImportOrganizationLCAReport_0", file);
$scope.$apply(function () {
$scope.hasFile = true;
});
};
$scope.import = function () {
$http.post('../api/LCA/ImportOrganizationAllData/' + $routeParams.LCAID, formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(function (data) {
//console.log('success', data);
alert(data)
document.getElementById("importFile").value = "";
$scope.hasFile = false;
formData = new FormData;
$scope.close();
}).error(function (data) {
console.log('error', data);
document.getElementById("importFile").value = "";
formData = new FormData;
$scope.hasFile = false;
if (data?.ExceptionMessage != undefined) {
$scope.importErrorMsg = data.ExceptionMessage;
alert(data.ExceptionMessage);
}
else if (data?.Message != undefined) {
alert('Import Failed!');
$scope.importErrorMsg = data.Message
}
else
alert('Oops! This is something happen. Maybe you can try it later');
});;
}
$scope.close = function () {
formData = new FormData;
$scope.hasFile = false;
$scope.fileImportModal.show = false;
document.getElementById("importFile").value = "";
}
// 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;
}
MultiLanguageService.getResourceAsync()
.then(function (response) {
resource = response;
}, function (error) {
console.log(error);
});
$scope.getLCADetail = function () {
LCADetailCacheService.getLCADetailAsync($routeParams.LCAID)
.then(function (lcaData) {
//console.log('getLCADetailAsync', lcaData);
//$scope.selectedARversion = lcaData.ARversion;
//console.log('1','>'+$scope.selectedARversion+'<');
//pcr
if (lcaData.PCRID) {
LCADetailCacheService.getPCRAsync($routeParams.LCAID)
.then(function (data) {
$scope.pcr = data;
});
}
$http.get($scope.baseUrl+'/api/ARversion/GetAll')
.success(function (data, status, header, config) {
$scope.lcaDetail.ARversionOptions = data;
//$scope.lcaDetail.ARversion = lcaData.ARversion;// data[0].ARversion;
//console.log(data);
//console.log('2', '>' + $scope.selectedARversion + '<');
$scope.lcaDetail.ARversionOptions.forEach((x) => {
if (x.ARversion == lcaData.ARversion)
$scope.lcaDetail.ARversion = x;
//console.log(x);
});
$scope.updatePcsAllocationRatio();
})
.error(function (data, status, headers, config) {
showServerError(data, status, headers, config);
});
//VerifierCompany
if (lcaData.VerifierCompanyID) {
$http.get('api/Company/GetCertificationCompanyByID/' + lcaData.VerifierCompanyID)
.success(function (data, status, header, config) {
$scope.certificationConpamy = data;
});
}
//Product
if (lcaData.ProductID) {
ProductDetailCacheService.getProductDetailAsync(lcaData.ProductID)
.then(function (result) {
$scope.product = result;
$scope.updatePcsAllocationRatio();
});
}
//Fab
if (lcaData.FabID) {
$http.get($scope.baseUrl+'/api/Fab/Get/' + lcaData.FabID)
.success(function (data, status, header, config) {
$scope.fab = data;
});
}
$http.get($scope.baseUrl+'/api/Company/getCertificationCompany')
.success(function (data, status, header, config) {
$scope.certificationCompanyOptions = data;
});
$scope.VerifierCompanyDownloadLink = '';
if (lcaData != null && lcaData.VerifierCompanyID != null && lcaData.VerifierCompanyID != '') {
var getCompanyLinkUrl = $scope.baseUrl+'/api/LCA/GetCertificationCompanyFile/';//{Type}/{VerifierCompanyID}';
if (lcaData.LCAType.includes("ProductLCA")) {
$http.get(getCompanyLinkUrl + 'ProductLCA/' + lcaData.VerifierCompanyID)
.success(function (data, status, header, config) {
$scope.VerifierCompanyDownloadLink = data.Url;
});
}
else if (lcaData.LCAType.includes("OrganizationLCA")) {
$http.get(getCompanyLinkUrl + 'OrganizationLCA/' + lcaData.VerifierCompanyID)
.success(function (data, status, header, config) {
$scope.VerifierCompanyDownloadLink = data.Url;
});
}
else {
}
}
});
}
$scope.getLCADetail();
// Update LCA info
$scope.updateLCA = function (isProductLCA) {
$scope.saveResultMsg = '';
//$scope.lcaDetail.ARversion = $scope.lcaDetail.ARversion.ARversion;
var toBeEdit = $scope.lcaDetail;
toBeEdit.ARversion = $scope.lcaDetail.ARversion.ARversion;
// change api url by 'isProductLCA' parameter
var apiUrl;
if (isProductLCA)
apiUrl = $scope.baseUrl+'/api/LCA/SaveProductLCA';
else
apiUrl = $scope.baseUrl+'/api/LCA/SaveOrganizationLCA';
$http.post(apiUrl, toBeEdit)
.success(function (data) {
$scope.saveResultMsg = resource['UpdateSuccess'];
$scope.lcaDetail.ARversionOptions.forEach((x) => {
if (x.ARversion == toBeEdit.ARversion)
$scope.lcaDetail.ARversion = x;
});
//console.log($scope.lcaDetail.ARversion);
$scope.getLCADetail();
})
.error(function (error) {
$scope.saveResultMsg = resource['UpdateFail'] + ': ' + error.Message;
if (typeof (error) != 'undefined' && typeof (error.ModelState) != 'undefined') {
var msg = '';
angular.forEach(error.ModelState, function (entry) {
msg += entry + '; ';
});
alert(msg);
console.log('error.ModelState', error.ModelState);
}
//console.log(error);
})
.finally(function () {
// set timeout
$timeout(function () { $scope.saveResultMsg = '' }, 3000);
});
};
// recalculate all LCA (for any parameter change)
$scope.recalculateAllLCA = function (isProductLCA) {
$scope.saveResultMsg = '';
var toBeEdit = $scope.lcaDetail;
// change api url by 'isProductLCA' parameter
var apiUrl;
if (isProductLCA)
apiUrl = $scope.baseUrl+'/api/LCA/RecalculateProductLCA';
else
apiUrl = $scope.baseUrl+'/api/LCA/RecalculateOrganizationLCA';
$http.post(apiUrl, toBeEdit)
.success(function (data) {
$scope.saveResultMsg = resource['UpdateSuccess'];
})
.error(function (error) {
$scope.saveResultMsg = resource['UpdateFail'] + ': ' + error.Message;
console.log(error);
})
.finally(function () {
// set timeout
$timeout(function () { $scope.saveResultMsg = '' }, 3000);
});
};
$scope.ckParentLcaId = function () {
var ID = $scope.lcaDetail.ID;
var parentLCAID = $scope.lcaDetail.parentLCAID;
if (parentLCAID == null || parentLCAID == '') {
}
else {
var apiUrl = $scope.baseUrl+'/api/LCA/CkParentLcaId';
if (ID == parentLCAID) {
$scope.lcaDetail.parentLCAID = '';
alert('不可將自己設定為父盤查');
}
else {
$http.get($scope.baseUrl+'/api/LCA/CkParentLcaId/' + parentLCAID)
.success(function (data) {
if (data != '""') {
let msg = data.replaceAll('"', '');
$scope.lcaDetail.parentLCAID = '';
alert(msg);
}
})
.error(function (error) {
$scope.lcaDetail.parentLCAID = '';
alert('查詢失敗, 請洽系統管理員');
})
}
}
}
$scope.isoOptions = [
{ value: true, text: 'Yes' },
{ value: false, text: 'No' }
];
$scope.calculateRatio = function (a, b, c) {
// 計算 a * b / c若結果為nan回傳 0
var ret = a * b / c
if (isNaN(ret))
return 0
if (ret == Infinity)
return 0
//return Number(Math.round(ret + 'e' + 10) + 'e-' + 10)
return ret
}
$scope.setAllocationRatioToNone = function (type)
{
console.log(type);
switch (type) {
case 'WorkHour':
$scope.workhourAllocationRatio = $scope.calculateRatio(1, 1, 1);
console.log($scope.workhourAllocationRatio);
//$scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionHour / $scope.lcaDetail.FabProductionHour, 1, $scope.lcaDetail.ProductProductionPcs
$scope.lcaDetail.ProductProductionHour = 1;
$scope.lcaDetail.FabProductionHour = 1;
break;
case 'ProductionQty':
$scope.pcsAllocationRatio = $scope.calculateRatio(1, 1, 1);
console.log($scope.pcsAllocationRatio);
//$scope.lcaDetail.ProductProductionPcs, 1, $scope.lcaDetail.FabProductionPcs
$scope.lcaDetail.ProductProductionPcs = 1;
$scope.lcaDetail.FabProductionPcs = 1;
break;
case 'Weight':
$scope.weightAllocationRatio = $scope.calculateRatio(1, 1, 1);
console.log($scope.weightAllocationRatio);
//$scope.lcaDetail.ProductProductionPcs * $scope.product.Weight/ $scope.lcaDetail.FabProductionWeight, 1, $scope.lcaDetail.ProductProductionPcs;
$scope.product.Weight = 1;
$scope.lcaDetail.FabProductionWeight = 1;
break;
case 'AreaSize':
$scope.areaAllocationRatio = $scope.calculateRatio(1, 1, 1);
console.log($scope.areaAllocationRatio);
//$scope.lcaDetail.ProductProductionPcs * $scope.product.AreaSize / $scope.lcaDetail.FabProductionArea, 1, $scope.lcaDetail.ProductProductionPcs
$scope.product.AreaSize = 1;
$scope.lcaDetail.FabProductionArea = 1;
break;
case 'EconomicCost':
$scope.economicAllocationRatio = $scope.calculateRatio(1, 1, 1);
console.log($scope.economicAllocationRatio);
//$scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionEconomic / $scope.lcaDetail.FabProductionEconomic, 1, $scope.lcaDetail.ProductProductionPcs
$scope.lcaDetail.FabProductionEconomic = 1;
$scope.lcaDetail.ProductProductionEconomic = 1;
break;
default:
break;
}
}
$scope.updatePcsAllocationRatio = function () {
$scope.pcsAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs, 1, $scope.lcaDetail.FabProductionPcs);
$scope.updateWeightAllocationRatio();
$scope.updateAreaAllocationRatio();
$scope.updateEconomicAllocationRatio();
$scope.updateWorkhourAllocationRatio();
}
$scope.updateWeightAllocationRatio = function () {
//$scope.weightAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs, $scope.product.Weight, $scope.lcaDetail.FabProductionWeight);
$scope.weightAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs * $scope.product.Weight/ $scope.lcaDetail.FabProductionWeight, 1, $scope.lcaDetail.ProductProductionPcs);
}
$scope.updateAreaAllocationRatio = function () {
//$scope.areaAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs, $scope.product.AreaSize, $scope.lcaDetail.FabProductionArea);
$scope.areaAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs * $scope.product.AreaSize / $scope.lcaDetail.FabProductionArea, 1, $scope.lcaDetail.ProductProductionPcs);
}
$scope.updateEconomicAllocationRatio = function () {
//$scope.economicAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs, $scope.lcaDetail.ProductProductionEconomic, $scope.lcaDetail.FabProductionEconomic);
$scope.economicAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionEconomic / $scope.lcaDetail.FabProductionEconomic, 1, $scope.lcaDetail.ProductProductionPcs);
}
$scope.updateWorkhourAllocationRatio = function () {
//$scope.workhourAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs, $scope.lcaDetail.ProductProductionHour, $scope.lcaDetail.FabProductionHour);
$scope.workhourAllocationRatio = $scope.calculateRatio($scope.lcaDetail.ProductProductionPcs * $scope.lcaDetail.ProductProductionHour / $scope.lcaDetail.FabProductionHour, 1, $scope.lcaDetail.ProductProductionPcs);
}
$scope.checkRatioAndSetColor = function (ratio) {
if (ratio <= 0 || ratio > 1)
return { color: "red" };
return {}
}
$scope.checkAllocation = function (isproductLCA) {
if (!isproductLCA)
return false
//回true代表驗證不通過 所以disable
if ($scope.weightAllocationRatio <= 0 || $scope.weightAllocationRatio > 1)
return true;
if ($scope.areaAllocationRatio <= 0 || $scope.areaAllocationRatio > 1)
return true;
if ($scope.pcsAllocationRatio <= 0 || $scope.pcsAllocationRatio > 1)
return true;
if ($scope.economicAllocationRatio <= 0 || $scope.economicAllocationRatio > 1)
return true;
if ($scope.workhourAllocationRatio <= 0 || $scope.workhourAllocationRatio > 1)
return true;
return false
}
}]);