Commit 0e9ba3b9 by Nakarin Luankla

Merge branch 'DEV' of https://mygit.myhr.co.th/angular/myAppraisal into DEV

parents 13c2c8ba f4222918
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
</div> </div>
<div class="px-1"> <div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md" <button type="button" class="ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
data-hs-overlay="#edit-group-competencies-table-modal-select"> (click)="searchModalChange()" data-hs-overlay="#edit-group-competencies-table-modal-select">
<i class="ri-add-line"></i> <i class="ri-add-line"></i>
Add Add
</button> </button>
...@@ -260,7 +260,7 @@ ...@@ -260,7 +260,7 @@
<thead> <thead>
<tr> <tr>
<ng-container <ng-container
*ngFor="let item of ['รหัส','ชื่อประเภท','ระดับความคาดหวัง','การจัดการ']; let f = first; let l = last; let i = index"> *ngFor="let item of ['รหัส','ชื่อสมรรถนะ','ระดับความคาดหวัง','การจัดการ']; let f = first; let l = last; let i = index">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary" <th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f||l"> [class.!text-center]="f||l">
<span class="text-sm">{{ item }}</span> <span class="text-sm">{{ item }}</span>
......
...@@ -158,10 +158,17 @@ export class EditGroupCompetenciesComponent { ...@@ -158,10 +158,17 @@ export class EditGroupCompetenciesComponent {
} }
deleteGroupAssessmentById() { deleteGroupAssessmentById() {
this.dataList = this.dataList.filter((item, i) => (this.groupAssessmentIndex == -1 ? !item.check : i != this.groupAssessmentIndex)); if (this.groupAssessmentIndex == -1) {
this.isDataListCheckedAll = false this.dataList = this.dataList.filter(item => !item.check);
this.dataListCheckAll() this.isDataListCheckedAll = false
this.cdr.detectChanges(); this.dataListCheckAll()
this.cdr.detectChanges();
} else {
this.dataList = this.dataList.splice(this.groupAssessmentIndex, 1)
this.isDataListCheckedAll = false
this.dataListCheckAll()
this.cdr.detectChanges();
}
} }
showAlert(text: string, type: 'success' | 'error') { showAlert(text: string, type: 'success' | 'error') {
this.toastr[type](text, 'แจ้งเตือน', { this.toastr[type](text, 'แจ้งเตือน', {
......
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
</a> </a>
<div class="ciricon flex text-start items-center cursor-pointer" <div class="ciricon flex text-start items-center cursor-pointer"
*ngIf="!seeTab" *ngIf="!seeTab"
(click)="assessmentToolsSelectIndex=[l,m];deleteAssessmentTools()"> (click)="dataSelectIndex=i;assessmentToolsSelectIndex=[l,m];deleteAssessmentTools()">
<i class="ri-close-line text-red-500"></i> <i class="ri-close-line text-red-500"></i>
</div> </div>
</ng-container> </ng-container>
......
...@@ -281,5 +281,4 @@ export class EditGroupIndicators implements OnInit { ...@@ -281,5 +281,4 @@ export class EditGroupIndicators implements OnInit {
positionClass: 'toast-top-right', positionClass: 'toast-top-right',
}) })
} }
} }
...@@ -119,7 +119,7 @@ export class IndicatorsAndCurriculumComponent { ...@@ -119,7 +119,7 @@ export class IndicatorsAndCurriculumComponent {
this.dataLoading = true this.dataLoading = true
this.competencytopicService.getList().subscribe({ this.competencytopicService.getList().subscribe({
next: response => { next: response => {
this.dataList = response.map(x => ({ code: x.competencyTopicId, name: x.tdesc, type: x.competencyType.tdesc, file: x.competencyFiles || "" })) this.dataList = response.map(x => ({ code: x.competencyTopicId || "", name: x.tdesc || "", type: x.competencyType.tdesc || "", file: x.competencyFiles || "" }))
this.indicatorsCoursesList = response this.indicatorsCoursesList = response
this.dataLoading = false this.dataLoading = false
this.searchChange() this.searchChange()
...@@ -146,42 +146,9 @@ export class IndicatorsAndCurriculumComponent { ...@@ -146,42 +146,9 @@ export class IndicatorsAndCurriculumComponent {
dataListFilter() { dataListFilter() {
return this.dataList.filter(x => { return this.dataList.filter(x => {
const match = x.code.toLowerCase().includes(this.search.toLowerCase()) || x.name.toLowerCase().includes(this.search.toLowerCase()); return x.code.toLowerCase().includes(this.search.toLowerCase()) || x.name.toLowerCase().includes(this.search.toLowerCase()) || x.type.toLowerCase().includes(this.search.toLowerCase())
return match;
}); });
} }
showSuccess() {
this.toastr.success('บันทึกข้อมูลสำเร็จ', 'เเจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
});
}
showSuccessEdit() {
this.toastr.success('เเก้ไขข้อมูลสำเร็จ', 'เเจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
});
}
showSuccessDelete() {
this.toastr.success('ลบข้อมูลสำเร็จ', 'เเจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
});
}
addUser() {
console.log('เพิ่มผู้ใช้งาน');
}
deleteUser() {
console.log('ลบผู้ใช้งาน');
}
editUser() {
console.log('แก้ไขผู้ใช้งาน');
}
} }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
<div class="px-1"> <div class="px-1">
<div class="relative shadow-md"> <div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon" <input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " placeholder="Search by No. or Name" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " placeholder="Search by Name"
[(ngModel)]="search" (ngModelChange)="searchEMP()"> [(ngModel)]="search" (ngModelChange)="searchChange()">
<div <div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4"> class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i> <i class="ri-search-line text-gray"></i>
...@@ -32,7 +32,8 @@ ...@@ -32,7 +32,8 @@
<div class="page px-rem"> <div class="page px-rem">
<div class="overflow-auto shadow-md rounded-t-md"> <div class="overflow-auto shadow-md rounded-t-md">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover table-bordered"> <table class="ti-custom-table ti-custom-table-head ti-custom-table-hover table-bordered"
style="table-layout: auto;width: 100%;overflow-x: hidden;white-space: normal; word-break: break-word;">
<thead> <thead>
<tr> <tr>
<ng-container <ng-container
...@@ -66,13 +67,19 @@ ...@@ -66,13 +67,19 @@
<tbody *ngIf="!groupapprove_listLoading&&groupapprove_listFilter().length"> <tbody *ngIf="!groupapprove_listLoading&&groupapprove_listFilter().length">
<tr <tr
*ngFor="let item of groupapprove_listFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index"> *ngFor="let item of groupapprove_listFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index">
<td>{{item.apsassessy.fname}} {{item.apsassessy.lname}}</td> <td style="word-break: break-word;white-space: normal;">{{item.apsassessy.fname}}
<td>{{item.apsapprove1.fname}} {{item.apsapprove1.lname}}</td> {{item.apsassessy.lname}}</td>
<td>{{item.apsapprove2.fname}} {{item.apsapprove2.lname}}</td> <td style="word-break: break-word;white-space: normal;">{{item.apsapprove1.fname}}
<td>{{item.apsapprove3.fname}} {{item.apsapprove3.lname}}</td> {{item.apsapprove1.lname}}</td>
<td>{{item.apsapprove4.fname}} {{item.apsapprove4.lname}}</td> <td style="word-break: break-word;white-space: normal;">{{item.apsapprove2.fname}}
<td>{{item.apsapprove5.fname}} {{item.apsapprove5.lname}}</td> {{item.apsapprove2.lname}}</td>
<td class="flex justify-center"> <td style="word-break: break-word;white-space: normal;">{{item.apsapprove3.fname}}
{{item.apsapprove3.lname}}</td>
<td style="word-break: break-word;white-space: normal;">{{item.apsapprove4.fname}}
{{item.apsapprove4.lname}}</td>
<td style="word-break: break-word;white-space: normal;">{{item.apsapprove5.fname}}
{{item.apsapprove5.lname}}</td>
<td style="word-break: break-word;white-space: normal;" class="text-center">
<i class="ti ti-edit cursor-pointer i-gray fs-l px-1" <i class="ti ti-edit cursor-pointer i-gray fs-l px-1"
(click)="currentModel='edit';selectGroupapprove(item)" (click)="currentModel='edit';selectGroupapprove(item)"
data-hs-overlay="#set-approvers-modal"></i> data-hs-overlay="#set-approvers-modal"></i>
......
...@@ -116,6 +116,7 @@ export class SetApproversComponent { ...@@ -116,6 +116,7 @@ export class SetApproversComponent {
employee_listFilter() { employee_listFilter() {
return this.employee_list.filter(x => x.fname.toLowerCase().includes(this.search.toLowerCase()) || return this.employee_list.filter(x => x.fname.toLowerCase().includes(this.search.toLowerCase()) ||
x.lname.toLowerCase().includes(this.search.toLowerCase())) x.lname.toLowerCase().includes(this.search.toLowerCase()))
} }
searchEMP() { searchEMP() {
this.employeeModal.currentPage = 1 this.employeeModal.currentPage = 1
...@@ -156,15 +157,23 @@ export class SetApproversComponent { ...@@ -156,15 +157,23 @@ export class SetApproversComponent {
} }
searchChange() { searchChange() {
this.currentPage = 1 this.currentPage = 1
this.page = Array.from({ length: Math.ceil(this.groupapprove_listFilter().length / 10) }, (_, i) => i + 1); this.page = Array.from({ length: Math.ceil(this.groupapprove_listFilter().length / 10) }, (_, i) => i + 1)
} }
groupapprove_listFilter() { groupapprove_listFilter() {
return this.groupapprove_list.filter(x => x.apsapprove1.employeeId || x.apsapprove2.employeeId || x.apsapprove3.employeeId || x.apsapprove4.employeeId || x.apsapprove5.employeeId.toLowerCase().includes(this.search.toLowerCase()) || return this.groupapprove_list.filter(x =>
x.apsapprove1.fname || x.apsapprove1.lname.toLowerCase().includes(this.search.toLowerCase()) || x.apsassessy.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove2.fname || x.apsapprove2.lname.toLowerCase().includes(this.search.toLowerCase()) || x.apsapprove1.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove3.fname || x.apsapprove3.lname.toLowerCase().includes(this.search.toLowerCase()) || x.apsapprove2.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove4.fname || x.apsapprove4.lname.toLowerCase().includes(this.search.toLowerCase()) || x.apsapprove3.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.fname || x.apsapprove5.lname.toLowerCase().includes(this.search.toLowerCase())) x.apsapprove4.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
(x.apsassessy.fname.toLowerCase() + " " + x.apsassessy.lname.toLowerCase()).includes(this.search.toLowerCase()) ||
(x.apsapprove1.fname.toLowerCase() + " " + x.apsapprove1.lname.toLowerCase()).includes(this.search.toLowerCase()) ||
(x.apsapprove2.fname.toLowerCase() + " " + x.apsapprove2.lname.toLowerCase()).includes(this.search.toLowerCase()) ||
(x.apsapprove3.fname.toLowerCase() + " " + x.apsapprove3.lname.toLowerCase()).includes(this.search.toLowerCase()) ||
(x.apsapprove4.fname.toLowerCase() + " " + x.apsapprove4.lname.toLowerCase()).includes(this.search.toLowerCase()) ||
(x.apsapprove5.fname.toLowerCase() + " " + x.apsapprove5.lname.toLowerCase()).includes(this.search.toLowerCase())
)
} }
selectGroupapprove(groupapprove?: GroupApproveModel) { selectGroupapprove(groupapprove?: GroupApproveModel) {
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
<div class="flex justify-end"> <div class="flex justify-end">
<div class="px-1"> <div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-success h-10 m-0 shadow-md" <button type="button" class="ti-btn ti-btn-soft-success h-10 m-0 shadow-md"
data-hs-overlay="#competency-configuration-alert-modal"> data-hs-overlay="#competency-configuration-alert-modal"
[class.ti-btn-disabled]="!setting.data.apsyear||checkEmpty(setting.data.expectationLevel)||!setting.data.settingGroupAssessment"
[disabled]="!setting.data.apsyear||checkEmpty(setting.data.expectationLevel)||!setting.data.settingGroupAssessment">
<i class="ri-save-3-line"></i> <i class="ri-save-3-line"></i>
Save Save
</button> </button>
......
...@@ -57,5 +57,18 @@ export class CompetencyConfigurationComponent { ...@@ -57,5 +57,18 @@ export class CompetencyConfigurationComponent {
}) })
} }
checkEmpty(data?: string | number) {
switch (typeof data) {
case ('number'): {
return data == null || data == undefined
}
case ('string'): {
return data == "" || data == null || data == undefined
}
default: {
return true
}
}
}
} }
...@@ -100,25 +100,25 @@ ...@@ -100,25 +100,25 @@
</tbody> </tbody>
<tbody *ngIf="!appraisalCompentency.loading&&appraisalCompentencyFilter(i).length"> <tbody *ngIf="!appraisalCompentency.loading&&appraisalCompentencyFilter(i).length">
<tr <tr
*ngFor="let masfromEvaluationRound of appraisalCompentencyFilter(i);let i = index"> *ngFor="let masfromEvaluationAssessment1 of appraisalCompentencyFilter(i);let i = index">
<td class="flex justify-center items-center"> <td class="flex justify-center items-center">
{{masfromEvaluationRound.competencyType.shortName}} {{masfromEvaluationAssessment1.competencyType.shortName}}
</td> </td>
<td> <td>
{{masfromEvaluationRound.competencyType.tdesc}} {{masfromEvaluationAssessment1.competencyType.tdesc}}
</td> </td>
<td> <td *ngIf="appraisalCompentency.select">
{{convertDate(appraisalCompentency.select.masfromEvaluationRound.apsPeriodStart)}} {{convertDate(appraisalCompentency.select.masfromEvaluationRound.apsPeriodStart)}}
</td> </td>
<td> <td *ngIf="appraisalCompentency.select">
{{convertDate(appraisalCompentency.select.masfromEvaluationRound.apsPeriodEnd)}} {{convertDate(appraisalCompentency.select.masfromEvaluationRound.apsPeriodEnd)}}
</td> </td>
<td> <td>
{{masfromEvaluationRound.masfromStatusType.tdesc}} {{masfromEvaluationAssessment1.masfromStatusType.tdesc}}
</td> </td>
<td class="flex justify-center items-center"> <td class="flex justify-center items-center">
<span class="rounded-md bg-success text-white px-3 py-1 cursor-pointer" <span class="rounded-md bg-success text-white px-3 py-1 cursor-pointer"
(click)="getAppraisalCompentencyForm(masfromEvaluationRound.competencyType.competencyTypeId);currentTemplate = selfEvaluationEdit ; pathTitle = ['การประเมินผล', 'ประเมินผล']"> (click)="getAppraisalCompentencyForm(masfromEvaluationAssessment1.competencyType.competencyTypeId);currentTemplate = selfEvaluationEdit ; pathTitle = ['การประเมินผล', 'ประเมินผล']">
ประเมิน ประเมิน
</span> </span>
</td> </td>
...@@ -201,364 +201,399 @@ ...@@ -201,364 +201,399 @@
<ng-template #selfEvaluationEdit> <ng-template #selfEvaluationEdit>
<!-- <div class="pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center"> <ng-container *ngIf="appraisalCompentency2.data">
<div class="flex"> <div class="pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center">
<button type="button" class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500" <div class="flex">
(click)="currentTemplate = selfEvaluation ; pathTitle = ['การประเมินผล', 'ประเมินตนเอง']"> <button type="button"
<i class="ti ti-chevron-left"></i> class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
ย้อนกลับ (click)="currentTemplate = selfEvaluation ; pathTitle = ['การประเมินผล', 'ประเมินตนเอง']">
</button> <i class="ti ti-chevron-left"></i>
<div class="font-size-18px font-weight-700 align-center text-primary pl-1rem"> ย้อนกลับ
ประเมินผล ประจำปี 2024 </button>
<div class="font-size-18px font-weight-700 align-center text-primary pl-1rem">
ประเมินผล ประจำปี 2024
</div>
</div> </div>
</div> </div>
</div> <div class="pb-2rem px-2rem">
<div class="pb-2rem px-2rem"> <div class="font-size-18px font-weight-700 text-primary">
<div class="font-size-18px font-weight-700 text-primary"> แบบประเมินสมรรถนะพนักงาน ประจำปี 2024
แบบประเมินสมรรถนะพนักงาน ประจำปี 2024
</div>
</div>
<div class="pb-2rem px-2rem">
<div class="p-2 grid grid-cols-6 gap-3">
<div class="grid-cols-1">
<div class="text-gray-400">เครื่องมือประเมิน</div>
<div class="text-gray-400">O = แบบสังเกต</div>
<div class="text-gray-400">P = แบบการปฏิบัติงาน</div>
<div class="text-gray-400">D = การบันทึก/เอกสาร</div>
<div class="text-gray-400">I = การสัมภาษณ์</div>
<div class="text-gray-400">T = แบบทดสอบ</div>
</div> </div>
<div class="grid-cols-1"> </div>
<div class="text-gray-400">คำชี้แจง</div> <div class="pb-2rem px-2rem">
<div class="text-gray-400">- ใช้วิธีประเมินโดย ผู้บังคับบัญชา = 100 %</div> <div class="p-2 grid grid-cols-6 gap-3">
</div> <div class="grid-cols-1">
<div class="col-span-3 grid-cols-1"> <div class="text-gray-400">เครื่องมือประเมิน</div>
<div class="text-gray-400">ระดับความสามารถ (Target Degree)</div> <div class="text-gray-400">O = แบบสังเกต</div>
<div class="text-gray-400">ระดับ 1 = ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน</div> <div class="text-gray-400">P = แบบการปฏิบัติงาน</div>
<div class="text-gray-400">ระดับ 2 = มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้</div> <div class="text-gray-400">D = การบันทึก/เอกสาร</div>
<div class="text-gray-400">ระดับ 3 = นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเอง <div class="text-gray-400">I = การสัมภาษณ์</div>
แก้ไขปัญหาหน้างานได้</div> <div class="text-gray-400">T = แบบทดสอบ</div>
<div class="text-gray-400">ระดับ 4 = สอนผู้อื่นได้ มีความคล่องตัว เชื่อมโยง ความรู้ในงานได้</div> </div>
<div class="text-gray-400">ระดับ 5 = มีความชำนาญ เชี่ยวชาญ เป็นที่ยอมรับ ในองค์กร</div> <div class="grid-cols-1">
<div class="text-gray-400">คำชี้แจง</div>
<div class="text-gray-400">- ใช้วิธีประเมินโดย ผู้บังคับบัญชา = 100 %</div>
</div>
<div class="col-span-3 grid-cols-1">
<div class="text-gray-400">ระดับความสามารถ (Target Degree)</div>
<div class="text-gray-400">ระดับ 1 = ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน</div>
<div class="text-gray-400">ระดับ 2 = มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้</div>
<div class="text-gray-400">ระดับ 3 = นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเอง
แก้ไขปัญหาหน้างานได้</div>
<div class="text-gray-400">ระดับ 4 = สอนผู้อื่นได้ มีความคล่องตัว เชื่อมโยง ความรู้ในงานได้</div>
<div class="text-gray-400">ระดับ 5 = มีความชำนาญ เชี่ยวชาญ เป็นที่ยอมรับ ในองค์กร</div>
</div>
</div> </div>
</div> </div>
</div> <div class="pb-2rem px-2rem">
<div class="pb-2rem px-2rem"> <div class="overflow-auto rounded-top-0.65rem">
<div class="overflow-auto rounded-top-0.65rem"> <table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2"> <thead class="height-50px">
<thead class="height-50px"> <tr class="font-size-12px">
<tr class="font-size-12px"> <ng-container
<ng-container *ngFor="let item of ['ลำดับที่','รหัสสมรรถนะ','ชื่อสมรรถนะ','Behavior Indicator (BI)','เครื่องมือประเมิน\n(ตัวย่อ)\n(O,P,D,I,T)']">
*ngFor="let item of ['ลำดับที่','รหัสสมรรถนะ','ชื่อสมรรถนะ','Behavior Indicator (BI)','เครื่องมือประเมิน\n(ตัวย่อ)\n(O,P,D,I,T)']"> <th scope="col" rowspan="2"
<th scope="col" rowspan="2" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">{{ item }}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
</th>
</ng-container>
<th scope="col" colspan="5"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center"> class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">{{ item }}</span> ระดับความสามารถ (Target Degree)
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
</th>
</ng-container>
<th scope="col" colspan="5"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
ระดับความสามารถ (Target Degree)
</th>
</tr>
<tr class="font-size-12px">
<ng-container *ngFor="let item of [5,4,3,2,1]">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
{{item}}
</th> </th>
</ng-container> </tr>
</tr> <tr class="font-size-12px">
</thead> <ng-container *ngFor="let item of [5,4,3,2,1]">
<tbody *ngIf="appraisalCompentencyForm.loading"> <th scope="col"
<tr> class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<td class="text-center" colspan="100%"> {{item}}
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" </th>
role="status" aria-label="loading"> </ng-container>
<span class="sr-only">Loading...</span> </tr>
</div> </thead>
</td> <tbody *ngIf="appraisalCompentency2.loading">
</tr> <tr>
</tbody> <td class="text-center" colspan="100%">
<tbody *ngIf="!appraisalCompentencyForm.loading&&!appraisalCompentencyFormFilter().length"> <div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1"
<tr> role="status" aria-label="loading">
<td class="text-center" colspan="100%"> <span class="sr-only">Loading...</span>
ไม่พบข้อมูล </div>
</td>
</tr>
</tbody>
<tbody *ngIf="!appraisalCompentencyForm.loading&&appraisalCompentencyFormFilter().length">
<ng-container
*ngFor="let appraisalCompentencyForm of appraisalCompentencyFormFilter();let i = index">
<tr *ngFor="let bi of appraisalCompentencyForm.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList;let i2 = index;let f = first"
(mouseenter)="hoveredCode = appraisalCompentencyForm.groupAssessment1.competencyIndicatorsCourses1Mini.competencyCourseId"
(mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': appraisalCompentencyForm.groupAssessment1.competencyIndicatorsCourses1Mini.competencyCourseId === hoveredCode ,'border-none':!f }">
<td class="align-start text-center">
<ng-container *ngIf="f">
{{i+1}}
</ng-container>
</td>
<td class="align-start text-center">
<ng-container *ngIf="f">
{{appraisalCompentencyForm.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId}}
</ng-container>
</td>
<td class="align-start !white-space-normal">
<ng-container *ngIf="f">
{{appraisalCompentencyForm.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.tdesc}}
</ng-container>
</td>
<td class="align-start !white-space-normal">
{{bi.behavioralIndicators}}
</td>
<td class="align-center text-center">
{{bi.assessmentId}}
</td> </td>
<td class="align-center text-center" *ngFor="let value of [5,4,3,2,1]; let i3=index"> </tr>
<input type="radio" [name]="'radio'+i+''+i2" class="ti-form-radio cursor-pointer" </tbody>
[id]="'radio'+i+''+i2+''+i3" [value]="value" <tbody *ngIf="!appraisalCompentency2.loading&&!appraisalCompentency2Filter().length">
[(ngModel)]="bi.competencyBehavioral.scoreTopicExpectation" <tr>
(ngModelChange)="calnumberCheck()"> <td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td> </td>
</tr> </tr>
</ng-container> </tbody>
</tbody> <tbody *ngIf="!appraisalCompentency2.loading&&appraisalCompentency2Filter().length">
</table> <ng-container *ngFor="let item2 of appraisalCompentency2Filter();let i = index">
<tr *ngFor="let bi of item2.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList;let i2 = index;let f = first"
(mouseenter)="hoveredCode = item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyCourseId"
(mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyCourseId === hoveredCode ,'border-none':!f }">
<td class="align-start text-center">
<ng-container *ngIf="f">
{{i+1}}
</ng-container>
</td>
<td class="align-start text-center">
<ng-container *ngIf="f">
{{item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId}}
</ng-container>
</td>
<td class="align-start !white-space-normal">
<ng-container *ngIf="f">
{{item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.tdesc}}
</ng-container>
</td>
<td class="align-start !white-space-normal">
{{bi.behavioralIndicators}}
</td>
<td class="align-center text-center">
{{bi.assessmentId}}
</td>
<td class="align-center text-center" *ngFor="let value of [5,4,3,2,1]; let i3=index">
<input type="radio" [name]="'radio'+i+''+i2" class="ti-form-radio cursor-pointer"
[id]="'radio'+i+''+i2+''+i3" [value]="value"
[disabled]="!employee.evaluate"
[(ngModel)]="bi.competencyBehavioral.scoreTopicExpectation"
(ngModelChange)="calnumberCheck()">
</td>
</tr>
</ng-container>
</tbody>
</table>
</div>
</div> </div>
</div>
<div class="pb-1rem px-2rem"> <div class="pb-1rem px-2rem">
<div class="py-2 grid grid-cols-11"> <div class="py-2 grid grid-cols-11">
<div class="col-span-8">ระดับความสามารถ (Target Degree)</div> <div class="col-span-8">ระดับความสามารถ (Target Degree)</div>
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{item}}</div> <div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{item}}</div>
</div>
</div> </div>
</div> <div class="py-2 grid grid-cols-11">
<div class="py-2 grid grid-cols-11"> <div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div>
<div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-1 text-center">
<div class="col-span-1 text-center">{{appraisalCompentencyForm.data.numberCheck5}}</div> {{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck5}}</div>
<div class="col-span-1 text-center">{{appraisalCompentencyForm.data.numberCheck4}}</div> <div class="col-span-1 text-center">
<div class="col-span-1 text-center">{{appraisalCompentencyForm.data.numberCheck3}}</div> {{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck4}}</div>
<div class="col-span-1 text-center">{{appraisalCompentencyForm.data.numberCheck2}}</div> <div class="col-span-1 text-center">
<div class="col-span-1 text-center">{{appraisalCompentencyForm.data.numberCheck1}}</div> {{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck3}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck2}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck1}}</div>
</div>
</div> </div>
</div> <div class="py-2 grid grid-cols-11">
<div class="py-2 grid grid-cols-11"> <div class="col-span-8">ตัวคูณคะแนนในแต่ละช่อง (2)</div>
<div class="col-span-8">ตัวคูณคะแนนในแต่ละช่อง (2)</div> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-1 text-center">{{setting.data.settingScore5}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore5}}</div> <div class="col-span-1 text-center">{{setting.data.settingScore4}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore4}}</div> <div class="col-span-1 text-center">{{setting.data.settingScore3}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore3}}</div> <div class="col-span-1 text-center">{{setting.data.settingScore2}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore2}}</div> <div class="col-span-1 text-center">{{setting.data.settingScore1}}</div>
<div class="col-span-1 text-center">{{setting.data.settingScore1}}</div> </div>
</div> </div>
</div> <div class="py-2 grid grid-cols-11">
<div class="py-2 grid grid-cols-11"> <div class="col-span-8">ถ่วงน้ำหนักผลรวม 1X2</div>
<div class="col-span-8">ถ่วงน้ำหนักผลรวม 1X2</div> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{calWeightScore(item)}}</div>
<div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{calWeightScore(item)}}</div> </div>
</div> </div>
</div> <div class="py-2 grid grid-cols-11">
<div class="py-2 grid grid-cols-11"> <div class="col-span-8">คะแนนรวมหลังถ่วงน้ำ</div>
<div class="col-span-8">คะแนนรวมหลังถ่วงน้ำ</div> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-5 text-center">
<div class="col-span-5 text-center">{{appraisalCompentencyForm.data.weightedTotal}}</div> {{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal}}</div>
</div>
</div> </div>
</div> <div class="py-2 grid grid-cols-11">
<div class="py-2 grid grid-cols-11"> <div class="col-span-8">คะแนนเฉลี่ยคิดเป็น</div>
<div class="col-span-8">คะแนนเฉลี่ยคิดเป็น</div> <div class="col-span-3 grid grid-cols-5">
<div class="col-span-3 grid grid-cols-5"> <div class="col-span-5 text-center">
<div class="col-span-5 text-center">{{showNumber(appraisalCompentencyForm.data.averageScore)}}</div> {{showNumber(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
</div>
</div>
</div> </div>
</div> </div>
</div>
<div class="pb-2rem px-2rem"> <div class="pb-2rem px-2rem">
<div class="overflow-auto rounded-top-0.65rem"> <div class="overflow-auto rounded-top-0.65rem">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover"> <table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead class="height-50px"> <thead class="height-50px">
<tr class="font-size-12px"> <tr class="font-size-12px">
<ng-container <ng-container
*ngFor="let item of ['เกณฑ์การให้คะแนนการประประเมิน Check Sheet E01','ผลประเมิน (A)','สรุปผล Gap'];let f = first ;let l = last"> *ngFor="let item of ['เกณฑ์การให้คะแนนการประประเมิน Check Sheet E01','ผลประเมิน (A)','สรุปผล Gap'];let f = first ;let l = last">
<th scope="col" [attr.rowspan]="f?'1':'2'" [attr.colspan]="f?'2':'1'" <th scope="col" [attr.rowspan]="f?'1':'2'" [attr.colspan]="f?'2':'1'"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center"> class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">{{ item }}</span> <span class="font-size-12px font-weight-700 ">{{ item }}</span>
<div *ngIf="!f&&!l" class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div *ngIf="!f&&!l" class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i> <i class="ti ti-dots-vertical fs-l"></i>
</div>
</th>
<th *ngIf="f" scope="col" rowspan="2"
class="relative bg-soft-secondary text-primary !text-center !p-0">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
</th>
</ng-container>
</tr>
<tr class="font-size-12px">
<ng-container *ngFor="let item of ['เกณฑ์การให้คะแนน','เงื่อนไข']">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
{{item}}
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="checkSheet.length">
<tr *ngFor="let item of checkSheet;let i = index">
<td class="align-start" rowspan="2">
<div *ngFor="let item2 of item.score">
<span>{{item2}} </span><br>
</div> </div>
</th> </td>
<th *ngIf="f" scope="col" rowspan="2" <td class="align-start" rowspan="2">
class="relative bg-soft-secondary text-primary !text-center !p-0"> <div *ngFor="let item2 of item.condition">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <span>{{item2}} </span><br>
<i class="ti ti-dots-vertical fs-l"></i>
</div> </div>
</th> </td>
</ng-container> <td class="!p-0"></td>
</tr> <td class="align-start text-center">
<tr class="font-size-12px"> {{calAverage(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
<ng-container *ngFor="let item of ['เกณฑ์การให้คะแนน','เงื่อนไข']"> </td>
<th scope="col" <td class="align-start text-center">
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center"> {{calGap(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
{{item}} </td>
</th> </tr>
</ng-container> <tr>
</tr> <td class="align-start !white-space-normal" colspan="4">
</thead> หมายเหตุ<br>
<tbody *ngIf="checkSheet.length"> ผลการประเมินอาจมีการเปลี่ยนแปลงเงื่อนไขข้อ 1-3 เนื่องจากมีคะแนนต่ำกว่าเกณฑ์ในบางข้อ
<tr *ngFor="let item of checkSheet;let i = index"> </td>
<td class="align-start" rowspan="2"> </tr>
<div *ngFor="let item2 of item.score"> </tbody>
<span>{{item2}} </span><br> </table>
</div>
</td>
<td class="align-start" rowspan="2">
<div *ngFor="let item2 of item.condition">
<span>{{item2}} </span><br>
</div>
</td>
<td class="!p-0"></td>
<td class="align-start text-center">
{{calAverage(appraisalCompentencyForm.data.averageScore)}}
</td>
<td class="align-start text-center">
{{calGap(appraisalCompentencyForm.data.averageScore)}}
</td>
</tr>
<tr>
<td class="align-start !white-space-normal" colspan="4">
หมายเหตุ<br>
ผลการประเมินอาจมีการเปลี่ยนแปลงเงื่อนไขข้อ 1-3 เนื่องจากมีคะแนนต่ำกว่าเกณฑ์ในบางข้อ
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="py-1rem px-2rem">
<div class="py-2 grid grid-cols-7 gap-3">
<div class="col-span-1">ผู้ถูกประเมิน</div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsassessy.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none "
[checked]="appraisalCompentencyForm.data.apsassessyStatus=='1'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsassessyComment"></textarea>
<span class="pt-2">
วันที่ : {{convertDate(currentDate)}}
</span>
</div> </div>
</div> </div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentencyForm.data.apsapprove1.employeeId"> <div class="py-1rem px-2rem">
<div class="col-span-1"> <div class="py-2 grid grid-cols-7 gap-3">
{{appraisalCompentencyForm.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}} <div class="col-span-1">ผู้ถูกประเมิน</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsassessy.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none "
[checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsassessyStatus=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='0'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='0'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsassessyComment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsassessyDate)}}
</span>
</div>
</div> </div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsapprove1.thFullName}}</div> <div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove1.employeeId">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600 {{appraisalCompentency2.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsapprove1.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none" checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentencyForm.data.apsapprove1Status=='1'"> [checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label> <label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่" <textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsapprove1Comment"></textarea> [class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='1'||!employee.evaluate"
<span class="pt-2"> [readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='1'||!employee.evaluate"
วันที่ : {{convertDate(currentDate)}} [(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Comment"></textarea>
</span> <span class="pt-2">
</div> วันที่ :
</div> {{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentencyForm.data.apsapprove2.employeeId"> </span>
<div class="col-span-1"> </div>
{{appraisalCompentencyForm.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div> </div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsapprove2.thFullName}}</div> <div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove2.employeeId">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600 {{appraisalCompentency2.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsapprove2.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none" checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentencyForm.data.apsapprove2Status=='1'"> [checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label> <label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่" <textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsapprove2Comment"></textarea> [class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='2'||!employee.evaluate"
<span class="pt-2"> [readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='2'||!employee.evaluate"
วันที่ : {{convertDate(currentDate)}} [(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Comment"></textarea>
</span> <span class="pt-2">
</div> วันที่ :
</div> {{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentencyForm.data.apsapprove3.employeeId"> </span>
<div class="col-span-1"> </div>
{{appraisalCompentencyForm.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div> </div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsapprove3.thFullName}}</div> <div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove3.employeeId">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600 {{appraisalCompentency2.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsapprove3.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none" checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentencyForm.data.apsapprove3Status=='1'"> [checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label> <label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่" <textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsapprove3Comment"></textarea> [class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='3'||!employee.evaluate"
<span class="pt-2"> [readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='3'||!employee.evaluate"
วันที่ : {{convertDate(currentDate)}} [(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Comment"></textarea>
</span> <span class="pt-2">
</div> วันที่ :
</div> {{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentencyForm.data.apsapprove4.employeeId"> </span>
<div class="col-span-1"> </div>
{{appraisalCompentencyForm.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div> </div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsapprove4.thFullName}}</div> <div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove4.employeeId">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600 {{appraisalCompentency2.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsapprove4.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none" checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentencyForm.data.apsapprove4Status=='1'"> [checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label> <label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่" <textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsapprove4Comment"></textarea> [class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='4'||!employee.evaluate"
<span class="pt-2"> [readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='4'||!employee.evaluate"
วันที่ : {{convertDate(currentDate)}} [(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Comment"></textarea>
</span> <span class="pt-2">
</div> วันที่ :
</div> {{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentencyForm.data.apsapprove5.employeeId"> </span>
<div class="col-span-1"> </div>
ผู้อนุมัติ
</div> </div>
<div class="col-span-1">{{appraisalCompentencyForm.data.apsapprove5.thFullName}}</div> <div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove5.employeeId">
<div class="col-span-1"> <div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600 ผู้อนุมัติ
</div>
<div class="col-span-1">
{{appraisalCompentency2.data.apsapprove5.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none" checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentencyForm.data.apsapprove5Status=='1'"> [checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label> <label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div> </div>
<div class="col-span-2"> <div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่" <textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[(ngModel)]="appraisalCompentencyForm.data.apsapprove5Comment"></textarea> [class.!bg-input-readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='5'||!employee.evaluate"
<span class="pt-2"> [readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='5'||!employee.evaluate"
วันที่ : {{convertDate(currentDate)}} [(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Comment"></textarea>
</span> <span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
</span>
</div>
</div> </div>
</div> </div>
</div>
<div class="flex justify-center mb-1rem pb-2rem"> <div class="flex justify-center mb-1rem pb-2rem" *ngIf="employee.evaluate">
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="saveDraft()"> <button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="saveDraft()">
บันทึกร่าง บันทึกร่าง
</button> </button>
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save()"> <button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save()">
บันทึกข้อมูล บันทึกข้อมูล
</button> </button>
</div>--> </div>
</ng-container>
</ng-template> </ng-template>
\ No newline at end of file
import { ChangeDetectorRef, Component, OnInit, TemplateRef, ViewChild } from '@angular/core'; import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';
import { AppraisalFormModel, MyAppraisalFormModel } from 'src/app/shared/model/appraisal-form.model'; import { AppraisalCompentencyModel, AppraisalCompentencyModel2 } from 'src/app/shared/model/appraisal-competency.model';
import { AppraisalModel, MyAppraisalModel } from 'src/app/shared/model/appraisal.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model'; import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { IdpDevelopmentModel, MyIdpDevelopmentModel } from 'src/app/shared/model/idp-development.model';
import { MySettingAssessmentModel, SettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model'; import { MySettingAssessmentModel, SettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service'; import { AppraisalService } from 'src/app/shared/services/appraisal.service';
import { EmployeeService } from 'src/app/shared/services/employee.service'; import { EmployeeService } from 'src/app/shared/services/employee.service';
import { IdpDevelopmentService } from 'src/app/shared/services/idp-development.service';
import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service'; import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service';
import Swal from 'sweetalert2'; import Swal from 'sweetalert2';
...@@ -22,7 +19,10 @@ export interface BiModel { ...@@ -22,7 +19,10 @@ export interface BiModel {
styleUrls: ['./self-evaluation.component.scss'] styleUrls: ['./self-evaluation.component.scss']
}) })
export class SelfEvaluationComponent implements OnInit { export class SelfEvaluationComponent implements OnInit {
pathTitle = ['การประเมินผล', 'ประเมินตนเอง'] @Input() pathTitle = ['การประเมินผล', 'ประเมินตนเอง']
@Input() employeeId?: string
@Output() sendPathTitle: EventEmitter<string[]> = new EventEmitter<string[]>();
@Output() sendPageEvalution: EventEmitter<string> = new EventEmitter<string>();
hoveredCode: string | null = null; hoveredCode: string | null = null;
checkSheet: { checkSheet: {
score: string[], score: string[],
...@@ -35,11 +35,11 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -35,11 +35,11 @@ export class SelfEvaluationComponent implements OnInit {
@ViewChild('selfEvaluationEdit', { static: true }) selfEvaluationEdit!: TemplateRef<any>; @ViewChild('selfEvaluationEdit', { static: true }) selfEvaluationEdit!: TemplateRef<any>;
currentTemplate: TemplateRef<any> = this.selfEvaluation currentTemplate: TemplateRef<any> = this.selfEvaluation
appraisalCompentency: { loading: boolean, select: AppraisalModel, dataList: AppraisalModel[] } = { loading: false, select: new MyAppraisalModel(), dataList: [] } appraisalCompentency: { loading: boolean, select?: AppraisalCompentencyModel, dataList: AppraisalCompentencyModel[] } = { loading: false, select: undefined, dataList: [] }
appraisalCompentencyForm: { loading: boolean, data: AppraisalFormModel } = { loading: false, data: new MyAppraisalFormModel() } appraisalCompentency2: { loading: boolean, data?: AppraisalCompentencyModel2 } = { loading: false, data: undefined }
appraisalPms: { loading: boolean, select: AppraisalModel, dataList: { check: boolean, data: AppraisalModel }[] } = { loading: false, select: new MyAppraisalModel(), dataList: [] } appraisalPms: { loading: boolean, select: undefined, dataList: { check: boolean, data: undefined }[] } = { loading: false, select: undefined, dataList: [] }
employee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() } employee: { loading: boolean, data: EmployeeModel, evaluate: boolean } = { loading: false, data: new MyEmployeeModel(), evaluate: false }
// setting: { loading: boolean, data: SettingAssessmentModel } = { loading: false, data: new MySettingAssessmentModel() } setting: { loading: boolean, data: SettingAssessmentModel } = { loading: false, data: new MySettingAssessmentModel() }
currentDate = new Date() currentDate = new Date()
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
...@@ -49,28 +49,37 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -49,28 +49,37 @@ export class SelfEvaluationComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.currentTemplate = this.selfEvaluation this.currentTemplate = this.selfEvaluation
this.getProfile() this.getWorking()
this.getAppraisalCompentencyList() this.getAppraisalCompentencyList()
// this.getSettingList() this.getSettingList()
if (this.pathTitle.find(x => ['การประเมินผล', 'ประเมินโดยหัวหน้า'].includes(x))) {
this.returnPageTitle()
}
} }
returnPageTitle() {
this.sendPathTitle.emit(['การประเมินผล', 'ประเมินโดยหัวหน้า', 'ประเมินลูกน้อง'])
}
returnPageEvalution() {
this.sendPageEvalution.emit("")
}
// getSettingList() { getSettingList() {
// this.setting.loading = true this.setting.loading = true
// this.settingAssessmentService.get().subscribe({ this.settingAssessmentService.get().subscribe({
// next: response => { next: response => {
// this.setting.data = new MySettingAssessmentModel(response) this.setting.data = new MySettingAssessmentModel(response)
// this.setting.loading = false this.setting.loading = false
// this.cdr.detectChanges() this.cdr.detectChanges()
// }, error: error => { }, error: error => {
// this.setting.loading = false this.setting.loading = false
// this.cdr.detectChanges() this.cdr.detectChanges()
// } }
// }) })
// } }
getProfile() { getWorking() {
this.employee.loading = true this.employee.loading = true
this.employeeService.getProfile().subscribe({ this.employeeService.getWorkingById(this.employeeId).subscribe({
next: response => { next: response => {
this.employee.data = new MyEmployeeModel(response) this.employee.data = new MyEmployeeModel(response)
this.employee.loading = false this.employee.loading = false
...@@ -85,7 +94,7 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -85,7 +94,7 @@ export class SelfEvaluationComponent implements OnInit {
this.appraisalCompentency.loading = true this.appraisalCompentency.loading = true
this.appraisalService.getCompetencyList().subscribe({ this.appraisalService.getCompetencyList().subscribe({
next: response => { next: response => {
this.appraisalCompentency.dataList = response.map(x => new MyAppraisalModel(x)) this.appraisalCompentency.dataList = JSON.parse(JSON.stringify(response))
if (this.appraisalCompentency.dataList.length) { if (this.appraisalCompentency.dataList.length) {
this.selectAppraisalCompentency(this.appraisalCompentency.dataList[0]) this.selectAppraisalCompentency(this.appraisalCompentency.dataList[0])
} }
...@@ -100,29 +109,65 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -100,29 +109,65 @@ export class SelfEvaluationComponent implements OnInit {
appraisalCompentencyFilter(index: number) { appraisalCompentencyFilter(index: number) {
return this.appraisalCompentency.dataList[index].masfromEvaluationAssessment1 return this.appraisalCompentency.dataList[index].masfromEvaluationAssessment1
} }
selectAppraisalCompentency(data: AppraisalModel) { selectAppraisalCompentency(data: AppraisalCompentencyModel) {
this.appraisalCompentency.select = new MyAppraisalModel(data) this.appraisalCompentency.select = JSON.parse(JSON.stringify(data))
} }
getAppraisalCompentencyForm(typeId: string) { getAppraisalCompentencyForm(typeId: string) {
this.appraisalCompentencyForm.loading = true this.appraisalCompentency2.loading = true
this.appraisalService.getFormCompentencyById(this.appraisalCompentency.select.masfromEvaluationRound.evaluationRoundId, this.employee.data.employeeId, typeId).subscribe({ if (this.appraisalCompentency.select) {
next: response => { this.appraisalService.getFormCompentencyById(this.appraisalCompentency.select.masfromEvaluationRound.evaluationRoundId, this.employee.data.employeeId, typeId).subscribe({
console.log(" 🐒 response:", response) next: response => {
// this.appraisalCompentencyForm.data = new MyAppraisalFormModel(response) this.appraisalCompentency2.data = JSON.parse(JSON.stringify(response))
// this.appraisalCompentencyForm.data = response if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
// this.calnumberCheck() switch (this.appraisalCompentency2.data?.currentStep) {
// this.appraisalCompentencyForm.loading = false case ("0"): {
this.cdr.detectChanges() this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsassessyDate = this.currentDate.toISOString().split('T')[0];
}, error: error => { this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsassessy.employeeId
this.appraisalCompentencyForm.loading = false break
this.cdr.detectChanges() }
} case ("1"): {
}) this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Date = this.currentDate.toISOString().split('T')[0];
this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove1.employeeId
break
}
case ("2"): {
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Date = this.currentDate.toISOString().split('T')[0];
this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove2.employeeId
break
}
case ("3"): {
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Date = this.currentDate.toISOString().split('T')[0];
this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove3.employeeId
break
}
case ("4"): {
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Date = this.currentDate.toISOString().split('T')[0];
this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove4.employeeId
break
}
case ("5"): {
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Date = this.currentDate.toISOString().split('T')[0];
this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove5.employeeId
break
}
default: { return }
}
console.log(" 🐒 this.employee.evaluate:", this.employee.evaluate)
}
this.calnumberCheck()
this.appraisalCompentency2.loading = false
this.cdr.detectChanges()
}, error: error => {
this.appraisalCompentency2.loading = false
this.cdr.detectChanges()
}
})
}
} }
// appraisalCompentencyFormFilter() { appraisalCompentency2Filter() {
// return this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList return this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List || []
// } }
appraisalPmsFilter() { appraisalPmsFilter() {
...@@ -163,8 +208,65 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -163,8 +208,65 @@ export class SelfEvaluationComponent implements OnInit {
cancelButton: '!swal2-button-bg-gray', cancelButton: '!swal2-button-bg-gray',
}, },
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed && this.appraisalCompentency2) {
const body = { ...this.appraisalCompentencyForm.data, apsassessyStatus: '2' } let body = this.appraisalCompentency2.data
switch (this.appraisalCompentency2.data?.currentStep) {
case ("0"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsassessyStatus: '1'
}]
}
break
}
case ("1"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove1Status: '1'
}]
}
break
}
case ("2"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove2Status: '1'
}]
}
break
}
case ("3"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove3Status: '1'
}]
}
break
}
case ("4"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove4Status: '1'
}]
}
break
}
case ("5"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove5Status: '1'
}]
}
break
}
default: { return }
}
this.appraisalService.postCompetency(body).subscribe({ this.appraisalService.postCompetency(body).subscribe({
next: response => { next: response => {
if (response.success) { if (response.success) {
...@@ -228,8 +330,8 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -228,8 +330,8 @@ export class SelfEvaluationComponent implements OnInit {
</svg> </svg>
</div> </div>
`, `,
title: 'บันทึกแบบร่าง', title: 'บันทึกข้อมูล',
text: 'คุณต้องการบันทึกแบบร่างของการประเมินนี้ใช่หรือไม่', text: 'คุณต้องการบันทึกข้อมูลการประเมินนี้ใช่หรือไม่',
showCancelButton: true, showCancelButton: true,
confirmButtonText: 'ยืนยันการบันทึก', confirmButtonText: 'ยืนยันการบันทึก',
cancelButtonText: 'ย้อนกลับ', cancelButtonText: 'ย้อนกลับ',
...@@ -242,27 +344,88 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -242,27 +344,88 @@ export class SelfEvaluationComponent implements OnInit {
}, },
}).then((result) => { }).then((result) => {
if (result.isConfirmed) { if (result.isConfirmed) {
const body = { ...this.appraisalCompentencyForm.data, apsassessyStatus: '2' } let body = this.appraisalCompentency2.data
switch (this.appraisalCompentency2.data?.currentStep) {
case ("0"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsassessyStatus: '2'
}]
}
break
}
case ("1"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove1Status: '2'
}]
}
break
}
case ("2"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove2Status: '2'
}]
}
break
}
case ("3"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove3Status: '2'
}]
}
break
}
case ("4"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove4Status: '2'
}]
}
break
}
case ("5"): {
body = {
...this.appraisalCompentency2.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0],
apsapprove5Status: '2'
}]
}
break
}
default: { return }
}
this.appraisalService.postCompetency(body).subscribe({ this.appraisalService.postCompetency(body).subscribe({
next: response => { next: response => {
if (response.success) { if (this.appraisalCompentency2.data) {
Swal.fire({ if (response.success) {
title: 'บันทึกสำเร็จ!', this.getAppraisalCompentencyForm(this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].competencyType.competencyTypeId)
text: 'การประเมินของคุณถูกบันทึกแล้ว', this.getWorking()
icon: 'success', Swal.fire({
customClass: { title: 'บันทึกสำเร็จ!',
confirmButton: '!swal2-button-bg-green', text: 'การประเมินของคุณถูกบันทึกแล้ว',
} icon: 'success',
}); customClass: {
} else { confirmButton: '!swal2-button-bg-green',
Swal.fire({ }
title: 'ยกเลิก!', });
text: 'การบันทึกถูกยกเลิก', } else {
icon: 'error', Swal.fire({
customClass: { title: 'ยกเลิก!',
confirmButton: '!swal2-button-bg-danger', text: 'การบันทึกถูกยกเลิก',
} icon: 'error',
}); customClass: {
confirmButton: '!swal2-button-bg-danger',
}
});
}
} }
}, error: error => { }, error: error => {
Swal.fire({ Swal.fire({
...@@ -289,80 +452,100 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -289,80 +452,100 @@ export class SelfEvaluationComponent implements OnInit {
}); });
} }
convertDate(dateInput: string | Date): string { convertDate(dateInput?: string | Date): string {
const date = typeof dateInput === 'string' ? new Date(dateInput) : dateInput; let date = new Date()
return date.toLocaleDateString('th-TH', { day: 'numeric', month: 'long', year: 'numeric' }); if (dateInput) {
if (typeof dateInput === 'string') {
const [year, month, day] = dateInput.split('-').map(Number);
date = new Date(year, month - 1, day);
} else {
date = dateInput
}
}
return date?.toLocaleDateString('th-TH', { day: 'numeric', month: 'long', year: 'numeric' }) || ''
} }
// calnumberCheck() { calnumberCheck() {
// this.appraisalCompentencyForm.data.numberCheck1 = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 1).length).reduce((acc: any, num: any) => acc + num, 0) if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
// this.appraisalCompentencyForm.data.numberCheck2 = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 2).length).reduce((acc: any, num: any) => acc + num, 0) this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck1 = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 1).length).reduce((acc: any, num: any) => acc + num, 0)
// this.appraisalCompentencyForm.data.numberCheck3 = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 3).length).reduce((acc: any, num: any) => acc + num, 0) this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck2 = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 2).length).reduce((acc: any, num: any) => acc + num, 0)
// this.appraisalCompentencyForm.data.numberCheck4 = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 4).length).reduce((acc: any, num: any) => acc + num, 0) this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck3 = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 3).length).reduce((acc: any, num: any) => acc + num, 0)
// this.appraisalCompentencyForm.data.numberCheck5 = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 5).length).reduce((acc: any, num: any) => acc + num, 0) this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck4 = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 4).length).reduce((acc: any, num: any) => acc + num, 0)
// this.calWeightTotal() this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck5 = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 5).length).reduce((acc: any, num: any) => acc + num, 0)
// this.cdr.detectChanges() this.calWeightTotal()
// } }
// calWeightScore(numberCheck: number) { this.cdr.detectChanges()
// switch (numberCheck) { }
// case (1): { calWeightScore(numberCheck: number) {
// return +(this.setting.data.settingScore1) * this.appraisalCompentencyForm.data.numberCheck1 if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
// } switch (numberCheck) {
// case (2): { case (1): {
// return +(this.setting.data.settingScore2) * this.appraisalCompentencyForm.data.numberCheck2 return +(this.setting.data.settingScore1) * this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck1
// } }
// case (3): { case (2): {
// return +(this.setting.data.settingScore3) * this.appraisalCompentencyForm.data.numberCheck3 return +(this.setting.data.settingScore2) * this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck2
// } }
// case (4): { case (3): {
// return +(this.setting.data.settingScore4) * this.appraisalCompentencyForm.data.numberCheck4 return +(this.setting.data.settingScore3) * this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck3
// } }
// case (5): { case (4): {
// return +(this.setting.data.settingScore5) * this.appraisalCompentencyForm.data.numberCheck5 return +(this.setting.data.settingScore4) * this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck4
// } }
// default: { return } case (5): {
// } return +(this.setting.data.settingScore5) * this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck5
// } }
// calWeightTotal() { default: { return }
// this.appraisalCompentencyForm.data.weightedTotal = 0 }
// this.appraisalCompentencyForm.data.weightedTotal = (this.calWeightScore(1) ?? 0) + (this.calWeightScore(2) ?? 0) + (this.calWeightScore(3) ?? 0) + (this.calWeightScore(4) ?? 0) + (this.calWeightScore(5) ?? 0) }
// this.cdr.detectChanges() return
// this.calAverageScore() }
// } calWeightTotal() {
// calAverageScore() { if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
// const total = this.appraisalCompentencyForm.data.masfromEvaluationAssessment1lList.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.length).reduce((acc: any, num: any) => acc + num, 0) * 5 this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal = 0
// if (total) { this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal = (this.calWeightScore(1) ?? 0) + (this.calWeightScore(2) ?? 0) + (this.calWeightScore(3) ?? 0) + (this.calWeightScore(4) ?? 0) + (this.calWeightScore(5) ?? 0)
// this.appraisalCompentencyForm.data.averageScore = 0 this.cdr.detectChanges()
// this.appraisalCompentencyForm.data.averageScore = (this.appraisalCompentencyForm.data.weightedTotal / total) * 100 this.calAverageScore()
// this.cdr.detectChanges() }
// } }
// } calAverageScore() {
if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
const total = this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.length).reduce((acc: any, num: any) => acc + num, 0) * 5
if (total) {
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore = 0
this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore = (this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal / total) * 100
this.cdr.detectChanges()
}
}
}
showNumber(text: number | string) { showNumber(text: number | string) {
const num = Number(text); const num = Number(text);
return isNaN(num) ? 0 : +num.toFixed(2); return isNaN(num) ? 0 : +num.toFixed(2);
} }
// calGap(score: number | string) { calGap(score: number | string) {
// const roundedScore = this.showNumber(score) % 1 <= 0.5 ? Math.floor(this.showNumber(score)) : Math.round(this.showNumber(score)); if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
// if (roundedScore >= 90 && roundedScore <= 100) { const roundedScore = this.showNumber(score) % 1 <= 0.5 ? Math.floor(this.showNumber(score)) : Math.round(this.showNumber(score));
// if (this.appraisalCompentencyForm.data.numberCheck1 || this.appraisalCompentencyForm.data.numberCheck2 || this.appraisalCompentencyForm.data.numberCheck3) { if (roundedScore >= 90 && roundedScore <= 100) {
// return "-1"; if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck3) {
// } return "-1";
// return "+1"; }
// } else if (roundedScore >= 80 && roundedScore <= 89) { return "+1";
// if (this.appraisalCompentencyForm.data.numberCheck1 || this.appraisalCompentencyForm.data.numberCheck2 || this.appraisalCompentencyForm.data.numberCheck3) { } else if (roundedScore >= 80 && roundedScore <= 89) {
// return "-1"; if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0].numberCheck3) {
// } return "-1";
// return "0"; }
// } else if (roundedScore >= 60 && roundedScore <= 79) { return "0";
// return "-1"; } else if (roundedScore >= 60 && roundedScore <= 79) {
// } else if (roundedScore >= 40 && roundedScore <= 59) { return "-1";
// return "-2"; } else if (roundedScore >= 40 && roundedScore <= 59) {
// } else { return "-2";
// return "-3"; } else {
// } return "-3";
// } }
}
return
}
calAverage(score: number | string) { calAverage(score: number | string) {
const roundedScore = this.showNumber(score) % 1 <= 0.5 ? Math.floor(this.showNumber(score)) : Math.round(this.showNumber(score)); const roundedScore = this.showNumber(score) % 1 <= 0.5 ? Math.floor(this.showNumber(score)) : Math.round(this.showNumber(score));
if (roundedScore >= 90 && roundedScore <= 100) { if (roundedScore >= 90 && roundedScore <= 100) {
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
<thead> <thead>
<tr> <tr>
<ng-container <ng-container
*ngFor="let item of ['รหัสพนักงาน','ชื่อพนักงาน','ตำเเหน่งงาน','ประเมิน','เเผนพัฒนา','PMS','ผลประเมิน','เกรด','สถานะ','สถานะผู้ประเมิน']; let f = first; let l = last; let i = index"> *ngFor="let item of ['รหัสพนักงาน','ชื่อพนักงาน','ตำเเหน่งงาน','ประเมิน','เเผนพัฒนา','ผลประเมิน','เกรด','สถานะ','สถานะผู้ประเมิน']; let f = first; let l = last; let i = index">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary" <th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f||l||'ประเมิน'||'เเผนพัฒนา'||'PMS'"> [class.!text-center]="f||l||'ประเมิน'||'เเผนพัฒนา'||'PMS'">
<span class="text-sm">{{ item }}</span> <span class="text-sm">{{ item }}</span>
...@@ -46,30 +46,19 @@ ...@@ -46,30 +46,19 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr <tr *ngFor="let item of subordinateFilter();let i = index">
*ngFor="let item of[ <td class="text-center" style="font-size: 12px; width: 150px;">
['10001', 'ธนพัต อาชาไชย', 'HRD training Officer', '', '', '', '70', 'c', 'ประเมินเเล้ว', 'ผู้อนุมัติลำดับที่ 1'], {{item.apsassessy.employeeId}}
['10002', 'พิชญาภา มหาเมธี', 'HRD training Officer', '', '', '', '-', '-', 'ยังไม่ประเมิน', '-'], </td>
['10003', 'นิรดา บุญเทพ', 'HRD training Officer', '', '', '', '76', '', 'ประเมินเเล้ว', 'ผู้อนุมัติลำดับที่3'], <td style="font-size: 12px; width: 175px;">
['10004', 'รัตน์ ธนากร', 'HRD training Officer', '', '', '', '79', '', 'ประเมินเเล้ว', 'ผู้อนุมัติลำดับที่ 1'], {{item.apsassessy.thFullName}}
['10005', 'ยศกร ศิริธาดา', 'HRD training Officer', '', '', '', '', '', 'ประเมินเเล้ว', 'ผู้อนุมัติลำดับที่ 2'], </td>
['10006', 'ธนิสรา นพรัตน์พร', 'HRD training Officer', '', '', '', '80', '', 'ประเมินเเล้ว', '-'], <td style="font-size: 12px;">{{item.apsassessy.position.tdesc}}</td>
['10007', 'เมริสา สุขทิพย์', 'HRD training Officer', '', '', '', '', '', 'ประเมินเเล้ว', '-']];let i = index">
<td class="text-center" style="font-size: 12px; width: 150px;">{{item[0]}}</td>
<td style="font-size: 12px; width: 175px;">{{item[1]}}</td>
<td style="font-size: 12px;">{{item[2]}}</td>
<td class="flex justify-center"> <td class="flex justify-center">
<button type="button" class="ti-btn rounded-sm ti-btn-secondary"
style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;" (click)="returnPage('c')">
CC
</button>
<button type="button" class="ti-btn rounded-sm ti-btn-warning"
style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;" (click)="returnPage('c')">
MC
</button>
<button type="button" class="ti-btn rounded-sm ti-btn-success" <button type="button" class="ti-btn rounded-sm ti-btn-success"
style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;" (click)="returnPage('c')"> style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;"
PC (click)="returnPage('evaluate')">
ประเมิน
</button> </button>
</td> </td>
<td style="width: 160px; text-align: center; vertical-align: middle;"> <td style="width: 160px; text-align: center; vertical-align: middle;">
...@@ -78,16 +67,10 @@ ...@@ -78,16 +67,10 @@
IDP IDP
</button> </button>
</td> </td>
<td class="text-center"> <td class="text-center" style="font-size: 12px;">{{item.sumScore}}</td>
<button type="button" class="ti-btn rounded-sm ti-btn-success" <td class="text-center" style="font-size: 12px;">{{item.gread}}</td>
style="height: 15px; width: 55px; font-size: 12px; display: flex; align-items: center; justify-content: center;" (click)="returnPage('pms')"> <td class="text-center" style="font-size: 12px;">{{item.masfromStatusType.tdesc}}</td>
ประเมิน <td class="text-center" style="font-size: 12px;">{{item.apsapproveType.tdesc}}</td>
</button>
</td>
<td class="text-center" style="font-size: 12px;">{{item[6]}}</td>
<td class="text-center" style="font-size: 12px;">{{item[7]}}</td>
<td class="text-center" style="font-size: 12px;">{{item[8]}}</td>
<td class="text-center" style="font-size: 12px;">{{item[9]}}</td>
</tr> </tr>
</tbody> </tbody>
......
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { ToastrService } from 'ngx-toastr'; import { ToastrService } from 'ngx-toastr';
import { AppraisalSubordinateModel, MyAppraisalSubordinateModel } from 'src/app/shared/model/appraisal-subordinate.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service';
@Component({ @Component({
selector: 'app-round-one', selector: 'app-round-one',
...@@ -10,84 +12,33 @@ export class RoundOneComponent { ...@@ -10,84 +12,33 @@ export class RoundOneComponent {
@Input() pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนเครื่องมือ', 'เครื่องมือประเมิน']; @Input() pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนเครื่องมือ', 'เครื่องมือประเมิน'];
@Output() sendPathTitle: EventEmitter<string[]> = new EventEmitter<string[]>(); @Output() sendPathTitle: EventEmitter<string[]> = new EventEmitter<string[]>();
@Output() sendPageEvalution: EventEmitter<string> = new EventEmitter<string>(); @Output() sendPageEvalution: EventEmitter<string> = new EventEmitter<string>();
activeTab: string = 'tab1'; // กำหนด tab เริ่มต้น @Output() sendEmployeeId: EventEmitter<string> = new EventEmitter<string>();
isChecked: boolean = false;
subordinate: { loading: false, dataList: AppraisalSubordinateModel[] } = { loading: false, dataList: [] }
// ฟังก์ชันในการเปลี่ยนแท็บ search = ""
changeTab(tab: { id: string, text: string }) { constructor(private appraisalService: AppraisalService,
this.sendPathTitle.emit(['การประเมินสมรรถนะ', 'ทะเบียนเครื่องมือ', tab.text]); private cdr: ChangeDetectorRef) {
this.activeTab = tab.id; }
} ngOnInit(): void {
this.getBossList()
toggleCheckbox(): void { }
this.isChecked = !this.isChecked; getBossList() {
} this.appraisalService.getBossList().subscribe({
next: response => {
// การจัดการการเปิดปิด modal this.subordinate.dataList = response.map(x => new MyAppraisalSubordinateModel(x))
modalOptions: { this.cdr.detectChanges()
[nameModal: string]: { }, error: error => {
isModalOpen: boolean; this.cdr.detectChanges()
modalSize: string;
backdropClose: boolean;
};
} = {
"add": {
isModalOpen: false,
modalSize: 'm',
backdropClose: true,
},
"edit": {
isModalOpen: false,
modalSize: 'm',
backdropClose: true,
} }
}; })
openModal(name: string, size: string, closeOnBackdrop?: boolean) {
this.modalOptions[name].modalSize = size;
this.modalOptions[name].backdropClose = closeOnBackdrop || false;
this.modalOptions[name].isModalOpen = true;
this.currentModal = name; // ตั้งค่าค่าของ currentModal เป็น 'add' หรือ 'edit'
document.body.style.overflow = 'hidden';
}
closeModal(name: string) {
this.modalOptions[name].isModalOpen = false;
if (!this.isAnyModalOpen()) {
document.body.style.overflow = ''; // คืนค่าการ Scroll เฉพาะเมื่อ Modal ทั้งหมดปิดแล้ว
}
}
isAnyModalOpen(): boolean {
return Object.values(this.modalOptions).some(modal => modal.isModalOpen); // ตรวจสอบว่า modal อื่นยังเปิดอยู่หรือไม่
}
// ฟังก์ชันสำหรับการเพิ่ม ลบ หรือแก้ไข ข้อมูล
addUser() {
}
currentModal = ""
constructor(private toastr: ToastrService) { }
showSuccess() {
this.toastr.success('บันทึกข้อมูลสำเร็จ', 'เเจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
});
}
showSuccessEdit() {
this.toastr.success('เเก้ไขข้อมูลสำเร็จ', 'เเจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
});
} }
showSuccessDelete() { subordinateFilter() {
this.toastr.success('ลบข้อมูลสำเร็จ', 'เเจ้งเตือน', { return this.subordinate.dataList.filter(x => {
timeOut: 3000, return x.apsassessy.employeeId.toLowerCase().includes(this.search.toLowerCase()) || x.apsassessy.thFullName.toLowerCase().includes(this.search.toLowerCase())
positionClass: 'toast-top-right', })
});
} }
returnPage(text: string) { returnPage(text: string) {
this.sendEmployeeId.emit()
this.sendPageEvalution.emit(text) this.sendPageEvalution.emit(text)
} }
} }
......
...@@ -4,30 +4,12 @@ ...@@ -4,30 +4,12 @@
</div> </div>
<div class="block-main-content"> <div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem"> <div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ประเมินผล ประจำปี 2024 ประเมินผล ประจำปี {{currentDate.getFullYear()}}
</div> </div>
<div class="pt-0.75rem"> <div class="pt-50px px-2rem">
<div class="border-b border-gray-200 dark:border-white/10 px-2rem"> <div id="underline-1" role="tabpanel" aria-labelledby="underline-item-1">
<nav class=" flex space-x-2 rtl:space-x-reverse"> <app-round-one [pathTitle]="pathTitle" (sendPathTitle)="pathTitle=$event"
<a class="border justify-center rounded-top-4px bg-primary text-white -mb-px py-2 px-3 inline-flex items-center gap-2 font-size-16px font-weight-500 text-center text-gray-600 active" (sendPageEvalution)="pageEvalution=$event" (sendEmployeeId)="employeeId=$event"></app-round-one>
href="javascript:void(0);" id="card-type-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1">
รอบการประเมินที่ 1/2
</a>
<a class="border justify-center rounded-top-4px bg-primary text-white -mb-px py-2 px-3 inline-flex items-center gap-2 font-size-16px font-weight-500 text-center text-gray-600 active"
href="javascript:void(0);" id="card-type-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1">
รอบการประเมินที่ 2/2
</a>
</nav>
</div>
<div class="pt-50px px-2rem">
<div id="underline-1" role="tabpanel" aria-labelledby="underline-item-1">
<app-round-one [pathTitle]="pathTitle" (sendPathTitle)="pathTitle=$event"
(sendPageEvalution)="pageEvalution=$event"></app-round-one>
</div>
<div id="underline-2" role="tabpanel" aria-labelledby="underline-item-2">
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -40,5 +22,7 @@ ...@@ -40,5 +22,7 @@
<app-pms-evalution (sendPageEvalution)="pageEvalution=$event"></app-pms-evalution> <app-pms-evalution (sendPageEvalution)="pageEvalution=$event"></app-pms-evalution>
</ng-container> </ng-container>
<ng-container *ngIf="pageEvalution=='c'"> <ng-container *ngIf="pageEvalution=='c'">
<app-c-evaluation (sendPageEvalution)="pageEvalution=$event"></app-c-evaluation> <!-- <app-c-evaluation (sendPageEvalution)="pageEvalution=$event"></app-c-evaluation> -->
<app-self-evaluation [pathTitle]="pathTitle" (sendPageEvalution)="pageEvalution=$event"
(sendPathTitle)="pathTitle=$event" (employeeId)="employeeId"></app-self-evaluation>
</ng-container> </ng-container>
\ No newline at end of file
...@@ -8,4 +8,6 @@ import { Component } from '@angular/core'; ...@@ -8,4 +8,6 @@ import { Component } from '@angular/core';
export class SupervisorEvaluationComponent { export class SupervisorEvaluationComponent {
pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า'] pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']
pageEvalution = '' pageEvalution = ''
employeeId?: string
currentDate = new Date()
} }
export interface AppraisalCompentencyModel {
personal2Level: PersonalLevel
masfromEvaluationRound: MasfromEvaluationRound
companyId: string
active: boolean
apsassessy: Apsassessy
apsapprove1: Apsapprove1
apsapprove2: Apsapprove2
apsapprove3: Apsapprove3
apsapprove4: Apsapprove4
apsapprove5: Apsapprove5
masfromEvaluationAssessment1: MasfromEvaluationAssessment1[]
}
export interface PersonalLevel {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface MasfromEvaluationRound {
evaluationRoundId: string
companyId: string
tdesc: string
edesc: string
apsyear: string
apsPeriodStart: string
apsPeriodEnd: string
statusCode: StatusCode
}
export interface StatusCode {
code: string
tdesc: string
edesc: string
}
export interface Apsassessy {
employeeId: string
bossId: string
prefix: Prefix
fname: string
lname: string
efname: string
elname: string
bu1: Bu1
bu2: Bu2
bu3: Bu3
bu4: Bu4
bu5: Bu5
position: Position
job: Job
pl: Pl
status: Status
time0: Time0
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu1 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu2 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu3 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu4 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu5 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time0 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove1 {
employeeId: string
bossId: string
prefix: Prefix2
fname: string
lname: string
efname: string
elname: string
bu1: Bu12
bu2: Bu22
bu3: Bu32
bu4: Bu42
bu5: Bu52
position: Position2
job: Job2
pl: Pl2
status: Status2
time0: Time02
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix2 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu12 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu22 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu32 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu42 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu52 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position2 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job2 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl2 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status2 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time02 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove2 {
employeeId: string
bossId: string
prefix: Prefix3
fname: string
lname: string
efname: string
elname: string
bu1: Bu13
bu2: Bu23
bu3: Bu33
bu4: Bu43
bu5: Bu53
position: Position3
job: Job3
pl: Pl3
status: Status3
time0: Time03
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix3 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu13 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu23 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu33 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu43 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu53 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position3 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job3 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl3 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status3 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time03 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove3 {
employeeId: string
bossId: string
prefix: Prefix4
fname: string
lname: string
efname: string
elname: string
bu1: Bu14
bu2: Bu24
bu3: Bu34
bu4: Bu44
bu5: Bu54
position: Position4
job: Job4
pl: Pl4
status: Status4
time0: Time04
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix4 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu14 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu24 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu34 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu44 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu54 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position4 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job4 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl4 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status4 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time04 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove4 {
employeeId: string
bossId: string
prefix: Prefix5
fname: string
lname: string
efname: string
elname: string
bu1: Bu15
bu2: Bu25
bu3: Bu35
bu4: Bu45
bu5: Bu55
position: Position5
job: Job5
pl: Pl5
status: Status5
time0: Time05
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix5 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu15 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu25 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu35 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu45 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu55 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position5 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job5 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl5 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status5 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time05 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove5 {
employeeId: string
bossId: string
prefix: Prefix6
fname: string
lname: string
efname: string
elname: string
bu1: Bu16
bu2: Bu26
bu3: Bu36
bu4: Bu46
bu5: Bu56
position: Position6
job: Job6
pl: Pl6
status: Status6
time0: Time06
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix6 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu16 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu26 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu36 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu46 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu56 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position6 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job6 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl6 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status6 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time06 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface MasfromEvaluationAssessment1 {
plId: string
companyId: string
lineNo: number
competencyType: CompetencyType
masfromStatusType: MasfromStatusType
currentStep: string
lastStep: string
apsassessyStatus: string
apsapprove1Status: string
apsapprove2Status: string
apsapprove3Status: string
apsapprove4Status: string
apsapprove5Status: string
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
weightedTotal: number
averageScore: number
apsassessyComment: string
apsapprove1Comment: string
apsapprove2Comment: string
apsapprove3Comment: string
apsapprove4Comment: string
apsapprove5Comment: string
apsassessyDate: string
apsapprove1Date: string
apsapprove2Date: string
apsapprove3Date: string
apsapprove4Date: string
apsapprove5Date: string
evaluationResults: string
sumEvaluationResults: string
}
export interface CompetencyType {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface MasfromStatusType {
code: string
tdesc: string
edesc: string
}
export interface AppraisalCompentencyModel2 {
personalLevel: PersonalLevel
masfromEvaluationRound: MasfromEvaluationRound
companyId: string
active: boolean
apsassessy: Apsassessy
apsapprove1: Apsapprove1
apsapprove2: Apsapprove2
apsapprove3: Apsapprove3
apsapprove4: Apsapprove4
apsapprove5: Apsapprove5
masfromEvaluationAssessment1lList: MasfromEvaluationAssessment1lList[]
currentStep: string
lastStep: string
masfromStatusType: MasfromStatusType
}
export interface MasfromStatusType {
code: string
tdesc: string
edesc: string
}
export interface PersonalLevel {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface MasfromEvaluationRound {
evaluationRoundId: string
companyId: string
tdesc: string
edesc: string
apsyear: string
apsPeriodStart: string
apsPeriodEnd: string
statusCode: StatusCode
}
export interface StatusCode {
code: string
tdesc: string
edesc: string
}
export interface Apsassessy {
employeeId: string
bossId: string
prefix: Prefix
fname: string
lname: string
efname: string
elname: string
bu1: Bu1
bu2: Bu2
bu3: Bu3
bu4: Bu4
bu5: Bu5
position: Position
job: Job
pl: Pl
status: Status
time0: Time0
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu1 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu2 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu3 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu4 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu5 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time0 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove1 {
employeeId: string
bossId: string
prefix: Prefix2
fname: string
lname: string
efname: string
elname: string
bu1: Bu12
bu2: Bu22
bu3: Bu32
bu4: Bu42
bu5: Bu52
position: Position2
job: Job2
pl: Pl2
status: Status2
time0: Time02
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix2 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu12 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu22 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu32 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu42 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu52 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position2 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job2 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl2 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status2 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time02 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove2 {
employeeId: string
bossId: string
prefix: Prefix3
fname: string
lname: string
efname: string
elname: string
bu1: Bu13
bu2: Bu23
bu3: Bu33
bu4: Bu43
bu5: Bu53
position: Position3
job: Job3
pl: Pl3
status: Status3
time0: Time03
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix3 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu13 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu23 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu33 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu43 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu53 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position3 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job3 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl3 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status3 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time03 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove3 {
employeeId: string
bossId: string
prefix: Prefix4
fname: string
lname: string
efname: string
elname: string
bu1: Bu14
bu2: Bu24
bu3: Bu34
bu4: Bu44
bu5: Bu54
position: Position4
job: Job4
pl: Pl4
status: Status4
time0: Time04
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix4 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu14 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu24 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu34 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu44 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu54 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position4 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job4 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl4 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status4 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time04 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove4 {
employeeId: string
bossId: string
prefix: Prefix5
fname: string
lname: string
efname: string
elname: string
bu1: Bu15
bu2: Bu25
bu3: Bu35
bu4: Bu45
bu5: Bu55
position: Position5
job: Job5
pl: Pl5
status: Status5
time0: Time05
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix5 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu15 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu25 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu35 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu45 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu55 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position5 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job5 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl5 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status5 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time05 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove5 {
employeeId: string
bossId: string
prefix: Prefix6
fname: string
lname: string
efname: string
elname: string
bu1: Bu16
bu2: Bu26
bu3: Bu36
bu4: Bu46
bu5: Bu56
position: Position6
job: Job6
pl: Pl6
status: Status6
time0: Time06
resignDate: string
endWorkDate: string
thFullName: string
engFullName: string
}
export interface Prefix6 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu16 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu26 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu36 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu46 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu56 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position6 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job6 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl6 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status6 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time06 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface MasfromEvaluationAssessment1lList {
plId: string
companyId: string
lineNo: number
competencyType: CompetencyType
apsassessyStatus: string
apsapprove1Status: string
apsapprove2Status: string
apsapprove3Status: string
apsapprove4Status: string
apsapprove5Status: string
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
weightedTotal: number
averageScore: number
apsassessyComment: string
apsapprove1Comment: string
apsapprove2Comment: string
apsapprove3Comment: string
apsapprove4Comment: string
apsapprove5Comment: string
apsassessyDate: string
apsapprove1Date: string
apsapprove2Date: string
apsapprove3Date: string
apsapprove4Date: string
apsapprove5Date: string
evaluationResults: string
sumEvaluationResults: string
masfromEvaluationAssessment2List: MasfromEvaluationAssessment2List[]
}
export interface CompetencyType {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface MasfromEvaluationAssessment2List {
masfromEvaluationAssessment1: string
runNo: number
companyId: string
scoreTopicExpectation: number
groupAssessment1: GroupAssessment1
}
export interface GroupAssessment1 {
personalLevelModel: PersonalLevelModel
competencyIndicatorsCourses1Mini: CompetencyIndicatorsCourses1Mini
companyId: string
groupAssessmentMini: GroupAssessmentMini
}
export interface PersonalLevelModel {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface CompetencyIndicatorsCourses1Mini {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses0
lineNo: number
companyId: string
competencyCourseId: string
competencyCourse: CompetencyCourse[]
behavioralIndicatorsList: BehavioralIndicatorsList[]
}
export interface CompetencyIndicatorsCourses0 {
competencyTopic: CompetencyTopic
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
expectation: string
}
export interface CompetencyTopic {
competencyTopicId: string
competencyType: CompetencyType2
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType2 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface CompetencyCourse {
competencyCourseId: string
companyId: string
edesc: string
tdesc: string
courseDetail: string
courseTopic: string
courseLinkMylearn: string
}
export interface BehavioralIndicatorsList {
competencyIndicators1: CompetencyIndicators1
runNo: number
companyId: string
assessmentId: string
behavioralIndicators: string
competencyAssessment: CompetencyAssessment[]
competencyBehavioral: CompetencyBehavioral
}
export interface CompetencyIndicators1 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses02
lineNo: number
companyId: string
competencyCourseId: string
}
export interface CompetencyIndicatorsCourses02 {
competencyTopic: CompetencyTopic2
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
}
export interface CompetencyTopic2 {
competencyTopicId: string
competencyType: CompetencyType3
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType3 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface CompetencyAssessment {
assessmentId: string
companyId: string
edesc: string
tdesc: string
shortName: string
}
export interface CompetencyBehavioral {
scoreTopicExpectation: number
companyId: string
}
export interface GroupAssessmentMini {
personalLevel: PersonalLevel2
competencyIndicatorsCourses1Mini: CompetencyIndicatorsCourses1Mini2
companyId: string
edesc: string
tdesc: string
}
export interface PersonalLevel2 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface CompetencyIndicatorsCourses1Mini2 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses03
lineNo: number
companyId: string
competencyCourseId: string
competencyCourse: CompetencyCourse2[]
behavioralIndicatorsList: BehavioralIndicatorsList2[]
}
export interface CompetencyIndicatorsCourses03 {
competencyTopic: CompetencyTopic3
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
expectation: string
}
export interface CompetencyTopic3 {
competencyTopicId: string
competencyType: CompetencyType4
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType4 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface CompetencyCourse2 {
competencyCourseId: string
companyId: string
edesc: string
tdesc: string
courseDetail: string
courseTopic: string
courseLinkMylearn: string
}
export interface BehavioralIndicatorsList2 {
competencyIndicators1: CompetencyIndicators12
runNo: number
companyId: string
assessmentId: string
behavioralIndicators: string
competencyAssessment: CompetencyAssessment2[]
competencyBehavioral: CompetencyBehavioral2
}
export interface CompetencyIndicators12 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses04
lineNo: number
companyId: string
competencyCourseId: string
}
export interface CompetencyIndicatorsCourses04 {
competencyTopic: CompetencyTopic4
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
}
export interface CompetencyTopic4 {
competencyTopicId: string
competencyType: CompetencyType5
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType5 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface CompetencyAssessment2 {
assessmentId: string
companyId: string
edesc: string
tdesc: string
shortName: string
}
export interface CompetencyBehavioral2 {
scoreTopicExpectation: number
companyId: string
}
import { EmployeeModel, MyEmployeeModel } from "./employee.model"
import { MyStatusCodeModel, StatusCodeModel } from "./status-code.model"
export interface AppraisalSubordinateModel {
companyId: string
active: boolean
masfromStatusType: StatusCodeModel
apsapproveType: StatusCodeModel
apsassessy: EmployeeModel
gread: string
sumScore: number
}
export class MyAppraisalSubordinateModel implements AppraisalSubordinateModel {
companyId: string
active: boolean
masfromStatusType: StatusCodeModel
apsapproveType: StatusCodeModel
apsassessy: EmployeeModel
gread: string
sumScore: number
constructor(data: Partial<AppraisalSubordinateModel>) {
this.companyId = data.companyId || ""
this.active = data.active ?? false
this.masfromStatusType = new MyStatusCodeModel(data.masfromStatusType)
this.apsapproveType = new MyStatusCodeModel(data.apsapproveType)
this.apsassessy = new MyEmployeeModel(data.apsassessy)
this.gread = data.gread || ""
this.sumScore = data.sumScore ?? 0
}
}
...@@ -3,8 +3,9 @@ import { Injectable } from '@angular/core'; ...@@ -3,8 +3,9 @@ import { Injectable } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment';
import { AlertModel } from '../model/alert.model'; import { AlertModel } from '../model/alert.model';
import { AppraisalModel } from '../model/appraisal.model';
import { AppraisalFormModel } from '../model/appraisal-form.model'; import { AppraisalFormModel } from '../model/appraisal-form.model';
import { AppraisalCompentencyModel, AppraisalCompentencyModel2 } from '../model/appraisal-competency.model';
import { AppraisalSubordinateModel } from '../model/appraisal-subordinate.model';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
...@@ -13,13 +14,16 @@ export class AppraisalService { ...@@ -13,13 +14,16 @@ export class AppraisalService {
urlApi = environment.baseUrl + this.api urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) { constructor(private http: HttpClient) {
} }
getFormCompentencyById(evaluationRoundId: string, apsassessy: string, typeId: string): Observable<AppraisalFormModel> { getFormCompentencyById(evaluationRoundId: string, apsassessy: string, typeId: string): Observable<AppraisalCompentencyModel2> {
return this.http.get<AppraisalFormModel>(this.urlApi + "/competency/" + evaluationRoundId + "/" + apsassessy + "/" + typeId) return this.http.get<AppraisalCompentencyModel2>(this.urlApi + "/competency/" + evaluationRoundId + "/" + apsassessy + "/" + typeId)
} }
getCompetencyList(): Observable<AppraisalModel[]> { getCompetencyList(): Observable<AppraisalCompentencyModel[]> {
return this.http.get<AppraisalModel[]>(this.urlApi + "/competency/emp") return this.http.get<AppraisalCompentencyModel[]>(this.urlApi + "/competency/emp")
} }
postCompetency(body: AppraisalFormModel): Observable<AlertModel> { postCompetency(body: AppraisalCompentencyModel2): Observable<AlertModel> {
return this.http.post<AlertModel>(this.urlApi + "/competency", body) return this.http.post<AlertModel>(this.urlApi + "/competency", body)
} }
getBossList(): Observable<AppraisalSubordinateModel[]> {
return this.http.get<AppraisalSubordinateModel[]>(this.urlApi + "/boss/emp")
}
} }
\ No newline at end of file
...@@ -34,6 +34,12 @@ export class EmployeeService { ...@@ -34,6 +34,12 @@ export class EmployeeService {
getById(employeeId: string): Observable<EmployeeModel> { getById(employeeId: string): Observable<EmployeeModel> {
return this.http.get<EmployeeModel>(this.urlApi + "/profile?employeeId=" + employeeId) return this.http.get<EmployeeModel>(this.urlApi + "/profile?employeeId=" + employeeId)
} }
getWorking(): Observable<EmployeeModel> {
return this.http.get<EmployeeModel>(this.urlApi + "/working/mini")
}
getWorkingById(employeeId?: string): Observable<EmployeeModel> {
return this.http.get<EmployeeModel>(this.urlApi + "/working/mini" + (employeeId ? "?employeeId=" + employeeId : ''))
}
getProfile(): Observable<EmployeeModel> { getProfile(): Observable<EmployeeModel> {
return this.http.get<EmployeeModel>(this.urlApi + "/profile") return this.http.get<EmployeeModel>(this.urlApi + "/profile")
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment