/* ** Views/Partial/LCA/WorkHour.cshtml is using this controller */ angular.module('CarbonFootprint') .controller('LCAWorkHourCtrl', ['$q', '$scope', '$http', '$routeParams', 'ParameterCacheService', 'LCADetailCacheService', 'DATE_CONSTANTS', 'UploadFile', 'MultiLanguageService', 'ExportCsvService', function ($q, $scope, $http, $routeParams, ParameterCacheService, LCADetailCacheService, DATE_CONSTANTS, UploadFile, MultiLanguageService, ExportCsvService) { // Multi-language resource object var Resource; // this property controlls modal form , will be passed to table-edit-modal directive $scope.modalFormOption = {}; $scope.Editable = false; $scope.dataQualityOption = {}; $scope.dataQualityOption.data = {}; $scope.newPeopleType = ""; $scope.selectedPeopleType = "直接人員"; $scope.peopleTypes = ["直接人員", "間接人員" ]; $scope.onPeopleTypeChange = function () { console.log('onPeopleTypeChange', $scope.selectedPeopleType); getAllDataAsync($routeParams.LCAID, $scope.selectedPeopleType).then(function (data) { $scope.processWorkHoursData(data); }) }; $scope.createPeopleType = function () { if ($scope.newPeopleType.trim() == "") { return; } $http.post($scope.baseUrl + '/api/WorkHour/CreatePeopleTypes', { LCAID: $routeParams.LCAID, peopleType: $scope.newPeopleType} ).success(function (data) { $scope.peopleTypes = data.PeopleTypes; getPeopleTypes($scope.newPeopleType); $scope.selectedPeopleType = $scope.newPeopleType; $scope.newPeopleType = ""; getAllDataAsync($routeParams.LCAID, $scope.selectedPeopleType).then(function (data) { $scope.processWorkHoursData(data); }) }).error(function (data, status) { alert(data.ExceptionMessage); }); }; $scope.deletePeopleType = function () { if ($scope.selectedPeopleType == "直接人員" || $scope.selectedPeopleType == "間接人員") { alert("無法刪除預設人員"); return; } $http.post($scope.baseUrl + '/api/WorkHour/DeletePeopleTypes', { LCAID: $routeParams.LCAID, peopleType: $scope.selectedPeopleType } ).success(function (data) { $scope.peopleTypes = data.PeopleTypes; getPeopleTypes(data.PeopleTypes[0]); $scope.selectedPeopleType = data.PeopleTypes[0]; getAllDataAsync($routeParams.LCAID, $scope.selectedPeopleType).then(function (data) { $scope.processWorkHoursData(data); }) }).error(function (data, status) { alert(data.ExceptionMessage); }); }; function getPeopleTypes (selectedPeopleType = null) { $http.get($scope.baseUrl + '/api/WorkHour/GetPeopleTypes/' + $routeParams.LCAID ).success(function (data) { $scope.peopleTypes = data.PeopleTypes; if (selectedPeopleType != null) { $scope.selectedPeopleType = selectedPeopleType; } }).error(function (data, status) { alert(data.ExceptionMessage); }); } getPeopleTypes(); // 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.updateRow = function (row) { if (typeof (row.newWorkerNumber) === 'undefined' || row.newWorkerNumber <= 0) return; if (typeof (row.newWorkDay) === 'undefined' || row.newWorkDay <= 0) return; if (typeof (row.newAverageHourPerDay) === 'undefined' || row.newAverageHourPerDay <= 0) return; row.Scalar = row.newWorkerNumber * row.newWorkDay * row.newAverageHourPerDay; //console.log('updateRow', row); }; /* modelBuilder for create & export */ $scope.modelBuilder = { create: function (data, LCAID) { try { // check Type var typeID; var typeName = data[1]; var WorkHourPeopleType = undefined; if (typeName == Resource['DirectStaff']) typeID = 0; else if (typeName == Resource['IndirectStaff']) typeID = 1; else { typeID = 2; WorkHourPeopleType = typeName; } var model = { // importing only depends on the order of data, not month Type: typeID, WorkerNumber: parseFloat(data[2]) ? data[2] : 0, WorkDay: parseFloat(data[3]) ? data[3] : 0, AverageHourPerDay: parseFloat(data[4]) ? data[4] : 0, Description: data[5], WorkHourPeopleType: WorkHourPeopleType, LCAID: LCAID }; model.Scalar = parseFloat(model.WorkerNumber) * parseFloat(model.WorkDay) * parseFloat(model.AverageHourPerDay) console.log(data.length) console.log(getObjectSize(model)) if (data.length !== getObjectSize(model) - 2) throw Resource['EXCELFileFormatWrong']; // if find incorrect Type if (model.Type === undefined) throw Resource['DirectStaff'] + '/' + Resource['IndirectStaff'] + ' Error'; return model; } catch (err) { return { error: err }; } }, export: function (list) { $http.get($scope.baseUrl + '/api/WorkHour/GetAllWorkHours/' + $routeParams.LCAID) .success(function (response) { var workHours = response.WorkHours; var startDate = new Date($scope.lcaDetail.StartDate); var endDate = new Date($scope.lcaDetail.EndDate); // 將起訖日期改為同年第一與最後一天 startDate.setMonth(0, 1); endDate.setMonth(11, 31); var currentDate = startDate; var directIndex = 0; for (var i = 0; i < workHours.length; i++) { var currentMonth = DATE_CONSTANTS.months[(workHours[i].Index-1) % 12]; var currentYear = currentDate.getFullYear() + parseInt(workHours[i].Index / 12); workHours[directIndex].Month = currentMonth; workHours[directIndex++].showYear = currentYear; } var data = []; // header data.push([Resource['StaticLabelGlobal_Month'], Resource['DirectStaff'] + '/' + Resource['IndirectStaff'], Resource['WorkerNumber'], Resource['WorkDays'], Resource['AverageHourPerDay'], Resource['DescriptionAndExplanation'] + Resource['StaticLabelEvidenceOfElectronicFileDescription']]); // body angular.forEach(workHours, function (entry) { var csv = []; //column 1 csv.push(entry.Month); //column 2 if (entry.Type == 0) csv.push(Resource['DirectStaff']); else if (entry.Type == 1) csv.push(Resource['IndirectStaff']); else csv.push(entry.WorkHourPeopleType); //column 3 csv.push(entry.WorkerNumber); //column 4 csv.push(entry.WorkDay); //column 5 csv.push(entry.AverageHourPerDay); //column 6 csv.push(entry.Description); data.push(csv); }) ExportCsvService.startExport(data, "Export_WorkHour.csv"); }) } } /* file import options & modal control */ $scope.fileImportOptions = { modelBuilder: $scope.modelBuilder, saveAsync: batchCreateAndUpdateCacheAllTypes }; $scope.fileImportModal = { show: false } /* quote options & modal control */ $scope.quoteOptions = { queryDataAsyncFn: function (LCAID) { var deferred = $q.defer(); $http.get($scope.baseUrl + '/api/WorkHour/GetAllWorkHours/' + LCAID) .success(function (data) { deferred.resolve(data.WorkHours); }) return deferred.promise; }, saveAsyncFn: batchCreateAndUpdateCacheAllTypes } $scope.quoteModal = { show: false } // Sync 'ParameterID' based on 'Source', because ngModel of