Commit 038a89a0 by Nattana Chaiyamat

ข้อมูลลักษณะงาน (JD)

parent e70c95d7
......@@ -8,7 +8,7 @@
<p class="mt-3 text-2xl font-bold text-gray-800 dark:text-white">Oops, something went wrong.</p>
<p class="text-gray-600 dark:text-white/70">Sorry, we couldn't find your page.</p>
<div class="mt-5 flex flex-col justify-center items-center gap-2 sm:flex-row sm:gap-3">
<a class="w-full sm:w-auto inline-flex justify-center items-center gap-x-3 text-center bg-primary hover:bg-primary border border-transparent text-white text-sm font-medium rounded-sm focus:outline-none focus:ring-0 focus:ring-primary focus:ring-offset-0 focus:ring-offset-white transition py-2 px-3 dark:focus:ring-offset-white/10" href="/dashboard/sales">
<a class="w-full sm:w-auto inline-flex justify-center items-center gap-x-3 text-center bg-primary hover:bg-primary border border-transparent text-white text-sm font-medium rounded-sm focus:outline-none focus:ring-0 focus:ring-primary focus:ring-offset-0 focus:ring-offset-white transition py-2 px-3 dark:focus:ring-offset-white/10" href="/#/ess/my-skill-x-module">
<i class="ri-arrow-left-line"></i>
Get Back to Home
</a>
......
......@@ -56,9 +56,9 @@ import { EssProfileComponent } from '../ess-profile/ess-profile.component';
import { ExcelReportComponent } from '../excel-report/excel-report.component';
import { SettingIndividualKpiComponent } from '../setting-individual-kpi/setting-individual-kpi.component';
import { SettingIndividualKpiSupervisorComponent } from '../setting-individual-kpi-supervisor/setting-individual-kpi-supervisor.component';
import { JobDescriptionEssComponent } from '../job-description-ess/job-description-ess.component';
import { CompetencyEvaluationFactorsComponent } from '../competency-assessment/competency-evaluation-factors/competency-evaluation-factors.component';
import { ReportCompetencySummaryComponent } from '../report-component/report-com/report-competency-summary/report-competency-summary.component';
import { JobDescriptionEmpComponent } from '../job-description-emp/job-description-emp.component';
......@@ -130,7 +130,7 @@ const routes: Routes = [
{ path: "ess/self-setting-individual-kpi", title: 'แก้ไข Individual KPI ตนเอง', component: SettingIndividualKpiComponent },
{ path: "ess/supervisor-setting-individual-kpi", title: 'แก้ไข Individual KPI โดยหัวหน้า', component: SettingIndividualKpiSupervisorComponent },
{ path: "ess/job-description", title: 'รายละเอียดของงาน', component: JobDescriptionEssComponent },
{ path: "admin/job-description-emp", title: 'รายละเอียดของงาน', component: JobDescriptionEmpComponent },
]
}
];
......
......@@ -204,12 +204,12 @@ import {
} from '@syncfusion/ej2-angular-grids';
import { SettingIndividualKpiComponent } from '../setting-individual-kpi/setting-individual-kpi.component';
import { SettingIndividualKpiSupervisorComponent } from '../setting-individual-kpi-supervisor/setting-individual-kpi-supervisor.component';
import { JobDescriptionEssComponent } from '../job-description-ess/job-description-ess.component';
import { MoneyInputDirective } from 'src/app/shared/directive/money-input/money-input.directive';
import { CompetencyEvaluationFactorsComponent } from '../competency-assessment/competency-evaluation-factors/competency-evaluation-factors.component';
import { CompetencyDefineEvaluationFactorsComponent } from '../competency-assessment/competency-evaluation-factors/competency-define-evaluation-factors/competency-define-evaluation-factors.component';
import { TranslateModule } from '@ngx-translate/core';
import { ReportCompetencySummaryComponent } from '../report-component/report-com/report-competency-summary/report-competency-summary.component';
import { JobDescriptionEmpComponent } from '../job-description-emp/job-description-emp.component';
export const MY_DATE_FORMATS = {
parse: {
......@@ -358,7 +358,7 @@ export class CustomDateAdapter extends NativeDateAdapter {
PivotSyncfutionComponent,
SettingIndividualKpiComponent,
SettingIndividualKpiSupervisorComponent,
JobDescriptionEssComponent,
JobDescriptionEmpComponent,
MoneyInputDirective
], imports: [
TranslateModule,
......
<div class="relative">
<!-- <div class="relative">
<div class="flex relative before:absolute before:w-full before:h-full bg-gradient-custom"
style="margin-top: -50px;margin-left: -100px;margin-right: -100px">
<div class="h-[500px] w-full rounded-sm"></div>
......@@ -143,95 +143,269 @@
</div>
</div>
</div>
</div> -->
<app-page-header [pathTitle]="pathTitle"></app-page-header>
<div class="bg-card-white">
</div>
<div class="block-main-content">
<div class="text-lg font-bold py-2 px-8 text-primary">
{{'ข้อมูลลักษณะงาน (JD)' |translate}}
</div>
<div class="page">
<div class="border-b border-gray-200 px-8">
<nav class="-mb-0.5 flex space-x-6 rtl:space-x-reverse">
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary active"
href="javascript:void(0);" id="underline-item-1" data-hs-tab="#underline-1"
aria-controls="underline-1" (click)="currentPage=1">
{{'Part 1 : General Information' | translate}}
</a>
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-2" data-hs-tab="#underline-2"
aria-controls="underline-2" (click)="currentPage=2">
{{'Part 2 : Organization Chart' | translate}}
</a>
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-3" data-hs-tab="#underline-3"
aria-controls="underline-3" (click)="currentPage=3">
{{'Part 3 : Job Detail' | translate}}
</a>
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-4" data-hs-tab="#underline-4"
aria-controls="underline-4" (click)="currentPage=4">
{{'Part 4 : Job Specification' | translate}}
</a>
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-5" data-hs-tab="#underline-5"
aria-controls="underline-5" (click)="currentPage=5">
{{'Part 5 : Job Competency' | translate}}
</a>
<a style="white-space: normal;align-items:start;"
class="text-base font-medium hs-tab-active:text-lg hs-tab-active:font-bold hs-tab-active:border-secondary hs-tab-active:text-secondary pb-3 px-1 inline-flex items-center gap-2 border-b-[3px] border-transparent whitespace-nowrap text-gray-500 dark:text-white/70 hover:text-secondary"
href="javascript:void(0);" id="underline-item-6" data-hs-tab="#underline-6"
aria-controls="underline-6" (click)="currentPage=6">
{{'Part 6 : Key Performance Indicators: KPIs' | translate}}
</a>
</nav>
</div>
<div class="mt-3 px-2rem !-mt-3 pt-50px">
<div *ngIf="currentPage==1" id="underline-1" role="tabpanel" aria-labelledby="underline-item-1">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part1"></ng-container>
</ng-container>
</div>
<div *ngIf="currentPage==2" id="underline-2" class="hidden" role="tabpanel"
aria-labelledby="underline-item-2">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part2"></ng-container>
</ng-container>
</div>
<div *ngIf="currentPage==3" id="underline-3" class="hidden" role="tabpanel"
aria-labelledby="underline-item-3">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part3"></ng-container>
</ng-container>
</div>
<div *ngIf="currentPage==4" id="underline-4" class="hidden" role="tabpanel"
aria-labelledby="underline-item-4">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part4"></ng-container>
</ng-container>
</div>
<div *ngIf="currentPage==5" id="underline-5" class="hidden" role="tabpanel"
aria-labelledby="underline-item-5">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part5"></ng-container>
</ng-container>
</div>
<div *ngIf="currentPage==6" id="underline-6" class="hidden" role="tabpanel"
aria-labelledby="underline-item-6">
<div class="w-full text-center" *ngIf="empDetail.loading">
<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>
</div>
<ng-container *ngIf="!empDetail.loading">
<ng-container *ngTemplateOutlet="part6"></ng-container>
</ng-container>
</div>
</div>
<!-- <div class="grid grid-cols-12 gap-x-6 mb-3 mt-3">
<div class="col-span-4 mt-3 mb-3 text-center">
<div class="col-span-12">
จัดทำโดย
</div>
<div class="col-span-12">
……………………………
</div>
<div class="col-span-12">
(……………………………)
</div>
<div class="col-span-12">
ตำแหน่ง :
</div>
<div class="col-span-12">
ว/ด/ป : / /
</div>
</div>
<div class="col-span-4 mt-3 mb-3 text-center">
<div class="col-span-12">
ตรวจสอบโดย
</div>
<div class="col-span-12">
……………………………
</div>
<div class="col-span-12">
(……………………………)
</div>
<div class="col-span-12">
ตำแหน่ง :
</div>
<div class="col-span-12">
ว/ด/ป : / /
</div>
</div>
<div class="col-span-4 mt-3 mb-3 text-center">
<div class="col-span-12">
อนุมัติโดย
</div>
<div class="col-span-12">
……………………………
</div>
<div class="col-span-12">
(……………………………)
</div>
<div class="col-span-12">
ตำแหน่ง :
</div>
<div class="col-span-12">
ว/ด/ป : / /
</div>
</div>
</div> -->
</div>
</div>
<ng-template #part1>
<h5 class="box-title mb-3">ส่วนที่ 1 : ข้อมูลทั่วไป (General Information)</h5>
<div class="p-2 pt-0">
<div class="overflow-auto w-1/2 mb-3">
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr>
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ตำแหน่ง (ภาษาไทย)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
เจ้าหน้าที่บัญชี
<td class="!p-2 !text-gray-500">
{{empDetail.data.position.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ตำแหน่ง (ภาษาอังกฤษ)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
Accounting Officer
<td class="!p-2 !text-gray-500">
{{empDetail.data.position.edesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ระดับงาน (Job Grade)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
เจ้าหน้าที่
<td class="!p-2 !text-gray-500">
{{empDetail.data.jl.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<!-- <tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500">
งาน (Unit)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
งานบัญชี
<td class="!p-2 !text-gray-500">
???
</td>
</tr>
</tr> -->
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
แผนก (Section)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
บัญชี
<td class="!p-2 !text-gray-500">
{{empDetail.data.bu2.edesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ส่วน (Division)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
การเงินและบัญชี
<td class="!p-2 !text-gray-500">
{{empDetail.data.bu3.edesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ฝ่าย (Department)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
สำนักงานกลาง
<td class="!p-2 !text-gray-500">
{{empDetail.data.bu1.edesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<!-- <tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500">
สายงาน (Business Line)
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
สนับสนุนธุรกิจ
<td class="!p-2 !text-gray-500">
???
</td>
</tr>
</tr> -->
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<td class="!p-2 font-medium !text-gray-500">
ตำแหน่งผู้บังคับบัญชา
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
หัวหน้าบัญชี
<td class="!p-2 !text-gray-500">
{{empDetail.data.supervisorJobCode.tdesc}}
</td>
</tr>
</tbody>
......@@ -242,42 +416,83 @@
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
1. จัดทำบัญชีทั่วไปและบัญชีรายวันให้ถูกต้องและครบถ้วนตามมาตรฐานบัญชี
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.jobObjective}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
2. ตรวจสอบเอกสารทางการเงินก่อนบันทึกบัญชี
</tbody>
</table>
</div>
</div>
</ng-template>
<ng-template #part2>
<div class="p-2 py-0 grid">
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title mb-1 text-center w-full" style="align-items: center; justify-items: center;">
ชื่อตำแหน่งผู้บังคับบัญชาโดยตรง
</h5>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title text-center w-full" style="align-items: center; justify-items: center;">
<div class="!text-gray-500" style="border: 2px solid;width: 500px;padding: 20px;">
{{empDetail.data.supervisorJobCode.tdesc}}
</div>
</h5>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<div style="width:2px; height:50px; background-color:#000;"></div>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title mt-1 mb-1 text-center w-full" style="align-items: center; justify-items: center;">
ชื่อตำแหน่งของผู้ปฏิบัติงาน
</h5>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title text-center w-full" style="align-items: center; justify-items: center;">
<div class="!text-gray-500" style="border: 2px solid;width: 500px;padding: 20px;">
{{empDetail.data.position.tdesc}}
</div>
</h5>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<div style="width:2px; height:50px; background-color:#000;"></div>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title mt-1 mb-1 text-center w-full" style="align-items: center; justify-items: center;">
ชื่อตำแหน่งและจำนวนผู้ใต้บังคับบัญชาโดยตรง
</h5>
</div>
<div class="col-span-1 grid" style="align-items: center; justify-items: center">
<h5 class="box-title text-center w-full" style="align-items: center; justify-items: center;">
<div style="border: 2px solid;width: auto;padding: 20px;">
<table class="ti-custom-table ti-custom-table-head">
<tbody>
<tr class="!text-gray-500" style="align-items: start"
*ngFor="let item of empDetail.data.positionInJob; let i=index">
<td style="vertical-align: top;" class="!pr-0">
{{i+1}}. ตำแหน่ง&nbsp;:&nbsp;
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
3. สนับสนุนการจัดทำงบการเงินรายเดือน/รายปี
<td style="vertical-align: top;" class="text-start !pl-0">
{{item.position.tdesc}}
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
4. ประสานงานกับฝ่ายที่เกี่ยวข้องเพื่อความถูกต้องของข้อมูลบัญชี
<td class="!pr-0">
จำนวน
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
5. ปฏิบัติงานอื่น ๆ ที่ได้รับมอบหมายจากผู้บังคับบัญชา
<td class="!text-end">
&nbsp;{{item.countPosition}}&nbsp;
</td>
<td class="!pl-0">
คน
</td>
</tr>
</tbody>
</table>
</div>
</h5>
</div>
</div>
</ng-template>
<ng-template #part2>
<h5 class="box-title mb-3">ส่วนที่ 2 : โครงสร้างสายการบังคับบัญชา (Organization Chart)</h5>
</ng-template>
<ng-template #part3>
<h5 class="box-title mb-3">ส่วนที่ 3 : รายละเอียดของงาน (Job Detail)</h5>
<div class="p-2 pt-0">
<table class="ti-custom-table ti-custom-table-head ti-custom-table-hover">
<thead>
......@@ -298,100 +513,70 @@
<td style="vertical-align: top;" class="text-center">
1.งานบริหาร (Management)
</td>
<td style="vertical-align: top;">-</td>
<td class="text-center">0%</td>
<td style="vertical-align: top;">
{{empDetail.data.serviceWorkText}}
</td>
<td class="text-center">
{{empDetail.data.serviceWorkPercent}}
</td>
</tr>
<tr style="align-items: start">
<td style="vertical-align: top;" class="text-center">
2.งานที่รับผิดชอบ (งานปฏิบัติ)
</td>
<td style="vertical-align: top;">
1. บันทึกบัญชีเจ้าหนี้/ลูกหนี้<p></p>
2. จัดทำใบสำคัญจ่าย-รับ<p></p>
3. ตรวจสอบเอกสารภาษี<p></p>
4. ติดตามเอกสารค่าใช้จ่ายจากหน่วยงาน<p></p>
5. สนับสนุนการปิดงบ
{{empDetail.data.responsibleWorkText}}
</td>
<td class="text-center">
{{empDetail.data.responsibleWorkPercent}}
</td>
<td class="text-center">70%</td>
</tr>
<tr style="align-items: start">
<td style="vertical-align: top;" class="text-center">
3.งานที่ได้รับมอบหมายพิเศษ
</td>
<td style="vertical-align: top;">
1. งานโครงการตรวจสอบบัญชี<p></p>
2. งานตรวจสอบภายในเบื้องต้น
{{empDetail.data.specialWorkText}}
</td>
<td class="text-center">
{{empDetail.data.specialWorkPercent}}
</td>
<td class="text-center">10%</td>
</tr>
<tr style="align-items: start">
<td style="vertical-align: top;" class="text-center">
4.งานที่ทุกตำแหน่งต้องปฏิบัต
</td>
<td style="vertical-align: top;">
1. เข้าร่วมกิจกรรมองค์กร<p></p>
2. ปฏิบัติตามระเบียบวินัย<p></p>
3. รักษาความลับข้อมูล<p></p>
4. รายงานความผิดปกติ<p></p>
5. ทำงานร่วมกับทีม
{{empDetail.data.allPositionWorkText}}
</td>
<td class="text-center">
{{empDetail.data.allPositionWorkPercent}}
</td>
<td class="text-center">15%</td>
</tr>
<tr style="align-items: start">
<td style="vertical-align: top;" class="text-center">
5.อื่นๆ
</td>
<td style="vertical-align: top;">
1. สนับสนุนการฝึกอบรม/ตรวจนับ<p></p>
2. งานด้านจัดซื้อที่เกี่ยวข้อง
{{empDetail.data.otherWorkText}}
</td>
<td class="text-center">
{{empDetail.data.otherWorkPercent}}
</td>
<td class="text-center">5%</td>
</tr>
</tbody>
</table>
</div>
</ng-template>
<ng-template #part4>
<h5 class="box-title mb-3">ส่วนที่ 4 : คุณสมบัติที่จำเป็นต่อการปฏิบัติหน้าที่ (Job Specification)</h5>
<div class="p-2 pt-0">
<h5 class="box-title mb-3">การศึกษา/ประสบการณ์ (Education/Experience)</h5>
<div class="overflow-auto w-1/2 mb-3">
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
วุฒิ
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
ปริญญาตรี
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
สาขาวิชา
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
บัญชี หรือการเงิน
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
ประสบการณ์ด้าน
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
ด้านบัญชี
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
อย่างน้อย
</td>
<td class="!p-2">:</td>
<td class="!p-2 !text-gray-500 dark:!text-white/70">
1 ปี
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.educationExperienceText}}
</td>
</tr>
</tbody>
......@@ -402,8 +587,8 @@
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
1. หากมี CPA / CPD จะพิจารณาเป็นพิเศษ
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.cerLicensedText}}
</td>
</tr>
</tbody>
......@@ -415,18 +600,8 @@
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
1. มาตรฐานบัญช
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
2. โปรแกรมบัญชีสำเร็จรูป
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
3. ภาษีอากร
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.especiallyTrainingText}}
</td>
</tr>
</tbody>
......@@ -438,68 +613,24 @@
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<b>
ภาษา (Language) : (ระบุ : ฟัง, พูด, อ่าน, เขียน)
</b>
<p></p>
1. อังกฤษ (ฟัง, พูด, อ่าน, เขียน) มาตรฐาน TOEIC ≥ 500 คะแนน
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<b>
โปรแกรมคอมพิวเตอร์ (Computer Program)
</b>
<p></p>
1. Microsoft Excel<p></p>
2. โปรแกรมบัญชี (เช่น Express, QuickBooks)
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
<b>
อื่นๆ (Others) :
</b>
<p></p>
1. ความละเอียดรอบคอบ<p></p>
2. การจัดการเวลา
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.otherAbilitiesText}}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</ng-template>
<ng-template #part5>
<h5 class="box-title mb-3">ส่วนที่ 5 : ความรู้ ทักษะ ความสามารถในตำแหน่งงาน (Job Competency)</h5>
<div class="p-2 pt-0">
<div class="overflow-auto w-1/2 mb-3">
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
1. ความรู้ด้านบัญชีและภาษีอากร
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
2. ความสามารถในการใช้โปรแกรมบัญช
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
3. ทักษะการจัดการเวลา
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
4. ความละเอียดรอบคอบและความถูกต้อง
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
5. การทำงานเป็นทีม
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.competencyWorkText}}
</td>
</tr>
</tbody>
......@@ -508,34 +639,13 @@
</div>
</ng-template>
<ng-template #part6>
<h5 class="box-title mb-3">ส่วนที่ 6 : ตัวชี้วัดของตำแหน่งงาน (Key Performance Indicators: KPIs)</h5>
<div class="p-2 pt-0">
<div class="overflow-auto w-1/2 mb-3">
<table class="ti-custom-table border-0 whitespace-nowrap">
<tbody>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
1. ความถูกต้องของรายการบัญชี ≥ 98%
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
2. ส่งงบการเงินรายเดือนตรงเวลา 100%
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
3. ความครบถ้วนของเอกสารประกอบบัญชี ≥ 95%
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
4. ลดข้อผิดพลาดจากการตรวจสอบภายใน
</td>
</tr>
<tr class="!border-0">
<td class="!p-2 font-medium !text-gray-500 dark:!text-white/70">
5. ระยะเวลาการปิดบัญชีรายเดือน ≤ 5 วันทำการ
<td class="!p-2 font-medium !text-gray-500">
{{empDetail.data.kpiWorkText}}
</td>
</tr>
</tbody>
......
import { ViewportScroller } from '@angular/common';
import { ChangeDetectorRef, Component } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { TranslateService } from '@ngx-translate/core';
import { ToastrService } from 'ngx-toastr';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { JobCodeModel, MyJobCodeModel } from 'src/app/shared/model/job-code.model';
import { MyStatusModel, StatusModel } from 'src/app/shared/model/status.model';
import { EmpStatusService } from 'src/app/shared/services/emp-status.service';
import { EmployeeService } from 'src/app/shared/services/employee.service';
import { EventgrpService } from 'src/app/shared/services/eventgrp.service';
import { FileService } from 'src/app/shared/services/file.service';
import { JobcodeService } from 'src/app/shared/services/jobcode.service';
import { PmsWorkingTimeService } from 'src/app/shared/services/pms-working-time.service';
export interface BiModel {
name: string,
tools: string[],
degree: string
}
@Component({
selector: 'app-job-description-emp',
templateUrl: './job-description-emp.component.html',
styleUrls: ['./job-description-emp.component.scss']
})
export class JobDescriptionEmpComponent {
pathTitle = ['menu.Organization', 'ข้อมูลลักษณะงาน (JD)']
currentPage = 1
empDetail: { loading: boolean, data: JobCodeModel } = { loading: false, data: new MyJobCodeModel({}) }
constructor(
private toastr: ToastrService,
private cdr: ChangeDetectorRef,
private dialog: MatDialog,
private fileService: FileService,
private eventgrpService: EventgrpService,
private jobcode: JobcodeService,
private translateService: TranslateService
) {
this.translateService.onLangChange.subscribe((event) => {
});
}
ngOnInit(): void {
this.getEmp()
}
getEmp() {
this.empDetail.loading = true
this.jobcode.getEmp().subscribe({
next: response => {
this.empDetail.data = new MyJobCodeModel(response)
this.empDetail.loading = false
this.cdr.detectChanges()
}, error: error => {
this.empDetail.loading = false
this.cdr.detectChanges()
}
})
}
}
\ No newline at end of file
import { ViewportScroller } from '@angular/common';
import { ChangeDetectorRef, Component } from '@angular/core';
import { EmployeeModel, MyEmployeeModel } from 'src/app/shared/model/employee.model';
import { MyStatusModel, StatusModel } from 'src/app/shared/model/status.model';
import { EmpStatusService } from 'src/app/shared/services/emp-status.service';
import { EmployeeService } from 'src/app/shared/services/employee.service';
import { FileService } from 'src/app/shared/services/file.service';
export interface BiModel {
name: string,
tools: string[],
degree: string
}
@Component({
selector: 'app-job-description-ess',
templateUrl: './job-description-ess.component.html',
styleUrls: ['./job-description-ess.component.scss']
})
export class JobDescriptionEssComponent {
}
\ No newline at end of file
......@@ -52,6 +52,7 @@ export interface JobCodeModel {
jl: JlModel
supervisorJobCode: SupervisorJobCodeModel
expectation: number | null
positionInJob: PositionInJobModel[]
}
export class MyJobCodeModel implements JobCodeModel {
......@@ -98,6 +99,7 @@ export class MyJobCodeModel implements JobCodeModel {
jl: JlModel
supervisorJobCode: SupervisorJobCodeModel
expectation: number | null
positionInJob: PositionInJobModel[]
constructor(data: Partial<JobCodeModel>) {
this.jobcodeId = data.jobcodeId || ""
this.companyId = data.companyId || ""
......@@ -142,11 +144,26 @@ export class MyJobCodeModel implements JobCodeModel {
this.jl = new MyJlModel(data?.jl)
this.supervisorJobCode = new MySupervisorJobCodeModel(data?.supervisorJobCode)
this.expectation = data?.expectation ?? null
this.positionInJob = (data?.positionInJob || []).map(e => new MyPositionInJobModel(e))
}
}
export interface PositionInJobModel {
countPosition: number
position: PositionModel
}
export class MyPositionInJobModel implements PositionInJobModel {
countPosition: number
position: PositionModel
constructor(data?: Partial<PositionInJobModel>) {
this.countPosition = data?.countPosition ?? 0
this.position = new MyPositionModel(data?.position || {})
}
}
export interface SupervisorJobCodeModel {
jobCodeId: string
tdesc: string
......
......@@ -4,6 +4,7 @@ import { Observable } from 'rxjs';
import { environment } from 'src/environments/environment';
import { AlertModel } from '../model/alert.model';
import { JobcodeModel } from '../model/jobcode.model';
import { JobCodeModel } from '../model/job-code.model';
@Injectable({
providedIn: 'root'
})
......@@ -12,6 +13,9 @@ export class JobcodeService {
urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) {
}
getEmp(): Observable<JobCodeModel> {
return this.http.get<JobCodeModel>(this.urlApi + "/emp")
}
getById(plId: string): Observable<JobcodeModel> {
return this.http.get<JobcodeModel>(this.urlApi + "/" + plId)
}
......
......@@ -186,6 +186,7 @@ export class NavService implements OnDestroy {
{ id: 'm24', path: 'admin/day-type-registry', title: 'menu.LeaveType', type: 'link', show: true },
{ id: 'm25', path: 'admin/account-settings', title: 'menu.UserSetting', type: 'link', show: true },
{ id: 'm26', path: 'admin/role-permission-config', title: 'menu.AccessPermissions', type: 'link', show: true },
{ id: 'm27', path: 'admin/job-description-emp', title: 'ข้อมูลลักษณะงาน (JD)', type: 'link', show: true },
],
},
{
......
......@@ -196,5 +196,11 @@
"ExcelReport": "Excel Report",
"EvaluationPeriod": "Evaluation Period",
"JobDescription(JD)": "Job Description (JD)",
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "Note: If you do not select a JD level, The system will select all."
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "Note: If you do not select a JD level, The system will select all.",
"Part 1 : General Information": "Part 1 : General Information",
"Part 2 : Organization Chart": "Part 2 : Organization Chart",
"Part 3 : Job Detail": "Part 3 : Job Detail",
"Part 4 : Job Specification": "Part 4 : Job Specification",
"Part 5 : Job Competency": "Part 5 : Job Competency",
"Part 6 : Key Performance Indicators: KPIs": "Part 6 : Key Performance Indicators: KPIs"
}
\ No newline at end of file
......@@ -199,5 +199,11 @@
"ExcelReport": "รายงาน",
"EvaluationPeriod": "แก้ไขรอบการประเมิน",
"JobDescription(JD)": "ลักษณะงาน (JD)",
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "หมายเหตุ ถ้าไม่เลือกระดับ JD ระบบจะทำการเลือกทั้งหมด"
"NoteIfYouDoNotSelectAJDLevelTheSystemWillSelectAll": "หมายเหตุ ถ้าไม่เลือกระดับ JD ระบบจะทำการเลือกทั้งหมด",
"Part 1 : General Information": "ส่วนที่ 1 : ข้อมูลทั่วไป",
"Part 2 : Organization Chart": "ส่วนที่ 2 : โครงสร้างสายการบังคับบัญชา",
"Part 3 : Job Detail": "ส่วนที่ 3 : รายละเอียดของงาน",
"Part 4 : Job Specification": "ส่วนที่ 4 : คุณสมบัติที่จำเป็นต่อการปฏิบัติหน้าที่",
"Part 5 : Job Competency": "ส่วนที่ 5 : ความรู้ ทักษะ ความสามารถในตำแหน่งงาน",
"Part 6 : Key Performance Indicators: KPIs": "ส่วนที่ 6 : ตัวชี้วัดของตำแหน่งงาน"
}
\ 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