import { useState } from 'react'; import { Title, Table, Group, Stack, Text, Card, Loader, Center, Divider, Badge, } from '@mantine/core'; import { DateInput } from '@mantine/dates'; import { useQuery } from '@tanstack/react-query'; import api from '../../services/api'; interface AccountLine { account_number: number; name: string; amount: string; fund_type: string; } interface IncomeStatementData { from: string; to: string; income: AccountLine[]; expenses: AccountLine[]; total_income: string; total_expenses: string; net_income: string; } export function IncomeStatementPage() { const [from, setFrom] = useState(new Date(new Date().getFullYear(), 0, 1)); const [to, setTo] = useState(new Date()); const { data, isLoading } = useQuery({ queryKey: ['income-statement', from.toISOString().split('T')[0], to.toISOString().split('T')[0]], queryFn: async () => { const { data } = await api.get(`/reports/income-statement?from=${from.toISOString().split('T')[0]}&to=${to.toISOString().split('T')[0]}`); return data; }, }); const fmt = (v: string | number) => parseFloat(String(v || '0')).toLocaleString('en-US', { style: 'currency', currency: 'USD' }); if (isLoading) return
; const netIncome = parseFloat(data?.net_income || '0'); return ( Income Statement v && setFrom(v)} w={160} /> v && setTo(v)} w={160} /> Income {(data?.income || []).map((a) => ( {a.account_number} {a.name} {a.fund_type} {fmt(a.amount)} ))} Total Income {fmt(data?.total_income || '0')}
Expenses {(data?.expenses || []).map((a) => ( {a.account_number} {a.name} {a.fund_type} {fmt(a.amount)} ))} Total Expenses {fmt(data?.total_expenses || '0')}
Net Income = 0 ? 'green' : 'red'}> {fmt(data?.net_income || '0')}
); }