diff --git a/src/data/mockStore.jsx b/src/data/mockStore.jsx index d5c9ad7..0ee6495 100644 --- a/src/data/mockStore.jsx +++ b/src/data/mockStore.jsx @@ -2395,17 +2395,17 @@ const MOCK_PROJECTS = [ phase: 'Finishing', budget: 55000, approvedBudget: 55000, - committedCost: 62300, - actualCost: 62300, - spent: 62300, - variancePercent: 13.3, - margin: -0.13, + committedCost: 43000, + actualCost: 41000, + spent: 41000, + variancePercent: -25.5, + margin: 0.22, commissionType: 'custom', commissionRate: 5500, commission: 5500, startDate: '2025-12-01', endDate: '2026-02-28', - healthScore: 76, + healthScore: 84, openRFIs: 1, changeOrderCount: 2, pendingInvoiceCount: 2, @@ -2420,13 +2420,13 @@ const MOCK_PROJECTS = [ { id: 'ms_004_7', name: 'Final Punch List', dueDate: '2026-02-25', status: 'pending', assignedTo: 'con_001' } ], budgetBreakdown: [ - { name: 'DemoCrew Pro', category: 'Demolition', allocated: 5000, committed: 5500, actual: 5500 }, - { name: 'Texas Builders LLC', category: 'Framing & Structural', allocated: 8000, committed: 8500, actual: 8500 }, - { name: 'Sparky Electric', category: 'Electrical', allocated: 7000, committed: 4800, actual: 4800 }, - { name: 'DFW Foundation Pros', category: 'Plumbing', allocated: 6000, committed: 6500, actual: 6500 }, - { name: 'Premier Finishes', category: 'Drywall & Paint', allocated: 9000, committed: 10000, actual: 10000 }, - { name: 'FloorCraft Inc.', category: 'Flooring & Trim', allocated: 12000, committed: 15500, actual: 15500 }, - { name: 'Reserve Fund', category: 'Contingency', allocated: 8000, committed: 11500, actual: 11500 } + { name: 'DemoCrew Pro', category: 'Demolition', allocated: 5000, committed: 4800, actual: 4800 }, + { name: 'Texas Builders LLC', category: 'Framing & Structural', allocated: 8000, committed: 7800, actual: 7800 }, + { name: 'Sparky Electric', category: 'Electrical', allocated: 7000, committed: 6000, actual: 6000 }, + { name: 'DFW Foundation Pros', category: 'Plumbing', allocated: 6000, committed: 5500, actual: 5500 }, + { name: 'Premier Finishes', category: 'Drywall & Paint', allocated: 9000, committed: 8500, actual: 8500 }, + { name: 'FloorCraft Inc.', category: 'Flooring & Trim', allocated: 12000, committed: 8400, actual: 6400 }, + { name: 'Reserve Fund', category: 'Contingency', allocated: 8000, committed: 2000, actual: 2000 } ], changeOrders: [ { id: 'CO-004-01', title: 'Scope Expansion - Kitchen Island', amount: 4500, status: 'approved', dateSubmitted: '2026-01-10', description: 'Add a custom 6ft island with quartz countertop and built-in microwave.' }, @@ -2451,12 +2451,12 @@ const MOCK_PROJECTS = [ { date: '2026-01-18', action: 'Inspection Passed', user: 'City Inspector', details: 'Plumbing rough-in re-inspection passed' } ], invoices: [ - { id: 'inv_004_1', amount: 18000, submittedBy: 'con_001', status: 'paid', dueDate: '2025-12-15', datePaid: '2025-12-16' }, - { id: 'inv_004_2', amount: 15500, submittedBy: 'con_001', status: 'paid', dueDate: '2026-01-10', datePaid: '2026-01-12' }, - { id: 'inv_004_3', amount: 12800, submittedBy: 'v3', status: 'paid', dueDate: '2026-01-20', datePaid: '2026-01-22' }, + { id: 'inv_004_1', amount: 14000, submittedBy: 'con_001', status: 'paid', dueDate: '2025-12-15', datePaid: '2025-12-16' }, + { id: 'inv_004_2', amount: 12000, submittedBy: 'con_001', status: 'paid', dueDate: '2026-01-10', datePaid: '2026-01-12' }, + { id: 'inv_004_3', amount: 8000, submittedBy: 'v3', status: 'paid', dueDate: '2026-01-20', datePaid: '2026-01-22' }, { id: 'inv_004_3b', amount: 4800, submittedBy: 'sub_001', status: 'paid', dueDate: '2026-01-12', datePaid: '2026-01-14' }, - { id: 'inv_004_4', amount: 8750, submittedBy: 'v1', status: 'pending', dueDate: '2026-02-25' }, - { id: 'inv_004_5', amount: 7250, submittedBy: 'con_001', status: 'pending', dueDate: '2026-02-28' } + { id: 'inv_004_4', amount: 4000, submittedBy: 'v1', status: 'pending', dueDate: '2026-02-25' }, + { id: 'inv_004_5', amount: 2200, submittedBy: 'con_001', status: 'pending', dueDate: '2026-02-28' } ], documents: [ { name: 'Interior Renovation Contract', url: '#', type: 'contract' }, @@ -2494,7 +2494,7 @@ const MOCK_PROJECTS = [ phase: 'Structural', budget: 28000, approvedBudget: 28000, - committedCost: 28850, + committedCost: 21000, actualCost: 14200, spent: 14200, variancePercent: -49.3, @@ -2518,11 +2518,11 @@ const MOCK_PROJECTS = [ { id: 'ms_005_5', name: 'Trim and Caulking', dueDate: '2026-02-15', status: 'pending', assignedTo: 'con_001' } ], budgetBreakdown: [ - { name: 'ABC Supply Co.', category: 'Materials - Siding', allocated: 12000, committed: 12000, actual: 8000 }, - { name: 'Siding Solutions TX', category: 'Labor - Prep & Install', allocated: 9000, committed: 9000, actual: 3500 }, - { name: 'Sunbelt Rentals', category: 'Equipment Rental', allocated: 2000, committed: 2000, actual: 1500 }, + { name: 'ABC Supply Co.', category: 'Materials - Siding', allocated: 12000, committed: 10000, actual: 8000 }, + { name: 'Siding Solutions TX', category: 'Labor - Prep & Install', allocated: 9000, committed: 7000, actual: 3500 }, + { name: 'Sunbelt Rentals', category: 'Equipment Rental', allocated: 2000, committed: 1800, actual: 1500 }, { name: 'Texas Builders LLC', category: 'Structural Repairs (CO)', allocated: 0, committed: 850, actual: 850 }, - { name: 'Reserve Fund', category: 'Contingency', allocated: 5000, committed: 5000, actual: 350 } + { name: 'Reserve Fund', category: 'Contingency', allocated: 5000, committed: 1350, actual: 350 } ], invoices: [ { id: 'inv_005_1', amount: 8400, submittedBy: 'con_001', status: 'paid', dueDate: '2026-01-12', datePaid: '2026-01-13' }, diff --git a/src/pages/owner/OwnerSnapshot.jsx b/src/pages/owner/OwnerSnapshot.jsx index 6d9931d..2ff4b35 100644 --- a/src/pages/owner/OwnerSnapshot.jsx +++ b/src/pages/owner/OwnerSnapshot.jsx @@ -185,7 +185,7 @@ const OwnerSnapshot = () => { {greeting}, {user?.name?.split(' ')[0] || 'Owner'}

- {owner ? `${owner.companyName} — ${owner.portfolioSize} projects in portfolio` : "Here's your business snapshot for today."} + {owner ? `${owner.companyName} — ${ownerProjects.length} project${ownerProjects.length === 1 ? '' : 's'} in portfolio` : "Here's your business snapshot for today."}