Commit f7c9eb37 by Nattana Chaiyamat

การจัดการหัวข้อการประเมินเวลาทำงาน

parent 56fbcd85
......@@ -156,6 +156,7 @@ import { EventgrpService } from 'src/app/shared/services/eventgrp.service';
import { PmsEvaluationCycleService } from 'src/app/shared/services/pms-evaluation-cycle.service';
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';
export const MY_DATE_FORMATS = {
parse: {
......@@ -342,6 +343,7 @@ export class CustomDateAdapter extends NativeDateAdapter {
EventgrpService,
PmsEvaluationCycleService,
PmsEvaluationAssessmentService,
PmsWorkingTimeService,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpRequestInterceptor,
......
......@@ -95,29 +95,45 @@
</ng-container>
</tr>
</thead>
<tbody *ngIf="!dataListFilter().length">
<tbody *ngIf="pmsWorkingTime.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="!pmsWorkingTime.loading&&!pmsWorkingTimeFilter().length">
<tr>
<td class="text-center" colspan="100%">
ไม่พบข้อมูล
</td>
</tr>
</tbody>
<tbody *ngIf="dataListFilter().length">
<tbody *ngIf="!pmsWorkingTime.loading&&pmsWorkingTimeFilter().length">
<tr
*ngFor="let item of dataListFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index">
<!-- <td class="text-center">
*ngFor="let item of pmsWorkingTimeFilter() | slice:((currentPage-1) * 10) : (((currentPage-1) * 10) + 10);let i = index">
<td class="text-center">
<input type="checkbox" class="ti-form-checkbox cursor-pointer" [(ngModel)]="item.check"
(ngModelChange)="dataListCheck()" id="checkbox-{{item.code}}">
(ngModelChange)="dataListCheck()" id="checkbox-{{item.data.pmsWorkingTimeId}}">
</td>
<td class="text-center">
<label for="checkbox-{{item.code}}">&nbsp;{{item.code}}</label>
<label
for="checkbox-{{item.data.pmsWorkingTimeId}}">&nbsp;{{item.data.pmsWorkingTimeId}}</label>
</td>
<td>{{item.tdesc}}</td>
<td>{{item.edesc}}</td>
<td>{{item.data.tdesc}}</td>
<td>{{item.data.detailUnit}}</td>
<td>{{item.data.weight}}</td>
<td class="flex justify-center">
<i class="ti ti-edit cursor-pointer i-gray fs-l px-1" (click)="modalStatus='edit';selectData(item)"></i>
<i class="ti ti-trash cursor-pointer i-gray fs-l px-1" (click)="modalStatus='delete';selectData(item)"></i>
</td> -->
<i class="ti ti-edit cursor-pointer i-gray fs-l px-1"
data-hs-overlay="#time-attendance-modal"
(click)="modalStatus='edit';selectData(item.data)"></i>
<i class="ti ti-trash cursor-pointer i-gray fs-l px-1"
data-hs-overlay="#time-attendance-alert-modal"
(click)="modalStatus='delete';selectData(item.data)"></i>
</td>
</tr>
</tbody>
</table>
......@@ -154,9 +170,10 @@
</li>
</ul>
<ul class="nav-tabs mt-3">
<span>Show {{((currentPage-1) * 10)+1}} to {{dataListFilter().length<10 ?dataListFilter().length:
(currentPage==page.length ? ((currentPage * 10) - ((currentPage * 10) - dataListFilter().length)
) :(currentPage * 10) ) }} of {{dataListFilter().length}} items</span>
<span>Show {{((currentPage-1) * 10)+1}} to {{pmsWorkingTimeFilter().length<10
?pmsWorkingTimeFilter().length: (currentPage==page.length ? ((currentPage * 10) - ((currentPage
* 10) - pmsWorkingTimeFilter().length) ) :(currentPage * 10) ) }} of
{{pmsWorkingTimeFilter().length}} items</span>
</ul>
</nav>
</div>
......@@ -209,97 +226,143 @@
<div class="ti-modal-body padding-16px pt-0 overflow-y-0">
<label class="ti-form-label mt-2rem">รหัสประเภทวัน<span class="text-danger">*</span></label>
<input type="text" class="ti-form-input w-1/2" [ngClass]="{'bg-input-readonly':modalStatus=='edit'}"
[readonly]="modalStatus=='edit'">
[readonly]="modalStatus=='edit'" [(ngModel)]="pmsWorkingTime.select.pmsWorkingTimeId">
<label class="ti-form-label mt-2rem">รหัสประเภทวัน <span class="text-danger">*</span></label>
<div *ngFor="let item of eventgrp.selectList; let i=index;let f=first" [class.mt-2]="!f"
class="col-span-6 sm:col-span-6 ">
<div class="flex">
<div class="relative flex rounded-sm w-2/3">
<input type="text" name="hs-leading-button-add-on-with-icon-and-button"
class="ti-form-input rounded-sm ltr:rounded-r-sm rtl:rounded-l-sm focus:z-10" readonly
style="padding-right: 2.5rem;" [(ngModel)]="item.tdesc">
<div *ngFor="let item of pmsWorkingTime.select.emeventgrp;let i = index;let f=first;let l = last"
class="grid grid-cols-2">
<div class="col-span-1">
<div class="flex relative">
<input type="text" class="ti-form-input pointer-events-none" readonly
[ngClass]="{'input-list-f1': f&&!l, 'input-list-c1': !f&&!l, 'input-list-l1': !f&&l, 'input-list-fl1': f&&l}"
[(ngModel)]="item.eventgrpId">
<div
[ngClass]="{'input-list-line-f': f&&!l, 'input-list-line-c': !f&&!l, 'input-list-line-l': !f&&l, 'input-list-line-fl': f&&l}">
<div class="input-list-line"></div>
</div>
<input type="text" class="ti-form-input pointer-events-none" readonly
[ngClass]="{'input-list-f2': f&&!l, 'input-list-c2': !f&&!l, 'input-list-l2': !f&&l, 'input-list-fl2': f&&l}"
[(ngModel)]="item.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"
<button *ngIf="item.eventgrpId" type="button" class="flex items-center text-red-500"
(click)="eventgrp.selectIndex=i;selectEventgrp()">
<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="#time-attendance-eventgrp-table-modal"
(click)="eventgrp.selectIndex=i">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</div>
</div>
</div>
<div class="col-span-1 ml-1" *ngIf="f">
<ng-component *ngTemplateOutlet="emeventgrpSearchButton"></ng-component>
</div>
</div>
<div class="grid grid-cols-2" *ngIf="!pmsWorkingTime.select.emeventgrp.length">
<div class="col-span-1">
<div class="flex relative">
<input type="text" class="ti-form-input input-list-fl1 pointer-events-none" readonly>
<div class="input-list-line-fl">
<div class="input-list-line"></div>
</div>
<input type="text" class="ti-form-input input-list-fl2 pointer-events-none" readonly>
</div>
</div>
<div class="col-span-1 ml-1">
<ng-component *ngTemplateOutlet="emeventgrpSearchButton"></ng-component>
</div>
</div>
<ng-template #emeventgrpSearchButton>
<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 !m-0 h-full"
style="height: 44.8px !important;"
(click)="modal.search='';modalSearchChange(eventgrpListFilter())"
data-hs-overlay="#time-attendance-eventgrp-table-modal">
<i class="ri-search-line cursor-pointer text-gray"></i>
</button>
</ng-template>
<label class="ti-form-label mt-2rem">ชื่อหัวข้อ (ไทย)<span class="text-danger">*</span></label>
<input type="text" class="ti-form-input">
<input type="text" class="ti-form-input" [(ngModel)]="pmsWorkingTime.select.tdesc">
<label class="ti-form-label mt-2rem">ชื่อหัวข้อ (อังกฤษ)</label>
<input type="text" class="ti-form-input">
<input type="text" class="ti-form-input" [(ngModel)]="pmsWorkingTime.select.edesc">
<label class="ti-form-label mt-2rem">เป้าหมายผลงาน</label>
<input type="text" class="ti-form-input">
<input type="text" class="ti-form-input" [(ngModel)]="pmsWorkingTime.select.weight">
<label class="ti-form-label mt-2rem">น้ำหนัก</label>
<input type="text" class="ti-form-input">
<input type="text" class="ti-form-input"
oninput="this.value = this.value.replace(/[^\d.]/g, '').replace(/(\..*?)\..*/g, '$1').replace(/(\..*?)(\d{2})./g, '$1$2');"
onchange="this.value = this.value.replace('', '0');this.value = parseFloat(this.value).toFixed(2)"
[(ngModel)]="pmsWorkingTime.select.weight">
<label class="ti-form-label mt-2rem">ค่าเป้าหมาย</label>
<div class="grid grid-cols-1 gap-y-2">
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">A (5 คะแนน) ชื่อ</label>
<input type="text" class="ti-form-input col-span-10">
<input type="text" class="ti-form-input col-span-10"
[(ngModel)]="pmsWorkingTime.select.targetADetail">
</div>
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">เงื่อนไข ช่วงระหว่าง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionAMin">
<label class="ti-form-label col-span-1 align-center text-center m-0">ถึง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionAMax">
</div>
</div>
<div class="grid grid-cols-1 gap-y-2 mt-2rem">
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">B (4 คะแนน) ชื่อ</label>
<input type="text" class="ti-form-input col-span-10">
<input type="text" class="ti-form-input col-span-10"
[(ngModel)]="pmsWorkingTime.select.targetBDetail">
</div>
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">เงื่อนไข ช่วงระหว่าง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionBMin">
<label class="ti-form-label col-span-1 align-center text-center m-0">ถึง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionBMax">
</div>
</div>
<div class="grid grid-cols-1 gap-y-2 mt-2rem">
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">C (3 คะแนน) ชื่อ</label>
<input type="text" class="ti-form-input col-span-10">
<input type="text" class="ti-form-input col-span-10"
[(ngModel)]="pmsWorkingTime.select.targetCDetail">
</div>
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">เงื่อนไข ช่วงระหว่าง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionCMin">
<label class="ti-form-label col-span-1 align-center text-center m-0">ถึง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionCMax">
</div>
</div>
<div class="grid grid-cols-1 gap-y-2 mt-2rem">
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">D (2 คะแนน) ชื่อ</label>
<input type="text" class="ti-form-input col-span-10">
<input type="text" class="ti-form-input col-span-10"
[(ngModel)]="pmsWorkingTime.select.targetDDetail">
</div>
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">เงื่อนไข ช่วงระหว่าง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionDMin">
<label class="ti-form-label col-span-1 align-center text-center m-0">ถึง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionDMax">
</div>
</div>
<div class="grid grid-cols-1 gap-y-2 mt-2rem">
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">E (1 คะแนน) ชื่อ</label>
<input type="text" class="ti-form-input col-span-10">
<input type="text" class="ti-form-input col-span-10"
[(ngModel)]="pmsWorkingTime.select.targetEDetail">
</div>
<div class="col-span-1 grid grid-cols-12 gap-x-2">
<label class="ti-form-label col-span-2 align-center m-0">เงื่อนไข ช่วงระหว่าง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionEMin">
<label class="ti-form-label col-span-1 align-center text-center m-0">ถึง</label>
<input type="text" class="ti-form-input col-span-2">
<input type="text" class="ti-form-input col-span-2"
[(ngModel)]="pmsWorkingTime.select.conditionEMax">
</div>
</div>
<div class="flex justify-end mt-2rem mb-1rem">
......@@ -309,7 +372,8 @@
ย้อนกลับ
</button>
<button type="button" class="ti-btn ti-btn-success" data-hs-overlay="#time-attendance-alert-modal"
[class.ti-btn-disabled]="false" [disabled]="false">
[class.ti-btn-disabled]="!pmsWorkingTime.select.pmsWorkingTimeId||!pmsWorkingTime.select.emeventgrp.length||!pmsWorkingTime.select.tdesc"
[disabled]="!pmsWorkingTime.select.pmsWorkingTimeId||!pmsWorkingTime.select.emeventgrp.length||!pmsWorkingTime.select.tdesc">
บันทึกข้อมูล
</button>
</div>
......@@ -360,7 +424,7 @@
ย้อนกลับ
</button>
<a class="ti-btn ti-btn-success" href="javascript:void(0);"
data-hs-overlay="#time-attendance-alert-modal">
data-hs-overlay="#time-attendance-alert-modal" (click)="updatePmsWorkingTime()">
บันทึกข้อมูล
</a>
</ng-container>
......@@ -371,7 +435,7 @@
ย้อนกลับ
</button>
<a class="ti-btn ti-btn-danger" href="javascript:void(0);"
data-hs-overlay="#time-attendance-alert-modal">
data-hs-overlay="#time-attendance-alert-modal" (click)="deletePmsWorkingTime()">
ลบข้อมูล
</a>
</ng-container>
......
import { ChangeDetectorRef, Component } from '@angular/core';
import { ToastrService } from 'ngx-toastr';
import { EventgrpModel, MyEventgrpModel } from 'src/app/shared/model/eventgrp.model';
import { MyEmeventgrpModel } from 'src/app/shared/model/emeventgrp.model';
import { EventgrpModel, MyEventgrpModel, } from 'src/app/shared/model/eventgrp.model';
import { PmsWorkingTimeModel, MyPmsWorkingTimeModel } from 'src/app/shared/model/pms-working-time.model';
import { EventgrpService } from 'src/app/shared/services/eventgrp.service';
import { FileService } from 'src/app/shared/services/file.service';
import { PmsWorkingTimeService } from 'src/app/shared/services/pms-working-time.service';
interface table {
currentPage: number,
page: number[],
......@@ -31,16 +34,66 @@ export class TimeAttendanceComponent {
eventgrp: { loading: boolean, selectIndex: number, selectList: EventgrpModel[], dataList: { check: boolean, data: EventgrpModel }[] } = { loading: false, selectIndex: -1, selectList: [new MyEventgrpModel()], dataList: [] }
pmsWorkingTime: { loading: boolean, select: PmsWorkingTimeModel, dataList: { check: boolean, data: PmsWorkingTimeModel }[] } = { loading: false, select: new MyPmsWorkingTimeModel(), dataList: [] }
constructor(
private toastr: ToastrService,
private cdr: ChangeDetectorRef,
private fileService: FileService,
private eventgrpService: EventgrpService
private eventgrpService: EventgrpService,
private pmsWorkingTimeService: PmsWorkingTimeService,
) { }
ngOnInit(): void {
this.getEventgrpList()
this.getPmsWorkingTimeList()
}
getPmsWorkingTimeList() {
this.pmsWorkingTime.loading = true
this.pmsWorkingTimeService.getList().subscribe({
next: response => {
this.pmsWorkingTime.dataList = response.map(x => ({ check: false, data: new MyPmsWorkingTimeModel(x) }))
this.pmsWorkingTime.loading = false
this.isDataListCheckedAll = false
this.dataListCheckAll()
this.searchChange()
this.cdr.detectChanges();
}, error: error => {
this.pmsWorkingTime.loading = false
this.cdr.detectChanges()
}
})
}
pmsWorkingTimeFilter() {
return this.pmsWorkingTime.dataList.filter((x) => {
const data = x.data
const match = data.pmsWorkingTimeId.toLowerCase().includes(this.search.toLowerCase()) ||
data.tdesc.toLowerCase().includes(this.search.toLowerCase()) ||
data.detailUnit.toLowerCase().includes(this.search.toLowerCase()) ||
(data.weight + "").toLowerCase().includes(this.search.toLowerCase())
return match;
});
}
searchChange() {
this.currentPage = 1;
const filteredData = this.pmsWorkingTimeFilter();
this.page = Array.from({ length: Math.ceil(filteredData.length / 10) }, (_, i) => i + 1);
this.dataListCheck();
}
selectData(data?: PmsWorkingTimeModel) {
this.pmsWorkingTime.select = new MyPmsWorkingTimeModel(data)
}
dataListCheckAll() {
const selectAll = this.isDataListCheckedAll;
this.pmsWorkingTimeFilter().forEach(x => x.check = selectAll);
this.dataListCheck();
}
dataListCheck() {
const dataCheck = this.pmsWorkingTimeFilter();
this.isDataListCheckedAll = dataCheck.length ? dataCheck.every(x => x.check) : false;
this.numDataListChecked = this.pmsWorkingTime.dataList.filter(x => x.check).length;
this.isDataListChecked = Boolean(this.numDataListChecked)
}
getEventgrpList() {
this.eventgrp.loading = true
this.eventgrpService.getList().subscribe({
......@@ -66,53 +119,18 @@ export class TimeAttendanceComponent {
}
selectEventgrp(data?: EventgrpModel) {
if (!data) {
this.eventgrp.selectList.splice(this.eventgrp.selectIndex, 1);
this.pmsWorkingTime.select.emeventgrp.splice(this.eventgrp.selectIndex, 1);
return;
}
this.eventgrp.selectList[this.eventgrp.selectIndex] = new MyEventgrpModel(data);
if (this.eventgrp.selectIndex === this.eventgrp.selectList.length - 1) {
this.eventgrp.selectList.push(new MyEventgrpModel());
}
}
dataListFilter() {
// return this.pmsGrade.dataList.filter((x) => {
// const data = x.data
// const match = data.gradeId.toLowerCase().includes(this.search.toLowerCase()) || data.tdesc.toLowerCase().includes(this.search.toLowerCase()) || data.edesc.toLowerCase().includes(this.search.toLowerCase());
// return match;
// });
return []
}
dataListCheckAll() {
// const selectAll = this.isDataListCheckedAll;
// this.dataListFilter().forEach(x => x.check = selectAll);
// this.dataListCheck();
this.pmsWorkingTime.select.emeventgrp.push(new MyEmeventgrpModel(data))
}
dataListCheck() {
// const dataCheck = this.dataListFilter();
// this.isDataListCheckedAll = dataCheck.length ? dataCheck.every(x => x.check) : false;
// this.numDataListChecked = this.pmsGrade.dataList.filter(x => x.check).length;
// this.isDataListChecked = Boolean(this.numDataListChecked)
}
searchChange() {
this.currentPage = 1;
const filteredData = this.dataListFilter();
this.page = Array.from({ length: Math.ceil(filteredData.length / 10) }, (_, i) => i + 1);
this.dataListCheck();
}
selectData() {
}
clearData(modalStatus: string) {
if (modalStatus == 'add') {
this.pmsWorkingTime.select = new MyPmsWorkingTimeModel()
} else if (modalStatus == 'edit') {
this.pmsWorkingTime.select = new MyPmsWorkingTimeModel({ pmsWorkingTimeId: this.pmsWorkingTime.select.pmsWorkingTimeId })
}
this.eventgrp.selectList = [new MyEventgrpModel()]
}
......@@ -121,4 +139,55 @@ export class TimeAttendanceComponent {
this.modal.currentPage = 1
this.modal.page = Array.from({ length: Math.ceil(dataList.length / 10) }, (_, i) => i + 1);
}
updatePmsWorkingTime() {
this.pmsWorkingTime.loading = true
this.pmsWorkingTimeService.post(new MyPmsWorkingTimeModel(this.pmsWorkingTime.select)).subscribe({
next: response => {
if (response.success) {
this.showAlert(response.message, 'success')
this.getPmsWorkingTimeList()
this.searchChange()
} else {
this.showAlert(response.message, 'error')
this.pmsWorkingTime.loading = false
}
this.cdr.detectChanges()
}, error: error => {
this.showAlert(error.message, 'error')
this.pmsWorkingTime.loading = false
this.cdr.detectChanges()
}
})
}
deletePmsWorkingTime() {
let body: PmsWorkingTimeModel[] = []
if (this.modalStatus == "deleteGroup") {
body = this.pmsWorkingTime.dataList.filter(x => x.check).map(x => new MyPmsWorkingTimeModel(x.data))
} else {
body = [new MyPmsWorkingTimeModel(this.pmsWorkingTime.select)]
}
this.pmsWorkingTime.loading = true
this.pmsWorkingTimeService.delete(body).subscribe({
next: response => {
if (response.success) {
this.showAlert(response.message, 'success')
this.getPmsWorkingTimeList()
} else {
this.showAlert(response.message, 'error')
this.pmsWorkingTime.loading = false
this.cdr.detectChanges()
}
}, error: error => {
this.showAlert(error.message, 'error')
this.pmsWorkingTime.loading = false
this.cdr.detectChanges()
}
})
}
showAlert(text: string, type: 'success' | 'error') {
this.toastr[type](text, 'แจ้งเตือน', {
timeOut: 3000,
positionClass: 'toast-top-right',
})
}
}
export interface EmeventgrpModel {
eventgrpId: string
companyId: string
tdesc: string
edesc: string
event_status: number
limits: number
daytype: string
datebeforerequest: number
service_year: number
limit_times: number
clear_leave: number
privilege_event: string
limit_probation: number
sex_type: string
guarantee: string
guarantee_date: number
remarks: string
display_order: number
display: number
displayEss: number
event_desc: string
display_limit: number
lvpastlimit: number
lvfuturelimit: number
day_leave_stat: number
fhalf_leave_stat: number
shalf_leave_stat: number
hour_leave_stat: number
month_limit0: number
month_limit1: number
month_limit2: number
month_limit3: number
leaverounding: string
clear_leave_month: number
limit_hours: string
sharelimit_event: string
needapprovedate: number
min_limit_hours: string
advance_approve: string
approve_before: number
approve_after: number
tsdesc: string
esdesc: string
dctsal: string
dctsvc: string
prev_last: string
yos: string
ispay: number
limit_per_request: number
}
export class MyEmeventgrpModel implements EmeventgrpModel {
eventgrpId: string
companyId: string
tdesc: string
edesc: string
event_status: number
limits: number
daytype: string
datebeforerequest: number
service_year: number
limit_times: number
clear_leave: number
privilege_event: string
limit_probation: number
sex_type: string
guarantee: string
guarantee_date: number
remarks: string
display_order: number
display: number
displayEss: number
event_desc: string
display_limit: number
lvpastlimit: number
lvfuturelimit: number
day_leave_stat: number
fhalf_leave_stat: number
shalf_leave_stat: number
hour_leave_stat: number
month_limit0: number
month_limit1: number
month_limit2: number
month_limit3: number
leaverounding: string
clear_leave_month: number
limit_hours: string
sharelimit_event: string
needapprovedate: number
min_limit_hours: string
advance_approve: string
approve_before: number
approve_after: number
tsdesc: string
esdesc: string
dctsal: string
dctsvc: string
prev_last: string
yos: string
ispay: number
limit_per_request: number
constructor(data?: Partial<EmeventgrpModel>) {
this.eventgrpId = data?.eventgrpId || ""
this.companyId = data?.companyId || ""
this.tdesc = data?.tdesc || ""
this.edesc = data?.edesc || ""
this.event_status = data?.event_status ?? 0
this.limits = data?.limits ?? 0
this.daytype = data?.daytype || ""
this.datebeforerequest = data?.datebeforerequest ?? 0
this.service_year = data?.service_year ?? 0
this.limit_times = data?.limit_times ?? 0
this.clear_leave = data?.clear_leave ?? 0
this.privilege_event = data?.privilege_event || ""
this.limit_probation = data?.limit_probation ?? 0
this.sex_type = data?.sex_type || ""
this.guarantee = data?.guarantee || ""
this.guarantee_date = data?.guarantee_date ?? 0
this.remarks = data?.remarks || ""
this.display_order = data?.display_order ?? 0
this.display = data?.display ?? 0
this.displayEss = data?.displayEss ?? 0
this.event_desc = data?.event_desc || ""
this.display_limit = data?.display_limit ?? 0
this.lvpastlimit = data?.lvpastlimit ?? 0
this.lvfuturelimit = data?.lvfuturelimit ?? 0
this.day_leave_stat = data?.day_leave_stat ?? 0
this.fhalf_leave_stat = data?.fhalf_leave_stat ?? 0
this.shalf_leave_stat = data?.shalf_leave_stat ?? 0
this.hour_leave_stat = data?.hour_leave_stat ?? 0
this.month_limit0 = data?.month_limit0 ?? 0
this.month_limit1 = data?.month_limit1 ?? 0
this.month_limit2 = data?.month_limit2 ?? 0
this.month_limit3 = data?.month_limit3 ?? 0
this.leaverounding = data?.leaverounding || ""
this.clear_leave_month = data?.clear_leave_month ?? 0
this.limit_hours = data?.limit_hours || ""
this.sharelimit_event = data?.sharelimit_event || ""
this.needapprovedate = data?.needapprovedate ?? 0
this.min_limit_hours = data?.min_limit_hours || ""
this.advance_approve = data?.advance_approve || ""
this.approve_before = data?.approve_before ?? 0
this.approve_after = data?.approve_after ?? 0
this.tsdesc = data?.tsdesc || ""
this.esdesc = data?.esdesc || ""
this.dctsal = data?.dctsal || ""
this.dctsvc = data?.dctsvc || ""
this.prev_last = data?.prev_last || ""
this.yos = data?.yos || ""
this.ispay = data?.ispay ?? 0
this.limit_per_request = data?.limit_per_request ?? 0
}
}
import { EmeventgrpModel, MyEmeventgrpModel } from "./emeventgrp.model"
export interface PmsWorkingTimeModel {
pmsWorkingTimeId: string
companyId: string
meventgrpId: string
tdesc: string
edesc: string
weight: number
detailUnit: string
performanceTargets: string
targetADetail: string
conditionAMin: string
conditionAMax: string
targetBDetail: string
conditionBMin: string
conditionBMax: string
targetCDetail: string
conditionCMin: string
conditionCMax: string
targetDDetail: string
conditionDMin: string
conditionDMax: string
targetEDetail: string
conditionEMin: string
conditionEMax: string
emeventgrp: EmeventgrpModel[]
}
export class MyPmsWorkingTimeModel implements PmsWorkingTimeModel {
pmsWorkingTimeId: string
companyId: string
meventgrpId: string
tdesc: string
edesc: string
weight: number
detailUnit: string
performanceTargets: string
targetADetail: string
conditionAMin: string
conditionAMax: string
targetBDetail: string
conditionBMin: string
conditionBMax: string
targetCDetail: string
conditionCMin: string
conditionCMax: string
targetDDetail: string
conditionDMin: string
conditionDMax: string
targetEDetail: string
conditionEMin: string
conditionEMax: string
emeventgrp: EmeventgrpModel[]
constructor(data?: Partial<PmsWorkingTimeModel>) {
this.pmsWorkingTimeId = data?.pmsWorkingTimeId || ""
this.companyId = data?.companyId || ""
this.meventgrpId = data?.meventgrpId || ""
this.tdesc = data?.tdesc || ""
this.edesc = data?.edesc || ""
this.weight = data?.weight ?? 0
this.detailUnit = data?.detailUnit || ""
this.performanceTargets = data?.performanceTargets || ""
this.targetADetail = data?.targetADetail || ""
this.conditionAMin = data?.conditionAMin || ""
this.conditionAMax = data?.conditionAMax || ""
this.targetBDetail = data?.targetBDetail || ""
this.conditionBMin = data?.conditionBMin || ""
this.conditionBMax = data?.conditionBMax || ""
this.targetCDetail = data?.targetCDetail || ""
this.conditionCMin = data?.conditionCMin || ""
this.conditionCMax = data?.conditionCMax || ""
this.targetDDetail = data?.targetDDetail || ""
this.conditionDMin = data?.conditionDMin || ""
this.conditionDMax = data?.conditionDMax || ""
this.targetEDetail = data?.targetEDetail || ""
this.conditionEMin = data?.conditionEMin || ""
this.conditionEMax = data?.conditionEMax || ""
this.emeventgrp = data?.emeventgrp?.map(x => new MyEmeventgrpModel(x)) || []
}
}
import { HttpClient, HttpHeaders } 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 { PmsWorkingTimeModel } from '../model/pms-working-time.model';
@Injectable({
providedIn: 'root'
})
export class PmsWorkingTimeService {
api = "/pms-working-time"
urlApi = environment.baseUrl + this.api
constructor(private http: HttpClient) {
}
getById(pmsWorkingTimeId: string): Observable<PmsWorkingTimeModel> {
return this.http.get<PmsWorkingTimeModel>(this.urlApi + "/" + pmsWorkingTimeId)
}
getList(): Observable<PmsWorkingTimeModel[]> {
return this.http.get<PmsWorkingTimeModel[]>(this.urlApi + "/lists")
}
post(body: PmsWorkingTimeModel): Observable<AlertModel> {
return this.http.post<AlertModel>(this.urlApi, body)
}
delete(body: PmsWorkingTimeModel[]): Observable<AlertModel> {
const options = {
headers: new HttpHeaders({
"Content-Type": "application/json",
}),
body: body
};
return this.http.delete<AlertModel>(this.urlApi, options)
}
}
\ 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