Commit d5958642 by Nattana Chaiyamat

แปลภาษา part1

parent 815eabb2
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
การจัดการสมรรถนะ
{{'menu.CompetencyManage' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,20 +11,20 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="currentPath = 1;pathTitle = ['การประเมินสมรรถนะ','การจัดการสมรรถนะ','ตัวชี้วัดเเละหลักสูตร']">
ตัวชี้วัดเเละหลักสูตร
(click)="currentPath = 1;pathTitle = ['CompetencySystem', 'menu.CompetencyManage','BIsAndCDR']">
{{'BIsAndCDR' | translate}}
</a>
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="currentPath = 2;pathTitle = ['การประเมินสมรรถนะ','การจัดการสมรรถนะ','จัดกลุ่มสมรรถนะ']">
จัดกลุ่มสมรรถนะ
(click)="currentPath = 2;pathTitle = ['CompetencySystem', 'menu.CompetencyManage','CompetencyMapping']">
{{'CompetencyMapping' | translate}}
</a>
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-3" data-hs-tab="#underline-3"
aria-controls="underline-3"
(click)="currentPath = 3;pathTitle = ['การประเมินสมรรถนะ','การจัดการสมรรถนะ','กำหนดผู้ประเมิน']">
กำหนดผู้ประเมิน
(click)="currentPath = 3;pathTitle = ['CompetencySystem', 'menu.CompetencyManage','AssignApprover']">
{{'AssignApprover' | translate}}
</a>
</nav>
</div>
......
......@@ -6,6 +6,6 @@ import { Component } from '@angular/core';
styleUrls: ['./competency-management.component.scss']
})
export class CompetencyManagementComponent {
pathTitle = ['การประเมินสมรรถนะ', 'การจัดการสมรรถนะ','ตัวชี้วัดและหลักสูตร']
pathTitle = ['CompetencySystem', 'menu.CompetencyManage','BIsAndCDR']
currentPath = 1
}
......@@ -4,10 +4,10 @@
<button type="button" class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
(click)="onEdit()">
<i class="ti ti-chevron-left"></i>
ย้อนกลับ
{{'Back' | translate}}
</button>
<div class="font-size-18px font-weight-700 align-center font-bold py-2 text-primary px-4">
แก้ไขกลุ่มสมรรถนะ
{{'EditCompetencyMapping' | translate}}
</div>
</div>
</div>
......@@ -15,7 +15,7 @@
<div *ngIf="jobCode" class="py-2 border-b-2 border-collapse ">
<div class="grid grid-cols-3 gap-6">
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">รหัส</label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">{{'JDCode' | translate}}</label>
</div>
</div>
<div class="grid grid-cols-3 gap-6">
......@@ -27,10 +27,12 @@
</div>
<div class="grid grid-cols-3 gap-6 mt-5">
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">ชื่อลักษณะงาน (ไทย)</label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">{{'JobDescriptionThai'|
translate}}</label>
</div>
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">ชื่อลักษณะงาน (อังกฤษ)</label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">{{'JobDescriptionEng'|
translate}}</label>
</div>
</div>
<div class="grid grid-cols-3 gap-6">
......@@ -56,7 +58,7 @@
<input type="checkbox" class="ti-form-checkbox pointer-events-none" id="hs-default-checkbox"
[(ngModel)]="isDataListChecked">
<label for="hs-default-checkbox" class="text-sm text-gray-500 mx-2 pointer-events-none">
{{numDataListChecked}} Selected</label>
{{numDataListChecked}} {{'Selected'| translate}}</label>
</div>
<div class="mx-1 flex items-center">
<button (click)="isDataListCheckedAll = !isDataListCheckedAll;dataListCheckAll()"
......@@ -64,7 +66,7 @@
<i class="fs-l transition-all duration-200"
[ngClass]="{'ri-checkbox-multiple-line text-gray-500': !isDataListCheckedAll, 'ri-checkbox-multiple-fill text-primary': isDataListCheckedAll}"></i>
</button>
<label class="text-sm text-gray-500 ml-2">Select All</label>
<label class="text-sm text-gray-500 ml-2">{{'SelectAll' | translate}}</label>
</div>
</div>
</div>
......@@ -73,8 +75,9 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
style="height: 40px;" [(ngModel)]="search" (ngModelChange)="searchChange()">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" style="height: 40px;" [(ngModel)]="search"
(ngModelChange)="searchChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -85,21 +88,21 @@
<button type="button" class="ti-btn ti-btn-soft-success h-20px m-0 shadow-md"
data-hs-overlay="#edit-group-competencies-alert-add-modal">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate}}
</button>
</div>
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
(click)="searchModalChange()" data-hs-overlay="#edit-group-competencies-table-modal-select">
<i class="ri-add-line"></i>
Add
{{'Add'| translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
data-hs-overlay="#edit-group-competencies-alert-delete-modal" (click)="groupAssessmentIndex=-1">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -121,10 +124,10 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['รหัสสมรรถนะ','ชื่อสมรรถนะ','ระดับความหวัง']; let f = first; let l = last; let i = index">
*ngFor="let item of ['CompetencyCode','CompetencyName','ProficiencyLevel']; let f = first; let l = last; let i = index">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f || l || item === 'ระดับความหวัง'">
<span class="text-sm">{{ item }}</span>
[class.!text-center]="f || l || item === 'ProficiencyLevel'">
<span class="text-sm">{{ item | translate}}</span>
</th>
</ng-container>
</tr>
......@@ -142,7 +145,7 @@
<tbody *ngIf="!dataLoading&&!dataListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
{{'NoInformation' | translate}}
</td>
</tr>
</tbody>
......@@ -223,7 +226,7 @@
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
รายการสมรรถนะ
{{'CompetencyTopics_list' | translate}}
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -260,10 +263,10 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['รหัส','ชื่อสมรรถนะ','ระดับความคาดหวัง','การจัดการ']; let f = first; let l = last; let i = index">
*ngFor="let item of ['Competency_Code','CompetencyName','ProficiencyLevel','Action']; let f = first; let l = last; let i = index">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f||l">
<span class="text-sm">{{ item }}</span>
<span class="text-sm">{{ item | translate}}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0"
*ngIf="!f && i==1">
<svg class="head-table-icon" xmlns="http://www.w3.org/2000/svg"
......@@ -299,7 +302,7 @@
<tbody *ngIf="!dataLoading&&!dataListModalFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
{{'NoInformation' | translate}}
</td>
</tr>
</tbody>
......@@ -321,7 +324,7 @@
(click)="selectIndicatorsCourses(item.data)"
data-hs-overlay="#edit-group-competencies-table-modal-select">
<i class="ri-add-line"></i>
Select
{{'Select' | translate}}
</button>
</div>
</td>
......
......@@ -4,8 +4,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -18,7 +18,7 @@
data-hs-overlay="#group-competencies-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
</div>
......@@ -26,7 +26,7 @@
<div class="page px-rem">
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search"
[dataSource]="groupCompetenciesList" [checkBoxSetting]="false" [columns]="columns"
[dataSource]="syncfutionDataList" [checkBoxSetting]="false" [columns]="columns"
(sendSelectData)="selectGroupCompetencies($event); editTab = true">
</app-datagrid-syncfution>
</div>
......
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';
import { ColumnModel } from '@syncfusion/ej2-grids';
import { ToastrService } from 'ngx-toastr';
import { JobcodeModel, MyJobcodeModel } from 'src/app/shared/model/jobcode.model';
......@@ -22,20 +23,20 @@ export class GroupCompetenciesComponent {
selectedFile: File | null = null;
selectedFileName: string = 'กรุณาเลือกไฟล์';
syncfutionDataList: any[] = []
columns: ColumnModel[] = [{
field: "jobCodeId",
headerText: "รหัส",
headerText: "JDCode",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อหัวข้อ",
field: "name",
headerText: "JobDescription",
type: "string"
}]
searchSettings = {
fields: ['competencyTopicId', 'tdesc'],
fields: ['jobCodeId', 'name'],
operator: 'contains',
ignoreCase: false
};
......@@ -46,8 +47,13 @@ export class GroupCompetenciesComponent {
private cdr: ChangeDetectorRef,
private fileService: FileService,
private jobcodeService: JobcodeService,
private translateService: TranslateService
) {
this.pathTitleChange()
this.translateService.onLangChange.subscribe((event) => {
this.setSyncfutionDataList()
});
}
ngOnInit(): void {
this.getGroupCompetenciesList()
......@@ -112,6 +118,7 @@ export class GroupCompetenciesComponent {
this.selectedItems.data.set(x.jobCodeId, false)
return new MyJobcodeModel(x)
})
this.setSyncfutionDataList()
this.groupCompetenciesList = response
this.dataLoading = false
this.cdr.detectChanges()
......@@ -121,8 +128,15 @@ export class GroupCompetenciesComponent {
}
})
}
selectGroupCompetencies(data: JobcodeModel) {
setSyncfutionDataList() {
if (this.groupCompetenciesList) {
this.syncfutionDataList = this.groupCompetenciesList.map(e => ({
jobCodeId: e.jobCodeId,
name: this.translateService.getCurrentLang() == 'th' ? e.tdesc : e.edesc,
}))
}
}
selectGroupCompetencies(data: any) {
const groupCompetencies = this.groupCompetenciesList.find(x => x.jobCodeId == data.jobCodeId)
this.groupCompetencies = new MyJobcodeModel(groupCompetencies)
}
......
......@@ -4,10 +4,10 @@
<button type="button" class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
(click)="onEdit()">
<i class="ti ti-chevron-left"></i>
ย้อนกลับ
{{'Back' | translate}}
</button>
<div class="font-size-18px font-weight-700 align-center text-primary pl-1rem">
การจัดการตัวชี้วัดเเละหลักสูตร
{{'BIsAndCDRManage' | translate}}
</div>
</div>
<div class="flex justify-end">
......@@ -15,7 +15,7 @@
<button type="button" class="ti-btn ti-btn-soft-success h-45px m-0 shadow-md"
data-hs-overlay="#edit-group-indicators-alert-modal">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate}}
</button>
</div>
<div class="px-1" *ngIf="!seeTab">
......@@ -32,7 +32,7 @@
<polyline points="48.97 24 48.97 15.03 56 15.03"></polyline>
</g>
</svg>
Clear
{{'Clear' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -50,24 +50,24 @@
<div class="border-t border-gray-200 pt-10px grid grid-cols-1 space-y-6">
<div class="grid grid-cols-11">
<div class="space-y-2 col-span-2">
<label class="ti-form-label">รหัสสมรรถนะ</label>
<label class="ti-form-label">{{'CompetencyCode' | translate}}</label>
<input type="text" class="ti-form-input bg-input-readonly" readonly
[(ngModel)]="indicatorsCourses.competencyTopic.competencyTopicId">
</div>
<div class="col-span-1"></div>
<div class="space-y-2 col-span-2">
<label class="ti-form-label">ประเภท</label>
<label class="ti-form-label">{{'CompetencyType_type' | translate }}</label>
<input type="text" class="ti-form-input bg-input-readonly" readonly
[(ngModel)]="indicatorsCourses.competencyTopic.competencyType.shortName">
</div>
</div>
<div class="space-y-2">
<label class="ti-form-label">ชื่อสมรรถนะ</label>
<label class="ti-form-label">{{'CompetencyName' | translate }}</label>
<textarea type="text" rows="2" class="ti-form-input bg-input-readonly" readonly
[(ngModel)]="indicatorsCourses.tdesc"> </textarea>
</div>
<div class="space-y-2">
<label class="ti-form-label">นิยามสมรรถนะ</label>
<label class="ti-form-label">{{'CompetencyDefinition' | translate }}</label>
<textarea type="text" rows="3" class="ti-form-input bg-input-readonly" readonly
[(ngModel)]="indicatorsCourses.indicatorsCourseDetailTh"></textarea>
</div>
......@@ -81,10 +81,10 @@
<thead class="height-50px">
<tr class="font-size-12px">
<ng-container
*ngFor="let item of ['ระดับความคาดหวัง','ตัวชี้วัดพฤติกรรม','เครื่องมือประเมิน','หลักสูตร']; let f = first; let l = last">
*ngFor="let item of ['ExpectationLevel','BehavioralIndicators','AssessmentTools','CDR']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f||l">
<span class="font-size-12px font-weight-700">{{ item }}</span>
<span class="font-size-12px font-weight-700">{{ item | translate }}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0" *ngIf="!l">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
......@@ -136,7 +136,7 @@
[ngClass]="{'ti-btn-disabled': !data.behaviorIndicators[data.behaviorIndicators.length-1]}"
[disabled]="!data.behaviorIndicators[data.behaviorIndicators.length-1]"
(click)="dataSelect=data;dataSelectIndex=i;addBehaviorIndicators()">
add
{{'Add' | translate}}
</button>
</div>
</td>
......
......@@ -3,8 +3,8 @@
<div class="flex justify-end">
<div class="px-1">
<div class="relative shadow-md">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -17,7 +17,7 @@
data-hs-overlay="#group-indicators-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
</div>
......
......@@ -28,18 +28,18 @@ export class IndicatorsAndCurriculumComponent {
columns: ColumnModel[] = [{
field: "competencyTopicId",
headerText: "รหัส",
headerText: "CompetencyCode",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อหัวข้อ",
headerText: "CompetencyName",
type: "string"
},
{
field: "competencyType.tdesc",
headerText: "ประเภท",
headerText: "CompetencyType",
type: "string"
}]
searchSettings = {
......@@ -178,7 +178,7 @@ export class IndicatorsAndCurriculumComponent {
this.editTab = false;
this.seeTab = true;
}
onEditClicked(item: any) {
this.selectIndicatorsCourses(item);
this.editTab = true;
......@@ -186,7 +186,7 @@ export class IndicatorsAndCurriculumComponent {
}
pathTitleChange() {
this.sendPathTitle.emit(this.editTab ? ['การประเมินสมรรถนะ', 'การจัดการสมรรถนะ', 'ตัวชี้วัดเเละหลักสูตร', 'การจัดการตัวชี้วัดเเละหลักสูตร'] : ['การประเมินสมรรถนะ', 'การจัดการสมรรถนะ', 'ตัวชี้วัดเเละหลักสูตร'])
this.sendPathTitle.emit(this.editTab ? ['CompetencySystem', 'CompetencyManage', 'BIsAndCDR', 'การจัดการตัวชี้วัดเเละหลักสูตร'] : ['CompetencySystem', 'CompetencyManage', 'BIsAndCDR'])
}
checkPrimary() {
......
......@@ -17,7 +17,7 @@
data-hs-overlay="#set-approvers-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
</div>
......@@ -33,27 +33,26 @@
<ng-template #setApproversModal let-modal>
<h3 mat-dialog-title>
{{currentModal=='add'?'เพิ่มหัวข้อสมรรถนะ':'กำหนดผู้ประเมิน'}}
{{currentModal=='add'?'เพิ่มหัวข้อสมรรถนะ':'AssignApprover' | translate}}
</h3>
<div class="w-full flex justify-end mb-1rem">
<div class="absolute flex">
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
(click)="clear()">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md" (click)="clear()">
<i class="ti ti-eraser text-base"></i>
Clear
{{'Clear' | translate}}
</button>
</div>
</div>
</div>
<mat-dialog-content>
<label for="input-label" class="ti-form-label">ชื่อพนักงาน<span class="text-danger">*</span></label>
<label for="input-label" class="ti-form-label">{{'EmployeeName' | translate}}<span class="text-danger">*</span></label>
<input type="text" id="input-label" class="ti-form-input w-1/2 !bg-input-readonly" readonly
[value]="groupapprove.apsassessy.thFullName">
<label for="input-label" class="ti-form-label mt-2rem">ระดับพนักงาน</label>
<label for="input-label" class="ti-form-label mt-2rem">{{'JobLevelJL' | translate}}</label>
<input type="text" id="input-label" class="ti-form-input w-1/2 bg-input-readonly" readonly
[value]="groupapprove.personalLevel.tdesc">
<label class="ti-form-label mt-2rem">ผู้ประเมินลำดับที่ 1</label>
<label class="ti-form-label mt-2rem">{{'Assessor1'| translate}}</label>
<div class="flex">
<div class="relative flex rounded-md w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
......@@ -73,7 +72,7 @@
</div>
</div>
<ng-container *ngIf="groupapprove.apsapprove1.employeeId">
<label class="ti-form-label mt-2rem">ผู้ประเมินลำดับที่ 2</label>
<label class="ti-form-label mt-2rem">{{'Assessor2'| translate}}</label>
<div class="flex">
<div class="relative flex rounded-md w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
......@@ -94,7 +93,7 @@
</div>
</ng-container>
<ng-container *ngIf="groupapprove.apsapprove2.employeeId">
<label class="ti-form-label mt-2rem">ผู้ประเมินลำดับที่ 3</label>
<label class="ti-form-label mt-2rem">{{'Assessor3'| translate}}</label>
<div class="flex">
<div class="relative flex rounded-md w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
......@@ -115,7 +114,7 @@
</div>
</ng-container>
<ng-container *ngIf="groupapprove.apsapprove3.employeeId">
<label class="ti-form-label mt-2rem">ผู้ประเมินลำดับที่ 4</label>
<label class="ti-form-label mt-2rem">{{'Assessor4'| translate}}</label>
<div class="flex">
<div class="relative flex rounded-md w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
......@@ -136,7 +135,7 @@
</div>
</ng-container>
<ng-container *ngIf="groupapprove.apsapprove4.employeeId">
<label class="ti-form-label mt-2rem">ผู้ประเมินลำดับที่ 5</label>
<label class="ti-form-label mt-2rem">{{'Assessor5'| translate}}</label>
<div class="flex">
<div class="relative flex rounded-md w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
......@@ -160,12 +159,12 @@
<mat-dialog-actions align="end">
<button type="button" mat-button [mat-dialog-close]
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10">
ย้อนกลับ
{{'Back' | translate}}
</button>
<button type="button" class="ti-btn ti-btn-success" mat-button (click)="addgroupapprove()"
[class.ti-btn-disabled]="!groupapprove.apsapprove1.thFullName||(currentModal=='add')"
[disabled]="!groupapprove.apsapprove1.thFullName||(currentModal=='add')">
บันทึกข้อมูล
{{'SaveData' | translate}}
</button>
</mat-dialog-actions>
</ng-template>
......@@ -181,8 +180,9 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" (ngModelChange)="searchEMP()">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search"
(ngModelChange)="searchEMP()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......
......@@ -19,7 +19,7 @@ interface table {
templateUrl: './set-approvers.component.html',
styleUrls: ['./set-approvers.component.scss']
})
export class SetApproversComponent implements OnInit{
export class SetApproversComponent implements OnInit {
currentPage = 1
page = Array.from({ length: 1 }, (_, i) => i + 1);
......@@ -41,44 +41,44 @@ export class SetApproversComponent implements OnInit{
empnumber = 0
currentModal: 'add' | 'edit' | 'delete' = "add"
selectedFile: File | null = null;
selectedFileName: string = 'กรุณาเลือกไฟล์';
columns: ColumnModel[] = [{
field: "apsassessy.thFullName",
headerText: "ชื่อพนักงาน",
headerText: "EmployeeName",
type: "string",
isPrimaryKey: true,
},
{
field: "apsapprove1.thFullName",
headerText: "ลำดับที่ 1",
headerText: "Approver1",
type: "string"
},
{
field: "apsapprove2.thFullName",
headerText: "ลำดับที่ 2",
headerText: "Approver2",
type: "string"
},
{
field: "apsapprove3.thFullName",
headerText: "ลำดับที่ 3",
headerText: "Approver3",
type: "string"
},
{
field: "apsapprove4.thFullName",
headerText: "ลำดับที่ 4",
headerText: "Approver4",
type: "string"
},
{
field: "apsapprove5.thFullName",
headerText: "ลำดับที่ 5",
headerText: "Approver5",
type: "string"
}]
searchSettings = {
fields: ['apsassessy.thFullName', 'apsapprove1.thFullName', 'apsapprove2.thFullName','apsapprove3.thFullName','apsapprove4.thFullName','apsapprove5.thFullName'],
fields: ['apsassessy.thFullName', 'apsapprove1.thFullName', 'apsapprove2.thFullName', 'apsapprove3.thFullName', 'apsapprove4.thFullName', 'apsapprove5.thFullName'],
operator: 'contains',
ignoreCase: false
};
......@@ -166,7 +166,7 @@ export class SetApproversComponent implements OnInit{
})
}
employee_listFilter() {
return this.employee_list.filter(x =>
return this.employee_list.filter(x =>
x.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.position.edesc.toLowerCase().includes(this.search.toLowerCase()))
......@@ -220,26 +220,26 @@ export class SetApproversComponent implements OnInit{
}
groupapprove_listFilter() {
return this.groupapprove_list.filter(x =>
(x.apsassessy.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsassessy.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove1.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove1.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove2.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove2.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove3.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove3.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove4.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove4.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.thFullName.toLowerCase().includes(this.search.toLowerCase()))
(x.apsassessy.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsassessy.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove1.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove1.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove2.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove2.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove3.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove3.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove4.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove4.thFullName.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.employeeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.apsapprove5.thFullName.toLowerCase().includes(this.search.toLowerCase()))
)
}
selectGroupapprove(groupapprove?: GroupApproveModel) {
this.groupapprove = new MyGroupApproveModel(groupapprove)
......
......@@ -3,16 +3,15 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
ทะเบียนหลักสูตร
{{'menu.CDR' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
<nav class="-mb-0.5 flex space-x-6 rtl:space-x-reverse">
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินสมรรถนะ','ทะเบียนหลักสูตร','หลักสูตรการพัฒนา']">
หลักสูตรการพัฒนา
aria-controls="underline-1" (click)="pathTitle = ['CompetencySystem','menu.CDR','menu.CDR']">
{{'menu.CDR' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./course-registration.component.scss']
})
export class CourseRegistrationComponent {
pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนหลักสูตร','หลักสูตรการพัฒนา']
pathTitle = ['CompetencySystem', 'menu.CDR', 'menu.CDR']
}
......@@ -8,8 +8,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" style="height: 40px;">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search" style="height: 40px;">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -22,21 +22,21 @@
data-hs-overlay="#development-course-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
(click)="currentModal='add';selectCompetencycourse();openDialog()">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
(click)="currentModal='delete';deleteDevelopmentCourse()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
</div>
......
......@@ -27,13 +27,13 @@ export class DevelopmentCourseComponent {
columns: ColumnModel[] = [{
field: "competencyCourseId",
headerText: "รหัส",
headerText: "Code",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อเครื่องมือประเมิน",
headerText: "CDRName",
type: "string"
}]
searchSettings = {
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
การจัดการรอบการประเมิน
{{'menu.AssessmentPeriod' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-2rem">
......@@ -11,13 +11,13 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="activeTab='underline-1';pathTitle = ['การประเมินสมรรถนะ', 'การจัดการรอบการประเมิน', 'รอบการประเมิน']">
รอบการประเมิน
(click)="activeTab='underline-1';pathTitle = ['CompetencySystem', 'menu.AssessmentPeriod', 'menu.AssessmentPeriod']">
{{'menu.AssessmentPeriod' | translate}}
</a>
<!-- <a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="activeTab='underline-2';pathTitle = ['การประเมินสมรรถนะ', 'การจัดการรอบการประเมิน', 'กำหนดฟอร์มเอกสาร']">
(click)="activeTab='underline-2';pathTitle = ['การประเมินสมรรถนะ', 'รอบการประเมิน', 'กำหนดฟอร์มเอกสาร']">
กำหนดฟอร์มเอกสาร
</a> -->
</nav>
......
......@@ -7,7 +7,7 @@ import { StatusCodeModel } from 'src/app/shared/model/status-code.model';
})
export class EvaluationCycleManagerComponent {
@Input() pathTitle = ['การประเมินสมรรถนะ', 'การจัดการรอบการประเมิน', 'รอบการประเมิน']
@Input() pathTitle = ['CompetencySystem', 'menu.AssessmentPeriod', 'menu.AssessmentPeriod']
activeTab: string = 'underline-1'; // Tab แรกแสดงเป็นค่าเริ่มต้น
groupShow = '1'
}
\ No newline at end of file
......@@ -21,14 +21,14 @@
<button type="button" class="ti-btn ti-btn-soft-secondary h-20px m-0 shadow-md"
(click)="modalStatus='add';modalStatusEdit=true;setData();openDialog()">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-20px m-0 shadow-md"
(click)="modalStatus='deleteGroup';setData();deleteevaluation_cycle()">
<i class="ti ti-trash fs-l"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -46,7 +46,7 @@
[columns]="columns" [selectedItems]="selectedItems" [childForm]="true" (createFormEvent)="createForm($event)"
(sendNextPageForm)="selectEvaluationCycle($event); openDialogForm()"
(sendSelectData)="modalStatus='edit';selectEvaluationCycle($event);openDialog()"
(sendSelectedItems)="onSelectItemChange($event)">
(sendSelectedItems)="onSelectItemChange($event)" [actionWidth]="translateService.getCurrentLang()=='th'?220:0">
</app-datagrid-syncfution>
</div>
......
......@@ -8,6 +8,7 @@ import { ColumnModel } from '@syncfusion/ej2-grids';
import Swal from 'sweetalert2';
import { JobcodeService } from 'src/app/shared/services/jobcode.service';
import { JobcodeModel, MyJobcodeModel } from 'src/app/shared/model/jobcode.model';
import { TranslateService } from '@ngx-translate/core';
export interface DataModal {
search: string,
currentPage: number,
......@@ -70,33 +71,33 @@ export class EvaluationCycleComponent {
columns: ColumnModel[] = [{
field: "evaluationRoundId",
headerText: "รหัส",
headerText: "PeriodCode",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "รายละเอียด",
headerText: "Description",
type: "string"
},
{
field: "apsyear",
headerText: " รอบปีการประเมิน",
headerText: "Year_round",
type: "string"
},
{
field: "apsPeriodStart",
headerText: " วันที่เริ่มต้น",
headerText: "StartDate",
type: "string"
},
{
field: "apsPeriodEnd",
headerText: "วันที่สิ้นสุด",
headerText: "EndDate",
type: "string"
},
{
field: "statusCode.tdesc",
headerText: "สถานะ",
headerText: "Status",
type: "string"
}]
searchSettings = {
......@@ -112,7 +113,8 @@ export class EvaluationCycleComponent {
private cdr: ChangeDetectorRef,
private renderer: Renderer2,
private jobcodeService: JobcodeService,
private dialog: MatDialog
private dialog: MatDialog,
public translateService: TranslateService
) { }
ngOnInit(): void {
......
......@@ -6,7 +6,7 @@
<input type="checkbox" class="ti-form-checkbox pointer-events-none" id="hs-default-checkbox"
[(ngModel)]="isDataListChecked">
<label for="hs-default-checkbox" class="text-sm text-gray-500 mx-2 pointer-events-none">
{{numDataListChecked}} Selected</label>
{{numDataListChecked}} {{'Selected_ed' | translate}}</label>
</div>
<div class="mx-1 flex items-center">
<button (click)="isDataListCheckedAll = !isDataListCheckedAll;dataListCheckAll()" id="checkbox"
......@@ -14,15 +14,16 @@
<i class="fs-l transition-all duration-200"
[ngClass]="{'ri-checkbox-multiple-line text-gray-500': !isDataListCheckedAll, 'ri-checkbox-multiple-fill text-primary': isDataListCheckedAll}"></i>
</button>
<label class="text-sm text-gray-500 ml-2" for="checkbox">Select All</label>
<label class="text-sm text-gray-500 ml-2" for="checkbox">{{'SelectAll'| translate}}</label>
</div>
</div>
<div class="flex justify-end">
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
style="height: 40px;" [(ngModel)]="search" (ngModelChange)="searchChange()">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" style="height: 40px;" [(ngModel)]="search"
(ngModelChange)="searchChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -33,14 +34,14 @@
<button type="button" class="ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
(click)="selectData();pathTitleChange('add')">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay="#grade-management-alert-delete-modal" (click)="selectData()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -58,9 +59,10 @@
<thead class="height-50px">
<tr class="font-size-12px">
<ng-container
*ngFor="let item of ['','รหัส','รายละเอียด (ไทย)','รายละเอียด (อังกฤษ)','การจัดการ']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700">{{ item }}</span>
*ngFor="let item of ['','Code','DescriptionJobTypeThai','DescriptionJobTypeEng','Action']; let f = first; let l = last">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700">{{ item | translate}}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0" *ngIf="!f && !l">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
......@@ -164,7 +166,7 @@
</button>
<a class="ti-btn ti-btn-danger" href="javascript:void(0);"
data-hs-overlay="#grade-management-alert-delete-modal"
(click)="deleteCompetencyGroupGradeList();" *ngIf="numDataListChecked">
(click)="deleteCompetencyGroupGradeList();" *ngIf="numDataListChecked">
ลบข้อมูล
</a>
</div>
......
......@@ -35,7 +35,7 @@ export class GradeManagementComponent {
constructor(private toastr: ToastrService,
private competencyGroupGradeService: CompetencyGroupGradeService,
private cdr: ChangeDetectorRef) {
this.sendPathTitle.emit(['การประเมินสมรรถนะ', 'ทะเบียนเกรด', 'การจัดการเกรด'])
this.sendPathTitle.emit(['CompetencySystem', 'menu.Grade', 'GradeManage'])
}
ngOnInit(): void {
this.getCompetencyGroupGradeList()
......@@ -63,15 +63,15 @@ export class GradeManagementComponent {
this.typeTab = tap || ''
switch (this.typeTab) {
case 'add': {
this.sendPathTitle.emit(['การประเมินสมรรถนะ', 'ทะเบียนเกรด', 'การจัดการเกรด', 'เพิ่มกลุ่มเกรด'])
this.sendPathTitle.emit(['CompetencySystem', 'menu.Grade', 'GradeManage', 'เพิ่มกลุ่มเกรด'])
break;
}
case 'edit': {
this.sendPathTitle.emit(['การประเมินสมรรถนะ', 'ทะเบียนเกรด', 'การจัดการเกรด', 'แก้ไขกลุ่มเกรด'])
this.sendPathTitle.emit(['CompetencySystem', 'menu.Grade', 'GradeManage', 'แก้ไขกลุ่มเกรด'])
break;
}
default: {
this.sendPathTitle.emit(['การประเมินสมรรถนะ', 'ทะเบียนเกรด', 'การจัดการเกรด'])
this.sendPathTitle.emit(['CompetencySystem', 'menu.Grade', 'GradeManage'])
}
}
}
......
......@@ -3,16 +3,15 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ทะเบียนเกรด
{{'menu.Grade' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
<nav class="-mb-0.5 flex space-x-6 rtl:space-x-reverse">
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินสมรรถนะ','ทะเบียนเกรด','การจัดการเกรด']">
การจัดการเกรด
aria-controls="underline-1" (click)="pathTitle = ['การประเมินสมรรถนะ','menu.Grade','GradeManage']">
{{'GradeManage' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./grade-registration.component.scss']
})
export class GradeRegistrationComponent {
pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนเกรด', 'การจัดการเกรด']
pathTitle = ['CompetencySystem', 'menu.Grade', 'GradeManage']
}
......@@ -3,15 +3,15 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
แผนพัฒนา IDP
{{'menu.IDP' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
<nav class="-mb-0.5 flex space-x-6 rtl:space-x-reverse">
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1" (click)="pathTitle = ['การประเมินสมรรถนะ','แผนพัฒนา IDP','กำหนดแผนพัฒนา IDP']">
กำหนดแผนพัฒนา IDP
aria-controls="underline-1" (click)="pathTitle = ['CompetencySystem','menu.IDP','IDPConfig']">
{{'IDPConfig' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./idp-development-plan.component.scss']
})
export class IdpDevelopmentPlanComponent {
pathTitle = ['การประเมินสมรรถนะ', 'แผนพัฒนา IDP','กำหนดแผนพัฒนา IDP']
pathTitle = ['CompetencySystem', 'menu.IDP','IDPConfig']
}
......@@ -32,7 +32,7 @@
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-success h-10 m-0 shadow-md"
data-hs-overlay="#set-idp-development-plan-alert-modal">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -47,15 +47,17 @@
<div class="page px-rem">
<p class="pb-2">ตั้งค่าคะแนนประเมินตัวชี้วัดที่ไม่ติด GAP</p>
<p class="pb-2">{{'GAPConfig' | translate}}</p>
<div class="overflow-auto table-bordered rounded-t-none" style="max-width: 50%;">
<div id="card-type-1" role="tabpanel" aria-labelledby="card-type-item-1">
<div class="overflow-auto shadow-md">
<table class="ti-custom-table-one ti-custom-table-head" style="border-collapse: collapse; width: 100%; table-layout: auto;">
<table class="ti-custom-table-one ti-custom-table-head"
style="border-collapse: collapse; width: 100%; table-layout: auto;">
<thead>
<tr>
<!-- กำหนดให้คอลัมน์ "คะแนน" กว้างกว่า -->
<th class="text-base font-bold" style=" width: 23%;height: 40px;">คะแนน</th>
<th class="text-base font-bold" style=" width: 23%;height: 40px;">
{{'Score' | translate}}</th>
<th>5</th>
<th>4</th>
<th>3</th>
......@@ -65,12 +67,19 @@
</thead>
<tbody>
<tr>
<td class="text-base font-bold" style="height: 70px;">ผ่าน<br>(ไม่ติดGAP)</td>
<td><input type="radio" id="idp-radio5" name="score" [value]="5" [(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio4" name="score" [value]="4" [(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio3" name="score" [value]="3" [(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio2" name="score" [value]="2" [(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio1" name="score" [value]="1" [(ngModel)]="idpData.score"></td>
<td class="text-base font-bold" style="height: 70px;">
{{'Pass' | translate}}<br>{{'NoGAP' | translate}}
</td>
<td><input type="radio" id="idp-radio5" name="score" [value]="5"
[(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio4" name="score" [value]="4"
[(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio3" name="score" [value]="3"
[(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio2" name="score" [value]="2"
[(ngModel)]="idpData.score"></td>
<td><input type="radio" id="idp-radio1" name="score" [value]="1"
[(ngModel)]="idpData.score"></td>
</tr>
<!-- เพิ่มแถวเพิ่มเติมถ้าต้องการ -->
</tbody>
......@@ -81,15 +90,15 @@
</div>
<div class="page px-rem my-5">
<p class="pb-2">ตารางกำหนดแผนพัฒนา</p>
<p class="pb-2">{{'IDPConfig_table' | translate}}</p>
<div class="overflow-auto table-bordered rounded-t-md" style="max-width: 70%;">
<div id="card-type-1" role="tabpanel" aria-labelledby="card-type-item-1">
<div class="overflow-auto shadow-md">
<table class="ti-custom-table ti-custom-table-head">
<thead>
<div id="card-type-1" role="tabpanel" aria-labelledby="card-type-item-1">
<div class="overflow-auto shadow-md">
<table class="ti-custom-table ti-custom-table-head">
<thead>
<tr>
<th rowspan="3">จำนวน BI ที่ติด GAP</th>
<th colspan="3" style="width: 70%;height: 40px;">เครื่องมือพัฒนา</th>
<th rowspan="3">{{'NumberOfBI' | translate}}</th>
<th colspan="3" style="width: 70%;height: 40px;">{{'DevelopmentTools' | translate}}</th>
</tr>
<tr>
<th style="width: 20%;height: 30px;">70</th>
......@@ -97,22 +106,25 @@
<th style="width: 20%;height: 30px;">10</th>
</tr>
<tr>
<th style="width: 20%;height: 60px;">OJT/Job <br>Assignment</th>
<th style="width: 20%;height: 60px;">Coach/Mentor</th>
<th style="width: 20%;height: 60px;">Training</th>
<th style="width: 20%;height: 60px;">{{'OJTJobAssignment' | translate}}</th>
<th style="width: 20%;height: 60px;">{{'CoachMentor' | translate}}</th>
<th style="width: 20%;height: 60px;">{{'Training' | translate}}</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of idpData.developmentPlan; let i = index">
<td>{{item.planId}}</td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'ojtJobAssignment'"
[name]="'developmentPlan'+i" [(ngModel)]="item.ojtJobAssignment"></td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'coachMentor'"
[name]="'developmentPlan'+i" [(ngModel)]="item.coachMentor"></td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'training'" [name]="'developmentPlan'+i"
[(ngModel)]="item.training"></td>
</tr>
</thead>
<tbody>
<tr *ngFor="let item of idpData.developmentPlan; let i = index" >
<td>{{item.planId}}</td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'ojtJobAssignment'" [name]="'developmentPlan'+i" [(ngModel)]="item.ojtJobAssignment"></td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'coachMentor'" [name]="'developmentPlan'+i" [(ngModel)]="item.coachMentor"></td>
<td><input type="checkbox" [id]="'idp-checkbox'+i+'training'" [name]="'developmentPlan'+i" [(ngModel)]="item.training"></td>
</tr>
</tbody>
</table>
</div>
</div>
</tbody>
</table>
</div>
</div>
</div>
</div>
......@@ -150,5 +162,4 @@
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -7,8 +7,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" style="height: 40px;">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search" style="height: 40px;">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -21,21 +21,21 @@
data-hs-overlay="#competency-topic-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
(click)="currentModal='add';examFile=null;examFileName = 'กรุณาเลือกไฟล์';openDialog();selectCompetencyTopic()">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
(click)="currentModal='delete';deleteCompetency_topic()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
</div>
......@@ -151,8 +151,9 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="typeModal.search" (ngModelChange)="searchCompetencytypeChange()">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="typeModal.search"
(ngModelChange)="searchCompetencytypeChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......
......@@ -69,18 +69,18 @@ export class CompetencyTopic implements OnInit {
columns: ColumnModel[] = [{
field: "competencyTopicId",
headerText: "รหัส",
headerText: "CompetencyCode",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อหัวข้อ",
headerText: "CompetencyName",
type: "string"
},
{
field: "competencyType.shortName",
headerText: "ประะภท",
headerText: "CompetencyType",
type: "string"
}]
searchSettings = {
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
ทะเบียนกำหนดชื่อ
{{'menu.DataBankCompetency' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,14 +11,14 @@
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)=" currentPage = 1;pathTitle = ['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','ประเภทสมรรถนะ']">
ประเภทสมรรถนะ
(click)=" currentPage = 1;pathTitle = ['CompetencySystem','menu.DataBankCompetency','CompetencyTypes']">
{{'CompetencyTypes' | translate}}
</a>
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="currentPage = 2;pathTitle = ['การประเมินสมรรถนะ','ทะเบียนกำหนดชื่อ','หัวข้อสมรรถนะ']">
หัวข้อสมรรถนะ
(click)="currentPage = 2;pathTitle = ['CompetencySystem','menu.DataBankCompetency','CompetencyTopics']">
{{'CompetencyTopics' | translate}}
</a>
</nav>
</div>
......
......@@ -6,6 +6,6 @@ import { Component } from '@angular/core';
styleUrls: ['./name-registration.component.scss']
})
export class NameRegistrationComponent {
pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนกำหนดชื่อ','ประเภทสมรรถนะ']
pathTitle = ['CompetencySystem', 'menu.DataBankCompetency', 'CompetencyTypes']
currentPage = 1
}
......@@ -8,8 +8,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" style="height: 40px;">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search" style="height: 40px;">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -22,7 +22,7 @@
data-hs-overlay="#type-registration-component-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
<div class="px-1">
......@@ -30,14 +30,14 @@
data-hs-overlay="#type-registration-component-page-modal" (click)="currentModal='add';edit()"
(click)="openDialog()">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
(click)="currentModal='delete';deleteType_registration()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
</div>
......@@ -57,20 +57,22 @@
<ng-template #typeRegistrationModal let-modal>
<h3 mat-dialog-title>
{{currentModal=='add'?'เพิ่มประเภทสมรรถนะ':'แก้ไขประเภทสมรรถนะ'}}
{{currentModal=='add'?'เพิ่มประเภทสมรรถนะ':'EditCompetencyTypes' | translate}}
</h3>
<div class="w-full flex justify-end">
<div class="absolute flex">
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md" (click)="selectCompetencyType()">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
(click)="selectCompetencyType()">
<i class="ti ti-eraser text-base"></i>
Clear
{{'Clear' | translate}}
</button>
</div>
</div>
</div>
<mat-dialog-content>
<label for="input-label" class="ti-form-label mt-2rem">รหัส
<label for="input-label" class="ti-form-label mt-2rem">
{{'Code' | translate}}
<span class="text-danger">*
<ng-container *ngIf="checkPrimary()&&currentModal=='add'">
รหัสซ้ำ
......@@ -80,17 +82,25 @@
<input type="text" id="input-label" class="ti-form-input w-1/2"
[ngClass]="{'!bg-input-readonly':currentModal=='edit'}" [readonly]="currentModal=='edit'"
[(ngModel)]="competoncy_type.competencyTypeId">
<label for="detail_th" class="ti-form-label mt-1rem">ชื่อประเภท (ไทย)<span class="text-danger">*</span></label>
<label for="detail_th" class="ti-form-label mt-1rem">
{{'TypesNameThai' | translate}}<span class="text-danger">*</span></label>
<input type="text" id="detail_th" class="ti-form-input w-2/3" [(ngModel)]="competoncy_type.tdesc">
<label for="detail_eng" class="ti-form-label mt-1rem">ชื่อประเภท (อังกฤษ)</label>
<label for="detail_eng" class="ti-form-label mt-1rem">
{{'TypesNameEng' | translate}}
</label>
<input type="text" id="detail_eng" class="ti-form-input w-2/3" [(ngModel)]="competoncy_type.edesc">
<label for="detail_eng" class="ti-form-label mt-1rem">ชื่อย่อ<span class="text-danger">*</span></label>
<label for="detail_eng" class="ti-form-label mt-1rem">
{{'Abbreviations' | translate}}
<span class="text-danger">*</span></label>
<input type="text" id="detail_eng" class="ti-form-input w-2/3" [(ngModel)]="competoncy_type.shortName">
<label for="detail_eng" class="ti-form-label mt-1rem">ระดับความคาดหวัง <span
class="text-danger">*</span></label>
<label for="detail_eng" class="ti-form-label mt-1rem">
{{'ExpectationLevel' | translate}}
<span class="text-danger">*</span></label>
<input type="text" id="detail_eng" class="ti-form-input" style="width: 200px;"
oninput="this.value = this.value.replace(/\D/g, '')" [(ngModel)]="competoncy_type.expectationLevel">
<label for="detail_eng" class="ti-form-label mt-1rem">น้ำหนัก</label>
<label for="detail_eng" class="ti-form-label mt-1rem">
{{'Weight' | translate}}
</label>
<input type="text" id="detail_eng" class="ti-form-input" style="width: 200px;"
oninput="this.value = this.value.replace(/[^\d.]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/(\..*?)(\d{2})./g, '$1$2');"
onchange="this.value = this.value.replace('', '0');this.value = parseFloat(this.value).toFixed(2)"
......@@ -99,12 +109,12 @@
<mat-dialog-actions align="end">
<button type="button" mat-button [mat-dialog-close]
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10">
ย้อนกลับ
{{'Back' | translate}}
</button>
<button type="button" class="ti-btn ti-btn-success" mat-button (click)="addType_registration()"
[class.ti-btn-disabled]="!competoncy_type.competencyTypeId||!competoncy_type.tdesc||!competoncy_type.shortName||(currentModal=='add'&&checkPrimary())"
[disabled]="!competoncy_type.competencyTypeId||!competoncy_type.tdesc||!competoncy_type.shortName||(currentModal=='add'&&checkPrimary())">
บันทึกข้อมูล
[class.ti-btn-disabled]="!competoncy_type.competencyTypeId||!competoncy_type.tdesc||!competoncy_type.shortName||(currentModal=='add'&&checkPrimary())"
[disabled]="!competoncy_type.competencyTypeId||!competoncy_type.tdesc||!competoncy_type.shortName||(currentModal=='add'&&checkPrimary())">
{{'SaveData' | translate}}
</button>
</mat-dialog-actions>
</ng-template>
......
......@@ -24,18 +24,18 @@ export class TypeRegistration {
columns: ColumnModel[] = [{
field: "competencyTypeId",
headerText: "รหัส",
headerText: "Code",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อประเภท",
headerText: "TypeName",
type: "string"
},
{
field: "shortName",
headerText: "ชื่อย่อ",
headerText: "Abbreviations",
type: "string"
}]
searchSettings = {
......
......@@ -6,7 +6,7 @@
[class.ti-btn-disabled]="!setting.data.apsyear||checkEmpty(setting.data.expectationLevel)||!setting.data.settingGroupAssessment"
[disabled]="!setting.data.apsyear||checkEmpty(setting.data.expectationLevel)||!setting.data.settingGroupAssessment">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -22,8 +22,8 @@
<div class="page">
<div class="grid grid-cols-3 gap-6">
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">ปีการประเมิน <span
class="text-danger">*</span></label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">
{{'Year' | translate}} <span class="text-danger">*</span></label>
</div>
</div>
<div class="grid grid-cols-3 gap-6">
......@@ -37,8 +37,8 @@
</div>
<div class="grid grid-cols-3 gap-6 mt-10">
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">ระดับความคาดหวัง <span
class="text-danger">*</span></label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">
{{'ExpectationLevel' | translate}} <span class="text-danger">*</span></label>
</div>
</div>
<div class="grid grid-cols-3 gap-6">
......@@ -81,13 +81,15 @@
</div>
</div>
</div> -->
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">น้ำหนักปัจจัยการประเมิน</label>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">
{{'WeightOfEvaluationFactors' | translate}}
</label>
<div class="overflow-auto contenttable">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover table-bordered"
style="min-width: 75% !important;width: 75% !important">
<thead>
<tr>
<th>คะเเนน</th>
<th>{{'Score'| translate}}</th>
<th class="text-center">5</th>
<th class="text-center">4</th>
<th class="text-center">3</th>
......@@ -97,7 +99,7 @@
</thead>
<tbody>
<tr>
<td>น้ำหนัก</td>
<td>{{'Weight' | translate}}</td>
<td> <input type="text" class="ti-form-input"
oninput="this.value = this.value.replace(/[^\d.]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/(\..*?)(\d{2})./g, '$1$2');"
onchange="this.value = this.value.replace('', '0');this.value = parseFloat(this.value).toFixed(2)"
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
การตั้งค่า
{{'menu.Setting' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,8 +11,8 @@
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินสมรรถนะ','การตั้งค่า','กำหนดค่าระบบประเมินสมรรถนะ']">
กำหนดค่าระบบประเมินสมรรถนะ
(click)="pathTitle = ['CompetencySystem','menu.Setting','CompetencyConfig']">
{{'CompetencyConfig' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./setting-competency.component.scss']
})
export class SettingCompetencyComponent {
pathTitle = ['การประเมินสมรรถนะ', 'การตั้งค่า','กำหนดค่าระบบประเมินสมรรถนะ']
pathTitle = ['CompetencySystem', 'menu.Setting', 'CompetencyConfig']
}
......@@ -8,8 +8,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" style="height: 40px;">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search" style="height: 40px;">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -22,22 +22,21 @@
data-hs-overlay="#assessment-tool-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate}}
</button>
</div>
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
(click)="currentModal='add';selectAssessment();openDialog()">
<i class="ri-add-line"></i>
Add
{{'Add' | translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay="#assessment-tool-alert-modal"
(click)="currentModal='delete';deleteAssessment()">
data-hs-overlay="#assessment-tool-alert-modal" (click)="currentModal='delete';deleteAssessment()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate}}
</button>
</div>
</div>
......@@ -59,7 +58,8 @@
<div class="w-full flex justify-end">
<div class="absolute flex">
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md" (click)="selectAssessment()">
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
(click)="selectAssessment()">
<i class="ti ti-eraser text-base"></i>
Clear
</button>
......@@ -132,4 +132,4 @@
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
......@@ -29,18 +29,18 @@ export class AssessmentToolComponent {
columns: ColumnModel[] = [{
field: "assessmentId",
headerText: "รหัส",
headerText: "Code",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อเครื่องมือประเมิน",
headerText: "ToolsName",
type: "string"
},
{
field: "shortName",
headerText: "ชื่อที่เเสดง",
headerText: "DisplayName",
type: "string"
}]
searchSettings = {
......
......@@ -3,15 +3,16 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
ทะเบียนเครื่องมือ
{{'AssessmentTools' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
<nav class="-mb-0.5 flex space-x-6 rtl:space-x-reverse">
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1" (click)="pathTitle = ['การประเมินสมรรถนะ','ทะเบียนเครื่องมือ','เครื่องมือประเมิน']">
เครื่องมือประเมิน
aria-controls="underline-1"
(click)="pathTitle = ['CompetencySystem','AssessmentTools','AssessmentTools']">
{{'AssessmentTools' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./tool-register.component.scss']
})
export class ToolRegisterComponent {
pathTitle = ['การประเมินสมรรถนะ', 'ทะเบียนเครื่องมือ','เครื่องมือประเมิน']
pathTitle = ['CompetencySystem', 'AssessmentTools', 'AssessmentTools']
}
......@@ -84,21 +84,21 @@ const routes: Routes = [
{ path: "ess/profile", component: EssProfileComponent },
{ path: "ess/self-evaluation", title: 'ประเมินตนเอง', component: SelfEvaluationComponent },
{ path: "ess/self-evaluation/:part", title: 'ประเมินตนเอง', component: SelfEvaluationComponent },
{ path: "admin/day-type-registry", title: 'ประเมินตนเอง', component: DayTypeRegistryComponent },
{ path: "admin/day-type-registry", title: 'ทะเบียนประเภทวัน', component: DayTypeRegistryComponent },
{ path: "admin/company-registration", title: 'ทะเบียนบริษัท', component: CompanyRegistrationComponent },
{ path: "admin/job-description", title: 'ข้อมูลลักษณะงาน', component: JobDescriptionComponent },
{ path: "admin/account-settings", title: 'ตั้งค่าผู้ใช้งาน', component: AccountSettingsComponent },
{ path: "admin/name-registration", title: 'ทะเบียนกำหนดชื่อ', component: NameRegistrationComponent },
{ path: "admin/tool-register", title: 'ทะเบียนเครื่องมือ', component: ToolRegisterComponent },
{ path: "admin/name-registration", title: 'คลังข้อมูลสมรรถนะ', component: NameRegistrationComponent },
{ path: "admin/tool-register", title: 'เครื่องมือประเมิน', component: ToolRegisterComponent },
{ path: "admin/competency-management", title: 'การจัดการสมรรถนะ', component: CompetencyManagementComponent },
{ path: "admin/job-detail-management", title: 'จัดการรายละเอียดงาน', component: JobDetailManagementComponent },
{ path: "admin/course-registration", title: 'ทะเบียนหลักสูตร', component: CourseRegistrationComponent },
{ path: "admin/job-detail-management", title: 'ข้อมูลทั่วไป', component: JobDetailManagementComponent },
{ path: "admin/course-registration", title: 'หลักสูตรการพัฒนา', component: CourseRegistrationComponent },
{ path: "admin/edit-group-competencies", title: 'แก้ไขกลุ่มสมรรถนะ', component: EditGroupCompetenciesComponent },
{ path: "admin/evaluation-cycle-manager", title: 'การจัดการรอบการประเมิน', component: EvaluationCycleManagerComponent },
{ path: "admin/evaluation-cycle-manager", title: 'รอบการประเมิน', component: EvaluationCycleManagerComponent },
{ path: "admin/setting-competency", title: 'การตั้งค่า', component: SettingCompetencyComponent },
{ path: "admin/idp-development-plan", title: 'เเผนพัฒนา IDP', component: IdpDevelopmentPlanComponent },
{ path: "admin/job-competency", title: 'ความรู้ ทักษะ ความสามารถในตำเเหน่งงาน', component: JobCompetencyComponent },
{ path: "admin/job-qualifications", title: 'คุณสมบัติที่จำเป็นต่อการปฏิบัติหน้าที่', component: JobQualificationsComponent },
{ path: "admin/job-competency", title: 'ความสามารถในตำแหน่งงาน', component: JobCompetencyComponent },
{ path: "admin/job-qualifications", title: 'คุณสมบัติที่จำเป็น', component: JobQualificationsComponent },
{ path: "admin/job-detail", title: 'รายละเอียดของงาน', component: JobDetailComponent },
{ path: "admin/command-structure", title: 'โครงสร้างสายการบังคับบัญชา', component: CommandStructureComponent },
{ path: "admin/assessment-management", title: 'การจัดการการประเมิน', component: AssessmentManagementComponent },
......@@ -107,11 +107,11 @@ const routes: Routes = [
{ path: "ess/supervisor-evaluation", title: 'ประเมินโดยหัวหน้า', component: SupervisorEvaluationComponent },
{ path: "ess/pms-evaluation", title: 'ประเมินผล PMS', component: PmsFormEmployeeComponent },
{ path: "admin/employee-registration", title: 'ทะเบียนพนักงาน', component: EmployeeRegistrationComponent },
{ path: "admin/name-registration-perfomance", title: 'ทะเบียนกำหนดชื่อ', component: NameRegistrationPerfomanceComponent },
{ path: "admin/name-registration-perfomance", title: 'คลังข้อมูลการบริหารผลงาน', component: NameRegistrationPerfomanceComponent },
{ path: "admin/competency-evaluation-factors", title: 'ปัจจัยการประเมินสมรรถนะ', component: CompetencyEvaluationFactorsComponent },
{ path: "admin/evaluation-factors", title: 'การประเมินจัดการประสิทธิภาพ', component: EvaluationFactorsComponent },
{ path: "admin/grade-registration", title: 'ทะเบียนเกรด', component: GradeRegistrationComponent },
{ path: "admin/grade-registration-sub", title: 'ทะเบียนเกรด', component: PmsGradeRegistrationComponent },
{ path: "admin/evaluation-factors", title: 'ปัจจัยการประเมินผล', component: EvaluationFactorsComponent },
{ path: "admin/grade-registration", title: 'เกรด', component: GradeRegistrationComponent },
{ path: "admin/grade-registration-sub", title: 'เกรด', component: PmsGradeRegistrationComponent },
{ path: "admin/setting-performance-evalution", title: 'การตั้งค่า', component: SettingPerformanceEvalutionComponent },
{ path: "admin/time-attendance", title: 'ทะเบียนการประเมินเวลาทำงาน', component: TimeAttendanceComponent },
......
......@@ -65,7 +65,7 @@
</e-column>
</ng-container>
<e-column headerText='action' width='205' textAlign='Center' *ngIf="actionSetting">
<e-column headerText='action' [width]='actionWidth?actionWidth:205' textAlign='Center' *ngIf="actionSetting">
<ng-template #headerTemplate let-data *ngIf="actionSetting">
<span class="font-size-12px font-weight-700 text-primary">{{'Action' | translate}}</span>
</ng-template>
......@@ -84,15 +84,14 @@
[ngClass]="{'bg-secondary': true, 'text-white': true}">
สร้างแบบฟอร์ม
</span>
<span class="badge text-white m-1" *ngIf="statusFrom.code == '1'"
[ngClass]="{'bg-primary': true, 'text-white': true}">
ปิดรอบประเมิน
{{'EndPeriod' | translate}}
</span>
<span class="badge text-white m-1" *ngIf="statusFrom.code == '2'"
[ngClass]="{'bg-gray-400': true, 'text-white': true}">
ปิดรอบประเมิน
{{'EndPeriod' | translate}}
</span>
</ng-container>
</ng-container>
......
......@@ -83,6 +83,9 @@ export class DatagridSyncfutionComponent implements OnInit {
@Input() childList = ''
@Input() searchText = ''
@Input() actionWidth = 0
aggregatesSum: any[] = [];
aggregatesCount: any[] = [];
aggregatesAvg: any[] = [];
......
......@@ -43,7 +43,7 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['No.','JD Code','DescriptionJobTypeThai','DescriptionJobTypeEng','Action']; let f = first; let l = last">
*ngFor="let item of ['No.','JDCode','DescriptionJobTypeThai','DescriptionJobTypeEng','Action']; let f = first; let l = last">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700">{{ item | translate}}</span>
......
......@@ -15,7 +15,8 @@
</a>
</ng-container>
<ng-container *ngIf="item !== '...'">
<a class="page-link" href="javascript:void(0);" [class.active]="item === currentPage" (click)="changePage(item)">
<a class="page-link" href="javascript:void(0);" [class.active]="item === currentPage"
(click)="changePage(item)">
{{ item }}
</a>
</ng-container>
......@@ -31,12 +32,13 @@
<!-- ตัวเลือกจำนวนรายการต่อหน้า -->
<li>
<select class="ti-form-select" [(ngModel)]="pageSize" (ngModelChange)="onPageSizeChange()">
<option *ngFor="let size of pageSizes" [ngValue]="size">รายการต่อหน้า: {{ size }}</option>
<option *ngFor="let size of pageSizes" [ngValue]="size">{{'ItemsPerPage' | translate}}: {{ size }}</option>
</select>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span >แสดง {{ (currentPage - 1) * pageSize + 1 }} ถึง {{ getEndIndex() }} จาก {{ totalItems }} รายการ</span>
<span>{{'Show' | translate}} {{ (currentPage - 1) * pageSize + 1 }} {{'To'| translate }} {{ getEndIndex() }}
{{'From' | translate}} {{ totalItems }} {{'Items' | translate}}</span>
</ul>
</nav>
</nav>
\ No newline at end of file
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
การจัดการประเมิน
{{'PMSManage' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,15 +11,15 @@
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="activeTab='underline-1';pathTitle = ['การประเมินจัดการประสิทธิภาพ','การจัดการประเมิน','จัดกลุ่มการประเมิน']">
จัดกลุ่มการประเมิน
(click)="activeTab='underline-1';pathTitle = ['menu.PerformanceManagementSystem','PMSManage','GroupingKPI']">
{{'GroupingKPI' | translate}}
</a>
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="activeTab='underline-2';pathTitle = ['การประเมินจัดการประสิทธิภาพ','การจัดการประเมิน','กำหนดผู้ประเมิน']">
กำหนดผู้ประเมิน
(click)="activeTab='underline-2';pathTitle = ['menu.PerformanceManagementSystem','PMSManage','AssignApprover']">
{{'AssignApprover' | translate}}
</a>
</nav>
</div>
......
......@@ -6,6 +6,6 @@ import { Component } from '@angular/core';
styleUrls: ['./assessment-management.component.scss']
})
export class AssessmentManagementComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'การจัดการประเมิน', 'จัดกลุ่มการประเมิน']
pathTitle = ['menu.PerformanceManagementSystem', 'PMSManage', 'GroupingKPI']
activeTab: string = 'underline-1'
}
......@@ -5,8 +5,8 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -19,7 +19,7 @@
data-hs-overlay="#evaluation-grouping-upload-modal"
(click)="fileInput.value = '';selectedFile=null;selectedFileName = 'กรุณาเลือกไฟล์'">
<i class="ti ti-file-plus"></i>
import
{{'Import' | translate }}
</button>
</div>
<!-- <div class="px-1">
......@@ -32,8 +32,9 @@
</div>
</div>
<div class="page px-rem">
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search" [dataSource]="pl.dataList"
[checkBoxSetting]="false" [columns]="columns" (sendSelectData)="onEdit=true;selectPl($event)">
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search"
[dataSource]="syncfutionDataList" [checkBoxSetting]="false" [columns]="columns"
(sendSelectData)="onEdit=true;selectPl($event)">
</app-datagrid-syncfution>
</div>
<!-- <div class="page px-rem">
......
......@@ -5,6 +5,7 @@ import { PLService } from 'src/app/shared/services/pl.service';
import { ColumnModel } from '@syncfusion/ej2-grids';
import { JobcodeService } from 'src/app/shared/services/jobcode.service';
import { JobcodeModel, MyJobcodeModel } from 'src/app/shared/model/jobcode.model';
import { TranslateService } from '@ngx-translate/core';
@Component({
selector: 'app-evaluation-grouping',
......@@ -25,25 +26,40 @@ export class EvaluationGroupingComponent {
selectedFileName: string = 'กรุณาเลือกไฟล์';
columns: ColumnModel[] = [{
field: "jobCodeId",
headerText: "รหัส",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อลักษณะงาน (ไทย)",
type: "string"
}]
searchSettings = {
fields: ['pmsTypeId', 'tdesc'],
operator: 'contains',
ignoreCase: false
};
selectedItems: { key: string, count: number, data: Map<string, boolean> } = { key: '', count: 0, data: new Map<string, boolean>() };
field: "jobCodeId",
headerText: "JDCode",
type: "string",
isPrimaryKey: true,
},
{
field: "name",
headerText: "JobDescription",
type: "string"
}]
searchSettings = {
fields: ['jobCodeId', 'name'],
operator: 'contains',
ignoreCase: false
};
syncfutionDataList: any[] = []
selectedItems: { key: string, count: number, data: Map<string, boolean> } = { key: '', count: 0, data: new Map<string, boolean>() };
pl: { loading: boolean, select: JobcodeModel, dataList: JobcodeModel [] } = { loading: false, select: new MyJobcodeModel(), dataList: [] }
constructor(private toastr: ToastrService, private jobcodeService: JobcodeService, private cdr: ChangeDetectorRef, private fileService: FileService) { }
pl: { loading: boolean, select: JobcodeModel, dataList: JobcodeModel[] } = { loading: false, select: new MyJobcodeModel(), dataList: [] }
constructor(private toastr: ToastrService, private jobcodeService: JobcodeService, private cdr: ChangeDetectorRef, private fileService: FileService, private translateService: TranslateService
) {
this.translateService.onLangChange.subscribe((event) => {
this.setSyncfutionDataList()
});
}
setSyncfutionDataList() {
if (this.pl.dataList) {
this.syncfutionDataList = this.pl.dataList.map(e => ({
jobCodeId: e.jobCodeId,
name: this.translateService.getCurrentLang() == 'th' ? e.tdesc : e.edesc,
}))
}
}
ngOnInit(): void {
this.onSendPathTitle()
this.getPLList()
......@@ -101,10 +117,12 @@ export class EvaluationGroupingComponent {
this.jobcodeService.getGroupAssessmentList().subscribe({
next: response => {
this.pl.dataList = response.map(x => {
return new MyJobcodeModel(x)
})
return new MyJobcodeModel(x)
})
this.pl.loading = false
this.cdr.detectChanges();
this.setSyncfutionDataList()
this.cdr.markForCheck()
}, error: error => {
this.pl.loading = false
console.error('Error fetching employee types:', error);
......@@ -119,15 +137,16 @@ export class EvaluationGroupingComponent {
return match;
});
}
selectPl(data?: JobcodeModel) {
if (data) {
this.pl.select = new MyJobcodeModel(data)
} else if (this.currentModal == 'add') {
this.pl.select = new MyJobcodeModel()
} else if (this.currentModal == 'edit') {
this.pl.select = new MyJobcodeModel({ jobCodeId: this.pl.select.jobCodeId })
}
selectPl(dataSelect?: any) {
const data = this.pl.dataList.find(e => e.jobCodeId == dataSelect.jobCodeId)
if (data) {
this.pl.select = new MyJobcodeModel(data)
} else if (this.currentModal == 'add') {
this.pl.select = new MyJobcodeModel()
} else if (this.currentModal == 'edit') {
this.pl.select = new MyJobcodeModel({ jobCodeId: this.pl.select.jobCodeId })
}
}
searchChange() {
this.currentPage = 1
this.page = Array.from({ length: Math.ceil(this.plListFilter().length / 10) }, (_, i) => i + 1)
......@@ -135,9 +154,9 @@ export class EvaluationGroupingComponent {
}
onSendPathTitle() {
if (this.onEdit) {
this.sendPathTitle.emit(['การประเมินจัดการประสิทธิภาพ', 'การจัดการประเมิน', 'จัดกลุ่มประเมิน', 'แก้ไขกลุ่มการประเมิน']);
this.sendPathTitle.emit(['menu.PerformanceManagementSystem', 'PMSManage', 'GroupingKPI', 'แก้ไขกลุ่มการประเมิน']);
} else if (!this.onEdit) {
this.sendPathTitle.emit(['การประเมินจัดการประสิทธิภาพ', 'การจัดการประเมิน', 'จัดกลุ่มประเมิน']);
this.sendPathTitle.emit(['menu.PerformanceManagementSystem', 'PMSManage', 'GroupingKPI']);
}
}
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
รอบการประเมิน
{{'menu.EvaluationPeriod' | translate }}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-2rem">
......@@ -11,8 +11,8 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="activeTab='underline-1';pathTitle = ['การประเมินจัดการประสิทธิภาพ','รอบประเมิน','รอบการประเมิน']">
รอบการประเมิน
(click)="activeTab='underline-1';pathTitle = ['menu.PerformanceManagementSystem','menu.EvaluationPeriod','menu.EvaluationPeriod']">
{{'menu.EvaluationPeriod' | translate }}
</a>
<!-- <a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
......
......@@ -6,7 +6,7 @@ import { Component } from '@angular/core';
styleUrls: ['./evaluation-cycle-performance.component.scss']
})
export class EvaluationCyclePerformanceComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'รอบการประเมิน','รอบการประเมิน']
pathTitle = ['menu.PerformanceManagementSystem', 'menu.EvaluationPeriod','menu.EvaluationPeriod']
activeTab: string = 'underline-1';
groupShow = '1'
}
......@@ -50,23 +50,22 @@
<button type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
(click)="modalStatus='add';modalStatusEdit=true;selectPl();selectPmsMasfromEvaluationCycle();openDialog();">
<i class="ri-add-line"></i>
Add
{{'Add' | translate }}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-45px m-0 shadow-md"
(click)="modalStatus='delete';selectPmsMasfromEvaluationCycle();deletePmsMasfromEvaluation()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' | translate }}
</button>
</div>
</div>
</div>
<div class="page px-rem">
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search"
[dataSource]="pmsMasfromEvaluation.dataList" [columns]="columns" [selectedItems]="selectedItems" [childForm]="true"
(createFormEvent)="createForm($event)"
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search" [dataSource]="syncfutionDataList"
[columns]="columns" [selectedItems]="selectedItems" [childForm]="true" (createFormEvent)="createForm($event)"
(sendNextPageForm)="selectPmsMasfromEvaluationCycle($event); openDialogForm()"
(sendSelectData)="modalStatus='edit';selectPmsMasfromEvaluationCycle($event);openDialog()"
(sendSelectedItems)="onSelectItemChange($event)">
......@@ -75,7 +74,7 @@
<ng-template #managementEvaluationCycleModal let-modal>
<h3 mat-dialog-title>
{{modalStatus=='add'?'เพิ่มรอบการประเมิน':'เเก้ไขรอบการประเมิน'}}
{{modalStatus=='add'?'เพิ่มรอบการประเมิน':'EvaluationPeriod' | translate}}
</h3>
<div class="w-full flex justify-end mb-1rem">
<div class="absolute flex">
......@@ -83,46 +82,50 @@
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md"
(click)="selectPl();selectPmsMasfromEvaluationCycle()">
<i class="ti ti-eraser text-base"></i>
Clear
{{'Clear' | translate}}
</button>
</div>
</div>
</div>
<mat-dialog-content>
<label for="input-label" class="ti-form-label mt-2rem">รหัสรอบการประเมิน<span class="text-danger">*<ng-container
*ngIf="modalStatus=='add'&&checkPrimary()">
<label for="input-label" class="ti-form-label mt-2rem">{{'PeriodCode'| translate }}<span
class="text-danger">*<ng-container *ngIf="modalStatus=='add'&&checkPrimary()">
รหัสรอบการประเมินซ้ำ
</ng-container></span></label>
<input type="text" id="input-label" class="ti-form-input w-1/2"
[ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}" [readonly]="modalStatus =='edit'"
[(ngModel)]="pmsMasfromEvaluation.select.pmsEvaluationRoundId">
<label for="detail_th" class="ti-form-label mt-2rem">รายละเอียด (ไทย)<span class="text-danger">*</span></label>
<label for="detail_th" class="ti-form-label mt-2rem">{{'DescriptionThai'| translate }}<span
class="text-danger">*</span></label>
<input type="text" id="detail_th" class="ti-form-input h-16"
[ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}" [(ngModel)]="pmsMasfromEvaluation.select.tdesc"
[readonly]="modalStatus =='edit'">
<label for="detail_eng" class="ti-form-label mt-2rem">รายละเอียด (อังกฤษ)</label>
<label for="detail_eng" class="ti-form-label mt-2rem">{{'DescriptionEng'| translate }}</label>
<input type="text" id="detail_eng" class="ti-form-input h-16"
[ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}" [(ngModel)]="pmsMasfromEvaluation.select.edesc"
[readonly]="modalStatus =='edit'">
<label for="input-label" class="ti-form-label mt-2rem">ปีการประเมิน<span class="text-danger">*</span></label>
<label for="input-label" class="ti-form-label mt-2rem">{{'Year_round'| translate }}<span
class="text-danger">*</span></label>
<select class="ti-form-select" [(ngModel)]="pmsMasfromEvaluation.select.apsyear"
[ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}" [disabled]="modalStatus == 'edit'">
<option *ngFor="let item of yearList" [ngValue]="item">{{ item }}</option>
</select>
<label for="input-label" class="ti-form-label mt-2rem">เริ่มวันที่<span class="text-danger">*</span></label>
<label for="input-label" class="ti-form-label mt-2rem">{{'StartDate'| translate }}<span
class="text-danger">*</span></label>
<input type="date" id="input-label" class="ti-form-input w-1/2"
[(ngModel)]="pmsMasfromEvaluation.select.apsPeriodStart" [ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}"
[readonly]="modalStatus =='edit'">
<label for="input-label" class="ti-form-label mt-2rem">สิ้นสุดวันที่<span class="text-danger">*</span></label>
<label for="input-label" class="ti-form-label mt-2rem">{{'EndDate'| translate }}<span
class="text-danger">*</span></label>
<input type="date" id="input-label" class="ti-form-input w-1/2"
[(ngModel)]="pmsMasfromEvaluation.select.apsPeriodEnd" [ngClass]="{'!bg-input-readonly': modalStatus == 'edit'}"
[readonly]="modalStatus =='edit'">
<label for="input-label" class="ti-form-label mt-2rem">ลักษณะงาน (JD)</label>
<label for="input-label" class="ti-form-label mt-2rem">{{'ลักษณะงาน (JD)'| translate }}</label>
<div *ngFor="let item of pmsMasfromEvaluation.select.jd;let i = index;let f=first;let l = last"
class="grid grid-cols-2">
<div class="col-span-1">
......@@ -171,18 +174,18 @@
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</ng-template>
<span class="text-danger mt-1">**หมายเหตุ ถ้าไม่เลือกระดับ JD ระบบจะทำการเลือกทั้งหมด</span>
<span class="text-danger mt-1">**{{'NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll' | translate}}</span>
</mat-dialog-content>
<mat-dialog-actions align="end">
<button type="button" mat-button [mat-dialog-close]
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10">
ย้อนกลับ
{{'Back' | translate}}
</button>
<button *ngIf="modalStatus == 'add'" type="button" class="ti-btn ti-btn-success" mat-button
[class.ti-btn-disabled]="!pmsMasfromEvaluation.select.pmsEvaluationRoundId||!pmsMasfromEvaluation.select.tdesc||(modalStatus=='add'&&checkPrimary())"
(click)="addPmsMasfromEvaluation()"
[disabled]="!pmsMasfromEvaluation.select.pmsEvaluationRoundId||!pmsMasfromEvaluation.select.tdesc||(modalStatus=='add'&&checkPrimary())">
บันทึกข้อมูล
{{'SaveDAte' | translate}}
</button>
</mat-dialog-actions>
</ng-template>
......
......@@ -7,6 +7,7 @@ import { MatDialog } from '@angular/material/dialog';
import Swal from 'sweetalert2';
import { JobcodeService } from 'src/app/shared/services/jobcode.service';
import { JobcodeModel, MyJobcodeModel } from 'src/app/shared/model/jobcode.model';
import { TranslateService } from '@ngx-translate/core';
export interface DataModal {
search: string,
......@@ -69,40 +70,41 @@ export class ManagementCycleComponent {
columns: ColumnModel[] = [{
field: "pmsEvaluationRoundId",
headerText: "รหัส",
headerText: "PeriodCode",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "รายละเอียด",
field: "name",
headerText: "Description",
type: "string"
},
{
field: "apsyear",
headerText: "รอบปีการประเมิน",
headerText: "Year_round",
type: "string"
},
{
field: "apsPeriodStart",
headerText: "วันที่เริ่มต้น",
headerText: "StartDate",
type: "string"
},
{
field: "apsPeriodEnd",
headerText: "วันที่สิ้นสุด",
headerText: "EndDate",
type: "string"
},
{
field: "statusCode.tdesc",
headerText: "สถานะ",
field: "statusCode",
headerText: "Status",
type: "string"
},]
searchSettings = {
fields: ['pmsEvaluationRoundId', 'tdesc', 'apsyear', 'apsPeriodStart', 'apsPeriodEnd', 'statusCode.tdesc'],
fields: ['pmsEvaluationRoundId', 'tdesc', 'apsyear', 'apsPeriodStart', 'apsPeriodEnd', 'statusCode'],
operator: 'contains',
ignoreCase: false
};
syncfutionDataList: any[] = []
selectedItems: { key: string, count: number, data: Map<string, boolean> } = { key: '', count: 0, data: new Map<string, boolean>() };
@ViewChild("managementEvaluationCycleModal") managementEvaluationCycleModal: any;
dialogRef: any
......@@ -117,9 +119,26 @@ export class ManagementCycleComponent {
private dialog: MatDialog,
private cdr: ChangeDetectorRef,
private renderer: Renderer2,
private jobcodeService: JobcodeService
) { }
private jobcodeService: JobcodeService,
private translateService: TranslateService
) {
this.translateService.onLangChange.subscribe((event) => {
this.setSyncfutionDataList()
});
}
setSyncfutionDataList() {
if (this.pmsMasfromEvaluation.dataList) {
this.syncfutionDataList = this.pmsMasfromEvaluation.dataList.map(e => ({
pmsEvaluationRoundId: e.pmsEvaluationRoundId,
name: this.translateService.getCurrentLang() == 'th' ? e.tdesc : e.edesc,
apsyear: e.apsyear,
apsPeriodStart: e.apsPeriodStart,
apsPeriodEnd: e.apsPeriodEnd,
statusCode: e.statusCode.tdesc
}))
}
}
ngOnInit(): void {
this.getPmsMasfromEvaluationCycleList()
this.unlisten = this.renderer.listen('document', 'keydown', (event) => {
......@@ -184,6 +203,7 @@ export class ManagementCycleComponent {
this.selectedItems.count = 0
this.dataLoading = false
this.isDataListCheckedAll = false
this.setSyncfutionDataList()
this.cdr.detectChanges();
},
error: err => {
......@@ -192,9 +212,10 @@ export class ManagementCycleComponent {
}
});
}
selectPmsMasfromEvaluationCycle(pmsMasfromEvaluation?: PmsMasfromEvaluationModel) {
if (pmsMasfromEvaluation) {
this.pmsMasfromEvaluation.select = new MyPmsMasfromEvaluationModel(pmsMasfromEvaluation)
selectPmsMasfromEvaluationCycle(dataSelect?: any) {
const data = dataSelect ? this.pmsMasfromEvaluation.dataList.find(e => e.pmsEvaluationRoundId == dataSelect.pmsEvaluationRoundId) : undefined
if (data) {
this.pmsMasfromEvaluation.select = new MyPmsMasfromEvaluationModel(data)
} else if (this.modalStatus == 'add') {
this.pmsMasfromEvaluation.select = new MyPmsMasfromEvaluationModel()
} else if (this.modalStatus == 'edit') {
......
......@@ -4,8 +4,9 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
[(ngModel)]="search" (ngModelChange)="searchChange()">
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" [(ngModel)]="search"
(ngModelChange)="searchChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
......@@ -16,7 +17,7 @@
<button type="button" class="ti-btn ti-btn-soft-success h-45px m-0 shadow-md"
data-hs-overlay="#define-evaluation-factors-alert-modal">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate }}
</button>
</div>
<div class="px-1">
......@@ -33,7 +34,7 @@
<polyline points="48.97 24 48.97 15.03 56 15.03"></polyline>
</g>
</svg>
Clear
{{'Clear' | translate }}
</button>
</div>
<!-- <div class="px-1">
......@@ -54,7 +55,7 @@
<ng-container *ngFor="let item of pmsEvaluationFactorsTableHeader; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f||l">
<span class="font-size-12px font-weight-700">{{ item }}</span>
<span class="font-size-12px font-weight-700">{{ item | translate}}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0" *ngIf="!l">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
......@@ -75,7 +76,7 @@
<tbody *ngIf="!pmsEvaluationFactors.loading&&!dataListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
{{'NoInformation' | translate}}
</td>
</tr>
</tbody>
......@@ -129,9 +130,10 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((currentPage-1) * 10)+1}} to {{dataListFilter().length<10 ?dataListFilter().length:
(currentPage==page.length ? ((currentPage * 10) - ((currentPage * 10) - dataListFilter().length) )
:(currentPage * 10) ) }} of {{dataListFilter().length}} items</span>
<span>{{'Show' | translate}} {{((currentPage-1) * 10)+1}} {{'To' | translate}} {{dataListFilter().length<10
?dataListFilter().length: (currentPage==page.length ? ((currentPage * 10) - ((currentPage * 10) -
dataListFilter().length) ) :(currentPage * 10) ) }} {{'From' | translate}}
{{dataListFilter().length}} {{'Items' | translate}}</span>
</ul>
</nav>
</div>
......
......@@ -15,7 +15,7 @@ export class DefineEvaluationFactorsComponent {
page = Array.from({ length: 1 }, (_, i) => i + 1);
search = ""
pmsEvaluationFactors: { loading: boolean, dataList: PmsEvaluationFactorsModel[] } = { loading: false, dataList: [] }
pmsEvaluationFactorsTableHeader: string[] = ['ระดับพนักงาน']
pmsEvaluationFactorsTableHeader: string[] = ['JobLevelJL']
constructor(private pmsEvaluationFactorsService: PmsEvaluationFactorsService,
private toastr: ToastrService,
private cdr: ChangeDetectorRef
......@@ -25,7 +25,7 @@ export class DefineEvaluationFactorsComponent {
}
getPmsEvaluationFactorsList() {
this.pmsEvaluationFactors.loading = true
this.pmsEvaluationFactorsTableHeader = ['ระดับพนักงาน']
this.pmsEvaluationFactorsTableHeader = ['JobLevelJL']
this.pmsEvaluationFactorsService.getList().subscribe({
next: response => {
this.pmsEvaluationFactors.dataList = response.map(x => new MyPmsEvaluationFactorsModel(x))
......@@ -35,7 +35,7 @@ export class DefineEvaluationFactorsComponent {
this.pmsEvaluationFactors.dataList[0]
);
const pmsTypeIds = maxItem?.pmsEvaluationFactors1ModelList.map(x => x.pmsType.pmsTypeId) || [];
this.pmsEvaluationFactorsTableHeader = this.pmsEvaluationFactorsTableHeader.concat(maxItem?.pmsEvaluationFactors1ModelList.map(x => x.pmsType.tdesc) || []).concat(['รวม'])
this.pmsEvaluationFactorsTableHeader = this.pmsEvaluationFactorsTableHeader.concat(maxItem?.pmsEvaluationFactors1ModelList.map(x => x.pmsType.tdesc) || []).concat(['Total'])
this.pmsEvaluationFactors.dataList.forEach(x => {
while (x.pmsEvaluationFactors1ModelList.length < 5) {
const usedTypes = x.pmsEvaluationFactors1ModelList.map(y => y.pmsType.pmsTypeId);
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ปัจจัยการประเมินผล
{{'menu.PmsFactors' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-2rem">
......@@ -11,7 +11,7 @@
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1">
กำหนดปัจจัยการประเมินผล
{{'PMSFactorsSetting' | translate }}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./evaluation-factors.component.scss']
})
export class EvaluationFactorsComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ปัจจัยการประเมินผล', 'กำหนดปัจจัยการประเมินผล']
pathTitle = ['menu.PerformanceManagementSystem', 'menu.PmsFactors', 'PMSFactorsSetting']
}
......@@ -18,18 +18,18 @@ export class AssessmentTypesComponent {
modalStatus: "add" | "edit" | 'delete' = "add"
columns: ColumnModel[] = [{
field: "pmsTypeId",
headerText: "รหัส",
headerText: "Code",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "ชื่อประเภท",
headerText: "TypeName",
type: "string"
},
{
field: "shortName",
headerText: "ชื่อย่อ",
headerText: "Abbreviations",
type: "string"
}]
searchSettings = {
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ทะเบียนกำหนดชื่อ
{{'menu.DataBankPms' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-2rem">
......@@ -11,14 +11,14 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="currentPath=1;pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนกำหนดชื่อ','ประเภทการประเมิน']">
ประเภทการประเมิน
(click)="currentPath=1;pathTitle = ['menu.PerformanceManagementSystem', 'menu.DataBankPms','PmsTypes']">
{{'PmsTypes' | translate}}
</a>
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="currentPath=2;pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนกำหนดชื่อ','หัวข้อการประเมิน']">
หัวข้อการประเมิน
(click)="currentPath=2;pathTitle = ['menu.PerformanceManagementSystem', 'menu.DataBankPms','PmsTopics']">
{{'PmsTopics' | translate}}
</a>
</nav>
</div>
......
......@@ -6,6 +6,6 @@ import { Component } from '@angular/core';
styleUrls: ['./name-registration-perfomance.component.scss']
})
export class NameRegistrationPerfomanceComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนกำหนดชื่อ', 'ประเภทการประเมิน']
pathTitle = ['menu.PerformanceManagementSystem', 'menu.DataBankPms', 'PmsTypes']
currentPath = 1
}
......@@ -4,9 +4,10 @@
<div class="px-1">
<div class="relative shadow-md">
<input type="text" id="hs-leading-icon" name="hs-leading-icon"
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 " [placeholder]="'SearchByNoOrName' | translate"
style="height: 40px;" [(ngModel)]="search" (ngModelChange)="searchChange()">
<div
class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
[placeholder]="'SearchByNoOrName' | translate" style="height: 40px;" [(ngModel)]="search"
(ngModelChange)="searchChange()">
<div
class="absolute inset-y-0 ltr:left-0 rtl:right-0 flex items-center pointer-events-none z-20 ltr:pl-4 rtl:pr-4">
<i class="ri-search-line text-gray"></i>
</div>
......@@ -16,17 +17,17 @@
<button type="button" class="ti-btn ti-btn-soft-secondary h-10 m-0 shadow-md"
(click)="selectData();pathTitleChange('add')">
<i class="ri-add-line"></i>
Add
{{'Add' |translate}}
</button>
</div>
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-danger h-10 m-0 shadow-md"
data-hs-overlay="#grade-management-alert-delete-modal" (click)="selectData()">
<i class="ri-delete-bin-6-line"></i>
Delete
{{'Delete' |translate}}
</button>
</div>
<!-- <div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-10 m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
......@@ -36,8 +37,8 @@
</div>
<div class="page px-rem">
<app-datagrid-syncfution [searchSettings]="searchSettings" [searchText]="search" [dataSource]="dataList"
[columns]="columns" [selectedItems]="selectedItems"
(sendSelectData)="typeTab='edit';selectData($event)" (sendSelectedItems)="onSelectItemChange($event)">
[columns]="columns" [selectedItems]="selectedItems" (sendSelectData)="typeTab='edit';selectData($event)"
(sendSelectedItems)="onSelectItemChange($event)">
</app-datagrid-syncfution>
</div>
<!-- <div class="page px-rem">
......@@ -150,7 +151,7 @@
ย้อนกลับ
</button>
<a class="ti-btn ti-btn-danger" href="javascript:void(0);"
data-hs-overlay="#grade-management-alert-delete-modal" *ngIf="numDataListChecked"
data-hs-overlay="#grade-management-alert-delete-modal" *ngIf="numDataListChecked"
(click)="deletePmsGroupGradeList();">
ลบข้อมูล
</a>
......@@ -163,8 +164,8 @@
<ng-container *ngIf="typeTab">
<app-pms-group-grade [dataSelect]="dataSelect" [dataList]="dataList" [typeTab]="typeTab" (sendBackTab)="pathTitleChange($event)"
(sendDataList)="dataList=$event"></app-pms-group-grade>
<app-pms-group-grade [dataSelect]="dataSelect" [dataList]="dataList" [typeTab]="typeTab"
(sendBackTab)="pathTitleChange($event)" (sendDataList)="dataList=$event"></app-pms-group-grade>
</ng-container>
<!-- <ng-container *ngIf="editTab">
......
......@@ -35,35 +35,35 @@ export class PmsGradeManagementComponent {
dataSelect: DataModel = { check: false, code: '', tdesc: '', edesc: '', pmsGrade: [] }
columns: ColumnModel[] = [{
field: "code",
headerText: "รหัส",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "รายละเอียด (ไทย)",
type: "string"
},
{
field: "edesc",
headerText: "รายละเอียด (อังกฤษ)",
type: "string"
}]
searchSettings = {
fields: ['code','tdesc','edesc'],
operator: 'contains',
ignoreCase: false
};
selectedItems: { key: string, count: number, data: Map<string, boolean> } = { key: '', count: 0, data: new Map<string, boolean>() };
@ViewChild("pmsGradeModal") pmsGradeModal: any;
dialogRef: any
field: "code",
headerText: "Code",
type: "string",
isPrimaryKey: true,
},
{
field: "tdesc",
headerText: "DescriptionThai",
type: "string"
},
{
field: "edesc",
headerText: "DescriptionEng",
type: "string"
}]
searchSettings = {
fields: ['code', 'tdesc', 'edesc'],
operator: 'contains',
ignoreCase: false
};
selectedItems: { key: string, count: number, data: Map<string, boolean> } = { key: '', count: 0, data: new Map<string, boolean>() };
@ViewChild("pmsGradeModal") pmsGradeModal: any;
dialogRef: any
constructor(private toastr: ToastrService,
private pmsGroupGradeService: PmsGroupGradeService,
private dialog: MatDialog,
private cdr: ChangeDetectorRef) {
this.sendPathTitle.emit(['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนเกรด', 'การจัดการเกรด'])
this.sendPathTitle.emit(['menu.PerformanceManagementSystem', 'menu.Grade', 'GradeManage'])
}
ngOnInit(): void {
this.getPmsGroupGradeList()
......@@ -146,40 +146,40 @@ export class PmsGradeManagementComponent {
}
deletePmsGroupGradeList() {
if (!this.numSelectItem()) {
this.showAlert('กรุณาเลือกข้อมูลที่ต้องการลบ', 'error')
return
}
Swal.fire({
icon: 'question',
title: 'แจ้งเตือน',
text: 'ยืนยันการลบข้อมูลหรือไม่',
showCancelButton: true,
confirmButtonText: 'ลบข้อมูล',
cancelButtonText: 'ย้อนกลับ',
reverseButtons: true,
}).then((result) => {
if (result.isConfirmed) {
this.dataLoading = true
const selectedKeys = Array.from(this.selectedItems.data.keys());
const body = this.dataList.filter(x => selectedKeys.includes(x.code) && this.selectedItems.data.get(x.code)).map(x => new MyPmsGroupGradeModel({ groupGradeId: x.code, tdesc: x.tdesc, edesc: x.edesc }))
this.pmsGroupGradeService.delete(body).subscribe({
next: response => {
if (response.success) {
this.showAlert(response.message, 'success')
this.getPmsGroupGradeList()
this.closeDialog()
} else {
this.showAlert(response.message, 'error')
this.dataLoading = false
}
}, error: error => {
this.showAlert(error.message, 'error')
this.dataLoading = false
}
})
if (!this.numSelectItem()) {
this.showAlert('กรุณาเลือกข้อมูลที่ต้องการลบ', 'error')
return
}
Swal.fire({
icon: 'question',
title: 'แจ้งเตือน',
text: 'ยืนยันการลบข้อมูลหรือไม่',
showCancelButton: true,
confirmButtonText: 'ลบข้อมูล',
cancelButtonText: 'ย้อนกลับ',
reverseButtons: true,
}).then((result) => {
if (result.isConfirmed) {
this.dataLoading = true
const selectedKeys = Array.from(this.selectedItems.data.keys());
const body = this.dataList.filter(x => selectedKeys.includes(x.code) && this.selectedItems.data.get(x.code)).map(x => new MyPmsGroupGradeModel({ groupGradeId: x.code, tdesc: x.tdesc, edesc: x.edesc }))
this.pmsGroupGradeService.delete(body).subscribe({
next: response => {
if (response.success) {
this.showAlert(response.message, 'success')
this.getPmsGroupGradeList()
this.closeDialog()
} else {
this.showAlert(response.message, 'error')
this.dataLoading = false
}
}, error: error => {
this.showAlert(error.message, 'error')
this.dataLoading = false
}
});
})
}
});
}
openDialog() {
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ทะเบียนเกรด
{{'menu.Grade' | translate}}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,8 +11,8 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินจัดการประสิทธิภาพ','ทะเบียนเกรด','การจัดการเกรด']">
การจัดการเกรด
(click)="pathTitle = ['menu.PerformanceManagementSystem', 'menu.Grade', 'GradeManage']">
{{'GradeManage' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./pms-grade-registration.component.scss']
})
export class PmsGradeRegistrationComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนเกรด', 'การจัดการเกรด']
pathTitle = ['menu.PerformanceManagementSystem', 'menu.Grade', 'GradeManage']
}
......@@ -4,7 +4,7 @@
<button type="button" class="ti-btn ti-btn-soft-success h-10 m-0 shadow-md"
data-hs-overlay="#assessment-system-configurtion-alert-modal">
<i class="ri-save-3-line"></i>
Save
{{'Save' | translate}}
</button>
</div>
<!-- <div class="px-1">
......@@ -20,7 +20,7 @@
<div class="page">
<div class="grid grid-cols-3 gap-6">
<div class="col-span-1">
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">ปีการประเมิน <span
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label">{{'Year' | translate}}<span
class="text-danger">*</span></label>
</div>
</div>
......@@ -66,7 +66,7 @@
</div>
</div>
</div> -->
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">เเสดงผลประเมินสมรรถนะ <span
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">{{'Competency' | translate}}<span
class="text-danger">*</span></label>
<div class="box-body">
<div class="grid grid-cols-6 gap-2">
......@@ -80,7 +80,7 @@
<div class="col-span-5">
<label for="evaluationResultsStatus-0" class="text-sm text-gray-500"
[class.pointer-events-none]="setting.data.evaluationResultsStatus=='0'">
เเสดงผล
{{'DisplayResults' | translate}}
</label>
</div>
</div>
......@@ -93,13 +93,13 @@
<div class="col-span-5">
<label for="evaluationResultsStatus-1" class="text-sm text-gray-500"
[class.pointer-events-none]="setting.data.evaluationResultsStatus=='1'">
ไม่เเสดงผล
{{'NotDisplay' | translate}}
</label>
</div>
</div>
</div>
</div>
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">เเสดงผลประเมินเวลาทำงาน <span
<label for="hs-trailing-button-add-on-with-icon" class="ti-form-label mt-10">{{'TimeAttendance' | translate}} <span
class="text-danger">*</span></label>
<div class="box-body">
<div class="grid grid-cols-6 gap-2">
......@@ -113,7 +113,7 @@
<div class="col-span-5">
<label for="workingTimeStatus-0" class="text-sm text-gray-500"
[class.pointer-events-none]="setting.data.workingTimeStatus=='0'">
เเสดงผล
{{'DisplayResults' | translate}}
</label>
</div>
</div>
......@@ -126,7 +126,7 @@
<div class="col-span-5">
<label for="workingTimeStatus-1" class="text-sm text-gray-500"
[class.pointer-events-none]="setting.data.workingTimeStatus=='1'">
ไม่เเสดงผล
{{'NotDisplay' | translate}}
</label>
</div>
</div>
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 text-primary px-8">
การตั้งค่า
{{'Setting' | translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,8 +11,8 @@
<a class="text-base font-medium hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินจัดการประสิทธิภาพ','การตั้งค่า','กำหนดค่าระบบการประเมิน']">
กำหนดค่าระบบการประเมิน
(click)="pathTitle = ['menu.PerformanceManagementSystem','Setting','PmsConfig']">
{{'PmsConfig' | translate}}
</a>
</nav>
</div>
......
......@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./setting-performance-evalution.component.scss']
})
export class SettingPerformanceEvalutionComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'การตั้งค่า','กำหนดค่าระบบการประเมิน']
pathTitle = ['menu.PerformanceManagementSystem', 'Setting','PmsConfig']
}
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out rounded-md">
<div class="ti-modal-header bg-primary text-center">
<h5 class="text-xxl font-bold text-white">
นำเข้าข้อมูลสถิติเวลาทำงาน
{{'ImportWorkingTimeData' | translate}}
</h5>
</div>
<div class="ti-modal-body max-h-full overflow-hidden ti-modal-content !rounded-t-none !rounded-b-sm">
<h1 class="mt-2rem text-xl" style="text-align: center;">ไฟล์</h1>
<h1 class="mt-2rem text-xl" style="text-align: center;">{{'File' | translate}}</h1>
<div class="mt-2rem p-2">
<div class="flex rounded-md">
<input #fileInput id="fileInput" type="file" (change)="onFileSelected($event)" hidden>
<input type="text" [value]="selectedFileName" readonly (click)="fileInput.click()"
<input type="text" [value]="selectedFileName | translate" readonly (click)="fileInput.click()"
class="ti-form-input rounded-none ltr:rounded-l-md rtl:rounded-r-md focus:z-10 cursor-pointer">
<button type="button" (click)="fileInput.click()"
class="inline-flex flex-shrink-0 justify-center items-center h-[2.875rem] w-[2.875rem] ltr:rounded-r-md rtl:rounded-l-md border border-transparent font-semibold bg-secondary text-white hover:bg-secondary focus:z-10 focus:outline-none focus:ring-0 focus:ring-secondary transition-all text-sm">
......@@ -20,13 +20,13 @@
<h1 class="cursor-pointer justify-center -mb-px inline-flex items-center gap-2
text-center text-secondary border-secondary border-b-2 align-items-end text-xl"
(click)="downloadFile()">
ดาวน์โหลดตัวอย่างไฟล์</h1>
{{'DownloadSampleFile' | translate}}</h1>
</div>
<div class="flex justify-center mt-2rem mb-1rem space-x-4">
<button type="submit" class="ti-btn ti-btn-secondary"
data-hs-overlay="#company-registration-page-upload-modal" [class.ti-btn-disabled]="!selectedFile"
(click)="uploadFile()" [disabled]="!selectedFile" [disabled]="!selectedFile">
อัปโหลด
{{'Upload' | translate}}
</button>
</div>
</div>
......
......@@ -13,7 +13,7 @@ interface table {
})
export class TimeAttendanceStatisticsComponent {
selectedFile: File | null = null;
selectedFileName: string = 'กรุณาเลือกไฟล์';
selectedFileName: string = 'PleaseSelectFile';
constructor(private toastr: ToastrService,
private cdr: ChangeDetectorRef,
private fileService: FileService) { }
......@@ -21,7 +21,7 @@ export class TimeAttendanceStatisticsComponent {
onFileSelected(event: any) {
this.selectedFile = event.target.files.length > 0 ? event.target.files[0] : null;
this.selectedFileName = this.selectedFile?.name || "กรุณาเลือกไฟล์"
this.selectedFileName = this.selectedFile?.name || "PleaseSelectFile"
}
uploadFile() {
if (!this.selectedFile) {
......
......@@ -3,7 +3,7 @@
</div>
<div class="block-main-content">
<div class="font-size-18px font-weight-700 pt-1.5rem text-primary px-2rem">
ทะเบียนการประเมินเวลาทำงาน
{{'TimeAttendance_head' | translate }}
</div>
<div class="page pt-0.75rem">
<div class="border-b border-gray-200 dark:border-white/10 px-8">
......@@ -11,14 +11,14 @@
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1"
(click)="pathTitle = ['การประเมินจัดการประสิทธิภาพ','ทะเบียนการประเมินเวลาทำงาน','การจัดการหัวข้อการประเมินเวลาทำงาน'];currentPath=1">
การจัดการหัวข้อการประเมินเวลาทำงาน
(click)="pathTitle = ['menu.PerformanceManagementSystem','TimeAttendance_head','TimeAttendanceManage'];currentPath=1">
{{'TimeAttendanceManage' | translate }}
</a>
<a class="font-size-16px font-weight-500 hs-tab-active:font-weight-700 hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2"
(click)="pathTitle = ['การประเมินจัดการประสิทธิภาพ','ทะเบียนการประเมินเวลาทำงาน' ,'การจัดการข้อมูลสถิติเวลาทำงาน'];currentPath=2">
การจัดการข้อมูลสถิติเวลาทำงาน
(click)="pathTitle = ['menu.PerformanceManagementSystem','TimeAttendance_head' ,'WorkingTimeDataManage'];currentPath=2">
{{'WorkingTimeDataManage' | translate }}
</a>
</nav>
</div>
......
......@@ -10,6 +10,6 @@ interface table {
styleUrls: ['./time-attendance.component.scss']
})
export class TimeAttendanceComponent {
pathTitle = ['การประเมินจัดการประสิทธิภาพ', 'ทะเบียนการประเมินเวลาทำงาน', 'การจัดการหัวข้อการประเมินเวลาทำงาน']
pathTitle = ['menu.PerformanceManagementSystem', 'TimeAttendance_head', 'TimeAttendanceManage']
currentPath = 1
}
......@@ -213,7 +213,7 @@ export class SidebarComponent {
}))
if (submenuExcel.length) {
this.menuItems.push({
title: 'รายงาน Excel',
title: 'ExcelReport',
type: 'sub',
selected: false,
active: false,
......
......@@ -208,7 +208,7 @@ export class NavService implements OnDestroy {
},
{
title: 'ประเมินสมรรถนะ',
title: 'menu.CompetencySystem',
type: 'sub',
selected: false,
active: false,
......@@ -217,19 +217,19 @@ export class NavService implements OnDestroy {
show: true,
icon: 'assets/img/icons-menu/performance-assessment.png',
children: [
{ id: 'm41', path: 'admin/setting-competency', title: 'การตั้งค่า', type: 'link', show: true },
{ id: 'm42', path: 'admin/name-registration', title: 'ทะเบียนกำหนดชื่อ', type: 'link', show: true },
{ id: 'm43', path: 'admin/grade-registration', title: 'ทะเบียนเกรด', type: 'link', show: true },
{ id: 'm44', path: 'admin/tool-register', title: 'ทะเบียนเครื่องมือ', type: 'link', show: true },
{ id: 'm45', path: 'admin/course-registration', title: 'ทะเบียนหลักสูตร', type: 'link', show: true },
{ id: 'm46', path: 'admin/idp-development-plan', title: 'แผนพัฒนา IDP', type: 'link', show: true },
{ id: 'm465', path: 'admin/competency-evaluation-factors', title: 'ปัจจัยการประเมินสมรรถนะ', type: 'link', show: true },
{ id: 'm47', path: 'admin/competency-management', title: 'การจัดการสมรรถนะ', type: 'link', show: true },
{ id: 'm48', path: 'admin/evaluation-cycle-manager', title: 'การจัดการรอบการประเมิน', type: 'link', show: true },
{ id: 'm41', path: 'admin/setting-competency', title: 'menu.Setting', type: 'link', show: true },
{ id: 'm42', path: 'admin/name-registration', title: 'menu.DataBankCompetency', type: 'link', show: true },
{ id: 'm43', path: 'admin/grade-registration', title: 'menu.Grade', type: 'link', show: true },
{ id: 'm44', path: 'admin/tool-register', title: 'menu.AssessmentTools', type: 'link', show: true },
{ id: 'm45', path: 'admin/course-registration', title: 'menu.CDR', type: 'link', show: true },
{ id: 'm46', path: 'admin/idp-development-plan', title: 'menu.IDP', type: 'link', show: true },
{ id: 'm465', path: 'admin/competency-evaluation-factors', title: 'menu.CompetencyFactors', type: 'link', show: true },
{ id: 'm47', path: 'admin/competency-management', title: 'menu.CompetencyManage', type: 'link', show: true },
{ id: 'm48', path: 'admin/evaluation-cycle-manager', title: 'menu.AssessmentPeriod', type: 'link', show: true },
],
},
{
title: 'ประเมินจัดการประสิทธิภาพ',
title: 'menu.PerformanceManagementSystem',
type: 'sub',
selected: false,
active: false,
......@@ -238,17 +238,17 @@ export class NavService implements OnDestroy {
show: true,
icon: 'assets/img/icons-menu/performance-management-assessment.png',
children: [
{ id: 'm51', path: 'admin/setting-performance-evalution', title: 'การตั้งค่า', type: 'link', show: true },
{ id: 'm52', path: 'admin/name-registration-perfomance', title: 'ทะเบียนกำหนดชื่อ', type: 'link', show: true },
{ id: 'm53', path: 'admin/grade-registration-sub', title: 'ทะเบียนเกรด', type: 'link', show: true },
{ id: 'm54', path: 'admin/time-attendance', title: 'ทะเบียนการประเมินเวลาทำงาน', type: 'link', show: true },
{ id: 'm55', path: 'admin/evaluation-factors', title: 'ปัจจัยการประเมินผล', type: 'link', show: true },
{ id: 'm56', path: 'admin/assessment-management', title: 'การจัดการการประเมิน', type: 'link', show: true },
{ id: 'm57', path: 'admin/evaluation-cycle-performance', title: 'รอบการประเมิน', type: 'link', show: true }
{ id: 'm51', path: 'admin/setting-performance-evalution', title: 'menu.Setting', type: 'link', show: true },
{ id: 'm52', path: 'admin/name-registration-perfomance', title: 'menu.DataBankPms', type: 'link', show: true },
{ id: 'm53', path: 'admin/grade-registration-sub', title: 'menu.Grade', type: 'link', show: true },
{ id: 'm54', path: 'admin/time-attendance', title: 'menu.TimeAttendance', type: 'link', show: true },
{ id: 'm55', path: 'admin/evaluation-factors', title: 'menu.PmsFactors', type: 'link', show: true },
{ id: 'm56', path: 'admin/assessment-management', title: 'menu.PmsManage', type: 'link', show: true },
{ id: 'm57', path: 'admin/evaluation-cycle-performance', title: 'menu.EvaluationPeriod', type: 'link', show: true }
],
},
{
title: 'รายงาน',
title: 'Report',
type: 'sub',
selected: false,
active: false,
......
......@@ -16,7 +16,23 @@
"JobDetail": "Job Detail",
"JobSpecification": "Job Specification",
"JobCompetency": "Job Competency",
"KeyPerformanceIndicators": "Key Performance Indicators: KPIs"
"KeyPerformanceIndicators": "Key Performance Indicators: KPIs",
"CompetencySystem": "Competency System",
"Setting": "Setting",
"DataBankCompetency": "Data Bank Competency",
"Grade": "Grade",
"AssessmentTools": "Assessment Tools",
"CDR": "CDR",
"IDP": "IDP",
"CompetencyFactors": "Competency Factors",
"CompetencyManage": "Competency Manage",
"AssessmentPeriod": "Assessment Period",
"PerformanceManagementSystem": "Performance Management System",
"DataBankPms": "DataBank PMS",
"TimeAttendance": "Time Attendance",
"PmsFactors": "PMS Factors",
"PmsManage": "PMS Manage",
"EvaluationPeriod": "Evaluation Period"
},
"SearchByNoOrName": "Search by No. or Name",
"Import": "Import",
......@@ -25,6 +41,7 @@
"Print": "Print",
"ExcelExport": "Excel Export",
"CSVExport": "CSV Export",
"Select": "Select",
"Selected": "Selected",
"CompanyCode": "Company Code",
"CompanyDescThai": "Company Desc. (Thai)",
......@@ -78,8 +95,106 @@
"Level": "Level",
"DescriptionJobTypeThai": "Description (Thai)",
"DescriptionJobTypeEng": "Description (Eng)",
"JD Code": "JD Code",
"JDCode": "JD Code",
"No.": "No.",
"JobSpecification": "Job Specification",
"JobCompetency": "Job Competency"
"JobCompetency": "Job Competency",
"CompetencySystem": "Competency System",
"Setting": "Setting",
"CompetencyConfig": "Competency Config",
"Year": "Year",
"ExpectationLevel": "Expectation Level",
"WeightOfEvaluationFactors": "Weight of Evaluation Factors",
"Score": "Score",
"Weight": "Weight",
"Save": "Save",
"CompetencyTypes": "Competency Types",
"CompetencyTopics": "Competency Topics",
"Code": "Code",
"TypeName": "Type Name",
"Abbreviations": "Abbreviations",
"EditCompetencyTypes": "Competency Types",
"TypesNameThai": "Types Name (Thai)",
"TypesNameEng": "Types Name (Eng)",
"Clear": "Clear",
"Back": "Back",
"SaveData": "Save",
"CompetencyCode": "Competency Code",
"CompetencyName": "Competency Name",
"CompetencyType": "Competency Type",
"GradeManage": "Grade Manage",
"AssessmentTools": "Assessment Tools",
"ToolsName": "Tools Name",
"DisplayName": "Display Name",
"CDRName": "CDR Name",
"IDPConfig": "IDP Config",
"GAPConfig": "GAP Config",
"Pass": "Pass",
"NoGAP": "(No GAP)",
"IDPConfig_table": "IDP Config",
"NumberOfBI": "Number of BI",
"DevelopmentTools": "Development Tools",
"OJTJobAssignment": "OJT/Job Assignment",
"CoachMentor": "Coach/Mentor",
"Training": "Training",
"BIsAndCDR": "BIs and CDR",
"CompetencyMapping": "Competency Mapping",
"AssignApprover": "Assign Approver",
"CompetencyManage": "Competency Manage",
"BIsAndCDRManage": "BIs and CDR Manage",
"CompetencyType_type": "Competency Type",
"CompetencyDefinition": "Competency Definition",
"ProficiencyLevel": "Proficiency Level",
"BehavioralIndicators": "Behavioral Indicators (BIs)",
"ItemsPerPage": "Items Per Page",
"To": "To",
"From": "From",
"JobDescription": "Job Description (Eng)",
"EditCompetencyMapping": "Competency Mapping",
"JobDescriptionThai": "Description (Thai)",
"JobDescriptionEng": "Description (Eng)",
"NoInformation": "No information",
"CompetencyTopics_list": "CompetencyTopics",
"Competency_Code": "Code",
"Approver1": "Approver 1",
"Approver2": "Approver 2",
"Approver3": "Approver 3",
"Approver4": "Approver 4",
"Approver5": "Approver 5",
"EmployeeName": "Employee Name",
"Assessor1": "Approver 1",
"Assessor2": "Approver 2",
"Assessor3": "Approver 3",
"Assessor4": "Approver 4",
"Assessor5": "Approver 5",
"AssessmentPeriod": "Assessment Period",
"PeriodCode": "Period Code",
"Description": "Description",
"Year_round": "Year",
"StartDate": "Start Date",
"EndDate": "End Date",
"EndPeriod": "End Period",
"PerformanceManagementSystem": "Performance Management System",
"PmsConfig": "PMS Config",
"Competency": "Competency",
"DisplayResults": "Display Results",
"NotDisplay": "Not Display",
"TimeAttendance": "Time Attendance",
"PmsTypes": "PMS Types",
"PmsTopics": "PMS Topics",
"TopicName": "Topic Name",
"TimeAttendance_head": "Time Attendance",
"TimeAttendanceManage": "Time Attendance Manage",
"WorkingTimeDataManage": "Working Time Data Manage",
"Unit": "Unit",
"ImportWorkingTimeData": "Import Working Time Data",
"PMSFactorsSetting": "PMS Factors Setting",
"Total": "Total",
"PMSManage": "PMS Manage",
"GroupingKPI": "Grouping KPI",
"Report": "Report",
"ExcelReport": "Excel Report",
"EvaluationPeriod": "Evaluation Period",
"JobDescription(JD)": "Job Description (JD)",
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "Note: If you do not select a JD level, The system will select all."
}
\ No newline at end of file
......@@ -16,7 +16,23 @@
"JobDetail": "รายละเอียดของงาน",
"JobSpecification": "คุณสมบัติที่จำเป็น",
"JobCompetency": "ความสามารถในตำแหน่งงาน",
"KeyPerformanceIndicators": "ตัวชี้วัดของตำแหน่งงาน"
"KeyPerformanceIndicators": "ตัวชี้วัดของตำแหน่งงาน",
"CompetencySystem": "ประเมินสมรรถนะ",
"Setting": "การตั้งค่า",
"DataBankCompetency": "คลังข้อมูลสมรรถนะ",
"Grade": "เกรด",
"AssessmentTools": "เครื่องมือการประเมิน",
"CDR": "หลักสูตรการพัฒนา",
"IDP": "แผนพัฒนา IDP",
"CompetencyFactors": "ปัจจัยการประเมินสมรรถนะ",
"CompetencyManage": "การจัดการสมรรถนะ",
"AssessmentPeriod": "รอบการประเมิน",
"PerformanceManagementSystem": "ประเมินการจัดการประสิทธิภาพ",
"DataBankPms": "คลังข้อมูลการบริหารผลงาน",
"TimeAttendance": "ทะเบียนการประเมินเวลาทำงาน",
"PmsFactors": "ปัจจัยการประเมินผล",
"PmsManage": "การจัดการการประเมินผล",
"EvaluationPeriod": "รอบการประเมิน"
},
"SearchByNoOrName": "ค้นหาตามรหัสหรือชื่อ",
"Import": "นำเข้า",
......@@ -25,6 +41,7 @@
"Print": "พิมพ์",
"ExcelExport": "ส่งออก Excel",
"CSVExport": "ส่งออก CSV",
"Select": "เลือก",
"Selected": "เลือก",
"CompanyCode": "รหัสบริษัท",
"CompanyDescThai": "รายละเอียดบริษัท (ไทย)",
......@@ -81,8 +98,106 @@
"Level": "ระดับ",
"DescriptionJobTypeThai": "รายละเอียด (ไทย)",
"DescriptionJobTypeEng": "รายละเอียด (อังกฤษ)",
"JD Code": "รหัสงาน",
"JDCode": "รหัสงาน",
"No.": "ลำดับ",
"JobSpecification": "คุณสมบัติที่จำเป็นต่อการปฏิบัติหน้าที่",
"JobCompetency": "ความรู้ ทักษะ ความสามารถในตำแหน่งงาน ( Job Competency )"
"JobCompetency": "ความรู้ ทักษะ ความสามารถในตำแหน่งงาน ( Job Competency )",
"CompetencySystem": "การประเมินสมรรถนะ",
"CompetencyConfig": "กำหนดค่าระบบประเมินสมรรถนะ",
"Year": "ปีการประเมิน",
"ExpectationLevel": "ระดับความคาดหวัง",
"WeightOfEvaluationFactors": "น้ำหนักปัจจัยการประเมิน",
"Score": "คะแนน",
"Weight": "น้ำหนัก",
"Save": "บันทึก",
"CompetencyTypes": "ประเภทสมรรถนะ",
"CompetencyTopics": "หัวข้อสมรรถนะ",
"Code": "รหัส",
"TypeName": "ชื่อประเภท",
"Abbreviations": "ชื่อย่อ",
"EditCompetencyTypes": "แก้ไขประเภทสมรรถนะ",
"TypesNameThai": "ชื่อประเภท (ไทย)",
"TypesNameEng": "ชื่อประเภท (อังกฤษ)",
"Clear": "ล้างข้อมูล",
"Back": "ย้อนกลับ",
"SaveData": "บันทึกข้อมูล",
"CompetencyCode": "รหัสสมรรถนะ",
"CompetencyName": "ชื่อสมรรถนะ",
"CompetencyType": "ประเภทสมรรถนะ",
"GradeManage": "การจัดการเกรด",
"AssessmentTools": "เครื่องมือประเมิน",
"ToolsName": "ชื่อเครื่องมือประเมิน",
"DisplayName": "ชื่อที่แสดง",
"CDRName": "ชื่อหลักสูตร",
"IDPConfig": "กำหนดแผนพัฒนา IDP",
"GAPConfig": "ตั้งค่าคะแนนประเมินตัวชี้วัดที่ไม่ติด GAP",
"Pass": "ผ่าน",
"NoGAP": "(ไม่ติดGAP)",
"IDPConfig_table": "ตารางกำหนดแผนพัฒนา",
"NumberOfBI": "จำนวน BI ที่ติด GAP",
"DevelopmentTools": "เครื่องมือพัฒนา",
"OJTJobAssignment": "OJT/การมอบหมายงาน",
"CoachMentor": "โค้ช/ที่ปรึกษา",
"Training": "อบรม",
"BIsAndCDR": "ตัวชี้วัดและหลักสูตร",
"CompetencyMapping": "จัดกลุ่มสมรรถนะ",
"AssignApprover": "กำหนดผู้ประเมิน",
"CompetencyManage": "การจัดการสมรรถนะ",
"BIsAndCDRManage": "การจัดการตัวชี้วัดและหลักสูตร",
"CompetencyType_type": "ประเภท",
"CompetencyDefinition": "นิยามสมรรถนะ",
"ProficiencyLevel": "ระดับความคาดหวัง",
"BehavioralIndicators": "ตัวชี้วัดพฤติกรรม",
"CDR": "หลักสูตร",
"ItemsPerPage": "รายการต่อหน้า",
"To": "ถึง",
"From": "จาก",
"JobDescription": "ชื่อลักษณะงาน (ไทย)",
"EditCompetencyMapping": "แก้ไขกลุ่มสมรรถนะ",
"JobDescriptionThai": "ชื่อลักษณะงาน (ไทย)",
"JobDescriptionEng": "ชื่อลักษณะงาน (อังกฤษ)",
"NoInformation": "ไม่พบข้อมูล",
"CompetencyTopics_list": "รายการสมรรถนะ",
"Competency_Code": "รหัสสมรรถนะ",
"Approver1": "ลำดับที่ 1",
"Approver2": "ลำดับที่ 2",
"Approver3": "ลำดับที่ 3",
"Approver4": "ลำดับที่ 4",
"Approver5": "ลำดับที่ 5",
"EmployeeName": "ชื่อพนักงาน",
"Assessor1": "ผู้ประเมินลำดับที่ 1",
"Assessor2": "ผู้ประเมินลำดับที่ 2",
"Assessor3": "ผู้ประเมินลำดับที่ 3",
"Assessor4": "ผู้ประเมินลำดับที่ 4",
"Assessor5": "ผู้ประเมินลำดับที่ 5",
"AssessmentPeriod": "รอบการประเมิน",
"PeriodCode": "รหัส",
"Description": "รายละเอียด",
"Year_round": "รอบปีการประเมิน",
"StartDate": "วันที่เริ่มต้น",
"EndDate": "วันที่สิ้นสุด",
"EndPeriod": "ปิดรอบการประเมิน",
"Setting": "การตั้งค่า",
"PmsConfig": "กำหนดค่าระบบการประเมิน",
"Competency": "แสดงผลประเมินสมรรถนะ",
"DisplayResults": "แสดงผล",
"NotDisplay": "ไม่แสดงผล",
"TimeAttendance": "แสดงผลประเมินเวลาทำงาน",
"PmsTypes": "ประเภทการประเมิน",
"PmsTopics": "หัวข้อการประเมิน",
"TopicName": "ชื่อหัวข้อ",
"TimeAttendance_head": "การประเมินเวลาทำงาน",
"TimeAttendanceManage": "การจัดการหัวข้อการประเมินเวลาทำงาน",
"WorkingTimeDataManage": "การจัดการข้อมูลสถิติเวลาทำงาน",
"Unit": "หน่วยนับ",
"ImportWorkingTimeData": "นำเข้าข้อมูลสถิติเวลาทำงาน",
"PMSFactorsSetting": "กำหนดปัจจัยการประเมินผล",
"Total": "รวม",
"PMSManage": "การจัดการประเมิน",
"GroupingKPI": "จัดกลุ่มการประเมิน",
"Report": "รายงาน",
"ExcelReport": "รายงาน",
"EvaluationPeriod": "แก้ไขรอบการประเมิน",
"JobDescription(JD)": "ลักษณะงาน (JD)",
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "หมายเหตุ ถ้าไม่เลือกระดับ JD ระบบจะทำการเลือกทั้งหมด"
}
\ 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