/*
** 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