EchoTex_Payroll/HRM.UI/ClientApp/src/app/attendance/echotex-roster-assignment/echotex-roster-assignment.component.ts
2024-10-14 10:01:49 +06:00

369 lines
15 KiB
TypeScript

import { Component, OnInit, ViewEncapsulation } from '@angular/core';
import { EmployeeServices } from '../../_services/employee/employee.service';
import { AttendanceServices } from '../../_services/attendance/attendance.service';
import { ApiService } from '../../app.api.service';
import { HRMNotificationService } from '../../app.notification.service';
import { DataTransferService } from '../../data.transfer.service';
import { AppWindowPopUp } from '../../app.windowPopup.service';
import { UntilityHandlerService } from '../../utility.hanldler.service';
import { EmployeeWorkPlanSetup } from '../../_models/Attendance/employeeWorkPlanSetup';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { HrEmployee } from '../../_models/HREmployee/hrEmployee';
import { SearchEmployee } from '../../_models/Employee/searchEmployee';
import { EnumWorkPlanGroup, HolidayDayOfWeek, EnumStatus, HolidayType, EnumWorkPlanDayType, EnumDayOfWeek } from '../../_models/enums';
import { Shift } from '../../_models/Attendance/shift';
import { WorkPlanGroup } from '../../_models/Attendance/workPlanGroup';
import { Employee } from '../../_models/Employee/employee';
import { WorkPlanSetup } from '../../core-hr/employee-profile/workPlanSetup';
import { loadingPanelService } from '../../hrm-loding panel/loding.panel.service';
import { Router } from '@angular/router';
import { DateTimePickerComponent } from '@progress/kendo-angular-dateinputs';
@Component({
selector: 'app-echotex-roster-assignment',
templateUrl: './echotex-roster-assignment.component.html',
styleUrls: ['./echotex-roster-assignment.component.css']
})
export class EchotexRosterAssignmentComponent implements OnInit {
rosterAssignmentForm: FormGroup;
empWorkPlanSetupList: EmployeeWorkPlanSetup[] = [];
shifts: Shift[];
workPlanGroupName = '';
workPlanGroupInitialShift = '';
workPlanGroupList: WorkPlanGroup[];
selectedEmployees: SearchEmployee[];
employees: Employee[];
empIds: number[] = [];
exportExcelFileName: string = '';
selectedWorkPlanID: number;
fixedWorkPlan: boolean = true;
startDate: Date;
holidayDayOfWeekArray = Object.values(HolidayDayOfWeek);
constructor(public employeeService: EmployeeServices,
public attendanceServices: AttendanceServices,
public apiService: ApiService,
public notificationService: HRMNotificationService,
public dataTransferService: DataTransferService,
public WindowPopUp: AppWindowPopUp,
public utilityHandlerService: UntilityHandlerService,
public loadingPanel: loadingPanelService,
private router: Router) {
this.apiService.selectedMenuName = 'Roster Assignment';
this.exportExcelFileName = 'RosterAssignment.xlsx';
this.attendanceServices.getShifts(EnumStatus.Regardless).subscribe(
(resp) => {
this.shifts = resp;
},
() => {
},
() => {
}
);
this.loadingPanel.ShowLoadingPanel = true;
this.attendanceServices.getWorkPlanGroupList(EnumStatus.Regardless).subscribe(
(resp) => {
this.workPlanGroupList = resp;
},
(x) => {
this.loadingPanel.ShowLoadingPanel = false;
},
() => {
this.loadingPanel.ShowLoadingPanel = false;
}
);
}
ngOnInit() {
this.createForm();
// this.loadData();
this.workPlanGroupInitialShift = 'Select a Roster to view detail';
}
createForm() {
this.rosterAssignmentForm = new FormBuilder().group({
group: ['', Validators.required],
startDate: [''],
});
}
//loadData() {
// this.attendanceServices.getEmployeeWorkPlanSetupList().subscribe(
// (resp) => {
// this.empWorkPlanSetupList = resp;
// },
// () => {
// },
// () => {
// },
// );
//}
public GetSelectedEmployee(childData) {
this.selectedEmployees = childData;
}
UploadEmployeeRoster() {
this.router.navigateByUrl('/common-interface/data-upload/52');
}
public AddtotheList() {
if (this.selectedWorkPlanID == undefined || this.selectedWorkPlanID == null) {
this.notificationService.showWarning('Please select an work-plan/Roster group');
return;
}
if (this.selectedEmployees == undefined || this.selectedEmployees.length == 0) {
this.notificationService.showWarning('Please select employee');
return;
}
if (this.selectedEmployees != undefined) {
this.selectedEmployees.forEach(x => {
if (this.empWorkPlanSetupList.findIndex(i => i.employeeID == x.employeeID) == -1) {
var ewpList: EmployeeWorkPlanSetup = new EmployeeWorkPlanSetup();
ewpList.employeeID = x.employeeID;
ewpList.employeeNoView = x.employeeNo;
ewpList.employeeNameView = x.name;
ewpList.workPlanGroupID = this.selectedWorkPlanID;
var wp = this.workPlanGroupList.find(w => w.id == this.selectedWorkPlanID);
ewpList.workPlanGroupNameView = wp.name;
debugger;
if (!this.fixedWorkPlan) {
ewpList.startDate = this.startDate;
// ewpList.weekEndOn = this.getDayOfWeekEnum(ewpList.startDate);
ewpList.weekEndOn = ewpList.startDate.getDay();
}
var wplan = this.workPlanGroupList.find(x => x.id == this.selectedWorkPlanID);
ewpList.workPlanGroupType = wplan.type;
this.empWorkPlanSetupList.push(ewpList);
}
});
var oldList: EmployeeWorkPlanSetup[];
this.attendanceServices.IsEmpExistInWorkplan(this.selectedEmployees).subscribe(
(resp: any) => {
oldList = resp;
},
(x) => {
this.notificationService.showWarning(x.error);
},
() => {
let str = '';
if (oldList != undefined) {
oldList.forEach(x => {
var item = this.empWorkPlanSetupList.find(e => e.employeeID == x.employeeID
&& e.workPlanGroupID != x.workPlanGroupID);
if (item != undefined) {
item.oldWorkPlanGroupID = x.workPlanGroupID;
item.oldWorkPlanGroupName = x.workPlanGroupNameView;
str = str + x.employeeNameView + '(' + x.employeeNoView + '),';
}
});
}
if (str.length > 0) {
str = str.substring(0, str.length - 1);
str = 'Employee already in another Group:' + str;
alert(str);
}
}
);
}
}
populateEmpWorkPlanByWorkGroup(selectedwrokPlan: any) {
if (selectedwrokPlan == undefined) {
return;
}
//this.attendanceServices.getEmployeeWorkPlanSetupByWPGroupID(selectedwrokPlan).subscribe(
// (resp: any) => {
// this.empWorkPlanSetupList = resp;
// },
// (x) => {
// },
// () => {
// }
//);
var wplan = this.workPlanGroupList.find(x => x.id == selectedwrokPlan);
this.loadGroupTypeAndInitialShift(wplan);
}
loadGroupTypeAndInitialShift(workPlanGroup: WorkPlanGroup) {
this.loadingPanel.ShowLoadingPanel = true;
this.empWorkPlanSetupList = [];
debugger;
if (workPlanGroup.type != EnumWorkPlanGroup.Fixed &&
(workPlanGroup.type != undefined || workPlanGroup.type != null)) {
this.fixedWorkPlan = false;
this.startDate = new Date();
} else {
this.fixedWorkPlan = true;
}
this.attendanceServices.getEmployeeWorkPlanSetupByWPGroupID(workPlanGroup.id).subscribe(
(resp) => {
this.empWorkPlanSetupList = resp;
},
() => {
this.loadingPanel.ShowLoadingPanel = false;
},
() => {
//console.log(this.empWorkPlanSetupList);
debugger;
// if (this.empWorkPlanSetupList.length > 0) {
// if (this.empWorkPlanSetupList[0].workPlanGroupType != EnumWorkPlanGroup.Fixed &&
// (this.empWorkPlanSetupList[0].workPlanGroupType != undefined || this.empWorkPlanSetupList[0].workPlanGroupType != null)) {
// this.fixedWorkPlan = false;
// this.startDate = new Date();
// }
// else {
// this.fixedWorkPlan = true;
// }
// }
// else {
// this.fixedWorkPlan = true;
// }
this.loadingPanel.ShowLoadingPanel = false;
},
);
this.workPlanGroupName = '';
this.workPlanGroupName = workPlanGroup.name;
if (workPlanGroup.type === EnumWorkPlanGroup.Fixed) {
this.workPlanGroupInitialShift = '';
let tempShift = this.shifts.find(x => x.id === workPlanGroup.saturdayShiftID);
this.workPlanGroupInitialShift += '[' + 'Sat: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.sundayShiftID);
this.workPlanGroupInitialShift += '[' + 'Sun: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.mondayShiftID);
this.workPlanGroupInitialShift += '[' + 'Mon: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.tuesdayShiftID);
this.workPlanGroupInitialShift += '[' + 'Tue: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.wednesdayShiftID);
this.workPlanGroupInitialShift += '[' + 'Wed: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.thursdayShiftID);
this.workPlanGroupInitialShift += '[' + 'Thu: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.fridayShiftID);
this.workPlanGroupInitialShift += '[' + 'Fri: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
tempShift = this.shifts.find(x => x.id === workPlanGroup.saturdayShiftID);
this.workPlanGroupInitialShift += '[' + 'Sat: ' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
this.workPlanGroupInitialShift += '[' + 'Holiday 1: ' + HolidayDayOfWeek[workPlanGroup.holidayOne] + '], ';
this.workPlanGroupInitialShift += '[' + 'Holiday 2: ' + HolidayDayOfWeek[workPlanGroup.holidayTwo] + '], ';
} else {
this.workPlanGroupInitialShift = '';
const tempShift = this.shifts.find(x => x.id === workPlanGroup.saturdayShiftID);
this.workPlanGroupInitialShift += ' [' + (tempShift !== undefined ? tempShift.shortName : '❌') + '], ';
this.workPlanGroupInitialShift += '[' + 'Holiday 1: ' + HolidayDayOfWeek[workPlanGroup.holidayOne] + '], ';
this.workPlanGroupInitialShift += '[' + 'Holiday 2: ' + HolidayDayOfWeek[workPlanGroup.holidayTwo] + '], ';
}
}
saveEmpWorkPlan() {
this.empWorkPlanSetupList.forEach(x => {
var wplan: WorkPlanGroup = this.workPlanGroupList.find(y => x.workPlanGroupID == x.workPlanGroupID);
x.saturdayShiftID = wplan.saturdayShiftID;
x.sundayShiftID = wplan.sundayShiftID;
x.mondayShiftID = wplan.mondayShiftID;
x.tuesdayShiftID = wplan.tuesdayShiftID;
x.wednesdayShiftID = wplan.wednesdayShiftID;
x.thursdayShiftID = wplan.thursdayShiftID;
x.fridayShiftID = wplan.fridayShiftID;
x.employee = null;
});
this.loadingPanel.ShowLoadingPanel = true;
this.attendanceServices.saveEmployeeWorkPlanSetupList(this.empWorkPlanSetupList).subscribe(
() => {
},
(x) => {
this.loadingPanel.ShowLoadingPanel = false;
console.log(x);
this.notificationService.showError(x.error);
},
() => {
this.loadingPanel.ShowLoadingPanel = false;
this.notificationService.showSuccess('Saved Data successfully.');
}
);
}
public removeHandler(item: EmployeeWorkPlanSetup) {
if (!confirm('Are you sure to delete the item?')) {
return;
}
this.attendanceServices.deleteEmployeeWorkPlanSetupById(item).subscribe(
() => {
},
(x) => {
this.notificationService.showError(x.error);
},
() => {
let indexOfTheItem = this.empWorkPlanSetupList.indexOf(item);
if (indexOfTheItem > -1) {
this.empWorkPlanSetupList.splice(indexOfTheItem, 1);
}
this.notificationService.showSuccess('Data Removed successfully.');
}
);
}
public getHolidayDayOfWeek( day: number): string {
debugger;
day = day + 1;
switch (day) {
case HolidayDayOfWeek.Sunday:
return 'Sunday';
case HolidayDayOfWeek.Monday:
return 'Monday';
case HolidayDayOfWeek.Tuesday:
return 'Tuesday';
case HolidayDayOfWeek.Wednesday:
return 'Wednesday';
case HolidayDayOfWeek.Thursday:
return 'Thursday';
case HolidayDayOfWeek.Friday:
return 'Friday';
case HolidayDayOfWeek.Saturday:
return 'Saturday';
default:
return '';
}
}
// getDayOfWeek(date: Date): string {
// const daysOfWeek: string[] = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
// const dayIndex: number = date.getDay();
// return daysOfWeek[dayIndex];
// }
// getDayOfWeekEnum(date: Date): EnumDayOfWeek {
// console.log(date.getDay());
// const dayIndex: number = date.getDay();
// return dayIndex as EnumDayOfWeek;
// }
}