Commit a57fbb61 by Nattana Chaiyamat

แบบประเมินสมรรถนะ

parent 30016591
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
<ng-container *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index"> <ng-container *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index">
<button type="button" class="flex justify-center !items-center border bg-white p-2 text-center" <button type="button" class="flex justify-center !items-center border bg-white p-2 text-center"
style="border-radius:20px;width: 100px" style="border-radius:20px;width: 100px"
(click)="getAppraisalCompentencyForm(i);currentTap=appraisalCompentency.comType" (click)="getAppraisalCompentencyForm(i);currentPart=appraisalCompentency.comType"
[ngClass]="{'!bg-primary text-white':currentTap==appraisalCompentency.comType}"> [ngClass]="{'!bg-primary text-white':currentPart==appraisalCompentency.comType}">
{{appraisalCompentency.comType}} {{appraisalCompentency.comType}}
&nbsp; &nbsp;
<span class="flex align-center justify-center rounded-circle text-white" [class.bg-danger]="formRemain(i)" <span class="flex align-center justify-center rounded-circle text-white" [class.bg-danger]="formRemain(i)"
...@@ -22,16 +22,17 @@ ...@@ -22,16 +22,17 @@
<div class="flex justify-around !items-center border bg-white p-2 text-right" <div class="flex justify-around !items-center border bg-white p-2 text-right"
style="border-radius:20px;width: 100px;margin-left: auto;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));"> style="border-radius:20px;width: 100px;margin-left: auto;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));">
<i class="bg-white cursor-pointer border ti ti-chevron-down" <i class="bg-white cursor-pointer border ti ti-chevron-down"
style="padding: 1px;border-radius:5px;font-size:27px" (click)="allBiOpen(true)"></i> style="padding: 1px;border-radius:10px;font-size:27px" (click)="allBiOpen(true)"></i>
<i class="bg-white cursor-pointer border ti ti-chevron-up" style="padding: 1px;border-radius:5px;font-size:27px" <i class="bg-white cursor-pointer border ti ti-chevron-up"
(click)="allBiOpen(false)"></i> style="padding: 1px;border-radius:10px;font-size:27px" (click)="allBiOpen(false)"></i>
</div> </div>
</div> </div>
<div class="flex flex-col gap-2"> <div #scrollContainer class="flex flex-col gap-2 relative" style="height:40vh;overflow-y: auto;">
<ng-container *ngFor="let item2 of appraisalCompentencyFilter();let i = index;let f= first"> <ng-container *ngFor="let item2 of appraisalCompentencyFilter();let i = index;let f= first">
<button type="button" class="p-4 w-full bg-secondary text-white text-left" (click)="scrollToTable($event)" <button type="button" [attr.id]="'menu-' + i" class="p-4 w-full bg-secondary text-white text-left"
style="border-radius:20px" style="border-radius:20px"
(click)="biOpen.set(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, !biOpen.get(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId))"> (click)="scrollToMenu(i);
allBiOpen(!biOpen.get(item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId),item2.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId)">
<span class="absolute -translate-y-1/5 rounded-circle text-white" [class.bg-danger]="inFormRemain(item2)" <span class="absolute -translate-y-1/5 rounded-circle text-white" [class.bg-danger]="inFormRemain(item2)"
[class.bg-success]="!inFormRemain(item2)"> [class.bg-success]="!inFormRemain(item2)">
<ng-container *ngIf="inFormRemain(item2)"> <ng-container *ngIf="inFormRemain(item2)">
...@@ -106,9 +107,10 @@ ...@@ -106,9 +107,10 @@
<td class="py-2 text-center" style="vertical-align: top">{{bi.assessmentId}}</td> <td class="py-2 text-center" style="vertical-align: top">{{bi.assessmentId}}</td>
<td class="py-2 text-center" style="vertical-align: top"> <td class="py-2 text-center" style="vertical-align: top">
<div class="flex flex-row justify-center gap-2 mb-2"> <div class="flex flex-row justify-center gap-2 mb-2">
<ng-container *ngFor="let item of [1,2,3,4,5];let f = first"> <ng-container *ngFor="let item of [5,4,3,2,1];let f = first">
<button type="button" class="p-4 border !border-soft-secondary text-soft-secondary bg-white" <button type="button"
style="border-radius:5px" class="h-12 w-12 p-0 shadow border !border-soft-secondary text-soft-secondary bg-white"
style="border-radius:10px"
(mouseenter)="biScore.set(bi.behavioralIndicators+bi.assessmentId,item)" (mouseenter)="biScore.set(bi.behavioralIndicators+bi.assessmentId,item)"
(mouseleave)="biScore.clear()" (mouseleave)="biScore.clear()"
(click)="bi.competencyBehavioral.scoreTopicExpectation=item;calnumberCheck()" [ngClass]="{'!border-secondary !text-secondary':bi.competencyBehavioral.scoreTopicExpectation>=item||(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)>=item, (click)="bi.competencyBehavioral.scoreTopicExpectation=item;calnumberCheck()" [ngClass]="{'!border-secondary !text-secondary':bi.competencyBehavioral.scoreTopicExpectation>=item||(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)>=item,
...@@ -117,9 +119,12 @@ ...@@ -117,9 +119,12 @@
</button> </button>
</ng-container> </ng-container>
</div> </div>
<div style="height: 20px;"> <div class="flex justify-center" style="height: 20px;white-space: nowrap; overflow: visible">
<span *ngIf="biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary"> <span *ngIf="biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary">
{{scoreDescriptions[(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0) - 1] }} {{scoreDescriptions[(biScore.get(bi.behavioralIndicators+bi.assessmentId) ?? 0)] }}
</span>
<span *ngIf="!biScore.get(bi.behavioralIndicators+bi.assessmentId)" class="text-secondary">
{{scoreDescriptions[bi.competencyBehavioral.scoreTopicExpectation] }}
</span> </span>
</div> </div>
</td> </td>
...@@ -129,45 +134,131 @@ ...@@ -129,45 +134,131 @@
</table> </table>
</ng-container> </ng-container>
</ng-container> </ng-container>
</div> <button [attr.id]="'menu-' + appraisalCompentencyFilter().length" type="button"
<div class="w-1/2 flex flex-col gap-2" *ngIf="appraisalCompentencyList.length"> class="p-4 w-full bg-secondary text-white text-left" style="border-radius:20px"
<div class="w-full font-size-18px font-weight-700 mt-2rem"> (click)="scrollToMenu(appraisalCompentencyFilter().length);allBiOpen(!biOpen.get('สรุป'),'สรุป')">
ค่าถ่วงน้ำหนักของความสามารถในแต่ละระดับ <span style="padding-left:50px">
</div> สรุป
<div class="w-full flex flex-col gap-2 mt-2"> </span>
<div class="w-full flex flex-row gap-2"> &nbsp;
<div class="flex-1 text-center font-size-18px font-weight-700" *ngFor="let item of [5,4,3,2,1]"> <span>
{{item}}</div> คะแนนประเมิน
</div> </span>
<div class="w-full flex flex-row gap-2"> </button>
<div *ngFor="let item of [5,4,3,2,1]" class="flex-1 border border-secondary text-center align-center" <ng-container *ngIf="biOpen.get('สรุป')">
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;"> <div class="pb-1rem px-2rem">
{{calWeightScore(item)}} <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>
</div> <div class="py-2 grid grid-cols-11">
</div> <div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div>
<div class="w-full mt-2 flex justify-center"> <div class="col-span-3 grid grid-cols-5">
<div class="w-3/4 flex flex-row gap-2"> <div class="col-span-1 text-center">
<div class="flex-1 font-size-18px font-weight-700 text-right align-center"> {{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck5}}
คะแนนเฉลี่ย </div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck4}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck3}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck2}}
</div>
<div class="col-span-1 text-center">
{{appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck1}}
</div>
</div>
</div> </div>
<div class="flex-1 flex justify-center"> <div class="py-2 grid grid-cols-11">
<div class="w-3/4 border border-secondary text-center align-center" <div class="col-span-8">ตัวคูณคะแนนในแต่ละช่อง (2)</div>
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;"> <div class="col-span-3 grid grid-cols-5">
{{showNumber(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}} <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> </div>
<div class="flex-1 font-size-18px font-weight-700 text-right align-center"> <div class="py-2 grid grid-cols-11">
ผล Gap <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>
<div class="flex-1 flex justify-center"> <div class="py-2 grid grid-cols-11">
<div class="w-3/4 border border-secondary text-center align-center" <div class="col-span-8">คะแนนรวมหลังถ่วงน้ำหนัก</div>
style="border-radius:5px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;"> <div class="col-span-3 grid grid-cols-5">
{{calGap(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}} <div class="col-span-5 text-center">
{{showNumber(appraisalCompentencyList[appraisalCompentencyIndex].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(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</div>
</div> </div>
</div> </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 ['เกณฑ์การให้คะแนนการประเมิน','ผลประเมิน (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>
</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" (mouseenter)="hoveredCode2 = 'true'"
(mouseleave)="hoveredCode2 = null" [ngClass]="{ 'table-hover2': 'true' === hoveredCode2 }">
<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="align-start text-center">
{{calAverage(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
<td class="align-start text-center">
{{calGap(appraisalCompentencyList[appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
</tr>
<tr (mouseenter)="hoveredCode2 = 'true'" (mouseleave)="hoveredCode2 = null"
[ngClass]="{ 'table-hover2': 'true' === hoveredCode2 }">
<td class="align-start !white-space-normal" colspan="4">
หมายเหตุ<br>
ผลการประเมินอาจมีการเปลี่ยนแปลงเงื่อนไขข้อ 1-3 เนื่องจากมีคะแนนต่ำกว่าเกณฑ์ในบางข้อ
</td>
</tr>
</tbody>
</table>
</div>
</div>
</ng-container>
</div> </div>
</div> </div>
</ng-template> </ng-template>
...@@ -176,7 +267,7 @@ ...@@ -176,7 +267,7 @@
<div class="ltr:border-r rtl:border-l border-gray-200 dark:border-white/10" style="width: 5rem"> <div class="ltr:border-r rtl:border-l border-gray-200 dark:border-white/10" style="width: 5rem">
<nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" [attr.data-hs-tabs-vertical]="true"> <nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" [attr.data-hs-tabs-vertical]="true">
<button *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" <button *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index"
(click)="getAppraisalCompentencyForm(i)" [class.active]="currentTap==appraisalCompentency.comType" (click)="getAppraisalCompentencyForm(i)" [class.active]="currentPart==appraisalCompentency.comType"
type="button" type="button"
class="hs-tab-active:bg-primary ltr:hs-tab-active:border-r-transparent rtl:hs-tab-active:border-l-transparent hs-tab-active:text-white dark:hs-tab-active:bg-transparent ltr:dark:hs-tab-active:border-r-gray-800 rtl:dark:hs-tab-active:border-l-gray-800 dark:hs-tab-active:text-primary -mr-px py-2 px-3 inline-flex items-center gap-2 text-sm font-medium text-center border text-gray-500 ltr:rounded-l-lg rtl:rounded-r-lg hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300 !p-2" class="hs-tab-active:bg-primary ltr:hs-tab-active:border-r-transparent rtl:hs-tab-active:border-l-transparent hs-tab-active:text-white dark:hs-tab-active:bg-transparent ltr:dark:hs-tab-active:border-r-gray-800 rtl:dark:hs-tab-active:border-l-gray-800 dark:hs-tab-active:text-primary -mr-px py-2 px-3 inline-flex items-center gap-2 text-sm font-medium text-center border text-gray-500 ltr:rounded-l-lg rtl:rounded-r-lg hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300 !p-2"
[id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i" [id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i"
...@@ -197,7 +288,7 @@ ...@@ -197,7 +288,7 @@
<div class="flex-1 w-full"> <div class="flex-1 w-full">
<div *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" [id]="'hs-tab-js-vertical-'+i" <div *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" [id]="'hs-tab-js-vertical-'+i"
role="tabpanel" [class.hidden]="currentTap!=appraisalCompentency.comType" role="tabpanel" [class.hidden]="currentPart!=appraisalCompentency.comType"
[attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i"> [attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i">
<div class="hs-accordion-group w-full" *ngIf="appraisalCompentency"> <div class="hs-accordion-group w-full" *ngIf="appraisalCompentency">
<ng-container> <ng-container>
...@@ -238,7 +329,7 @@ ...@@ -238,7 +329,7 @@
<div <div
class="hs-accordion overflow-hidden bg-white border -mt-px first:rounded-t-sm last:rounded-b-sm dark:bg-bgdark dark:border-white/10" class="hs-accordion overflow-hidden bg-white border -mt-px first:rounded-t-sm last:rounded-b-sm dark:bg-bgdark dark:border-white/10"
[id]="'hs-primary-heading-'+i"> [id]="'hs-primary-heading-'+i">
<button (click)="scrollToTable($event)" <button
class="hs-accordion-toggle hs-accordion-active:text-white hs-accordion-active:bg-secondary group py-4 px-5 inline-flex items-center justify-between gap-x-3 w-full font-semibold text-start text-gray-800 transition hover:text-gray-500 dark:hs-accordion-active:text-white dark:text-gray-200 dark:hover:text-white/80" class="hs-accordion-toggle hs-accordion-active:text-white hs-accordion-active:bg-secondary group py-4 px-5 inline-flex items-center justify-between gap-x-3 w-full font-semibold text-start text-gray-800 transition hover:text-gray-500 dark:hs-accordion-active:text-white dark:text-gray-200 dark:hover:text-white/80"
[attr.aria-controls]="'hs-primary-collapse-'+i" type="button"> [attr.aria-controls]="'hs-primary-collapse-'+i" type="button">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white" <span class="d-flex align-items-center justify-content-center rounded-circle text-white"
......
import { ViewportScroller } from '@angular/common'; import { ViewportScroller } from '@angular/common';
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';
import { Competency, MasfromEvaluationAssessment2List } from 'src/app/shared/model/competency.model'; import { Competency, MasfromEvaluationAssessment2List } from 'src/app/shared/model/competency.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model'; import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { SettingAssessmentModel, MySettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model'; import { SettingAssessmentModel, MySettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model';
...@@ -13,7 +13,7 @@ import Swal from 'sweetalert2'; ...@@ -13,7 +13,7 @@ import Swal from 'sweetalert2';
styleUrls: ['./pms-competency.component.scss'] styleUrls: ['./pms-competency.component.scss']
}) })
export class PmsCompetencyComponent { export class PmsCompetencyComponent {
@Input() currentTap = "" currentPart = ""
@Input() evaluateeId = "" @Input() evaluateeId = ""
@Input() evaluaterId = "" @Input() evaluaterId = ""
@Input() appraisalCompentencyList: Competency[] = [] @Input() appraisalCompentencyList: Competency[] = []
...@@ -21,6 +21,9 @@ export class PmsCompetencyComponent { ...@@ -21,6 +21,9 @@ export class PmsCompetencyComponent {
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>(); @Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyFormRemain: EventEmitter<any> = new EventEmitter<any>(); @Output() compentencyFormRemain: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyForm: EventEmitter<any> = new EventEmitter<any>(); @Output() compentencyForm: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyScore: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyWeightScore: EventEmitter<any> = new EventEmitter<any>();
@Output() compentencyGap: EventEmitter<any> = new EventEmitter<any>();
@Input() canEdit = false @Input() canEdit = false
@Input() currentStep = "" @Input() currentStep = ""
@Input() dateIso = "" @Input() dateIso = ""
...@@ -38,6 +41,7 @@ export class PmsCompetencyComponent { ...@@ -38,6 +41,7 @@ export class PmsCompetencyComponent {
}] }]
scoreDescriptions = [ scoreDescriptions = [
'',
'ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน', 'ไม่มีความรู้พื้นฐานเลย ขาดทักษะในงาน',
'มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้', 'มีความรู้ในงานบ้างแต่ยังไม่สามารถ ประยุกต์ใช้ในงานได้',
'นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเองแก้ไขปัญหาหน้างานได้', 'นำความรู้มาประยุกต์ใช้ในงานได้ ปฏิบัติงานเองได้ด้วยตัวเองแก้ไขปัญหาหน้างานได้',
...@@ -47,6 +51,8 @@ export class PmsCompetencyComponent { ...@@ -47,6 +51,8 @@ export class PmsCompetencyComponent {
evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() } evaluatee: { loading: boolean, data: EmployeeModel } = { loading: false, data: new MyEmployeeModel() }
biOpen: Map<string, boolean> = new Map<string, boolean>() biOpen: Map<string, boolean> = new Map<string, boolean>()
biScore: Map<string, number> = new Map<string, number>() biScore: Map<string, number> = new Map<string, number>()
@ViewChild('scrollContainer') scrollContainer!: ElementRef;
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
private cdr: ChangeDetectorRef, private cdr: ChangeDetectorRef,
...@@ -56,7 +62,7 @@ export class PmsCompetencyComponent { ...@@ -56,7 +62,7 @@ export class PmsCompetencyComponent {
} }
ngOnInit(): void { ngOnInit(): void {
if (this.appraisalCompentencyList.length) { if (this.appraisalCompentencyList.length) {
this.currentTap = this.currentTap == '' ? this.appraisalCompentencyList[0].comType : this.currentTap this.currentPart = this.currentPart == '' ? this.appraisalCompentencyList[0].comType : this.currentPart
} }
this.getAppraisalCompentencyForm(0) this.getAppraisalCompentencyForm(0)
this.getSettingList() this.getSettingList()
...@@ -93,10 +99,14 @@ export class PmsCompetencyComponent { ...@@ -93,10 +99,14 @@ export class PmsCompetencyComponent {
getAppraisalCompentencyForm(index: number) { getAppraisalCompentencyForm(index: number) {
if (this.appraisalCompentencyList.length) { if (this.appraisalCompentencyList.length) {
this.appraisalCompentencyIndex = index this.appraisalCompentencyIndex = index
this.currentTap = this.appraisalCompentencyList[this.appraisalCompentencyIndex].comType this.currentPart = this.appraisalCompentencyList[this.appraisalCompentencyIndex].comType
this.biOpen.clear() this.biOpen.clear()
this.appraisalCompentencyFilter().forEach(x => { this.appraisalCompentencyFilter().forEach((x, i) => {
this.biOpen.set(x.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, false) this.biOpen.set(x.groupAssessment1.competencyIndicatorsCourses1Mini.competencyIndicatorsCourses0.competencyTopic.competencyTopicId, false)
const isLast = i === this.appraisalCompentencyFilter().length - 1;
if (isLast) {
this.biOpen.set("สรุป", false)
}
}) })
this.cdr.detectChanges() this.cdr.detectChanges()
switch (this.currentStep) { switch (this.currentStep) {
...@@ -268,22 +278,39 @@ export class PmsCompetencyComponent { ...@@ -268,22 +278,39 @@ export class PmsCompetencyComponent {
this.inFormRemain(data) this.inFormRemain(data)
).filter(data => data != 0).length ).filter(data => data != 0).length
).filter(data => data != 0).length ).filter(data => data != 0).length
const score = [1, 2, 3, 4, 5]
this.compentencyScore.emit(score.map(x => this.calWeightScore(x)))
this.compentencyWeightScore.emit(this.showNumber(this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore))
this.compentencyGap.emit(this.calGap(this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore))
this.compentencyForm.emit(this.appraisalCompentencyList) this.compentencyForm.emit(this.appraisalCompentencyList)
this.compentencyFormRemain.emit(remain) this.compentencyFormRemain.emit(remain)
} }
scrollToTable(event: MouseEvent) { allBiOpen(status: boolean, part?: string) {
const target = event.target as HTMLElement;
const position = target.getBoundingClientRect();
window.scrollTo({
top: position.top + window.scrollY - 100,
behavior: 'smooth'
});
}
allBiOpen(status: boolean) {
this.biOpen.forEach((_, key) => { this.biOpen.forEach((_, key) => {
this.biOpen.set(key, status) if (part) {
if (part == key) {
this.biOpen.set(key, status)
} else {
if (status) {
this.biOpen.set(key, false)
}
}
} else {
this.biOpen.set(key, status)
}
}) })
} }
scrollToMenu(index: number) {
setTimeout(() => {
const container = this.scrollContainer?.nativeElement as HTMLElement;
const target = container.querySelector('#menu-' + index) as HTMLElement;
if (container && target) {
container.scrollTop = target.offsetTop;
}
}, 0);
}
} }
<app-page-header *ngIf="evaluationForm=='sup'" [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า']"></app-page-header>
<ng-container *ngTemplateOutlet="evaluation"></ng-container> <ng-container *ngTemplateOutlet="evaluation"></ng-container>
<ng-template #evaluation> <ng-template #evaluation>
<div *ngIf="evaluationForm=='sup'" class="pt-1.5rem w-full min-height-50px justify-between items-center"> <div *ngIf="evaluationForm=='sup'" class="pt-1.5rem w-full min-height-50px justify-between items-center">
...@@ -22,187 +21,265 @@ ...@@ -22,187 +21,265 @@
ประเมินผลประจำปี {{currentDate.getFullYear()}} ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div> </div>
</div> </div>
<div class="w-full" *ngIf="compentency.data"> <div class="flex flex-col gap-2" style="height:81vh;overflow-y: auto;">
<div class="box m-0" style="border-radius:20px"> <div class="w-full" *ngIf="compentency.data">
<div class="box-body py-2"> <div class="box m-0" style="border-radius:20px">
<div class="flex flex-row gap-2" <div class="box-body py-2">
[ngStyle]="{'justify-content': compentency.data.pms.gradeScore?'space-between':'center'}"> <div class="flex flex-row gap-2"
<div [ngClass]="{'w-full': !compentency.data.pms.gradeScore,'w-1/2':compentency.data.pms.gradeScore}"> [ngStyle]="{'justify-content': compentency.data.pms.gradeScore?'space-between':'center'}">
<img src="./assets/img/users/defaultperson.jpg" <div [ngClass]="{'w-full': !compentency.data.pms.gradeScore,'w-1/2':compentency.data.pms.gradeScore}">
class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" /> <img src="./assets/img/users/defaultperson.jpg"
class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" />
</div>
<div *ngIf="compentency.data.pms.gradeScore" class="w-1/2 flex flex-col justify-center"
style="align-self: center;">
<div class="flex-1 flex flex-row gap-1 justify-center">
<div *ngFor="let item of [1,2,3,4,5]">
<i class="ti" style="font-size:20px"
[ngClass]="item <= gradeStar(compentency.data.pms.gradeScore) ? 'ti-star-filled text-warning' : 'ti-star text-gray-300'"></i>
</div>
</div>
<div class="flex-1 text-center">
{{compentency.data.pms.gradeScore? "GRADE : " + compentency.data.pms.gradeScore : ''}}
</div>
</div>
</div> </div>
<div *ngIf="compentency.data.pms.gradeScore" class="w-1/2 flex" style="align-self: center;"> </div>
{{compentency.data.pms.gradeScore? "GRADE : " + compentency.data.pms.gradeScore : ''}} </div>
</div>
<div class="w-full">
<div class="box m-0" style="border-radius:20px">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">ข้อมูลพนักงาน</h5>
</div> </div>
</div> </div>
<div class="box-body py-2">
<table class="ti-custom-table border-0 ellipsis-text">
<tbody>
<tr class="!border-0">
<td class="font-medium !p-2">รหัสพนักงาน</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2">
{{evaluatee.data.employeeId}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ตำเเหน่ง</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.position.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ฝ่าย</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu1.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">แผนก</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu2.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วน</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu3.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วนย่อย 1</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu4.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วนย่อย 2</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu5.tdesc}}
</td>
</tr>
</tbody>
</table>
</div>
</div> </div>
</div> </div>
</div> <div class="w-full" *ngIf="currentTap=='แบบประเมินสมรรถนะ'">
<div class="w-full"> <div class="box m-0" style="border-radius:20px">
<div class="box m-0" style="border-radius:20px"> <div class="box-header">
<div class="box-header"> <div class="flex justify-between">
<div class="flex justify-between"> <h5 class="box-title">ค่าถ่วงน้ำหนักของความสามารถในแต่ละระดับ</h5>
<h5 class="box-title">ข้อมูลพนักงาน</h5> </div>
</div>
<div class="box-body py-2">
<div class="w-full flex flex-col gap-2" *ngIf="compentency.data">
<div class="w-full flex flex-col gap-2 mt-2">
<div class="w-full flex flex-row gap-2">
<div class="flex-1 text-center font-size-18px font-weight-700" *ngFor="let item of [5,4,3,2,1]">
{{item}}</div>
</div>
<div class="w-full flex flex-row gap-2">
<div *ngFor="let item of [5,4,3,2,1]"
class="flex-1 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyScore[item-1]}}
</div>
</div>
</div>
<div class="w-full mt-2 flex justify-center">
<div class="flex flex-row gap-2" style="width:80%">
<div class="flex-1 font-size-18px font-weight-700 text-right align-center">
คะแนนเฉลี่ย
</div>
<div class="flex-1 flex justify-center">
<div class="w-3/4 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyWeightScore}}
</div>
</div>
<div class="flex-1 font-size-18px font-weight-700 text-right align-center">
ผล Gap
</div>
<div class="flex-1 flex justify-center">
<div class="w-3/4 border border-secondary text-center align-center"
style="border-radius:10px;--tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity));height: 30px;">
{{compentencyGap}}
</div>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
<div class="box-body py-2"> </div>
<table class="ti-custom-table border-0 ellipsis-text"> <div class="w-full" *ngIf="currentTap=='ประเมินผลการปฏิบัติงาน'||currentTap=='สรุปคะแนนและข้อเสนอแนะ'">
<tbody> <div class="box m-0" style="border-radius:20px">
<tr class="!border-0"> <div class="box-header">
<td class="font-medium !p-2">รหัสพนักงาน</td> <div class="flex justify-between">
<td class="!p-2">:</td> <h5 class="box-title">สรุปผลประเมิน</h5>
<td class="font-medium !p-2"> </div>
{{evaluatee.data.employeeId}} </div>
</td> <div class="box-body py-2">
</tr> <div class='flex flex-col' *ngFor="let item of kpiScorePart; let i=index">
<tr class="!border-0"> <div class='flex flex-row'>
<td class="font-medium !p-2">ตำเเหน่ง</td> <div style="width: 25%;">
<td class="!p-2">:</td> {{item.text}}
<td class="font-medium !p-2 !text-warp"> </div>
{{evaluatee.data.position.tdesc}} <div style="width: 10%;">
</td> :
</tr> </div>
<tr class="!border-0"> <div style="width: 65%;">
<td class="font-medium !p-2">ฝ่าย</td> {{item.score}}
<td class="!p-2">:</td> </div>
<td class="font-medium !p-2 !text-warp"> </div>
{{evaluatee.data.bu1.tdesc}} </div>
</td> </div>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">แผนก</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu2.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วน</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu3.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วนย่อย 1</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu4.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วนย่อย 2</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2 !text-warp">
{{evaluatee.data.bu5.tdesc}}
</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</div> <div class="w-full" *ngIf="compentency.data">
<div class="w-full" *ngIf="compentency.data"> <div class="box m-0" style="border-radius:20px">
<div class="box m-0" style="border-radius:20px"> <div class="box-header">
<div class="box-header"> <div class="flex justify-between">
<div class="flex justify-between"> <h5 class="box-title">สถานะการประเมิน</h5>
<h5 class="box-title">สถานะการประเมิน</h5> </div>
</div>
<div class="box-body space-y-4 text-center">
<ng-container
*ngFor="let apsEmp of ['apsassessy','apsapprove1','apsapprove2','apsapprove3','apsapprove4','apsapprove5']; let i=index ; let f=first">
<div class="flex flex-row" *ngIf="returnField(compentency.data,apsEmp+'.thFullName')">
<div class="mx-auto relative">
<div class="h-full flex items-center justify-center pb-4" style="width: 32px;">
<div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div>
</div>
<div class="absolute rounded-full text-center align-center"
style="justify-items:center;top:-5px">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white"
[class]="assessmentStatusClass(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))">
<i
[class]="assessmentStatusIcon(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))"></i>
</span>
</div>
</div>
<div class="flex w-full pb-4">
<div class="ltr:ml-5 rtl:mr-5 rounded-sm ltr:mr-auto rtl:ml-auto my-auto w-full space-y-3">
<div class="sm:flex">
<h3 class="text-start my-auto text-gray-500 dark:text-white/70" style="line-height: 1.5">
<span class="text-dark dark:text-white">
<ng-container *ngIf="i==0">
ผู้รับการประเมิน
</ng-container>
<ng-container *ngIf="i>0">
ผู้อนุมัติลำดับที่ {{i}}
</ng-container>
</span>
<br>
<span class="text-dark dark:text-white">
{{returnField(compentency.data,apsEmp+'.thFullName')}}
</span>
<br>
<p class="text-xs text-gray-500 dark:text-white/70">
{{assessmentStatusText(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))}}
</p>
</h3>
</div>
</div>
</div>
</div>
</ng-container>
</div> </div>
</div> </div>
<div class="box-body space-y-4 text-center"> </div>
<ng-container <div class="w-full" *ngIf="commentAllFilter().length">
*ngFor="let apsEmp of ['apsassessy','apsapprove1','apsapprove2','apsapprove3','apsapprove4','apsapprove5']; let i=index ; let f=first"> <div class="box m-0" style="border-radius:20px">
<div class="flex flex-row" *ngIf="returnField(compentency.data,apsEmp+'.thFullName')"> <div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">Timeline</h5>
</div>
</div>
<div class="box-body space-y-4 text-center">
<div class="flex flex-row" *ngFor="let item of commentAllFilter(); let i=index">
<div class="mx-auto relative"> <div class="mx-auto relative">
<div class="h-full flex items-center justify-center pb-4" style="width: 32px;"> <div class="h-full flex items-center justify-center pb-4" style="width: 32px;">
<div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div> <div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div>
</div> </div>
<div class="absolute rounded-full text-center align-center" style="justify-items:center;top:-5px"> <div class="absolute rounded-full text-center align-center" style="justify-items:center;top:-5px">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white" <span class="d-flex align-items-center justify-content-center rounded-circle text-white"
[class]="assessmentStatusClass(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))"> [class]="statusCompetencyClass(item.statusType)">
<i <i [class]="statusCompetencyIcon(item.statusType)"></i>
[class]="assessmentStatusIcon(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))"></i>
</span> </span>
</div> </div>
</div> </div>
<div class="flex w-full pb-4"> <div class="flex w-full pb-4">
<div class="ltr:ml-5 rtl:mr-5 rounded-sm ltr:mr-auto rtl:ml-auto my-auto w-full space-y-3"> <div class="ltr:ml-5 rtl:mr-5 rounded-sm ltr:mr-auto rtl:ml-auto my-auto w-full space-y-3">
<div class="sm:flex"> <div class="w-full">
<h3 class="text-start my-auto text-gray-500 dark:text-white/70" style="line-height: 1.5"> <h3 class="text-start my-auto text-gray-500 dark:text-white/70" style="line-height: 1.5">
<span class="text-dark dark:text-white"> <span class="text-dark dark:text-white" style="white-space: nowrap;">
<ng-container *ngIf="i==0"> {{item.thFullName}}
ผู้รับการประเมิน
</ng-container>
<ng-container *ngIf="i==1&&returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')">
ผู้ประเมิน
</ng-container>
<ng-container *ngIf="i==1&&!returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')">
ผู้อนุมัติลำดับที่ 1
</ng-container>
<ng-container *ngIf="i>1&&!returnField(compentency.data,'apsapprove'+(i+1)+'.thFullName')">
ผู้อนุมัติลำดับที่ {{i-1}}
</ng-container>
</span> </span>
<br> <br>
<span class="text-dark dark:text-white"> <div style="display: flex;justify-content :space-between;">
{{returnField(compentency.data,apsEmp+'.thFullName')}} <p class="text-xs text-gray-500 dark:text-white/70">
</span> {{statusCompetencyText(item.statusType)}}
<br> </p>
<p class="text-xs text-gray-500 dark:text-white/70"> <p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
{{assessmentStatusText(compentency.data.currentStep,i,returnField(compentency.data,apsEmp+'.status'))}} {{convertDate(item.commentDate)}}
</p> </p>
</div>
</h3> </h3>
</div> </div>
</div> <div *ngIf="item.comment"
</div> class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
</div> <p class="text-start text-xs text-gray-500 dark:text-white/70" style="line-height: 1.5">
</ng-container> {{item.comment}}
</div> </p>
</div> </div>
</div>
<div class="w-full" *ngIf="commentAllFilter().length">
<div class="box m-0" style="border-radius:20px">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">Timeline</h5>
</div>
</div>
<div class="box-body space-y-4 text-center">
<div class="flex flex-row" *ngFor="let item of commentAllFilter(); let i=index">
<div class="mx-auto relative">
<div class="h-full flex items-center justify-center pb-4" style="width: 32px;">
<div class="h-full w-[3px] bg-gray-100 pointer-events-none"></div>
</div>
<div class="absolute rounded-full text-center align-center" style="justify-items:center;top:-5px">
<span class="d-flex align-items-center justify-content-center rounded-circle text-white"
[class]="statusCompetencyClass(item.statusType)">
<i [class]="statusCompetencyIcon(item.statusType)"></i>
</span>
</div>
</div>
<div class="flex w-full pb-4">
<div class="ltr:ml-5 rtl:mr-5 rounded-sm ltr:mr-auto rtl:ml-auto my-auto w-full space-y-3">
<div class="w-full">
<h3 class="text-start my-auto text-gray-500 dark:text-white/70" style="line-height: 1.5">
<span class="text-dark dark:text-white" style="white-space: nowrap;">
{{item.thFullName}}
</span>
<br>
<div style="display: flex;justify-content :space-between;">
<p class="text-xs text-gray-500 dark:text-white/70">
{{statusCompetencyText(item.statusType)}}
</p>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
{{convertDate(item.commentDate)}}
</p>
</div>
</h3>
</div>
<div *ngIf="item.comment"
class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
<p class="text-start text-xs text-gray-500 dark:text-white/70" style="line-height: 1.5">
{{item.comment}}
</p>
</div> </div>
</div> </div>
</div> </div>
...@@ -225,7 +302,7 @@ ...@@ -225,7 +302,7 @@
</ng-container> </ng-container>
</div> </div>
<div class="w-1/4"> <div class="w-1/4">
<div class="font-size-18px font-weight-700 text-primary"> <div class="font-size-18px font-weight-700 text-primary text-right">
สถานะผู้ประเมิน&nbsp;:&nbsp;{{currentStepText()}} สถานะผู้ประเมิน&nbsp;:&nbsp;{{currentStepText()}}
</div> </div>
</div> </div>
...@@ -270,8 +347,8 @@ ...@@ -270,8 +347,8 @@
[ngClass]="{'!bg-primary text-white':currentTap=='สรุปคะแนนและข้อเสนอแนะ'}"> [ngClass]="{'!bg-primary text-white':currentTap=='สรุปคะแนนและข้อเสนอแนะ'}">
สรุปคะแนนและข้อเสนอแนะ สรุปคะแนนและข้อเสนอแนะ
</button> </button>
<button *ngIf="evaluationForm=='sup'" type="button" class="flex-1 border bg-white p-2 text-center" <button type="button" class="flex-1 border bg-white p-2 text-center" style="border-radius:20px"
style="border-radius:20px" (click)="currentTap='แผนพัฒนาบุคคลากร'" (click)="currentTap='แผนพัฒนาบุคคลากร'"
[ngClass]="{'!bg-primary text-white':currentTap=='แผนพัฒนาบุคคลากร'}"> [ngClass]="{'!bg-primary text-white':currentTap=='แผนพัฒนาบุคคลากร'}">
แผนพัฒนาบุคคลากร แผนพัฒนาบุคคลากร
</button> </button>
...@@ -282,9 +359,10 @@ ...@@ -282,9 +359,10 @@
<app-pms-information></app-pms-information> <app-pms-information></app-pms-information>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='แบบประเมินสมรรถนะ'&&compentency.data&&evaluaterId&&evaluateeId"> <ng-container *ngIf="currentTap=='แบบประเมินสมรรถนะ'&&compentency.data&&evaluaterId&&evaluateeId">
<app-pms-competency [currentTap]="currentTap" [appraisalCompentencyList]="compentency.data.competency" <app-pms-competency [appraisalCompentencyList]="compentency.data.competency" [evaluaterId]="evaluaterId"
[evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep"
[currentStep]="compentency.data.currentStep" [dateIso]="dateIso" [dateIso]="dateIso" (compentencyScore)="compentencyScore=$event"
(compentencyWeightScore)="compentencyWeightScore=$event" (compentencyGap)="compentencyGap=$event"
(compentencyFormRemain)="compentencyFormRemain=$event" (compentencyFormRemain)="compentencyFormRemain=$event"
(compentencyForm)="compentency.data.competency=$event"></app-pms-competency> (compentencyForm)="compentency.data.competency=$event"></app-pms-competency>
</ng-container> </ng-container>
...@@ -293,19 +371,21 @@ ...@@ -293,19 +371,21 @@
<app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" <app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap"
[evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId" [canEdit]="canEdit"
[currentStep]="compentency.data.currentStep" [dateIso]="dateIso" [currentStep]="compentency.data.currentStep" [dateIso]="dateIso"
(kpiFormRemain)="kpiFormRemain=$event" (kpiForm)="compentency.data.pms=$event"></app-pms-kpi> (kpiFormRemain)="kpiFormRemain=$event" (scorePart)="kpiScorePart=$event"
(kpiForm)="compentency.data.pms=$event"></app-pms-kpi>
</ng-container> </ng-container>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='สรุปคะแนนและข้อเสนอแนะ'&&compentency.data&&evaluateeId&&evaluaterId"> <ng-container *ngIf="currentTap=='สรุปคะแนนและข้อเสนอแนะ'&&compentency.data&&evaluateeId&&evaluaterId">
<app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" [evaluaterId]="evaluaterId" <app-pms-kpi [appraisalPms]="compentency.data.pms" [currentTap]="currentTap" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep" [evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep"
[dateIso]="dateIso" (kpiFormRemain)="kpiFormRemain=$event" [dateIso]="dateIso" (kpiFormRemain)="kpiFormRemain=$event" (scorePart)="kpiScorePart=$event"
(kpiForm)="compentency.data.pms=$event"></app-pms-kpi> (kpiForm)="compentency.data.pms=$event"></app-pms-kpi>
</ng-container> </ng-container>
<ng-container *ngIf="currentTap=='แผนพัฒนาบุคคลากร'&&compentency.data&&evaluateeId&&evaluaterId"> <ng-container *ngIf="currentTap=='แผนพัฒนาบุคคลากร'&&compentency.data&&evaluateeId&&evaluaterId">
<app-pms-idp [appraisalIdp]="compentency.data.idp" [evaluaterId]="evaluaterId" <app-pms-idp [appraisalIdp]="compentency.data.idp" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId" [canEdit]="canEdit" [currentStep]="compentency.data.currentStep" [evaluateeId]="evaluateeId" [canEdit]="evaluationForm=='sup'?canEdit:false"
[dateIso]="dateIso" (idpForm)="compentency.data.idp=$event"></app-pms-idp> [currentStep]="compentency.data.currentStep" [dateIso]="dateIso"
(idpForm)="compentency.data.idp=$event"></app-pms-idp>
</ng-container> </ng-container>
</div> </div>
<div *ngIf="compentency.data&&canSave" class="box-footer text-end space-x-3 rtl:space-x-reverse"> <div *ngIf="compentency.data&&canSave" class="box-footer text-end space-x-3 rtl:space-x-reverse">
......
...@@ -50,28 +50,46 @@ export class PmsFormEmployeeComponent { ...@@ -50,28 +50,46 @@ export class PmsFormEmployeeComponent {
currentDate = new Date() currentDate = new Date()
comment = "" comment = ""
compentencyScore: String[] = []
compentencyWeightScore = ""
compentencyGap = ""
kpiScorePart: { text: string, score: string }[] = []
currentStepText = () => { currentStepText = () => {
if (this.compentency.data) { if (this.compentency.data) {
if (this.compentency.data.apsassessy.employeeId == this.evaluaterId) { if (this.compentency.data.apsassessy.employeeId == this.evaluaterId) {
return "ผู้รับการประเมิน" return "ผู้รับการประเมิน"
} else if (this.compentency.data.apsapprove1.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove1.employeeId == this.evaluaterId) {
if (this.compentency.data.apsapprove2.employeeId) {
return "ผู้ประเมิน"
}
return "ผู้อนุมัติลำดับที่ 1" return "ผู้อนุมัติลำดับที่ 1"
} else if (this.compentency.data.apsapprove2.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove2.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 1"
} else if (this.compentency.data.apsapprove3.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 2" return "ผู้อนุมัติลำดับที่ 2"
} else if (this.compentency.data.apsapprove4.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove3.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 3" return "ผู้อนุมัติลำดับที่ 3"
} else if (this.compentency.data.apsapprove5.employeeId == this.evaluaterId) { } else if (this.compentency.data.apsapprove4.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 4" return "ผู้อนุมัติลำดับที่ 4"
} else if (this.compentency.data.apsapprove5.employeeId == this.evaluaterId) {
return "ผู้อนุมัติลำดับที่ 5"
} }
} }
return "" return ""
} }
gradeStar = (grade: string) => {
if (grade == 'A') {
return 5
} else if (grade == 'B') {
return 4
} else if (grade == 'C') {
return 3
} else if (grade == 'D') {
return 2
} else if (grade == 'E') {
return 1
}
return 0
}
statusCompetencyText = (status: string) => { statusCompetencyText = (status: string) => {
if (status === "no access") { if (status === "no access") {
return "ยังไม่ถึงขั้นตอนดำเนินการ" return "ยังไม่ถึงขั้นตอนดำเนินการ"
...@@ -487,4 +505,30 @@ export class PmsFormEmployeeComponent { ...@@ -487,4 +505,30 @@ export class PmsFormEmployeeComponent {
} }
} }
showNumber(text: number | string) {
const num = Number(text);
return isNaN(num) ? 0 : +(+num.toFixed(2));
}
calWeightScore(numberCheck: number) {
switch (numberCheck) {
case (1): {
return 1
}
case (2): {
return 2
}
case (3): {
return 3
}
case (4): {
return 4
}
case (5): {
return 5
}
default: { return }
}
}
} }
<ng-container *ngTemplateOutlet="idpEvaluation"></ng-container> <ng-container *ngTemplateOutlet="idpEvaluation"></ng-container>
<ng-template #idpEvaluation> <ng-template #idpEvaluation>
<ng-container *ngIf="appraisalIdp"> <ng-container *ngIf="appraisalIdp">
<div class="pb-2rem px-2rem"> <div style="height: 46vh;overflow-y: auto;">
<div class="font-size-18px font-weight-700 text-primary"> <div class="pb-2rem px-2rem">
แผนพัฒนาบุคคลากรรายบุคคล <div class="font-size-18px font-weight-700 text-primary">
</div> แผนพัฒนาบุคคลากรรายบุคคล
</div> </div>
<div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-gray-500">
ส่วนที่ 1: ข้อมูลทั่วไป
</div> </div>
</div> <div class="pb-2rem px-2rem">
<div class="pb-2rem px-2rem"> <div class="font-size-18px font-weight-700 text-gray-500">
<div class="grid grid-cols-6"> ส่วนที่ 1: ข้อมูลทั่วไป
<div class="col-span-6 grid grid-cols-6">
<div class="col-span-3 border p-2 pb-4">
<span>ผู้ใต้บังคับบัญชา</span>
</div>
<div class="col-span-3 border p-2 pb-4">
<span>ผู้บังคับบัญชา</span>
</div>
</div> </div>
<div class="col-span-6 grid grid-cols-6"> </div>
<div class="col-span-3 grid grid-cols-4"> <div class="pb-2rem px-2rem">
<div class="col-span-1 p-2 border pb-4"> <div class="grid grid-cols-6">
<span>ชื่อ-สกุล</span> <div class="col-span-6 grid grid-cols-6">
</div> <div class="col-span-3 border p-2 pb-4">
<div class="col-span-1 p-2 border pb-4"> <span>ผู้ใต้บังคับบัญชา</span>
<span>{{appraisalIdp.apsassessy.thFullName || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.apsassessy.position.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
<div class="col-span-1 p-2 border pb-4">
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.boss.thFullName || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
</div> </div>
<div class="col-span-1 p-2 border pb-4"> <div class="col-span-3 border p-2 pb-4">
<span>{{appraisalIdp.boss.position.tdesc || ""}}</span> <span>ผู้บังคับบัญชา</span>
</div> </div>
</div> </div>
</div> <div class="col-span-6 grid grid-cols-6">
<div class="col-span-6 grid grid-cols-6"> <div class="col-span-3 grid grid-cols-4">
<div class="col-span-3 grid grid-cols-4"> <div class="col-span-1 p-2 border pb-4">
<div class="col-span-1 p-2 border pb-4"> <span>ชื่อ-สกุล</span>
<span>งาน</span> </div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.apsassessy.thFullName || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.apsassessy.position.tdesc || ""}}</span>
</div>
</div> </div>
<div class="col-span-1 p-2 border pb-4"> <div class="col-span-3 grid grid-cols-4">
<span>{{appraisalIdp.apsassessy.job.tdesc || ""}}</span> <div class="col-span-1 p-2 border pb-4">
</div> <span>ชื่อ-สกุล</span>
<div class="col-span-1 p-2 border pb-4"> </div>
<span>ฝ่าย</span> <div class="col-span-1 p-2 border pb-4">
</div> <span>{{appraisalIdp.boss.thFullName || ""}}</span>
<div class="col-span-1 p-2 border pb-4"> </div>
<span>{{appraisalIdp.apsassessy.bu1.tdesc || ""}}</span> <div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.boss.position.tdesc || ""}}</span>
</div>
</div> </div>
</div> </div>
<div class="col-span-3 grid grid-cols-4"> <div class="col-span-6 grid grid-cols-6">
<div class="col-span-1 p-2 border pb-4"> <div class="col-span-3 grid grid-cols-4">
<span>งาน</span> <div class="col-span-1 p-2 border pb-4">
</div> <span>งาน</span>
<div class="col-span-1 p-2 border pb-4"> </div>
<span>{{appraisalIdp.boss.job.tdesc || ""}}</span> <div class="col-span-1 p-2 border pb-4">
</div> <span>{{appraisalIdp.apsassessy.job.tdesc || ""}}</span>
<div class="col-span-1 p-2 border pb-4"> </div>
<span>ฝ่าย</span> <div class="col-span-1 p-2 border pb-4">
<span>ฝ่าย</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.apsassessy.bu1.tdesc || ""}}</span>
</div>
</div> </div>
<div class="col-span-1 p-2 border pb-4"> <div class="col-span-3 grid grid-cols-4">
<span>{{appraisalIdp.boss.bu1.tdesc || ""}}</span> <div class="col-span-1 p-2 border pb-4">
<span>งาน</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.boss.job.tdesc || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ฝ่าย</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalIdp.boss.bu1.tdesc || ""}}</span>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="pb-2rem px-2rem">
<div class="pb-2rem px-2rem"> <div class="font-size-18px font-weight-700 text-gray-500">
<div class="font-size-18px font-weight-700 text-gray-500"> ส่วนที่ 2: แนวทางการพัฒนา
ส่วนที่ 2: แนวทางการพัฒนา </div>
</div> </div>
</div> <div class="py-1rem px-2rem">
<div class="py-1rem px-2rem"> <div class="py-2 grid grid-cols-6 gap-3">
<div class="py-2 grid grid-cols-6 gap-3"> <div class="col-span-6">หมายเหตุ : กรณี HR จัดอบรมให้ต้องเป็นไปตามเกณฑ์ที่ส่วนกลางกำหนดขึ้น</div>
<div class="col-span-6">หมายเหตุ : กรณี HR จัดอบรมให้ต้องเป็นไปตามเกณฑ์ที่ส่วนกลางกำหนดขึ้น</div> <div class="col-span-6 grid grid-cols-6 gap-2">
<div class="col-span-6 grid grid-cols-6 gap-2"> <div class="grid col-span-1 grid-cols-6 gap-2">
<div class="grid col-span-1 grid-cols-6 gap-2"> <div class="col-span-1">
<div class="col-span-1"> <input type="checkbox" class="ti-form-checkbox" id="idpStatus-0"
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-0" (click)="resetFormIdp()" (click)="resetFormIdp()" style="cursor: pointer;"
style="cursor: pointer;" [class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'"
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'" name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='0'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='0'" [checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'">
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'"> </div>
</div> <div class="col-span-5">
<div class="col-span-5"> <label for="idpStatus-0" class="text-sm text-gray-500"
<label for="idpStatus-0" class="text-sm text-gray-500" [class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'">
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'"> IDP มาตรฐาน
IDP มาตรฐาน </label>
</label> </div>
</div>
</div>
<div class="grid col-span-1 grid-cols-6 gap-2">
<div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-1" style="cursor: pointer;"
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='1'"
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'">
</div> </div>
<div class="col-span-5"> <div class="grid col-span-1 grid-cols-6 gap-2">
<label for="idpStatus-1" class="text-sm text-gray-500" <div class="col-span-1">
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'"> <input type="checkbox" class="ti-form-checkbox" id="idpStatus-1"
IDP ปรับแก้ไข style="cursor: pointer;"
</label> [class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='1'"
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'">
</div>
<div class="col-span-5">
<label for="idpStatus-1" class="text-sm text-gray-500"
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'">
IDP ปรับแก้ไข
</label>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="pb-2rem px-2rem">
<div class="pb-2rem px-2rem"> <div class=" rounded-top-0.65rem">
<div class=" rounded-top-0.65rem"> <table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover2"> <thead class="height-50px">
<thead class="height-50px"> <tr class="font-size-12px">
<tr class="font-size-12px"> <th scope="col" rowspan="3"
<th scope="col" rowspan="3" 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
<span class="font-size-12px font-weight-700 ">{{'สมรรถนะที่พัฒนา\n(Competency)'}}</span> class="font-size-12px font-weight-700 ">{{'สมรรถนะที่พัฒนา\n(Competency)'}}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div 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> </div>
</th> </th>
<th scope="col" rowspan="3" <th scope="col" rowspan="3"
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 "> <span class="font-size-12px font-weight-700 ">
{{'ประเด็นตัวชี้พฤติกรรมที่ต้องพัฒนา\n(Behavior Indicators : BIs)'}} {{'ประเด็นตัวชี้พฤติกรรมที่ต้องพัฒนา\n(Behavior Indicators : BIs)'}}
</span> </span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div 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> </div>
</th> </th>
<th scope="col" colspan="3" <th scope="col" colspan="3"
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 ">เครื่องมือพัฒนา</span> <span class="font-size-12px font-weight-700 ">เครื่องมือพัฒนา</span>
</th> </th>
<th scope="col" rowspan="3" <th scope="col" rowspan="3"
class="relative bg-soft-secondary text-primary !text-center !p-0"> class="relative bg-soft-secondary text-primary !text-center !p-0">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div 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> </div>
</th> </th>
<th scope="col" colspan="2" rowspan="2" <th scope="col" colspan="2" rowspan="2"
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 ">หลักสูตรพัฒนาตาม CDR</span> <span class="font-size-12px font-weight-700 ">หลักสูตรพัฒนาตาม CDR</span>
</th> </th>
<th scope="col" rowspan="3" <th scope="col" rowspan="3"
class="relative bg-soft-secondary text-primary !text-center !p-0"> class="relative bg-soft-secondary text-primary !text-center !p-0">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"> <div 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> </div>
</th> </th>
<th scope="col" rowspan="3" <th scope="col" rowspan="3"
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 ">ระยะเวลาที่พัฒนา</span> <span class="font-size-12px font-weight-700 ">ระยะเวลาที่พัฒนา</span>
</th> </th>
</tr> </tr>
<tr class="font-size-12px"> <tr class="font-size-12px">
<th scope="col" <th scope="col"
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">
70 70
</th> </th>
<th scope="col" <th scope="col"
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">
20 20
</th> </th>
<th scope="col" <th scope="col"
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">
10 10
</th> </th>
</tr> </tr>
<tr class="font-size-12px"> <tr class="font-size-12px">
<th scope="col" <th scope="col"
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">
OJT/Job Assignment OJT/Job Assignment
</th> </th>
<th scope="col" <th scope="col"
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">
Coach/Mentor Coach/Mentor
</th> </th>
<th scope="col" <th scope="col"
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">
Training Training
</th> </th>
<th scope="col" <th scope="col"
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">
รหัส รหัส
</th> </th>
<th scope="col" <th scope="col"
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">
ชื่อหลักสูตร ชื่อหลักสูตร
</th> </th>
</tr> </tr>
</thead> </thead>
<tbody *ngIf="!appraisalIdp.competencyIndicatorsCourses1.length"> <tbody *ngIf="!appraisalIdp.competencyIndicatorsCourses1.length">
<tr class="hover:table-hover2-hover"> <tr class="hover:table-hover2-hover">
<td class="text-center" colspan="100%"> <td class="text-center" colspan="100%">
ไม่พบข้อมูล ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="appraisalIdp.competencyIndicatorsCourses1.length">
<ng-container *ngFor=" let data of appraisalIdp.competencyIndicatorsCourses1;let i = index">
<tr (mouseenter)="hoveredCode = data.indicatorsCourses0.competencyTopic.competencyTopicId"
(mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': data.indicatorsCourses0.competencyTopic.competencyTopicId === hoveredCode }">
<td class="align-start">
{{i+1}}. {{data.indicatorsCourses0.competencyTopic.competencyTopicId}}
</td>
<td class="align-start !white-space-normal"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.behavioralIndicators||!data.behavioralIndicators.length">
<ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3" *ngFor="let bis of data.behavioralIndicators;let i2 = index">
{{i2+1}}. {{bis.behavioralIndicators }}
</div>
</ng-container>
</td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.ojtJobAssignment">
<ng-container
*ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.ojtJobAssignment">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.coachMentor">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.coachMentor">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.training">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="!p-0"></td>
<td class="align-start text-center"
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan.training||(appraisalIdp.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
<div class="flex !items-center"
*ngFor="let competencyCourse of data.competencyCourse"
style="min-height: 100px;">
<i class="ti ti-book fs-xxl !fw-b"></i><br>
{{competencyCourse.competencyCourseId }}
</div>
</ng-container>
</td> </td>
<td class="align-start text-center !white-space-normal" </tr>
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan.training||(appraisalIdp.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse"> </tbody>
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training"> <tbody *ngIf="appraisalIdp.competencyIndicatorsCourses1.length">
<ng-container *ngFor=" let data of appraisalIdp.competencyIndicatorsCourses1;let i = index">
<tr (mouseenter)="hoveredCode = data.indicatorsCourses0.competencyTopic.competencyTopicId"
(mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': data.indicatorsCourses0.competencyTopic.competencyTopicId === hoveredCode }">
<td class="align-start">
{{i+1}}. {{data.indicatorsCourses0.competencyTopic.competencyTopicId}}
</td>
<td class="align-start !white-space-normal"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.behavioralIndicators||!data.behavioralIndicators.length">
<ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3"
*ngFor="let bis of data.behavioralIndicators;let i2 = index">
{{i2+1}}. {{bis.behavioralIndicators }}
</div>
</ng-container>
</td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.ojtJobAssignment">
<ng-container
*ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.ojtJobAssignment">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.coachMentor">
<ng-container <ng-container
*ngFor="let competencyCourse of data.competencyCourse;let l = index;let last=last"> *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.coachMentor">
<div class="flex !items-center" style="min-height: 100px;"> <i class="ti ti-check fs-xxl !fw-b"></i>
{{competencyCourse.tdesc}} </ng-container>
<span class="ciricon border cursor-pointer" </td>
*ngIf="canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'" <td class="align-start text-center"
(click)="deleteCompetencyCourse(i,l)"> [class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.training">
<i class="ri-close-line text-red-500"></i> <ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
</span> <i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="!p-0"></td>
<td class="align-start text-center"
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan.training||(appraisalIdp.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
<div class="flex !items-center"
*ngFor="let competencyCourse of data.competencyCourse"
style="min-height: 100px;">
<i class="ti ti-book fs-xxl !fw-b"></i><br>
{{competencyCourse.competencyCourseId }}
</div> </div>
<button </ng-container>
*ngIf="last&&canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'" </td>
type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md" <td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan.training||(appraisalIdp.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
<ng-container
*ngFor="let competencyCourse of data.competencyCourse;let l = index;let last=last">
<div class="flex !items-center" style="min-height: 100px;">
{{competencyCourse.tdesc}}
<span class="ciricon border cursor-pointer"
*ngIf="canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'"
(click)="deleteCompetencyCourse(i,l)">
<i class="ri-close-line text-red-500"></i>
</span>
</div>
<button
*ngIf="last&&canEdit&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'"
type="button"
class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
(click)="openCompetencycourseDialog(i) ">
<i class="ri-add-line"></i>
Add
</button>
</ng-container>
</ng-container>
<ng-container
*ngIf="canEdit&&!data.competencyCourse?.length&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'&&data.idpDevelopmentPlan.training">
<button type="button"
class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
(click)="openCompetencycourseDialog(i) "> (click)="openCompetencycourseDialog(i) ">
<i class="ri-add-line"></i> <i class="ri-add-line"></i>
Add Add
</button> </button>
</ng-container> </ng-container>
</ng-container> </td>
<ng-container <td class="!p-0"></td>
*ngIf="canEdit&&!data.competencyCourse?.length&&appraisalIdp.masfromEvaluationIdp.idpStatus=='1'&&data.idpDevelopmentPlan.training"> <td class="align-start text-center !white-space-normal"
<button type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md" [class.bg-table-gray]="!appraisalIdp.masfromEvaluationRound.apsPeriodStart &&!appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
(click)="openCompetencycourseDialog(i) "> <ng-container
<i class="ri-add-line"></i> *ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
Add จาก&nbsp;
</button> </ng-container>
</ng-container> {{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodStart)}}
</td> <ng-container
<td class="!p-0"></td> *ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
<td class="align-start text-center !white-space-normal" &nbsp;ถึง&nbsp;
[class.bg-table-gray]="!appraisalIdp.masfromEvaluationRound.apsPeriodStart &&!appraisalIdp.masfromEvaluationRound.apsPeriodEnd"> </ng-container>
<ng-container {{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodEnd)}}
*ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd"> </td>
จาก&nbsp; </tr>
</ng-container> </ng-container>
{{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodStart)}} </tbody>
<ng-container </table>
*ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd"> </div>
&nbsp;ถึง&nbsp;
</ng-container>
{{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodEnd)}}
</td>
</tr>
</ng-container>
</tbody>
</table>
</div> </div>
</div> </div>
</ng-container> </ng-container>
......
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core'; import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, SimpleChanges, ViewChild } from '@angular/core';
import { CompetencyGradeModel, MyCompetencyGradeModel } from 'src/app/shared/model/competency-grades.model'; import { CompetencyGradeModel, MyCompetencyGradeModel } from 'src/app/shared/model/competency-grades.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 { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service'; import { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service';
import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service'; import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service';
import { Pms } from 'src/app/shared/model/competency.model'; import { Part5Detail, Pms, PmsTopic } from 'src/app/shared/model/competency.model';
export interface Part8Model { export interface Part8Model {
id: number id: number
...@@ -27,14 +27,6 @@ export interface LevelStarModel { ...@@ -27,14 +27,6 @@ export interface LevelStarModel {
styleUrls: ['./pms-kpi.component.scss'] styleUrls: ['./pms-kpi.component.scss']
}) })
export class PmsKpiComponent { export class PmsKpiComponent {
part1show = true
part2show = true
part3show = true
part4show = true
part5show = true
part6show = true
part7show = true
part8show = true
data8List: Part8Model[] = [{ data8List: Part8Model[] = [{
id: 1, id: 1,
evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Corporate KPI)", evaluationFactor: "Part 1 : ประเมินผลการปฏิบัติงานตามนโยบายบริษัท (Corporate KPI)",
...@@ -85,18 +77,23 @@ export class PmsKpiComponent { ...@@ -85,18 +77,23 @@ export class PmsKpiComponent {
scoreObtained: 0, scoreObtained: 0,
netScore: 0, netScore: 0,
}] }]
part9show = true partShow: string[] = []
part10show = true partOpen: Map<string, boolean> = new Map<string, boolean>()
partScore: Map<string, number> = new Map<string, number>()
@Input() evaluateeId = "" @Input() evaluateeId = ""
@Input() evaluaterId = "" @Input() evaluaterId = ""
@Input() appraisalPms?: Pms @Input() appraisalPms?: Pms
@Input() canEdit = false @Input() canEdit = false
@Input() currentStep = "" @Input() currentStep = ""
@Input() currentTap = "" @Input() currentTap = ""
@Input() currentPart = ""
@Input() dateIso = "" @Input() dateIso = ""
@Output() kpiFormRemain: EventEmitter<any> = new EventEmitter<any>(); @Output() kpiFormRemain: EventEmitter<any> = new EventEmitter<any>();
@Output() kpiForm: EventEmitter<any> = new EventEmitter<any>(); @Output() kpiForm: EventEmitter<any> = new EventEmitter<any>();
@Output() scorePart: EventEmitter<any> = new EventEmitter<any>();
groupGrade: { loading: boolean, dataList: CompetencyGradeModel[] } = { loading: false, dataList: [] } groupGrade: { loading: boolean, dataList: CompetencyGradeModel[] } = { loading: false, dataList: [] }
@ViewChild('scrollContainer') scrollContainer!: ElementRef;
constructor(private appraisalService: AppraisalService, constructor(private appraisalService: AppraisalService,
private pmsGroupGradeService: PmsGroupGradeService, private pmsGroupGradeService: PmsGroupGradeService,
private employeeService: EmployeeService, private employeeService: EmployeeService,
...@@ -104,12 +101,30 @@ export class PmsKpiComponent { ...@@ -104,12 +101,30 @@ export class PmsKpiComponent {
private settingAssessmentService: SettingAssessmentService private settingAssessmentService: SettingAssessmentService
) { ) {
} }
getTargetDetailValue(item: any): string {
const targetDetail = ['', 'targetEdetail', 'targetDdetail', 'targetCdetail', 'targetBdetail', 'targetAdetail']
const index = this.partScore.get(item.groupAssessment1.pmsTopic.pmsTopicId) ?? item.scoreTopicExpectation;
const key = targetDetail[index ?? 0] as keyof PmsTopic;
return item.groupAssessment1.pmsTopic[key];
}
getTargetDetailValuePart5(item: any): string {
const targetDetail = ['', 'targetEDetail', 'targetDDetail', 'targetCDetail', 'targetBDetail', 'targetADetail']
const index = this.partScore.get(item.tdesc) ?? item.pmsWorkingTimScore;
const key = targetDetail[index ?? 0] as keyof Part5Detail;
return item[key];
}
// ngOnChanges(changes: SimpleChanges): void { // ngOnChanges(changes: SimpleChanges): void {
// if (changes['evaluateeId']?.currentValue || changes['evaluaterId']?.currentValue) { // if (changes['evaluateeId']?.currentValue || changes['evaluaterId']?.currentValue) {
// this.toggleAllParts(this.evaluateeId == this.evaluaterId) // this.toggleAllParts(this.evaluateeId == this.evaluaterId)
// } // }
// } // }
ngOnInit(): void { ngOnInit(): void {
this.partOpen.clear()
this.partShow = this.currentTap == 'ประเมินผลการปฏิบัติงาน' ? ['PART 1', 'PART 2', 'PART 3', 'PART 4', 'PART 5', 'PART 6', 'PART 7'] : ['PART 8', 'PART 9', 'PART 10']
this.partShow.forEach(x => {
this.partOpen.set(x, false)
})
this.getPmsGroupGradeList() this.getPmsGroupGradeList()
this.getAppraisalPmsForm() this.getAppraisalPmsForm()
this.allFormRemain() this.allFormRemain()
...@@ -412,26 +427,24 @@ export class PmsKpiComponent { ...@@ -412,26 +427,24 @@ export class PmsKpiComponent {
toggleAllParts(check: boolean) { toggleAllParts(check: boolean, part?: string) {
this.part1show = check this.partOpen.forEach((_, key) => {
this.part2show = check if (part) {
this.part3show = check if (part == key) {
this.part4show = check this.partOpen.set(key, check)
this.part5show = check } else {
this.part6show = check if (check) {
this.part7show = check this.currentPart = part
this.part8show = check this.partOpen.set(key, false)
this.part9show = check } else {
this.part10show = check this.currentPart = ''
} }
}
scrollToTable(event: MouseEvent) { } else {
const target = event.target as HTMLElement; this.partOpen.set(key, check)
const position = target.getBoundingClientRect(); this.currentPart = ''
window.scrollTo({ }
top: position.top + window.scrollY - 100, })
behavior: 'smooth'
});
} }
part1Remain() { part1Remain() {
...@@ -500,4 +513,37 @@ export class PmsKpiComponent { ...@@ -500,4 +513,37 @@ export class PmsKpiComponent {
this.kpiFormRemain.emit(remain) this.kpiFormRemain.emit(remain)
} }
remainList() {
return [
this.part1Remain(),
this.part2Remain(),
this.part3Remain(),
-1,
this.part5Remain(),
this.part6Remain(),
this.part7Remain()
];
}
sendScorePart() {
if (this.appraisalPms) {
const score = this.data8List.map((x, i) => ({ text: "PART " + (i + 1), score: this.numberFixed2(x.netScore) })).concat([{ text: "สุทธิ", score: this.calNetScore() + '' }, { text: "Grade", score: this.appraisalPms.gradeScore }])
this.scorePart.emit(score)
}
}
scrollToMenu(id: string) {
setTimeout(() => {
const container = this.scrollContainer?.nativeElement as HTMLElement;
const target = document.getElementById(id);
if (container && target) {
const containerTop = container.getBoundingClientRect().top;
const targetTop = target.getBoundingClientRect().top;
const scrollOffset = targetTop - containerTop;
container.scrollTop += scrollOffset;
}
}, 0);
}
} }
<ng-container *ngIf="!onEdit"> <ng-container *ngIf="!onEdit">
<app-page-header [pathTitle]="pathTitle"></app-page-header> <!-- <app-page-header [pathTitle]="pathTitle"></app-page-header> -->
<ng-container *ngTemplateOutlet="selfEvaluation"></ng-container> <ng-container *ngTemplateOutlet="selfEvaluation"></ng-container>
</ng-container> </ng-container>
<ng-template #selfEvaluation> <ng-template #selfEvaluation>
......
<ng-container *ngIf="pageEvalution==''"> <ng-container *ngIf="pageEvalution==''">
<app-page-header [pathTitle]="pathTitle"></app-page-header>
<div class="bg-card-white"> <div class="bg-card-white">
</div> </div>
<div class="block-main-content"> <div class="block-main-content">
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<!-- End::main-sidebar-header --> <!-- End::main-sidebar-header -->
<!-- ::main-sidebar --> <!-- ::main-sidebar -->
<ngx-simplebar [options]="options" style="background-color: #154C9C;"> <ngx-simplebar [options]="options" style="background-color: #174dd3;">
<div class="main-sidebar" id="sidebar-scroll"> <div class="main-sidebar" id="sidebar-scroll">
<!-- Start::nav --> <!-- Start::nav -->
<nav class="main-menu-container nav nav-pills flex-column sub-open active open"> <nav class="main-menu-container nav nav-pills flex-column sub-open active open">
......
...@@ -3457,7 +3457,7 @@ export interface GroupAssessment1 { ...@@ -3457,7 +3457,7 @@ export interface GroupAssessment1 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel personalLevelModel: PersonalLevelModel
pmsGroupAssessment0: PmsGroupAssessment0 pmsGroupAssessment0: PmsGroupAssessment0
pmsTopic: PmsTopic2 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel { export interface PersonalLevelModel {
...@@ -3508,24 +3508,6 @@ export interface PmsType { ...@@ -3508,24 +3508,6 @@ export interface PmsType {
weight: number weight: number
} }
export interface PmsTopic2 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType2
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType2 { export interface PmsType2 {
companyId: string companyId: string
...@@ -3549,7 +3531,7 @@ export interface GroupAssessment12 { ...@@ -3549,7 +3531,7 @@ export interface GroupAssessment12 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel2 personalLevelModel: PersonalLevelModel2
pmsGroupAssessment0: PmsGroupAssessment02 pmsGroupAssessment0: PmsGroupAssessment02
pmsTopic: PmsTopic4 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel2 { export interface PersonalLevelModel2 {
...@@ -3562,7 +3544,7 @@ export interface PersonalLevelModel2 { ...@@ -3562,7 +3544,7 @@ export interface PersonalLevelModel2 {
export interface PmsGroupAssessment02 { export interface PmsGroupAssessment02 {
companyId: string companyId: string
personalLevel: PersonalLevel7 personalLevel: PersonalLevel7
pmsTopic: PmsTopic3 pmsTopic: PmsTopic
} }
export interface PersonalLevel7 { export interface PersonalLevel7 {
...@@ -3572,24 +3554,6 @@ export interface PersonalLevel7 { ...@@ -3572,24 +3554,6 @@ export interface PersonalLevel7 {
tdesc: string tdesc: string
} }
export interface PmsTopic3 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType3
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType3 { export interface PmsType3 {
companyId: string companyId: string
...@@ -3600,24 +3564,7 @@ export interface PmsType3 { ...@@ -3600,24 +3564,7 @@ export interface PmsType3 {
weight: number weight: number
} }
export interface PmsTopic4 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType4
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType4 { export interface PmsType4 {
companyId: string companyId: string
...@@ -3641,7 +3588,7 @@ export interface GroupAssessment13 { ...@@ -3641,7 +3588,7 @@ export interface GroupAssessment13 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel3 personalLevelModel: PersonalLevelModel3
pmsGroupAssessment0: PmsGroupAssessment03 pmsGroupAssessment0: PmsGroupAssessment03
pmsTopic: PmsTopic6 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel3 { export interface PersonalLevelModel3 {
...@@ -3654,7 +3601,7 @@ export interface PersonalLevelModel3 { ...@@ -3654,7 +3601,7 @@ export interface PersonalLevelModel3 {
export interface PmsGroupAssessment03 { export interface PmsGroupAssessment03 {
companyId: string companyId: string
personalLevel: PersonalLevel8 personalLevel: PersonalLevel8
pmsTopic: PmsTopic5 pmsTopic: PmsTopic
} }
export interface PersonalLevel8 { export interface PersonalLevel8 {
...@@ -3664,24 +3611,6 @@ export interface PersonalLevel8 { ...@@ -3664,24 +3611,6 @@ export interface PersonalLevel8 {
tdesc: string tdesc: string
} }
export interface PmsTopic5 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType5
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType5 { export interface PmsType5 {
companyId: string companyId: string
...@@ -3692,24 +3621,6 @@ export interface PmsType5 { ...@@ -3692,24 +3621,6 @@ export interface PmsType5 {
weight: number weight: number
} }
export interface PmsTopic6 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType6
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType6 { export interface PmsType6 {
companyId: string companyId: string
...@@ -3804,7 +3715,7 @@ export interface GroupAssessment14 { ...@@ -3804,7 +3715,7 @@ export interface GroupAssessment14 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel4 personalLevelModel: PersonalLevelModel4
pmsGroupAssessment0: PmsGroupAssessment04 pmsGroupAssessment0: PmsGroupAssessment04
pmsTopic: PmsTopic8 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel4 { export interface PersonalLevelModel4 {
...@@ -3817,7 +3728,7 @@ export interface PersonalLevelModel4 { ...@@ -3817,7 +3728,7 @@ export interface PersonalLevelModel4 {
export interface PmsGroupAssessment04 { export interface PmsGroupAssessment04 {
companyId: string companyId: string
personalLevel: PersonalLevel9 personalLevel: PersonalLevel9
pmsTopic: PmsTopic7 pmsTopic: PmsTopic
} }
export interface PersonalLevel9 { export interface PersonalLevel9 {
...@@ -3827,25 +3738,6 @@ export interface PersonalLevel9 { ...@@ -3827,25 +3738,6 @@ export interface PersonalLevel9 {
tdesc: string tdesc: string
} }
export interface PmsTopic7 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType7
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType7 { export interface PmsType7 {
companyId: string companyId: string
edesc: string edesc: string
...@@ -3855,24 +3747,6 @@ export interface PmsType7 { ...@@ -3855,24 +3747,6 @@ export interface PmsType7 {
weight: number weight: number
} }
export interface PmsTopic8 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType8
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType8 { export interface PmsType8 {
companyId: string companyId: string
...@@ -3896,7 +3770,7 @@ export interface GroupAssessment15 { ...@@ -3896,7 +3770,7 @@ export interface GroupAssessment15 {
companyId: string companyId: string
personalLevelModel: PersonalLevelModel5 personalLevelModel: PersonalLevelModel5
pmsGroupAssessment0: PmsGroupAssessment05 pmsGroupAssessment0: PmsGroupAssessment05
pmsTopic: PmsTopic10 pmsTopic: PmsTopic
} }
export interface PersonalLevelModel5 { export interface PersonalLevelModel5 {
...@@ -3909,7 +3783,7 @@ export interface PersonalLevelModel5 { ...@@ -3909,7 +3783,7 @@ export interface PersonalLevelModel5 {
export interface PmsGroupAssessment05 { export interface PmsGroupAssessment05 {
companyId: string companyId: string
personalLevel: PersonalLevel10 personalLevel: PersonalLevel10
pmsTopic: PmsTopic9 pmsTopic: PmsTopic
} }
export interface PersonalLevel10 { export interface PersonalLevel10 {
...@@ -3919,24 +3793,7 @@ export interface PersonalLevel10 { ...@@ -3919,24 +3793,7 @@ export interface PersonalLevel10 {
tdesc: string tdesc: string
} }
export interface PmsTopic9 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType9
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType9 { export interface PmsType9 {
companyId: string companyId: string
...@@ -3947,24 +3804,7 @@ export interface PmsType9 { ...@@ -3947,24 +3804,7 @@ export interface PmsType9 {
weight: number weight: number
} }
export interface PmsTopic10 {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType10
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType10 { export interface PmsType10 {
companyId: string companyId: string
......
...@@ -7069,8 +7069,8 @@ select option:focus { ...@@ -7069,8 +7069,8 @@ select option:focus {
/* End Tailwind Styles */ /* End Tailwind Styles */
/* Start Variables Styles */ /* Start Variables Styles */
:root { :root {
--color-primary: 21 76 156; --color-primary: 23 77 211;
--color-primary-rgb: 21, 76, 156; --color-primary-rgb: 23 77 211;
--color-secondary: 96 165 250; --color-secondary: 96 165 250;
--color-success: 29 190 90; --color-success: 29 190 90;
--color-info: 159 73 241; --color-info: 159 73 241;
......
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