Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
myAppraisal
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
angular
myAppraisal
Commits
085f5b9c
Commit
085f5b9c
authored
Feb 28, 2025
by
Nattana Chaiyamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
การประเมินสมรรถนะ
ทะเบียนกำหนดชื่อ ประเภทสมรรถนะ
parent
7fd7a2f9
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
772 additions
and
1348 deletions
+772
-1348
type-registration.component.html
...ration/type-registration/type-registration.component.html
+5
-0
type-registration.component.ts
...stration/type-registration/type-registration.component.ts
+5
-4
evaluation.component.html
...rformance-evaluation/evaluation/evaluation.component.html
+362
-371
evaluation.component.ts
...performance-evaluation/evaluation/evaluation.component.ts
+336
-58
self-evaluation.component.html
...evaluation/self-evaluation/self-evaluation.component.html
+6
-396
self-evaluation.component.ts
...e-evaluation/self-evaluation/self-evaluation.component.ts
+10
-498
supervisor-evaluation.component.html
...upervisor-evaluation/supervisor-evaluation.component.html
+8
-18
supervisor-evaluation.component.ts
.../supervisor-evaluation/supervisor-evaluation.component.ts
+21
-2
appraisal-subordinate.model.ts
src/app/shared/model/appraisal-subordinate.model.ts
+12
-1
competencytype.model.ts
src/app/shared/model/competencytype.model.ts
+3
-0
style.css
src/assets/css/style.css
+4
-0
No files found.
src/app/components/competency-assessment/name-registration/type-registration/type-registration.component.html
View file @
085f5b9c
...
@@ -218,6 +218,11 @@
...
@@ -218,6 +218,11 @@
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ระดับความคาดหวัง *
</label>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
ระดับความคาดหวัง *
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input"
style=
"width: 200px;"
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input"
style=
"width: 200px;"
oninput=
"this.value = this.value.replace(/\D/g, '')"
[(
ngModel
)]="
dataSelect
.
level
"
>
oninput=
"this.value = this.value.replace(/\D/g, '')"
[(
ngModel
)]="
dataSelect
.
level
"
>
<label
for=
"detail_eng"
class=
"ti-form-label mt-1rem"
>
น้ำหนัก
</label>
<input
type=
"text"
id=
"detail_eng"
class=
"ti-form-input"
style=
"width: 200px;"
oninput=
"this.value = this.value.replace(/[^\d.]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/(\..*?)(\d{2})./g, '$1$2');"
onchange=
"this.value = this.value.replace('', '0');this.value = parseFloat(this.value).toFixed(2)"
[(
ngModel
)]="
dataSelect
.
weight
"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<div
class=
"flex justify-end mt-2rem mb-1rem"
>
<button
type=
"button"
<button
type=
"button"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
class=
"hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
...
...
src/app/components/competency-assessment/name-registration/type-registration/type-registration.component.ts
View file @
085f5b9c
...
@@ -10,6 +10,7 @@ export interface DataModel {
...
@@ -10,6 +10,7 @@ export interface DataModel {
name
:
string
name
:
string
code
:
string
code
:
string
level
:
string
level
:
string
weight
:
number
checked
:
boolean
checked
:
boolean
}
}
@
Component
({
@
Component
({
...
@@ -29,7 +30,7 @@ export class TypeRegistration {
...
@@ -29,7 +30,7 @@ export class TypeRegistration {
dataSelectList
:
DataModel
[]
=
[];
dataSelectList
:
DataModel
[]
=
[];
dataLoading
=
false
dataLoading
=
false
dataSelect
:
DataModel
=
{
id
:
""
,
companyId
:
""
,
edesc
:
""
,
name
:
""
,
code
:
""
,
level
:
""
,
checked
:
false
}
dataSelect
:
DataModel
=
{
id
:
""
,
companyId
:
""
,
edesc
:
""
,
name
:
""
,
code
:
""
,
level
:
""
,
weight
:
0.00
,
checked
:
false
}
competoncy_typeList
:
{
check
:
boolean
;
data
:
DataModel
&
{
checked
?:
boolean
}
}[]
=
[]
competoncy_typeList
:
{
check
:
boolean
;
data
:
DataModel
&
{
checked
?:
boolean
}
}[]
=
[]
competoncy_type
:
CompetencytypeModel
=
new
MyCompetencytypeModel
({})
competoncy_type
:
CompetencytypeModel
=
new
MyCompetencytypeModel
({})
modalStatus
:
'add'
|
'edit'
|
'delete'
|
'deleteGroup'
=
'add'
modalStatus
:
'add'
|
'edit'
|
'delete'
|
'deleteGroup'
=
'add'
...
@@ -101,7 +102,7 @@ export class TypeRegistration {
...
@@ -101,7 +102,7 @@ export class TypeRegistration {
this
.
dataLoading
=
true
this
.
dataLoading
=
true
this
.
competencytypeService
.
getList
().
subscribe
({
this
.
competencytypeService
.
getList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
competoncy_typeList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
id
:
x
.
competencyTypeId
,
companyId
:
x
.
companyId
,
edesc
:
x
.
edesc
,
name
:
x
.
tdesc
,
code
:
x
.
shortName
,
level
:
x
.
expectationLevel
,
checked
:
false
}
}))
this
.
competoncy_typeList
=
response
.
map
(
x
=>
({
check
:
false
,
data
:
{
id
:
x
.
competencyTypeId
,
companyId
:
x
.
companyId
,
edesc
:
x
.
edesc
,
name
:
x
.
tdesc
,
code
:
x
.
shortName
,
weight
:
x
.
weight
,
level
:
x
.
expectationLevel
,
checked
:
false
}
}))
this
.
dataLoading
=
false
this
.
dataLoading
=
false
this
.
isDataListCheckedAll
=
false
this
.
isDataListCheckedAll
=
false
this
.
dataListCheckAll
()
this
.
dataListCheckAll
()
...
@@ -153,7 +154,7 @@ export class TypeRegistration {
...
@@ -153,7 +154,7 @@ export class TypeRegistration {
let
body
:
CompetencytypeModel
|
CompetencytypeModel
[]
=
[];
let
body
:
CompetencytypeModel
|
CompetencytypeModel
[]
=
[];
if
(
this
.
dataSelect
.
id
)
{
if
(
this
.
dataSelect
.
id
)
{
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
expectationLevel
:
this
.
dataSelect
.
level
});
body
=
new
MyCompetencytypeModel
({
competencyTypeId
:
this
.
dataSelect
.
id
,
tdesc
:
this
.
dataSelect
.
name
,
edesc
:
this
.
dataSelect
.
edesc
,
shortName
:
this
.
dataSelect
.
code
,
weight
:
+
(
this
.
dataSelect
.
weight
),
expectationLevel
:
this
.
dataSelect
.
level
});
}
else
{
}
else
{
body
=
this
.
competoncy_typeList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyCompetencytypeModel
({
competencyTypeId
:
x
.
data
.
id
,
tdesc
:
x
.
data
.
name
,
edesc
:
x
.
data
.
edesc
,
shortName
:
x
.
data
.
code
,
expectationLevel
:
x
.
data
.
level
}));
body
=
this
.
competoncy_typeList
.
filter
(
x
=>
x
.
check
).
map
(
x
=>
new
MyCompetencytypeModel
({
competencyTypeId
:
x
.
data
.
id
,
tdesc
:
x
.
data
.
name
,
edesc
:
x
.
data
.
edesc
,
shortName
:
x
.
data
.
code
,
expectationLevel
:
x
.
data
.
level
}));
}
}
...
@@ -205,7 +206,7 @@ export class TypeRegistration {
...
@@ -205,7 +206,7 @@ export class TypeRegistration {
if
(
modalStatus
==
'add'
)
{
if
(
modalStatus
==
'add'
)
{
this
.
setData
()
this
.
setData
()
}
else
if
(
modalStatus
==
'edit'
)
{
}
else
if
(
modalStatus
==
'edit'
)
{
this
.
setData
({
id
:
this
.
dataSelect
.
id
,
companyId
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
,
checked
:
this
.
dataSelect
.
checked
})
this
.
setData
({
id
:
this
.
dataSelect
.
id
,
companyId
:
""
,
name
:
""
,
edesc
:
""
,
code
:
""
,
level
:
""
,
weight
:
0.00
,
checked
:
this
.
dataSelect
.
checked
})
}
}
}
}
}
}
...
...
src/app/components/performance-evaluation/evaluation/evaluation.component.html
View file @
085f5b9c
<!-- <app-page-header [pathTitle]="pathTitle"></app-page-header>
<ng-container
*
ngIf=
"appraisalCompentency.data"
>
<div class="bg-card-white">
<div
class=
"pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center"
>
</div>
<div
class=
"flex"
>
<div class="block-main-content">
<button
type=
"button"
class=
"ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
<ng-container *ngTemplateOutlet="selfEvaluationEdit"></ng-container>
(
click
)="
returnPath
()"
>
</div>
<i
class=
"ti ti-chevron-left"
></i>
ย้อนกลับ
<ng-template #selfEvaluationEdit>
</button>
<ng-container *ngIf="appraisalCompentency2.data">
<div
class=
"font-size-18px font-weight-700 align-center text-primary pl-1rem"
>
<div class="pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center">
ประเมินผลประจำปี {{currentDate.getFullYear()}}
<div class="flex">
<button type="button"
class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
(click)="returnPath()">
<i class="ti ti-chevron-left"></i>
ย้อนกลับ
</button>
<div class="font-size-18px font-weight-700 align-center text-primary pl-1rem">
ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div>
</div>
</div>
</div>
</div>
<div class="pb-2rem px-2rem"
>
</div
>
<div class="font-size-18px font-weight-700 text-primary
">
<div
class=
"pb-2rem px-2rem
"
>
แบบประเมินสมรรถนะพนักงาน ประจำปี 2024
<div
class=
"font-size-18px font-weight-700 text-primary"
>
</div>
แบบประเมินสมรรถนะพนักงาน {{currentDate.getFullYear()}}
</div>
</div>
<div class="pb-2rem px-2rem"
>
</div
>
<div class="p-2 grid grid-cols-6 gap-3
">
<div
class=
"pb-2rem px-2rem
"
>
<div class="grid-cols-1
">
<div
class=
"p-2 grid grid-cols-6 gap-3
"
>
<div class="text-gray-400">เครื่องมือประเมิน</div
>
<div
class=
"grid-cols-1"
>
<div class="text-gray-400">O = แบบสังเกต
</div>
<div
class=
"text-gray-400"
>
เครื่องมือประเมิน
</div>
<div class="text-gray-400">P = แบบการปฏิบัติงาน
</div>
<div
class=
"text-gray-400"
>
O = แบบสังเกต
</div>
<div class="text-gray-400">D = การบันทึก/เอกสาร
</div>
<div
class=
"text-gray-400"
>
P = แบบการปฏิบัติงาน
</div>
<div class="text-gray-400">I = การสัมภาษณ์
</div>
<div
class=
"text-gray-400"
>
D = การบันทึก/เอกสาร
</div>
<div class="text-gray-400">T = แบบทดสอบ
</div>
<div
class=
"text-gray-400"
>
I = การสัมภาษณ์
</div>
</div>
<
div
class=
"text-gray-400"
>
T = แบบทดสอบ
<
/div>
<div class="grid-cols-1"
>
</div
>
<div class="text-gray-400">คำชี้แจง</div
>
<div
class=
"grid-cols-1"
>
<div class="text-gray-400">- ใช้วิธีประเมินโดย ผู้บังคับบัญชา = 100 %
</div>
<div
class=
"text-gray-400"
>
คำชี้แจง
</div>
</div>
<
div
class=
"text-gray-400"
>
- ใช้วิธีประเมินโดย ผู้บังคับบัญชา = 100 %
<
/div>
<div class="col-span-3 grid-cols-1"
>
</div
>
<div class="text-gray-400">ระดับความสามารถ (Target Degree)</div
>
<div
class=
"col-span-3 grid-cols-1"
>
<div class="text-gray-400">ระดับ 1 = ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน
</div>
<div
class=
"text-gray-400"
>
ระดับความสามารถ (Target Degree)
</div>
<div class="text-gray-400">ระดับ 2 = มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้
</div>
<div
class=
"text-gray-400"
>
ระดับ 1 = ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน
</div>
<div class="text-gray-400">ระดับ 3 = นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเอง
<div
class=
"text-gray-400"
>
ระดับ 2 = มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้
</div>
แก้ไขปัญหาหน้างานได้</div>
<div
class=
"text-gray-400"
>
ระดับ 3 = นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเอง
<div class="text-gray-400">ระดับ 4 = สอนผู้อื่นได้ มีความคล่องตัว เชื่อมโยง ความรู้ใน
งานได้</div>
แก้ไขปัญหาหน้า
งานได้
</div>
<div class="text-gray-400">ระดับ 5 = มีความชำนาญ เชี่ยวชาญ เป็นที่ยอมรับ ในองค์กร
</div>
<div
class=
"text-gray-400"
>
ระดับ 4 = สอนผู้อื่นได้ มีความคล่องตัว เชื่อมโยง ความรู้ในงานได้
</div>
</div>
<
div
class=
"text-gray-400"
>
ระดับ 5 = มีความชำนาญ เชี่ยวชาญ เป็นที่ยอมรับ ในองค์กร
<
/div>
</div>
</div>
</div>
</div>
<div class="pb-2rem px-2rem">
</div>
<div class="overflow-auto rounded-top-0.65rem">
<div
class=
"pb-2rem px-2rem"
>
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2">
<div
class=
"overflow-auto rounded-top-0.65rem"
>
<thead class="height-50px">
<table
class=
"ti-custom-table ti-custom-table-head ti-custom-table-hover2"
>
<tr class="font-size-12px">
<thead
class=
"height-50px"
>
<ng-container
<tr
class=
"font-size-12px"
>
*ngFor="let item of ['ลำดับที่','รหัสสมรรถนะ','ชื่อสมรรถนะ','Behavior Indicator (BI)','เครื่องมือประเมิน\n(ตัวย่อ)\n(O,P,D,I,T)']">
<ng-container
<th scope="col" rowspan="2"
*
ngFor=
"let item of ['ลำดับที่','รหัสสมรรถนะ','ชื่อสมรรถนะ','Behavior Indicator (BI)','เครื่องมือประเมิน\n(ตัวย่อ)\n(O,P,D,I,T)']"
>
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th
scope=
"col"
rowspan=
"2"
<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"
>
ระดับความสามารถ (Target Degree)
<span
class=
"font-size-12px font-weight-700 "
>
{{ item }}
</span>
</th>
<div
class=
"absolute top-1/2 transform -translate-y-1/2 right-0"
>
</tr>
<i
class=
"ti ti-dots-vertical fs-l"
></i>
<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>
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalCompentency2.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1"
role="status" aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</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>
</ng-container>
</tr>
</thead>
<tbody
*
ngIf=
"appraisalCompentency.loading"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
<div
*
ngFor=
"let item of [1,2,3]"
class=
"ti-spinner w-8 h-8 text-secondary mx-1"
role=
"status"
aria-label=
"loading"
>
<span
class=
"sr-only"
>
Loading...
</span>
</div>
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!appraisalCompentency.loading&&!appraisalCompentencyFilter().length"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!appraisalCompentency.loading&&appraisalCompentencyFilter().length"
>
<ng-container
*
ngFor=
"let item2 of appraisalCompentencyFilter();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>
</tr>
<td
class=
"align-start text-center"
>
</tbody>
<ng-container
*
ngIf=
"f"
>
<tbody *ngIf="!appraisalCompentency2.loading&&!appraisalCompentency2Filter().length">
{{item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId}}
<tr>
</ng-container>
<td class="text-center" colspan="100%">
</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"
[
id
]="'
radio
'+
i
+''+
i2
+''+
i3
"
[
class
.
cursor-pointer
]="
canEdit
"
[
class
.
cursor-not-allowed
]="!
canEdit
"
[
value
]="
value
"
[
disabled
]="!
canEdit
"
[(
ngModel
)]="
bi
.
competencyBehavioral
.
scoreTopicExpectation
"
(
ngModelChange
)="
calnumberCheck
()"
>
</td>
</td>
</tr>
</tr>
</tbody>
</ng-container>
<tbody *ngIf="!appraisalCompentency2.loading&&appraisalCompentency2Filter().length">
</tbody>
<ng-container *ngFor="let item2 of appraisalCompentency2Filter();let i = index">
</table>
<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 class="py-2 grid grid-cols-11"
>
</div
>
<div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div
>
<div
class=
"py-2 grid grid-cols-11"
>
<div class="col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-8"
>
รวมจำนวนเครื่องหมายแต่ละช่อง (1)
</div
>
<div class="col-span-1 text-center
">
<div
class=
"col-span-3 grid grid-cols-5
"
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck5}}</div
>
<div
class=
"col-span-1 text-center"
>
<div class="col-span-1 text-center"
>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck5}}
</div
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck4}}</div
>
<div
class=
"col-span-1 text-center"
>
<div class="col-span-1 text-center"
>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck4}}
</div
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck3}}</div
>
<div
class=
"col-span-1 text-center"
>
<div class="col-span-1 text-center"
>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck3}}
</div
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck2}}</div
>
<div
class=
"col-span-1 text-center"
>
<div class="col-span-1 text-center"
>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck2}}
</div
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck1}}</div
>
<div
class=
"col-span-1 text-center"
>
</div>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck1}}
</div>
</div>
</div>
<div class="py-2 grid grid-cols-11"
>
</div
>
<div class="col-span-8">ตัวคูณคะแนนในแต่ละช่อง (2)</div
>
<div
class=
"py-2 grid grid-cols-11"
>
<div class="col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-8"
>
ตัวคูณคะแนนในแต่ละช่อง (2)
</div
>
<div class="col-span-1 text-center">{{setting.data.settingScore5}}</div
>
<div
class=
"col-span-3 grid grid-cols-5"
>
<div class="col-span-1 text-center">{{setting.data.settingScore4
}}</div>
<div
class=
"col-span-1 text-center"
>
{{setting.data.settingScore5
}}
</div>
<div class="col-span-1 text-center">{{setting.data.settingScore3
}}</div>
<div
class=
"col-span-1 text-center"
>
{{setting.data.settingScore4
}}
</div>
<div class="col-span-1 text-center">{{setting.data.settingScore2
}}</div>
<div
class=
"col-span-1 text-center"
>
{{setting.data.settingScore3
}}
</div>
<div class="col-span-1 text-center">{{setting.data.settingScore1
}}</div>
<div
class=
"col-span-1 text-center"
>
{{setting.data.settingScore2
}}
</div>
</div>
<
div
class=
"col-span-1 text-center"
>
{{setting.data.settingScore1}}
<
/div>
</div>
</div>
<div class="py-2 grid grid-cols-11"
>
</div
>
<div class="col-span-8">ถ่วงน้ำหนักผลรวม 1X2</div
>
<div
class=
"py-2 grid grid-cols-11"
>
<div class="col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-8"
>
ถ่วงน้ำหนักผลรวม 1X2
</div
>
<div class="col-span-1 text-center" *ngFor="let item of [5,4,3,2,1]">{{calWeightScore(item)}}</div
>
<div
class=
"col-span-3 grid grid-cols-5"
>
</div>
<
div
class=
"col-span-1 text-center"
*
ngFor=
"let item of [5,4,3,2,1]"
>
{{calWeightScore(item)}}
<
/div>
</div>
</div>
<div class="py-2 grid grid-cols-11"
>
</div
>
<div class="col-span-8">คะแนนรวมหลังถ่วงน้ำ</div
>
<div
class=
"py-2 grid grid-cols-11"
>
<div class="col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-8"
>
คะแนนรวมหลังถ่วงน้ำ
</div
>
<div class="col-span-5 text-center
">
<div
class=
"col-span-3 grid grid-cols-5
"
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal}}</div
>
<div
class=
"col-span-5 text-center"
>
</div>
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].weightedTotal}}
</div>
</div>
</div>
<div class="py-2 grid grid-cols-11"
>
</div
>
<div class="col-span-8">คะแนนเฉลี่ยคิดเป็น</div
>
<div
class=
"py-2 grid grid-cols-11"
>
<div class="col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-8"
>
คะแนนเฉลี่ยคิดเป็น
</div
>
<div class="col-span-5 text-center
">
<div
class=
"col-span-3 grid grid-cols-5
"
>
{{showNumber(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
<div
class=
"col-span-5 text-center"
>
</div>
{{showNumber(appraisalCompentency.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>
</td>
</th>
<td class="align-start" rowspan="2">
<th
*
ngIf=
"f"
scope=
"col"
rowspan=
"2"
<div *ngFor="let item2 of item.condition">
class=
"relative bg-soft-secondary text-primary !text-center !p-0"
>
<span>{{item2}} </span><br>
<div
class=
"absolute top-1/2 transform -translate-y-1/2 right-0"
>
<i
class=
"ti ti-dots-vertical fs-l"
></i>
</div>
</div>
</td>
</th>
<td class="!p-0"></td>
</ng-container>
<td class="align-start text-center">
</tr>
{{calAverage(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
<tr
class=
"font-size-12px"
>
</td>
<ng-container
*
ngFor=
"let item of ['เกณฑ์การให้คะแนน','เงื่อนไข']"
>
<td class="align-start text-center">
<th
scope=
"col"
{{calGap(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
class=
"relative px-10px py-10px bg-soft-secondary text-primary !text-center"
>
</td>
{{item}}
</tr>
</th>
<tr>
</ng-container>
<td class="align-start !white-space-normal" colspan="4">
</tr>
หมายเหตุ<br>
</thead>
ผลการประเมินอาจมีการเปลี่ยนแปลงเงื่อนไขข้อ 1-3 เนื่องจากมีคะแนนต่ำกว่าเกณฑ์ในบางข้อ
<tbody
*
ngIf=
"checkSheet.length"
>
</td>
<tr
*
ngFor=
"let item of checkSheet;let i = index"
>
</tr>
<td
class=
"align-start"
rowspan=
"2"
>
</tbody>
<div
*
ngFor=
"let item2 of item.score"
>
</table>
<span>
{{item2}}
</span><br>
</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(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
<td
class=
"align-start text-center"
>
{{calGap(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].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"
>
{{appraisalCompentency.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
]="
appraisalCompentency
.
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
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
0
'||!
canEdit
"
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
0
'||!
canEdit
"
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsassessyComment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsassessyDate)}}
</span>
</div>
</div>
</div>
</div>
<div class="py-1rem px-2rem">
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency.data.apsapprove1.employeeId"
>
<div class="py-2 grid grid-cols-7 gap-3">
<div
class=
"col-span-1"
>
<div class="col-span-1">ผู้ถูกประเมิน</div>
{{appraisalCompentency.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
<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="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove1.employeeId">
<div
class=
"col-span-1"
>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove1.thFullName}}
</div>
{{appraisalCompentency2.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
<div
class=
"col-span-1"
>
</div>
<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 class="col-span-1">
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
{{appraisalCompentency2.data.apsapprove1.thFullName}}</div>
[
checked
]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove1Status=
='2'"
>
<div class="col-span-1">
<label
for=
"hs-basic-usage1"
class=
"sr-only"
>
ยืนยันผล
</label>
<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].apsapprove1Status=='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!='1'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='1'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
</span>
</div>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove2.employeeId">
<div
class=
"col-span-2"
>
<div class="col-span-1">
<textarea
type=
"text"
rows=
"2"
class=
"ti-form-input mb-2"
placeholder=
"ใส่ Comment ที่นี่"
{{appraisalCompentency2.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
[
class
.!
bg-input-readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
1
'||!
canEdit
"
</div>
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
1
'||!
canEdit
"
<div class="col-span-1">
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove1Comment
"
></textarea>
{{appraisalCompentency2.data.apsapprove2.thFullName}}</div>
<span
class=
"pt-2"
>
<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
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
</span>
[checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Status=='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!='2'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='2'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
</span>
</div>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove3.employeeId">
</div>
<div class="col-span-1">
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency.data.apsapprove2.employeeId"
>
{{appraisalCompentency2.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
<div
class=
"col-span-1"
>
</div>
{{appraisalCompentency.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
<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]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Status=='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!='3'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='3'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
</span>
</div>
</div>
</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">
{{appraisalCompentency.data.apsapprove2.thFullName}}
</div>
{{appraisalCompentency2.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
<div
class=
"col-span-1"
>
</div>
<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 class="col-span-1">
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
{{appraisalCompentency2.data.apsapprove4.thFullName}}</div>
[
checked
]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove2Status=
='2'"
>
<div class="col-span-1">
<label
for=
"hs-basic-usage1"
class=
"sr-only"
>
ยืนยันผล
</label>
<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].apsapprove4Status=='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!='4'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='4'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
</span>
</div>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency2.data.apsapprove5.employeeId">
<div
class=
"col-span-2"
>
<div class="col-span-1">
<textarea
type=
"text"
rows=
"2"
class=
"ti-form-input mb-2"
placeholder=
"ใส่ Comment ที่นี่"
ผู้อนุมัติ
[
class
.!
bg-input-readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
2
'||!
canEdit
"
</div>
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
2
'||!
canEdit
"
<div class="col-span-1">
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove2Comment
"
></textarea>
{{appraisalCompentency2.data.apsapprove5.thFullName}}</div>
<span
class=
"pt-2"
>
<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
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
</span>
[checked]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Status=='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!='5'||!employee.evaluate"
[readonly]="!appraisalCompentency2.data||appraisalCompentency2.data.currentStep!='5'||!employee.evaluate"
[(ngModel)]="appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
</span>
</div>
</div>
</div>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency.data.apsapprove3.employeeId"
>
<div class="flex justify-center mb-1rem pb-2rem" *ngIf="employee.evaluate">
<div
class=
"col-span-1"
>
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="saveDraft()">
{{appraisalCompentency.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
บันทึกร่าง
</div>
</button>
<div
class=
"col-span-1"
>
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save()">
{{appraisalCompentency.data.apsapprove3.thFullName}}
</div>
บันทึกข้อมูล
<div
class=
"col-span-1"
>
</button>
<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
]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove3Status=
='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
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
3
'||!
canEdit
"
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
3
'||!
canEdit
"
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove3Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
</span>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency.data.apsapprove4.employeeId"
>
<div
class=
"col-span-1"
>
{{appraisalCompentency.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div
class=
"col-span-1"
>
{{appraisalCompentency.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
]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove4Status=
='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
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
4
'||!
canEdit
"
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
4
'||!
canEdit
"
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove4Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
</span>
</div>
</div>
</div>
</ng-container>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency.data.apsapprove5.employeeId"
>
</ng-template> -->
<div
class=
"col-span-1"
>
\ No newline at end of file
ผู้อนุมัติ
</div>
<div
class=
"col-span-1"
>
{{appraisalCompentency.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
]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove5Status=
='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
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
5
'||!
canEdit
"
[
readonly
]="!
appraisalCompentency
.
data
||
appraisalCompentency
.
data
.
currentStep
!='
5
'||!
canEdit
"
[(
ngModel
)]="
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove5Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
</span>
</div>
</div>
</div>
<div
class=
"flex justify-center mb-1rem pb-2rem"
*
ngIf=
"canEdit"
>
<button
type=
"submit"
class=
"ti-btn ti-btn-success mx-2rem"
(
click
)="
save
('
draft
')"
>
บันทึกร่าง
</button>
<button
type=
"submit"
class=
"ti-btn ti-btn-success mx-2rem"
(
click
)="
save
()"
>
บันทึกข้อมูล
</button>
</div>
</ng-container>
\ No newline at end of file
src/app/components/performance-evaluation/evaluation/evaluation.component.ts
View file @
085f5b9c
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
OnInit
,
Output
,
TemplateRef
,
ViewChild
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
Input
,
OnInit
}
from
'@angular/core'
;
import
{
AppraisalCompentencyModel2
}
from
'src/app/shared/model/appraisal-competency.model'
;
import
{
AppraisalCompentencyModel2
}
from
'src/app/shared/model/appraisal-competency.model'
;
import
{
SettingAssessmentModel
,
MySettingAssessmentModel
}
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
{
SettingAssessmentService
}
from
'src/app/shared/services/setting-assessment.service'
;
import
{
SettingAssessmentService
}
from
'src/app/shared/services/setting-assessment.service'
;
...
@@ -10,11 +11,24 @@ import Swal from 'sweetalert2';
...
@@ -10,11 +11,24 @@ import Swal from 'sweetalert2';
styleUrls
:
[
'./evaluation.component.scss'
]
styleUrls
:
[
'./evaluation.component.scss'
]
})
})
export
class
EvaluationComponent
implements
OnInit
{
export
class
EvaluationComponent
implements
OnInit
{
appraisalCompentency2
:
{
loading
:
boolean
,
data
?:
AppraisalCompentencyModel2
}
=
{
loading
:
false
,
data
:
undefined
}
@
Input
()
evaluationRoundId
=
""
@
Input
()
evaluateeId
=
""
@
Input
()
evaluaterId
=
""
@
Input
()
competencyTypeId
=
""
canEdit
=
false
hoveredCode
:
string
|
null
=
null
;
currentDate
=
new
Date
()
evaluationRoundId
=
""
appraisalCompentency
:
{
loading
:
boolean
,
data
?:
AppraisalCompentencyModel2
}
=
{
loading
:
false
,
data
:
undefined
}
employeeId
=
""
setting
:
{
loading
:
boolean
,
data
:
SettingAssessmentModel
}
=
{
loading
:
false
,
data
:
new
MySettingAssessmentModel
()
}
typeId
=
""
checkSheet
:
{
score
:
string
[],
condition
:
string
[]
}[]
=
[{
score
:
[
"หากได้คะแนน 90 - 100% ถือว่า Gap +1"
,
"หากได้คะแนน 80 - 89% ถือว่า ไม่มี Gap"
,
"หากได้คะแนน 60 - 79% ถือว่า Gap - 1"
,
"หากได้คะแนน 40 - 59% ถือว่า Gap -2"
,
"หากได้คะแนน 0 - 39% ถือว่า Gap - 3"
],
condition
:
[
"1.หากได้คะแนนสูงกว่า 80% แต่มี 3 2 หรือ 1 ด้วย ถือว่า Gap -1"
,
"2.หากได้คะแนนต่ำกว่า 80% แต่มี 4 และ 5 ให้คิด Gap ตาม %"
,
"3.คะแนนต่ำกว่า 80% แต่มี 2 และ 1 ให้คิด Gap ตาม %"
],
}]
constructor
(
private
appraisalService
:
AppraisalService
,
constructor
(
private
appraisalService
:
AppraisalService
,
private
employeeService
:
EmployeeService
,
private
employeeService
:
EmployeeService
,
private
cdr
:
ChangeDetectorRef
,
private
cdr
:
ChangeDetectorRef
,
...
@@ -22,62 +36,326 @@ export class EvaluationComponent implements OnInit {
...
@@ -22,62 +36,326 @@ export class EvaluationComponent implements OnInit {
)
{
)
{
}
}
ngOnInit
():
void
{
ngOnInit
():
void
{
// this.getEvaluatee()
this
.
getAppraisalCompentencyForm
()
// this.getAppraisalCompentencyList()
this
.
getSettingList
()
// this.getSettingList()
}
getSettingList
()
{
this
.
setting
.
loading
=
true
this
.
settingAssessmentService
.
get
().
subscribe
({
next
:
response
=>
{
this
.
setting
.
data
=
new
MySettingAssessmentModel
(
response
)
this
.
setting
.
loading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
setting
.
loading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
getAppraisalCompentencyForm
()
{
this
.
appraisalCompentency
.
loading
=
true
this
.
appraisalService
.
getFormCompentencyById
(
this
.
evaluationRoundId
,
this
.
evaluateeId
,
this
.
competencyTypeId
).
subscribe
({
next
:
response
=>
{
this
.
appraisalCompentency
.
data
=
JSON
.
parse
(
JSON
.
stringify
(
response
))
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
switch
(
this
.
appraisalCompentency
.
data
?.
currentStep
)
{
case
(
"0"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsassessyDate
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsassessy
.
employeeId
break
}
case
(
"1"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove1Date
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsapprove1
.
employeeId
break
}
case
(
"2"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove2Date
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsapprove2
.
employeeId
break
}
case
(
"3"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove3Date
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsapprove3
.
employeeId
break
}
case
(
"4"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove4Date
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsapprove4
.
employeeId
break
}
case
(
"5"
):
{
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove5Date
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
canEdit
=
this
.
evaluaterId
==
this
.
appraisalCompentency
.
data
.
apsapprove5
.
employeeId
break
}
default
:
{
return
}
}
}
this
.
calnumberCheck
()
this
.
appraisalCompentency
.
loading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
appraisalCompentency
.
loading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
appraisalCompentencyFilter
()
{
return
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
masfromEvaluationAssessment2List
||
[]
}
}
getAppraisalCompentencyForm
(
typeId
:
string
)
{
calnumberCheck
()
{
// this.appraisalCompentency2.loading = true
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
// const evaluationRoundId = this.appraisalCompentency.select?.masfromEvaluationRound.evaluationRoundId || "test1"
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck1
=
this
.
appraisalCompentency
.
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
)
// if (evaluationRoundId || this.byBoss) {
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck2
=
this
.
appraisalCompentency
.
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.appraisalService.getFormCompentencyById(this.evaluationRoundId, employeeId, typeId).subscribe({
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck3
=
this
.
appraisalCompentency
.
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
)
// next: response => {
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck4
=
this
.
appraisalCompentency
.
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.appraisalCompentency2.data = JSON.parse(JSON.stringify(response))
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck5
=
this
.
appraisalCompentency
.
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
)
// if (this.appraisalCompentency2.data?.masfromEvaluationAssessment1lList[0]) {
this
.
calWeightTotal
()
// switch (this.appraisalCompentency2.data?.currentStep) {
}
// case ("0"): {
this
.
cdr
.
detectChanges
()
// this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
// this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsassessy.employeeId
calWeightScore
(
numberCheck
:
number
)
{
// break
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
// }
switch
(
numberCheck
)
{
// case ("1"): {
case
(
1
):
{
// this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Date = this.currentDate.toISOString().split('T')[0];
return
+
(
this
.
setting
.
data
.
settingScore1
)
*
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck1
// this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove1.employeeId
}
// break
case
(
2
):
{
// }
return
+
(
this
.
setting
.
data
.
settingScore2
)
*
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck2
// case ("2"): {
}
// this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Date = this.currentDate.toISOString().split('T')[0];
case
(
3
):
{
// this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove2.employeeId
return
+
(
this
.
setting
.
data
.
settingScore3
)
*
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck3
// break
}
// }
case
(
4
):
{
// case ("3"): {
return
+
(
this
.
setting
.
data
.
settingScore4
)
*
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck4
// this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
// this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove3.employeeId
case
(
5
):
{
// break
return
+
(
this
.
setting
.
data
.
settingScore5
)
*
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck5
// }
}
// case ("4"): {
default
:
{
return
}
// 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
return
// }
}
// case ("5"): {
calWeightTotal
()
{
// this.appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Date = this.currentDate.toISOString().split('T')[0];
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
// this.employee.evaluate = this.employee.data.employeeId == this.appraisalCompentency2.data.apsapprove5.employeeId
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
weightedTotal
=
0
// break
this
.
appraisalCompentency
.
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
.
cdr
.
detectChanges
()
// default: { return }
this
.
calAverageScore
()
// }
}
// }
}
// this.calnumberCheck()
calAverageScore
()
{
// this.appraisalCompentency2.loading = false
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
// this.cdr.detectChanges()
const
total
=
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
masfromEvaluationAssessment2List
.
map
((
x
:
any
)
=>
x
.
groupAssessment1
.
competencyIndicatorsCourses1Mini
.
behavioralIndicatorsList
.
length
).
reduce
((
acc
:
any
,
num
:
any
)
=>
acc
+
num
,
0
)
*
5
// }, error: error => {
if
(
total
)
{
// this.appraisalCompentency2.loading = false
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
averageScore
=
0
// this.cdr.detectChanges()
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
averageScore
=
(
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
].
weightedTotal
/
total
)
*
100
// }
this
.
cdr
.
detectChanges
()
// })
}
}
}
calAverage
(
score
:
number
|
string
)
{
const
roundedScore
=
this
.
showNumber
(
score
)
%
1
<=
0.5
?
Math
.
floor
(
this
.
showNumber
(
score
))
:
Math
.
round
(
this
.
showNumber
(
score
));
if
(
roundedScore
>=
90
&&
roundedScore
<=
100
)
{
return
"5"
;
}
else
if
(
roundedScore
>=
80
&&
roundedScore
<=
89
)
{
return
"4"
;
}
else
if
(
roundedScore
>=
60
&&
roundedScore
<=
79
)
{
return
"3"
;
}
else
if
(
roundedScore
>=
40
&&
roundedScore
<=
59
)
{
return
"2"
;
}
else
{
return
"1"
;
}
}
calGap
(
score
:
number
|
string
)
{
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
const
roundedScore
=
this
.
showNumber
(
score
)
%
1
<=
0.5
?
Math
.
floor
(
this
.
showNumber
(
score
))
:
Math
.
round
(
this
.
showNumber
(
score
));
if
(
roundedScore
>=
90
&&
roundedScore
<=
100
)
{
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck1
||
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck2
||
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck3
)
{
return
"-1"
;
}
return
"+1"
;
}
else
if
(
roundedScore
>=
80
&&
roundedScore
<=
89
)
{
if
(
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck1
||
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck2
||
this
.
appraisalCompentency
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
numberCheck3
)
{
return
"-1"
;
}
return
"0"
;
}
else
if
(
roundedScore
>=
60
&&
roundedScore
<=
79
)
{
return
"-1"
;
}
else
if
(
roundedScore
>=
40
&&
roundedScore
<=
59
)
{
return
"-2"
;
}
else
{
return
"-3"
;
}
}
return
}
convertDate
(
dateInput
?:
string
|
Date
):
string
{
let
date
=
new
Date
()
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'
})
||
''
}
showNumber
(
text
:
number
|
string
)
{
const
num
=
Number
(
text
);
return
isNaN
(
num
)
?
0
:
+
num
.
toFixed
(
2
);
}
returnPath
()
{
// if (this.byBoss) {
// this.returnPageEvalution()
// } else {
// this.currentTemplate = this.selfEvaluation;
// this.pathTitle = ['การประเมินผล', 'ประเมินตนเอง']
// }
// }
}
}
save
(
status
?:
string
)
{
Swal
.
fire
({
iconHtml
:
`
<div class="flex items-center justify-center rounded-full !h-80px !w-80px" style="background-color: #E8F8EE;">
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="39" height="39" fill="#D2D2D2"/>
<g id="Component">
<g id="alert cart">
<g id="mdi:file-export">
<circle cx="22.5" cy="19.5" r="33.5" fill="#E8F8EE"/>
<path d="M9.75 3.25C8.88805 3.25 8.0614 3.59241 7.4519 4.2019C6.84241 4.8114 6.5 5.63805 6.5 6.5V32.5C6.5 33.362 6.84241 34.1886 7.4519 34.7981C8.0614 35.4076 8.88805 35.75 9.75 35.75H29.25C30.112 35.75 30.9386 35.4076 31.5481 34.7981C32.1576 34.1886 32.5 33.362 32.5 32.5V13L22.75 3.25M21.125 5.6875L30.0625 14.625H21.125M14.5113 19.8575H26V31.3463L22.555 27.9013L17.9563 32.5L13.3575 27.9013L17.9563 23.3188"
fill="#1DBE5A"/>
</g>
</g>
</g>
</svg>
</div>
`
,
title
:
status
==
'draft'
?
'บันทึกแบบร่าง'
:
'บันทึกข้อมูล'
,
text
:
status
==
'draft'
?
'คุณต้องการบันทึกแบบร่างของการประเมินนี้ใช่หรือไม่'
:
'คุณต้องการบันทึกข้อมูลการประเมินนี้ใช่หรือไม่'
,
showCancelButton
:
true
,
confirmButtonText
:
'ยืนยันการบันทึก'
,
cancelButtonText
:
'ย้อนกลับ'
,
customClass
:
{
title
:
'!swal2-title-mt-20px'
,
actions
:
'!swal2-actions-mt-20px'
,
icon
:
'!swal2-icon-no-border'
,
confirmButton
:
'!swal2-button-bg-green'
,
cancelButton
:
'!swal2-button-bg-gray'
,
},
}).
then
((
result
)
=>
{
if
(
result
.
isConfirmed
&&
this
.
appraisalCompentency
)
{
this
.
saveApi
(
status
)
}
else
if
(
result
.
dismiss
===
Swal
.
DismissReason
.
cancel
)
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
})
}
})
}
saveApi
(
status
?:
string
)
{
let
body
=
this
.
appraisalCompentency
.
data
switch
(
this
.
appraisalCompentency
.
data
?.
currentStep
)
{
case
(
"0"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsassessyStatus
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
case
(
"1"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsapprove1Status
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
case
(
"2"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsapprove2Status
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
case
(
"3"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsapprove3Status
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
case
(
"4"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsapprove4Status
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
case
(
"5"
):
{
body
=
{
...
this
.
appraisalCompentency
.
data
,
masfromEvaluationAssessment1lList
:
[{
...
this
.
appraisalCompentency
.
data
.
masfromEvaluationAssessment1lList
[
0
],
apsapprove5Status
:
status
==
'draft'
?
'1'
:
'2'
}]
}
break
}
default
:
{
return
}
}
this
.
appraisalService
.
postCompetency
(
body
).
subscribe
({
next
:
response
=>
{
if
(
response
.
success
)
{
Swal
.
fire
({
title
:
'บันทึกสำเร็จ!'
,
text
:
'การประเมินของคุณถูกบันทึกแล้ว'
,
icon
:
'success'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-green'
,
}
});
this
.
getAppraisalCompentencyForm
()
}
else
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
},
error
:
error
=>
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
})
}
}
}
src/app/components/performance-evaluation/self-evaluation/self-evaluation.component.html
View file @
085f5b9c
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
</div>
</div>
<ng-template
#
selfEvaluation
>
<ng-template
#
selfEvaluation
>
<div
class=
"font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem"
*
ngIf=
"!byBoss"
>
<div
class=
"font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem"
>
ประเมินผลประจำปี {{currentDate.getFullYear()}}
ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div>
</div>
<div
class=
"pt-0.75rem"
>
<div
class=
"pt-0.75rem"
>
...
@@ -117,7 +117,7 @@
...
@@ -117,7 +117,7 @@
{{masfromEvaluationAssessment1.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"
(
click
)="
getAppraisal
CompentencyForm
(
masfromEvaluationAssessment1
.
competencyType
.
competencyTypeId
);
currentTemplate =
selfEvaluationEdit
;
<span
class=
"rounded-md bg-success text-white px-3 py-1 cursor-pointer"
(
click
)="
select
CompentencyForm
(
masfromEvaluationAssessment1
.
competencyType
.
competencyTypeId
);
currentTemplate =
selfEvaluationEdit
;
pathTitle =
['การประเมินผล',
'ประเมินตนเอง','ประเมินผล']"
>
pathTitle =
['การประเมินผล',
'ประเมินตนเอง','ประเมินผล']"
>
ประเมิน
ประเมิน
</span>
</span>
...
@@ -201,398 +201,7 @@
...
@@ -201,398 +201,7 @@
<ng-template
#
selfEvaluationEdit
>
<ng-template
#
selfEvaluationEdit
>
<ng-container
*
ngIf=
"appraisalCompentency2.data"
>
<app-evaluation
[
evaluationRoundId
]="
appraisalCompentency
.
select
?.
masfromEvaluationRound
?.
evaluationRoundId
||
''"
<div
class=
"pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center"
>
[
evaluaterId
]="
evaluatee
.
data
.
employeeId
"
[
evaluateeId
]="
evaluatee
.
data
.
employeeId
"
<div
class=
"flex"
>
[
competencyTypeId
]="
competencyTypeId
"
></app-evaluation>
<button
type=
"button"
class=
"ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
(
click
)="
returnPath
()"
>
<i
class=
"ti ti-chevron-left"
></i>
ย้อนกลับ
</button>
<div
class=
"font-size-18px font-weight-700 align-center text-primary pl-1rem"
>
ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div>
</div>
</div>
<div
class=
"pb-2rem px-2rem"
>
<div
class=
"font-size-18px font-weight-700 text-primary"
>
แบบประเมินสมรรถนะพนักงาน ประจำปี 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
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
class=
"pb-2rem px-2rem"
>
<div
class=
"overflow-auto rounded-top-0.65rem"
>
<table
class=
"ti-custom-table ti-custom-table-head ti-custom-table-hover2"
>
<thead
class=
"height-50px"
>
<tr
class=
"font-size-12px"
>
<ng-container
*
ngFor=
"let item of ['ลำดับที่','รหัสสมรรถนะ','ชื่อสมรรถนะ','Behavior Indicator (BI)','เครื่องมือประเมิน\n(ตัวย่อ)\n(O,P,D,I,T)']"
>
<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"
>
ระดับความสามารถ (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>
</ng-container>
</tr>
</thead>
<tbody
*
ngIf=
"appraisalCompentency2.loading"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
<div
*
ngFor=
"let item of [1,2,3]"
class=
"ti-spinner w-8 h-8 text-secondary mx-1"
role=
"status"
aria-label=
"loading"
>
<span
class=
"sr-only"
>
Loading...
</span>
</div>
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!appraisalCompentency2.loading&&!appraisalCompentency2Filter().length"
>
<tr>
<td
class=
"text-center"
colspan=
"100%"
>
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody
*
ngIf=
"!appraisalCompentency2.loading&&appraisalCompentency2Filter().length"
>
<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
class=
"pb-1rem px-2rem"
>
<div
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
ระดับความสามารถ (Target Degree)
</div>
<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>
</div>
<div
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
รวมจำนวนเครื่องหมายแต่ละช่อง (1)
</div>
<div
class=
"col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-1 text-center"
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck5}}
</div>
<div
class=
"col-span-1 text-center"
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].numberCheck4}}
</div>
<div
class=
"col-span-1 text-center"
>
{{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
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
ตัวคูณคะแนนในแต่ละช่อง (2)
</div>
<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.settingScore4}}
</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.settingScore1}}
</div>
</div>
</div>
<div
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
ถ่วงน้ำหนักผลรวม 1X2
</div>
<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>
</div>
<div
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
คะแนนรวมหลังถ่วงน้ำ
</div>
<div
class=
"col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-5 text-center"
>
{{appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].weightedTotal}}
</div>
</div>
</div>
<div
class=
"py-2 grid grid-cols-11"
>
<div
class=
"col-span-8"
>
คะแนนเฉลี่ยคิดเป็น
</div>
<div
class=
"col-span-3 grid grid-cols-5"
>
<div
class=
"col-span-5 text-center"
>
{{showNumber(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
</div>
</div>
</div>
</div>
<div
class=
"pb-2rem px-2rem"
>
<div
class=
"overflow-auto rounded-top-0.65rem"
>
<table
class=
"ti-custom-table ti-custom-table-head ti-custom-table-hover"
>
<thead
class=
"height-50px"
>
<tr
class=
"font-size-12px"
>
<ng-container
*
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
'"
class=
"relative px-10px py-10px bg-soft-secondary text-primary !text-center"
>
<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"
>
<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>
</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(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
<td
class=
"align-start text-center"
>
{{calGap(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].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"
>
{{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
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency2.data.apsapprove1.employeeId"
>
<div
class=
"col-span-1"
>
{{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
]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove1Status=
='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
!='
1
'||!
employee
.
evaluate
"
[
readonly
]="!
appraisalCompentency2
.
data
||
appraisalCompentency2
.
data
.
currentStep
!='
1
'||!
employee
.
evaluate
"
[(
ngModel
)]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove1Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
</span>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency2.data.apsapprove2.employeeId"
>
<div
class=
"col-span-1"
>
{{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
]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove2Status=
='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
!='
2
'||!
employee
.
evaluate
"
[
readonly
]="!
appraisalCompentency2
.
data
||
appraisalCompentency2
.
data
.
currentStep
!='
2
'||!
employee
.
evaluate
"
[(
ngModel
)]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove2Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
</span>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency2.data.apsapprove3.employeeId"
>
<div
class=
"col-span-1"
>
{{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
]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove3Status=
='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
!='
3
'||!
employee
.
evaluate
"
[
readonly
]="!
appraisalCompentency2
.
data
||
appraisalCompentency2
.
data
.
currentStep
!='
3
'||!
employee
.
evaluate
"
[(
ngModel
)]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove3Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
</span>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency2.data.apsapprove4.employeeId"
>
<div
class=
"col-span-1"
>
{{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
]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove4Status=
='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
!='
4
'||!
employee
.
evaluate
"
[
readonly
]="!
appraisalCompentency2
.
data
||
appraisalCompentency2
.
data
.
currentStep
!='
4
'||!
employee
.
evaluate
"
[(
ngModel
)]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove4Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
</span>
</div>
</div>
<div
class=
"py-2 grid grid-cols-7 gap-3"
*
ngIf=
"appraisalCompentency2.data.apsapprove5.employeeId"
>
<div
class=
"col-span-1"
>
ผู้อนุมัติ
</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
]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove5Status=
='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
!='
5
'||!
employee
.
evaluate
"
[
readonly
]="!
appraisalCompentency2
.
data
||
appraisalCompentency2
.
data
.
currentStep
!='
5
'||!
employee
.
evaluate
"
[(
ngModel
)]="
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsapprove5Comment
"
></textarea>
<span
class=
"pt-2"
>
วันที่ :
{{convertDate(appraisalCompentency2.data.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
</span>
</div>
</div>
</div>
<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>
<button
type=
"submit"
class=
"ti-btn ti-btn-success mx-2rem"
(
click
)="
save
()"
>
บันทึกข้อมูล
</button>
</div>
</ng-container>
</ng-template>
</ng-template>
\ No newline at end of file
src/app/components/performance-evaluation/self-evaluation/self-evaluation.component.ts
View file @
085f5b9c
import
{
ChangeDetectorRef
,
Component
,
EventEmitter
,
Input
,
OnInit
,
Output
,
SimpleChanges
,
TemplateRef
,
ViewChild
}
from
'@angular/core'
;
import
{
ChangeDetectorRef
,
Component
,
OnInit
,
TemplateRef
,
ViewChild
}
from
'@angular/core'
;
import
{
AppraisalCompentencyModel
,
AppraisalCompentencyModel2
}
from
'src/app/shared/model/appraisal-competency.model'
;
import
{
AppraisalCompentencyModel
}
from
'src/app/shared/model/appraisal-competency.model'
;
import
{
EmployeeModel
,
MyEmployeeModel
}
from
'src/app/shared/model/employee.model'
;
import
{
EmployeeModel
,
MyEmployeeModel
}
from
'src/app/shared/model/employee.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
{
SettingAssessmentService
}
from
'src/app/shared/services/setting-assessment.service'
;
import
Swal
from
'sweetalert2'
;
export
interface
BiModel
{
export
interface
BiModel
{
name
:
string
,
name
:
string
,
tools
:
string
[],
tools
:
string
[],
...
@@ -19,11 +15,7 @@ export interface BiModel {
...
@@ -19,11 +15,7 @@ export interface BiModel {
styleUrls
:
[
'./self-evaluation.component.scss'
]
styleUrls
:
[
'./self-evaluation.component.scss'
]
})
})
export
class
SelfEvaluationComponent
implements
OnInit
{
export
class
SelfEvaluationComponent
implements
OnInit
{
@
Input
()
pathTitle
=
[
'การประเมินผล'
,
'ประเมินตนเอง'
]
pathTitle
=
[
'การประเมินผล'
,
'ประเมินตนเอง'
]
@
Input
()
employeeId
?:
string
@
Input
()
byBoss
:
boolean
=
false
@
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
[],
...
@@ -36,57 +28,24 @@ export class SelfEvaluationComponent implements OnInit {
...
@@ -36,57 +28,24 @@ 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
?:
AppraisalCompentencyModel
,
dataList
:
AppraisalCompentencyModel
[]
}
=
{
loading
:
false
,
select
:
undefined
,
dataList
:
[]
}
appraisalCompentency
:
{
loading
:
boolean
,
select
?:
AppraisalCompentencyModel
,
dataList
:
AppraisalCompentencyModel
[]
}
=
{
loading
:
false
,
select
:
undefined
,
dataList
:
[]
}
appraisalCompentency2
:
{
loading
:
boolean
,
data
?:
AppraisalCompentencyModel2
}
=
{
loading
:
false
,
data
:
undefined
}
appraisalPms
:
{
loading
:
boolean
,
select
:
undefined
,
dataList
:
{
check
:
boolean
,
data
:
undefined
}[]
}
=
{
loading
:
false
,
select
:
undefined
,
dataList
:
[]
}
appraisalPms
:
{
loading
:
boolean
,
select
:
undefined
,
dataList
:
{
check
:
boolean
,
data
:
undefined
}[]
}
=
{
loading
:
false
,
select
:
undefined
,
dataList
:
[]
}
employee
:
{
loading
:
boolean
,
data
:
EmployeeModel
,
evaluate
:
boolean
}
=
{
loading
:
false
,
data
:
new
MyEmployeeModel
(),
evaluate
:
false
}
evaluatee
:
{
loading
:
boolean
,
data
:
EmployeeModel
}
=
{
loading
:
false
,
data
:
new
MyEmployeeModel
()
}
evaluatee
:
{
loading
:
boolean
,
data
:
EmployeeModel
}
=
{
loading
:
false
,
data
:
new
MyEmployeeModel
()
}
setting
:
{
loading
:
boolean
,
data
:
SettingAssessmentModel
}
=
{
loading
:
false
,
data
:
new
MySettingAssessmentModel
()
}
currentDate
=
new
Date
()
currentDate
=
new
Date
()
competencyTypeId
=
""
constructor
(
private
appraisalService
:
AppraisalService
,
constructor
(
private
appraisalService
:
AppraisalService
,
private
employeeService
:
EmployeeService
,
private
employeeService
:
EmployeeService
,
private
cdr
:
ChangeDetectorRef
,
private
cdr
:
ChangeDetectorRef
private
settingAssessmentService
:
SettingAssessmentService
)
{
}
)
{
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
currentTemplate
=
this
.
selfEvaluation
this
.
currentTemplate
=
this
.
selfEvaluation
this
.
getWorking
()
this
.
getEvaluatee
()
this
.
getEvaluatee
()
this
.
getAppraisalCompentencyList
()
this
.
getAppraisalCompentencyList
()
this
.
getSettingList
()
}
returnPageTitle
()
{
this
.
sendPathTitle
.
emit
([
'การประเมินผล'
,
'ประเมินโดยหัวหน้า'
,
'ประเมินลูกน้อง'
])
}
returnPageEvalution
()
{
this
.
sendPathTitle
.
emit
([
'การประเมินผล'
,
'ประเมินโดยหัวหน้า'
])
this
.
sendPageEvalution
.
emit
(
""
)
}
getSettingList
()
{
this
.
setting
.
loading
=
true
this
.
settingAssessmentService
.
get
().
subscribe
({
next
:
response
=>
{
this
.
setting
.
data
=
new
MySettingAssessmentModel
(
response
)
this
.
setting
.
loading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
setting
.
loading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
}
getEvaluatee
()
{
getEvaluatee
()
{
this
.
evaluatee
.
loading
=
true
this
.
evaluatee
.
loading
=
true
this
.
employeeService
.
getWorking
ById
(
this
.
employeeId
).
subscribe
({
this
.
employeeService
.
getWorking
(
).
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
evaluatee
.
data
=
new
MyEmployeeModel
(
response
)
this
.
evaluatee
.
data
=
new
MyEmployeeModel
(
response
)
if
(
this
.
byBoss
)
{
this
.
currentTemplate
=
this
.
selfEvaluationEdit
this
.
returnPageTitle
()
this
.
getAppraisalCompentencyForm
(
"02"
)
}
this
.
evaluatee
.
loading
=
false
this
.
evaluatee
.
loading
=
false
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
},
error
:
error
=>
{
...
@@ -95,22 +54,9 @@ export class SelfEvaluationComponent implements OnInit {
...
@@ -95,22 +54,9 @@ export class SelfEvaluationComponent implements OnInit {
}
}
})
})
}
}
getWorking
()
{
this
.
employee
.
loading
=
true
this
.
employeeService
.
getWorking
().
subscribe
({
next
:
response
=>
{
this
.
employee
.
data
=
new
MyEmployeeModel
(
response
)
this
.
employee
.
loading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
employee
.
loading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
getAppraisalCompentencyList
()
{
getAppraisalCompentencyList
()
{
this
.
appraisalCompentency
.
loading
=
true
this
.
appraisalCompentency
.
loading
=
true
this
.
appraisalService
.
getCompetencyList
(
this
.
employeeId
).
subscribe
({
this
.
appraisalService
.
getCompetencyList
().
subscribe
({
next
:
response
=>
{
next
:
response
=>
{
this
.
appraisalCompentency
.
dataList
=
JSON
.
parse
(
JSON
.
stringify
(
response
))
this
.
appraisalCompentency
.
dataList
=
JSON
.
parse
(
JSON
.
stringify
(
response
))
if
(
this
.
appraisalCompentency
.
dataList
.
length
)
{
if
(
this
.
appraisalCompentency
.
dataList
.
length
)
{
...
@@ -130,61 +76,8 @@ export class SelfEvaluationComponent implements OnInit {
...
@@ -130,61 +76,8 @@ export class SelfEvaluationComponent implements OnInit {
selectAppraisalCompentency
(
data
:
AppraisalCompentencyModel
)
{
selectAppraisalCompentency
(
data
:
AppraisalCompentencyModel
)
{
this
.
appraisalCompentency
.
select
=
JSON
.
parse
(
JSON
.
stringify
(
data
))
this
.
appraisalCompentency
.
select
=
JSON
.
parse
(
JSON
.
stringify
(
data
))
}
}
getAppraisalCompentencyForm
(
typeId
:
string
)
{
selectCompentencyForm
(
typeId
:
string
)
{
this
.
appraisalCompentency2
.
loading
=
true
this
.
competencyTypeId
=
typeId
const
evaluationRoundId
=
this
.
appraisalCompentency
.
select
?.
masfromEvaluationRound
.
evaluationRoundId
||
"test1"
if
(
evaluationRoundId
||
this
.
byBoss
)
{
this
.
appraisalService
.
getFormCompentencyById
(
evaluationRoundId
,
this
.
evaluatee
.
data
.
employeeId
,
typeId
).
subscribe
({
next
:
response
=>
{
this
.
appraisalCompentency2
.
data
=
JSON
.
parse
(
JSON
.
stringify
(
response
))
if
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
switch
(
this
.
appraisalCompentency2
.
data
?.
currentStep
)
{
case
(
"0"
):
{
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
apsassessyDate
=
this
.
currentDate
.
toISOString
().
split
(
'T'
)[
0
];
this
.
employee
.
evaluate
=
this
.
employee
.
data
.
employeeId
==
this
.
appraisalCompentency2
.
data
.
apsassessy
.
employeeId
break
}
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
}
}
}
this
.
calnumberCheck
()
this
.
appraisalCompentency2
.
loading
=
false
this
.
cdr
.
detectChanges
()
},
error
:
error
=>
{
this
.
appraisalCompentency2
.
loading
=
false
this
.
cdr
.
detectChanges
()
}
})
}
}
appraisalCompentency2Filter
()
{
return
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
masfromEvaluationAssessment2List
||
[]
}
}
...
@@ -195,281 +88,6 @@ export class SelfEvaluationComponent implements OnInit {
...
@@ -195,281 +88,6 @@ export class SelfEvaluationComponent implements OnInit {
return
data
.
join
(
"/"
)
return
data
.
join
(
"/"
)
}
}
saveDraft
()
{
Swal
.
fire
({
iconHtml
:
`
<div class="flex items-center justify-center rounded-full !h-80px !w-80px" style="background-color: #E8F8EE;">
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="39" height="39" fill="#D2D2D2"/>
<g id="Component">
<g id="alert cart">
<g id="mdi:file-export">
<circle cx="22.5" cy="19.5" r="33.5" fill="#E8F8EE"/>
<path d="M9.75 3.25C8.88805 3.25 8.0614 3.59241 7.4519 4.2019C6.84241 4.8114 6.5 5.63805 6.5 6.5V32.5C6.5 33.362 6.84241 34.1886 7.4519 34.7981C8.0614 35.4076 8.88805 35.75 9.75 35.75H29.25C30.112 35.75 30.9386 35.4076 31.5481 34.7981C32.1576 34.1886 32.5 33.362 32.5 32.5V13L22.75 3.25M21.125 5.6875L30.0625 14.625H21.125M14.5113 19.8575H26V31.3463L22.555 27.9013L17.9563 32.5L13.3575 27.9013L17.9563 23.3188"
fill="#1DBE5A"/>
</g>
</g>
</g>
</svg>
</div>
`
,
title
:
'บันทึกแบบร่าง'
,
text
:
'คุณต้องการบันทึกแบบร่างของการประเมินนี้ใช่หรือไม่'
,
showCancelButton
:
true
,
confirmButtonText
:
'ยืนยันการบันทึก'
,
cancelButtonText
:
'ย้อนกลับ'
,
customClass
:
{
title
:
'!swal2-title-mt-20px'
,
actions
:
'!swal2-actions-mt-20px'
,
icon
:
'!swal2-icon-no-border'
,
confirmButton
:
'!swal2-button-bg-green'
,
cancelButton
:
'!swal2-button-bg-gray'
,
},
}).
then
((
result
)
=>
{
if
(
result
.
isConfirmed
&&
this
.
appraisalCompentency2
)
{
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
({
next
:
response
=>
{
if
(
response
.
success
)
{
Swal
.
fire
({
title
:
'บันทึกสำเร็จ!'
,
text
:
'การประเมินของคุณถูกบันทึกแล้ว'
,
icon
:
'success'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-green'
,
}
});
}
else
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
},
error
:
error
=>
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
})
}
else
if
(
result
.
dismiss
===
Swal
.
DismissReason
.
cancel
)
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
});
}
save
()
{
Swal
.
fire
({
iconHtml
:
`
<div class="flex items-center justify-center rounded-full !h-80px !w-80px" style="background-color: #E8F8EE;">
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="39" height="39" fill="#D2D2D2"/>
<g id="Component">
<g id="alert cart">
<g id="mdi:file-export">
<circle cx="22.5" cy="19.5" r="33.5" fill="#E8F8EE"/>
<path d="M9.75 3.25C8.88805 3.25 8.0614 3.59241 7.4519 4.2019C6.84241 4.8114 6.5 5.63805 6.5 6.5V32.5C6.5 33.362 6.84241 34.1886 7.4519 34.7981C8.0614 35.4076 8.88805 35.75 9.75 35.75H29.25C30.112 35.75 30.9386 35.4076 31.5481 34.7981C32.1576 34.1886 32.5 33.362 32.5 32.5V13L22.75 3.25M21.125 5.6875L30.0625 14.625H21.125M14.5113 19.8575H26V31.3463L22.555 27.9013L17.9563 32.5L13.3575 27.9013L17.9563 23.3188"
fill="#1DBE5A"/>
</g>
</g>
</g>
</svg>
</div>
`
,
title
:
'บันทึกข้อมูล'
,
text
:
'คุณต้องการบันทึกข้อมูลการประเมินนี้ใช่หรือไม่'
,
showCancelButton
:
true
,
confirmButtonText
:
'ยืนยันการบันทึก'
,
cancelButtonText
:
'ย้อนกลับ'
,
customClass
:
{
title
:
'!swal2-title-mt-20px'
,
actions
:
'!swal2-actions-mt-20px'
,
icon
:
'!swal2-icon-no-border'
,
confirmButton
:
'!swal2-button-bg-green'
,
cancelButton
:
'!swal2-button-bg-gray'
,
},
}).
then
((
result
)
=>
{
if
(
result
.
isConfirmed
)
{
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
({
next
:
response
=>
{
if
(
this
.
appraisalCompentency2
.
data
)
{
if
(
response
.
success
)
{
this
.
getAppraisalCompentencyForm
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
].
competencyType
.
competencyTypeId
)
this
.
getWorking
()
Swal
.
fire
({
title
:
'บันทึกสำเร็จ!'
,
text
:
'การประเมินของคุณถูกบันทึกแล้ว'
,
icon
:
'success'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-green'
,
}
});
}
else
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
}
},
error
:
error
=>
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
})
}
else
if
(
result
.
dismiss
===
Swal
.
DismissReason
.
cancel
)
{
Swal
.
fire
({
title
:
'ยกเลิก!'
,
text
:
'การบันทึกถูกยกเลิก'
,
icon
:
'error'
,
customClass
:
{
confirmButton
:
'!swal2-button-bg-danger'
,
}
});
}
});
}
convertDate
(
dateInput
?:
string
|
Date
):
string
{
convertDate
(
dateInput
?:
string
|
Date
):
string
{
let
date
=
new
Date
()
let
date
=
new
Date
()
if
(
dateInput
)
{
if
(
dateInput
)
{
...
@@ -482,109 +100,4 @@ export class SelfEvaluationComponent implements OnInit {
...
@@ -482,109 +100,4 @@ export class SelfEvaluationComponent implements OnInit {
}
}
return
date
?.
toLocaleDateString
(
'th-TH'
,
{
day
:
'numeric'
,
month
:
'long'
,
year
:
'numeric'
})
||
''
return
date
?.
toLocaleDateString
(
'th-TH'
,
{
day
:
'numeric'
,
month
:
'long'
,
year
:
'numeric'
})
||
''
}
}
calnumberCheck
()
{
if
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
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
.
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
.
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
.
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
.
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
.
calWeightTotal
()
}
this
.
cdr
.
detectChanges
()
}
calWeightScore
(
numberCheck
:
number
)
{
if
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
switch
(
numberCheck
)
{
case
(
1
):
{
return
+
(
this
.
setting
.
data
.
settingScore1
)
*
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck1
}
case
(
2
):
{
return
+
(
this
.
setting
.
data
.
settingScore2
)
*
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck2
}
case
(
3
):
{
return
+
(
this
.
setting
.
data
.
settingScore3
)
*
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck3
}
case
(
4
):
{
return
+
(
this
.
setting
.
data
.
settingScore4
)
*
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck4
}
case
(
5
):
{
return
+
(
this
.
setting
.
data
.
settingScore5
)
*
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
numberCheck5
}
default
:
{
return
}
}
}
return
}
calWeightTotal
()
{
if
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
this
.
appraisalCompentency2
.
data
.
masfromEvaluationAssessment1lList
[
0
].
weightedTotal
=
0
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
.
cdr
.
detectChanges
()
this
.
calAverageScore
()
}
}
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
)
{
const
num
=
Number
(
text
);
return
isNaN
(
num
)
?
0
:
+
num
.
toFixed
(
2
);
}
calGap
(
score
:
number
|
string
)
{
if
(
this
.
appraisalCompentency2
.
data
?.
masfromEvaluationAssessment1lList
[
0
])
{
const
roundedScore
=
this
.
showNumber
(
score
)
%
1
<=
0.5
?
Math
.
floor
(
this
.
showNumber
(
score
))
:
Math
.
round
(
this
.
showNumber
(
score
));
if
(
roundedScore
>=
90
&&
roundedScore
<=
100
)
{
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
)
{
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
"-1"
;
}
else
if
(
roundedScore
>=
40
&&
roundedScore
<=
59
)
{
return
"-2"
;
}
else
{
return
"-3"
;
}
}
return
}
calAverage
(
score
:
number
|
string
)
{
const
roundedScore
=
this
.
showNumber
(
score
)
%
1
<=
0.5
?
Math
.
floor
(
this
.
showNumber
(
score
))
:
Math
.
round
(
this
.
showNumber
(
score
));
if
(
roundedScore
>=
90
&&
roundedScore
<=
100
)
{
return
"5"
;
}
else
if
(
roundedScore
>=
80
&&
roundedScore
<=
89
)
{
return
"4"
;
}
else
if
(
roundedScore
>=
60
&&
roundedScore
<=
79
)
{
return
"3"
;
}
else
if
(
roundedScore
>=
40
&&
roundedScore
<=
59
)
{
return
"2"
;
}
else
{
return
"1"
;
}
}
returnPath
()
{
if
(
this
.
byBoss
)
{
this
.
returnPageEvalution
()
}
else
{
this
.
currentTemplate
=
this
.
selfEvaluation
;
this
.
pathTitle
=
[
'การประเมินผล'
,
'ประเมินตนเอง'
]
}
}
}
}
\ No newline at end of file
src/app/components/performance-evaluation/supervisor-evaluation/supervisor-evaluation.component.html
View file @
085f5b9c
...
@@ -103,19 +103,10 @@
...
@@ -103,19 +103,10 @@
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<div
class=
"flex"
>
<div
class=
"flex"
>
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-success"
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-success"
*
ngFor=
"let type of item.typeList"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
(
click
)="
selectSubordinate
(
item
);
pageEvalution=
'evaluation'
"
>
(
click
)="
selectSubordinate
(
item
,
type
.
shortName
,
type
.
shortName
);
pageEvalution=
'evaluation'
"
>
PC
{{type.shortName}}
</button>
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-secondary"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
(
click
)="
selectSubordinate
(
item
);
pageEvalution=
'evaluation'
"
>
MC
</button>
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-danger"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
(
click
)="
selectSubordinate
(
item
);
pageEvalution=
'evaluation'
"
>
CC
</button>
</button>
</div>
</div>
</td>
</td>
...
@@ -127,8 +118,7 @@
...
@@ -127,8 +118,7 @@
</td>
</td>
<td
class=
"text-center"
>
<td
class=
"text-center"
>
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-success"
<button
type=
"button"
class=
"ti-btn rounded-sm ti-btn-soft-success"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
style=
"height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
>
(
click
)="
selectSubordinate
(
item
);
pageEvalution=
'evaluation'
"
>
ประเมิน
ประเมิน
</button>
</button>
</td>
</td>
...
@@ -196,8 +186,7 @@
...
@@ -196,8 +186,7 @@
<ng-container
*
ngIf=
"pageEvalution=='pms'"
>
<ng-container
*
ngIf=
"pageEvalution=='pms'"
>
<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=='evaluation'&&subordinate.select.apsassessy.employeeId"
>
<ng-container
*
ngIf=
"pageEvalution=='evaluation'"
>
<app-self-evaluation
[
byBoss
]="
true
"
[
pathTitle
]="
pathTitle
"
(
sendPageEvalution
)="
pageEvalution=
$event"
<app-evaluation
[
evaluationRoundId
]="
evaluationRoundId
"
[
evaluaterId
]="
evaluaterId
"
[
evaluateeId
]="
evaluateeId
"
(
sendPathTitle
)="
pathTitle=
$event"
[
competencyTypeId
]="
competencyTypeId
"
></app-evaluation>
[
employeeId
]="
subordinate
.
select
.
apsassessy
.
employeeId
"
></app-self-evaluation>
</ng-container>
</ng-container>
\ No newline at end of file
src/app/components/performance-evaluation/supervisor-evaluation/supervisor-evaluation.component.ts
View file @
085f5b9c
...
@@ -14,11 +14,17 @@ export class SupervisorEvaluationComponent {
...
@@ -14,11 +14,17 @@ export class SupervisorEvaluationComponent {
subordinate
:
{
loading
:
false
,
select
:
AppraisalSubordinateModel
,
dataList
:
AppraisalSubordinateModel
[],
dataListRound
:
AppraisalSubordinateModel
[][]
}
=
{
loading
:
false
,
select
:
new
MyAppraisalSubordinateModel
(),
dataListRound
:
[],
dataList
:
[]
}
subordinate
:
{
loading
:
false
,
select
:
AppraisalSubordinateModel
,
dataList
:
AppraisalSubordinateModel
[],
dataListRound
:
AppraisalSubordinateModel
[][]
}
=
{
loading
:
false
,
select
:
new
MyAppraisalSubordinateModel
(),
dataListRound
:
[],
dataList
:
[]
}
search
=
""
search
=
""
currentPage
=
1
currentPage
=
1
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
);
page
=
Array
.
from
({
length
:
1
},
(
_
,
i
)
=>
i
+
1
)
evaluateeId
=
""
evaluaterId
=
""
competencyTypeId
=
""
evaluationRoundId
=
""
constructor
(
private
appraisalService
:
AppraisalService
,
constructor
(
private
appraisalService
:
AppraisalService
,
private
cdr
:
ChangeDetectorRef
)
{
private
cdr
:
ChangeDetectorRef
)
{
}
}
ngOnInit
():
void
{
ngOnInit
():
void
{
this
.
evaluaterId
=
this
.
decodeJWT
(
sessionStorage
.
getItem
(
"accessToken"
)
||
''
).
employeeid
this
.
getBossList
()
this
.
getBossList
()
}
}
getBossList
()
{
getBossList
()
{
...
@@ -42,8 +48,12 @@ export class SupervisorEvaluationComponent {
...
@@ -42,8 +48,12 @@ export class SupervisorEvaluationComponent {
this
.
currentPage
=
1
this
.
currentPage
=
1
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
subordinateFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
this
.
page
=
Array
.
from
({
length
:
Math
.
ceil
(
this
.
subordinateFilter
().
length
/
10
)
},
(
_
,
i
)
=>
i
+
1
);
}
}
selectSubordinate
(
data
:
AppraisalSubordinateModel
)
{
selectSubordinate
(
data
:
AppraisalSubordinateModel
,
competencyTypeId
:
string
,
evaluationRoundId
:
string
)
{
this
.
subordinate
.
select
=
new
MyAppraisalSubordinateModel
(
data
)
this
.
subordinate
.
select
=
new
MyAppraisalSubordinateModel
(
data
)
this
.
evaluateeId
=
this
.
subordinate
.
select
.
apsassessy
.
employeeId
this
.
competencyTypeId
=
competencyTypeId
this
.
evaluationRoundId
=
evaluationRoundId
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
}
}
selectDataListRound
(
data
:
AppraisalSubordinateModel
[])
{
selectDataListRound
(
data
:
AppraisalSubordinateModel
[])
{
...
@@ -51,4 +61,13 @@ export class SupervisorEvaluationComponent {
...
@@ -51,4 +61,13 @@ export class SupervisorEvaluationComponent {
this
.
searchChange
()
this
.
searchChange
()
this
.
cdr
.
detectChanges
()
this
.
cdr
.
detectChanges
()
}
}
decodeJWT
(
token
:
string
)
{
let
base64Url
=
token
.
split
(
'.'
)[
1
];
// ดึงส่วนที่เป็น Payload
let
base64
=
base64Url
.
replace
(
'-'
,
'+'
).
replace
(
'_'
,
'/'
);
// แก้ไข base64 ให้ถูกต้อง
let
jsonPayload
=
decodeURIComponent
(
atob
(
base64
).
split
(
''
).
map
(
function
(
c
)
{
return
'%'
+
(
'00'
+
c
.
charCodeAt
(
0
).
toString
(
16
)).
slice
(
-
2
);
}).
join
(
''
));
return
JSON
.
parse
(
jsonPayload
);
}
}
}
src/app/shared/model/appraisal-subordinate.model.ts
View file @
085f5b9c
...
@@ -9,6 +9,10 @@ export interface AppraisalSubordinateModel {
...
@@ -9,6 +9,10 @@ export interface AppraisalSubordinateModel {
apsassessy
:
EmployeeModel
apsassessy
:
EmployeeModel
gread
:
string
gread
:
string
sumScore
:
number
sumScore
:
number
typeList
:
{
competencyTypeId
:
string
,
shortName
:
string
}[]
}
}
export
class
MyAppraisalSubordinateModel
implements
AppraisalSubordinateModel
{
export
class
MyAppraisalSubordinateModel
implements
AppraisalSubordinateModel
{
companyId
:
string
companyId
:
string
...
@@ -18,6 +22,10 @@ export class MyAppraisalSubordinateModel implements AppraisalSubordinateModel {
...
@@ -18,6 +22,10 @@ export class MyAppraisalSubordinateModel implements AppraisalSubordinateModel {
apsassessy
:
EmployeeModel
apsassessy
:
EmployeeModel
gread
:
string
gread
:
string
sumScore
:
number
sumScore
:
number
typeList
:
{
competencyTypeId
:
string
,
shortName
:
string
}[]
constructor
(
data
?:
Partial
<
AppraisalSubordinateModel
>
)
{
constructor
(
data
?:
Partial
<
AppraisalSubordinateModel
>
)
{
this
.
companyId
=
data
?.
companyId
||
""
this
.
companyId
=
data
?.
companyId
||
""
this
.
active
=
data
?.
active
??
false
this
.
active
=
data
?.
active
??
false
...
@@ -26,6 +34,9 @@ export class MyAppraisalSubordinateModel implements AppraisalSubordinateModel {
...
@@ -26,6 +34,9 @@ export class MyAppraisalSubordinateModel implements AppraisalSubordinateModel {
this
.
apsassessy
=
new
MyEmployeeModel
(
data
?.
apsassessy
)
this
.
apsassessy
=
new
MyEmployeeModel
(
data
?.
apsassessy
)
this
.
gread
=
data
?.
gread
||
""
this
.
gread
=
data
?.
gread
||
""
this
.
sumScore
=
data
?.
sumScore
??
0
this
.
sumScore
=
data
?.
sumScore
??
0
this
.
typeList
=
data
?.
typeList
?.
map
(
x
=>
({
competencyTypeId
:
x
.
competencyTypeId
||
""
,
shortName
:
x
.
shortName
||
""
}))
||
[]
}
}
}
}
src/app/shared/model/competencytype.model.ts
View file @
085f5b9c
...
@@ -5,6 +5,7 @@ export interface CompetencytypeModel {
...
@@ -5,6 +5,7 @@ export interface CompetencytypeModel {
tdesc
:
string
tdesc
:
string
shortName
:
string
shortName
:
string
expectationLevel
:
string
expectationLevel
:
string
weight
:
number
}
}
...
@@ -15,6 +16,7 @@ export class MyCompetencytypeModel implements CompetencytypeModel {
...
@@ -15,6 +16,7 @@ export class MyCompetencytypeModel implements CompetencytypeModel {
tdesc
:
string
tdesc
:
string
shortName
:
string
shortName
:
string
expectationLevel
:
string
expectationLevel
:
string
weight
:
number
constructor
(
data
?:
Partial
<
CompetencytypeModel
>
)
{
constructor
(
data
?:
Partial
<
CompetencytypeModel
>
)
{
this
.
competencyTypeId
=
data
?.
competencyTypeId
||
""
this
.
competencyTypeId
=
data
?.
competencyTypeId
||
""
this
.
companyId
=
data
?.
companyId
||
""
this
.
companyId
=
data
?.
companyId
||
""
...
@@ -22,6 +24,7 @@ export class MyCompetencytypeModel implements CompetencytypeModel {
...
@@ -22,6 +24,7 @@ export class MyCompetencytypeModel implements CompetencytypeModel {
this
.
tdesc
=
data
?.
tdesc
||
""
this
.
tdesc
=
data
?.
tdesc
||
""
this
.
shortName
=
data
?.
shortName
||
""
this
.
shortName
=
data
?.
shortName
||
""
this
.
expectationLevel
=
data
?.
expectationLevel
||
""
this
.
expectationLevel
=
data
?.
expectationLevel
||
""
this
.
weight
=
data
?.
weight
??
0
}
}
}
}
src/assets/css/style.css
View file @
085f5b9c
...
@@ -24922,3 +24922,7 @@ div:where(.swal2-container) div:where(.swal2-validation-message) {
...
@@ -24922,3 +24922,7 @@ div:where(.swal2-container) div:where(.swal2-validation-message) {
.masked-input
{
.masked-input
{
-webkit-text-security
:
disc
;
/* Safari, Chrome */
-webkit-text-security
:
disc
;
/* Safari, Chrome */
}
}
.cursor-not-allowed
{
cursor
:
not-allowed
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment