import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { ApiService } from '../app.api.service'; import { EmployeeServices } from '../_services/employee/employee.service'; import { SelectableSettings, SelectAllCheckboxState } from '@progress/kendo-angular-grid'; import { SearchEmployee, SearchManager } from '../_models/Employee/searchEmployee'; import { EnumEmployeeStatus, EnumExtension, EnumGender, EnumSearchFrom, EnumSearchObjDataType, EnumSearchParameter, EnumSQLOperator } from '../_models/enums'; import { DynamicPicker, EnumDynamicpickerType } from './dynamic-picker/Dynamic-Picker'; import { BasicService } from '../_services/Basic/basic.service'; import { Subscription } from 'rxjs'; import { PickerDataTransferService } from '../data.transfer.service'; import { loadingPanelService } from '../hrm-loding panel/loding.panel.service'; import { HRMNotificationService } from '../app.notification.service'; import { GridDataResult, PageChangeEvent } from "@progress/kendo-angular-grid"; import { SortDescriptor, orderBy } from "@progress/kendo-data-query"; @Component({ selector: 'app-employee-picker', templateUrl: './employee-picker.component.html', // styleUrls: ['../../assets/kendo-grid/grid.css'], styles: [` .no-padding { padding: 0; } .k-overlay { opacity: 0; border: 1px solid #52527A; } .link-button { background: none; border: none; color: #007bff; text-decoration: underline; cursor: pointer; padding: 0; font-size: inherit; }`], encapsulation: ViewEncapsulation.None, }) // ############################# // Do not change this class without discuss to Salauddin shamim export class EmployeePickerComponent implements OnInit { valueChangedSubscription: Subscription; genders: any = EnumExtension.getNamesAndValues(EnumGender); public employeeCode: string; public employeeName: string; public active = true; public showPopUp = false; public showAdvancePopUp = false; public checkboxOnly = false; public mode = 'multiple'; public selectableSettings: SelectableSettings; taggedSelection: number[] = []; public searchEmployees: SearchEmployee[] = []; private loadingEmployee = false; public selectedEmployees: SearchEmployee[]; public selectedEmployee: SearchEmployee; departmentPicker: DynamicPicker; locationPicker: DynamicPicker; gradePicker: DynamicPicker; categoryPicker: DynamicPicker; religionPicker: DynamicPicker; selectedGender = undefined; designationpicker: DynamicPicker; checkLive = false; checkConfirmed = false; checkPFMember = false; checkOTEligibility = false; checkExpatriate = false; checkIA = false; checkAccessCard = false; isDatePickerDisabled = true; fromDate: Date = new Date(); toDate: Date = new Date(); empFromDate: Date; empToDate: Date; joiningfromDate: Date = new Date(); joiningtoDate: Date = new Date(); checkLiveNo = false; checkConfirmedNo = false; checkPFMemberNo = false; checkOTEligibilityNo = false; checkExpatriateNo = false; checkAccessCardNo = false; checkJoiningDate: boolean = false; employeeCodeFrom: string; employeeCodeTo: string; employeeCodes: string; nidno: string; employeeCount: number = 0; count: number = 0; isMoreOptionsVisible: boolean = false; isSpanArrowDown: boolean = true; isSpanArrowUp: boolean = false; gridHeight: number = 305; @Input() public payrollTypeID: number; @Input() public isRecruitment: number; @Input() public set isClear(value) { debugger; if (value) { this.selectedItems = []; // this.count=0; this.taggedSelection.length = 0; this.employeeCount = 0; } else { this.selectedItems = []; // this.count=0; this.taggedSelection.length = 0; this.employeeCount = 0; } } @Input() public set setSelectedEmp(inputedEmp: SearchEmployee) { if (inputedEmp !== undefined) { this.selectedEmployee = inputedEmp; this.taggedSelection = []; this.taggedSelection.push(this.selectedEmployee.employeeID); this.selectedAutoCmptEmp = this.selectedEmployee.employeeNo + ' ' + this.selectedEmployee.name; this.ItemSelected.emit(this.selectedEmployee); } else { this.selectedEmployee = new SearchEmployee(); this.selectedAutoCmptEmp = ''; } } editedEmpId: number; @Input() public set setSelectedEmpByID(empID) { this.editedEmpId = empID; if (this.editedEmpId !== undefined) { this.search(); } } private empCodeNameList: Array; private empCodeNameListSource: Array; public selectedAutoCmptEmp: string; public gridMultiSelect = false; @Input() pickerFormGroup: FormGroup; @Input() pickerformControlName = 'EmployeeID'; @Input() public set MultiSelect(ismultiselect: boolean) { if (ismultiselect !== undefined) { /* this.gridMultiSelect = true;*/ this.gridMultiSelect = ismultiselect; this.setSelectableSettings(); } } @Input() public set isActive(isActive: boolean) { this.active = isActive; } public _searchForSalary: boolean = false; public _searchForUndoSalary: boolean = false; @Input() public set searchForSalary(searchForSalary: boolean) { this._searchForSalary = searchForSalary; } @Input() public set searchForUndoSalary(searchForUndoSalary: boolean) { this._searchForUndoSalary = searchForUndoSalary; } @Output() cancel: EventEmitter = new EventEmitter(); @Output() ItemSelected: EventEmitter = new EventEmitter(); // Do not change this class without discuss to Salauddin shamim /** role-permission-entry ctor */ @Input() fixedGrades: number[] = undefined; public pageSize = 25; public skip = 0; public gridView: GridDataResult; public data: unknown[]; public selectAllState: SelectAllCheckboxState = "unchecked"; public selectedItems: number[] = []; constructor(public api: ApiService, public formBuilder: FormBuilder, public router: Router, public route: ActivatedRoute, public empSrvc: EmployeeServices, public basicService: BasicService, public pickerService: PickerDataTransferService, public loadingService: loadingPanelService, public notificationService: HRMNotificationService ) { this.designationpicker = new DynamicPicker(EnumDynamicpickerType.Designation, true); this.locationPicker = new DynamicPicker(EnumDynamicpickerType.Location, true); this.departmentPicker = new DynamicPicker(EnumDynamicpickerType.Department, true); this.gradePicker = new DynamicPicker(EnumDynamicpickerType.Grade, true); this.categoryPicker = new DynamicPicker(EnumDynamicpickerType.Category, true); this.religionPicker = new DynamicPicker(EnumDynamicpickerType.Religion, true); this.taggedSelection = []; this.selectedEmployee = null; this.searchEmployees = []; if (this.pickerFormGroup === undefined) { this.pickerFormGroup = new FormGroup({ EmployeeID: new FormControl(''), EmployeeCount: new FormControl('') }); } } ngOnInit() { this.checkLive = true; this.loadingService.ShowLoadingPanel = false; this.setSelectableSettings(); this.valueChangedSubscription == this.pickerService.dataChanged.subscribe( x => { if (x) { //this.employeeCount = x; } } ); } public onDataChange(event: PageChangeEvent): void { this.skip = event.skip; this.loadData(); } moreSearchClick() { this.isMoreOptionsVisible = !this.isMoreOptionsVisible; if (this.isMoreOptionsVisible === true) { this.isSpanArrowDown = !this.isSpanArrowDown; this.isSpanArrowUp = !this.isSpanArrowUp; this.gridHeight = 180; } else { this.isSpanArrowDown = !this.isSpanArrowDown; this.isSpanArrowUp = !this.isSpanArrowUp; this.gridHeight = 305; } } public sort: SortDescriptor[] = [ { field: "employeeNo", dir: "asc", }, ]; public loadData(): void { this.gridView = { data: orderBy(this.data.slice(this.skip, this.skip + this.pageSize), this.sort), total: this.data.length, }; this.selectedItems = []; this.gridView.data.forEach(x => { if (this.taggedSelection.findIndex(y => y == x.employeeID) != -1) { this.selectedItems.push(x.employeeID); } } ); } public onSelectedKeysChange(evt: any): void { const len = evt.length; if (len === 0) { this.taggedSelection = []; this.selectAllState = "unchecked"; } else if (len > 0 && len <= this.searchEmployees.length) { var pagedata = this.gridView.data; pagedata.forEach(x => { var ind = evt.findIndex(y => y == x.employeeID); if (ind != -1) { var rv = this.taggedSelection.findIndex(r => r == x.employeeID) if (rv == -1) this.taggedSelection.push(x.employeeID); } else { var rvt = this.taggedSelection.findIndex(r => r == x.employeeID) if (rvt != -1) this.taggedSelection.splice(rvt, 1); } }); this.selectAllState = "indeterminate"; } else { this.selectAllState = "checked"; } } public onSelectAllChange(checkedState: SelectAllCheckboxState): void { if (checkedState === "checked") { this.taggedSelection = this.searchEmployees.map((item) => item.employeeID); this.selectedItems = this.searchEmployees.map((item) => item.employeeID); this.selectAllState = "checked"; } else { this.taggedSelection = []; this.selectedItems = []; this.selectAllState = "unchecked"; } } setSelectableSettings(): void { if (this.gridMultiSelect === false) { this.selectableSettings = { checkboxOnly: true, mode: 'single', // this.mode }; } else { this.selectableSettings = { checkboxOnly: true, mode: 'multiple', // this.mode }; } } joiningDateCheckBoxClick(type: number, isYes: boolean) { //console.log(isYes); this.isDatePickerDisabled = !isYes; if (this.checkJoiningDate === true) this.checkJoiningDate = false; else { this.checkJoiningDate = true; } } yesNoCheckBoxClick(type: number, isYes: any) { if (type == 1) { if (isYes == true) { this.checkLiveNo = false; } else { this.checkLiveNo = true; } } if (type == 2) { if (isYes == true) { this.checkLive = false; } else { this.checkLive = true; } } //if (type == 3) { // if (isYes == true) { // this.checkConfirmedNo = false; // } // else { // this.checkConfirmedNo = true; // } //} //if (type == 4) { // if (isYes == true) { // this.checkConfirmed = false; // } // else { // this.checkConfirmed = true; // } //} //if (type == 5) { // if (isYes == true) { // this.checkPFMemberNo = false; // } // else { // this.checkPFMemberNo = true; // } //} //if (type == 6) { // if (isYes == true) { // this.checkPFMember = false; // } // else { // this.checkPFMember = true; // } //} //if (type == 7) { // if (isYes == true) { // this.checkOTEligibilityNo = false; // } // else { // this.checkOTEligibilityNo = true; // } //} //if (type == 8) { // if (isYes == true) { // this.checkOTEligibility = false; // } // else { // this.checkOTEligibility = true; // } //} //if (type == 9) { // if (isYes == true) { // this.checkOTEligibilityNo = false; // } // else { // this.checkOTEligibilityNo = true; // } //} //if (type == 10) { // if (isYes == true) { // this.checkExpatriate = false; // } // else { // this.checkExpatriate = true; // } //} if (type == 11) { if (isYes == true) { this.checkIA = true; this.checkLive = false; this.checkLiveNo = false; } else { this.checkIA = false; } } } hasNumber(myString) { return /\d/.test(myString); } handleFilter(value) { const str: string = value; if (value.length === 0 || this.empCodeNameList === undefined) { this.empCodeNameList = []; this.empCodeNameListSource = []; } if (str !== '') { this.empCodeNameList = []; /*if (this.empCodeNameList.length === 0) {*/ let code = ''; let name = ''; if (this.hasNumber(value)) { code = value; } else { name = value; } this.loadingEmployee = true; this.empSrvc.getEmpCodeName(code, name) .subscribe( (resp: any) => { this.searchEmployees = resp; }, (err: any) => { // ON ERROR this.loadingEmployee = false; }, () => { // ON Success this.loadingEmployee = false; this.empCodeNameListSource = []; this.searchEmployees.forEach(x => { this.empCodeNameListSource.push(x.employeeNo + ' ' + x.name); }); this.empCodeNameList = this.empCodeNameListSource.filter((s) => s.toLowerCase().indexOf(value.toLowerCase()) !== -1); } ); /*} else { this.empCodeNameList = this.empCodeNameListSource.filter((s) => s.toLowerCase().indexOf(value.toLowerCase()) !== -1); }*/ } } // Do not change this class without discuss to Salauddin shamim public valueChange(value: string): void { if (value !== undefined && value !== '') { const str: string[] = value.trim().split(' '); const Searchemp = this.searchEmployees.find(x => x.employeeNo === str[0]); if (Searchemp !== undefined) { this.selectedEmployee = Searchemp; this.ItemSelected.emit(this.selectedEmployee); this.selectedItems.push(this.selectedEmployee.employeeID); this.taggedSelection.push(this.selectedEmployee.employeeID); // this.pickerFormGroup[this.pickerformControlName].value = undefined; } else { this.selectedEmployee = undefined; this.ItemSelected.emit(undefined); this.selectedItems = []; this.taggedSelection = []; } } else { this.selectedEmployee = undefined; this.ItemSelected.emit(undefined); this.selectedItems = []; this.taggedSelection = []; // this.pickerFormGroup[this.pickerformControlName].value = undefined; } } public autoCompleteSelected(value: any): void { this.selectedEmployee = value; } search() { //debugger const srcManager: SearchManager = new SearchManager(EnumSearchFrom.Employee); srcManager.withName = true; srcManager.searchForSalary = this._searchForSalary; srcManager.searchUndoSalary = this._searchForUndoSalary; if (this.checkJoiningDate == undefined && this.checkJoiningDate == true) { srcManager.Parameter.AddParam(EnumSearchParameter.JoiningDate, EnumSearchObjDataType.Date, this.joiningfromDate); srcManager.Parameter.AddParam(EnumSearchParameter.JoiningDate, EnumSearchObjDataType.Date, this.joiningtoDate); } if (this.employeeCode !== undefined && this.employeeCode != null && this.employeeCode !== '') { srcManager.Parameter.AddParam(EnumSearchParameter.EmployeeNo, EnumSearchObjDataType.String, this.employeeCode.trim()); } if (this.employeeName !== undefined && this.employeeName !== null && this.employeeName !== '') { srcManager.Parameter.AddParam(EnumSearchParameter.Name, EnumSearchObjDataType.String, this.employeeName.trim(), EnumSQLOperator.Like); } if (this.payrollTypeID !== undefined) { srcManager.Parameter.AddParam(EnumSearchParameter.PayrollTypeID, EnumSearchObjDataType.Number, this.payrollTypeID, EnumSQLOperator.EqualTo); } if (this.departmentPicker.selectedIDs !== undefined && this.departmentPicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.DepartmentID, EnumSearchObjDataType.String, this.departmentPicker.getSelectedValuesIn(), EnumSQLOperator.In); } if (this.designationpicker.selectedIDs !== undefined && this.designationpicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.DesignationID, EnumSearchObjDataType.String, this.designationpicker.getSelectedValuesIn(), EnumSQLOperator.In); } if (this.locationPicker.selectedIDs !== undefined && this.locationPicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.LocationID, EnumSearchObjDataType.String, this.locationPicker.getSelectedValuesIn(), EnumSQLOperator.In); } if (this.categoryPicker.selectedIDs !== undefined && this.categoryPicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.CategoryID, EnumSearchObjDataType.String, this.categoryPicker.getSelectedValuesIn(), EnumSQLOperator.In); } if (this.religionPicker.selectedIDs !== undefined && this.religionPicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.ReligionID, EnumSearchObjDataType.String, this.religionPicker.getSelectedValuesIn(), EnumSQLOperator.In); } if (this.gradePicker.selectedIDs !== undefined && this.gradePicker.selectedIDs.length > 0) { srcManager.Parameter.AddParam(EnumSearchParameter.GradeID, EnumSearchObjDataType.String, this.gradePicker.getSelectedValuesIn(), EnumSQLOperator.In); } else if (this.fixedGrades != undefined) { var str: string; str = ''; this.fixedGrades.forEach(x => { str = str + x + ','; }); if (str.length > 0) { str = str.substring(0, str.length - 1); } if (str.length < 1) { this.notificationService.showWarning('Please select a Grade'); return; } srcManager.Parameter.AddParam(EnumSearchParameter.GradeID, EnumSearchObjDataType.String, str, EnumSQLOperator.In); } if (this.selectedGender !== undefined) { srcManager.Parameter.AddParam(EnumSearchParameter.Gender, EnumSearchObjDataType.Number, this.selectedGender, EnumSQLOperator.EqualTo); } if (this.checkConfirmed === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Confirm, EnumSearchObjDataType.boolean, this.checkConfirmed, EnumSQLOperator.EqualTo); } else if (this.checkConfirmedNo === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Confirm, EnumSearchObjDataType.boolean, false, EnumSQLOperator.EqualTo); } if (this.checkPFMember === true) { srcManager.Parameter.AddParam(EnumSearchParameter.PFMember, EnumSearchObjDataType.boolean, this.checkPFMember, EnumSQLOperator.EqualTo); } else if (this.checkPFMemberNo === true) { srcManager.Parameter.AddParam(EnumSearchParameter.PFMember, EnumSearchObjDataType.boolean, false, EnumSQLOperator.EqualTo); } if (this.checkOTEligibility === true) { srcManager.Parameter.AddParam(EnumSearchParameter.OTEligible, EnumSearchObjDataType.boolean, this.checkOTEligibility, EnumSQLOperator.EqualTo); } else if (this.checkOTEligibilityNo === true) { srcManager.Parameter.AddParam(EnumSearchParameter.OTEligible, EnumSearchObjDataType.boolean, false, EnumSQLOperator.EqualTo); } if (this.checkExpatriate === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Expatriate, EnumSearchObjDataType.boolean, this.checkExpatriate, EnumSQLOperator.EqualTo); } else if (this.checkExpatriateNo === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Expatriate, EnumSearchObjDataType.boolean, false, EnumSQLOperator.EqualTo); } if (this.checkLive === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Status, EnumSearchObjDataType.Number, 1, EnumSQLOperator.EqualTo); } if (this.checkLiveNo === true) { srcManager.Parameter.AddParam(EnumSearchParameter.Status, EnumSearchObjDataType.Number, 2, EnumSQLOperator.EqualTo); } if (this.checkIA === true) srcManager.Parameter.AddParam(EnumSearchParameter.Status, EnumSearchObjDataType.Number, EnumEmployeeStatus.IA, EnumSQLOperator.EqualTo); if (this.nidno === "") srcManager.Parameter.AddParam(EnumSearchParameter.NationalID, EnumSearchObjDataType.String, this.nidno, EnumSQLOperator.EqualTo); // if (this.employeeCodeFrom != "" && this.employeeCodeTo != "" && // Number(this.employeeCodeFrom) != NaN && Number(this.employeeCodeTo) != NaN) { // srcManager.Parameter.AddParam(EnumSearchParameter.FromEmployeeNO, EnumSearchObjDataType.Number, Number( this.employeeCodeFrom) - 1, EnumSQLOperator.GraterThan); // srcManager.Parameter.AddParam(EnumSearchParameter.ToEmployeeNO, EnumSearchObjDataType.Number,Number( this.employeeCodeTo) +1, EnumSQLOperator.SmallerThan); // } if (this.employeeCodeFrom != "" && this.employeeCodeTo != "" && !Number.isNaN(Number(this.employeeCodeFrom)) && !Number.isNaN(Number(this.employeeCodeTo))) { srcManager.Parameter.AddParam(EnumSearchParameter.FromEmployeeNO, EnumSearchObjDataType.Number, Number(this.employeeCodeFrom) - 1, EnumSQLOperator.GraterThan); srcManager.Parameter.AddParam(EnumSearchParameter.ToEmployeeNO, EnumSearchObjDataType.Number, Number(this.employeeCodeTo) + 1, EnumSQLOperator.SmallerThan); } if (this.employeeCodes != "") { srcManager.Parameter.AddParam(EnumSearchParameter.EmployeeNoIn, EnumSearchObjDataType.String, this.employeeCodes, EnumSQLOperator.In); } if (this.isDatePickerDisabled === false) { var fdate = new Date(this.empFromDate); var tdate = new Date(this.empToDate); srcManager.Parameter.AddParam(EnumSearchParameter.JoiningDateFrom, EnumSearchObjDataType.Date, new Date(fdate.setDate( fdate.getDate() - 1)).toDateString(), EnumSQLOperator.GraterThan); srcManager.Parameter.AddParam(EnumSearchParameter.JoiningDateTo, EnumSearchObjDataType.Date, new Date(tdate.setDate(tdate.getDate() + 1)).toDateString(), EnumSQLOperator.SmallerThan); } this.searchEmployees = []; this.loadingService.ShowLoadingPanel = true; this.empSrvc.getSearchEmployee(srcManager) .subscribe( (resp: any) => { this.searchEmployees = resp; }, (err: any) => { this.loadingService.ShowLoadingPanel = false; // ON ERROR }, () => { if (this.searchEmployees != undefined) { this.skip = 0; this.selectedItems = []; this.taggedSelection = []; this.data = this.searchEmployees; this.loadData(); } this.count = this.searchEmployees.length; this.loadingService.ShowLoadingPanel = false; if (this.editedEmpId !== undefined) { const editeEmp = this.searchEmployees.find(x => x.employeeID === this.editedEmpId); this.selectedAutoCmptEmp = editeEmp.employeeNo + ' ' + editeEmp.name;; } // ON Success } ); } public onCancel(e): void { this.closeForm(); } public onSelect(e): void { this.selectedEmployees = []; this.selectedEmployee = undefined; if (this.taggedSelection.length > 0) { if (this.gridMultiSelect === true) { this.taggedSelection.forEach(empid => { this.selectedEmployees.push(this.searchEmployees.find(x => x.employeeID === empid)); }); } else { this.selectedItems.forEach(empid => { this.selectedEmployee = this.searchEmployees.find(x => x.employeeID === empid); }); } } if (this.gridMultiSelect === false) { this.selectedAutoCmptEmp = this.selectedEmployee.employeeNo + '-' + this.selectedEmployee.name; this.ItemSelected.emit(this.selectedEmployee); } else { this.ItemSelected.emit(this.selectedEmployees); } this.EmployeeCount(); this.showPopUp = false; } private SetEmployee(employeeid: number): void { this.empSrvc.getSearchEmployeebyid(employeeid) .subscribe( (resp: any) => { this.selectedEmployee = resp; }, (err: any) => { // ON ERROR }, () => { } ); } private closeForm(): void { this.showPopUp = false; this.EmployeeCount(); this.cancel.emit(); } private closeAdvanceForm(): void { this.showAdvancePopUp = false; // this.EmployeeCount(); // this.cancel.emit(); } private EmployeeCount(): void { if (this.selectedEmployees != undefined) { this.employeeCount = this.selectedEmployees.length; } else { this.employeeCount = 0; } } private OpenForm(): void { //this.selectedEmployees = []; //this.selectedEmployee = new SearchEmployee(); //this.taggedSelection = []; //this.selectedItems = []; if (this.selectedEmployee != undefined && this.searchEmployees != undefined) { this.selectedItems.push(this.selectedEmployee.employeeID); this.taggedSelection.push(this.selectedEmployee.employeeID); } this.showPopUp = true; } private advanceSearchClick(): void { this.showAdvancePopUp = true; } private onClickAdvanceSelect() { if (!this.isDatePickerDisabled) { this.empFromDate = this.joiningfromDate; this.empToDate = this.joiningtoDate; } else { this.empFromDate = undefined; this.empToDate = undefined; } if (this.employeeCodeFrom === '' || this.employeeCodeTo === '') { this.employeeCodeFrom = undefined; this.employeeCodeFrom = undefined; } this.closeAdvanceForm(); } public onClickClear() { this.employeeCodeFrom = undefined; this.employeeCodeTo = undefined; this.empFromDate = undefined; this.empToDate = undefined; this.employeeCodes = undefined; this.nidno = undefined; // this.joiningDateCheckBoxClick(11,false); this.checkJoiningDate = false; this.isDatePickerDisabled = true; this.selectedItems = []; this.taggedSelection = []; } }