angular.module('CarbonFootprint') .controller('LCAMaterialTransportCtrl', ['$scope', '$http', '$routeParams', 'ParameterCacheService', 'JoinSurveyItemAndParameter', '$q', 'MultiLanguageService', 'ExportCsvService', function ($scope, $http, $routeParams, ParameterService, JoinService, $q, MultiLanguageService, ExportCsvService) { // Multi-language resource object var resource; $scope.modalFormOption = {}; $scope.model = []; $scope.exlNms = []; $scope.commOptions = []; $scope.quoteLCAID = 0; // 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.selectRowTransport = { selectedRow: null, toBeEdit: null, select: function (row) { selectedRow = row; }, getSelected: function () { return selectedRow; } }; $scope.modalFormTransportOption = {}; $scope.modelTransport = []; $scope.preAlertTime = new Date(); $scope.checkUnit = function (selectRow) { //console.log('checkUnit', selectRow); if (typeof (selectRow.AnnualPurchaseAmountUnit) === 'undefined' || typeof (selectRow.Unit) === 'undefined') return; selectRow.AnnualPurchaseAmountUnit = selectRow.AnnualPurchaseAmountUnit.trim(); selectRow.Unit = selectRow.Unit.trim(); if (selectRow.AnnualPurchaseAmountUnit.length <= 0 || selectRow.Unit.length <= 0 || selectRow.AnnualPurchaseAmountUnit === selectRow.Unit) return; var timeDiff = new Date() - $scope.preAlertTime; //var msg = selectRow.AnnualPurchaseAmountUnit + '!=' + selectRow.Unit; if (timeDiff > 99) alert(resource['ActivityStrengthUnitCheck'] + ''); $scope.preAlertTime = new Date(); } $scope.createProcess = function () { var toBeCreated = {}; toBeCreated.ID = 0; toBeCreated.LCAID = $routeParams.LCAID; toBeCreated.AnnualPurchaseAmountUnit = 'PCS'; $scope.selectRow.toBeEdit = toBeCreated; $scope.modalFormOption.show = true; $scope.save = function () { JoinService.joinAsync([toBeCreated]).then(function () { updateKgCO2e(toBeCreated); $http.post($scope.baseUrl+'/api/MaterialTransport/Save/' + $routeParams.LCAID + "/" + toBeCreated.ID, toBeCreated) .success(function (data) { //console.log('create save',data); if (data.Success == false) alert(data.Msg); else { getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.currentPage = 1; $scope.model = response.tblist; } }, function (error) { console.log(error); }); $scope.modalFormOption.show = false; } }); }); }; }; $scope.selectProcess = function (row) { $scope.selectRowTransport.selectedRow = null; $scope.selectRow.select(row); getAllTransportDataAsync(row.ID) .then(function (response) { if (response.tblist) { $scope.currentTransportPage = 1; $scope.modelTransport = response.tblist; } }, function (error) { console.log(error); }); } $scope.editProcess = function (selected) { var toBeEdit = $scope.selectRow.toBeEdit = angular.copy(selected); $scope.modalFormOption.show = true; $scope.save = function () { JoinService.joinAsync([toBeEdit]).then(function () { updateKgCO2e(toBeEdit); $http.post($scope.baseUrl+'/api/MaterialTransport/Save/' + toBeEdit.LCAID + "/" + toBeEdit.ID, toBeEdit) .success(function (data) { if (data.Success == false) alert(data.Msg); else { angular.copy(data, selected); $scope.modalFormOption.show = false; } }); }); }; }; $scope.deleteProcess = function (selected) { var isConfirm = confirm(resource.DeleteItemMsg); if (isConfirm) { $http.delete($scope.baseUrl+"/api/MaterialTransport/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.modelTransport = []; }); } }; $scope.createProcessTransport = function () { var toBeCreated = {}; toBeCreated.ID = 0; toBeCreated.LCAID = $routeParams.LCAID; toBeCreated.RiskAssmtMaterialID = $scope.selectRow.getSelected().ID; $scope.selectRowTransport.toBeEdit = toBeCreated; $scope.modalFormTransportOption.show = true; $scope.saveTransport = function () { JoinService.joinAsync([toBeCreated]).then(function () { updateTransportKgCO2e(toBeCreated); $http.post($scope.baseUrl+'/api/MaterialTransport/SaveTransport/' + $scope.selectRow.getSelected().ID + "/" + toBeCreated.ID, toBeCreated) .success(function (data) { if (data.Success == false) alert(data.Msg); else { getAllTransportDataAsync($scope.selectRow.getSelected().ID) .then(function (response) { if (response.tblist) { $scope.currentTransportPage = 1; $scope.modelTransport = response.tblist; } }, function (error) { console.log(error); }); getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.model = response.tblist; } }, function (error) { console.log(error); }); $scope.modalFormTransportOption.show = false; } }); }); }; }; $scope.editProcessTransport = function (selected) { var toBeEdit = $scope.selectRowTransport.toBeEdit = angular.copy(selected); $scope.modalFormTransportOption.show = true; $scope.saveTransport = function () { JoinService.joinAsync([toBeEdit]).then(function () { updateTransportKgCO2e(toBeEdit); $http.post($scope.baseUrl+'/api/MaterialTransport/SaveTransport/' + $scope.selectRow.getSelected().ID + "/" + toBeEdit.ID, toBeEdit) .success(function (data) { if (data.Success == false) alert(data.Msg); else { angular.copy(data, selected); getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.model = response.tblist; } }, function (error) { console.log(error); }); $scope.modalFormTransportOption.show = false; } }); }); }; }; $scope.deleteProcessTransport = function (selected) { var isConfirm = confirm(resource.DeleteItemMsg); if (isConfirm) { $http.delete($scope.baseUrl+"/api/MaterialTransport/DeleteTransport/" + selected.ID) .success(function () { var index = $scope.modelTransport.indexOf(selected); $scope.modelTransport.splice(index, 1); // This operate is base on selectRow directive in TableEdit.js file $scope.selectRowTransport.unSelect(); getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.model = response.tblist; } }, function (error) { console.log(error); }); }); } }; /* modelBuilder for create & export */ /** Caution!: The 'ParameterID' property depends on 'options'. This modelBuilder is binded with this controller. Refactoring modelBuilder.create() with more arugments will be better **/ $scope.modelBuilder = { create: function (data, LCAID) { try { var model = { StrCommuting: data[0], StrTotalEmployees: data[1], StrWorkingDays: data[2], StrAverageMovingDistance: data[3], StrCoefficient: data[4], StrPersonDayKm: data[5], StrKgCO2e: data[6] }; // check imported data length and model length if (data.length !== getObjectSize(model)) { throw resource['EXCELFileFormatWrong']; } return model; } catch (err) { return { error: err }; } }, export: function (list) { var data = []; // header data.push([ $scope.exlNms[0], $scope.exlNms[1], $scope.exlNms[2], $scope.exlNms[3], $scope.exlNms[4], $scope.exlNms[5], $scope.exlNms[6], ]); // body angular.forEach(list, function (entry) { var csv = []; //column 1 csv.push(entry.StrCommuting); //column 2 csv.push(entry.TotalEmployees); //column 3 csv.push(entry.WorkingDays); //column 4 csv.push(entry.AverageMovingDistance); //column 5 csv.push(entry.Coefficient); //column 6 csv.push(entry.PersonDayKm); //column 7 csv.push(entry.KgCO2e); data.push(csv); }); ExportCsvService.startExport(data, "Export_EmployeeCommuting.csv"); } }; $scope.fileImportOptions = { modelBuilder: $scope.modelBuilder, saveAsync: batchCreateAndUpdateCache }; $scope.fileImportModal = { show: false }; /* quote options & modal control */ $scope.quoteOptions = { queryDataAsyncFn: function (LCAID) { var deferred = $q.defer(); $scope.quoteLCAID = LCAID; getAllDataAsync(LCAID).then(function (data) { deferred.resolve(data.tblist); }) return deferred.promise; }, saveAsyncFn: quoteSave }; $scope.quoteModal = { show: false }; // Get data and prepare $scope.model getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.currentPage = 1; $scope.model = response.tblist; $scope.exlNms = response.exlNms; $scope.commOptions = response.commOptions; } }, function (error) { console.log(error); }); // Get multilanguage resource MultiLanguageService.getResourceAsync() .then(function (response) { resource = response; }, function (error) { console.log(error); }); /** * Private function: save all async * @param {[Array]} : array of parsed objects * @return {[promise]} */ function batchCreateAndUpdateCache(parsedList) { var deferred = $q.defer(); JoinService.joinAsync(parsedList) .then(function () { $http.post($scope.baseUrl+'/api/MaterialTransport/SaveAll/' + $routeParams.LCAID, parsedList) .success(function (data) { if (data.ErrMsg !== '') { alert(data.ErrMsg); } else { // close modals $scope.fileImportModal.show = false; $scope.quoteModal.show = false; deferred.resolve(data); getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.currentPage = 1; $scope.model = response.tblist; $scope.exlNms = response.exlNms; $scope.commOptions = response.commOptions; } }, function (error) { console.log(error); }); } }) .error(function (e) { console.log(e.Message); alert(e.ExceptionMessage); }); }); return deferred.promise; } function quoteSave(parseList) { var deferred = $q.defer(); $http.post($scope.baseUrl + '/api/MaterialTransport/QuoteSaveAll/' + $routeParams.LCAID + '/' + $scope.quoteLCAID) .success(function (data) { deferred.resolve(data); if (data.ErrMsg !== '') { alert(data.ErrMsg); } else { $scope.quoteModal.show = false; getAllDataAsync($routeParams.LCAID) .then(function (response) { if (response.tblist) { $scope.currentPage = 1; $scope.model = response.tblist; $scope.exlNms = response.exlNms; $scope.commOptions = response.commOptions; } }, function (error) { console.log(error); }); } }) .error(function (e) { deferred.resolve(null); console.log(e.Message); alert(e.ExceptionMessage); }); return deferred.promise; } /* Private function: get all list data from server */ function getAllDataAsync(LCAID) { var deferred = $q.defer(); $http.get($scope.baseUrl+'/api/MaterialTransport/GetByLcaID/' + LCAID) .success(function (data) { deferred.resolve(data); }) .error(function () { deferred.resolve(null); }) return deferred.promise; } function getAllTransportDataAsync(C3EmissionID) { var deferred = $q.defer(); $http.get($scope.baseUrl+'/api/MaterialTransport/GetByC3EmissionId/' + C3EmissionID) .success(function (data) { deferred.resolve(data); }) .error(function () { deferred.resolve(null); }) return deferred.promise; } function updateKgCO2e(toBeEdit) { //console.log(toBeEdit); toBeEdit.ActivityIntensity = toBeEdit.MaterialSpec * toBeEdit.AnnualPurchaseAmount; toBeEdit.KgCO2e = toBeEdit.ActivityIntensity * toBeEdit.ParameterValue; //console.log('updateKgCO2e', toBeEdit.KgCO2e, toBeEdit.ActivityIntensity, toBeEdit.ParameterValue); } function updateTransportKgCO2e(toBeEdit) { //console.log('updateTransportKgCO2e', toBeEdit); toBeEdit.Scalar = toBeEdit.TransportWeight * toBeEdit.TransportDistance / 1000; toBeEdit.KgCO2e = toBeEdit.Scalar * toBeEdit.ParameterValue; //console.log('updateTransportKgCO2e', toBeEdit); } $scope.selectSimaproProcess = function (selectedMaterial) { $scope.simaproOption = {}; $scope.simaproOption.show = true; $scope.simaproOption.filter = 37; // SimaproOption.Material 原料 $scope.simaproOption.onOk = function (selectedParameter) { //selectedMaterial.KgCO2e = selectedParameter.Value;//?有問題 selectedMaterial.ParameterValue = selectedParameter.Value selectedMaterial.ParameterDescription = selectedParameter.DisplayNameTW + ': ' + selectedParameter.Remark; selectedMaterial.Unit = selectedParameter.Unit; $scope.checkUnit(selectedMaterial); //selectedMaterial.Comment = selectedParameter.DisplayName + " " + selectedParameter.Remark; } }; $scope.selectSimaproProcessTransport = function (selectedMaterial) { $scope.simaproOption = {}; $scope.simaproOption.show = true; $scope.simaproOption.filter = 13; // SimaproOption.GoodsTransportation 運輸 $scope.simaproOption.onOk = function (selectedParameter) { //selectedMaterial.Scalar = selectedParameter.Value;//?有問題 selectedMaterial.ParameterValue = selectedParameter.Value; selectedMaterial.ScalarComment = selectedParameter.DisplayName + " " + selectedParameter.Remark; selectedMaterial.ScalarUnit = selectedParameter.Unit; } }; }]);