251208:0010 Backend & Frontend Debug
This commit is contained in:
@@ -1,85 +0,0 @@
|
||||
import { Correspondence, CreateCorrespondenceDto } from "@/types/correspondence";
|
||||
|
||||
// Mock Data
|
||||
const mockCorrespondences: Correspondence[] = [
|
||||
{
|
||||
correspondence_id: 1,
|
||||
document_number: "LCBP3-COR-001",
|
||||
subject: "Submission of Monthly Report - Jan 2025",
|
||||
description: "Please find attached the monthly progress report.",
|
||||
status: "PENDING",
|
||||
importance: "NORMAL",
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
from_organization_id: 1,
|
||||
to_organization_id: 2,
|
||||
document_type_id: 1,
|
||||
from_organization: { id: 1, org_name: "Contractor A", org_code: "CON-A" },
|
||||
to_organization: { id: 2, org_name: "Owner", org_code: "OWN" },
|
||||
},
|
||||
{
|
||||
correspondence_id: 2,
|
||||
document_number: "LCBP3-COR-002",
|
||||
subject: "Request for Information regarding Foundation",
|
||||
description: "Clarification needed on drawing A-101.",
|
||||
status: "IN_REVIEW",
|
||||
importance: "HIGH",
|
||||
created_at: new Date(Date.now() - 86400000).toISOString(),
|
||||
updated_at: new Date(Date.now() - 86400000).toISOString(),
|
||||
from_organization_id: 2,
|
||||
to_organization_id: 1,
|
||||
document_type_id: 1,
|
||||
from_organization: { id: 2, org_name: "Owner", org_code: "OWN" },
|
||||
to_organization: { id: 1, org_name: "Contractor A", org_code: "CON-A" },
|
||||
},
|
||||
];
|
||||
|
||||
export const correspondenceApi = {
|
||||
getAll: async (params?: { page?: number; status?: string; search?: string }) => {
|
||||
// Simulate API delay
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
|
||||
let filtered = [...mockCorrespondences];
|
||||
if (params?.status) {
|
||||
filtered = filtered.filter((c) => c.status === params.status);
|
||||
}
|
||||
if (params?.search) {
|
||||
const lowerSearch = params.search.toLowerCase();
|
||||
filtered = filtered.filter((c) =>
|
||||
c.subject.toLowerCase().includes(lowerSearch) ||
|
||||
c.document_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 mockCorrespondences.find((c) => c.correspondence_id === id);
|
||||
},
|
||||
|
||||
create: async (data: CreateCorrespondenceDto) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
const newId = Math.max(...mockCorrespondences.map((c) => c.correspondence_id)) + 1;
|
||||
const newCorrespondence: Correspondence = {
|
||||
correspondence_id: newId,
|
||||
document_number: `LCBP3-COR-00${newId}`,
|
||||
...data,
|
||||
status: "DRAFT",
|
||||
created_at: new Date().toISOString(),
|
||||
updated_at: new Date().toISOString(),
|
||||
// Mock organizations for display
|
||||
from_organization: { id: data.from_organization_id, org_name: "Mock Org From", org_code: "MOCK" },
|
||||
to_organization: { id: data.to_organization_id, org_name: "Mock Org To", org_code: "MOCK" },
|
||||
} as Correspondence; // Casting for simplicity in mock
|
||||
|
||||
mockCorrespondences.unshift(newCorrespondence);
|
||||
return newCorrespondence;
|
||||
},
|
||||
};
|
||||
@@ -1,119 +0,0 @@
|
||||
import { Drawing, CreateDrawingDto, DrawingRevision } from "@/types/drawing";
|
||||
|
||||
// Mock Data
|
||||
const mockDrawings: Drawing[] = [
|
||||
{
|
||||
drawing_id: 1,
|
||||
drawing_number: "A-101",
|
||||
title: "Ground Floor Plan",
|
||||
type: "CONTRACT",
|
||||
discipline_id: 2,
|
||||
discipline: { id: 2, discipline_code: "ARC", discipline_name: "Architecture" },
|
||||
sheet_number: "01",
|
||||
scale: "1:100",
|
||||
current_revision: "0",
|
||||
issue_date: new Date(Date.now() - 100000000).toISOString(),
|
||||
revision_count: 1,
|
||||
revisions: [
|
||||
{
|
||||
revision_id: 1,
|
||||
revision_number: "0",
|
||||
revision_date: new Date(Date.now() - 100000000).toISOString(),
|
||||
revision_description: "Issued for Construction",
|
||||
revised_by_name: "John Doe",
|
||||
file_url: "/mock-drawing.pdf",
|
||||
is_current: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
drawing_id: 2,
|
||||
drawing_number: "S-201",
|
||||
title: "Foundation Details",
|
||||
type: "SHOP",
|
||||
discipline_id: 1,
|
||||
discipline: { id: 1, discipline_code: "STR", discipline_name: "Structure" },
|
||||
sheet_number: "05",
|
||||
scale: "1:50",
|
||||
current_revision: "B",
|
||||
issue_date: new Date().toISOString(),
|
||||
revision_count: 2,
|
||||
revisions: [
|
||||
{
|
||||
revision_id: 3,
|
||||
revision_number: "B",
|
||||
revision_date: new Date().toISOString(),
|
||||
revision_description: "Updated reinforcement",
|
||||
revised_by_name: "Jane Smith",
|
||||
file_url: "/mock-drawing-v2.pdf",
|
||||
is_current: true,
|
||||
},
|
||||
{
|
||||
revision_id: 2,
|
||||
revision_number: "A",
|
||||
revision_date: new Date(Date.now() - 50000000).toISOString(),
|
||||
revision_description: "First Submission",
|
||||
revised_by_name: "Jane Smith",
|
||||
file_url: "/mock-drawing-v1.pdf",
|
||||
is_current: false,
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const drawingApi = {
|
||||
getAll: async (params?: { type?: "CONTRACT" | "SHOP"; search?: string }) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
|
||||
let filtered = [...mockDrawings];
|
||||
if (params?.type) {
|
||||
filtered = filtered.filter((d) => d.type === params.type);
|
||||
}
|
||||
if (params?.search) {
|
||||
const lowerSearch = params.search.toLowerCase();
|
||||
filtered = filtered.filter((d) =>
|
||||
d.drawing_number.toLowerCase().includes(lowerSearch) ||
|
||||
d.title.toLowerCase().includes(lowerSearch)
|
||||
);
|
||||
}
|
||||
|
||||
return filtered;
|
||||
},
|
||||
|
||||
getById: async (id: number) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
return mockDrawings.find((d) => d.drawing_id === id);
|
||||
},
|
||||
|
||||
create: async (data: CreateDrawingDto) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
const newId = Math.max(...mockDrawings.map((d) => d.drawing_id)) + 1;
|
||||
const newDrawing: Drawing = {
|
||||
drawing_id: newId,
|
||||
drawing_number: data.drawing_number,
|
||||
title: data.title,
|
||||
type: data.drawing_type,
|
||||
discipline_id: data.discipline_id,
|
||||
discipline: { id: data.discipline_id, discipline_code: "MOCK", discipline_name: "Mock Discipline" },
|
||||
sheet_number: data.sheet_number,
|
||||
scale: data.scale,
|
||||
current_revision: "0",
|
||||
issue_date: new Date().toISOString(),
|
||||
revision_count: 1,
|
||||
revisions: [
|
||||
{
|
||||
revision_id: newId * 10,
|
||||
revision_number: "0",
|
||||
revision_date: new Date().toISOString(),
|
||||
revision_description: "Initial Upload",
|
||||
revised_by_name: "Current User",
|
||||
file_url: "#",
|
||||
is_current: true,
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
mockDrawings.unshift(newDrawing);
|
||||
return newDrawing;
|
||||
},
|
||||
};
|
||||
@@ -1,98 +0,0 @@
|
||||
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;
|
||||
},
|
||||
};
|
||||
@@ -1,79 +0,0 @@
|
||||
import { SearchResult, SearchFilters } from "@/types/search";
|
||||
|
||||
// Mock Data
|
||||
const mockResults: SearchResult[] = [
|
||||
{
|
||||
id: 1,
|
||||
type: "correspondence",
|
||||
title: "Submission of Monthly Report - Jan 2025",
|
||||
description: "Please find attached the monthly progress report.",
|
||||
status: "PENDING",
|
||||
documentNumber: "LCBP3-COR-001",
|
||||
createdAt: new Date().toISOString(),
|
||||
highlight: "Submission of <b>Monthly Report</b> - Jan 2025",
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
type: "rfa",
|
||||
title: "Approval for Concrete Mix Design",
|
||||
description: "Requesting approval for the proposed concrete mix design.",
|
||||
status: "PENDING",
|
||||
documentNumber: "LCBP3-RFA-001",
|
||||
createdAt: new Date().toISOString(),
|
||||
highlight: "Approval for <b>Concrete Mix</b> Design",
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
type: "drawing",
|
||||
title: "Ground Floor Plan",
|
||||
description: "Architectural ground floor plan.",
|
||||
status: "APPROVED",
|
||||
documentNumber: "A-101",
|
||||
createdAt: new Date(Date.now() - 100000000).toISOString(),
|
||||
highlight: "Ground Floor <b>Plan</b>",
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
type: "correspondence",
|
||||
title: "Request for Information regarding Foundation",
|
||||
description: "Clarification needed on drawing A-101.",
|
||||
status: "IN_REVIEW",
|
||||
documentNumber: "LCBP3-COR-002",
|
||||
createdAt: new Date(Date.now() - 86400000).toISOString(),
|
||||
},
|
||||
];
|
||||
|
||||
export const searchApi = {
|
||||
search: async (filters: SearchFilters) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 600));
|
||||
|
||||
let results = [...mockResults];
|
||||
|
||||
if (filters.query) {
|
||||
const lowerQuery = filters.query.toLowerCase();
|
||||
results = results.filter((r) =>
|
||||
r.title.toLowerCase().includes(lowerQuery) ||
|
||||
r.documentNumber.toLowerCase().includes(lowerQuery) ||
|
||||
r.description?.toLowerCase().includes(lowerQuery)
|
||||
);
|
||||
}
|
||||
|
||||
if (filters.types && filters.types.length > 0) {
|
||||
results = results.filter((r) => filters.types?.includes(r.type));
|
||||
}
|
||||
|
||||
if (filters.statuses && filters.statuses.length > 0) {
|
||||
results = results.filter((r) => filters.statuses?.includes(r.status));
|
||||
}
|
||||
|
||||
return results;
|
||||
},
|
||||
|
||||
suggest: async (query: string) => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 300));
|
||||
const lowerQuery = query.toLowerCase();
|
||||
return mockResults
|
||||
.filter((r) => r.title.toLowerCase().includes(lowerQuery))
|
||||
.slice(0, 5);
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user