Commit 5800b432 by Nattana Chaiyamat

รายละเอียดประเมินผลงานการปฏิบัติงาน

parent 2e52c698
...@@ -25,7 +25,7 @@ export class PmsEvalutionComponent { ...@@ -25,7 +25,7 @@ export class PmsEvalutionComponent {
part5show = true part5show = true
part6show = true part6show = true
part7show = true part7show = true
part8show = true part8show = true
data8List: DataModel7[] = [{ data8List: DataModel7[] = [{
evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Hoshin)", evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Hoshin)",
...@@ -114,13 +114,13 @@ export class PmsEvalutionComponent { ...@@ -114,13 +114,13 @@ export class PmsEvalutionComponent {
calRawScore(data?: any) { calRawScore(data?: any) {
if (data) { if (data) {
return data.reduce((sum: number, item: any) => sum + item.groupAssessment1.pmsTopic.weight * 5, 0).toFixed(2); return data.reduce((sum: number, item: any) => sum + item.weight * 5, 0).toFixed(2);
} }
return "0.00" return "0.00"
} }
calWeigth(data?: any) { calWeigth(data?: any) {
if (data) { if (data) {
return data.reduce((sum: number, item: any) => sum + item.groupAssessment1.pmsTopic.weight, 0).toFixed(2); return data.reduce((sum: number, item: any) => sum + item.weight, 0).toFixed(2);
} }
return "0.00" return "0.00"
} }
...@@ -132,7 +132,7 @@ export class PmsEvalutionComponent { ...@@ -132,7 +132,7 @@ export class PmsEvalutionComponent {
} }
calExpectationTotalScore(data?: any) { calExpectationTotalScore(data?: any) {
if (data) { if (data) {
return data.reduce((sum: number, item: any) => sum + ((this.evaluaterId == this.evaluateeId ? item.scoreTopicExpectation : item.scoreTopicExpectationBoss) * item.groupAssessment1.pmsTopic.weight), 0).toFixed(2); return data.reduce((sum: number, item: any) => sum + ((this.evaluaterId == this.evaluateeId ? item.scoreTopicExpectation : item.scoreTopicExpectationBoss) * item.weight), 0).toFixed(2);
} }
return "0.00" return "0.00"
} }
...@@ -216,4 +216,13 @@ export class PmsEvalutionComponent { ...@@ -216,4 +216,13 @@ export class PmsEvalutionComponent {
} }
return "0.00" return "0.00"
} }
setScore(item: any, score: number) {
if (this.evaluaterId == this.evaluateeId) {
item.scoreTopicExpectation = score
item.scoreTopicExpectationBoss = score
} else {
item.scoreTopicExpectationBoss = score
}
}
} }
\ No newline at end of file
...@@ -16,10 +16,11 @@ ...@@ -16,10 +16,11 @@
<nav class=" flex space-x-2 rtl:space-x-reverse"> <nav class=" flex space-x-2 rtl:space-x-reverse">
<a *ngFor="let item of appraisalCompentency.dataList; let i=index ; let f= first" <a *ngFor="let item of appraisalCompentency.dataList; let i=index ; let f= first"
class="border justify-center rounded-top-4px hs-tab-active:!bg-primary hs-tab-active:text-white -mb-px py-2 px-3 inline-flex items-center gap-2 font-size-16px font-weight-500 text-center hover:text-gray-900" class="border justify-center rounded-top-4px hs-tab-active:!bg-primary hs-tab-active:text-white -mb-px py-2 px-3 inline-flex items-center gap-2 font-size-16px font-weight-500 text-center hover:text-gray-900"
[class.active]="f" href="javascript:void(0);" [id]="'card-type-item-'+(i+1)" [class.active]="f" href="javascript:void(0);" [id]="'card-type-item-'+(i+1)"
[class.ti-btn-soft-mute]="!item.statusCheckDate"
[attr.data-hs-tab]="'#underline-'+(i+1)" [attr.aria-controls]="'underline-'+(i+1)" [attr.data-hs-tab]="'#underline-'+(i+1)" [attr.aria-controls]="'underline-'+(i+1)"
(click)="selectAppraisalCompentency(item)"> (click)="selectAppraisalCompentency(item)">
รอบการประเมินที่ {{i+1}}/{{appraisalCompentency.dataList.length}} {{item.masfromEvaluationRound.tdesc}}
</a> </a>
</nav> </nav>
</div> </div>
...@@ -119,7 +120,7 @@ ...@@ -119,7 +120,7 @@
{{masfromEvaluationAssessment1.masfromStatusType.tdesc}} {{masfromEvaluationAssessment1.masfromStatusType.tdesc}}
</td> </td>
<td class="flex justify-center items-center"> <td class="flex justify-center items-center">
<button type="button" class="ti-btn rounded-sm " (click)="selectCompentencyForm(masfromEvaluationAssessment1.competencyType.competencyTypeId);onEdit = true ; <button type="button" class="ti-btn rounded-sm " (click)="selectCompentencyForm(masfromEvaluationAssessment1.competencyType.competencyTypeId);onEdit = 'competency' ;
pathTitle = ['การประเมินผล', 'ประเมินตนเอง','ประเมินผล']" pathTitle = ['การประเมินผล', 'ประเมินตนเอง','ประเมินผล']"
[class.ti-btn-soft-secondary]="masfromEvaluationAssessment1.masfromStatusType.code == 'employee'" [class.ti-btn-soft-secondary]="masfromEvaluationAssessment1.masfromStatusType.code == 'employee'"
[class.ti-btn-soft-warning]="masfromEvaluationAssessment1.masfromStatusType.code == 'evaluating'" [class.ti-btn-soft-warning]="masfromEvaluationAssessment1.masfromStatusType.code == 'evaluating'"
...@@ -163,36 +164,42 @@ ...@@ -163,36 +164,42 @@
</td> </td>
</tr> </tr>
</tbody> </tbody>
<tbody *ngIf="!appraisalPms.loading&&!appraisalPmsFilter().length"> <tbody
*ngIf="!appraisalPms.loading&&!appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId)">
<tr> <tr>
<td class="text-center" colspan="100%"> <td class="text-center" colspan="100%">
ไม่พบข้อมูล ไม่พบข้อมูล
</td> </td>
</tr> </tr>
</tbody> </tbody>
<tbody *ngIf="!appraisalPms.loading&&appraisalPmsFilter().length"> <tbody
<!-- <tr *ngFor="let item of appraisalPmsFilter();let i = index"> *ngIf="!appraisalPms.loading&&appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId)?.data">
<tr>
<td class="flex justify-center items-center"> <td class="flex justify-center items-center">
{{item.data.masfromEvaluationRound.evaluationRoundId}} {{appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.pmsMasfromEvaluationRound?.pmsEvaluationRoundId}}
</td> </td>
<td> <td>
{{item.data.masfromEvaluationRound.tdesc}} {{appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.pmsMasfromEvaluationRound?.tdesc}}
</td> </td>
<td> <td>
{{convertDate(item.data.masfromEvaluationRound.apsPeriodStart)}} {{convertDate(appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.pmsMasfromEvaluationRound?.apsPeriodStart)}}
</td> </td>
<td> <td>
{{convertDate(item.data.masfromEvaluationRound.apsPeriodEnd)}} {{convertDate(appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.pmsMasfromEvaluationRound?.apsPeriodEnd)}}
</td> </td>
<td> <td>
{{item.data.masfromStatusType.tdesc}} {{appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.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"> <button type="button" class="ti-btn rounded-sm " (click)="selectAppraisalPms(appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data);onEdit = 'pms' ;
pathTitle = ['การประเมินผล', 'ประเมินตนเอง','ประเมินผล']"
[class.ti-btn-soft-secondary]="appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.masfromStatusType?.code == 'employee'"
[class.ti-btn-soft-warning]="appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.masfromStatusType?.code == 'evaluating'"
[class.ti-btn-soft-success]="appraisalPmsFilter(item.masfromEvaluationRound.evaluationRoundId).data?.masfromStatusType?.code == 'employee_finish'">
ประเมิน ประเมิน
</span> </button>
</td> </td>
</tr> --> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
...@@ -241,10 +248,17 @@ ...@@ -241,10 +248,17 @@
<ng-container *ngIf="onEdit"> <ng-container *ngIf="onEdit=='competency'">
<app-evaluation [pathTitle]="['การประเมินผล', 'ประเมินตนเอง','ประเมิน']" <app-evaluation [pathTitle]="['การประเมินผล', 'ประเมินตนเอง','ประเมิน']"
(sendReturnPath)="getAppraisalCompentencyList();onEdit = false ; pathTitle = ['การประเมินผล', 'ประเมินตนเอง']" (sendReturnPath)="getAppraisalCompentencyList();getAppraisalPmsList();onEdit = '' ; pathTitle = ['การประเมินผล', 'ประเมินตนเอง']"
[evaluationRoundId]="appraisalCompentency.select?.masfromEvaluationRound?.evaluationRoundId || ''" [evaluationRoundId]="appraisalCompentency.select?.masfromEvaluationRound?.evaluationRoundId || ''"
[evaluaterId]="evaluatee.data.employeeId" [evaluateeId]="evaluatee.data.employeeId" [evaluaterId]="evaluatee.data.employeeId" [evaluateeId]="evaluatee.data.employeeId"
[competencyTypeId]="competencyTypeId"></app-evaluation> [competencyTypeId]="competencyTypeId"></app-evaluation>
</ng-container>
<ng-container *ngIf="onEdit=='pms'">
<app-pms-evalution [pathTitle]="['การประเมินผล', 'ประเมินตนเอง','ประเมิน']"
(sendReturnPath)="getAppraisalCompentencyList();getAppraisalPmsList();onEdit='' ; pathTitle = ['การประเมินผล', 'ประเมินตนเอง']"
[evaluationRoundId]="appraisalPms.select?.pmsMasfromEvaluationRound?.pmsEvaluationRoundId || ''"
[evaluaterId]="evaluatee.data.employeeId" [evaluateeId]="evaluatee.data.employeeId"></app-pms-evalution>
</ng-container> </ng-container>
\ No newline at end of file
import { ChangeDetectorRef, Component, OnInit, TemplateRef, ViewChild } from '@angular/core'; import { ChangeDetectorRef, Component, OnInit, TemplateRef, ViewChild } from '@angular/core';
import { AppraisalCompentencyModel } from 'src/app/shared/model/appraisal-competency.model'; import { AppraisalCompentencyModel } from 'src/app/shared/model/appraisal-competency.model';
import { AppraisalPmsModel } from 'src/app/shared/model/appraisal-pms.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model'; import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.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';
...@@ -25,12 +26,12 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -25,12 +26,12 @@ export class SelfEvaluationComponent implements OnInit {
condition: ["1.หากได้คะแนนสูงกว่า 80% แต่มี 3 2 หรือ 1 ด้วย ถือว่า Gap -1", "2.หากได้คะแนนต่ำกว่า 80% แต่มี 4 และ 5 ให้คิด Gap ตาม %", "3.คะแนนต่ำกว่า 80% แต่มี 2 และ 1 ให้คิด Gap ตาม %"], condition: ["1.หากได้คะแนนสูงกว่า 80% แต่มี 3 2 หรือ 1 ด้วย ถือว่า Gap -1", "2.หากได้คะแนนต่ำกว่า 80% แต่มี 4 และ 5 ให้คิด Gap ตาม %", "3.คะแนนต่ำกว่า 80% แต่มี 2 และ 1 ให้คิด Gap ตาม %"],
}] }]
appraisalCompentency: { loading: boolean, select?: AppraisalCompentencyModel, dataList: AppraisalCompentencyModel[] } = { loading: false, select: undefined, dataList: [] } appraisalCompentency: { loading: boolean, select?: AppraisalCompentencyModel, dataList: AppraisalCompentencyModel[] } = { loading: false, select: undefined, dataList: [] }
appraisalPms: { loading: boolean, select: undefined, dataList: { check: boolean, data: undefined }[] } = { loading: false, select: undefined, dataList: [] } appraisalPms: { loading: boolean, select?: AppraisalPmsModel, dataList: { check: boolean, data: AppraisalPmsModel }[] } = { loading: false, select: undefined, dataList: [] }
evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() } evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() }
currentDate = new Date() currentDate = new Date()
competencyTypeId = "" competencyTypeId = ""
onEdit = false onEdit = ''
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
private cdr: ChangeDetectorRef private cdr: ChangeDetectorRef
...@@ -38,6 +39,7 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -38,6 +39,7 @@ export class SelfEvaluationComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
this.getEvaluatee() this.getEvaluatee()
this.getAppraisalCompentencyList() this.getAppraisalCompentencyList()
this.getAppraisalPmsList()
} }
getEvaluatee() { getEvaluatee() {
this.evaluatee.loading = true this.evaluatee.loading = true
...@@ -52,6 +54,28 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -52,6 +54,28 @@ export class SelfEvaluationComponent implements OnInit {
} }
}) })
} }
getAppraisalPmsList() {
this.appraisalPms.loading = true
this.appraisalService.getPmsList().subscribe({
next: response => {
this.appraisalPms.dataList = response.map(x => ({ check: false, data: x }))
this.appraisalPms.loading = false
this.cdr.detectChanges()
}, error: error => {
this.appraisalPms.loading = false
this.cdr.detectChanges()
}
})
}
appraisalPmsFilter(evaluationRoundId: string) {
return this.appraisalPms.dataList.find(x => x.data.pmsMasfromEvaluationRound.pmsEvaluationRoundId == evaluationRoundId) || { check: false, data: undefined }
}
selectAppraisalPms(data?: AppraisalPmsModel) {
this.appraisalPms.select = JSON.parse(JSON.stringify(data || {}))
}
getAppraisalCompentencyList() { getAppraisalCompentencyList() {
this.appraisalCompentency.loading = true this.appraisalCompentency.loading = true
this.appraisalService.getCompetencyList().subscribe({ this.appraisalService.getCompetencyList().subscribe({
...@@ -78,10 +102,6 @@ export class SelfEvaluationComponent implements OnInit { ...@@ -78,10 +102,6 @@ export class SelfEvaluationComponent implements OnInit {
this.competencyTypeId = typeId this.competencyTypeId = typeId
} }
appraisalPmsFilter() {
return this.appraisalPms.dataList
}
showTools(data: string[]) { showTools(data: string[]) {
return data.join("/") return data.join("/")
} }
......
...@@ -10,6 +10,7 @@ export interface AppraisalCompentencyModel { ...@@ -10,6 +10,7 @@ export interface AppraisalCompentencyModel {
apsapprove4: Apsapprove4 apsapprove4: Apsapprove4
apsapprove5: Apsapprove5 apsapprove5: Apsapprove5
masfromEvaluationAssessment1: MasfromEvaluationAssessment1[] masfromEvaluationAssessment1: MasfromEvaluationAssessment1[]
statusCheckDate: boolean
} }
export interface PersonalLevel { export interface PersonalLevel {
......
import { HttpClient, HttpHeaders } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment'; import { environment } from 'src/environments/environment';
import { AlertModel } from '../model/alert.model'; import { AlertModel } from '../model/alert.model';
import { AppraisalFormModel } from '../model/appraisal-form.model';
import { AppraisalCompentencyModel, AppraisalCompentencyModel2 } from '../model/appraisal-competency.model'; import { AppraisalCompentencyModel, AppraisalCompentencyModel2 } from '../model/appraisal-competency.model';
import { AppraisalSubordinateModel } from '../model/appraisal-subordinate.model'; import { AppraisalSubordinateModel } from '../model/appraisal-subordinate.model';
import { AppraisalPmsFormModel } from '../model/appraisal-pms-form.model'; import { AppraisalPmsFormModel } from '../model/appraisal-pms-form.model';
import { AppraisalPmsModel } from '../model/appraisal-pms.model';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
...@@ -28,6 +28,9 @@ export class AppraisalService { ...@@ -28,6 +28,9 @@ export class AppraisalService {
return this.http.get<AppraisalSubordinateModel[]>(this.urlApi + "/boss/emp") return this.http.get<AppraisalSubordinateModel[]>(this.urlApi + "/boss/emp")
} }
getPmsList(): Observable<AppraisalPmsModel[]> {
return this.http.get<AppraisalPmsModel[]>(this.urlApi + "/pms/emp")
}
getFormPmsById(evaluationRoundId: string, apsassessy: string): Observable<AppraisalPmsFormModel> { getFormPmsById(evaluationRoundId: string, apsassessy: string): Observable<AppraisalPmsFormModel> {
return this.http.get<AppraisalPmsFormModel>(this.urlApi + "/pms/" + evaluationRoundId + "/" + apsassessy) return this.http.get<AppraisalPmsFormModel>(this.urlApi + "/pms/" + evaluationRoundId + "/" + apsassessy)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment