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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user