Commit 581dec38 by Nakarin Luankla

Merge branch 'DEV' of https://mygit.myhr.co.th/angular/myAppraisal into DEV

parents e5fc8428 4cdb38a7
......@@ -13,7 +13,7 @@ export class LoginPageComponent {
public showPassword = false;
disabled = '';
active: any;
errorUser = false
constructor(@Inject(DOCUMENT)
private document: Document,
private elementRef: ElementRef,
......@@ -103,17 +103,22 @@ export class LoginPageComponent {
this.authservice.loginWithUserPass(this.loginForm.controls['username'].value,
this.loginForm.controls['password'].value).subscribe({
next: response => {
if(response){
if (response) {
this.errorUser = false
sessionStorage.setItem("accessToken", response.accessToken)
sessionStorage.setItem("refreshToken", response.refreshToken)
this.router.navigate(['/self-evaluation']);
} else {
this.errorUser = true
}
}, error: error => {
this.error = 'Please check email and passowrd';
this.errorUser = true
}
})
} else {
this.error = 'Please check email and passowrd';
this.errorUser = true
}
}
......
......@@ -74,9 +74,13 @@
</div>
</div> -->
<!-- End Checkbox -->
<div *ngIf="errorUser" class="bg-danger/10 border border-danger/10 alert text-danger m-0"
role="alert">
กรุณาตรวจสอบชื่อสมาชิกและรหัสผ่าน
</div>
<button type="submit" (click)="Submit()"
class="py-2 px-3 inline-flex justify-center items-center gap-2 rounded-sm border border-transparent font-semibold bg-primary text-white hover:bg-primary focus:outline-none focus:ring-0 focus:ring-primary focus:ring-offset-0 transition-all text-sm dark:focus:ring-offset-white/10">เข้าสู่ระบบ</button>
<div class="text-center">
<!-- <div class="text-center">
<p class="mt-3 text-sm text-gray-600 dark:text-white/70">
คุณมีบัญชีเเล้วหรือยัง?
<a class="text-primary decoration-2 hover:underline font-medium"
......@@ -84,7 +88,7 @@
กรุณาลงทะเบียนที่นี่ หากคุณยังไม่มีบัญชีเข้าใช้
</a>
</p>
</div>
</div> -->
</div>
</form>
</div>
......
......@@ -145,12 +145,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -144,12 +144,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -203,12 +203,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -41,12 +41,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -177,12 +177,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -280,12 +280,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -39,12 +39,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -171,18 +171,19 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
<label for="input-label" class="ti-form-label mt-2rem">ฝ่าย<span class="text-danger">*</span></label>
<input type="text" id="input-label" class="ti-form-input w-1/2" [(ngModel)]="bu1.bu1id">
<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">รายละเอียดฝ่าย (ไทย)<span
class="text-danger">*</span></label>
<input type="text" id="detail_th" class="ti-form-input h-16" [(ngModel)]="bu1.tdesc">
<label for="detail_eng" class="ti-form-label mt-2rem">รายละเอียดฝ่าย (อังกฤษ)</label>
<input type="text" id="detail_eng" class="ti-form-input h-16" [(ngModel)]="bu1.edesc">
......@@ -238,19 +239,20 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body ">
<label for="input-label" class="ti-form-label mt-2rem">ฝ่าย<span class="text-danger">*</span></label>
<input type="text" id="input-label" class="ti-form-input w-1/2 bg-input-readonly"
[(ngModel)]="bu1.bu1id" readonly>
<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">รายละเอียดฝ่าย (ไทย)<span
class="text-danger">*</span></label>
<input type="text" id="detail_th" class="ti-form-input h-16" [(ngModel)]="bu1.tdesc">
<label for="detail_eng" class="ti-form-label mt-2rem">รายละเอียดฝ่าย (อังกฤษ)</label>
<input type="text" id="detail_eng" class="ti-form-input h-16" [(ngModel)]="bu1.edesc">
......
......@@ -40,12 +40,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -176,12 +176,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -283,12 +283,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -41,12 +41,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -176,12 +176,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -283,12 +283,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -41,12 +41,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -178,12 +178,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -285,12 +285,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -41,12 +41,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -176,12 +176,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -283,12 +283,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -41,12 +41,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -176,12 +176,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......@@ -284,12 +284,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -58,12 +58,12 @@
Delete
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -202,12 +202,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -239,12 +239,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -13,7 +13,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" for="check-boxall" >Select All</label>
<label class="text-sm text-gray-500 ml-2" for="check-boxall">Select All</label>
</div>
</div>
</div>
......@@ -45,7 +45,7 @@
</div>
<div class="px-1">
<button type="button" class="ti-btn ti-btn-soft-secondary h-45px m-0 shadow-md"
data-hs-overlay="#sub-employee-registration-modal" (click)="selectEmployee();modalType='add'">
data-hs-overlay="#sub-employee-registration-modal" (click)="modalType='add';selectEmployee()">
<i class="ri-add-line"></i>
Add
</button>
......@@ -64,12 +64,12 @@
Print
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -84,9 +84,9 @@
*ngFor="let item of ['','รหัสพนักงาน','ชื่อ','นามสกุล','ตำแหน่ง','หน่วยงาน','การจัดการ']; let f = first; let l = last; let i = index">
<th scope="col" class=" px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700">{{ item }}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0" *ngIf="!l&&!f">
<!-- <div class="absolute top-1/2 transform -translate-y-1/2 right-0" *ngIf="!l&&!f">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
</div> -->
</th>
</ng-container>
</tr>
......@@ -124,10 +124,10 @@
<td>{{item.data.jobCode.bu1.tdesc}}</td>
<td class="flex justify-center">
<i class="ti ti-edit cursor-pointer i-gray fs-l px-1" data-hs-overlay="#sub-employee-registration-modal"
(click)="selectEmployee(item.data);modalType='update'"></i>
(click)="modalType='update';selectEmployee(item.data)"></i>
<i class="ti ti-trash cursor-pointer i-gray fs-l px-1"
data-hs-overlay="#sub-employee-registration-alert-delete-modal"
(click)="selectEmployee(item.data);modalType='delete'"></i>
(click)="modalType='delete';selectEmployee(item.data)"></i>
</td>
</tr>
</tbody>
......@@ -176,7 +176,7 @@
<div id="sub-employee-registration-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)]">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out h-[calc(100%-3.5rem)] !max-w-1/2">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
......@@ -194,9 +194,24 @@
<div class="w-full flex justify-end">
<div class="absolute flex">
<div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<!-- <button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button> -->
<button type="button" class="ti-btn ti-btn-soft-indigo h-45px m-0 shadow-md" (click)="selectEmployee()">
<svg class="svg-indigo" width="16" height="16" viewBox="0 0 64.00 64.00"
xmlns="http://www.w3.org/2000/svg" fill="none" stroke="#595BEA" stroke-width="3.84"
transform="rotate(45)matrix(-1, 0, 0, 1, 0, 0)">
<g id="SVGRepo_bgCarrier" stroke-width="0"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
<path d="M15 49A24 24 0 0 1 32 8"></path>
<path d="M49 15a24 24 0 0 1-17 41"></path>
<polyline points="15.03 40 15.03 48.97 8 48.97"></polyline>
<polyline points="48.97 24 48.97 15.03 56 15.03"></polyline>
</g>
</svg>
Clear
</button>
</div>
</div>
......@@ -204,23 +219,33 @@
<div class="ti-modal-body mt-5">
<div class="space-y-3">
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">รหัสพนักงาน<span class="text-danger">*</span></label>
<input type="text" class="sm:col-span-6 ti-form-input" [ngClass]="{'bg-input-readonly':modalType=='update'}"
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">รหัสพนักงาน<span
class="text-danger">*</span></label>
<input type="text" class="col-span-6 ti-form-input" [ngClass]="{'bg-input-readonly':modalType=='update'}"
[readonly]="modalType=='update'" [(ngModel)]="employee.select.employeeId">
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-4">ชื่อ-นามสกุล<span class="text-danger">*</span></label>
<div class="col-span-4 mt-2">
<div class=" flex rounded-md">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ชื่อ-นามสกุล<span
class="text-danger">*</span></label>
<div class="col-span-4 ">
<input type="text" class="ti-form-input" [(ngModel)]="employee.select.fname">
</div>
</div>
<div class="flex col-span-4 mt-2">
<div class="col-span-4">
<input type="text" class="ti-form-input" [(ngModel)]="employee.select.lname">
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">กลุ่มพนักงาน<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">สถานภาพพนักงาน<span
class="text-danger">*</span></label>
<div class="col-span-4 ">
<select class="ti-form-select" [(ngModel)]="employee.select.status">
<option *ngFor="let item of empStatus.dataList" [value]="item">{{item.tdesc}}</option>
</select>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">กลุ่มพนักงาน<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -233,7 +258,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-empgroup-table-modal">
data-hs-overlay="#sub-employee-registration-empgroup-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -242,11 +267,12 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">วันเริ่มงาน<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center align-center">วันเริ่มงาน<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<mat-form-field>
<input matInput [matDatepicker]="firstHireDate" type="text"
class="ti-form-input rounded-l-none focus:z-10 flatpickr-input !text-gray-500 bg-white" id="datetime"
<input matInput [matDatepicker]="firstHireDate" type="text" readonly
class="ti-form-input rounded-l-none focus:z-10 flatpickr-input !text-gray-500 !bg-white" id="datetime"
[(ngModel)]="employee.select.dateIso"
(ngModelChange)="changeDate(this.employee.select, 'firstHireDate', employee.select.dateIso);">
<mat-datepicker-toggle matSuffix [for]="firstHireDate"></mat-datepicker-toggle>
......@@ -255,7 +281,45 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">BU<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center align-center">วันที่สิ้นสุด<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<mat-form-field>
<input matInput [matDatepicker]="resigndate" type="text" readonly
class="ti-form-input rounded-l-none focus:z-10 flatpickr-input !text-gray-500 !bg-white" id="datetime"
[(ngModel)]="employee.select.dateEndIso"
(ngModelChange)="changeDate(this.employee.select, 'resigndate', employee.select.dateEndIso);">
<mat-datepicker-toggle matSuffix [for]="resigndate"></mat-datepicker-toggle>
<mat-datepicker #resigndate></mat-datepicker>
</mat-form-field>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">หัวหน้างาน</label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;"
[value]="employee.select.boss.fname+' '+employee.select.boss.lname">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.boss.employee='';employee.select.boss.fname='';employee.select.boss.lname=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-emp-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ทะเบียนฝ่าย<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -268,7 +332,143 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu-table-modal">
data-hs-overlay="#sub-employee-registration-bu1-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ทะเบียนแผนก<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu2.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu2.bu2id='';employee.select.bu2.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu2-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ทะเบียนส่วน<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu3.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu3.bu3id='';employee.select.bu3.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu3-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ส่วนย่อย1<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu4.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu4.bu4id='';employee.select.bu4.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu4-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ส่วนย่อย2<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu5.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu5.bu5id='';employee.select.bu5.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu5-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ส่วนย่อย3</label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu6.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu6.bu6id='';employee.select.bu6.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu6-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ส่วนย่อย4</label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
<input type="text" class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10"
readonly style="padding-right: 3.5rem;" [(ngModel)]="employee.select.bu7.tdesc">
<div
class="absolute inset-y-0 ltr:right-0 rtl:left-0 flex items-center z-20 ltr:pr-4 rtl:pl-4 space-x-2">
<button type="button" class="flex items-center text-red-500"
(click)="employee.select.bu7.bu7id='';employee.select.bu7.tdesc=''">
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-bu7-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -277,7 +477,8 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">ตำแหน่ง<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ตำแหน่ง<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -290,7 +491,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-position-table-modal">
data-hs-overlay="#sub-employee-registration-position-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -299,7 +500,8 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">ลักษณะงาน<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ลักษณะงาน<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -312,7 +514,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-jobcode-table-modal">
data-hs-overlay="#sub-employee-registration-jobcode-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -321,7 +523,8 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">สาขา<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">สาขา<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -334,7 +537,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-branch-table-modal">
data-hs-overlay="#sub-employee-registration-branch-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -343,7 +546,8 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">ประเภทพนักงาน<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ประเภทพนักงาน<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -356,7 +560,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-emptype-table-modal">
data-hs-overlay="#sub-employee-registration-emptype-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -365,7 +569,8 @@
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2">ระดับพนักงาน (JL)<span class="text-danger">*</span></label>
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">ระดับพนักงาน (JL)<span
class="text-danger">*</span></label>
<div class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-md">
......@@ -378,7 +583,7 @@
<i class="ti ti-circle-x cursor-pointer"></i>
</button>
<button type="button" class="flex items-center text-gray-500 dark:text-white/70"
data-hs-overlay="#sub-employee-registration-pl-table-modal">
data-hs-overlay="#sub-employee-registration-pl-table-modal" (click)="modal.search=''">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
......@@ -386,6 +591,10 @@
</div>
</div>
</div>
<div class="grid grid-cols-12 gap-x-6">
<label class="col-span-3 ti-form-label text-primary mt-2 align-center">E-mail</label>
<input type="text" class="sm:col-span-6 ti-form-input" [(ngModel)]="employee.select.email">
</div>
</div>
<div class="flex justify-center my-3">
<button type="button"
......@@ -635,12 +844,12 @@
</div>
</div>
<div id="sub-employee-registration-bu-table-modal" class="hs-overlay hidden ti-modal">
<div id="sub-employee-registration-bu1-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลBU
ข้อมูลทะเบียนฝ่าย
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -762,12 +971,12 @@
</div>
</div>
<div id="sub-employee-registration-position-table-modal" class="hs-overlay hidden ti-modal">
<div id="sub-employee-registration-bu2-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลตำแหน่ง
ข้อมูลทะเบียนแผนก
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -783,7 +992,7 @@
<div class="relative shadow-md">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(positionListFilter())">
(ngModelChange)="searchModalChange(bu2ListFilter())">
<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>
......@@ -796,7 +1005,7 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสตำแหน่ง','รายละเอียดฝ่าย(ไทย)','รายละเอียดฝ่าย(อังกฤษ)']; let f = first; let l = last">
*ngFor="let item of ['ลำดับ','รหัสแผนก','รายละเอียดแผนก(ไทย)','รายละเอียดแผนก(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</span>
......@@ -807,7 +1016,7 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="position.loading">
<tbody *ngIf="bu2.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
......@@ -817,22 +1026,22 @@
</td>
</tr>
</tbody>
<tbody *ngIf="!position.loading&&!positionListFilter().length">
<tbody *ngIf="!bu2.loading&&!bu2ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!position.loading&&positionListFilter().length">
<tbody *ngIf="!bu2.loading&&bu2ListFilter().length">
<tr
*ngFor="let item of positionListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'position',item)"
*ngFor="let item of bu2ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu2',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.positionId}}</td>
<td>{{item.bu2id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
......@@ -872,10 +1081,9 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{positionListFilter().length<10
?positionListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - positionListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{positionListFilter().length}} items</span>
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu2ListFilter().length<10 ?bu2ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
bu2ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu2ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
......@@ -890,12 +1098,12 @@
</div>
</div>
<div id="sub-employee-registration-jobcode-table-modal" class="hs-overlay hidden ti-modal">
<div id="sub-employee-registration-bu3-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลลักษณะงา
ข้อมูลทะเบียนส่ว
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -911,7 +1119,7 @@
<div class="relative shadow-md">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(jobcodeListFilter())">
(ngModelChange)="searchModalChange(bu3ListFilter())">
<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>
......@@ -924,7 +1132,7 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสลักษณะงาน','รายละเอียดฝ่าย(ไทย)','รายละเอียดฝ่าย(อังกฤษ)']; let f = first; let l = last">
*ngFor="let item of ['ลำดับ','รหัสส่วน','รายละเอียดส่วน(ไทย)','รายละเอียดส่วน(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</span>
......@@ -935,7 +1143,7 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="jobcode.loading">
<tbody *ngIf="bu3.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
......@@ -945,22 +1153,22 @@
</td>
</tr>
</tbody>
<tbody *ngIf="!jobcode.loading&&!jobcodeListFilter().length">
<tbody *ngIf="!bu3.loading&&!bu3ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!jobcode.loading&&jobcodeListFilter().length">
<tbody *ngIf="!bu3.loading&&bu3ListFilter().length">
<tr
*ngFor="let item of jobcodeListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'jobCode',item)"
*ngFor="let item of bu3ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu3',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.jobcodeId}}</td>
<td>{{item.bu3id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
......@@ -1000,10 +1208,9 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{jobcodeListFilter().length<10
?jobcodeListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - jobcodeListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{jobcodeListFilter().length}} items</span>
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu3ListFilter().length<10 ?bu3ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
bu3ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu3ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
......@@ -1018,12 +1225,12 @@
</div>
</div>
<div id="sub-employee-registration-branch-table-modal" class="hs-overlay hidden ti-modal">
<div id="sub-employee-registration-bu4-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลสาขา
ข้อมูลส่วนย่อย1
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -1039,7 +1246,7 @@
<div class="relative shadow-md">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(branchListFilter())">
(ngModelChange)="searchModalChange(bu4ListFilter())">
<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>
......@@ -1052,7 +1259,7 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสสาขา','รายละเอียดฝ่าย(ไทย)','รายละเอียดฝ่าย(อังกฤษ)']; let f = first; let l = last">
*ngFor="let item of ['ลำดับ','รหัสส่วนย่อย1','รายละเอียดส่วนย่อย1(ไทย)','รายละเอียดส่วนย่อย1(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</span>
......@@ -1063,7 +1270,7 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="branch.loading">
<tbody *ngIf="bu4.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
......@@ -1073,22 +1280,22 @@
</td>
</tr>
</tbody>
<tbody *ngIf="!branch.loading&&!branchListFilter().length">
<tbody *ngIf="!bu4.loading&&!bu4ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!branch.loading&&branchListFilter().length">
<tbody *ngIf="!bu4.loading&&bu4ListFilter().length">
<tr
*ngFor="let item of branchListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'branch',item)"
*ngFor="let item of bu4ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu4',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.branchId}}</td>
<td>{{item.bu4id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
......@@ -1128,10 +1335,9 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{branchListFilter().length<10 ?branchListFilter().length:
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu4ListFilter().length<10 ?bu4ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
branchListFilter().length) ) :(modal.currentPage * 10) ) }} of {{branchListFilter().length}}
items</span>
bu4ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu4ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
......@@ -1146,12 +1352,12 @@
</div>
</div>
<div id="sub-employee-registration-emptype-table-modal" class="hs-overlay hidden ti-modal">
<div id="sub-employee-registration-bu5-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลประเภทพนักงาน
ข้อมูลส่วนย่อย2
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
......@@ -1167,7 +1373,7 @@
<div class="relative shadow-md">
<input type="text" class="ti-form-input ltr:pl-11 rtl:pr-11 focus:z-10 "
placeholder="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(empTypeListFilter())">
(ngModelChange)="searchModalChange(bu5ListFilter())">
<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>
......@@ -1180,7 +1386,7 @@
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสประเภทพนักงาน','รายละเอียดฝ่าย(ไทย)','รายละเอียดฝ่าย(อังกฤษ)']; let f = first; let l = last">
*ngFor="let item of ['ลำดับ','รหัสส่วนย่อย2','รายละเอียดส่วนย่อย2(ไทย)','รายละเอียดส่วนย่อย2(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</span>
......@@ -1191,7 +1397,7 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="empType.loading">
<tbody *ngIf="bu5.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
......@@ -1201,22 +1407,22 @@
</td>
</tr>
</tbody>
<tbody *ngIf="!empType.loading&&!empTypeListFilter().length">
<tbody *ngIf="!bu5.loading&&!bu5ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!empType.loading&&empTypeListFilter().length">
<tbody *ngIf="!bu5.loading&&bu5ListFilter().length">
<tr
*ngFor="let item of empTypeListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'empType',item)"
*ngFor="let item of bu5ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu5',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.codeId}}</td>
<td>{{item.bu5id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
......@@ -1256,10 +1462,9 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{empTypeListFilter().length<10
?empTypeListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - empTypeListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{empTypeListFilter().length}} items</span>
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu5ListFilter().length<10 ?bu5ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
bu5ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu5ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
......@@ -1274,6 +1479,906 @@
</div>
</div>
<div id="sub-employee-registration-bu6-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลส่วนย่อย3
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(bu6ListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสส่วนย่อย3','รายละเอียดส่วนย่อย3(ไทย)','รายละเอียดส่วนย่อย3(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="bu6.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!bu6.loading&&!bu6ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!bu6.loading&&bu6ListFilter().length">
<tr
*ngFor="let item of bu6ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu6',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.bu6id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu6ListFilter().length<10 ?bu6ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
bu6ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu6ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-bu7-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลส่วนย่อย4
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(bu7ListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<ng-container
*ngFor="let item of ['ลำดับ','รหัสส่วนย่อย4','รายละเอียดส่วนย่อย4(ไทย)','รายละเอียดส่วนย่อย4(อังกฤษ)']; let f = first; let l = last">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="bu7.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!bu7.loading&&!bu7ListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!bu7.loading&&bu7ListFilter().length">
<tr
*ngFor="let item of bu7ListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'bu7',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.bu7id}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{bu7ListFilter().length<10 ?bu7ListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
bu7ListFilter().length) ) :(modal.currentPage * 10) ) }} of {{bu7ListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-position-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลตำแหน่ง
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(positionListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<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"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="position.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!position.loading&&!positionListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!position.loading&&positionListFilter().length">
<tr
*ngFor="let item of positionListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'position',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.positionId}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{positionListFilter().length<10
?positionListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - positionListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{positionListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-jobcode-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลลักษณะงาน
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(jobcodeListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<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"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="jobcode.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!jobcode.loading&&!jobcodeListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!jobcode.loading&&jobcodeListFilter().length">
<tr
*ngFor="let item of jobcodeListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'jobCode',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.jobcodeId}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{jobcodeListFilter().length<10
?jobcodeListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - jobcodeListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{jobcodeListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-branch-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลสาขา
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(branchListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<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"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="branch.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!branch.loading&&!branchListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!branch.loading&&branchListFilter().length">
<tr
*ngFor="let item of branchListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'branch',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.branchId}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{branchListFilter().length<10 ?branchListFilter().length:
(modal.currentPage==modal.page.length ? ((modal.currentPage * 10) - ((modal.currentPage * 10) -
branchListFilter().length) ) :(modal.currentPage * 10) ) }} of {{branchListFilter().length}}
items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-emptype-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลประเภทพนักงาน
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name" [(ngModel)]="modal.search"
(ngModelChange)="searchModalChange(empTypeListFilter())">
<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>
</div>
</div>
</div>
<div class="overflow-auto border">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<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"
[class.!text-center]="f">
<span class="text-sm">{{ item }}</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>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="empType.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!empType.loading&&!empTypeListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!empType.loading&&empTypeListFilter().length">
<tr
*ngFor="let item of empTypeListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'empType',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="flex justify-center">
{{((modal.currentPage-1) * 10)+(i+1)}}
</td>
<td>{{item.codeId}}</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
</tr>
</tbody>
</table>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{empTypeListFilter().length<10
?empTypeListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - empTypeListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{empTypeListFilter().length}} items</span>
</ul>
</nav>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-emp-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
<div class="ti-modal-header">
<h3 class="text-xxl font-bold text-primary">
ข้อมูลพนักงาน
</h3>
<div class="flex justify-end">
<button type="button" class="hs-dropdown-toggle ti-modal-clode-btn text-danger"
data-hs-overlay="#sub-employee-registration-modal">
<span class="sr-only">Close</span>
<i class="ti ti-circle-x fs-xxl"></i>
</button>
</div>
</div>
<div class="ti-modal-body">
<div class="flex justify-end pb-1rem">
<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="Search by No. or Name"
[(ngModel)]="modal.search" (ngModelChange)="searchModalChange(employeeModalListFilter())">
<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>
</div>
</div>
</div>
<div class="page px-rem">
<div class="overflow-auto table-bordered rounded-t-md">
<div class="overflow-auto shadow-md rounded-t-md">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
<tr>
<ng-container
*ngFor="let item of ['รหัสพนักงาน','ชื่อ','นามสกุล','ตำแหน่ง','หน่วยงาน']; let f = first; let l = last; let i = index">
<th scope="col" class=" px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700">{{ item }}</span>
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
</th>
</ng-container>
</tr>
</thead>
<tbody *ngIf="employee.loading">
<tr>
<td class="text-center" colspan="100%">
<div *ngFor="let item of [1,2,3]" class="ti-spinner w-8 h-8 text-secondary mx-1" role="status"
aria-label="loading">
<span class="sr-only">Loading...</span>
</div>
</td>
</tr>
</tbody>
<tbody *ngIf="!employee.loading&&!employeeModalListFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="!employee.loading&&employeeModalListFilter().length">
<tr
*ngFor="let item of employeeModalListFilter() | slice:((modal.currentPage-1) * 10) : (((modal.currentPage-1) * 10) + 10);let i = index"
class="cursor-pointer" (click)="selectDataModal(this.employee.select,'boss',item)"
data-hs-overlay="#sub-employee-registration-modal">
<td class="text-center">
{{item.employeeId}}
</td>
<td>{{item.fname}}</td>
<td>{{item.lname}}</td>
<td>{{item.position.tdesc}}</td>
<td>{{item.jobCode.bu1.tdesc}}</td>
</tr>
</tbody>
</table>
</div>
</div>
<nav class="pagination-style-3 my-5" *ngIf="modal.page.length">
<ul class="ti-pagination">
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage-1 || 1)">
<i class="ri-arrow-left-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
<li *ngFor="let item of modal.page;let f = first;let l = last">
<ng-container *ngIf="item==3&&modal.currentPage!=1&&modal.currentPage!=2&&modal.currentPage!=3">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
<ng-container
*ngIf="(f||l)||(item==modal.currentPage-1||item==modal.currentPage||item==modal.currentPage+1)">
<a class="page-link" href="javascript:void(0);" [class.active]="item==modal.currentPage"
(click)="modal.currentPage=item">{{item}}
</a>
</ng-container>
<ng-container
*ngIf="item==modal.page.length-2&&modal.currentPage!=modal.page.length&&modal.currentPage!=modal.page.length-1&&modal.currentPage!=modal.page.length-2">
<a aria-label="anchor" class="page-link" href="javascript:void(0);"><i class="ri-more-line"></i>
</a>
</ng-container>
</li>
<li>
<a aria-label="anchor" class="page-link" href="javascript:void(0);"
(click)="modal.currentPage = (modal.currentPage > modal.page.length-1 ? modal.currentPage: modal.currentPage+1 )">
<i class="ri-arrow-right-s-line align-middle rtl:rotate-180"></i>
</a>
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((modal.currentPage-1) * 10)+1}} to {{employeeModalListFilter().length<10
?employeeModalListFilter().length: (modal.currentPage==modal.page.length ? ((modal.currentPage * 10) -
((modal.currentPage * 10) - employeeModalListFilter().length) ) :(modal.currentPage * 10) ) }} of
{{employeeModalListFilter().length}} items</span>
</ul>
</nav>
</div>
<div class="flex justify-end mt-2rem mb-1rem space-x-4">
<button type="button"
class="hs-dropdown-toggle ti-btn ti-border font-medium bg-white text-gray-700 shadow-sm align-middle hover:bg-gray-50 focus:ring-offset-white focus:ring-primary dark:bg-bgdark dark:hover:bg-black/20 dark:border-white/10 dark:text-white/70 dark:hover:text-white dark:focus:ring-offset-white/10"
data-hs-overlay="#sub-employee-registration-modal">
ย้อนกลับ
</button>
</div>
</div>
</div>
</div>
</div>
<div id="sub-employee-registration-pl-table-modal" class="hs-overlay hidden ti-modal">
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out lg:!max-w-4xl lg:w-full m-3 lg:!mx-auto">
<div class="max-h-full overflow-hidden ti-modal-content">
......
......@@ -17,6 +17,20 @@ import { PLService } from 'src/app/shared/services/pl.service';
import { PositionService } from 'src/app/shared/services/position.service';
import { BranchService } from 'src/app/shared/services/่branch.service';
import { JobCodeService } from 'src/app/shared/services/job-code.service';
import { Bu2Model, MyBu2Model } from 'src/app/shared/model/bu2.model';
import { Bu2Service } from 'src/app/shared/services/bu2.service';
import { Bu3Service } from 'src/app/shared/services/bu3.service';
import { Bu4Service } from 'src/app/shared/services/bu4.service';
import { Bu5Service } from 'src/app/shared/services/bu5.service';
import { Bu6Service } from 'src/app/shared/services/bu6.service';
import { Bu7Service } from 'src/app/shared/services/bu7.service';
import { Bu3Model, MyBu3Model } from 'src/app/shared/model/bu3.model';
import { Bu4Model, MyBu4Model } from 'src/app/shared/model/bu4.model';
import { Bu5Model, MyBu5Model } from 'src/app/shared/model/bu5.model';
import { Bu6Model, MyBu6Model } from 'src/app/shared/model/bu6.model';
import { Bu7Model, MyBu7Model } from 'src/app/shared/model/bu7.model';
import { EmpStatusService } from 'src/app/shared/services/emp-status.service';
import { StatusModel, MyStatusModel } from 'src/app/shared/model/status.model';
export interface DataEmployee {
loading: boolean
select: EmployeeModel | any
......@@ -58,21 +72,36 @@ export class SubEmployeeRegistrationComponent {
selectedFileName: string = 'กรุณาเลือกไฟล์';
empGroup: { loading: boolean, dataList: EmpGroupModel[] } = { loading: false, dataList: [] }
employeeModal: { loading: boolean, dataList: EmployeeModel[] } = { loading: false, dataList: [] }
bu1: { loading: boolean, dataList: Bu1Model[] } = { loading: false, dataList: [] }
bu2: { loading: boolean, dataList: Bu2Model[] } = { loading: false, dataList: [] }
bu3: { loading: boolean, dataList: Bu3Model[] } = { loading: false, dataList: [] }
bu4: { loading: boolean, dataList: Bu4Model[] } = { loading: false, dataList: [] }
bu5: { loading: boolean, dataList: Bu5Model[] } = { loading: false, dataList: [] }
bu6: { loading: boolean, dataList: Bu6Model[] } = { loading: false, dataList: [] }
bu7: { loading: boolean, dataList: Bu7Model[] } = { loading: false, dataList: [] }
position: { loading: boolean, dataList: PositionModel[] } = { loading: false, dataList: [] }
jobcode: { loading: boolean, dataList: JobCodeModel[] } = { loading: false, dataList: [] }
branch: { loading: boolean, dataList: BranchModel[] } = { loading: false, dataList: [] }
empType: { loading: boolean, dataList: EmpTypeModel[] } = { loading: false, dataList: [] }
pl: { loading: boolean, dataList: PLModel[] } = { loading: false, dataList: [] }
empStatus: { loading: boolean, dataList: StatusModel[] } = { loading: false, dataList: [] }
constructor(private toastr: ToastrService,
private employeeService: EmployeeService,
private cdr: ChangeDetectorRef,
private empGroupService: EmpGroupService,
private bu1Service: Bu1Service,
private bu2Service: Bu2Service,
private bu3Service: Bu3Service,
private bu4Service: Bu4Service,
private bu5Service: Bu5Service,
private bu6Service: Bu6Service,
private bu7Service: Bu7Service,
private positionService: PositionService,
private jobcodeService: JobCodeService,
private branchService: BranchService,
private empTypeService: EmpTypeService,
private empStatusService: EmpStatusService,
private fileService: FileService,
private pLService: PLService) { }
......@@ -80,11 +109,18 @@ export class SubEmployeeRegistrationComponent {
this.getEmployeeList()
this.getEmpGroupList()
this.getBu1List()
this.getBu2List()
this.getBu3List()
this.getBu4List()
this.getBu5List()
this.getBu6List()
this.getBu7List()
this.getPositionList()
this.getJobcodeList()
this.getBranchList()
this.getEmpTypeList()
this.getPlList()
this.getEmpStatusList()
}
onFileSelected(event: any) {
this.selectedFile = event.target.files.length > 0 ? event.target.files[0] : null;
......@@ -133,6 +169,19 @@ export class SubEmployeeRegistrationComponent {
})
}
getEmpStatusList() {
this.empStatus.loading = false
this.empStatusService.getList().subscribe({
next: response => {
this.empStatus.dataList = response.map((x: any) => new MyStatusModel(x))
this.empStatus.loading = false
this.cdr.detectChanges()
}, error: error => {
this.empStatus.loading = false
this.cdr.detectChanges()
}
})
}
getPlList() {
this.pl.loading = false
this.pLService.getList().subscribe({
......@@ -148,9 +197,9 @@ export class SubEmployeeRegistrationComponent {
})
}
plListFilter() {
return this.pl.dataList.filter(x => x.plId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.pl.dataList.filter(x => x.plId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getEmpTypeList() {
......@@ -168,9 +217,9 @@ export class SubEmployeeRegistrationComponent {
})
}
empTypeListFilter() {
return this.empType.dataList.filter(x => x.codeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.empType.dataList.filter(x => x.codeId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBranchList() {
......@@ -188,9 +237,9 @@ export class SubEmployeeRegistrationComponent {
})
}
branchListFilter() {
return this.branch.dataList.filter(x => x.branchId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.branch.dataList.filter(x => x.branchId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getJobcodeList() {
......@@ -208,9 +257,9 @@ export class SubEmployeeRegistrationComponent {
})
}
jobcodeListFilter() {
return this.jobcode.dataList.filter(x => x.jobcodeId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.jobcode.dataList.filter(x => x.jobcodeId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getPositionList() {
......@@ -228,9 +277,9 @@ export class SubEmployeeRegistrationComponent {
})
}
positionListFilter() {
return this.position.dataList.filter(x => x.positionId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.position.dataList.filter(x => x.positionId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu1List() {
......@@ -248,11 +297,130 @@ export class SubEmployeeRegistrationComponent {
})
}
bu1ListFilter() {
return this.bu1.dataList.filter(x => x.bu1id.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.bu1.dataList.filter(x => x.bu1id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu2List() {
this.bu2.loading = false
this.bu2Service.getList().subscribe({
next: response => {
this.bu2.dataList = response.map((x: any) => new MyBu2Model(x))
this.bu2.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu2.loading = false
this.cdr.detectChanges()
}
})
}
bu2ListFilter() {
return this.bu2.dataList.filter(x => x.bu2id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu3List() {
this.bu3.loading = false
this.bu3Service.getList().subscribe({
next: response => {
this.bu3.dataList = response.map((x: any) => new MyBu3Model(x))
this.bu3.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu3.loading = false
this.cdr.detectChanges()
}
})
}
bu3ListFilter() {
return this.bu3.dataList.filter(x => x.bu3id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu4List() {
this.bu4.loading = false
this.bu4Service.getList().subscribe({
next: response => {
this.bu4.dataList = response.map((x: any) => new MyBu4Model(x))
this.bu4.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu4.loading = false
this.cdr.detectChanges()
}
})
}
bu4ListFilter() {
return this.bu4.dataList.filter(x => x.bu4id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu5List() {
this.bu5.loading = false
this.bu5Service.getList().subscribe({
next: response => {
this.bu5.dataList = response.map((x: any) => new MyBu5Model(x))
this.bu5.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu5.loading = false
this.cdr.detectChanges()
}
})
}
bu5ListFilter() {
return this.bu5.dataList.filter(x => x.bu5id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu6List() {
this.bu6.loading = false
this.bu6Service.getList().subscribe({
next: response => {
this.bu6.dataList = response.map((x: any) => new MyBu6Model(x))
this.bu6.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu6.loading = false
this.cdr.detectChanges()
}
})
}
bu6ListFilter() {
return this.bu6.dataList.filter(x => x.bu6id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getBu7List() {
this.bu7.loading = false
this.bu7Service.getList().subscribe({
next: response => {
this.bu7.dataList = response.map((x: any) => new MyBu7Model(x))
this.bu7.loading = false
this.searchChange()
this.cdr.detectChanges()
}, error: error => {
this.bu7.loading = false
this.cdr.detectChanges()
}
})
}
bu7ListFilter() {
return this.bu7.dataList.filter(x => x.bu7id.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
getEmpGroupList() {
this.empGroup.loading = false
......@@ -269,9 +437,9 @@ export class SubEmployeeRegistrationComponent {
})
}
empGroupListFilter() {
return this.empGroup.dataList.filter(x => x.groupId.toLowerCase().includes(this.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.search.toLowerCase()))
return this.empGroup.dataList.filter(x => x.groupId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.edesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
......@@ -280,6 +448,7 @@ export class SubEmployeeRegistrationComponent {
this.employeeService.getList().subscribe({
next: response => {
this.employee.dataList = response.map((x: any) => ({ check: false, data: new MyEmployeeModel(x) }))
this.employeeModal.dataList = response.map((x: any) => new MyEmployeeModel(x)).filter(x => x.employeeId != this.decodeJWT(sessionStorage.getItem("accessToken") || '').employeeid)
this.employee.loading = false
this.isDataListCheckedAll = false
this.dataListCheckAll()
......@@ -291,6 +460,15 @@ export class SubEmployeeRegistrationComponent {
}
})
}
employeeModalListFilter() {
return this.employeeModal.dataList.filter(x => x.employeeId.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.fname.toLowerCase().includes(this.search.toLowerCase()) ||
x.lname.toLowerCase().includes(this.search.toLowerCase()) ||
x.position.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()) ||
x.jobCode.tdesc.toLowerCase().includes(this.modal.search.toLowerCase()))
}
updateEmployeeList(type: 'add' | 'update' | 'delete' | 'deleteGroup') {
let body = this.employee.select
switch (type) {
......@@ -336,7 +514,15 @@ export class SubEmployeeRegistrationComponent {
x.data.jobCode.tdesc.toLowerCase().includes(this.search.toLowerCase()))
}
selectEmployee(data?: EmployeeModel) {
this.employee.select = { ...new MyEmployeeModel(data || {}), dateIso: this.toISODate(data?.firstHireDate) }
if (this.modalType == 'update' && !data) {
this.employee.select = { ...new MyEmployeeModel({ employeeId: this.employee.select.employeeId }), dateIso: '', dateEndIso: '' }
this.employee.select.status = new MyStatusModel(this.empStatus.dataList[0])
} else {
this.employee.select = { ...new MyEmployeeModel(data || {}), dateIso: this.toISODate(data?.firstHireDate), dateEndIso: this.toISODate(data?.resigndate) }
if (!this.employee.select.status.statusCode) {
this.employee.select.status = new MyStatusModel(this.empStatus.dataList[0])
}
}
}
changeDate(target: { [key: string]: any }, field: string, dateIso: string) {
target[field] = this.toYYYYMMDD(dateIso)
......@@ -398,6 +584,10 @@ export class SubEmployeeRegistrationComponent {
!this.employee.select.empGroup.groupId ||
!this.employee.select.firstHireDate ||
!this.employee.select.bu1.bu1id ||
!this.employee.select.bu2.bu2id ||
!this.employee.select.bu3.bu3id ||
!this.employee.select.bu4.bu4id ||
!this.employee.select.bu5.bu5id ||
!this.employee.select.position.positionId ||
!this.employee.select.jobCode.jobcodeId ||
!this.employee.select.branch.branchId ||
......@@ -409,4 +599,13 @@ export class SubEmployeeRegistrationComponent {
return disable
}
decodeJWT(token: string) {
let base64Url = token.split('.')[1]; // ดึงส่วนที่เป็น Payload
let base64 = base64Url.replace('-', '+').replace('_', '/'); // แก้ไข base64 ให้ถูกต้อง
let jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
}
}
......@@ -205,12 +205,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body" style="margin-top: 40px;">
......
......@@ -203,12 +203,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body ">
......
......@@ -201,12 +201,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body" style="margin-top: 40px;">
......
......@@ -203,12 +203,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body ">
......
......@@ -247,12 +247,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
<div class="overflow-auto table-bordered" style="border-radius: 5px;">
<div class="overflow-auto border">
......
......@@ -21,12 +21,12 @@
import
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
......
......@@ -158,12 +158,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body mt-1">
......@@ -326,12 +326,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
<div class="overflow-auto table-bordered" style="border-radius: 5px;">
<div class="overflow-auto border">
......
......@@ -236,12 +236,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body mt-1">
......
......@@ -15,12 +15,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......@@ -183,12 +183,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -242,12 +242,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -174,12 +174,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -196,12 +196,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body mt-1">
......@@ -309,12 +309,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
<div class="overflow-auto table-bordered" style="border-radius: 5px;">
<div class="overflow-auto border">
......@@ -449,12 +449,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
<div class="overflow-auto table-bordered" style="border-radius: 5px;">
<div class="overflow-auto border">
......
......@@ -196,12 +196,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body" style="padding-top: 0px;">
......
......@@ -236,12 +236,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body" style="padding-top: 0px;">
......
......@@ -157,6 +157,8 @@ import { PmsEvaluationCycleService } from 'src/app/shared/services/pms-evaluatio
import { PmsEvaluationAssessmentService } from 'src/app/shared/services/pms-evaluation-assessment.service';
import { TimeAttendanceComponent } from '../performance-management-evaluation/time-attendance/time-attendance.component';
import { PmsWorkingTimeService } from 'src/app/shared/services/pms-working-time.service';
import { EvaluationIdpService } from 'src/app/shared/services/evaluation-Idp.service';
import { EmpStatusService } from 'src/app/shared/services/emp-status.service';
export const MY_DATE_FORMATS = {
parse: {
......@@ -344,6 +346,8 @@ export class CustomDateAdapter extends NativeDateAdapter {
PmsEvaluationCycleService,
PmsEvaluationAssessmentService,
PmsWorkingTimeService,
EvaluationIdpService,
EmpStatusService,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpRequestInterceptor,
......
......@@ -34,12 +34,12 @@
Delete
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -33,12 +33,12 @@
Delete
</button>
</div> -->
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -40,12 +40,12 @@
Delete
</button>
</div> -->
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -33,12 +33,12 @@
Delete
</button>
</div> -->
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -33,12 +33,12 @@
Delete
</button>
</div> -->
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -33,12 +33,12 @@
Delete
</button>
</div> -->
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
<app-page-header [pathTitle]="pathTitle"></app-page-header>
<div class="bg-card-white">
</div>
<div class="block-main-content" *ngIf="appraisalCompentency.data">
<div class="block-main-content">
<div class="pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center">
<div class="flex">
<button type="button" class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
......@@ -14,6 +14,7 @@
</div>
</div>
</div>
<ng-container *ngIf="appraisalCompentency.data">
<div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-primary">
แบบประเมินสมรรถนะพนักงาน {{currentDate.getFullYear()}}
......@@ -394,4 +395,5 @@
บันทึกข้อมูล
</button>
</div>
</ng-container>
</div>
\ No newline at end of file
......@@ -10,7 +10,7 @@
<div class="pb-2rem px-2rem pt-1.5rem w-full min-height-50px justify-between items-center">
<div class="flex">
<button type="button" class="ti-btn ti-btn-outline ti-btn-outline-light h-20px m-0 shadow-md text-blue-500"
(click)="returnPage()">
(click)="returnPath()">
<i class="ti ti-chevron-left"></i>
ย้อนกลับ
</button>
......@@ -19,6 +19,7 @@
</div>
</div>
</div>
<ng-container *ngIf="formIdp.data">
<div class="pb-2rem px-2rem">
<div class="font-size-18px font-weight-700 text-primary">
แผนพัฒนาบุคคลากรรายบุคคล
......@@ -30,63 +31,73 @@
</div>
</div>
<div class="pb-2rem px-2rem">
<div class="grid grid-cols-6 ">
<div class="col-span-3 grid grid-cols-6">
<div class="col-span-6 border p-2 pb-4">
<div class="grid grid-cols-6">
<div class="col-span-6 grid grid-cols-6">
<div class="col-span-3 border p-2 pb-4">
<span>ผู้ใต้บังคับบัญชา</span>
</div>
<div class="col-span-3 border p-2 pb-4">
<span>ผู้บังคับบัญชา</span>
</div>
</div>
<div class="col-span-6 grid grid-cols-6">
<div class="col-span-3 grid grid-cols-4">
<div class="col-span-1 p-2 border pb-4">
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span>น.ส.พิมพร อูรณาการ</span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.thFullName || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span>Human Resource Development Officer S3</span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.position.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-4">
<div class="col-span-1 p-2 border pb-4">
<span>งาน</span>
<span>ชื่อ-สกุล</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span></span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.thFullName || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ฝ่าย</span>
<span>ตำแหน่ง</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span></span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.position.tdesc || ""}}</span>
</div>
</div>
<div class="col-span-3 grid grid-cols-6">
<div class="col-span-6 border p-2 pb-4">
<span>ผู้ใต้บังคับบัญชา</span>
</div>
<div class="col-span-6 grid grid-cols-6">
<div class="col-span-3 grid grid-cols-4">
<div class="col-span-1 p-2 border pb-4">
<span>ชื่อ-สกุล</span>
<span>งาน</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span>น.ส. นดี แป้นศรี</span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.job.tdesc || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ตำแหน่ง</span>
<span>ฝ่าย</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.apsassessy.bu1.tdesc || ""}}</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span>HRM Senior Section Manager</span>
</div>
<div class="col-span-3 grid grid-cols-4">
<div class="col-span-1 p-2 border pb-4">
<span>งาน</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span></span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.job.tdesc || ""}}</span>
</div>
<div class="col-span-1 p-2 border pb-4">
<span>ฝ่าย</span>
</div>
<div class="col-span-2 p-2 border pb-4">
<span></span>
<div class="col-span-1 p-2 border pb-4">
<span>{{formIdp.data.boss.bu1.tdesc || ""}}</span>
</div>
</div>
</div>
</div>
......@@ -121,7 +132,8 @@
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">เครื่องมือพัฒนา</span>
</th>
<th scope="col" rowspan="3" class="relative bg-soft-secondary text-primary !text-center !p-0">
<th scope="col" rowspan="3"
class="relative bg-soft-secondary text-primary !text-center !p-0">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
......@@ -130,7 +142,8 @@
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<span class="font-size-12px font-weight-700 ">หลักสูตรพัฒนาตาม CDR</span>
</th>
<th scope="col" rowspan="3" class="relative bg-soft-secondary text-primary !text-center !p-0">
<th scope="col" rowspan="3"
class="relative bg-soft-secondary text-primary !text-center !p-0">
<div class="absolute top-1/2 transform -translate-y-1/2 right-0">
<i class="ti ti-dots-vertical fs-l"></i>
</div>
......@@ -141,132 +154,115 @@
</th>
</tr>
<tr class="font-size-12px">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
70
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
20
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
10
</th>
</tr>
<tr class="font-size-12px">
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
OJT/Job Assignment
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
Coach/Mentor
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
Training
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
รหัส
</th>
<th scope="col" class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
<th scope="col"
class="relative px-10px py-10px bg-soft-secondary text-primary !text-center">
ชื่อหลักสูตร
</th>
</tr>
</thead>
<tbody *ngIf="!dataListFilter().length">
<tbody *ngIf="!formIdp.data.competencyIndicatorsCourses1.length">
<tr class="hover:table-hover2-hover">
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="dataListFilter().length">
<ng-container *ngFor=" let data of dataListFilter();let i = index">
<tr *ngIf="!data.bis.length" (mouseenter)="hoveredCode = data.code"
(mouseleave)="hoveredCode = null" [ngClass]="{ 'table-hover2': data.code === hoveredCode }">
<tbody *ngIf="formIdp.data.competencyIndicatorsCourses1.length">
<ng-container *ngFor=" let data of formIdp.data.competencyIndicatorsCourses1;let i = index">
<tr (mouseenter)="hoveredCode = data.indicatorsCourses0.competencyTopic.competencyTopicId"
(mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': data.indicatorsCourses0.competencyTopic.competencyTopicId === hoveredCode }">
<td class="align-start">
{{i+1}}. {{data.code}}
{{i+1}}. {{data.indicatorsCourses0.competencyTopic.competencyTopicId}}
</td>
<td class="align-start bg-table-gray"></td>
<td class="align-start bg-table-gray"></td>
<td class="align-start bg-table-gray"></td>
<td class="align-start bg-table-gray"></td>
<td class="!p-0"></td>
<td class="align-start bg-table-gray"></td>
<td class="align-start bg-table-gray"></td>
<td class="!p-0"></td>
<td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="!data.startDate&&!data.endDate">
<ng-container *ngIf="data.startDate&&data.endDate">
จาก&nbsp;
</ng-container>
{{data.startDate}}
<ng-container *ngIf="data.startDate&&data.endDate">
&nbsp;ถึง&nbsp;
</ng-container>
{{data.endDate}}
</td>
</tr>
<tr *ngFor=" let item of data.bis;let i2 = index;let f = first"
(mouseenter)="hoveredCode = data.code" (mouseleave)="hoveredCode = null"
[ngClass]="{ 'table-hover2': data.code === hoveredCode ,'border-none':!f }">
<td class="align-start">
<ng-container *ngIf="f">
{{i+1}}. {{data.code}}
<td class="align-start !white-space-normal"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.behavioralIndicators||!data.behavioralIndicators.length">
<ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3" *ngFor="let bis of data.behavioralIndicators;let i2 = index">
{{i2+1}}. {{bis.behavioralIndicators }}
</div>
</ng-container>
</td>
<td class="align-start !white-space-normal" [class.bg-table-gray]="checkBg(data.bis,'oj')">
{{i2+1}}. {{item.name}}
</td>
<td class="align-start text-center" [class.bg-table-gray]="checkBg(data.bis,'oj')">
<ng-container *ngIf="item.oj">
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.ojtJobAssignment">
<ng-container
*ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.ojtJobAssignment">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="align-start text-center" [class.bg-table-gray]="checkBg(data.bis,'cm')">
<ng-container *ngIf="item.cm">
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.coachMentor">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.coachMentor">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="align-start text-center" [class.bg-table-gray]="checkBg(data.bis,'t')">
<ng-container *ngIf="item.t">
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.idpDevelopmentPlan.training">
<ng-container *ngIf="data.idpDevelopmentPlan&&data.idpDevelopmentPlan.training">
<i class="ti ti-check fs-xxl !fw-b"></i>
</ng-container>
</td>
<td class="!p-0">
</td>
<td class="align-start text-center" [class.bg-table-gray]="checkBg(data.bis,'cdr.code')">
<ng-container *ngIf="item.cdr.code">
<td class="!p-0"></td>
<td class="align-start text-center"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.competencyCourse">
<ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3" *ngFor="let competencyCourse of data.competencyCourse">
<i class="ti ti-book fs-xxl !fw-b"></i><br>
{{item.cdr.code}}
{{competencyCourse.competencyCourseId }}
</div>
</ng-container>
</td>
<td class="align-start !white-space-normal"
[class.bg-table-gray]="checkBg(data.bis,'cdr.name')">
<ng-container *ngIf="item.cdr.name">
<div class="grid grid-cols-6">
<div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox cursor-pointer"
[(ngModel)]="item.cdr.check">
</div>
<div class="col-span-5">
{{item.cdr.name}}
</div>
<td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="!data.idpDevelopmentPlan||!data.competencyCourse">
<ng-container *ngIf="data.idpDevelopmentPlan">
<div class="mb-3" *ngFor="let competencyCourse of data.competencyCourse">
{{competencyCourse.tdesc }}
</div>
</ng-container>
</td>
<td class="!p-0">
</td>
<td class="align-start !white-space-normal"
[class.bg-table-gray]="!data.startDate&&!data.endDate">
<ng-container *ngIf="data.startDate&&data.endDate">
จาก<br>
<td class="!p-0"></td>
<td class="align-start text-center !white-space-normal"
[class.bg-table-gray]="!formIdp.data.masfromEvaluationRound.apsPeriodStart &&!formIdp.data.masfromEvaluationRound.apsPeriodEnd">
<ng-container
*ngIf="formIdp.data.masfromEvaluationRound.apsPeriodStart &&formIdp.data.masfromEvaluationRound.apsPeriodEnd">
จาก&nbsp;
</ng-container>
<span class="whitespace-nowrap">
{{data.startDate}}
</span>
<ng-container *ngIf="data.startDate&&data.endDate">
<br>ถึง<br>
{{convertDateFormat(formIdp.data.masfromEvaluationRound.apsPeriodStart)}}
<ng-container
*ngIf="formIdp.data.masfromEvaluationRound.apsPeriodStart &&formIdp.data.masfromEvaluationRound.apsPeriodEnd">
&nbsp;ถึง&nbsp;
</ng-container>
<span class="whitespace-nowrap">
{{data.endDate}}
</span>
{{convertDateFormat(formIdp.data.masfromEvaluationRound.apsPeriodEnd)}}
</td>
</tr>
</ng-container>
......@@ -274,4 +270,166 @@
</table>
</div>
</div>
<div class="py-1rem px-2rem">
<div class="py-2 grid grid-cols-6 gap-3">
<div class="col-span-6">หมายเหตุ : กรณี HR จัดอบรมให้ต้องเป็นไปตามเกณ์ที่ส่วนกลางกำหนดขึ้น</div>
<div class="col-span-6 grid grid-cols-6 gap-2">
<div class="grid col-span-1 grid-cols-6 gap-2">
<div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-0"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'||!canEdit"
name="idpStatus" (change)="formIdp.data.masfromEvaluationIdp.idpStatus='0'"
[checked]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'">
</div>
<div class="col-span-5">
<label for="idpStatus-0" class="text-sm text-gray-500"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='0'||!canEdit">
IDP มาตราฐาน
</label>
</div>
</div>
<div class="grid col-span-1 grid-cols-6 gap-2">
<div class="col-span-1">
<input type="checkbox" class="ti-form-checkbox" id="idpStatus-1"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'||!canEdit"
name="idpStatus" (change)="formIdp.data.masfromEvaluationIdp.idpStatus='1'"
[checked]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'">
</div>
<div class="col-span-5">
<label for="idpStatus-1" class="text-sm text-gray-500"
[class.pointer-events-none]="formIdp.data.masfromEvaluationIdp.idpStatus=='1'||!canEdit">
IDP ปรับแก้ไข
</label>
</div>
</div>
</div>
</div>
</div>
<div class="py-1rem px-2rem">
<div class="py-2 grid grid-cols-7 gap-3">
<div class="col-span-1">
{{formIdp.data.apsapprove2.employeeId?'ผู้ประเมิน1':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove1.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove1Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='1'||!canEdit"
[readonly]="!formIdp.data||formIdp.data.currentStep!='1'||!canEdit"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove1Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove1Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove2.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove3.employeeId?'ผู้ประเมิน2':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove2.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove2Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='2'||!canEdit"
[readonly]="!formIdp.data||formIdp.data.currentStep!='2'||!canEdit"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove2Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove2Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove3.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove4.employeeId?'ผู้ประเมิน3':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove3.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove3Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='3'||!canEdit"
[readonly]="!formIdp.data||formIdp.data.currentStep!='3'||!canEdit"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove3Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove3Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove4.employeeId">
<div class="col-span-1">
{{formIdp.data.apsapprove5.employeeId?'ผู้ประเมิน4':'ผู้อนุมัติ'}}
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove4.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove4Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='4'||!canEdit"
[readonly]="!formIdp.data||formIdp.data.currentStep!='4'||!canEdit"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove4Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove4Date)}}
</span>
</div>
</div>
<div class="py-2 grid grid-cols-7 gap-3" *ngIf="formIdp.data.apsapprove5.employeeId">
<div class="col-span-1">
ผู้อนุมัติ
</div>
<div class="col-span-1">
{{formIdp.data.apsapprove5.thFullName}}</div>
<div class="col-span-1">
<input type="checkbox" id="hs-basic-usage1" class="ti-switch checked:bg-none checked:bg-green-600 checked:hover:bg-green-600 checked:focus:bg-green-600 focus:border-green-600 focus:ring-green-600 dark:checked:bg-green-600
checked:before:bg-green-200 dark:checked:before:bg-green-200 pointer-events-none"
[checked]="formIdp.data.masfromEvaluationIdp.apsapprove5Status=='2'">
<label for="hs-basic-usage1" class="sr-only">ยืนยันผล</label>
</div>
<div class="col-span-2">
<textarea type="text" rows="2" class="ti-form-input mb-2" placeholder="ใส่ Comment ที่นี่"
[class.!bg-input-readonly]="!formIdp.data||formIdp.data.currentStep!='5'||!canEdit"
[readonly]="!formIdp.data||formIdp.data.currentStep!='5'||!canEdit"
[(ngModel)]="formIdp.data.masfromEvaluationIdp.apsapprove5Comment"></textarea>
<span class="pt-2">
วันที่ :
{{convertDate(formIdp.data.masfromEvaluationIdp.apsapprove5Date)}}
</span>
</div>
</div>
</div>
<div class="flex justify-center mb-1rem pb-2rem" *ngIf="canEdit">
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save('draft')">
บันทึกร่าง
</button>
<button type="submit" class="ti-btn ti-btn-success mx-2rem" (click)="save()">
บันทึกข้อมูล
</button>
</div>
</ng-container>
</ng-template>
\ No newline at end of file
import { Component, EventEmitter, Output } from '@angular/core';
export interface DataModel {
code: string,
bis: BisModel[],
startDate: string,
endDate: string
}
export interface BisModel {
name: string,
oj: boolean,
cm: boolean,
t: boolean,
cdr: CdrModel
}
export interface CdrModel {
check: boolean,
name: string,
code: string
}
import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
import { IdpFormModel } from 'src/app/shared/model/idp-form.model';
import { EmployeeService } from 'src/app/shared/services/employee.service';
import { EvaluationIdpService } from 'src/app/shared/services/evaluation-Idp.service';
import Swal from 'sweetalert2';
@Component({
selector: 'app-idp-evalution',
templateUrl: './idp-evalution.component.html',
styleUrls: ['./idp-evalution.component.scss']
})
export class IdpEvalutionComponent {
@Output() sendPageEvalution: EventEmitter<string> = new EventEmitter<string>();
pathTitle = ['การประเมินผล', 'ประเมินผล']
@Input() pathTitle: string[] = []
@Input() evaluationRoundId = ""
@Input() evaluateeId = ""
@Input() evaluaterId = ""
@Output() sendReturnPath: EventEmitter<any> = new EventEmitter<any>();
currentDate = new Date()
hoveredCode: string | null = null;
dataList: DataModel[] = [{
code: "CC-01",
bis: [{
name: "สอนงานด้านความปลอดภัย และคุณภาพของบริษัทให้กับพนักงานในหน่วยงาน",
oj: true,
cm: false,
t: true,
cdr: {
check: false,
name: "จิตใต้สำนึกด้านความปลอดภัยและคุณภาพ (Safety & Quality) สำหรับระดับพนักงาน S3-S4",
code: "CC-01-4"
}
}, {
name: "ติดตามและปรับปรุงการทำงานด้านความปลอดภัยและ คุณภาพของทีมงาน",
oj: false,
cm: false,
t: false,
cdr: {
check: false,
name: "",
code: ""
}
}],
startDate: "01-01-2023",
endDate: "31-12-2023"
}, {
code: "CC-02",
bis: [{
name: "สอนงาน และพัฒนาทีมงานให้เกิดการทำงานเป็นทีมโดยยึดเป้าหมายเดียวกัน (TAT Goal) และคำนึงถึงความต้องการของลูกค้าเป็นหลัก (Next Customer)",
oj: true,
cm: false,
t: false,
cdr: {
check: false,
name: "",
code: ""
}
}],
startDate: "01-01-2023",
endDate: "31-12-2023"
}, {
code: "CC-03",
bis: [],
startDate: "",
endDate: ""
}]
getNestedValue(obj: any, path: string) {
return path.split('.').reduce((acc, key) => acc && acc[key], obj);
formIdp: { loading: boolean, data?: IdpFormModel } = { loading: false, data: undefined }
canEdit = false
constructor(private evaluationIdpService: EvaluationIdpService,
private employeeService: EmployeeService,
private cdr: ChangeDetectorRef
) {
}
ngOnInit(): void {
this.getFormIdp()
}
getFormIdp() {
this.formIdp.loading = true
this.evaluationIdpService.getFormIdp(this.evaluationRoundId, this.evaluateeId).subscribe({
next: response => {
this.formIdp.data = JSON.parse(JSON.stringify(response))
console.log(" 🐒 this.formIdp.data:", this.formIdp.data?.competencyIndicatorsCourses1)
switch (this.formIdp.data?.currentStep) {
case ("0"): {
this.formIdp.data.masfromEvaluationIdp.apsassessyDate = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsassessy.employeeId
break
}
case ("1"): {
this.formIdp.data.masfromEvaluationIdp.apsapprove1Date = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsapprove1.employeeId
break
}
case ("2"): {
this.formIdp.data.masfromEvaluationIdp.apsapprove2Date = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsapprove2.employeeId
break
}
case ("3"): {
this.formIdp.data.masfromEvaluationIdp.apsapprove3Date = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsapprove3.employeeId
break
}
case ("4"): {
this.formIdp.data.masfromEvaluationIdp.apsapprove4Date = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsapprove4.employeeId
break
}
case ("5"): {
this.formIdp.data.masfromEvaluationIdp.apsapprove5Date = this.currentDate.toISOString().split('T')[0];
this.canEdit = this.evaluaterId == this.formIdp.data.apsapprove5.employeeId
break
}
checkBg(data: any[], field: string) {
return data.every(x => !this.getNestedValue(x, field));
default: { return }
}
dataListFilter() {
return this.dataList
this.formIdp.loading = false
this.cdr.detectChanges()
}, error: error => {
this.formIdp.loading = false
this.cdr.detectChanges()
}
})
}
returnPath() {
this.sendReturnPath.emit()
}
convertDate(dateInput?: string | Date): string {
let date = new Date()
if (dateInput) {
if (typeof dateInput === 'string') {
const [year, month, day] = dateInput.split('-').map(Number);
date = new Date(year, month - 1, day);
} else {
date = dateInput
}
}
return date?.toLocaleDateString('th-TH', { day: 'numeric', month: 'long', year: 'numeric' }) || ''
}
convertDateFormat(dateString: string): string {
const [year, month, day] = dateString.split("-");
return `${day}-${month}-${year}`;
}
returnPage() {
this.sendPageEvalution.emit("")
save(status?: string) {
Swal.fire({
iconHtml: `
<div class="flex items-center justify-center rounded-full !h-80px !w-80px" style="background-color: #E8F8EE;">
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="39" height="39" fill="#D2D2D2"/>
<g id="Component">
<g id="alert cart">
<g id="mdi:file-export">
<circle cx="22.5" cy="19.5" r="33.5" fill="#E8F8EE"/>
<path d="M9.75 3.25C8.88805 3.25 8.0614 3.59241 7.4519 4.2019C6.84241 4.8114 6.5 5.63805 6.5 6.5V32.5C6.5 33.362 6.84241 34.1886 7.4519 34.7981C8.0614 35.4076 8.88805 35.75 9.75 35.75H29.25C30.112 35.75 30.9386 35.4076 31.5481 34.7981C32.1576 34.1886 32.5 33.362 32.5 32.5V13L22.75 3.25M21.125 5.6875L30.0625 14.625H21.125M14.5113 19.8575H26V31.3463L22.555 27.9013L17.9563 32.5L13.3575 27.9013L17.9563 23.3188"
fill="#1DBE5A"/>
</g>
</g>
</g>
</svg>
</div>
`,
title: status == 'draft' ? 'บันทึกแบบร่าง' : 'บันทึกข้อมูล',
text: status == 'draft' ? 'คุณต้องการบันทึกแบบร่างของการประเมินนี้ใช่หรือไม่' : 'คุณต้องการบันทึกข้อมูลการประเมินนี้ใช่หรือไม่',
showCancelButton: true,
confirmButtonText: 'ยืนยันการบันทึก',
cancelButtonText: 'ย้อนกลับ',
customClass: {
title: '!swal2-title-mt-20px',
actions: '!swal2-actions-mt-20px',
icon: '!swal2-icon-no-border',
confirmButton: '!swal2-button-bg-green',
cancelButton: '!swal2-button-bg-gray',
},
}).then((result) => {
if (result.isConfirmed && this.formIdp) {
this.saveApi(status)
} else if (result.dismiss === Swal.DismissReason.cancel) {
Swal.fire({
title: 'ยกเลิก!',
text: 'การบันทึกถูกยกเลิก',
icon: 'error',
customClass: {
confirmButton: '!swal2-button-bg-danger',
}
})
}
})
}
saveApi(status?: string) {
let body = this.formIdp.data
switch (this.formIdp.data?.currentStep) {
case ("0"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsassessyStatus: status == 'draft' ? '1' : '2'
}
}
break
}
case ("1"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove1Status: status == 'draft' ? '1' : '2'
}
}
break
}
case ("2"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove2Status: status == 'draft' ? '1' : '2'
}
}
break
}
case ("3"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove3Status: status == 'draft' ? '1' : '2'
}
}
break
}
case ("4"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove4Status: status == 'draft' ? '1' : '2'
}
}
break
}
case ("5"): {
body = {
...this.formIdp.data, masfromEvaluationIdp: {
...this.formIdp.data.masfromEvaluationIdp,
apsapprove5Status: status == 'draft' ? '1' : '2'
}
}
break
}
default: { return }
}
this.evaluationIdpService.postIdp(body).subscribe({
next: response => {
if (response.success) {
Swal.fire({
title: 'บันทึกสำเร็จ!',
text: 'การประเมินของคุณถูกบันทึกแล้ว',
icon: 'success',
customClass: {
confirmButton: '!swal2-button-bg-green',
}
});
this.getFormIdp()
} else {
Swal.fire({
title: 'ยกเลิก!',
text: 'การบันทึกถูกยกเลิก',
icon: 'error',
customClass: {
confirmButton: '!swal2-button-bg-danger',
}
});
}
}, error: error => {
Swal.fire({
title: 'ยกเลิก!',
text: 'การบันทึกถูกยกเลิก',
icon: 'error',
customClass: {
confirmButton: '!swal2-button-bg-danger',
}
});
}
})
}
}
......@@ -104,7 +104,7 @@
</td>
<td style="font-size: 12px;">{{item.apsassessy.position.tdesc}}</td>
<td class="text-center">
<div class="flex">
<div class="flex justify-center">
<button type="button" class="ti-btn rounded-sm "
*ngFor="let type of item.typeList"
[class.ti-btn-soft-secondary]="type.statusType == 'employee'"
......@@ -117,10 +117,16 @@
</div>
</td>
<td class="text-center">
<!-- <button type="button" class="ti-btn rounded-sm ti-btn-soft-dark"
style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;">
<div class="flex justify-center">
<button type="button" class="ti-btn rounded-sm"
[class.ti-btn-soft-secondary]="item.statusIdp.statusType == 'employee'"
[class.ti-btn-soft-warning]="item.statusIdp.statusType != 'employee'&&item.statusIdp.statusType != 'Boss_finish'"
[class.ti-btn-soft-success]="item.statusIdp.statusType == 'Boss_finish'"
style="height: 15px; width: 45px; font-size: 12px; display: flex; align-items: center; justify-content: center;margin-left:4px;"
(click)="selectSubordinate(item,'',subordinate.select?.evaluationRoundId);pageEvalution='idp'">
IDP
</button> -->
</button>
</div>
</td>
<td class="text-center">
<!-- <button type="button" class="ti-btn rounded-sm ti-btn-soft-success"
......@@ -190,14 +196,17 @@
</ng-container>
<ng-container *ngIf="pageEvalution=='idp'">
<app-idp-evalution (sendPageEvalution)="pageEvalution=$event"></app-idp-evalution>
<app-idp-evalution [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า','ประเมิน']"
(sendReturnPath)="getBossList();pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
[evaluationRoundId]="formEvaluation.evaluationRoundId" [evaluaterId]="formEvaluation.evaluaterId"
[evaluateeId]="formEvaluation.evaluateeId"></app-idp-evalution>
</ng-container>
<ng-container *ngIf="pageEvalution=='pms'">
<app-pms-evalution (sendPageEvalution)="pageEvalution=$event"></app-pms-evalution>
</ng-container>
<ng-container *ngIf="pageEvalution=='evaluation'">
<app-evaluation [pathTitle]="['การประเมินผล', 'ประเมินโดยหัวหน้า','ประเมิน']"
(sendReturnPath)="pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
(sendReturnPath)="getBossList();pageEvalution='' ; pathTitle = ['การประเมินผล', 'ประเมินโดยหัวหน้า']"
[evaluationRoundId]="formEvaluation.evaluationRoundId" [evaluaterId]="formEvaluation.evaluaterId"
[evaluateeId]="formEvaluation.evaluateeId"
[competencyTypeId]="formEvaluation.competencyTypeId"></app-evaluation>
......
......@@ -67,7 +67,7 @@ export class SupervisorEvaluationComponent {
this.page = Array.from({ length: Math.ceil(this.subordinateFilter().length / 10) }, (_, i) => i + 1);
}
selectSubordinate(data: Masfromevaluationassessment, competencyTypeId: string, evaluationRoundId?: string) {
if (data && competencyTypeId && evaluationRoundId) {
if (data && evaluationRoundId) {
this.formEvaluation.evaluateeId = data.apsassessy.employeeId
this.formEvaluation.competencyTypeId = competencyTypeId
this.formEvaluation.evaluationRoundId = evaluationRoundId
......
......@@ -151,12 +151,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body mt-1">
......@@ -319,12 +319,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
<div class="overflow-auto table-bordered" style="border-radius: 5px;">
<div class="overflow-auto border">
......
......@@ -11,12 +11,12 @@
</div>
</div>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
......@@ -163,12 +163,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -241,12 +241,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -36,12 +36,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
</div>
......
......@@ -193,12 +193,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -192,12 +192,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -176,12 +176,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body">
......
......@@ -214,12 +214,12 @@
Clear
</button>
</div>
<div class="px-1">
<!-- <div class="px-1">
<button href="javascript:void(0);" class="ti-btn ti-btn-soft-warning h-45px m-0 shadow-md">
<i class="ti ti-book fs-l"></i>
Help
</button>
</div>
</div> -->
</div>
</div>
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
......
......@@ -15,6 +15,10 @@ export interface Masfromevaluationassessment {
gread: string
sumScore: number
typeList: TypeList[]
statusIdp: {
shortName: string,
statusType: string
}
}
export interface MasfromStatusType {
......
......@@ -111,6 +111,7 @@ export interface EmployeeModel {
thFullName: string
engFullName: string
pl: PLModel
resigndate: string
}
export class MyEmployeeModel implements EmployeeModel {
......@@ -200,6 +201,7 @@ export class MyEmployeeModel implements EmployeeModel {
thFullName: string
engFullName: string
pl: PLModel
resigndate: string
constructor(data?: Partial<EmployeeModel>) {
this.employeeId = data?.employeeId || ""
this.prefix = new MyPrefixModel(data?.prefix || {})
......@@ -287,7 +289,7 @@ export class MyEmployeeModel implements EmployeeModel {
this.thFullName = data?.thFullName || ""
this.engFullName = data?.engFullName || ""
this.pl = new MyPLModel(data?.workarea || {})
this.resigndate = data?.resigndate || ""
}
}
export interface IdpFormModel {
personalLevel: PersonalLevel
masfromEvaluationRound: MasfromEvaluationRound
companyId: string
active: boolean
masfromStatusType: MasfromStatusType
currentStep: string
lastStep: string
apsassessy: Apsassessy
apsapprove1: Apsapprove1
apsapprove2: Apsapprove2
apsapprove3: Apsapprove3
apsapprove4: Apsapprove4
apsapprove5: Apsapprove5
masfromEvaluationIdp: MasfromEvaluationIdp
competencyIndicatorsCourses1: CompetencyIndicatorsCourses1[]
boss: Boss
}
export interface PersonalLevel {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface MasfromEvaluationRound {
evaluationRoundId: string
companyId: string
tdesc: string
edesc: string
apsyear: string
apsPeriodStart: string
apsPeriodEnd: string
}
export interface MasfromStatusType {
code: string
tdesc: string
edesc: string
}
export interface Apsassessy {
employeeId: string
bossId: string
prefix: Prefix
fname: string
lname: string
efname: string
elname: string
bu1: Bu1
bu2: Bu2
bu3: Bu3
bu4: Bu4
bu5: Bu5
position: Position
job: Job
pl: Pl
status: Status
time0: Time0
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu1 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu2 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu3 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu4 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu5 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time0 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove1 {
employeeId: string
bossId: string
prefix: Prefix2
fname: string
lname: string
efname: string
elname: string
bu1: Bu12
bu2: Bu22
bu3: Bu32
bu4: Bu42
bu5: Bu52
position: Position2
job: Job2
pl: Pl2
status: Status2
time0: Time02
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix2 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu12 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu22 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu32 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu42 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu52 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position2 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job2 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl2 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status2 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time02 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove2 {
employeeId: string
bossId: string
prefix: Prefix3
fname: string
lname: string
efname: string
elname: string
bu1: Bu13
bu2: Bu23
bu3: Bu33
bu4: Bu43
bu5: Bu53
position: Position3
job: Job3
pl: Pl3
status: Status3
time0: Time03
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix3 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu13 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu23 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu33 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu43 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu53 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position3 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job3 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl3 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status3 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time03 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove3 {
employeeId: string
bossId: string
prefix: Prefix4
fname: string
lname: string
efname: string
elname: string
bu1: Bu14
bu2: Bu24
bu3: Bu34
bu4: Bu44
bu5: Bu54
position: Position4
job: Job4
pl: Pl4
status: Status4
time0: Time04
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix4 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu14 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu24 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu34 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu44 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu54 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position4 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job4 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl4 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status4 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time04 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove4 {
employeeId: string
bossId: string
prefix: Prefix5
fname: string
lname: string
efname: string
elname: string
bu1: Bu15
bu2: Bu25
bu3: Bu35
bu4: Bu45
bu5: Bu55
position: Position5
job: Job5
pl: Pl5
status: Status5
time0: Time05
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix5 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu15 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu25 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu35 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu45 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu55 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position5 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job5 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl5 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status5 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time05 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove5 {
employeeId: string
bossId: string
prefix: Prefix6
fname: string
lname: string
efname: string
elname: string
bu1: Bu16
bu2: Bu26
bu3: Bu36
bu4: Bu46
bu5: Bu56
position: Position6
job: Job6
pl: Pl6
status: Status6
time0: Time06
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix6 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu16 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu26 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu36 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu46 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu56 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position6 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job6 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl6 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status6 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time06 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface MasfromEvaluationIdp {
masfromEvaluationAssessment: MasfromEvaluationAssessment
plId: string
companyId: string
apsassessyStatus: string
apsapprove1Status: string
apsapprove2Status: string
apsapprove3Status: string
apsapprove4Status: string
apsapprove5Status: string
apsassessyComment: string
apsapprove1Comment: string
apsapprove2Comment: string
apsapprove3Comment: string
apsapprove4Comment: string
apsapprove5Comment: string
apsassessyDate: string
apsapprove1Date: string
apsapprove2Date: string
apsapprove3Date: string
apsapprove4Date: string
apsapprove5Date: string
idpStatus: string
}
export interface MasfromEvaluationAssessment {
personalLevel: PersonalLevel2
masfromEvaluationRound: MasfromEvaluationRound2
companyId: string
active: boolean
apsassessy: Apsassessy2
apsapprove1: Apsapprove12
apsapprove2: Apsapprove22
apsapprove3: Apsapprove32
apsapprove4: Apsapprove42
apsapprove5: Apsapprove52
masfromEvaluationAssessment1: MasfromEvaluationAssessment1[]
}
export interface PersonalLevel2 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface MasfromEvaluationRound2 {
evaluationRoundId: string
companyId: string
tdesc: string
edesc: string
apsyear: string
apsPeriodStart: string
apsPeriodEnd: string
personalLevel: PersonalLevel3[]
jlId: string
active: number
statusFrom: StatusFrom
statusCode: StatusCode
}
export interface PersonalLevel3 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface StatusFrom {
code: string
tdesc: string
edesc: string
}
export interface StatusCode {
code: string
tdesc: string
edesc: string
}
export interface Apsassessy2 {
employeeId: string
bossId: string
prefix: Prefix7
fname: string
lname: string
efname: string
elname: string
bu1: Bu17
bu2: Bu27
bu3: Bu37
bu4: Bu47
bu5: Bu57
position: Position7
job: Job7
pl: Pl7
status: Status7
time0: Time07
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix7 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu17 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu27 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu37 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu47 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu57 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position7 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job7 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl7 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status7 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time07 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove12 {
employeeId: string
bossId: string
prefix: Prefix8
fname: string
lname: string
efname: string
elname: string
bu1: Bu18
bu2: Bu28
bu3: Bu38
bu4: Bu48
bu5: Bu58
position: Position8
job: Job8
pl: Pl8
status: Status8
time0: Time08
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix8 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu18 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu28 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu38 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu48 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu58 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position8 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job8 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl8 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status8 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time08 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove22 {
employeeId: string
bossId: string
prefix: Prefix9
fname: string
lname: string
efname: string
elname: string
bu1: Bu19
bu2: Bu29
bu3: Bu39
bu4: Bu49
bu5: Bu59
position: Position9
job: Job9
pl: Pl9
status: Status9
time0: Time09
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix9 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu19 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu29 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu39 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu49 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu59 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position9 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job9 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl9 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status9 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time09 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove32 {
employeeId: string
bossId: string
prefix: Prefix10
fname: string
lname: string
efname: string
elname: string
bu1: Bu110
bu2: Bu210
bu3: Bu310
bu4: Bu410
bu5: Bu510
position: Position10
job: Job10
pl: Pl10
status: Status10
time0: Time010
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix10 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu110 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu210 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu310 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu410 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu510 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position10 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job10 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl10 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status10 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time010 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove42 {
employeeId: string
bossId: string
prefix: Prefix11
fname: string
lname: string
efname: string
elname: string
bu1: Bu111
bu2: Bu211
bu3: Bu311
bu4: Bu411
bu5: Bu511
position: Position11
job: Job11
pl: Pl11
status: Status11
time0: Time011
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix11 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu111 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu211 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu311 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu411 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu511 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position11 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job11 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl11 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status11 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time011 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface Apsapprove52 {
employeeId: string
bossId: string
prefix: Prefix12
fname: string
lname: string
efname: string
elname: string
bu1: Bu112
bu2: Bu212
bu3: Bu312
bu4: Bu412
bu5: Bu512
position: Position12
job: Job12
pl: Pl12
status: Status12
time0: Time012
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix12 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu112 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu212 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu312 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu412 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu512 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position12 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job12 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl12 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status12 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time012 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
export interface MasfromEvaluationAssessment1 {
plId: string
companyId: string
lineNo: number
competencyType: CompetencyType
masfromStatusType: MasfromStatusType2
currentStep: string
lastStep: string
apsassessyStatus: string
apsapprove1Status: string
apsapprove2Status: string
apsapprove3Status: string
apsapprove4Status: string
apsapprove5Status: string
numberCheck1: number
numberCheck2: number
numberCheck3: number
numberCheck4: number
numberCheck5: number
weightedTotal: number
averageScore: number
apsassessyComment: string
apsapprove1Comment: string
apsapprove2Comment: string
apsapprove3Comment: string
apsapprove4Comment: string
apsapprove5Comment: string
apsassessyDate: string
apsapprove1Date: string
apsapprove2Date: string
apsapprove3Date: string
apsapprove4Date: string
apsapprove5Date: string
evaluationResults: string
sumEvaluationResults: string
}
export interface CompetencyType {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
weight: number
}
export interface MasfromStatusType2 {
code: string
tdesc: string
edesc: string
}
export interface CompetencyIndicatorsCourses1 {
indicatorsCourses0: IndicatorsCourses0
competencyCourseId: string
competencyCourse: CompetencyCourse[]
behavioralIndicators: BehavioralIndicator[]
idpDevelopmentPlan: IdpDevelopmentPlan
}
export interface IndicatorsCourses0 {
competencyTopic: CompetencyTopic
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
}
export interface CompetencyTopic {
competencyTopicId: string
competencyType: CompetencyType2
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType2 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
weight: number
}
export interface CompetencyCourse {
competencyCourseId: string
companyId: string
edesc: string
tdesc: string
}
export interface BehavioralIndicator {
competencyIndicators1: CompetencyIndicators1
runNo: number
companyId: string
assessmentId: string
behavioralIndicators: string
competencyAssessment: CompetencyAssessment[]
}
export interface CompetencyIndicators1 {
competencyIndicatorsCourses0: CompetencyIndicatorsCourses0
lineNo: number
companyId: string
competencyCourseId: string
}
export interface CompetencyIndicatorsCourses0 {
competencyTopic: CompetencyTopic2
companyId: string
edesc: string
tdesc: string
indicatorsCourseDetailTh: string
indicatorsCourseDetailEn: string
}
export interface CompetencyTopic2 {
competencyTopicId: string
competencyType: CompetencyType3
companyId: string
edesc: string
tdesc: string
competencyDetail: string
competencyFiles: string
lineNo: number
expectationLevel: string
}
export interface CompetencyType3 {
competencyTypeId: string
companyId: string
edesc: string
tdesc: string
shortName: string
expectationLevel: string
weight: number
}
export interface CompetencyAssessment {
assessmentId: string
companyId: string
edesc: string
tdesc: string
shortName: string
}
export interface IdpDevelopmentPlan {
planId: string
companyId: string
ojtJobAssignment: boolean
coachMentor: boolean
training: boolean
}
export interface Boss {
employeeId: string
bossId: string
prefix: Prefix13
fname: string
lname: string
efname: string
elname: string
bu1: Bu113
bu2: Bu213
bu3: Bu313
bu4: Bu413
bu5: Bu513
position: Position13
job: Job13
pl: Pl13
status: Status13
time0: Time013
resignDate: string
endWorkDate: string
startDate: string
thFullName: string
engFullName: string
}
export interface Prefix13 {
prefixId: string
tdesc: string
edesc: string
}
export interface Bu113 {
bu1id: string
tdesc: string
edesc: string
companyId: string
}
export interface Bu213 {
bu2id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu313 {
bu3id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu413 {
bu4id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Bu513 {
bu5id: string
tdesc: string
edesc: string
parent: string
companyId: string
}
export interface Position13 {
positionId: string
tdesc: string
edesc: string
consolidate: string
shortName: string
companyId: string
}
export interface Job13 {
jobCodeId: string
tdesc: string
edesc: string
}
export interface Pl13 {
plId: string
tdesc: string
edesc: string
companyId: string
}
export interface Status13 {
statusCode: string
statusType: string
tdesc: string
edesc: string
}
export interface Time013 {
time0id: string
tdesc: string
edesc: string
stickTm: string
hourD: number
}
......@@ -9,11 +9,11 @@ export class MyStatusModel implements StatusModel {
statusType: string
tdesc: string
edesc: string
constructor(data: Partial<StatusModel>) {
this.statusCode = data.statusCode || ""
this.statusType = data.statusType || ""
this.tdesc = data.tdesc || ""
this.edesc = data.edesc || ""
constructor(data?: Partial<StatusModel>) {
this.statusCode = data?.statusCode || ""
this.statusType = data?.statusType || ""
this.tdesc = data?.tdesc || ""
this.edesc = data?.edesc || ""
}
}
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment';
import { StatusModel } from '../model/status.model';
@Injectable({
providedIn: 'root'
})
export class EmpStatusService {
api = "/emp-status"
urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) {
}
getList(): Observable<StatusModel[]> {
return this.http.get<StatusModel[]>(this.urlApi + "/lists")
}
}
\ No newline at end of file
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment';
import { AlertModel } from '../model/alert.model';
import { IdpFormModel } from '../model/idp-form.model';
@Injectable({
providedIn: 'root'
})
export class EvaluationIdpService {
api = "/evaluation-Idp"
urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) {
}
getFormIdp(evaluationRoundId: string, employeeId: string): Observable<IdpFormModel> {
return this.http.get<IdpFormModel>(this.urlApi + "/" + evaluationRoundId + "/" + employeeId)
}
postIdp(body: IdpFormModel): Observable<AlertModel> {
return this.http.post<AlertModel>(this.urlApi + "/", body)
}
}
\ No newline at end of file
......@@ -25006,3 +25006,6 @@ div:where(.swal2-container) div:where(.swal2-validation-message) {
border-width: 0 1px 0 0;
height: 100%;
}
\!.bg-white {
background-color: white !important;
}
\ 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