import {Component, OnInit} from '@angular/core'; import { BloodGroupList, enumEmpFileUploadType, EnumExtension, EnumGender, EnumMaritalStatus, EnumPURequestStatus, EnumPURequestType, EnumStatus } from '../_models/enums'; import {ProfileUpdateRequest} from '../_models/ess/profile-update-request'; import {District} from '../_models/HRBasic/district'; import {Thana} from '../_models/HRBasic/thana'; import {Occupation} from '../_models/HRBasic/occupation'; import {EducationLevel} from '../_models/HRBasic/education-level'; import {TrainingType} from '../_models/Basic/trainingType'; import {EducationType} from '../_models/HRBasic/education-type'; import {Institution} from '../_models/HRBasic/institution'; import {Discipline} from '../_models/HRBasic/discipline'; import {EmployeeServices} from '../_services/employee/employee.service'; import {ApiService} from '../app.api.service'; import {BasicService} from '../_services/Basic/basic.service'; import {EssService} from '../_services/ess/ess.service'; import {HRMNotificationService} from '../app.notification.service'; import {loadingPanelService} from '../hrm-loding panel/loding.panel.service'; import {Router} from '@angular/router'; import {DatePipe} from '@angular/common'; import {DomSanitizer} from '@angular/platform-browser'; import {forkJoin} from 'rxjs'; import {ResultType} from '../_models/HRBasic/result-type'; import {TrainingService} from '../_services/training/training.service'; import {Training} from '../_models/Training/training'; import {Relation} from '../_models/HRBasic/relation'; import {NominationPurpose} from '../_models/HRBasic/nomination-purpose'; @Component({ selector: 'app-profile-update-admin', templateUrl: './profile-update-admin.component.html', styleUrls: ['./profile-update-admin.component.scss'] }) export class ProfileUpdateAdminComponent implements OnInit { type: any = EnumExtension.getNamesAndValues(EnumPURequestType); bloodGroup = BloodGroupList; genderType: any = EnumExtension.getNamesAndValues(EnumGender); maritalStatus: any = EnumExtension.getNamesAndValues(EnumMaritalStatus); puRequest: ProfileUpdateRequest; selectedPuRequestList: ProfileUpdateRequest[] = []; puRequestList: ProfileUpdateRequest[] = []; puRequestListFiltered: ProfileUpdateRequest[] = []; enumPURequestType = EnumPURequestType; enumPURequestStatus = EnumPURequestStatus; selectedType: any; districts: District[] = []; permanentThanas: Thana[] = []; presentThanas: Thana[] = []; uploadSaveUrl = 'saveUrl'; uploadRemoveUrl = 'removeUrl'; userType: string; occupations: Occupation[] = []; educationLevels: EducationLevel[] = []; trainingTypes: TrainingType[] = []; educationTypes: EducationType[] = []; allEducationLevels: EducationType[] = []; institutions: Institution[] = []; disciplines: Discipline[] = []; employeePhoto: any; selectedFiles?: FileList; currentFile?: File; isDisplay = false; resultTypes: ResultType[]; trainings: Training[] = []; src: any; fileName = ''; extension = ''; relations: Relation[] = []; nominationPurposes: NominationPurpose[] = []; mySelection: number[] = []; constructor(public employeeService: EmployeeServices, public apiService: ApiService, public basicService: BasicService, public trainingService: TrainingService, public essService: EssService, public notificationService: HRMNotificationService, public loadingService: loadingPanelService, public router: Router, public datePipe: DatePipe, private sanitizer: DomSanitizer) { this.apiService.selectedMenuName = 'Profile Update'; } ngOnInit() { this.puRequest = new ProfileUpdateRequest(); this.getDropDownData1(); this.loadData(); } getDropDownData1() { const occupations = this.basicService.getAllOccupation(); const educationLevels = this.basicService.getAllEducationLevel(); const trainingTypes = this.basicService.getAllTrainingType(); const educationTypes = this.basicService.getAllEducationType(); const institutions = this.basicService.getAllInstitutions(); const disciplines = this.basicService.getAllDiscipline(); this.loadingService.ShowLoadingPanel = true; forkJoin([occupations, educationLevels, trainingTypes, educationTypes, institutions, disciplines]).subscribe( ([res1, res2, res3, res4, res5, res6]) => { this.occupations = res1; this.allEducationLevels = res2; this.trainingTypes = res3; this.educationTypes = res4; this.institutions = res5; this.disciplines = res6; }, () => { this.loadingService.ShowLoadingPanel = false; }, () => { this.loadingService.ShowLoadingPanel = false; this.getDropdownData2(); } ); } getDropdownData2() { const getRelations = this.basicService.getAllRelations(); const getNominationPurpose = this.basicService.getAllNominationPurpose(); const results = this.basicService.getAllResultTypesByStatus(EnumStatus.Regardless); this.loadingService.ShowLoadingPanel = true; forkJoin([getRelations, getNominationPurpose, results]).subscribe( ([resp1, resp2, res3]) => { this.relations = resp1; this.nominationPurposes = resp2; this.resultTypes = res3; }, (err) => { this.loadingService.ShowLoadingPanel = false; console.log(err); }, () => { this.loadingService.ShowLoadingPanel = false; }, ); } loadTraining(value: number) { this.loadingService.ShowLoadingPanel = true; this.trainingService.GetTrainingybyTypeID(value).subscribe( (resp) => { this.trainings = resp; }, (err: any) => { this.loadingService.ShowLoadingPanel = false; console.log(err); }, () => { this.loadingService.ShowLoadingPanel = false; } ); } refreshObject(value: number) { this.puRequest = new ProfileUpdateRequest(); this.mySelection = []; if (this.selectedType !== undefined && this.selectedType !== null) { this.puRequestListFiltered = this.puRequestList.filter(x => x.puRequestType === value); } else { this.puRequestListFiltered = this.puRequestList; } } loadData() { debugger this.loadingService.ShowLoadingPanel = true; this.essService.getAllPUR().subscribe( (resp) => { this.puRequestList = resp; }, (x) => { console.log(x); this.loadingService.ShowLoadingPanel = false; }, () => { this.puRequestListFiltered = this.puRequestList; this.refreshObject(this.selectedType); this.loadingService.ShowLoadingPanel = false; } ); this.basicService.getAllDistricts().subscribe((resp) => { this.districts = resp; }, () => { }, () => { } ); } loadPermanentThana(value: any) { this.basicService.getAllThanas(value).subscribe((resp) => { this.permanentThanas = resp; }, () => { }, () => { } ); } loadPresentThana(value: any) { this.basicService.getAllThanas(value).subscribe((resp) => { this.presentThanas = resp; }, () => { }, () => { } ); } editHandler({dataItem}) { const editPUreq: ProfileUpdateRequest = dataItem as ProfileUpdateRequest; this.puRequest = editPUreq; this.puRequest.requestDate = new Date(editPUreq.requestDate); this.puRequest.approveDate = new Date(editPUreq.approveDate); this.puRequest.passportIssueDate = new Date(editPUreq.passportIssueDate); this.puRequest.passportExpiryDate = new Date(editPUreq.passportExpiryDate); this.puRequest.spouseMarriageDate = new Date(editPUreq.spouseMarriageDate); this.puRequest.childBirthDate = new Date(editPUreq.childBirthDate); this.puRequest.childPassportIssueDate = new Date(editPUreq.childPassportIssueDate); this.puRequest.childPassportExpiryDate = new Date(editPUreq.childPassportExpiryDate); this.puRequest.nominationDate = new Date(editPUreq.nominationDate); this.puRequest.nomineeDateOfBirth = new Date(editPUreq.nomineeDateOfBirth); this.puRequest.trainingFromDate = new Date(editPUreq.trainingFromDate); this.puRequest.trainingToDate = new Date(editPUreq.trainingToDate); this.puRequest.experienceFrom = new Date(editPUreq.experienceFrom); this.puRequest.experienceTo = new Date(editPUreq.experienceTo); this.selectedType = editPUreq.puRequestType; this.isDisplay = true; if (this.selectedType === EnumPURequestType.Picture_Upload) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.Profile_Picture); } else if (this.selectedType === EnumPURequestType.Mobile_Phone_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.Mobile); } else if (this.selectedType === EnumPURequestType.National_ID_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.nationalID); } else if (this.selectedType === EnumPURequestType.Blood_Group_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.bloodGroup); } else if (this.selectedType === EnumPURequestType.TIN_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.TIN); } else if (this.selectedType === EnumPURequestType.Passport_No_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.passport); } else if (this.selectedType === EnumPURequestType.Educational_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.Education); } else if (this.selectedType === EnumPURequestType.Training_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.training); } else if (this.selectedType === EnumPURequestType.Experience_Information) { this.showEmpImage(this.puRequest.requestEmpID, enumEmpFileUploadType.Experience); } } rejectRequest() { if (confirm('Are you sure to reject the request') === false) { return; } if (this.puRequest.adminRemarks === '' || this.puRequest.adminRemarks === null) { this.notificationService.showError('Admin remarks can\'t be empty while rejecting request'); return; } this.puRequest.puRequestStatus = EnumPURequestStatus.Rejected; this.essService.updateStatusToRejected(this.puRequest).subscribe( () => { }, () => { }, () => { this.notificationService.showSuccess('Request has been rejected'); this.isDisplay = false; this.loadData(); }, ); } showEmpImage(empId: number, enumFileType) { this.extension = ''; this.employeeService.getUploadEmpFileInProfileUpdate(empId, empId, enumFileType).subscribe( (resp: any) => { this.employeePhoto = resp; }, (err: any) => { this.notificationService.showError(err.error); }, () => { this.extension = this.employeePhoto.fileName.split('.').pop(); if (this.extension === 'pdf') { /*this.fileName = ''; this.fileName = this.employeePhoto.originalFileName; const str = this.employeePhoto.fileTobase64; let _type = 'application/pdf'; const byteCharacters = atob(str); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); }*/ const str = this.employeePhoto.fileData; let _type = 'application/pdf'; const byteCharacters = atob(str); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: _type }); const objectUrl: string = URL.createObjectURL(blob); /*const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement; a.href = objectUrl; a.download = this.fileName; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(objectUrl);*/ this.src = objectUrl; } else { this.employeePhoto = this.sanitizer.bypassSecurityTrustResourceUrl(`data:image/png;base64, ${this.employeePhoto.fileData}`); } } ); } submitProfile() { this.puRequest.puRequestType = this.selectedType; this.puRequest.puRequestStatus = EnumPURequestStatus.Approved; this.loadingService.ShowLoadingPanel = true; this.essService.updateEmployee(this.puRequest).subscribe( (resp) => { }, (x) => { console.log(x); this.notificationService.showError(x.error); this.loadingService.ShowLoadingPanel = false; }, () => { this.isDisplay = false; this.loadingService.ShowLoadingPanel = false; this.notificationService.showSuccess('Data Updated'); this.loadData(); }, ); } onPopUpClose() { this.isDisplay = false; } onCancel() { this.isDisplay = false; } /*function(ext) { if (ext !== undefined) { return this.extToMimes(ext); } return undefined; } extToMimes(ext) { let type; switch (ext) { case 'jpg': type = 'image/jpeg'; break; case 'png': type = 'image/jpeg'; break; case 'jpeg': type = 'image/jpeg'; break; case 'txt': type = 'text/plain'; break; case 'xls': type = 'application/vnd.ms-excel'; break; case 'doc': type = 'application/msword'; break; case 'xlsx': type = 'application/vnd.ms-excel'; break; case 'pdf': type = 'application/pdf'; break; default: } return type; }*/ declineAll() { this.getSelectedPurReqList(EnumPURequestStatus.Rejected); this.rejectBulk(); } approveAll() { this.getSelectedPurReqList(EnumPURequestStatus.Approved); this.updateBulk(); } getSelectedPurReqList(status: EnumPURequestStatus) { this.mySelection.forEach(x => { const item = this.puRequestList.find(pur => pur.id === x); item.puRequestStatus = status; this.selectedPuRequestList.push(item); }); } updateBulk() { this.loadingService.ShowLoadingPanel = true; this.essService.updateEmployeeRequestBulk(this.selectedPuRequestList).subscribe( (resp) => { }, (x) => { console.log(x); this.notificationService.showError(x); this.loadingService.ShowLoadingPanel = false; }, () => { this.selectedPuRequestList = []; this.notificationService.showSuccess('Data Updated'); this.loadingService.ShowLoadingPanel = false; this.loadData(); }, ); } private rejectBulk() { this.loadingService.ShowLoadingPanel = true; this.essService.rejectEmployeeRequestBulk(this.selectedPuRequestList).subscribe( (resp) => { }, (x) => { console.log(x); this.loadingService.ShowLoadingPanel = false; }, () => { this.loadingService.ShowLoadingPanel = false; this.notificationService.showSuccess('Rejected Successfully!'); this.selectedPuRequestList = []; this.loadData(); }, ); } }