Commit caf318d4 by Nattana Chaiyamat

ประเมินตนเอง

parent 2f8519d6
<div class="flex w-full">
<div class="ltr:border-r rtl:border-l border-gray-200 dark:border-white/10 w-64">
<nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" data-hs-tabs-vertical="true">
<nav class="flex flex-col space-y-2 whitespace-nowrap" aria-label="Tabs" data-hs-tabs-vertical="true">
<button *ngFor="let item of allCompetencyTypeId ;let i=index" (click)="getAppraisalCompentencyForm(i)"
[class.active]="currentTap==item.shortName" 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"
[id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i"
[attr.aria-controls]="'hs-tab-js-vertical-'+i">
{{item.shortName}}
</button>
</nav>
<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">
<button *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index"
(click)="getAppraisalCompentencyForm(i)" [class.active]="currentTap==appraisalCompentency.comType" 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"
[id]="'hs-tab-js-vertical-item-'+i" [attr.data-hs-tab]="'#hs-tab-js-vertical-'+i"
[attr.aria-controls]="'hs-tab-js-vertical-'+i">
<div class="w-full flex items-center " style="justify-content :space-between;">
{{appraisalCompentency.comType}}
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" [class.fill-mute]="!onFormCompleted(i)" [class.fill-success]="onFormCompleted(i)">
</path>
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</div>
</button>
</nav>
</div>
<div class="flex-1">
<div *ngFor="let item of allCompetencyTypeId ;let i=index" [id]="'hs-tab-js-vertical-'+i" role="tabpanel"
[class.hidden]="currentTap!=item.shortName" [attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i">
<div class="hs-accordion-group w-full" *ngIf="appraisalCompentency.data">
<div class="flex-1 w-full">
<div *ngFor="let appraisalCompentency of appraisalCompentencyList ;let i=index" [id]="'hs-tab-js-vertical-'+i"
role="tabpanel" [class.hidden]="currentTap!=appraisalCompentency.comType"
[attr.aria-labelledby]="'hs-tab-js-vertical-item-'+i">
<div class="hs-accordion-group w-full" *ngIf="appraisalCompentency">
<ng-container>
<div class="pb-2rem px-2rem text-center">
<div class="font-size-18px font-weight-700 text-primary">
......@@ -24,7 +35,7 @@
</div>
</div>
<div class="pb-2rem px-2rem">
<div class="p-2 grid grid-cols-6 gap-3">
<div class="p-2 flex" style="justify-content :space-between;">
<div class="grid-cols-1">
<div class="text-gray-400">เครื่องมือประเมิน</div>
<div class="text-gray-400">O = แบบสังเกต</div>
......@@ -49,22 +60,22 @@
</div>
</div>
<div class="pb-2rem px-2rem">
<div id="hs-tab-js-vertical-1" role="tabpanel" aria-labelledby="hs-tab-js-vertical-item-1"
*ngIf="appraisalCompentency.data">
<div class="hs-accordion-group w-full">
<div *ngIf="appraisalCompentencyFilter().length">
<div class="hs-accordion-group w-full" data-hs-accordion-always-open>
<ng-container *ngFor="let item2 of appraisalCompentencyFilter();let i = index">
<div
class="hs-accordion active 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-1">
<button
[id]="'hs-primary-heading-'+i">
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
[attr.aria-controls]="'hs-primary-collapse-'+i" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path *ngIf="onFormCompleted(item2)"
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-green-500"></path>
<path *ngIf="onFormCompleted(item2)"
fill="currentColor" [class.fill-mute]="!onInFormCompleted(item2)"
[class.fill-success]="onInFormCompleted(item2)"></path>
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
......@@ -86,9 +97,9 @@
stroke="currentColor" stroke-width="2" stroke-linecap="round" />
</svg>
</button>
<div id="hs-primary-collapse-1"
<div [id]="'hs-primary-collapse-'+i"
class="hs-accordion-content !w-full overflow-hidden transition-[height] duration-300"
aria-labelledby="hs-primary-heading-1">
[attr.aria-labelledby]="'hs-primary-heading-'+i">
<div class="box-body">
<div class="space-y-4">
<ng-container
......@@ -130,7 +141,6 @@
</div>
</div>
</div>
<div class="pb-1rem px-2rem">
<div class="py-2 grid grid-cols-11">
<div class="col-span-8">ระดับความสามารถ (Target Degree)</div>
......@@ -142,15 +152,15 @@
<div class="col-span-8">รวมจำนวนเครื่องหมายแต่ละช่อง (1)</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-1 text-center">
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck5}}</div>
{{appraisalCompentency.masfromEvaluationAssessment1lList[0].numberCheck5}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck4}}</div>
{{appraisalCompentency.masfromEvaluationAssessment1lList[0].numberCheck4}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck3}}</div>
{{appraisalCompentency.masfromEvaluationAssessment1lList[0].numberCheck3}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck2}}</div>
{{appraisalCompentency.masfromEvaluationAssessment1lList[0].numberCheck2}}</div>
<div class="col-span-1 text-center">
{{appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck1}}</div>
{{appraisalCompentency.masfromEvaluationAssessment1lList[0].numberCheck1}}</div>
</div>
</div>
<div class="py-2 grid grid-cols-11">
......@@ -173,7 +183,7 @@
<div class="col-span-8">คะแนนรวมหลังถ่วงน้ำหนัก</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-5 text-center">
{{showNumber(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].weightedTotal)}}
{{showNumber(appraisalCompentency.masfromEvaluationAssessment1lList[0].weightedTotal)}}
</div>
</div>
</div>
......@@ -181,7 +191,7 @@
<div class="col-span-8">คะแนนเฉลี่ยคิดเป็น</div>
<div class="col-span-3 grid grid-cols-5">
<div class="col-span-5 text-center">
{{showNumber(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore)}}
{{showNumber(appraisalCompentency.masfromEvaluationAssessment1lList[0].averageScore)}}
</div>
</div>
</div>
......@@ -222,10 +232,10 @@
</div>
</td>
<td class="align-start text-center">
{{calAverage(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore)}}
{{calAverage(appraisalCompentency.masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
<td class="align-start text-center">
{{calGap(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore)}}
{{calGap(appraisalCompentency.masfromEvaluationAssessment1lList[0].averageScore)}}
</td>
</tr>
<tr (mouseenter)="hoveredCode2 = 'true'" (mouseleave)="hoveredCode2 = null"
......@@ -243,154 +253,154 @@
<div class="py-2 grid grid-cols-7 gap-3">
<div class="col-span-1">ผู้รับการประเมิน</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsassessy.thFullName}}</div>
{{appraisalCompentency.apsassessy.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none "
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsassessyStatus=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsassessyStatus=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='0'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='0'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsassessyComment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='0'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='0'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsassessyComment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsassessyDate)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsassessyDate)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.data.apsapprove1.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.apsapprove1.employeeId">
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
{{appraisalCompentency.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove1.thFullName}}</div>
{{appraisalCompentency.apsapprove1.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Status=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove1Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='1'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='1'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Comment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='1'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='1'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove1Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove1Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.data.apsapprove2.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.apsapprove2.employeeId">
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
{{appraisalCompentency.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove2.thFullName}}</div>
{{appraisalCompentency.apsapprove2.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Status=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove2Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='2'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='2'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Comment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='2'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='2'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove2Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove2Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.data.apsapprove3.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.apsapprove3.employeeId">
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
{{appraisalCompentency.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove3.thFullName}}</div>
{{appraisalCompentency.apsapprove3.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Status=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove3Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='3'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='3'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Comment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='3'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='3'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove3Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove3Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.data.apsapprove4.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.apsapprove4.employeeId">
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
{{appraisalCompentency.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove4.thFullName}}</div>
{{appraisalCompentency.apsapprove4.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Status=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove4Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='4'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='4'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Comment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='4'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='4'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove4Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove4Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.data.apsapprove5.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalCompentency.apsapprove5.employeeId">
<div class="col-span-1">
ผู้อนุมัติ
</div>
<div class="col-span-1">
{{appraisalCompentency.data.apsapprove5.thFullName}}</div>
{{appraisalCompentency.apsapprove5.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove5Status=='2'">
[checked]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove5Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='5'||!canSave"
[readonly]="!appraisalCompentency.data||appraisalCompentency.data.currentStep!='5'||!canSave"
[(ngModel)]="appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove5Comment"></textarea>
[class.!bg-input-readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='5'||!canSave"
[readonly]="!appraisalCompentency||appraisalCompentency.currentStep!='5'||!canSave"
[(ngModel)]="appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove5Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
{{convertDate(appraisalCompentency.masfromEvaluationAssessment1lList[0].apsapprove5Date)}}
</span>
</div>
</div>
</div>
<div class="flex justify-center mb-1rem pb-2rem" *ngIf="canSave">
<button *ngIf="appraisalCompentency.data.checkStep!='0'&&appraisalCompentency.data.checkStep!='1'"
type="submit" class="ti-btn ti-btn-danger mx-2rem" (click)="save('noApprove')">
<button *ngIf="appraisalCompentency.checkStep!='0'&&appraisalCompentency.checkStep!='1'" type="submit"
class="ti-btn ti-btn-danger mx-2rem" (click)="save('noApprove')">
ไม่อนุมัติ
</button>
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save('draft')">
บันทึกร่าง
</button>
<button type="submit" class="ti-btn ti-btn-secondary mx-2rem" (click)="save('approve')">
<ng-container *ngIf="appraisalCompentency.data.checkStep=='0'">
<ng-container *ngIf="appraisalCompentency.checkStep=='0'">
ยืนยันข้อมูล
</ng-container>
<ng-container *ngIf="appraisalCompentency.data.checkStep!='0'">
<ng-container *ngIf="appraisalCompentency.checkStep!='0'">
อนุมัติ
</ng-container>
</button>
......
.no-interaction {
pointer-events: none;
cursor: not-allowed;
}
\ No newline at end of file
pointer-events: none;
cursor: not-allowed;
}
\ No newline at end of file
import { ViewportScroller } from '@angular/common';
import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { AppraisalCompentencyModel2, MasfromEvaluationAssessment2List } from 'src/app/shared/model/appraisal-competency.model';
import { TypeList } from 'src/app/shared/model/appraisal-subordinate.model';
import { Competency, MasfromEvaluationAssessment2List } from 'src/app/shared/model/competency.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { SettingAssessmentModel, MySettingAssessmentModel } from 'src/app/shared/model/setting-assessment.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service';
......@@ -14,18 +14,18 @@ import Swal from 'sweetalert2';
})
export class PmsCompetencyComponent {
@Input() currentTap = ""
@Input() evaluationRoundId = ""
@Input() evaluateeId = ""
@Input() evaluaterId = ""
@Input() allCompetencyTypeId: TypeList[] = []
@Input() appraisalCompentencyList: Competency[] = []
appraisalCompentencyIndex = 0
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
@Output() allFormCompleted: EventEmitter<any> = new EventEmitter<any>();
canEdit = false
canSave = false
hoveredCode: string | null = null;
hoveredCode2: string | null = null;
currentDate = new Date()
appraisalCompentency: { loading: boolean, data?: AppraisalCompentencyModel2 } = { loading: false, data: undefined }
setting: { loading: boolean, data: SettingAssessmentModel } = { loading: false, data: new MySettingAssessmentModel() }
checkSheet: {
......@@ -40,10 +40,14 @@ export class PmsCompetencyComponent {
constructor(private appraisalService: AppraisalService,
private employeeService: EmployeeService,
private cdr: ChangeDetectorRef,
private viewScroller: ViewportScroller,
private settingAssessmentService: SettingAssessmentService
) {
}
ngOnInit(): void {
if (this.appraisalCompentencyList.length) {
this.currentTap = this.currentTap == '' ? this.appraisalCompentencyList[0].comType : this.currentTap
}
this.getAppraisalCompentencyForm(0)
this.getSettingList()
this.getEvaluatee()
......@@ -77,97 +81,89 @@ export class PmsCompetencyComponent {
})
}
getAppraisalCompentencyForm(index: number) {
if (this.allCompetencyTypeId.length) {
this.appraisalCompentency.loading = true
this.appraisalCompentency.data = undefined
this.appraisalService.getFormCompentencyById(this.evaluationRoundId, this.evaluateeId, this.allCompetencyTypeId[index].competencyTypeId).subscribe({
next: response => {
this.appraisalCompentency.data = JSON.parse(JSON.stringify(response))
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
this.canSave = (this.appraisalCompentency.data.currentStep == this.appraisalCompentency.data.checkStep) && this.appraisalCompentency.data.masfromStatusType.code != 'Boss_finish' && this.appraisalCompentency.data.masfromStatusType.code != 'Not_evaluating_yet'
this.canEdit = (this.appraisalCompentency.data.currentStep == this.appraisalCompentency.data.checkStep && (+(this.appraisalCompentency.data.checkStep) <= 1)) && this.appraisalCompentency.data.masfromStatusType.code != 'Boss_finish' && this.appraisalCompentency.data.masfromStatusType.code != 'Not_evaluating_yet'
switch (this.appraisalCompentency.data?.currentStep) {
case ("0"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("1"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("2"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("3"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("4"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("5"): {
if (this.canSave) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove5Date = this.currentDate.toISOString().split('T')[0];
}
break
}
default: { return }
if (this.appraisalCompentencyList.length) {
this.appraisalCompentencyIndex = index
this.currentTap = this.appraisalCompentencyList[this.appraisalCompentencyIndex].comType
this.cdr.detectChanges()
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
this.canSave = (this.appraisalCompentencyList[this.appraisalCompentencyIndex].currentStep == this.appraisalCompentencyList[this.appraisalCompentencyIndex].checkStep) && this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromStatusType.code != 'Boss_finish' && this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromStatusType.code != 'Not_evaluating_yet'
this.canEdit = (this.appraisalCompentencyList[this.appraisalCompentencyIndex].currentStep == this.appraisalCompentencyList[this.appraisalCompentencyIndex].checkStep && (+(this.appraisalCompentencyList[this.appraisalCompentencyIndex].checkStep) <= 1)) && this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromStatusType.code != 'Boss_finish' && this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromStatusType.code != 'Not_evaluating_yet'
switch (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.currentStep) {
case ("0"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
break
}
this.calnumberCheck()
this.appraisalCompentency.loading = false
this.cdr.detectChanges()
}, error: error => {
this.appraisalCompentency.loading = false
this.cdr.detectChanges()
case ("1"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove1Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("2"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove2Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("3"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("4"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove4Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("5"): {
if (this.canSave) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove5Date = this.currentDate.toISOString().split('T')[0];
}
break
}
default: { return }
}
})
}
this.calnumberCheck()
this.cdr.detectChanges()
}
}
appraisalCompentencyFilter() {
return this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List || []
return this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List || []
}
calnumberCheck() {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck1 = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 1).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck2 = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 2).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck3 = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 3).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck4 = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 4).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck5 = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 5).length).reduce((acc: any, num: any) => acc + num, 0)
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck1 = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 1).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck2 = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 2).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck3 = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 3).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck4 = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 4).length).reduce((acc: any, num: any) => acc + num, 0)
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck5 = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.filter((y: any) => y.competencyBehavioral.scoreTopicExpectation == 5).length).reduce((acc: any, num: any) => acc + num, 0)
this.calWeightTotal()
}
this.cdr.detectChanges()
}
calWeightScore(numberCheck: number) {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
switch (numberCheck) {
case (1): {
return this.showNumber((this.setting.data.settingScore1) * this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck1)
return this.showNumber((this.setting.data.settingScore1) * this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck1)
}
case (2): {
return this.showNumber((this.setting.data.settingScore2) * this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck2)
return this.showNumber((this.setting.data.settingScore2) * this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck2)
}
case (3): {
return this.showNumber((this.setting.data.settingScore3) * this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck3)
return this.showNumber((this.setting.data.settingScore3) * this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck3)
}
case (4): {
return this.showNumber((this.setting.data.settingScore4) * this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck4)
return this.showNumber((this.setting.data.settingScore4) * this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck4)
}
case (5): {
return this.showNumber((this.setting.data.settingScore5) * this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].numberCheck5)
return this.showNumber((this.setting.data.settingScore5) * this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].numberCheck5)
}
default: { return }
}
......@@ -175,16 +171,16 @@ export class PmsCompetencyComponent {
return
}
calWeightTotal() {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].weightedTotal = 0
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].weightedTotal = +(((this.calWeightScore(1) ?? 0) + (this.calWeightScore(2) ?? 0) + (this.calWeightScore(3) ?? 0) + (this.calWeightScore(4) ?? 0) + (this.calWeightScore(5) ?? 0)).toFixed(2))
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].weightedTotal = 0
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].weightedTotal = +(((this.calWeightScore(1) ?? 0) + (this.calWeightScore(2) ?? 0) + (this.calWeightScore(3) ?? 0) + (this.calWeightScore(4) ?? 0) + (this.calWeightScore(5) ?? 0)).toFixed(2))
this.cdr.detectChanges()
this.calAverageScore()
}
}
calAverageScore() {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
const length = this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.length).reduce((acc: any, num: any) => acc + num, 0)
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
const length = this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.map((x: any) => x.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.length).reduce((acc: any, num: any) => acc + num, 0)
const max = Math.max(...[+(this.setting.data.settingScore5),
+(this.setting.data.settingScore4),
+(this.setting.data.settingScore3),
......@@ -192,8 +188,8 @@ export class PmsCompetencyComponent {
+(this.setting.data.settingScore1)])
const total = length * max
if (total) {
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore = 0
this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].averageScore = this.showNumber((this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].weightedTotal * 100) / total)
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore = 0
this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].averageScore = this.showNumber((this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].weightedTotal * 100) / total)
this.cdr.detectChanges()
}
}
......@@ -213,15 +209,15 @@ export class PmsCompetencyComponent {
}
}
calGap(score: number | string) {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0]) {
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0]) {
const roundedScore = this.showNumber(score) % 1 <= 0.5 ? Math.floor(this.showNumber(score)) : Math.round(this.showNumber(score));
if (roundedScore >= 90 && roundedScore <= 100) {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck3) {
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck3) {
return "-1";
}
return "+1";
} else if (roundedScore >= 80 && roundedScore <= 89) {
if (this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentency.data?.masfromEvaluationAssessment1lList[0].numberCheck3) {
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck1 || this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck2 || this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.masfromEvaluationAssessment1lList[0].numberCheck3) {
return "-1";
}
return "0";
......@@ -270,7 +266,7 @@ export class PmsCompetencyComponent {
approveStatus = '1'
} else if (status == 'approve') {
approveStatus = '2'
if (this.appraisalCompentency?.data?.checkStep == '0') {
if (this.appraisalCompentencyList[this.appraisalCompentencyIndex].checkStep == '0') {
title = 'ยืนยันข้อมูล'
text = 'คุณต้องการยืนยันข้อมูลการประเมินนี้ใช่หรือไม่'
confirmButtonText = 'ยืนยันการบันทึก'
......@@ -315,7 +311,7 @@ export class PmsCompetencyComponent {
cancelButton: '!swal2-button-bg-gray',
},
}).then((result) => {
if (result.isConfirmed && this.appraisalCompentency) {
if (result.isConfirmed && this.appraisalCompentencyList[this.appraisalCompentencyIndex]) {
this.saveApi(approveStatus)
} else if (result.dismiss === Swal.DismissReason.cancel) {
Swal.fire({
......@@ -330,12 +326,12 @@ export class PmsCompetencyComponent {
})
}
saveApi(approveStatus: string) {
let body = this.appraisalCompentency.data
switch (this.appraisalCompentency.data?.currentStep) {
let body = this.appraisalCompentencyList[this.appraisalCompentencyIndex]
switch (this.appraisalCompentencyList[this.appraisalCompentencyIndex]?.currentStep) {
case ("0"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsassessyStatus: approveStatus
}]
}
......@@ -343,8 +339,8 @@ export class PmsCompetencyComponent {
}
case ("1"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsapprove1Status: approveStatus
}]
}
......@@ -352,9 +348,9 @@ export class PmsCompetencyComponent {
}
case ("2"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
apsapprove1Status: approveStatus == '0' ? approveStatus : this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove1Status,
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsapprove1Status: approveStatus == '0' ? approveStatus : this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove1Status,
apsapprove2Status: approveStatus
}]
}
......@@ -362,9 +358,9 @@ export class PmsCompetencyComponent {
}
case ("3"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
apsapprove2Status: approveStatus == '0' ? approveStatus : this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove2Status,
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsapprove2Status: approveStatus == '0' ? approveStatus : this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove2Status,
apsapprove3Status: approveStatus
}]
}
......@@ -372,9 +368,9 @@ export class PmsCompetencyComponent {
}
case ("4"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
apsapprove3Status: approveStatus == '0' ? approveStatus : this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove3Status,
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsapprove3Status: approveStatus == '0' ? approveStatus : this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove3Status,
apsapprove4Status: approveStatus
}]
}
......@@ -382,9 +378,9 @@ export class PmsCompetencyComponent {
}
case ("5"): {
body = {
...this.appraisalCompentency.data, masfromEvaluationAssessment1lList: [{
...this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0],
apsapprove4Status: approveStatus == '0' ? approveStatus : this.appraisalCompentency.data.masfromEvaluationAssessment1lList[0].apsapprove4Status,
...this.appraisalCompentencyList[this.appraisalCompentencyIndex], masfromEvaluationAssessment1lList: [{
...this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0],
apsapprove4Status: approveStatus == '0' ? approveStatus : this.appraisalCompentencyList[this.appraisalCompentencyIndex].masfromEvaluationAssessment1lList[0].apsapprove4Status,
apsapprove5Status: approveStatus
}]
}
......@@ -392,42 +388,67 @@ export class PmsCompetencyComponent {
}
default: { return }
}
this.appraisalService.postCompetency(body).subscribe({
next: response => {
if (response.success) {
Swal.fire({
title: 'บันทึกสำเร็จ!',
text: 'การประเมินของคุณถูกบันทึกแล้ว',
icon: 'success',
customClass: {
confirmButton: '!swal2-button-bg-green',
}
});
this.getAppraisalCompentencyForm(0)
} else {
Swal.fire({
title: 'ยกเลิก!',
text: 'การบันทึกถูกยกเลิก',
icon: 'error',
customClass: {
confirmButton: '!swal2-button-bg-danger',
}
});
}
}, error: error => {
Swal.fire({
title: 'ยกเลิก!',
text: 'การบันทึกถูกยกเลิก',
icon: 'error',
customClass: {
confirmButton: '!swal2-button-bg-danger',
}
});
}
})
// this.appraisalService.postCompetency(body).subscribe({
// next: response => {
// if (response.success) {
// Swal.fire({
// title: 'บันทึกสำเร็จ!',
// text: 'การประเมินของคุณถูกบันทึกแล้ว',
// icon: 'success',
// customClass: {
// confirmButton: '!swal2-button-bg-green',
// }
// });
// this.getAppraisalCompentencyForm(0)
// } else {
// Swal.fire({
// title: 'ยกเลิก!',
// text: 'การบันทึกถูกยกเลิก',
// icon: 'error',
// customClass: {
// confirmButton: '!swal2-button-bg-danger',
// }
// });
// }
// }, error: error => {
// Swal.fire({
// title: 'ยกเลิก!',
// text: 'การบันทึกถูกยกเลิก',
// icon: 'error',
// customClass: {
// confirmButton: '!swal2-button-bg-danger',
// }
// });
// }
// })
}
onFormCompleted(data: MasfromEvaluationAssessment2List) {
onInFormCompleted(data: MasfromEvaluationAssessment2List) {
return data.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.every(x => x.competencyBehavioral.scoreTopicExpectation != 0)
}
onFormCompleted(index: number) {
const formCompleted = this.appraisalCompentencyList[index]?.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.every(data =>
data.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.every(x => x.competencyBehavioral.scoreTopicExpectation != 0)
)
this.onAllFormCompleted()
return formCompleted
}
onAllFormCompleted() {
const formCompleted = this.appraisalCompentencyList.every(data => {
data.masfromEvaluationAssessment1lList[0].masfromEvaluationAssessment2List.every(data =>
data.groupAssessment1.competencyIndicatorsCourses1Mini.behavioralIndicatorsList.every(x => x.competencyBehavioral.scoreTopicExpectation != 0)
)
})
this.allFormCompleted.emit(formCompleted)
}
scrollToTable(event: MouseEvent) {
const target = event.target as HTMLElement;
const position = target.getBoundingClientRect();
window.scrollTo({
top: position.top + window.scrollY - 100,
behavior: 'smooth'
});
}
}
......@@ -19,331 +19,427 @@
</div>
</div>
</div>
<div class="relative pt-0.75rem">
<div class="flex relative before:bg-black/50 before:absolute before:w-full before:h-full">
<img [src]="url2 ? url2 : './assets/img/png-images/2.png'" alt="" class="h-[500px] w-full rounded-sm"
id="profile-img2" />
<span
class="absolute top-5 ltr:right-5 rtl:left-5 flex p-3 rounded-sm ring-1 ring-black/10 text-white bg-black/10 leading-none">
<i class="ri ri-pencil-line ltr:mr-2 rtl:ml-2"></i>
<span>เลือกผู้ประเมิน</span>
<input (change)="onSelectFile2($event)" type="file" name="photo"
class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" id="profile-change2" />
</span>
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ประเมินผลประจำปี {{currentDate.getFullYear()}}
</div>
<div class="pt-0.75rem">
<div class=" px-2rem" [ngClass]="{'border-gray-200 border-b': compentency.dataList.length}">
<nav class=" flex space-x-2 rtl:space-x-reverse">
<a *ngFor="let item of compentency.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.active]="f" href="javascript:void(0);" [id]="'card-type-item-'+(i+1)"
[attr.data-hs-tab]="'#underline-'+(i+1)" [attr.aria-controls]="'underline-'+(i+1)"
(click)="selectDataList(item)">
{{item.tdesc}}
</a>
</nav>
</div>
<div class="absolute top-28 inset-x-0 text-center space-y-3">
<div class="flex justify-center w-full">
<div class="relative cursor-pointer">
<img [src]="url1 ? url1 : './assets/img/users/1.jpg'"
class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" />
</div>
<div class="pt-50px" *ngIf="compentency.dataList.length">
<div *ngFor="let item of compentency.dataList; let i=index;let f=first" [id]="'underline-'+(i+1)" role="tabpanel"
[class.hidden]="!f">
<div class="relative pt-0.75rem">
<div class="flex relative before:bg-black/50 before:absolute before:w-full before:h-full">
<img [src]="url2 ? url2 : './assets/img/png-images/2.png'" alt="" class="h-[500px] w-full rounded-sm"
id="profile-img2" />
<span
class="absolute bottom-0 ltr:right-0 rtl:left-0 block p-1 rounded-full ring-2 ring-white/10 text-white bg-white/10 dark:bg-bgdark leading-none cursor-pointer">
<i class="ri ri-pencil-line cursor-pointer"></i>
<input (change)="onSelectFile1($event)" type="file"
class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" id="profile-change" />
class="absolute top-5 ltr:right-5 rtl:left-5 flex p-3 rounded-sm ring-1 ring-black/10 text-white bg-black/10 leading-none">
<i class="ri ri-pencil-line ltr:mr-2 rtl:ml-2"></i>
<span>เลือกผู้ประเมิน</span>
<input (change)="onSelectFile2($event)" type="file" name="photo"
class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" id="profile-change2" />
</span>
</div>
</div>
<div class="text-white">
<h2 class="text-base font-semibold">{{evaluatee.data.thFullName}}</h2>
<p class="text-xs text-white/50">{{evaluatee.data.email}}</p>
</div>
<div class="flex space-x-2 rtl:space-x-reverse text-center justify-center">
<div id="stars-hover">
<div class="cont">
<div class="stars">
<!-- <bar-rating [(rate)]="starRate" [max]="5" [theme]="'stars'"></bar-rating>
<button type="button" aria-label="button"
class="ti-btn ti-btn-soft-success py-1 px-2 ltr:!ml-3 rtl:!mr-3 mt-1 " id="rater-reset-button">
<i>Grade: A</i>
</button> -->
<div class="absolute top-28 inset-x-0 text-center space-y-3">
<div class="flex justify-center w-full">
<div class="relative cursor-pointer">
<img [src]="url1 ? url1 : './assets/img/users/1.jpg'"
class="w-24 h-24 rounded-full ring-4 ring-white/10 mx-auto" id="profile-img" alt="profile-img" />
<span
class="absolute bottom-0 ltr:right-0 rtl:left-0 block p-1 rounded-full ring-2 ring-white/10 text-white bg-white/10 dark:bg-bgdark leading-none cursor-pointer">
<i class="ri ri-pencil-line cursor-pointer"></i>
<input (change)="onSelectFile1($event)" type="file"
class="absolute inset-0 w-full h-full opacity-0 cursor-pointer" id="profile-change" />
</span>
</div>
</div>
</div>
</div>
</div>
<!-- Start::main-content -->
<div class="main-content -mt-28">
<!-- Start::row-1 -->
<div class="grid grid-cols-12 gap-x-6">
<div class="col-span-12 xxl:col-span-3">
<div class="box">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">ข้อมูลพนักงาน</h5>
</div>
</div>
<div class="box-body py-2">
<div class="xl:overflow-hidden overflow-x-auto">
<table class="ti-custom-table border-0">
<tbody>
<tr class="">
<td class="font-medium !p-2">ตำเเหน่ง</td>
<td class="!p-2">:</td>
<td class="!p-2">{{evaluatee.data.position.tdesc}}</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ฝ่าย</td>
<td class="!p-2">:</td>
<td class="!p-2">{{evaluatee.data.bu1.tdesc}}</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">แผนก</td>
<td class="!p-2">:</td>
<td class="!p-2">{{evaluatee.data.bu2.tdesc}}</td>
</tr>
<tr class="!border-0">
<td class="font-medium !p-2">ส่วน</td>
<td class="!p-2">:</td>
<td class="!p-2">{{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="!p-2">{{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="!p-2">{{evaluatee.data.bu1.tdesc}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="text-white">
<h2 class="text-base font-semibold">{{evaluatee.data.thFullName}}</h2>
<p class="text-xs text-white/50">{{evaluatee.data.email}}</p>
</div>
<div class="box">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">สถานะการประเมิน</h5>
<div class="flex space-x-2 rtl:space-x-reverse text-center justify-center">
<div id="stars-hover">
<div class="cont">
<div class="stars">
<!-- <bar-rating [(rate)]="starRate" [max]="5" [theme]="'stars'"></bar-rating>
<button type="button" aria-label="button"
class="ti-btn ti-btn-soft-success py-1 px-2 ltr:!ml-3 rtl:!mr-3 mt-1 " id="rater-reset-button">
<i>Grade: A</i>
</button> -->
</div>
</div>
</div>
<div class="box-body space-y-4 text-center">
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center">
<div class="h-full w-[3px] bg-gray-100 dark:bg-black/20 pointer-events-none"></div>
</div>
<div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
</div>
</div>
<!-- Start::main-content -->
<div class="main-content -mt-28">
<!-- Start::row-1 -->
<div class="grid grid-cols-12 gap-x-6">
<div class="col-span-12 xxl:col-span-3">
<div class="box">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">ข้อมูลพนักงาน</h5>
</div>
</div>
<div class="flex w-full pb-8">
<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="my-auto text-gray-500 dark:text-white/70">
<span class="text-dark dark:text-white">Anesthesia</span>
</h3>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
yesterday, 05:06 pm
</p>
</div>
<div class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
<p class="text-xs text-gray-500 dark:text-white/70">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Nostrum sit consequuntur quia aperiam quibusdam rerum ut! Id
ducimus nobis rerum modi veniam odit totam rem asperiores
adipisci, sed quia voluptas?
</p>
</div>
<div class="box-body py-2">
<div class="xl:overflow-hidden overflow-x-auto">
<table class="ti-custom-table border-0 ellipsis-text">
<tbody>
<tr class="">
<td class="font-medium !p-2">ตำเเหน่ง</td>
<td class="!p-2">:</td>
<td class="font-medium !p-2">
{{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">
{{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">
{{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">
{{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">
{{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">
{{evaluatee.data.bu5.tdesc}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center">
<div class="h-full w-[3px] bg-gray-100 dark:bg-black/20 pointer-events-none"></div>
</div>
<div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
<div class="box">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">สถานะการประเมิน</h5>
</div>
</div>
<div class="flex w-full pb-8">
<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="my-auto text-gray-500 dark:text-white/70">
<span class="text-dark dark:text-white">Anesthesia</span>
</h3>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
yesterday, 05:06 pm
</p>
<div class="box-body space-y-4 text-center">
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center pb-4">
<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">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-success"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</div>
<!-- <div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
</div> -->
</div>
<div class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
<p class="text-xs text-gray-500 dark:text-white/70">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Nostrum sit consequuntur quia aperiam quibusdam rerum ut! Id
ducimus nobis rerum modi veniam odit totam rem asperiores
adipisci, sed quia voluptas?
</p>
<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">
ผู้รับการประเมิน
</span>
<br>
<span class="text-dark dark:text-white">
วีรพงศ์test_UAT สกุลทดสอบ1
</span>
<br>
<p class="text-xs text-gray-500 dark:text-white/70">
ประเมินแล้ว
</p>
</h3>
</div>
</div>
</div>
</div>
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center pb-4">
<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">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-mute"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</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">
ผู้ประเมิน1
</span>
<br>
<span class="text-dark dark:text-white">
วีรพงศ์test_UAT สกุลทดสอบ1
</span>
<br>
<p class="text-xs text-gray-500 dark:text-white/70">
ยังไม่ถึงขั้นตอนดำเนินการ
</p>
</h3>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center">
<div class="h-full w-[3px] bg-gray-100 dark:bg-black/20 pointer-events-none"></div>
</div>
<div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
<div class="box">
<div class="box-header">
<div class="flex justify-between">
<h5 class="box-title">Timeline</h5>
</div>
</div>
<div class="flex w-full pb-8">
<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="my-auto text-gray-500 dark:text-white/70">
<span class="text-dark dark:text-white">Anesthesia</span>
</h3>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
yesterday, 05:06 pm
</p>
<div class="box-body space-y-4 text-center">
<div class="flex flex-row" *ngFor="let item of [
' ไม่รู้จะพูดยังไงดี นอกจากคำว่าประทับใจมาก ๆ ทุกอย่างลงตัว ทั้งอารมณ์ ความรู้สึก และบรรยากาศขอบคุณที่สร้างสรรค์อะไรดี ๆแบบนี้ออกมาให้ได้เห็น',
'ตอนแรกก็ไม่ได้คาดหวังอะไรขนาดนั้น แต่พอได้สัมผัสจริง ๆ มันเกินคาดมาก มีความสุขแบบที่ไม่ได้รู้สึกมานานแล้ว อยากบอกว่าทำต่อไปนะ เราเชื่อว่ามีอีกหลายคนที่รู้สึกเหมือนกัน',
'นั่งอ่านวนอยู่หลายรอบเลยอะ ทุกคำ ทุกภาพ มันสะกิดใจแบบอธิบายไม่ถูก อยากให้คนที่ยังลังเลได้ลองเปิดใจดูจริง ๆ',
'เอาจริง ๆ ไม่ค่อยเจออะไรที่ทำให้ยิ้มได้แบบนี้บ่อย ๆ นะ มันเป็นความรู้สึกเล็ก ๆ ที่โคตรยิ่งใหญ่สำหรับเรา ขอบคุณที่ทำให้โลกใบนี้ดูน่ารักขึ้นอีกนิดนึง'
]; let i=index">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center pb-4">
<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">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-success"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</div>
<!-- <div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
</div> -->
</div>
<div class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
<p class="text-xs text-gray-500 dark:text-white/70">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Nostrum sit consequuntur quia aperiam quibusdam rerum ut! Id
ducimus nobis rerum modi veniam odit totam rem asperiores
adipisci, sed quia voluptas?
</p>
<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" style="white-space: nowrap;">
วีรพงศ์test_UAT สกุลทดสอบ1
</span>
<br>
<div style="display: flex;justify-content :space-between;">
<p class="text-xs text-gray-500 dark:text-white/70">
ประเมินแล้ว
</p>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
พ. 05:06 pm
</p>
</div>
</h3>
</div>
<div
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}}
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="flex flex-row">
<div class="mx-auto relative">
<div class="h-full w-6 flex items-center justify-center">
<div class="h-full w-[3px] bg-gray-100 dark:bg-black/20 pointer-events-none"></div>
</div>
<div class="col-span-12 xxl:col-span-9">
<div class="box">
<div class="box-header">
<nav class="sm:flex sm:space-x-2 space-y-2 sm:space-y-0 rtl:space-x-reverse block" aria-label="Tabs"
role="tablist">
<button type="button" [class.active]="currentTap==''"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-1" data-hs-tab="#profile-1" aria-controls="profile-1" role="tab">
ข้อมูลการประเมิน
</button>
<button type="button" [class.active]="currentTap!='idp'&&currentTap!='pms'&&currentTap!=''"
(click)="currentTapChange()"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-2" data-hs-tab="#profile-2" aria-controls="profile-2" role="tab">
แบบประเมินสมรรถนะ
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" [class.fill-mute]="!compentencyFormCompleted"
[class.fill-success]="compentencyFormCompleted"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</button>
<button type="button" [class.active]="currentTap=='pms'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-3" data-hs-tab="#profile-3" aria-controls="profile-3" role="tab">
แบบประเมินประสิทธิภาพ
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-mute"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</button>
<button *ngIf="evaluationForm=='sup'" type="button" [class.active]="currentTap=='idp'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-4" data-hs-tab="#profile-4" aria-controls="profile-4" role="tab">
แผนพัฒนาบุคคลากร
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16"
fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-mute"></path>
<!-- fill-mute -->
<!-- fill-warning -->
<!-- fill-success -->
<!-- fill-danger -->
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</button>
<button type="button" [class.active]="currentTap=='2'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-4" data-hs-tab="#profile-5" aria-controls="profile-5" role="tab">
สรุปคะแนนและข้อเสนอแนะ
</button>
</nav>
</div>
<div class="box-body">
<div id="profile-1" [class.hidden]="currentTap!=''" role="tabpanel" aria-labelledby="profile-item-1">
<app-pms-information></app-pms-information>
</div>
<div id="profile-2" [class.hidden]="currentTap=='idp'||currentTap=='pms'||currentTap==''"
role="tabpanel" aria-labelledby="profile-item-2">
<ng-container *ngIf="compentency.data&&evaluaterId&&evaluateeId">
<app-pms-competency [currentTap]="currentTap"
[appraisalCompentencyList]="compentency.data.competency" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId"
(allFormCompleted)="compentencyFormCompleted=$event"></app-pms-competency>
</ng-container>
</div>
<div id="profile-3" [class.hidden]="currentTap!='pms'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-3">
<ng-container *ngIf="compentency.data&&evaluateeId&&evaluaterId">
<app-pms-kpi [appraisalPms]="compentency.data.pms" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId"></app-pms-kpi>
</ng-container>
</div>
<div
class="avatar avatar-xs absolute top-0 rounded-full bg-gray-200 shadow text-center ltr:-left-[4px] rtl:-right-[4px]">
<img src="./assets/img/users/21.jpg" class="rounded-full" alt="timeline-img" />
<div id="profile-4" [class.hidden]="currentTap!='idp'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-4">
<ng-container *ngIf="compentency.data&&evaluateeId&&evaluaterId">
<app-pms-idp [appraisalIdp]="compentency.data.idp" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId"></app-pms-idp>
</ng-container>
</div>
<div id="profile-5" [class.hidden]="currentTap!='2'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-5">
<app-pms-summary></app-pms-summary>
</div>
</div>
<div class="flex w-full pb-8">
<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="my-auto text-gray-500 dark:text-white/70">
<span class="text-dark dark:text-white">Anesthesia</span>
</h3>
<p class="my-auto ltr:ml-auto rtl:mr-auto text-gray-500 dark:text-white/70 text-xs">
yesterday, 05:06 pm
</p>
</div>
<div class="border border-gray-200 bg-gray-50 dark:bg-black/20 dark:border-white/10 p-4 rounded-sm">
<p class="text-xs text-gray-500 dark:text-white/70">
Lorem ipsum dolor sit amet consectetur adipisicing elit.
Nostrum sit consequuntur quia aperiam quibusdam rerum ut! Id
ducimus nobis rerum modi veniam odit totam rem asperiores
adipisci, sed quia voluptas?
</p>
</div>
<div class="box-footer text-end space-x-3 rtl:space-x-reverse">
<div class="p-4 space-y-3 border-t border-gray-200 dark:border-white/10">
<!-- <h5 class="text-base font-semibold"> Add New Question</h5> -->
<!-- <img src="./assets/img/png-images/8.png" alt=""> -->
<textarea class="ti-form-input" rows="4" placeholder="Drop Your Question Here...."></textarea>
</div>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-primary"><i
class="ri ri-refresh-line"></i>
ยินยัน</a>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-success"><i
class="ri ri-refresh-line"></i>
บันทึกร่าง</a>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-secondary"><i
class="ri ri-close-circle-line"></i>
ย้อนกลับ</a>
</div>
</div>
</div>
</div>
<!-- End::row-1 -->
</div>
<div class="col-span-12 xxl:col-span-9">
<div class="box">
<div class="box-header">
<nav class="sm:flex sm:space-x-2 space-y-2 sm:space-y-0 rtl:space-x-reverse block" aria-label="Tabs"
role="tablist">
<button type="button" [class.active]="currentTap==''"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-1" data-hs-tab="#profile-1" aria-controls="profile-1" role="tab">
ข้อมูลการประเมิน
</button>
<button type="button" [class.active]="currentTap!='idp'&&currentTap!='pms'&&currentTap!=''"
(click)="currentTapChange()"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-2" data-hs-tab="#profile-2" aria-controls="profile-2" role="tab">
แบบประเมินสมรรถนะ
</button>
<button type="button" [class.active]="currentTap=='pms'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-3" data-hs-tab="#profile-3" aria-controls="profile-3" role="tab">
แบบประเมินประสิทธิภาพ <svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16"
viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.1965 7.85999C15.1965 3.71785 11.8387 0.359985 7.69653 0.359985C3.5544 0.359985 0.196533 3.71785 0.196533 7.85999C0.196533 12.0021 3.5544 15.36 7.69653 15.36C11.8387 15.36 15.1965 12.0021 15.1965 7.85999Z"
fill="currentColor" class="fill-green-500"></path>
<path
d="M10.9295 4.88618C11.1083 4.67577 11.4238 4.65019 11.6343 4.82904C11.8446 5.00788 11.8702 5.32343 11.6914 5.53383L7.44139 10.5338C7.25974 10.7475 6.93787 10.77 6.72825 10.5837L4.47825 8.5837C4.27186 8.40024 4.25327 8.0842 4.43673 7.87781C4.62019 7.67142 4.93622 7.65283 5.14261 7.83629L7.01053 9.49669L10.9295 4.88618Z"
fill="currentColor"></path>
</svg>
</button>
<button *ngIf="evaluationForm=='sup'" type="button" [class.active]="currentTap=='idp'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-4" data-hs-tab="#profile-4" aria-controls="profile-4" role="tab">
แผนพัฒนาบุคคลากร
</button>
<button type="button" [class.active]="currentTap=='2'"
class="hs-tab-active:bg-primary hs-tab-active:border-primary hs-tab-active:text-white dark:hs-tab-active:bg-primary dark:hs-tab-active:border-primary dark:hs-tab-active:text-white py-2 px-3 inline-flex items-center w-full justify-center gap-2 text-sm font-medium text-center border text-gray-500 rounded-sm hover:text-gray-700 dark:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-gray-300"
id="profile-item-4" data-hs-tab="#profile-5" aria-controls="profile-5" role="tab">
สรุปคะแนนและข้อเสนอแนะ
</button>
</nav>
</div>
<div class="box-body">
<div id="profile-1" [class.hidden]="currentTap!=''" role="tabpanel" aria-labelledby="profile-item-1">
<app-pms-information></app-pms-information>
</div>
<div id="profile-2" [class.hidden]="currentTap=='idp'||currentTap=='pms'||currentTap==''" role="tabpanel"
aria-labelledby="profile-item-2">
<ng-container *ngIf="evaluationRoundId&&allCompetencyTypeId&&evaluaterId&&evaluateeId">
<app-pms-competency [currentTap]="currentTap" [evaluationRoundId]="evaluationRoundId"
[evaluaterId]="evaluaterId" [evaluateeId]="evaluateeId"
[allCompetencyTypeId]="allCompetencyTypeId"></app-pms-competency>
</ng-container>
</div>
<div id="profile-3" [class.hidden]="currentTap!='pms'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-3">
<ng-container *ngIf="evaluationRoundId&&evaluateeId&&evaluaterId">
<app-pms-kpi [evaluationRoundId]="evaluationRoundId" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId"></app-pms-kpi>
</ng-container>
</div>
<div id="profile-4" [class.hidden]="currentTap!='idp'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-4">
<ng-container *ngIf="evaluationRoundId&&evaluateeId&&evaluaterId">
<app-pms-idp [evaluationRoundId]="evaluationRoundId" [evaluaterId]="evaluaterId"
[evaluateeId]="evaluateeId"></app-pms-idp>
</ng-container>
</div>
<div id="profile-5" [class.hidden]="currentTap!='2'" class="text-center" role="tabpanel"
aria-labelledby="profile-item-5">
<app-pms-summary></app-pms-summary>
</div>
</div>
<div class="box-footer text-end space-x-3 rtl:space-x-reverse">
<div class="p-4 space-y-3 border-t border-gray-200 dark:border-white/10">
<!-- <h5 class="text-base font-semibold"> Add New Question</h5> -->
<!-- <img src="./assets/img/png-images/8.png" alt=""> -->
<textarea class="ti-form-input" rows="4" placeholder="Drop Your Question Here...."></textarea>
</div>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-primary"><i class="ri ri-refresh-line"></i>
ยินยัน</a>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-success"><i class="ri ri-refresh-line"></i>
บันทึกร่าง</a>
<a href="javascript:void(0);" class="ti-btn m-0 ti-btn-soft-secondary"><i
class="ri ri-close-circle-line"></i>
ย้อนกลับ</a>
</div>
</div>
</div>
<!-- Start::main-content -->
</div>
<!-- End::row-1 -->
</div>
<!-- Start::main-content -->
</div>
</ng-template>
\ No newline at end of file
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { Router } from '@angular/router';
import { TypeList } from 'src/app/shared/model/appraisal-subordinate.model';
import { CompetencyModel } from 'src/app/shared/model/competency.model';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service';
import { EmployeeService } from 'src/app/shared/services/employee.service';
@Component({
......@@ -11,8 +13,6 @@ import { EmployeeService } from 'src/app/shared/services/employee.service';
})
export class PmsFormEmployeeComponent {
@Input() currentTap = ""
@Input() evaluationRoundId = ""
@Input() allCompetencyTypeId: TypeList[] = []
@Input() evaluateeId = ""
@Input() evaluaterId = ""
@Input() evaluationForm: 'self' | 'sup' = "self"
......@@ -38,15 +38,43 @@ export class PmsFormEmployeeComponent {
{ id: '5', itemName: 'Bootstrap' },
];
compentency: { loading: boolean, data?: CompetencyModel, dataList: CompetencyModel[] } = { loading: false, data: undefined, dataList: [] }
compentencyFormCompleted = false
currentDate = new Date()
constructor(
private router: Router,
private employeeService: EmployeeService,
private appraisalService: AppraisalService,
private cdr: ChangeDetectorRef
) { }
ngOnInit() {
this.getEvaluatee()
this.getCompentencyAll()
}
getCompentencyAll() {
this.compentency.loading = true
const bossId = this.evaluaterId != this.evaluateeId ? this.evaluaterId : undefined
this.appraisalService.getCompentencyAll(this.evaluateeId, bossId).subscribe({
next: response => {
this.compentency.dataList = response
if (this.compentency.dataList.length) {
this.selectDataList(this.compentency.dataList[0])
}
this.compentency.loading = false
this.cdr.detectChanges()
}, error: error => {
this.compentency.loading = false
this.cdr.detectChanges()
}
})
}
selectDataList(data: CompetencyModel) {
this.compentency.data = data
}
getEvaluatee() {
......@@ -65,16 +93,14 @@ export class PmsFormEmployeeComponent {
currentTapChange() {
if (this.allCompetencyTypeId.length) {
this.currentTap = this.allCompetencyTypeId[0].shortName || ''
if (this.compentency.data?.competency.length) {
this.currentTap = this.compentency.data?.competency[0].comType || ''
}
}
onSelectFile1(event: any) {
if (event.target && event.target.files && event.target.files[0]) {
const reader = new FileReader();
reader.readAsDataURL(event.target.files[0]); // read file as data URL
reader.onload = (event: any) => {
// called once readAsDataURL is completed
this.url1 = event.target.result;
......@@ -85,9 +111,7 @@ export class PmsFormEmployeeComponent {
onSelectFile2(event: any) {
if (event.target && event.target.files && event.target.files[0]) {
const reader = new FileReader();
reader.readAsDataURL(event.target.files[0]); // read file as data URL
reader.onload = (event: any) => {
// called once readAsDataURL is completed
this.url2 = event.target.result;
......
<ng-container *ngTemplateOutlet="idpEvaluation"></ng-container>
<ng-template #idpEvaluation>
<ng-container *ngIf="formIdp.data">
<ng-container *ngIf="appraisalIdp">
<div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-primary">
แผนพัฒนาบุคคลากรรายบุคคล
......@@ -27,13 +27,13 @@
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.thFullName || ""}}</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>{{formIdp.data.apsassessy.position.tdesc || ""}}</span>
<span>{{appraisalIdp.apsassessy.position.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
......@@ -41,13 +41,13 @@
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.thFullName || ""}}</span>
<span>{{appraisalIdp.boss.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>{{formIdp.data.boss.position.tdesc || ""}}</span>
<span>{{appraisalIdp.boss.position.tdesc || ""}}</span>
</div>
</div>
</div>
......@@ -57,13 +57,13 @@
<span>งาน</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.job.tdesc || ""}}</span>
<span>{{appraisalIdp.apsassessy.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>{{formIdp.data.apsassessy.bu1.tdesc || ""}}</span>
<span>{{appraisalIdp.apsassessy.bu1.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
......@@ -71,13 +71,13 @@
<span>งาน</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.job.tdesc || ""}}</span>
<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>{{formIdp.data.boss.bu1.tdesc || ""}}</span>
<span>{{appraisalIdp.boss.bu1.tdesc || ""}}</span>
</div>
</div>
</div>
......@@ -171,15 +171,15 @@
</th>
</tr>
</thead>
<tbody *ngIf="!formIdp.data.competencyIndicatorsCourses1.length">
<tbody *ngIf="!appraisalIdp.competencyIndicatorsCourses1.length">
<tr class="hover:table-hover2-hover">
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="formIdp.data.competencyIndicatorsCourses1.length">
<ng-container *ngFor=" let data of formIdp.data.competencyIndicatorsCourses1;let i = index">
<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 }">
......@@ -215,7 +215,7 @@
</td>
<td class="!p-0"></td>
<td class="align-start text-center"
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan?.training||(formIdp.data.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse">
[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"
......@@ -226,20 +226,20 @@
</ng-container>
</td>
<td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="canEdit?(!data.idpDevelopmentPlan?.training||(formIdp.data.masfromEvaluationIdp.idpStatus!='1' && !data.competencyCourse)):!data.competencyCourse">
[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&&formIdp.data.masfromEvaluationIdp.idpStatus=='1'"
*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&&formIdp.data.masfromEvaluationIdp.idpStatus=='1'"
*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>
......@@ -248,7 +248,7 @@
</ng-container>
</ng-container>
<ng-container
*ngIf="canEdit&&!data.competencyCourse?.length&&formIdp.data.masfromEvaluationIdp.idpStatus=='1'&&data.idpDevelopmentPlan?.training">
*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) ">
<i class="ri-add-line"></i>
......@@ -258,17 +258,17 @@
</td>
<td class="!p-0"></td>
<td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="!formIdp.data.masfromEvaluationRound.apsPeriodStart &&!formIdp.data.masfromEvaluationRound.apsPeriodEnd">
[class.bg-table-gray]="!appraisalIdp.masfromEvaluationRound.apsPeriodStart &&!appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
<ng-container
*ngIf="formIdp.data.masfromEvaluationRound.apsPeriodStart &&formIdp.data.masfromEvaluationRound.apsPeriodEnd">
*ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
จาก&nbsp;
</ng-container>
{{convertDateFormat(formIdp.data.masfromEvaluationRound.apsPeriodStart)}}
{{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodStart)}}
<ng-container
*ngIf="formIdp.data.masfromEvaluationRound.apsPeriodStart &&formIdp.data.masfromEvaluationRound.apsPeriodEnd">
*ngIf="appraisalIdp.masfromEvaluationRound.apsPeriodStart &&appraisalIdp.masfromEvaluationRound.apsPeriodEnd">
&nbsp;ถึง&nbsp;
</ng-container>
{{convertDateFormat(formIdp.data.masfromEvaluationRound.apsPeriodEnd)}}
{{convertDateFormat(appraisalIdp.masfromEvaluationRound.apsPeriodEnd)}}
</td>
</tr>
</ng-container>
......@@ -283,13 +283,13 @@
<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-0" (click)="resetFormIdp()"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||formIdp.data.checkStep!='1'"
name="idpStatus" (change)="formIdp.data.masfromEvaluationIdp.idpStatus='0'"
[checked]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'">
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'"
name="idpStatus" (change)="appraisalIdp.masfromEvaluationIdp.idpStatus='0'"
[checked]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'">
</div>
<div class="col-span-5">
<label for="idpStatus-0" class="text-sm text-gray-500"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||formIdp.data.checkStep!='1'">
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='0'||!canEdit ||appraisalIdp.checkStep!='1'">
IDP มาตรฐาน
</label>
</div>
......@@ -297,13 +297,13 @@
<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"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||formIdp.data.checkStep!='1'"
name="idpStatus" (change)="formIdp.data.masfromEvaluationIdp.idpStatus='1'"
[checked]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'">
[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]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||formIdp.data.checkStep!='1'">
[class.pointer-events-none]="appraisalIdp.masfromEvaluationIdp.idpStatus=='1'||!canEdit ||appraisalIdp.checkStep!='1'">
IDP ปรับแก้ไข
</label>
</div>
......@@ -314,123 +314,123 @@
<div class="py-1rem px-2rem">
<div class="py-2 grid grid-cols-7 gap-3">
<div class="col-span-1">
{{formIdp.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
{{appraisalIdp.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove1.thFullName}}</div>
{{appraisalIdp.apsapprove1.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove1Status=='2'">
[checked]="appraisalIdp.masfromEvaluationIdp.apsapprove1Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='1'||!canSave"
[readonly]="!formIdp.data||formIdp.data.currentStep!='1'||!canSave"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove1Comment"></textarea>
[class.!bg-input-readonly]="!appraisalIdp||appraisalIdp.currentStep!='1'||!canSave"
[readonly]="!appraisalIdp||appraisalIdp.currentStep!='1'||!canSave"
[(ngModel)]="appraisalIdp.masfromEvaluationIdp.apsapprove1Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove1Date)}}
{{convertDate(appraisalIdp.masfromEvaluationIdp.apsapprove1Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove2.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalIdp.apsapprove2.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
{{appraisalIdp.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove2.thFullName}}</div>
{{appraisalIdp.apsapprove2.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove2Status=='2'">
[checked]="appraisalIdp.masfromEvaluationIdp.apsapprove2Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='2'||!canSave"
[readonly]="!formIdp.data||formIdp.data.currentStep!='2'||!canSave"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove2Comment"></textarea>
[class.!bg-input-readonly]="!appraisalIdp||appraisalIdp.currentStep!='2'||!canSave"
[readonly]="!appraisalIdp||appraisalIdp.currentStep!='2'||!canSave"
[(ngModel)]="appraisalIdp.masfromEvaluationIdp.apsapprove2Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove2Date)}}
{{convertDate(appraisalIdp.masfromEvaluationIdp.apsapprove2Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove3.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalIdp.apsapprove3.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
{{appraisalIdp.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove3.thFullName}}</div>
{{appraisalIdp.apsapprove3.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove3Status=='2'">
[checked]="appraisalIdp.masfromEvaluationIdp.apsapprove3Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='3'||!canSave"
[readonly]="!formIdp.data||formIdp.data.currentStep!='3'||!canSave"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove3Comment"></textarea>
[class.!bg-input-readonly]="!appraisalIdp||appraisalIdp.currentStep!='3'||!canSave"
[readonly]="!appraisalIdp||appraisalIdp.currentStep!='3'||!canSave"
[(ngModel)]="appraisalIdp.masfromEvaluationIdp.apsapprove3Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove3Date)}}
{{convertDate(appraisalIdp.masfromEvaluationIdp.apsapprove3Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove4.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalIdp.apsapprove4.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
{{appraisalIdp.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove4.thFullName}}</div>
{{appraisalIdp.apsapprove4.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove4Status=='2'">
[checked]="appraisalIdp.masfromEvaluationIdp.apsapprove4Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='4'||!canSave"
[readonly]="!formIdp.data||formIdp.data.currentStep!='4'||!canSave"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove4Comment"></textarea>
[class.!bg-input-readonly]="!appraisalIdp||appraisalIdp.currentStep!='4'||!canSave"
[readonly]="!appraisalIdp||appraisalIdp.currentStep!='4'||!canSave"
[(ngModel)]="appraisalIdp.masfromEvaluationIdp.apsapprove4Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove4Date)}}
{{convertDate(appraisalIdp.masfromEvaluationIdp.apsapprove4Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove5.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalIdp.apsapprove5.employeeId">
<div class="col-span-1">
ผู้อนุมัติ
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove5.thFullName}}</div>
{{appraisalIdp.apsapprove5.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove5Status=='2'">
[checked]="appraisalIdp.masfromEvaluationIdp.apsapprove5Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='5'||!canSave"
[readonly]="!formIdp.data||formIdp.data.currentStep!='5'||!canSave"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove5Comment"></textarea>
[class.!bg-input-readonly]="!appraisalIdp||appraisalIdp.currentStep!='5'||!canSave"
[readonly]="!appraisalIdp||appraisalIdp.currentStep!='5'||!canSave"
[(ngModel)]="appraisalIdp.masfromEvaluationIdp.apsapprove5Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove5Date)}}
{{convertDate(appraisalIdp.masfromEvaluationIdp.apsapprove5Date)}}
</span>
</div>
</div>
</div>
<div class="flex justify-center mb-1rem pb-2rem" *ngIf="canSave">
<button *ngIf="formIdp.data.checkStep!='0'&&formIdp.data.checkStep!='1'" type="submit"
<button *ngIf="appraisalIdp.checkStep!='0'&&appraisalIdp.checkStep!='1'" type="submit"
class="ti-btn ti-btn-danger mx-2rem" (click)="save('noApprove')">
ไม่อนุมัติ
</button>
......@@ -438,10 +438,10 @@
บันทึกร่าง
</button>
<button type="submit" class="ti-btn ti-btn-secondary mx-2rem" (click)="save('approve')">
<ng-container *ngIf="formIdp.data.checkStep=='0'">
<ng-container *ngIf="appraisalIdp.checkStep=='0'">
ยืนยันข้อมูล
</ng-container>
<ng-container *ngIf="formIdp.data.checkStep!='0'">
<ng-container *ngIf="appraisalIdp.checkStep!='0'">
อนุมัติ
</ng-container>
</button>
......
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { Idp } from 'src/app/shared/model/competency.model';
import { CompetencycourseMiniModel, MyCompetencycourseMiniModel } from 'src/app/shared/model/competencycourse-mini.model';
import { IdpFormModel } from 'src/app/shared/model/idp-form.model';
import { CompetencycourseService } from 'src/app/shared/services/competencycourse.service';
......@@ -26,7 +27,7 @@ export class PmsIdpComponent {
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
currentDate = new Date()
hoveredCode: string | null = null;
formIdp: { loading: boolean, data?: IdpFormModel } = { loading: false, data: undefined }
@Input() appraisalIdp?: Idp
originalformIdp?: IdpFormModel
canEdit = false
canSave = false
......@@ -76,19 +77,19 @@ export class PmsIdpComponent {
}
addCompetencycourse(data: CompetencycourseMiniModel) {
if (this.formIdp.data) {
if (this.formIdp.data.competencyIndicatorsCourses1[this.competencycourseIndex].competencyCourse) {
this.formIdp.data.competencyIndicatorsCourses1[this.competencycourseIndex].competencyCourse.push(new MyCompetencycourseMiniModel(data))
if (this.appraisalIdp) {
if (this.appraisalIdp.competencyIndicatorsCourses1[this.competencycourseIndex].competencyCourse) {
this.appraisalIdp.competencyIndicatorsCourses1[this.competencycourseIndex].competencyCourse.push(new MyCompetencycourseMiniModel(data))
} else {
this.formIdp.data.competencyIndicatorsCourses1[this.competencycourseIndex]['competencyCourse'] = [new MyCompetencycourseMiniModel(data)]
this.appraisalIdp.competencyIndicatorsCourses1[this.competencycourseIndex]['competencyCourse'] = [new MyCompetencycourseMiniModel(data)]
}
this.cdr.detectChanges()
}
}
deleteCompetencyCourse(index: number, removeIndex: number) {
if (this.formIdp.data) {
this.formIdp.data.competencyIndicatorsCourses1[index].competencyCourse.splice(removeIndex, 1)
if (this.appraisalIdp) {
this.appraisalIdp.competencyIndicatorsCourses1[index].competencyCourse.splice(removeIndex, 1)
}
}
onCompetencycourseSearch() {
......@@ -101,67 +102,56 @@ export class PmsIdpComponent {
x.edesc.toLowerCase().includes(this.competencycourseTable.search.toLowerCase()))
}
resetFormIdp() {
if (this.originalformIdp && this.formIdp.data) {
this.formIdp.data.competencyIndicatorsCourses1 = JSON.parse(JSON.stringify(this.originalformIdp.competencyIndicatorsCourses1))
if (this.originalformIdp && this.appraisalIdp) {
this.appraisalIdp.competencyIndicatorsCourses1 = JSON.parse(JSON.stringify(this.originalformIdp.competencyIndicatorsCourses1))
}
}
getFormIdp() {
this.formIdp.loading = true
this.evaluationIdpService.getFormIdp(this.evaluationRoundId, this.evaluateeId).subscribe({
next: response => {
this.formIdp.data = JSON.parse(JSON.stringify(response))
this.originalformIdp = JSON.parse(JSON.stringify(response))
if (this.formIdp.data) {
this.canSave = (this.formIdp.data.currentStep == this.formIdp.data.checkStep) && (this.formIdp.data.masfromStatusType.code != 'Boss_finish' && this.formIdp.data.masfromStatusType.code != 'Not_evaluating_yet')
this.canEdit = (this.formIdp.data.currentStep == this.formIdp.data.checkStep && (+(this.formIdp.data.checkStep) <= 1)) && (this.formIdp.data.masfromStatusType.code != 'Boss_finish' && this.formIdp.data.masfromStatusType.code != 'Not_evaluating_yet')
if (this.appraisalIdp) {
this.canSave = (this.appraisalIdp.currentStep == this.appraisalIdp.checkStep) && (this.appraisalIdp.masfromStatusType.code != 'Boss_finish' && this.appraisalIdp.masfromStatusType.code != 'Not_evaluating_yet')
this.canEdit = (this.appraisalIdp.currentStep == this.appraisalIdp.checkStep && (+(this.appraisalIdp.checkStep) <= 1)) && (this.appraisalIdp.masfromStatusType.code != 'Boss_finish' && this.appraisalIdp.masfromStatusType.code != 'Not_evaluating_yet')
}
switch (this.appraisalIdp?.currentStep) {
case ("0"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
switch (this.formIdp.data?.currentStep) {
case ("0"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("1"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsapprove1Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("2"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsapprove2Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("3"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("4"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsapprove4Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("5"): {
if (this.canEdit) {
this.formIdp.data.masfromEvaluationIdp.apsapprove5Date = this.currentDate.toISOString().split('T')[0];
}
break
}
default: { return }
break
}
case ("1"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsapprove1Date = this.currentDate.toISOString().split('T')[0];
}
this.formIdp.data.masfromEvaluationIdp.idpStatus = this.formIdp.data.masfromEvaluationIdp.idpStatus ? this.formIdp.data.masfromEvaluationIdp.idpStatus : '0'
this.formIdp.loading = false
this.cdr.detectChanges()
}, error: error => {
this.formIdp.loading = false
this.cdr.detectChanges()
break
}
})
case ("2"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsapprove2Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("3"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("4"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsapprove4Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("5"): {
if (this.canEdit) {
this.appraisalIdp.masfromEvaluationIdp.apsapprove5Date = this.currentDate.toISOString().split('T')[0];
}
break
}
default: { return }
}
this.appraisalIdp.masfromEvaluationIdp.idpStatus = this.appraisalIdp.masfromEvaluationIdp.idpStatus ? this.appraisalIdp.masfromEvaluationIdp.idpStatus : '0'
this.cdr.detectChanges()
}
returnPath() {
this.sendReturnPath.emit()
......@@ -196,7 +186,7 @@ export class PmsIdpComponent {
approveStatus = '1'
} else if (status == 'approve') {
approveStatus = '2'
if (this.formIdp?.data?.checkStep == '0') {
if (this.appraisalIdp?.checkStep == '0') {
title = 'ยืนยันข้อมูล'
text = 'คุณต้องการยืนยันข้อมูลการประเมินนี้ใช่หรือไม่'
confirmButtonText = 'ยืนยันการบันทึก'
......@@ -241,7 +231,7 @@ export class PmsIdpComponent {
cancelButton: '!swal2-button-bg-gray',
},
}).then((result) => {
if (result.isConfirmed && this.formIdp) {
if (result.isConfirmed && this.appraisalIdp) {
this.saveApi(approveStatus)
} else if (result.dismiss === Swal.DismissReason.cancel) {
Swal.fire({
......@@ -257,12 +247,12 @@ export class PmsIdpComponent {
}
saveApi(approveStatus: string) {
let body = this.formIdp.data
switch (this.formIdp.data?.currentStep) {
let body = this.appraisalIdp
switch (this.appraisalIdp?.currentStep) {
case ("0"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsassessyStatus: approveStatus
}
}
......@@ -270,8 +260,8 @@ export class PmsIdpComponent {
}
case ("1"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsapprove1Status: approveStatus
}
}
......@@ -279,9 +269,9 @@ export class PmsIdpComponent {
}
case ("2"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove1Status: approveStatus == '0' ? approveStatus : this.formIdp.data.masfromEvaluationIdp.apsapprove1Status,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsapprove1Status: approveStatus == '0' ? approveStatus : this.appraisalIdp.masfromEvaluationIdp.apsapprove1Status,
apsapprove2Status: approveStatus
}
}
......@@ -289,9 +279,9 @@ export class PmsIdpComponent {
}
case ("3"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove2Status: approveStatus == '0' ? approveStatus : this.formIdp.data.masfromEvaluationIdp.apsapprove2Status,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsapprove2Status: approveStatus == '0' ? approveStatus : this.appraisalIdp.masfromEvaluationIdp.apsapprove2Status,
apsapprove3Status: approveStatus
}
}
......@@ -299,9 +289,9 @@ export class PmsIdpComponent {
}
case ("4"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove3Status: approveStatus == '0' ? approveStatus : this.formIdp.data.masfromEvaluationIdp.apsapprove3Status,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsapprove3Status: approveStatus == '0' ? approveStatus : this.appraisalIdp.masfromEvaluationIdp.apsapprove3Status,
apsapprove4Status: approveStatus
}
}
......@@ -309,9 +299,9 @@ export class PmsIdpComponent {
}
case ("5"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove4Status: approveStatus == '0' ? approveStatus : this.formIdp.data.masfromEvaluationIdp.apsapprove4Status,
...this.appraisalIdp, masfromEvaluationIdp: {
...this.appraisalIdp.masfromEvaluationIdp,
apsapprove4Status: approveStatus == '0' ? approveStatus : this.appraisalIdp.masfromEvaluationIdp.apsapprove4Status,
apsapprove5Status: approveStatus
}
}
......
......@@ -13,7 +13,7 @@
</div>
</div>
</div> -->
<ng-container *ngIf="appraisalPms.data">
<ng-container *ngIf="appraisalPms">
<div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-primary">
JOB PERFORMANCE EVALUATION FORM
......@@ -36,8 +36,8 @@
</div>
<div class="col-span-3 p-2 border pb-4">
<span>
{{appraisalPms.data.apsassessy.prefix?.tdesc || ""}}
{{appraisalPms.data.apsassessy.thFullName || ""}}</span>
{{appraisalPms.apsassessy.prefix.tdesc || ""}}
{{appraisalPms.apsassessy.thFullName || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
......@@ -45,8 +45,9 @@
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-3 p-2 border pb-4">
<span>{{appraisalPms.data.apsapprove1.prefix?.tdesc || ""}}
{{appraisalPms.data.apsapprove1.thFullName || ""}}</span>
<span *ngIf="appraisalPms.apsapprove1.prefix">{{appraisalPms.apsapprove1.prefix.tdesc ||
""}}
{{appraisalPms.apsapprove1.thFullName || ""}}</span>
</div>
</div>
</div>
......@@ -56,13 +57,13 @@
<span>รหัส (ID)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsassessy.employeeId || ""}}</span>
<span>{{appraisalPms.apsassessy.employeeId || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง (Position)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsassessy.position?.tdesc || ""}}</span>
<span>{{appraisalPms.apsassessy.position.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
......@@ -70,13 +71,15 @@
<span>รหัส (ID)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsapprove1.employeeId || ""}}</span>
<span>{{appraisalPms.apsapprove1.employeeId || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง (Position)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsapprove1.position?.tdesc || ""}}</span>
<span *ngIf="appraisalPms.apsapprove1.position">
{{appraisalPms.apsapprove1.position.tdesc || ""}}
</span>
</div>
</div>
</div>
......@@ -86,13 +89,13 @@
<span>ฝ่าย (Department)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsassessy.bu1?.tdesc || ""}}</span>
<span>{{appraisalPms.apsassessy.bu1.tdesc || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>แผนก (Section)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsassessy.bu2?.tdesc || ""}}</span>
<span>{{appraisalPms.apsassessy.bu2.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
......@@ -100,13 +103,13 @@
<span>ฝ่าย (Department)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsapprove1.bu1?.tdesc || ""}}</span>
<span *ngIf="appraisalPms.apsapprove1.bu1">{{appraisalPms.apsapprove1.bu1.tdesc || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>แผนก (Section)</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{appraisalPms.data.apsapprove1.bu2?.tdesc || ""}}</span>
<span *ngIf="appraisalPms.apsapprove1.bu2">{{appraisalPms.apsapprove1.bu2.tdesc || ""}}</span>
</div>
</div>
</div>
......@@ -114,14 +117,14 @@
</div>
<div class="pb-2rem px-2rem">
<div id="hs-tab-js-vertical-1" role="tabpanel" aria-labelledby="hs-tab-js-vertical-item-1">
<div class="hs-accordion-group w-full">
<ng-container *ngIf="appraisalPms?.data?.part1Detail?.length then part1 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part2Detail?.length then part2 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part3Detail?.length then part3 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part4Detail?.length then part4 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part5Detail?.length then part5 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part6Detail?.length then part6 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.data?.part7Detail?.length then part7 else noData"></ng-container>
<div class="hs-accordion-group w-full" data-hs-accordion-always-open>
<ng-container *ngIf="appraisalPms?.part1Detail?.length then part1 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part2Detail?.length then part2 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part3Detail?.length then part3 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part4Detail?.length then part4 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part5Detail?.length then part5 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part6Detail?.length then part6 else noData"></ng-container>
<ng-container *ngIf="appraisalPms?.part7Detail?.length then part7 else noData"></ng-container>
<ng-container *ngTemplateOutlet="part8"></ng-container>
<ng-container *ngTemplateOutlet="part9"></ng-container>
<ng-container *ngTemplateOutlet="part10"></ng-container>
......@@ -134,144 +137,144 @@
<div class="py-2 grid grid-cols-7 gap-3">
<div class="col-span-1">ผู้รับการประเมิน</div>
<div class="col-span-1">
{{appraisalPms.data.apsassessy.thFullName}}</div>
{{appraisalPms.apsassessy.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none "
[checked]="appraisalPms.data.apsassessyStatus=='2'">
[checked]="appraisalPms.apsassessyStatus=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='0'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='0'||!canSave"
[(ngModel)]="appraisalPms.data.apsassessyComment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='0'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='0'||!canSave"
[(ngModel)]="appraisalPms.apsassessyComment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsassessyDate)}}
{{convertDate(appraisalPms.apsassessyDate)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.data.apsapprove1.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.apsapprove1.employeeId">
<div class="col-span-1">
{{appraisalPms.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
{{appraisalPms.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalPms.data.apsapprove1.thFullName}}</div>
{{appraisalPms.apsapprove1.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalPms.data.apsapprove1Status=='2'">
[checked]="appraisalPms.apsapprove1Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='1'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='1'||!canSave"
[(ngModel)]="appraisalPms.data.apsapprove1Comment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='1'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='1'||!canSave"
[(ngModel)]="appraisalPms.apsapprove1Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsapprove1Date)}}
{{convertDate(appraisalPms.apsapprove1Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.data.apsapprove2.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.apsapprove2.employeeId">
<div class="col-span-1">
{{appraisalPms.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
{{appraisalPms.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalPms.data.apsapprove2.thFullName}}</div>
{{appraisalPms.apsapprove2.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalPms.data.apsapprove2Status=='2'">
[checked]="appraisalPms.apsapprove2Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='2'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='2'||!canSave"
[(ngModel)]="appraisalPms.data.apsapprove2Comment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='2'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='2'||!canSave"
[(ngModel)]="appraisalPms.apsapprove2Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsapprove2Date)}}
{{convertDate(appraisalPms.apsapprove2Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.data.apsapprove3.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.apsapprove3.employeeId">
<div class="col-span-1">
{{appraisalPms.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
{{appraisalPms.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalPms.data.apsapprove3.thFullName}}</div>
{{appraisalPms.apsapprove3.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalPms.data.apsapprove3Status=='2'">
[checked]="appraisalPms.apsapprove3Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='3'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='3'||!canSave"
[(ngModel)]="appraisalPms.data.apsapprove3Comment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='3'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='3'||!canSave"
[(ngModel)]="appraisalPms.apsapprove3Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsapprove3Date)}}
{{convertDate(appraisalPms.apsapprove3Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.data.apsapprove4.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.apsapprove4.employeeId">
<div class="col-span-1">
{{appraisalPms.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
{{appraisalPms.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{appraisalPms.data.apsapprove4.thFullName}}</div>
{{appraisalPms.apsapprove4.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalPms.data.apsapprove4Status=='2'">
[checked]="appraisalPms.apsapprove4Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='4'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='4'||!canSave"
[(ngModel)]="appraisalPms.data.apsapprove4Comment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='4'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='4'||!canSave"
[(ngModel)]="appraisalPms.apsapprove4Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsapprove4Date)}}
{{convertDate(appraisalPms.apsapprove4Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.data.apsapprove5.employeeId">
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="appraisalPms.apsapprove5.employeeId">
<div class="col-span-1">
ผู้อนุมัติ
</div>
<div class="col-span-1">
{{appraisalPms.data.apsapprove5.thFullName}}</div>
{{appraisalPms.apsapprove5.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600
checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="appraisalPms.data.apsapprove5Status=='2'">
[checked]="appraisalPms.apsapprove5Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='5'||!canSave"
[readonly]="!appraisalPms.data||appraisalPms.data.currentStep!='5'||!canSave"
[(ngModel)]="appraisalPms.data.apsapprove5Comment"></textarea>
[class.!bg-input-readonly]="!appraisalPms||appraisalPms.currentStep!='5'||!canSave"
[readonly]="!appraisalPms||appraisalPms.currentStep!='5'||!canSave"
[(ngModel)]="appraisalPms.apsapprove5Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(appraisalPms.data.apsapprove5Date)}}
{{convertDate(appraisalPms.apsapprove5Date)}}
</span>
</div>
</div>
</div>
<div class="flex justify-center mb-1rem pb-2rem" *ngIf="canSave">
<button *ngIf="appraisalPms.data.checkStep!='0'&&appraisalPms.data.checkStep!='1'" type="submit"
<button *ngIf="appraisalPms.checkStep!='0'&&appraisalPms.checkStep!='1'" type="submit"
class="ti-btn ti-btn-danger mx-2rem" (click)="save('noApprove')">
ไม่อนุมัติ
</button>
......@@ -279,10 +282,10 @@
บันทึกร่าง
</button>
<button type="submit" class="ti-btn ti-btn-secondary mx-2rem" (click)="save('approve')">
<ng-container *ngIf="appraisalPms.data.checkStep=='0'">
<ng-container *ngIf="appraisalPms.checkStep=='0'">
ยืนยันข้อมูล
</ng-container>
<ng-container *ngIf="appraisalPms.data.checkStep!='0'">
<ng-container *ngIf="appraisalPms.checkStep!='0'">
อนุมัติ
</ng-container>
</button>
......@@ -297,7 +300,7 @@
<ng-template #part1>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -360,9 +363,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part1Detail">
<tbody *ngIf="appraisalPms?.part1Detail">
<ng-container *ngIf="part1show">
<tr *ngFor="let item of appraisalPms?.data?.part1Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part1Detail;let i = index">
<td class="align-start text-center !white-space-normal ">
{{i+1}}
</td>
......@@ -442,7 +445,7 @@
คะแนนดิบ
</td>
<td class="align-start !white-space-normal text-center">
{{calRawScore(appraisalPms.data?.part1Detail)}}
{{calRawScore(appraisalPms?.part1Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
......@@ -453,16 +456,16 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigth(appraisalPms.data?.part1Detail)}}
{{calWeigth(appraisalPms?.part1Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScore(appraisalPms.data?.part1Detail)}}
{{calExpectationScore(appraisalPms?.part1Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScore(appraisalPms.data?.part1Detail)}}
{{calExpectationTotalScore(appraisalPms?.part1Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -483,13 +486,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part1Percentage}}
{{appraisalPms?.part1Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScore(appraisalPms.data?.part1Detail),calRawScore(appraisalPms.data?.part1Detail))}}
{{calPercentage(calExpectationTotalScore(appraisalPms?.part1Detail),calRawScore(appraisalPms?.part1Detail))}}
</td>
</tr>
</tbody>
......@@ -505,7 +508,7 @@
<ng-template #part2>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -568,9 +571,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part2Detail">
<tbody *ngIf="appraisalPms?.part2Detail">
<ng-container *ngIf="part2show">
<tr *ngFor="let item of appraisalPms?.data?.part2Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part2Detail;let i = index">
<td class="align-start text-center !white-space-normal ">
{{i+1}}
</td>
......@@ -647,7 +650,7 @@
คะแนนดิบ
</td>
<td class="align-start !white-space-normal text-center">
{{calRawScore(appraisalPms.data?.part2Detail)}}
{{calRawScore(appraisalPms?.part2Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
</td>
......@@ -655,16 +658,16 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigth(appraisalPms.data?.part2Detail)}}
{{calWeigth(appraisalPms?.part2Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScore(appraisalPms.data?.part2Detail)}}
{{calExpectationScore(appraisalPms?.part2Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScore(appraisalPms.data?.part2Detail)}}
{{calExpectationTotalScore(appraisalPms?.part2Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -682,13 +685,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part2Percentage}}
{{appraisalPms?.part2Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScore(appraisalPms.data?.part2Detail),calRawScore(appraisalPms.data?.part2Detail))}}
{{calPercentage(calExpectationTotalScore(appraisalPms?.part2Detail),calRawScore(appraisalPms?.part2Detail))}}
</td>
</tr>
</tbody>
......@@ -703,7 +706,7 @@
<ng-template #part3>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -766,9 +769,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part3Detail">
<tbody *ngIf="appraisalPms?.part3Detail">
<ng-container *ngIf="part3show">
<tr *ngFor="let item of appraisalPms?.data?.part3Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part3Detail;let i = index">
<td class="align-start text-center !white-space-normal ">
{{i+1}}
</td>
......@@ -845,7 +848,7 @@
คะแนนดิบ
</td>
<td class="align-start !white-space-normal text-center">
{{calRawScore(appraisalPms.data?.part3Detail)}}
{{calRawScore(appraisalPms?.part3Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
</td>
......@@ -853,16 +856,16 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigth(appraisalPms.data?.part3Detail)}}
{{calWeigth(appraisalPms?.part3Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScore(appraisalPms.data?.part3Detail)}}
{{calExpectationScore(appraisalPms?.part3Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScore(appraisalPms.data?.part3Detail)}}
{{calExpectationTotalScore(appraisalPms?.part3Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -880,13 +883,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part3Percentage}}
{{appraisalPms?.part3Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScore(appraisalPms.data?.part3Detail),calRawScore(appraisalPms.data?.part3Detail))}}
{{calPercentage(calExpectationTotalScore(appraisalPms?.part3Detail),calRawScore(appraisalPms?.part3Detail))}}
</td>
</tr>
</tbody>
......@@ -901,7 +904,7 @@
<ng-template #part4>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -963,9 +966,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part4Detail">
<tbody *ngIf="appraisalPms?.part4Detail">
<ng-container *ngIf="part4show">
<tr *ngFor="let item of appraisalPms?.data?.part4Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part4Detail;let i = index">
<td class="align-start text-center">
{{i+1}}
</td>
......@@ -1012,22 +1015,22 @@
<tr class="bg-table-soft-gray">
<td class="align-start text-center">
คะแนนดิบ
{{calRawScorePart4(appraisalPms.data?.part4Detail)}}
{{calRawScorePart4(appraisalPms?.part4Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigthPart4(appraisalPms.data?.part4Detail)}}
{{calWeigthPart4(appraisalPms?.part4Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScorePart4(appraisalPms.data?.part4Detail)}}
{{calExpectationScorePart4(appraisalPms?.part4Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScorePart4(appraisalPms.data?.part4Detail)}}
{{calExpectationTotalScorePart4(appraisalPms?.part4Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -1039,13 +1042,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part4Percentage}}
{{appraisalPms?.part4Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScorePart4(appraisalPms.data?.part4Detail),calRawScorePart4(appraisalPms.data?.part4Detail))}}
{{calPercentage(calExpectationTotalScorePart4(appraisalPms?.part4Detail),calRawScorePart4(appraisalPms?.part4Detail))}}
</td>
</tr>
</tbody>
......@@ -1061,7 +1064,7 @@
<ng-template #part5>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1123,9 +1126,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part5Detail">
<tbody *ngIf="appraisalPms?.part5Detail">
<ng-container *ngIf="part5show">
<tr *ngFor="let item of appraisalPms?.data?.part5Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part5Detail;let i = index">
<td class="align-start text-center">
{{i+1}}
</td>
......@@ -1197,7 +1200,7 @@
คะแนนดิบ
</td>
<td class="align-start text-center">
{{calRawScorePart5(appraisalPms.data?.part5Detail)}}
{{calRawScorePart5(appraisalPms?.part5Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
</td>
......@@ -1205,17 +1208,17 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigthPart5(appraisalPms.data?.part5Detail)}}
{{calWeigthPart5(appraisalPms?.part5Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="5">
คะแนนประเมินที่ได้
</td>
<td class="!p-0"></td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScorePart5(appraisalPms.data?.part5Detail)}}
{{calExpectationScorePart5(appraisalPms?.part5Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScorePart5(appraisalPms.data?.part5Detail)}}
{{calExpectationTotalScorePart5(appraisalPms?.part5Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -1231,13 +1234,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part5Percentage}}
{{appraisalPms?.part5Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScorePart5(appraisalPms.data?.part5Detail),calRawScorePart5(appraisalPms.data?.part5Detail))}}
{{calPercentage(calExpectationTotalScorePart5(appraisalPms?.part5Detail),calRawScorePart5(appraisalPms?.part5Detail))}}
</td>
</tr>
</tbody>
......@@ -1252,7 +1255,7 @@
<ng-template #part6>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1314,9 +1317,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part6Detail">
<tbody *ngIf="appraisalPms?.part6Detail">
<ng-container *ngIf="part6show">
<tr *ngFor="let item of appraisalPms?.data?.part6Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part6Detail;let i = index">
<td class="align-start text-center">
{{i+1}}
</td>
......@@ -1396,7 +1399,7 @@
คะแนนดิบ
</td>
<td class="align-start text-center">
{{calRawScore(appraisalPms.data?.part6Detail)}}
{{calRawScore(appraisalPms?.part6Detail)}}
</td>
<td class="align-start text-center">
</td>
......@@ -1406,16 +1409,16 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigth(appraisalPms.data?.part6Detail)}}
{{calWeigth(appraisalPms?.part6Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScore(appraisalPms.data?.part6Detail)}}
{{calExpectationScore(appraisalPms?.part6Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScore(appraisalPms.data?.part6Detail)}}
{{calExpectationTotalScore(appraisalPms?.part6Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -1435,13 +1438,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part6Percentage}}
{{appraisalPms?.part6Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScore(appraisalPms.data?.part6Detail),calRawScore(appraisalPms.data?.part6Detail))}}
{{calPercentage(calExpectationTotalScore(appraisalPms?.part6Detail),calRawScore(appraisalPms?.part6Detail))}}
</td>
</tr>
</tbody>
......@@ -1457,7 +1460,7 @@
<ng-template #part7>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1519,9 +1522,9 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="appraisalPms?.data?.part7Detail">
<tbody *ngIf="appraisalPms?.part7Detail">
<ng-container *ngIf="part7show">
<tr *ngFor="let item of appraisalPms?.data?.part7Detail;let i = index">
<tr *ngFor="let item of appraisalPms?.part7Detail;let i = index">
<td class="align-start text-center">
{{i+1}}
</td>
......@@ -1601,7 +1604,7 @@
คะแนนดิบ
</td>
<td class="align-start text-center">
{{calRawScore(appraisalPms.data?.part7Detail)}}
{{calRawScore(appraisalPms?.part7Detail)}}
</td>
<td class="align-start text-center">
</td>
......@@ -1611,16 +1614,16 @@
คำนวนถ่วงน้ำหนัก
</td>
<td class="align-start !white-space-normal text-center">
{{calWeigth(appraisalPms.data?.part7Detail)}}
{{calWeigth(appraisalPms?.part7Detail)}}
</td>
<td class="align-start !white-space-normal text-end" colspan="6">
คะแนนประเมินที่ได้
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationScore(appraisalPms.data?.part7Detail)}}
{{calExpectationScore(appraisalPms?.part7Detail)}}
</td>
<td class="align-start !white-space-normal text-center">
{{calExpectationTotalScore(appraisalPms.data?.part7Detail)}}
{{calExpectationTotalScore(appraisalPms?.part7Detail)}}
</td>
</tr>
<tr class="bg-table-soft-gray">
......@@ -1640,13 +1643,13 @@
ร้อยละของปัจจัย
</td>
<td class="align-start !white-space-normal text-center">
{{appraisalPms.data?.part7Percentage}}
{{appraisalPms?.part7Percentage}}
</td>
<td class="align-start !white-space-normal text-end" colspan="7">
คะแนนที่ได้คิดเป็นร้อยละ
</td>
<td class="align-start !white-space-normal text-center" style="font-size: 1.25rem">
{{calPercentage(calExpectationTotalScore(appraisalPms.data?.part7Detail),calRawScore(appraisalPms.data?.part7Detail))}}
{{calPercentage(calExpectationTotalScore(appraisalPms?.part7Detail),calRawScore(appraisalPms?.part7Detail))}}
</td>
</tr>
</tbody>
......@@ -1662,7 +1665,7 @@
<ng-template #part8>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1745,13 +1748,13 @@
<td class="align-start text-center">
{{calNetScore()}}
</td>
<td class="align-start !white-space-normal" *ngIf="appraisalPms.data">
<td class="align-start !white-space-normal" *ngIf="appraisalPms">
<ng-container
*ngFor="let item of groupGrade.dataList; let i=index;let f= first">
<span style="display:flex;align-items:center" [class.mt-2]="!f">
<i *ngIf="appraisalPms.data.gradeScore==item.gradeDetail"
<i *ngIf="appraisalPms.gradeScore==item.gradeDetail"
class="ri ri-star-fill pr-10px"></i>
<i *ngIf="appraisalPms.data.gradeScore!=item.gradeDetail"
<i *ngIf="appraisalPms.gradeScore!=item.gradeDetail"
class="ti ti-star pr-10px"></i>
{{item.gradeDetail}} = {{item.tdesc}}<br>
</span>
......@@ -1772,7 +1775,7 @@
<ng-template #part9>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1804,7 +1807,7 @@
aria-labelledby="hs-primary-heading-1">
<div class="box-body p-0">
<div class="space-y-4">
<div class="pb-1rem" *ngIf="appraisalPms.data">
<div class="pb-1rem" *ngIf="appraisalPms">
<div class="pb-2 grid grid-cols-2">
<div class="col-span-1 grid-cols-1 text-gray-400">
<div class="col-span-1 bg-soft-secondary p-2" style="min-height: 55px;">
......@@ -1813,7 +1816,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.employeeStrengths"></textarea>
[(ngModel)]="appraisalPms.employeeStrengths"></textarea>
</div>
</div>
<div class="col-span-1 grid-cols-1 text-gray-400">
......@@ -1823,7 +1826,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.learningTopicsForStrengths"></textarea>
[(ngModel)]="appraisalPms.learningTopicsForStrengths"></textarea>
</div>
</div>
</div>
......@@ -1835,7 +1838,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.performanceWeaknesses"></textarea>
[(ngModel)]="appraisalPms.performanceWeaknesses"></textarea>
</div>
</div>
<div class="col-span-1 grid-cols-1 text-gray-400">
......@@ -1845,7 +1848,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.learningTopicsForWeaknesses"></textarea>
[(ngModel)]="appraisalPms.learningTopicsForWeaknesses"></textarea>
</div>
</div>
</div>
......@@ -1857,7 +1860,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.improvementPlan"></textarea>
[(ngModel)]="appraisalPms.improvementPlan"></textarea>
</div>
</div>
<div class="col-span-1 grid-cols-1 text-gray-400">
......@@ -1867,7 +1870,7 @@
<div class="col-span-1 p-2">
<textarea type="text" rows="2" class="ti-form-input"
[class.!bg-input-readonly]="!canEdit" [readonly]="!canEdit"
[(ngModel)]="appraisalPms.data.learningTopicsForImprovement"></textarea>
[(ngModel)]="appraisalPms.learningTopicsForImprovement"></textarea>
</div>
</div>
</div>
......@@ -1882,7 +1885,7 @@
<ng-template #part10>
<div class="hs-accordion active 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-1">
<button
<button (click)="scrollToTable($event)"
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"
aria-controls="hs-primary-collapse-1" type="button">
<svg class="flex-shrink-0 h-6 w-6 text-white" width="16" height="16" viewBox="0 0 16 16" fill="none"
......@@ -1913,9 +1916,9 @@
aria-labelledby="hs-primary-heading-1">
<div class="box-body p-0">
<div class="space-y-4">
<div class="pb-1rem p-2" *ngIf="appraisalPms.data">
<div class="pb-1rem p-2" *ngIf="appraisalPms">
<textarea type="text" rows="2" class="ti-form-input" [class.!bg-input-readonly]="!canEdit"
[readonly]="!canEdit" [(ngModel)]="appraisalPms.data.cfrDetail"></textarea>
[readonly]="!canEdit" [(ngModel)]="appraisalPms.cfrDetail"></textarea>
</div>
</div>
</div>
......
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';
import { AppraisalPmsFormModel } from 'src/app/shared/model/appraisal-pms-form.model';
import { CompetencyGradeModel, MyCompetencyGradeModel } from 'src/app/shared/model/competency-grades.model';
import { AppraisalService } from 'src/app/shared/services/appraisal.service';
import { EmployeeService } from 'src/app/shared/services/employee.service';
import { PmsGroupGradeService } from 'src/app/shared/services/pms-group-grade.service';
import { SettingAssessmentService } from 'src/app/shared/services/setting-assessment.service';
import { Pms } from 'src/app/shared/model/competency.model';
import Swal from 'sweetalert2';
export interface Part8Model {
......@@ -91,11 +91,10 @@ export class PmsKpiComponent {
canEdit = false
canSave = false
currentDate = new Date()
@Input() evaluationRoundId = ""
@Input() evaluateeId = ""
@Input() evaluaterId = ""
@Input() appraisalPms?: Pms
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
appraisalPms: { loading: boolean, data?: AppraisalPmsFormModel } = { loading: false, data: undefined }
groupGrade: { loading: boolean, dataList: CompetencyGradeModel[] } = { loading: false, dataList: [] }
constructor(private appraisalService: AppraisalService,
private pmsGroupGradeService: PmsGroupGradeService,
......@@ -111,7 +110,6 @@ export class PmsKpiComponent {
}
ngOnInit(): void {
this.getPmsGroupGradeList()
this.getAppraisalPmsForm()
}
getPmsGroupGradeList() {
this.groupGrade.loading = true
......@@ -126,101 +124,6 @@ export class PmsKpiComponent {
}
})
}
getAppraisalPmsForm() {
this.appraisalPms.loading = true
this.appraisalService.getFormPmsById(this.evaluationRoundId, this.evaluateeId).subscribe({
next: response => {
this.appraisalPms.data = JSON.parse(JSON.stringify(response))
this.data8List.forEach((x, i) => {
if (x.id == 1 && this.appraisalPms.data?.part1Percentage) {
x.factors = this.appraisalPms.data.part1Percentage
} else if (x.id == 2 && this.appraisalPms.data?.part2Percentage) {
x.factors = this.appraisalPms.data.part2Percentage
} else if (x.id == 3 && this.appraisalPms.data?.part3Percentage) {
x.factors = this.appraisalPms.data.part3Percentage
} else if (x.id == 4 && this.appraisalPms.data?.part4Percentage) {
x.factors = this.appraisalPms.data.part4Percentage
} else if (x.id == 5 && this.appraisalPms.data?.part5Percentage) {
x.factors = this.appraisalPms.data.part5Percentage
} else if (x.id == 6 && this.appraisalPms.data?.part6Percentage) {
x.factors = this.appraisalPms.data.part6Percentage
} else if (x.id == 7 && this.appraisalPms.data?.part7Percentage) {
x.factors = this.appraisalPms.data.part7Percentage
}
})
if (!this.appraisalPms.data?.part1Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 1)
}
if (!this.appraisalPms.data?.part2Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 2)
}
if (!this.appraisalPms.data?.part3Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 3)
}
if (!this.appraisalPms.data?.part4Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 4)
}
if (!this.appraisalPms.data?.part5Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 5)
}
if (!this.appraisalPms.data?.part6Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 6)
}
if (!this.appraisalPms.data?.part7Detail.length) {
this.data8List = this.data8List.filter(item => item.id !== 7)
}
this.changePercentage()
if (this.appraisalPms.data) {
this.canSave = (this.appraisalPms.data.currentStep == this.appraisalPms.data.checkStep) && this.appraisalPms.data.masfromStatusType.code != 'Boss_finish' && this.appraisalPms.data.masfromStatusType.code != 'Not_evaluating_yet'
this.canEdit = (this.appraisalPms.data.currentStep == this.appraisalPms.data.checkStep) && (+(this.appraisalPms.data.checkStep) <= 1) && this.appraisalPms.data.masfromStatusType.code != 'Boss_finish' && this.appraisalPms.data.masfromStatusType.code != 'Not_evaluating_yet'
switch (this.appraisalPms.data?.currentStep) {
case ("0"): {
if (this.canSave) {
this.appraisalPms.data.apsassessyDate = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("1"): {
if (this.canSave) {
this.appraisalPms.data.apsapprove1Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("2"): {
if (this.canSave) {
this.appraisalPms.data.apsapprove2Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("3"): {
if (this.canSave) {
this.appraisalPms.data.apsapprove3Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("4"): {
if (this.canSave) {
this.appraisalPms.data.apsapprove4Date = this.currentDate.toISOString().split('T')[0];
}
break
}
case ("5"): {
if (this.canSave) {
this.appraisalPms.data.apsapprove5Date = this.currentDate.toISOString().split('T')[0];
}
break
}
default: { return }
}
}
this.appraisalPms.loading = false
this.cdr.detectChanges()
}, error: error => {
this.appraisalPms.loading = false
this.cdr.detectChanges()
}
})
}
returnPath() {
this.sendReturnPath.emit()
}
......@@ -257,40 +160,40 @@ export class PmsKpiComponent {
}
changePercentage() {
this.data8List.forEach(x => {
if (x.id == 1 && this.appraisalPms.data?.part1Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms.data?.part1Detail), this.calRawScore(this.appraisalPms.data?.part1Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part1SumScore = x.scoreObtained
if (x.id == 1 && this.appraisalPms?.part1Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms?.part1Detail), this.calRawScore(this.appraisalPms?.part1Detail))
if (this.appraisalPms) {
this.appraisalPms.part1SumScore = x.scoreObtained
}
} else if (x.id == 2 && this.appraisalPms.data?.part2Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms.data?.part2Detail), this.calRawScore(this.appraisalPms.data?.part2Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part2SumScore = x.scoreObtained
} else if (x.id == 2 && this.appraisalPms?.part2Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms?.part2Detail), this.calRawScore(this.appraisalPms?.part2Detail))
if (this.appraisalPms) {
this.appraisalPms.part2SumScore = x.scoreObtained
}
} else if (x.id == 3 && this.appraisalPms.data?.part3Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms.data?.part3Detail), this.calRawScore(this.appraisalPms.data?.part3Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part3SumScore = x.scoreObtained
} else if (x.id == 3 && this.appraisalPms?.part3Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms?.part3Detail), this.calRawScore(this.appraisalPms?.part3Detail))
if (this.appraisalPms) {
this.appraisalPms.part3SumScore = x.scoreObtained
}
} else if (x.id == 4 && this.appraisalPms.data?.part4Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScorePart4(this.appraisalPms.data?.part4Detail), this.calRawScorePart4(this.appraisalPms.data?.part4Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part4SumScore = x.scoreObtained
} else if (x.id == 4 && this.appraisalPms?.part4Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScorePart4(this.appraisalPms?.part4Detail), this.calRawScorePart4(this.appraisalPms?.part4Detail))
if (this.appraisalPms) {
this.appraisalPms.part4SumScore = x.scoreObtained
}
} else if (x.id == 5 && this.appraisalPms.data?.part5Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScorePart5(this.appraisalPms.data?.part5Detail), this.calRawScorePart5(this.appraisalPms.data?.part5Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part5SumScore = x.scoreObtained
} else if (x.id == 5 && this.appraisalPms?.part5Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScorePart5(this.appraisalPms?.part5Detail), this.calRawScorePart5(this.appraisalPms?.part5Detail))
if (this.appraisalPms) {
this.appraisalPms.part5SumScore = x.scoreObtained
}
} else if (x.id == 6 && this.appraisalPms.data?.part6Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms.data?.part6Detail), this.calRawScore(this.appraisalPms.data?.part6Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part6SumScore = x.scoreObtained
} else if (x.id == 6 && this.appraisalPms?.part6Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms?.part6Detail), this.calRawScore(this.appraisalPms?.part6Detail))
if (this.appraisalPms) {
this.appraisalPms.part6SumScore = x.scoreObtained
}
} else if (x.id == 7 && this.appraisalPms.data?.part7Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms.data?.part7Detail), this.calRawScore(this.appraisalPms.data?.part7Detail))
if (this.appraisalPms.data) {
this.appraisalPms.data.part7SumScore = x.scoreObtained
} else if (x.id == 7 && this.appraisalPms?.part7Detail) {
x.scoreObtained = +this.calPercentage(this.calExpectationTotalScore(this.appraisalPms?.part7Detail), this.calRawScore(this.appraisalPms?.part7Detail))
if (this.appraisalPms) {
this.appraisalPms.part7SumScore = x.scoreObtained
}
}
x.netScore = x.factors / 100 * x.scoreObtained
......@@ -299,8 +202,8 @@ export class PmsKpiComponent {
}
setGradeScore() {
const gradeScore = this.groupGrade.dataList.find(item => Math.ceil(+this.calNetScore()) >= item.gradeMinScore && Math.ceil(+this.calNetScore()) <= item.gradeMaxScore);
if (this.appraisalPms.data && gradeScore) {
this.appraisalPms.data.gradeScore = gradeScore.gradeDetail
if (this.appraisalPms && gradeScore) {
this.appraisalPms.gradeScore = gradeScore.gradeDetail
}
}
......@@ -311,9 +214,9 @@ export class PmsKpiComponent {
return this.data8List.reduce((sum: number, item: any) => sum + item.scoreObtained, 0).toFixed(2);
}
calNetScore() {
if (this.appraisalPms.data) {
this.appraisalPms.data.netScore = +(this.data8List.reduce((sum: number, item: any) => sum + item.netScore, 0).toFixed(2));
return this.appraisalPms.data.netScore
if (this.appraisalPms) {
this.appraisalPms.netScore = +(this.data8List.reduce((sum: number, item: any) => sum + item.netScore, 0).toFixed(2));
return this.appraisalPms.netScore
}
return "0.00"
}
......@@ -444,7 +347,7 @@ export class PmsKpiComponent {
approveStatus = '1'
} else if (status == 'approve') {
approveStatus = '2'
if (this.appraisalPms?.data?.checkStep == '0') {
if (this.appraisalPms?.checkStep == '0') {
title = 'ยืนยันข้อมูล'
text = 'คุณต้องการยืนยันข้อมูลการประเมินนี้ใช่หรือไม่'
confirmButtonText = 'ยืนยันการบันทึก'
......@@ -504,51 +407,51 @@ export class PmsKpiComponent {
})
}
saveApi(approveStatus: string) {
let body = this.appraisalPms.data
switch (this.appraisalPms.data?.currentStep) {
let body = this.appraisalPms
switch (this.appraisalPms?.currentStep) {
case ("0"): {
body = {
...this.appraisalPms.data,
...this.appraisalPms,
apsassessyStatus: approveStatus
}
break
}
case ("1"): {
body = {
...this.appraisalPms.data,
...this.appraisalPms,
apsapprove1Status: approveStatus
}
break
}
case ("2"): {
body = {
...this.appraisalPms.data,
apsapprove1Status: approveStatus == '0' ? approveStatus : this.appraisalPms.data.apsapprove1Status,
...this.appraisalPms,
apsapprove1Status: approveStatus == '0' ? approveStatus : this.appraisalPms.apsapprove1Status,
apsapprove2Status: approveStatus
}
break
}
case ("3"): {
body = {
...this.appraisalPms.data,
...this.appraisalPms,
apsapprove2Status: approveStatus == '0' ? approveStatus : this.appraisalPms.data.apsapprove2Status,
apsapprove2Status: approveStatus == '0' ? approveStatus : this.appraisalPms.apsapprove2Status,
apsapprove3Status: approveStatus
}
break
}
case ("4"): {
body = {
...this.appraisalPms.data,
apsapprove3Status: approveStatus == '0' ? approveStatus : this.appraisalPms.data.apsapprove3Status,
...this.appraisalPms,
apsapprove3Status: approveStatus == '0' ? approveStatus : this.appraisalPms.apsapprove3Status,
apsapprove4Status: approveStatus
}
break
}
case ("5"): {
body = {
...this.appraisalPms.data,
apsapprove4Status: approveStatus == '0' ? approveStatus : this.appraisalPms.data.apsapprove4Status,
...this.appraisalPms,
apsapprove4Status: approveStatus == '0' ? approveStatus : this.appraisalPms.apsapprove4Status,
apsapprove5Status: approveStatus
}
break
......@@ -566,7 +469,6 @@ export class PmsKpiComponent {
confirmButton: '!swal2-button-bg-green',
}
});
this.getAppraisalPmsForm()
} else {
Swal.fire({
title: 'ยกเลิก!',
......@@ -602,4 +504,14 @@ export class PmsKpiComponent {
this.part9show = check
this.part10show = check
}
scrollToTable(event: MouseEvent) {
const target = event.target as HTMLElement;
const position = target.getBoundingClientRect();
window.scrollTo({
top: position.top + window.scrollY - 100,
behavior: 'smooth'
});
}
}
......@@ -8,10 +8,8 @@
</div> -->
</ng-container>
<ng-template #newSelfEvaluation>
<ng-container *ngIf="appraisalCompentency.select&&allCompetencyTypeId.length">
<app-pms-form-employee [evaluationForm]="'self'"
[evaluationRoundId]="appraisalCompentency.select.masfromEvaluationRound.evaluationRoundId"
[evaluaterId]="evaluatee.data.employeeId" [allCompetencyTypeId]="allCompetencyTypeId"
<ng-container *ngIf="appraisalCompentency.select&&allCompetencyTypeId.length&&evaluatee.data.employeeId">
<app-pms-form-employee [evaluationForm]="'self'" [evaluaterId]="evaluatee.data.employeeId"
[evaluateeId]="evaluatee.data.employeeId"></app-pms-form-employee>
</ng-container>
</ng-template>
......
......@@ -251,9 +251,7 @@
[evaluateeId]="formEvaluation.evaluateeId"></app-idp-evalution> -->
<app-pms-form-employee [evaluationForm]="'sup'" [currentTap]="'idp'"
(sendReturnPath)="getBossList();pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
[evaluationRoundId]="formEvaluation.evaluationRoundId" [evaluaterId]="formEvaluation.evaluaterId"
[allCompetencyTypeId]="formEvaluation.allCompetencyTypeId"
[evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
[evaluaterId]="formEvaluation.evaluaterId" [evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
</ng-container>
<ng-container *ngIf="pageEvalution=='pms'">
<!-- <app-pms-evalution [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า','ประเมิน']"
......@@ -262,8 +260,7 @@
[evaluateeId]="formEvaluation.evaluateeId"></app-pms-evalution> -->
<app-pms-form-employee [evaluationForm]="'sup'" [currentTap]="'pms'"
(sendReturnPath)="getBossList();pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
[evaluationRoundId]="formEvaluation.evaluationRoundId" [evaluaterId]="formEvaluation.evaluaterId"
[evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
[evaluaterId]="formEvaluation.evaluaterId" [evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
</ng-container>
<ng-container *ngIf="pageEvalution!='idp'&&pageEvalution!='pms'&&pageEvalution!=''">
<!-- <app-evaluation [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า','ประเมิน']"
......@@ -273,7 +270,5 @@
[competencyTypeId]="formEvaluation.competencyTypeId"></app-evaluation> -->
<app-pms-form-employee [evaluationForm]="'sup'" [currentTap]="pageEvalution"
(sendReturnPath)="getBossList();pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
[evaluationRoundId]="formEvaluation.evaluationRoundId" [evaluaterId]="formEvaluation.evaluaterId"
[allCompetencyTypeId]="formEvaluation.allCompetencyTypeId"
[evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
[evaluaterId]="formEvaluation.evaluaterId" [evaluateeId]="formEvaluation.evaluateeId"></app-pms-form-employee>
</ng-container>
\ No newline at end of file
......@@ -743,6 +743,7 @@ export interface AppraisalCompentencyModel2 {
lastStep: string
checkStep: string
masfromStatusType: MasfromStatusType
comType: string
}
export interface MasfromStatusType {
code: string
......
export interface CompetencyModel {
competency: Competency[]
idp: Idp
pms: Pms
statusAll: StatusAll
evaluationRoundId: string,
tdesc: string,
edesc: string,
}
export interface Competency {
active: boolean
apsapprove1: Apsapprove1
apsapprove2: Apsapprove2
apsapprove3: Apsapprove3
apsapprove4: Apsapprove4
apsapprove5: Apsapprove5
apsassessy: Apsassessy
checkStep: string
companyId: string
comType: string
currentStep: string
lastStep: string
masfromEvaluationAssessment1lList: MasfromEvaluationAssessment1lList[]
masfromEvaluationRound: MasfromEvaluationRound
masfromStatusType: MasfromStatusType
personalLevel: PersonalLevel2
}
export interface Apsapprove1 {
bossId: string
bu1: Bu1
bu2: Bu2
bu3: Bu3
bu4: Bu4
bu5: Bu5
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job
lname: string
pl: Pl
position: Position
prefix: Prefix
resignDate: string
startDate: string
status: Status
thFullName: string
time0: Time0
}
export interface Bu1 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu2 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu3 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu4 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu5 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix {
edesc: string
prefixId: string
tdesc: string
}
export interface Status {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time0 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove2 {
bossId: string
bu1: Bu12
bu2: Bu22
bu3: Bu32
bu4: Bu42
bu5: Bu52
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job2
lname: string
pl: Pl2
position: Position2
prefix: Prefix2
resignDate: string
startDate: string
status: Status2
thFullName: string
time0: Time02
}
export interface Bu12 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu22 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu32 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu42 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu52 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job2 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl2 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position2 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix2 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status2 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time02 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove3 {
bossId: string
bu1: Bu13
bu2: Bu23
bu3: Bu33
bu4: Bu43
bu5: Bu53
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job3
lname: string
pl: Pl3
position: Position3
prefix: Prefix3
resignDate: string
startDate: string
status: Status3
thFullName: string
time0: Time03
}
export interface Bu13 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu23 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu33 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu43 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu53 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job3 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl3 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position3 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix3 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status3 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time03 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove4 {
bossId: string
bu1: Bu14
bu2: Bu24
bu3: Bu34
bu4: Bu44
bu5: Bu54
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job4
lname: string
pl: Pl4
position: Position4
prefix: Prefix4
resignDate: string
startDate: string
status: Status4
thFullName: string
time0: Time04
}
export interface Bu14 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu24 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu34 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu44 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu54 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job4 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl4 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position4 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix4 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status4 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time04 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove5 {
bossId: string
bu1: Bu15
bu2: Bu25
bu3: Bu35
bu4: Bu45
bu5: Bu55
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job5
lname: string
pl: Pl5
position: Position5
prefix: Prefix5
resignDate: string
startDate: string
status: Status5
thFullName: string
time0: Time05
}
export interface Bu15 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu25 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu35 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu45 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu55 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job5 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl5 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position5 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix5 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status5 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time05 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsassessy {
bossId: string
bu1: Bu16
bu2: Bu26
bu3: Bu36
bu4: Bu46
bu5: Bu56
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job6
lname: string
pl: Pl6
position: Position6
prefix: Prefix6
resignDate: string
startDate: string
status: Status6
thFullName: string
time0: Time06
}
export interface Bu16 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu26 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu36 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu46 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu56 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job6 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl6 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position6 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix6 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status6 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time06 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface MasfromEvaluationAssessment1lList {
apsapprove1Comment: string
apsapprove1Date: string
apsapprove1Status: string
apsapprove2Comment: string
apsapprove2Date: string
apsapprove2Status: string
apsapprove3Comment: string
apsapprove3Date: string
apsapprove3Status: string
apsapprove4Comment: string
apsapprove4Date: string
apsapprove4Status: string
apsapprove5Comment: string
apsapprove5Date: string
apsapprove5Status: string
apsassessyComment: string
apsassessyDate: string
apsassessyStatus: string
averageScore: number
companyId: string
competencyType: CompetencyType
evaluationResults: string
lineNo: number
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
plId: string
sumEvaluationResults: string
weightedTotal: number
masfromEvaluationAssessment2List: MasfromEvaluationAssessment2List[]
}
export interface MasfromEvaluationAssessment2List {
masfromEvaluationAssessment1: string
runNo: number
companyId: string
scoreTopicExpectation: number
groupAssessment1: GroupAssessment1
}
export interface GroupAssessment1 {
personalLevelModel: PersonalLevelModel
competencyIndicatorsCourses1Mini: CompetencyIndicatorsCourses1Mini
companyId: string
groupAssessmentMini: GroupAssessmentMini
}
export interface GroupAssessmentMini {
personalLevel: PersonalLevel2
competencyIndicatorsCourses1Mini: CompetencyIndicatorsCourses1Mini2
companyId: string
edesc: string
tdesc: string
}
export interface CompetencyIndicatorsCourses1Mini2 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses03
lineNo: number
companyId: string
competencyCourseId: string
competencyCourse: CompetencyCourse2[]
behavioralIndicatorsList: BehavioralIndicatorsList2[]
}
export interface CompetencyIndicatorsCourses03 {
competencyTopic: CompetencyTopic3
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
expectation: string
}
export interface BehavioralIndicatorsList2 {
competencyIndicators1: CompetencyIndicators12
runNo: number
companyId: string
assessmentId: string
behavioralIndicators: string
competencyAssessment: CompetencyAssessment2[]
competencyBehavioral: CompetencyBehavioral2
}
export interface CompetencyBehavioral2 {
scoreTopicExpectation: number
companyId: string
}
export interface CompetencyAssessment2 {
assessmentId: string
companyId: string
edesc: string
tdesc: string
shortName: string
}
export interface CompetencyTopic4 {
competencyTopicId: string
competencyType: CompetencyType5
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyIndicators12 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses04
lineNo: number
companyId: string
competencyCourseId: string
}
export interface CompetencyIndicatorsCourses04 {
competencyTopic: CompetencyTopic4
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
}
export interface CompetencyCourse2 {
competencyCourseId: string
companyId: string
edesc: string
tdesc: string
courseDetail: string
courseTopic: string
courseLinkMylearn: string
}
export interface CompetencyTopic3 {
competencyTopicId: string
competencyType: CompetencyType4
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType4 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
}
export interface BehavioralIndicatorsList {
competencyIndicators1: CompetencyIndicators1
runNo: number
companyId: string
assessmentId: string
behavioralIndicators: string
competencyAssessment: CompetencyAssessment[]
competencyBehavioral: CompetencyBehavioral
}
export interface CompetencyBehavioral {
scoreTopicExpectation: number
companyId: string
}
export interface CompetencyIndicatorsCourses1Mini {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses0
lineNo: number
companyId: string
competencyCourseId: string
competencyCourse: CompetencyCourse[]
behavioralIndicatorsList: BehavioralIndicatorsList[]
}
export interface CompetencyType {
companyId: string
competencyTypeId: string
edesc: string
expectationLevel: string
shortName: string
tdesc: string
weight: number
}
export interface MasfromEvaluationRound {
active: number
apsPeriodEnd: string
apsPeriodStart: string
apsyear: string
checkForm: number
companyId: string
edesc: string
evaluationRoundId: string
jlId: string
personalLevel: PersonalLevel[]
statusCode: StatusCode
statusFrom: StatusFrom
tdesc: string
}
export interface PersonalLevel {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface StatusCode {
code: string
edesc: string
tdesc: string
}
export interface StatusFrom {
code: string
edesc: string
tdesc: string
}
export interface MasfromStatusType {
code: string
edesc: string
tdesc: string
}
export interface PersonalLevel2 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Idp {
active: boolean
apsapprove1: Apsapprove12
apsapprove2: Apsapprove22
apsapprove3: Apsapprove32
apsapprove4: Apsapprove42
apsapprove5: Apsapprove52
apsassessy: Apsassessy2
boss: Boss
checkStep: string
companyId: string
competencyIndicatorsCourses1: CompetencyIndicatorsCourses1[]
countFormStep: string
currentStep: string
lastStep: string
masfromEvaluationIdp: MasfromEvaluationIdp
masfromEvaluationRound: MasfromEvaluationRound3
masfromStatusType: MasfromStatusType3
personalLevel: PersonalLevel5
}
export interface Apsapprove12 {
bossId: string
bu1: Bu17
bu2: Bu27
bu3: Bu37
bu4: Bu47
bu5: Bu57
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job7
lname: string
pl: Pl7
position: Position7
prefix: Prefix7
resignDate: string
startDate: string
status: Status7
thFullName: string
time0: Time07
}
export interface Bu17 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu27 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu37 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu47 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu57 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job7 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl7 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position7 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix7 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status7 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time07 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove22 {
bossId: string
bu1: Bu18
bu2: Bu28
bu3: Bu38
bu4: Bu48
bu5: Bu58
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job8
lname: string
pl: Pl8
position: Position8
prefix: Prefix8
resignDate: string
startDate: string
status: Status8
thFullName: string
time0: Time08
}
export interface Bu18 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu28 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu38 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu48 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu58 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job8 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl8 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position8 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix8 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status8 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time08 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove32 {
bossId: string
bu1: Bu19
bu2: Bu29
bu3: Bu39
bu4: Bu49
bu5: Bu59
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job9
lname: string
pl: Pl9
position: Position9
prefix: Prefix9
resignDate: string
startDate: string
status: Status9
thFullName: string
time0: Time09
}
export interface Bu19 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu29 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu39 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu49 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu59 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job9 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl9 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position9 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix9 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status9 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time09 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove42 {
bossId: string
bu1: Bu110
bu2: Bu210
bu3: Bu310
bu4: Bu410
bu5: Bu510
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job10
lname: string
pl: Pl10
position: Position10
prefix: Prefix10
resignDate: string
startDate: string
status: Status10
thFullName: string
time0: Time010
}
export interface Bu110 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu210 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu310 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu410 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu510 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job10 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl10 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position10 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix10 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status10 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time010 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove52 {
bossId: string
bu1: Bu111
bu2: Bu211
bu3: Bu311
bu4: Bu411
bu5: Bu511
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job11
lname: string
pl: Pl11
position: Position11
prefix: Prefix11
resignDate: string
startDate: string
status: Status11
thFullName: string
time0: Time011
}
export interface Bu111 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu211 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu311 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu411 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu511 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job11 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl11 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position11 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix11 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status11 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time011 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsassessy2 {
bossId: string
bu1: Bu112
bu2: Bu212
bu3: Bu312
bu4: Bu412
bu5: Bu512
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job12
lname: string
pl: Pl12
position: Position12
prefix: Prefix12
resignDate: string
startDate: string
status: Status12
thFullName: string
time0: Time012
}
export interface Bu112 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu212 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu312 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu412 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu512 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job12 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl12 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position12 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix12 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status12 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time012 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Boss {
bossId: string
bu1: Bu113
bu2: Bu213
bu3: Bu313
bu4: Bu413
bu5: Bu513
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job13
lname: string
pl: Pl13
position: Position13
prefix: Prefix13
resignDate: string
startDate: string
status: Status13
thFullName: string
time0: Time013
}
export interface Bu113 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu213 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu313 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu413 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu513 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job13 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl13 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position13 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix13 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status13 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time013 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface CompetencyIndicatorsCourses1 {
behavioralIndicators: BehavioralIndicator[]
competencyCourse: CompetencyCourse[]
competencyCourseId: string
idpDevelopmentPlan: IdpDevelopmentPlan
indicatorsCourses0: IndicatorsCourses0
}
export interface BehavioralIndicator {
assessmentId: string
behavioralIndicators: string
companyId: string
competencyAssessment: CompetencyAssessment[]
competencyIndicators1: CompetencyIndicators1
runNo: number
}
export interface CompetencyAssessment {
assessmentId: string
companyId: string
edesc: string
shortName: string
tdesc: string
}
export interface CompetencyIndicators1 {
companyId: string
competencyCourseId: string
competencyIndicatorsCourses0: CompetencyIndicatorsCourses0
lineNo: number
}
export interface CompetencyIndicatorsCourses0 {
companyId: string
competencyTopic: CompetencyTopic
edesc: string
indicatorsCourseDetailEn: string
indicatorsCourseDetailTh: string
tdesc: string
}
export interface CompetencyTopic {
companyId: string
competencyDetail: string
competencyFiles: string
competencyTopicId: string
competencyType: CompetencyType2
edesc: string
expectationLevel: string
lineNo: number
tdesc: string
}
export interface CompetencyType2 {
companyId: string
competencyTypeId: string
edesc: string
expectationLevel: string
shortName: string
tdesc: string
weight: number
}
export interface CompetencyCourse {
companyId: string
competencyCourseId: string
edesc: string
tdesc: string
}
export interface IdpDevelopmentPlan {
coachMentor: boolean
companyId: string
evaluationId: string
ojtJobAssignment: boolean
planId: string
planName: string
training: boolean
}
export interface IndicatorsCourses0 {
companyId: string
competencyTopic: CompetencyTopic2
edesc: string
indicatorsCourseDetailEn: string
indicatorsCourseDetailTh: string
tdesc: string
}
export interface CompetencyTopic2 {
companyId: string
competencyDetail: string
competencyFiles: string
competencyTopicId: string
competencyType: CompetencyType3
edesc: string
expectationLevel: string
lineNo: number
tdesc: string
}
export interface CompetencyType3 {
companyId: string
competencyTypeId: string
edesc: string
expectationLevel: string
shortName: string
tdesc: string
weight: number
}
export interface MasfromEvaluationIdp {
apsapprove1Comment: string
apsapprove1Date: string
apsapprove1Status: string
apsapprove2Comment: string
apsapprove2Date: string
apsapprove2Status: string
apsapprove3Comment: string
apsapprove3Date: string
apsapprove3Status: string
apsapprove4Comment: string
apsapprove4Date: string
apsapprove4Status: string
apsapprove5Comment: string
apsapprove5Date: string
apsapprove5Status: string
apsassessyComment: string
apsassessyDate: string
apsassessyStatus: string
companyId: string
idpStatus: string
masfromEvaluationAssessment: MasfromEvaluationAssessment
plId: string
}
export interface MasfromEvaluationAssessment {
active: boolean
apsapprove1: Apsapprove13
apsapprove2: Apsapprove23
apsapprove3: Apsapprove33
apsapprove4: Apsapprove43
apsapprove5: Apsapprove53
apsassessy: Apsassessy3
companyId: string
masfromEvaluationAssessment1: MasfromEvaluationAssessment1[]
masfromEvaluationRound: MasfromEvaluationRound2
personalLevel: PersonalLevel4
statusCheckDate: boolean
}
export interface Apsapprove13 {
bossId: string
bu1: Bu114
bu2: Bu214
bu3: Bu314
bu4: Bu414
bu5: Bu514
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job14
lname: string
pl: Pl14
position: Position14
prefix: Prefix14
resignDate: string
startDate: string
status: Status14
thFullName: string
time0: Time014
}
export interface Bu114 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu214 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu314 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu414 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu514 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job14 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl14 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position14 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix14 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status14 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time014 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove23 {
bossId: string
bu1: Bu115
bu2: Bu215
bu3: Bu315
bu4: Bu415
bu5: Bu515
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job15
lname: string
pl: Pl15
position: Position15
prefix: Prefix15
resignDate: string
startDate: string
status: Status15
thFullName: string
time0: Time015
}
export interface Bu115 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu215 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu315 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu415 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu515 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job15 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl15 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position15 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix15 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status15 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time015 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove33 {
bossId: string
bu1: Bu116
bu2: Bu216
bu3: Bu316
bu4: Bu416
bu5: Bu516
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job16
lname: string
pl: Pl16
position: Position16
prefix: Prefix16
resignDate: string
startDate: string
status: Status16
thFullName: string
time0: Time016
}
export interface Bu116 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu216 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu316 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu416 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu516 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job16 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl16 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position16 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix16 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status16 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time016 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove43 {
bossId: string
bu1: Bu117
bu2: Bu217
bu3: Bu317
bu4: Bu417
bu5: Bu517
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job17
lname: string
pl: Pl17
position: Position17
prefix: Prefix17
resignDate: string
startDate: string
status: Status17
thFullName: string
time0: Time017
}
export interface Bu117 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu217 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu317 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu417 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu517 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job17 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl17 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position17 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix17 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status17 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time017 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove53 {
bossId: string
bu1: Bu118
bu2: Bu218
bu3: Bu318
bu4: Bu418
bu5: Bu518
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job18
lname: string
pl: Pl18
position: Position18
prefix: Prefix18
resignDate: string
startDate: string
status: Status18
thFullName: string
time0: Time018
}
export interface Bu118 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu218 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu318 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu418 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu518 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job18 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl18 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position18 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix18 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status18 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time018 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsassessy3 {
bossId: string
bu1: Bu119
bu2: Bu219
bu3: Bu319
bu4: Bu419
bu5: Bu519
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job19
lname: string
pl: Pl19
position: Position19
prefix: Prefix19
resignDate: string
startDate: string
status: Status19
thFullName: string
time0: Time019
}
export interface Bu119 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu219 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu319 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu419 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu519 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job19 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl19 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position19 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix19 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status19 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time019 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface MasfromEvaluationAssessment1 {
apsapprove1Comment: string
apsapprove1Date: string
apsapprove1Status: string
apsapprove2Comment: string
apsapprove2Date: string
apsapprove2Status: string
apsapprove3Comment: string
apsapprove3Date: string
apsapprove3Status: string
apsapprove4Comment: string
apsapprove4Date: string
apsapprove4Status: string
apsapprove5Comment: string
apsapprove5Date: string
apsapprove5Status: string
apsassessyComment: string
apsassessyDate: string
apsassessyStatus: string
averageScore: number
checkStep: string
companyId: string
competencyType: CompetencyType4
countFormStep: string
currentStep: string
evaluationResults: string
lastStep: string
lineNo: number
masfromStatusType: MasfromStatusType2
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
plId: string
sumEvaluationResults: string
weightedTotal: number
}
export interface CompetencyType4 {
companyId: string
competencyTypeId: string
edesc: string
expectationLevel: string
shortName: string
tdesc: string
weight: number
}
export interface MasfromStatusType2 {
code: string
edesc: string
tdesc: string
}
export interface MasfromEvaluationRound2 {
active: number
apsPeriodEnd: string
apsPeriodStart: string
apsyear: string
checkForm: number
companyId: string
edesc: string
evaluationRoundId: string
jlId: string
personalLevel: PersonalLevel3[]
statusCode: StatusCode2
statusFrom: StatusFrom2
tdesc: string
}
export interface PersonalLevel3 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface StatusCode2 {
code: string
edesc: string
tdesc: string
}
export interface StatusFrom2 {
code: string
edesc: string
tdesc: string
}
export interface PersonalLevel4 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface MasfromEvaluationRound3 {
apsPeriodEnd: string
apsPeriodStart: string
apsyear: string
companyId: string
edesc: string
employee: Employee[]
evaluationRoundId: string
tdesc: string
}
export interface Employee {
bossId: string
bu1: Bu120
bu2: Bu220
bu3: Bu320
bu4: Bu420
bu5: Bu520
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job20
lname: string
pl: Pl20
position: Position20
prefix: Prefix20
resignDate: string
startDate: string
status: Status20
thFullName: string
time0: Time020
}
export interface Bu120 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu220 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu320 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu420 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu520 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job20 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl20 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position20 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix20 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status20 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time020 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface MasfromStatusType3 {
code: string
edesc: string
tdesc: string
}
export interface PersonalLevel5 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Pms {
active: boolean
apsapprove1: Apsapprove14
apsapprove1Comment: string
apsapprove1Date: string
apsapprove1Status: string
apsapprove2: Apsapprove24
apsapprove2Comment: string
apsapprove2Date: string
apsapprove2Status: string
apsapprove3: Apsapprove34
apsapprove3Comment: string
apsapprove3Date: string
apsapprove3Status: string
apsapprove4: Apsapprove44
apsapprove4Comment: string
apsapprove4Date: string
apsapprove4Status: string
apsapprove5: Apsapprove54
apsapprove5Comment: string
apsapprove5Date: string
apsapprove5Status: string
apsassessy: Apsassessy4
apsassessyComment: string
apsassessyDate: string
apsassessyStatus: string
cfrDetail: string
checkStep: string
companyId: string
currentStep: string
employeeStrengths: string
gradeScore: string
improvementPlan: string
lastStep: string
learningTopicsForImprovement: string
learningTopicsForStrengths: string
learningTopicsForWeaknesses: string
masfromStatusType: MasfromStatusType4
netScore: number
part1Detail: Part1Detail[]
part1Percentage: number
part1SumScore: number
part2Detail: Part2Detail[]
part2Percentage: number
part2SumScore: number
part3Detail: Part3Detail[]
part3Percentage: number
part3SumScore: number
part4Detail: Part4Detail[]
part4Percentage: number
part4SumScore: number
part5Detail: Part5Detail[]
part5Percentage: number
part5SumScore: number
part6Detail: Part6Detail[]
part6Percentage: number
part6SumScore: number
part7Detail: Part7Detail[]
part7Percentage: number
part7SumScore: number
performanceWeaknesses: string
personalLevel: PersonalLevel11
pmsMasfromEvaluationRoundModel: PmsMasfromEvaluationRoundModel
}
export interface Apsapprove14 {
bossId: string
bu1: Bu121
bu2: Bu221
bu3: Bu321
bu4: Bu421
bu5: Bu521
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job21
lname: string
pl: Pl21
position: Position21
prefix: Prefix21
resignDate: string
startDate: string
status: Status21
thFullName: string
time0: Time021
}
export interface Bu121 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu221 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu321 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu421 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu521 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job21 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl21 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position21 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix21 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status21 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time021 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove24 {
bossId: string
bu1: Bu122
bu2: Bu222
bu3: Bu322
bu4: Bu422
bu5: Bu522
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job22
lname: string
pl: Pl22
position: Position22
prefix: Prefix22
resignDate: string
startDate: string
status: Status22
thFullName: string
time0: Time022
}
export interface Bu122 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu222 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu322 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu422 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu522 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job22 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl22 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position22 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix22 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status22 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time022 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove34 {
bossId: string
bu1: Bu123
bu2: Bu223
bu3: Bu323
bu4: Bu423
bu5: Bu523
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job23
lname: string
pl: Pl23
position: Position23
prefix: Prefix23
resignDate: string
startDate: string
status: Status23
thFullName: string
time0: Time023
}
export interface Bu123 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu223 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu323 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu423 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu523 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job23 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl23 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position23 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix23 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status23 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time023 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove44 {
bossId: string
bu1: Bu124
bu2: Bu224
bu3: Bu324
bu4: Bu424
bu5: Bu524
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job24
lname: string
pl: Pl24
position: Position24
prefix: Prefix24
resignDate: string
startDate: string
status: Status24
thFullName: string
time0: Time024
}
export interface Bu124 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu224 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu324 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu424 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu524 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job24 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl24 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position24 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix24 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status24 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time024 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsapprove54 {
bossId: string
bu1: Bu125
bu2: Bu225
bu3: Bu325
bu4: Bu425
bu5: Bu525
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job25
lname: string
pl: Pl25
position: Position25
prefix: Prefix25
resignDate: string
startDate: string
status: Status25
thFullName: string
time0: Time025
}
export interface Bu125 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu225 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu325 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu425 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu525 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job25 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl25 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position25 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix25 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status25 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time025 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface Apsassessy4 {
bossId: string
bu1: Bu126
bu2: Bu226
bu3: Bu326
bu4: Bu426
bu5: Bu526
efname: string
elname: string
employeeId: string
endWorkDate: string
engFullName: string
fname: string
job: Job26
lname: string
pl: Pl26
position: Position26
prefix: Prefix26
resignDate: string
startDate: string
status: Status26
thFullName: string
time0: Time026
}
export interface Bu126 {
bu1id: string
companyId: string
edesc: string
tdesc: string
}
export interface Bu226 {
bu2id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu326 {
bu3id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu426 {
bu4id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Bu526 {
bu5id: string
companyId: string
edesc: string
parent: string
tdesc: string
}
export interface Job26 {
edesc: string
jobCodeId: string
tdesc: string
}
export interface Pl26 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface Position26 {
companyId: string
consolidate: string
edesc: string
positionId: string
shortName: string
tdesc: string
}
export interface Prefix26 {
edesc: string
prefixId: string
tdesc: string
}
export interface Status26 {
edesc: string
statusCode: string
statusType: string
tdesc: string
}
export interface Time026 {
edesc: string
hourD: number
stickTm: string
tdesc: string
time0id: string
}
export interface MasfromStatusType4 {
code: string
edesc: string
tdesc: string
}
export interface Part1Detail {
companyId: string
groupAssessment1: GroupAssessment1
lineNo: number
scoreTopicExpectation: number
scoreTopicExpectationBoss: number
weight: number
}
export interface GroupAssessment1 {
companyId: string
personalLevelModel: PersonalLevelModel
pmsGroupAssessment0: PmsGroupAssessment0
pmsTopic: PmsTopic2
}
export interface PersonalLevelModel {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsGroupAssessment0 {
companyId: string
personalLevel: PersonalLevel6
pmsTopic: PmsTopic
}
export interface PersonalLevel6 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsTopic {
companyId: string
completionDate: string
detailUnit: string
edesc: string
indicatorsDetail: string
lineNo: number
performanceGoalsDetail: string
pmsTopicId: string
pmsType: PmsType
targetAdetail: string
targetBdetail: string
targetCdetail: string
targetDdetail: string
targetEdetail: string
tdesc: string
weight: number
}
export interface PmsType {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
weight: number
}
export interface Part2Detail {
companyId: string
groupAssessment1: GroupAssessment12
lineNo: number
scoreTopicExpectation: number
scoreTopicExpectationBoss: number
weight: number
}
export interface GroupAssessment12 {
companyId: string
personalLevelModel: PersonalLevelModel2
pmsGroupAssessment0: PmsGroupAssessment02
pmsTopic: PmsTopic4
}
export interface PersonalLevelModel2 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsGroupAssessment02 {
companyId: string
personalLevel: PersonalLevel7
pmsTopic: PmsTopic3
}
export interface PersonalLevel7 {
companyId: string
edesc: string
plId: 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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
weight: number
}
export interface Part3Detail {
companyId: string
groupAssessment1: GroupAssessment13
lineNo: number
scoreTopicExpectation: number
scoreTopicExpectationBoss: number
weight: number
}
export interface GroupAssessment13 {
companyId: string
personalLevelModel: PersonalLevelModel3
pmsGroupAssessment0: PmsGroupAssessment03
pmsTopic: PmsTopic6
}
export interface PersonalLevelModel3 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsGroupAssessment03 {
companyId: string
personalLevel: PersonalLevel8
pmsTopic: PmsTopic5
}
export interface PersonalLevel8 {
companyId: string
edesc: string
plId: 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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
weight: number
}
export interface Part4Detail {
apsapprove1Comment: string
apsapprove1Date: string
apsapprove1Status: string
apsapprove2Comment: string
apsapprove2Date: string
apsapprove2Status: string
apsapprove3Comment: string
apsapprove3Date: string
apsapprove3Status: string
apsapprove4Comment: string
apsapprove4Date: string
apsapprove4Status: string
apsapprove5Comment: string
apsapprove5Date: string
apsapprove5Status: string
apsassessyComment: string
apsassessyDate: string
apsassessyStatus: string
averageScore: number
checkStep: string
companyId: string
competencyType: CompetencyType5
countFormStep: string
currentStep: string
evaluationResults: string
lastStep: string
lineNo: number
masfromStatusType: MasfromStatusType5
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
plId: string
sumEvaluationResults: string
weightedTotal: number
}
export interface CompetencyType5 {
companyId: string
competencyTypeId: string
edesc: string
expectationLevel: string
shortName: string
tdesc: string
weight: number
}
export interface MasfromStatusType5 {
code: string
edesc: string
tdesc: string
}
export interface Part5Detail {
detailUnit: string
edesc: string
performanceTargets: string
pmsWorkingTimeId: string
pmsWorkingTimScore: number
pmsWorkingTimScoreBoss: number
targetADetail: string
targetBDetail: string
targetCDetail: string
targetDDetail: string
targetEDetail: string
tdesc: string
weight: number
}
export interface Part6Detail {
companyId: string
groupAssessment1: GroupAssessment14
lineNo: number
scoreTopicExpectation: number
scoreTopicExpectationBoss: number
weight: number
}
export interface GroupAssessment14 {
companyId: string
personalLevelModel: PersonalLevelModel4
pmsGroupAssessment0: PmsGroupAssessment04
pmsTopic: PmsTopic8
}
export interface PersonalLevelModel4 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsGroupAssessment04 {
companyId: string
personalLevel: PersonalLevel9
pmsTopic: PmsTopic7
}
export interface PersonalLevel9 {
companyId: string
edesc: string
plId: 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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
weight: number
}
export interface Part7Detail {
companyId: string
groupAssessment1: GroupAssessment15
lineNo: number
scoreTopicExpectation: number
scoreTopicExpectationBoss: number
weight: number
}
export interface GroupAssessment15 {
companyId: string
personalLevelModel: PersonalLevelModel5
pmsGroupAssessment0: PmsGroupAssessment05
pmsTopic: PmsTopic10
}
export interface PersonalLevelModel5 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsGroupAssessment05 {
companyId: string
personalLevel: PersonalLevel10
pmsTopic: PmsTopic9
}
export interface PersonalLevel10 {
companyId: string
edesc: string
plId: 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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
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 {
companyId: string
edesc: string
pmsTypeId: string
shortName: string
tdesc: string
weight: number
}
export interface PersonalLevel11 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface PmsMasfromEvaluationRoundModel {
active: number
apsPeriodEnd: string
apsPeriodStart: string
apsyear: string
checkForm: number
companyId: string
edesc: string
jlId: string
personalLevel: PersonalLevel12[]
pmsEvaluationRoundId: string
statusCode: StatusCode3
statusFrom: StatusFrom3
tdesc: string
}
export interface PersonalLevel12 {
companyId: string
edesc: string
plId: string
tdesc: string
}
export interface StatusCode3 {
code: string
edesc: string
tdesc: string
}
export interface StatusFrom3 {
code: string
edesc: string
tdesc: string
}
export interface StatusAll {
additionalProp1: string
additionalProp2: string
additionalProp3: string
}
......@@ -7,6 +7,7 @@ import { AppraisalCompentencyModel, AppraisalCompentencyModel2 } from '../model/
import { AppraisalSubordinateModel } from '../model/appraisal-subordinate.model';
import { AppraisalPmsFormModel } from '../model/appraisal-pms-form.model';
import { AppraisalPmsModel } from '../model/appraisal-pms.model';
import { CompetencyModel } from '../model/competency.model';
@Injectable({
providedIn: 'root'
})
......@@ -15,6 +16,9 @@ export class AppraisalService {
urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) {
}
getCompentencyAll(apsassessy: string, bossId?: string): Observable<CompetencyModel[]> {
return this.http.get<CompetencyModel[]>(this.urlApi + "/competencyAll/emp?apsassessy=" + apsassessy + (bossId ? "&bossId=" + bossId : ''))
}
getFormCompentencyById(evaluationRoundId: string, apsassessy: string, typeId: string): Observable<AppraisalCompentencyModel2> {
return this.http.get<AppraisalCompentencyModel2>(this.urlApi + "/competency/" + evaluationRoundId + "/" + apsassessy + "/" + typeId)
}
......
......@@ -5925,6 +5925,10 @@ select option:focus {
.fill-success {
fill: rgb(var(--color-success));
}
.fill-mute {
fill: #cccccc;
}
.fill-transparent {
fill: transparent;
}
......@@ -25034,6 +25038,13 @@ div:where(.swal2-container) div:where(.swal2-validation-message) {
border-color: red !important;
}
.\!bg-white{
.\!bg-white {
background-color: white;
}
.ellipsis-text {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%
}
\ No newline at end of file
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