diff --git a/src/accounting-app/views/BalancePage.vue b/src/accounting-app/views/BalancePage.vue index 0a27bf0..c44382c 100644 --- a/src/accounting-app/views/BalancePage.vue +++ b/src/accounting-app/views/BalancePage.vue @@ -6,7 +6,7 @@ import { injectService, SERVICE_TOKENS } from '@/core/di-container' import { useToast } from '@/core/composables/useToast' import type { ExpensesAPI } from '@/modules/expenses/services/ExpensesAPI' import type { Transaction } from '@/modules/expenses/types' -import { ArrowDown, ArrowUp, Clock, Loader2, PieChart } from 'lucide-vue-next' +import { ArrowDown, ArrowUp, Clock, Loader2, PieChart, TrendingUp, TrendingDown } from 'lucide-vue-next' import { Badge } from '@/components/ui/badge' const { t } = useI18n() @@ -18,6 +18,10 @@ const expensesAPI = injectService(SERVICE_TOKENS.EXPENSES_API) const balance = ref(null) const balanceCurrency = ref('sats') const fiatBalances = ref>({}) +const totalExpensesSats = ref(0) +const totalExpensesFiat = ref>({}) +const totalIncomeSats = ref(0) +const totalIncomeFiat = ref>({}) const pendingTransactions = ref([]) const isLoading = ref(true) @@ -25,6 +29,18 @@ const fiatBalanceEntries = computed(() => Object.entries(fiatBalances.value).filter(([, amount]) => Math.abs(amount) > 0.005) ) +const expensesFiatEntries = computed(() => + Object.entries(totalExpensesFiat.value).filter(([, amount]) => Math.abs(amount) > 0.005) +) + +const incomeFiatEntries = computed(() => + Object.entries(totalIncomeFiat.value).filter(([, amount]) => Math.abs(amount) > 0.005) +) + +const hasBreakdown = computed(() => + totalExpensesSats.value > 0 || totalIncomeSats.value > 0 +) + const walletKey = computed(() => user.value?.wallets?.[0]?.inkey) const budgetsEnabled = computed(() => import.meta.env.VITE_LIBRA_BUDGETS_ENABLED === 'true') @@ -61,6 +77,10 @@ async function loadData() { balance.value = balanceData.balance balanceCurrency.value = balanceData.currency || 'sats' fiatBalances.value = balanceData.fiat_balances || {} + totalExpensesSats.value = balanceData.total_expenses_sats || 0 + totalExpensesFiat.value = balanceData.total_expenses_fiat || {} + totalIncomeSats.value = balanceData.total_income_sats || 0 + totalIncomeFiat.value = balanceData.total_income_fiat || {} // Filter for pending transactions (flag = '!') pendingTransactions.value = txData.entries.filter(tx => tx.flag === '!') @@ -137,6 +157,51 @@ function formatFiat(amount: number, currency: string): string { + +
+ +
+
+ +

Income

+
+

+ {{ formatAmount(totalIncomeSats) }} + sats +

+
+

+ {{ formatFiat(amount, currency) }} +

+
+
+ + +
+
+ +

Expenses

+
+

+ {{ formatAmount(totalExpensesSats) }} + sats +

+
+

+ {{ formatFiat(amount, currency) }} +

+
+
+
+
diff --git a/src/modules/expenses/services/ExpensesAPI.ts b/src/modules/expenses/services/ExpensesAPI.ts index 8cfee1a..625fbd2 100644 --- a/src/modules/expenses/services/ExpensesAPI.ts +++ b/src/modules/expenses/services/ExpensesAPI.ts @@ -249,6 +249,10 @@ export class ExpensesAPI extends BaseService { balance: number currency: string fiat_balances?: Record + total_expenses_sats?: number + total_expenses_fiat?: Record + total_income_sats?: number + total_income_fiat?: Record }> { try { const response = await fetch(`${this.baseUrl}/libra/api/v1/balance`, {