pmtool / src /services /attendanceApi.ts
devarshia5's picture
Upload 487 files
d97b8f9 verified
Raw
History Blame Contribute Delete
4.21 kB
import axios from 'axios';
import { API_BASE_URL } from '@/config';
import apiClient from '@/lib/api/axios-instance';
import { createHeaders } from '@/lib/api';
import { AttendanceRecord, AttendanceUploadRequest, AttendanceResponse } from '@/types';
class AttendanceApi {
private baseUrl = `/api/Attendance`;
async getAll(): Promise<AttendanceRecord[]> {
try {
console.log('AttendanceApi: Fetching all attendance records from', this.baseUrl);
const response = await apiClient.get(this.baseUrl);
console.log('AttendanceApi: Response status', response.status);
if (!response.data) {
console.warn('AttendanceApi: No data in response');
return [];
}
if (!Array.isArray(response.data)) {
console.warn('AttendanceApi: Response is not an array', response.data);
return [];
}
return response.data;
} catch (error) {
console.error('Error fetching attendance records:', error);
return [];
}
}
async getByEmployeeId(employeeId: number): Promise<AttendanceRecord[]> {
try {
const response = await apiClient.get(`${this.baseUrl}/employee/${employeeId}`);
return response.data || [];
} catch (error) {
console.error(`Error fetching attendance for employee ${employeeId}:`, error);
return [];
}
}
async getByMonth(month: number, year: number): Promise<AttendanceRecord[]> {
try {
const response = await apiClient.get(`${this.baseUrl}/month/${year}/${month}`);
return response.data || [];
} catch (error) {
console.error(`Error fetching attendance for ${month}/${year}:`, error);
return [];
}
}
async getToday(employeeId: number): Promise<AttendanceRecord | null> {
try {
const response = await apiClient.get(`${this.baseUrl}/today/${employeeId}`);
return response.data || null;
} catch (error) {
console.error(`Error fetching today's attendance for employee ${employeeId}:`, error);
return null;
}
}
async checkIn(employeeId: number): Promise<AttendanceRecord> {
const response = await apiClient.post(`${this.baseUrl}/check-in`, { employeeId });
return response.data;
}
async checkOut(employeeId: number): Promise<AttendanceRecord> {
const response = await apiClient.post(`${this.baseUrl}/check-out`, { employeeId });
return response.data;
}
async create(record: AttendanceRecord): Promise<AttendanceRecord | null> {
try {
const response = await apiClient.post(this.baseUrl, record);
return response.data;
} catch (error) {
console.error('Error creating attendance record:', error);
throw error;
}
}
async update(id: number, record: AttendanceRecord): Promise<AttendanceRecord | null> {
try {
const response = await apiClient.put(`${this.baseUrl}/${id}`, record);
return response.data;
} catch (error) {
console.error(`Error updating attendance record ${id}:`, error);
throw error;
}
}
async uploadBulk(data: AttendanceUploadRequest): Promise<AttendanceResponse> {
try {
const response = await apiClient.post(`${this.baseUrl}/bulk`, data);
return response.data;
} catch (error) {
console.error('Error uploading bulk attendance:', error);
throw error;
}
}
// Method to handle Excel file upload
async uploadExcel(file: File): Promise<AttendanceResponse> {
try {
const formData = new FormData();
formData.append('File', file);
const response = await apiClient.post(`${this.baseUrl}/upload-excel`, formData);
return response.data;
} catch (error) {
console.error('Error uploading attendance Excel file:', error);
throw error;
}
}
async delete(id: number): Promise<void> {
try {
await apiClient.delete(`${this.baseUrl}/${id}`);
} catch (error) {
console.error(`Error deleting attendance record ${id}:`, error);
throw error;
}
}
}
export const attendanceApi = new AttendanceApi();