import { defineStore } from 'pinia' import { ref } from 'vue' import type { FormData, Datalist } from '@/interface/response/checkin' import { useCounterMixin } from '@/stores/mixin' import { calculateFiscalYear } from '@/utils/function' const mixin = useCounterMixin() const { date2Thai } = mixin /** store for checkin history*/ export const useCheckIn = defineStore('checkin', () => { const year = ref(calculateFiscalYear(new Date())) //ปีงบประมาณ const rows = ref([]) const tab = ref('history') /** * ฟังก์ชั่นสำหรับ map ข้อมูล เพื่อแสดงรายการในตารางประวัติการลงเวลา * @param data รายการข้อมูลทีต้องการ map เป็น array ที่ประกอบด้วย object ตาม FormData */ async function fetchHistoryList(data: FormData[]) { rows.value = [] const dataList: Datalist[] = data.map((e: FormData) => ({ checkInId: e.checkInId, checkInDate: e.checkInDate ? date2Thai(e.checkInDate) : null, checkInDateTime: e.checkInDate ? e.checkInDate : e.checkOutDate, checkInTime: e.checkInTime, checkOutTime: e.checkOutTime != '' ? e.checkOutTime : '-', checkInStatus: e.checkInStatus ? convertStatus(e.checkInStatus) : '-', checkOutStatus: e.checkOutStatus != null ? convertStatus(e.checkOutStatus) : '-', checkInLocation: e.checkInLocation ? e.checkInLocation : '-', checkOutLocation: e.checkOutLocation != '' ? e.checkOutLocation : '-', editStatus: e.editStatus != '' ? convertEditStatus(e.editStatus) : '', editReason: e.editReason, isEdit: e.isEdit, checkOutDate: e.checkOutDate ? date2Thai(e.checkOutDate) : null, })) rows.value = dataList } /** * ฟังก์ชั่นสำหรับ convert ข้อความสถานะของการลงเวลา ปกติ, ขาดราชการ หรือสาย * @param status ฟิลด์สถานะที่มาจาก API * @returns ข้อความสถานะ ปกติ, ขาดราชการ หรือสาย */ function convertStatus(status: string) { switch (status) { case 'ABSENT': return 'ขาดราชการ' case 'NORMAL': return 'ปกติ' case 'LATE': return 'สาย' case 'NOT_COMPLETE': return 'ปฏิบัติงานไม่ครบตามกำหนดเวลา' default: return '-' } } /** * ฟังก์ชั่นสำหรับ convert ข้อความสถานะการขอแก้ไข/การขอลงเวลาพิเศษ * @param val ฟิลด์สถานะการขอแก้ไข/การขอลงเวลาพิเศษที่มาจาก API * @returns ข้อความสถานะการขอแก้ไข/การขอลงเวลาพิเศษ */ function convertEditStatus(val: string) { switch (val) { case 'PENDING': return 'รออนุมัติ' case 'APPROVE': return 'อนุมัติ' case 'REJECT': return 'ไม่อนุมัติ' default: return '' } } /** * ฟังก์ชั่นสำหรับแสดง class กรณีสถานะการขอลงเวลาพิเศษ * @param val ข้อความสถานะการขอลงเวลาพิเศษที่ convert แล้ว * @returns ค่าสีที่ต้องการแสดงตามข้อความสถานะ */ function classColorStatus(val: string) { switch (val) { case 'รออนุมัติ': return 'orange' case 'อนุมัติ': return 'green' case 'ไม่อนุมัติ': return 'red' default: return '' } } return { rows, year, fetchHistoryList, classColorStatus, tab, } })