/* eslint-disable @typescript-eslint/no-explicit-any */ import { PUBLIC_BASE_API_URL } from '$env/static/public'; import { fail } from '@sveltejs/kit'; export async function load({ cookies }) { return { accessToken: cookies.get('accessToken') }; } export const actions = { create: async ({ cookies, request, getClientAddress }) => { const data = await request.formData(); const name = data.get('name'); const origin = data.get('origin'); const dateJoin = data.get('dateJoin'); const dateResign = data.get('dateResign'); const referralBy = data.get('referralBy'); const referralFeePaidAt = data.get('referralFeePaidAt'); const isActive = data.get('isActive'); const basicSalary = Number(data.get('basicSalary')); const monthlyAllowanceAmount = Number(data.get('monthlyAllowanceAmount')); const annualLeave = Number(data.get('annualLeave')); const sickLeave = Number(data.get('sickLeave')); const epfRatePer = Number(data.get('epfRatePer')); const shouldDeductSocso = data.get('shouldDeductSocso'); const reqBody = JSON.stringify({ name, origin: origin === '' ? null : origin, dateJoin, dateResign: dateResign === '' ? null : dateResign, referralBy: referralBy === '' ? null : referralBy, referralFeePaidAt: referralFeePaidAt === '' ? null : referralFeePaidAt, isActive, basicSalary, monthlyAllowanceAmount, annualLeave, sickLeave, epfRatePer, shouldDeductSocso }); const response = await fetch(`${PUBLIC_BASE_API_URL}/employee`, { body: reqBody, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${cookies.get('accessToken')}`, 'x-forwarded-for': getClientAddress(), 'x-real-ip': getClientAddress() }, method: 'POST' }); const responseData = await response.json(); if (responseData.statusCode) { return fail(responseData.statusCode, { id: 'inputData', message: JSON.stringify(responseData.message) }); } return { id: 'inputData', message: 'Created' }; }, update: async ({ cookies, request, getClientAddress }) => { const data = await request.formData(); const id = data.get('id'); const name = data.get('name'); const origin = data.get('origin'); const dateJoin = data.get('dateJoin'); const dateResign = data.get('dateResign'); const referralBy = data.get('referralBy'); const referralFeePaidAt = data.get('referralFeePaidAt'); const isActive = data.get('isActive'); const basicSalary = Number(data.get('basicSalary')); const monthlyAllowanceAmount = Number(data.get('monthlyAllowanceAmount')); const annualLeave = Number(data.get('annualLeave')); const sickLeave = Number(data.get('sickLeave')); const epfRatePer = Number(data.get('epfRatePer')); const shouldDeductSocso = data.get('shouldDeductSocso'); const reqBody = JSON.stringify({ name, origin: origin === '' ? null : origin, dateJoin, dateResign: dateResign === '' ? null : dateResign, referralBy: referralBy === '' ? null : referralBy, referralFeePaidAt: referralFeePaidAt === '' ? null : referralFeePaidAt, isActive, basicSalary, monthlyAllowanceAmount, annualLeave, sickLeave, epfRatePer, shouldDeductSocso }); const response = await fetch(`${PUBLIC_BASE_API_URL}/employee/${id}`, { body: reqBody, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${cookies.get('accessToken')}`, 'x-forwarded-for': getClientAddress(), 'x-real-ip': getClientAddress() }, method: 'PATCH' }); const responseData = await response.json(); if (responseData.statusCode) { return fail(responseData.statusCode, { id: 'inputData', message: JSON.stringify(responseData.message) }); } return { id: 'inputData', message: 'Updated' }; }, getTableData: async ({ cookies, request, getClientAddress }) => { const data = await request.formData(); const page = data.get('page'); const filterName = data.get('filterName'); const filterOrigin = data.get('filterOrigin'); const filterIsActive = data.get('filterIsActive'); const filterReferralBy = data.get('filterReferralBy'); const filterReferralFeePaid = data.get('filterReferralFeePaid'); let query = `?take=10&page=${page}`; if (filterName) { query += `&name=${filterName}`; } if (filterReferralBy) { query += `&referralBy=${filterReferralBy}`; } if (filterIsActive) { query += `&isActive=${filterIsActive}`; } if (filterOrigin) { query += `&origin=${filterOrigin}`; } if (filterReferralFeePaid) { query += `&referralFeePaid=${filterReferralFeePaid}`; } try { const res = await fetch(`${PUBLIC_BASE_API_URL}/employee${query}`, { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${cookies.get('accessToken')}`, 'x-forwarded-for': getClientAddress(), 'x-real-ip': getClientAddress() } }); const resData = await res.json(); if (resData.meta.itemCount === 0) { return fail(404, { id: 'tableData', message: 'No items available' }); } const pageCount = resData.meta.pageCount; const hasNextPage = resData.meta.hasNextPage; const hasPreviousPage = resData.meta.hasPreviousPage; const returnData = resData.data.map((el: any) => ({ ...el, createdAt: new Date(el.createdAt).toISOString().split('T')[0], updatedAt: new Date(el.updatedAt).toISOString().split('T')[0], dateJoin: new Date(el.dateJoin).toISOString().split('T')[0], dateResign: el.dateResign ? new Date(el.dateResign).toISOString().split('T')[0] : null, referralFeePaidAt: el.referralFeePaidAt ? new Date(el.referralFeePaidAt).toISOString().split('T')[0] : null })); return { returnData, pageCount, hasNextPage, hasPreviousPage, id: 'tableData' }; } catch (err: any) { return err.message; } } };