diff --git a/src/modules/expenses/components/AddExpense.vue b/src/modules/expenses/components/AddExpense.vue index 75f9280..4772057 100644 --- a/src/modules/expenses/components/AddExpense.vue +++ b/src/modules/expenses/components/AddExpense.vue @@ -138,8 +138,8 @@ - - + +
@@ -239,7 +239,7 @@ import { injectService, SERVICE_TOKENS } from '@/core/di-container' import { useAuth } from '@/composables/useAuthService' import { useToast } from '@/core/composables/useToast' import type { ExpensesAPI } from '../services/ExpensesAPI' -import type { Account } from '../types' +import type { Account, UserInfo } from '../types' import AccountSelector from './AccountSelector.vue' interface Emits { @@ -261,6 +261,7 @@ const selectedAccount = ref(null) const isSubmitting = ref(false) const availableCurrencies = ref([]) const loadingCurrencies = ref(true) +const userInfo = ref(null) // Form schema const formSchema = toTypedSchema( @@ -289,12 +290,19 @@ const { resetForm, meta } = form const isFormValid = computed(() => meta.value.valid) /** - * Fetch available currencies and default currency on component mount + * Fetch available currencies, default currency, and user info on component mount */ onMounted(async () => { try { loadingCurrencies.value = true + // Get wallet key + const wallet = user.value?.wallets?.[0] + if (!wallet || !wallet.inkey) { + console.warn('[AddExpense] No wallet available for loading data') + return + } + // Fetch available currencies const currencies = await expensesAPI.getCurrencies() availableCurrencies.value = currencies @@ -307,9 +315,16 @@ onMounted(async () => { const initialCurrency = defaultCurrency || currencies[0] || 'EUR' form.setFieldValue('currency', initialCurrency) console.log('[AddExpense] Default currency set to:', initialCurrency) + + // Fetch user info to check equity eligibility + userInfo.value = await expensesAPI.getUserInfo(wallet.inkey) + console.log('[AddExpense] User info loaded:', { + is_equity_eligible: userInfo.value.is_equity_eligible, + equity_account: userInfo.value.equity_account_name + }) } catch (error) { - console.error('[AddExpense] Failed to load currencies:', error) - toast.error('Failed to load currencies', { description: 'Please check your connection and try again' }) + console.error('[AddExpense] Failed to load data:', error) + toast.error('Failed to load form data', { description: 'Please check your connection and try again' }) availableCurrencies.value = [] } finally { loadingCurrencies.value = false diff --git a/src/modules/expenses/services/ExpensesAPI.ts b/src/modules/expenses/services/ExpensesAPI.ts index 973c5af..cece654 100644 --- a/src/modules/expenses/services/ExpensesAPI.ts +++ b/src/modules/expenses/services/ExpensesAPI.ts @@ -7,7 +7,8 @@ import type { Account, ExpenseEntryRequest, ExpenseEntry, - AccountNode + AccountNode, + UserInfo } from '../types' import { appConfig } from '@/app.config' @@ -263,4 +264,32 @@ export class ExpensesAPI extends BaseService { throw error } } + + /** + * Get user information including equity eligibility + * + * @param walletKey - Wallet key for authentication (invoice key) + */ + async getUserInfo(walletKey: string): Promise { + try { + const response = await fetch(`${this.baseUrl}/castle/api/v1/user/info`, { + method: 'GET', + headers: this.getHeaders(walletKey), + signal: AbortSignal.timeout(this.config?.apiConfig?.timeout || 30000) + }) + + if (!response.ok) { + throw new Error(`Failed to fetch user info: ${response.statusText}`) + } + + return await response.json() + } catch (error) { + console.error('[ExpensesAPI] Error fetching user info:', error) + // Return default non-eligible user on error + return { + user_id: '', + is_equity_eligible: false + } + } + } } diff --git a/src/modules/expenses/types/index.ts b/src/modules/expenses/types/index.ts index 04a4c97..5ce4932 100644 --- a/src/modules/expenses/types/index.ts +++ b/src/modules/expenses/types/index.ts @@ -86,6 +86,15 @@ export interface AccountNode { children: AccountNode[] } +/** + * User information including equity eligibility + */ +export interface UserInfo { + user_id: string + is_equity_eligible: boolean + equity_account_name?: string +} + /** * Module configuration */