251205:0000 Just start debug backend/frontend
This commit is contained in:
98
frontend/lib/api/rfas.ts
Normal file
98
frontend/lib/api/rfas.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import { RFA, CreateRFADto, RFAItem } from "@/types/rfa";
|
||||
|
||||
// Mock Data
|
||||
const mockRFAs: RFA[] = [
|
||||
{
|
||||
rfa_id: 1,
|
||||
rfa_number: "LCBP3-RFA-001",
|
||||
subject: "Approval for Concrete Mix Design",
|
||||
description: "Requesting approval for the proposed concrete mix design for foundations.",
|
||||
contract_id: 1,
|
||||
discipline_id: 1,
|
||||
status: "PENDING",
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
contract_name: "Main Construction Contract",
|
||||
discipline_name: "Civil",
|
||||
items: [
|
||||
{ id: 1, item_no: "1.1", description: "Concrete Mix Type A", quantity: 1, unit: "Lot", status: "PENDING" },
|
||||
{ id: 2, item_no: "1.2", description: "Concrete Mix Type B", quantity: 1, unit: "Lot", status: "PENDING" },
|
||||
],
|
||||
},
|
||||
{
|
||||
rfa_id: 2,
|
||||
rfa_number: "LCBP3-RFA-002",
|
||||
subject: "Approval for Steel Reinforcement Shop Drawings",
|
||||
description: "Shop drawings for Zone A foundations.",
|
||||
contract_id: 1,
|
||||
discipline_id: 2,
|
||||
status: "APPROVED",
|
||||
created_at: new Date(Date.now() - 172800000).toISOString(),
|
||||
updated_at: new Date(Date.now() - 86400000).toISOString(),
|
||||
contract_name: "Main Construction Contract",
|
||||
discipline_name: "Structural",
|
||||
items: [
|
||||
{ id: 3, item_no: "1", description: "Shop Drawing Set A", quantity: 1, unit: "Set", status: "APPROVED" },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const rfaApi = {
|
||||
getAll: async (params?: { page?: number; status?: string; search?: string }) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
|
||||
let filtered = [...mockRFAs];
|
||||
if (params?.status) {
|
||||
filtered = filtered.filter((r) => r.status === params.status);
|
||||
}
|
||||
if (params?.search) {
|
||||
const lowerSearch = params.search.toLowerCase();
|
||||
filtered = filtered.filter((r) =>
|
||||
r.subject.toLowerCase().includes(lowerSearch) ||
|
||||
r.rfa_number.toLowerCase().includes(lowerSearch)
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
items: filtered,
|
||||
total: filtered.length,
|
||||
page: params?.page || 1,
|
||||
totalPages: 1,
|
||||
};
|
||||
},
|
||||
|
||||
getById: async (id: number) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
return mockRFAs.find((r) => r.rfa_id === id);
|
||||
},
|
||||
|
||||
create: async (data: CreateRFADto) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
const newId = Math.max(...mockRFAs.map((r) => r.rfa_id)) + 1;
|
||||
const newRFA: RFA = {
|
||||
rfa_id: newId,
|
||||
rfa_number: `LCBP3-RFA-00${newId}`,
|
||||
...data,
|
||||
status: "DRAFT",
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
contract_name: "Mock Contract",
|
||||
discipline_name: "Mock Discipline",
|
||||
items: data.items.map((item, index) => ({ ...item, id: index + 1, status: "PENDING" })),
|
||||
};
|
||||
|
||||
mockRFAs.unshift(newRFA);
|
||||
return newRFA;
|
||||
},
|
||||
|
||||
updateStatus: async (id: number, status: RFA['status'], comments?: string) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 800));
|
||||
const rfa = mockRFAs.find((r) => r.rfa_id === id);
|
||||
if (rfa) {
|
||||
rfa.status = status;
|
||||
rfa.updated_at = new Date().toISOString();
|
||||
// In a real app, we'd log the comments and history
|
||||
}
|
||||
return rfa;
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user