feat: Add Ledger Accounts table to DashboardPage

- Add ledgerAccounts state with LedgerAccount type
- Fetch accounts from ledgerApi.accounts()
- Add table with Code, Name, Type, Balance columns
- Color-code positive/negative balances
- Build passes successfully
This commit is contained in:
Bernt
2026-07-29 20:01:23 +00:00
parent bd28b60338
commit f967d1a810
3 changed files with 132 additions and 81 deletions
+52 -1
View File
@@ -14,7 +14,7 @@ import {
} from '@/components/ui/Table'
import { Badge } from '@/components/ui/Badge'
import { formatCurrency, formatDate } from '@/lib/utils'
import { financeApi, salesApi, crmApi, ledgerApi } from '@/lib/api'
import { financeApi, salesApi, crmApi, ledgerApi, type LedgerAccount } from '@/lib/api'
import {
DollarSign,
Users,
@@ -66,6 +66,7 @@ export function DashboardPage() {
const [ledgerLiabilities, setLedgerLiabilities] = useState(0)
const [ledgerEquity, setLedgerEquity] = useState(0)
const [netIncome, setNetIncome] = useState(0)
const [ledgerAccounts, setLedgerAccounts] = useState<LedgerAccount[]>([])
useEffect(() => {
async function fetchData() {
@@ -102,6 +103,12 @@ export function DashboardPage() {
if (ledgerIs) {
setNetIncome(ledgerIs.net_income || 0)
}
// Fetch all accounts
const accountsRes = await ledgerApi.accounts().catch(() => null)
if (accountsRes) {
setLedgerAccounts(accountsRes.accounts || [])
}
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to load dashboard data')
} finally {
@@ -270,6 +277,50 @@ export function DashboardPage() {
</div>
</div>
{/* Ledger Accounts Table */}
<Card>
<CardHeader
title="Ledger Accounts"
subtitle="All BAS accounts with balances"
/>
<div className="overflow-x-auto">
<Table>
<TableHeader>
<TableRow>
<TableHead>Code</TableHead>
<TableHead>Name</TableHead>
<TableHead>Type</TableHead>
<TableHead className="text-right">Balance</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{ledgerAccounts.length === 0 ? (
<TableRow>
<TableCell colSpan={4} className="text-center text-muted">
No accounts found
</TableCell>
</TableRow>
) : (
ledgerAccounts.map((account) => (
<TableRow key={account.code}>
<TableCell className="font-medium">{account.code}</TableCell>
<TableCell>{account.name}</TableCell>
<TableCell>
<Badge>{account.account_type}</Badge>
</TableCell>
<TableCell className="text-right">
<span className={account.balance >= 0 ? 'text-success' : 'text-danger'}>
{formatCurrency(account.balance)}
</span>
</TableCell>
</TableRow>
))
)}
</TableBody>
</Table>
</div>
</Card>
{/* Recent Deals */}
<Card>
<CardHeader