(Feat-Fix): New Reporting system, more seeded data, fixed subdepartments and activity inversion, login page changes, etc etc

This commit is contained in:
2025-12-18 08:15:31 +00:00
parent 916ee19677
commit ac29bb2882
24 changed files with 3306 additions and 207 deletions

View File

@@ -253,6 +253,108 @@ class ApiService {
method: 'DELETE',
});
}
// Reports
async getCompletedAllocationsReport(params?: {
startDate?: string;
endDate?: string;
departmentId?: number;
contractorId?: number;
employeeId?: number;
}) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<{
allocations: any[];
summary: { totalAllocations: number; totalAmount: string; totalUnits: string }
}>(`/reports/completed-allocations${query ? `?${query}` : ''}`);
}
async getReportSummary(params?: { startDate?: string; endDate?: string }) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<{
byContractor: any[];
bySubDepartment: any[];
byActivity: any[];
}>(`/reports/summary${query ? `?${query}` : ''}`);
}
// Standard Rates
async getStandardRates(params?: { departmentId?: number; subDepartmentId?: number; activity?: string }) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<any[]>(`/standard-rates${query ? `?${query}` : ''}`);
}
async getAllRates(params?: { departmentId?: number; startDate?: string; endDate?: string }) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<{
allRates: any[];
summary: { totalContractorRates: number; totalStandardRates: number; totalRates: number };
}>(`/standard-rates/all-rates${query ? `?${query}` : ''}`);
}
async compareRates(params?: { contractorId?: number; subDepartmentId?: number }) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<{
standardRates: any[];
contractorRates: any[];
comparisons: any[];
}>(`/standard-rates/compare${query ? `?${query}` : ''}`);
}
async createStandardRate(data: {
subDepartmentId?: number;
activity?: string;
rate: number;
effectiveDate: string
}) {
return this.request<any>('/standard-rates', {
method: 'POST',
body: JSON.stringify(data),
});
}
async updateStandardRate(id: number, data: { rate?: number; activity?: string; effectiveDate?: string }) {
return this.request<any>(`/standard-rates/${id}`, {
method: 'PUT',
body: JSON.stringify(data),
});
}
async deleteStandardRate(id: number) {
return this.request<{ message: string }>(`/standard-rates/${id}`, {
method: 'DELETE',
});
}
// Activities
async getActivities(params?: { departmentId?: number; subDepartmentId?: number }) {
const query = params ? new URLSearchParams(params as any).toString() : '';
return this.request<any[]>(`/activities${query ? `?${query}` : ''}`);
}
async getActivity(id: number) {
return this.request<any>(`/activities/${id}`);
}
async createActivity(data: { sub_department_id: number; name: string; unit_of_measurement?: string }) {
return this.request<any>('/activities', {
method: 'POST',
body: JSON.stringify(data),
});
}
async updateActivity(id: number, data: { name?: string; unit_of_measurement?: string }) {
return this.request<any>(`/activities/${id}`, {
method: 'PUT',
body: JSON.stringify(data),
});
}
async deleteActivity(id: number) {
return this.request<{ message: string }>(`/activities/${id}`, {
method: 'DELETE',
});
}
}
export const api = new ApiService(API_BASE_URL);