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

288 lines
13 KiB
JavaScript

angular.module('CarbonFootprint')
.controller('LCAEmployeeCommutingCtrl', ['$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 = [];
// 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.createProcess = function () {
var toBeCreated = {};
toBeCreated.Id = 0;
toBeCreated.LCAID = $routeParams.LCAID;
$scope.selectRow.toBeEdit = toBeCreated;
$scope.modalFormOption.show = true;
$scope.save = function () {
JoinService.joinAsync([toBeCreated]).then(function () {
$http.post($scope.baseUrl+'/api/EmployeeCommuting/Save/' + $routeParams.LCAID + "/" + toBeCreated.Id, toBeCreated)
.success(function (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.editProcess = function (selected) {
var toBeEdit = $scope.selectRow.toBeEdit = angular.copy(selected);
$scope.modalFormOption.show = true;
$scope.save = function () {
JoinService.joinAsync([toBeEdit]).then(function () {
$http.post($scope.baseUrl+'/api/EmployeeCommuting/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/EmployeeCommuting/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();
});
}
};
/* 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 = {
StrTotalEmployees: data[0],
StrWorkingDays: data[1],
StrRroundTrip: data[2],
StrAverageMovingDistance: data[3],
MovingScenario: data[4],
StrCoefficient: data[5],
CoefficienUnit: data[6],
CoefficientNote: data[7],
StrKgCO2e: data[8]
};
// 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],
$scope.exlNms[7],
$scope.exlNms[8],
]);
// body
angular.forEach(list, function (entry) {
var csv = [];
csv.push(entry.TotalEmployees);
csv.push(entry.WorkingDays);
csv.push(entry.StrRroundTrip);
csv.push(entry.AverageMovingDistance);
csv.push(entry.MovingScenario);
csv.push(entry.Coefficient);
csv.push(entry.CoefficienUnit);
csv.push(entry.CoefficientNote);
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();
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/EmployeeCommuting/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(parsedList) {
var deferred = $q.defer();
$http.post($scope.baseUrl+'/api/EmployeeCommuting/QuoteSaveAll/' + $routeParams.LCAID, parsedList)
.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/EmployeeCommuting/GetByLcaId/' + LCAID)
.success(function (data) {
deferred.resolve(data);
})
.error(function () {
deferred.resolve(null);
})
return deferred.promise;
}
$scope.selectSimaproProcess = function (selectedMaterial) {
$scope.simaproOption = {};
$scope.simaproOption.show = true;
$scope.simaproOption.filter = 14; // SimaproOption.PeopleTransportation 運輸
$scope.simaproOption.onOk = function (selectedParameter) {
selectedMaterial.Coefficient = selectedParameter.Value;
selectedMaterial.CoefficienUnit = selectedParameter.Unit;
selectedMaterial.CoefficientNote =
selectedParameter.DisplayNameTW + ': ' + selectedParameter.Remark;
}
};
}]);