import { ChangeDetectorRef, Component} from '@angular/core'; import { ToastrService } from 'ngx-toastr'; import { JobCodeModel, MyJobCodeModel } from 'src/app/shared/model/job-code.model'; import { FileService } from 'src/app/shared/services/file.service'; import { JobCodeService } from 'src/app/shared/services/job-code.service'; @Component({ selector: 'app-sub-job-position-indicators', templateUrl: './sub-job-position-indicators.component.html', styleUrls: ['./sub-job-position-indicators.component.scss'] }) export class SubJobPositionIndicatorsComponent { currentPage = 1 page = Array.from({ length: 1 }, (_, i) => i + 1); pageSize=10 search = "" jobCodeList:JobCodeModel[]=[] loading = false selectedFile: File | null = null; selectedFileName: string = 'กรุณาเลือกไฟล์'; selectJob:JobCodeModel=new MyJobCodeModel({}) modalStatus='' constructor( private toastr: ToastrService, private fileService: FileService, private jobcodeService: JobCodeService, private cdr: ChangeDetectorRef, ) { } ngOnInit(): void { this.getListJob(); } getListJob(){ this.loading = false this.jobcodeService.getList().subscribe({ next: response => { this.jobCodeList = response.map((x: any) => new MyJobCodeModel(x)) this.jobCodeList = this.jobCodeList.sort((a, b) => a.jobcodeId.localeCompare(b.jobcodeId)) this.loading = false this.searchChange() this.cdr.detectChanges() }, error: error => { this.loading = false this.cdr.detectChanges() } }) } searchChange() { this.currentPage = 1 this.page = Array.from({ length: Math.ceil(this.jobcodeFilter().length / this.pageSize) }, (_, i) => i + 1); } edit(item :JobCodeModel){ this.selectJob = new MyJobCodeModel({}) this.selectJob = new MyJobCodeModel(item) } clearValue(){ this.selectJob.kpiWorkText = '' } save(){ this.jobcodeService.post(this.selectJob).subscribe((response:any) => { if (response.success) { this.showAlert(response.message, 'success') this.selectJob = new MyJobCodeModel({}) this.getListJob(); } else { this.showAlert(response.message, 'error') } this.cdr.detectChanges() }) } deleteJob(){ this.jobcodeService.delete(this.selectJob).subscribe((response:any) => { if (response.success) { this.showAlert(response.message, 'success') this.selectJob = new MyJobCodeModel({}) this.getListJob(); } else { this.showAlert(response.message, 'error') } this.cdr.detectChanges() }) } jobcodeFilter() { return this.jobCodeList.filter(x => x.tdesc.toLowerCase().includes(this.search.toLowerCase()) || x.edesc.toLowerCase().includes(this.search.toLowerCase()) || x.jobcodeId.toLowerCase().includes(this.search.toLowerCase()) ) } onFileSelected(event: any) { this.selectedFile = event.target.files.length > 0 ? event.target.files[0] : null; this.selectedFileName = this.selectedFile?.name || "กรุณาเลือกไฟล์" } uploadFile() { if (!this.selectedFile) { alert('กรุณาเลือกไฟล์ก่อนอัปโหลด') return } const formData = new FormData(); formData.append('file', this.selectedFile); this.loading = true this.fileService.uploadExcel(formData, 'IMPORT_KPI').subscribe({ next: response => { if (response.success) { this.showAlert(response.message, 'success') this.getListJob(); } else { this.showAlert(response.message, 'error') this.loading = false } }, error: error => { this.showAlert(error.message, 'error') this.loading = false } }) } downloadFile() { const fileName = 'IMPORT_MJOBCODE_KPI.xlsx' this.fileService.downloadTemplate(fileName).subscribe({ next: response => { const url = window.URL.createObjectURL(response); const a = document.createElement("a"); a.href = url; a.download = fileName; document.body.appendChild(a); a.click(); document.body.removeChild(a); window.URL.revokeObjectURL(url); }, error: error => { this.showAlert(error.message, 'error') } }) } showAlert(text: string, type: 'success' | 'error') { this.toastr[type](text, 'แจ้งเตือน', { timeOut: 3000, positionClass: 'toast-top-right', }) } }