/** * Billing Transactions Page * * Zeigt die Transaktionshistorie für den Benutzer. */ import React, { useEffect, useState } from 'react'; import { useBilling, type BillingTransaction } from '../../hooks/useBilling'; import { BillingNav } from './BillingNav'; import styles from './Billing.module.css'; import { useLanguage } from '../../providers/language/LanguageContext'; // ============================================================================ // TRANSACTION ROW COMPONENT // ============================================================================ interface TransactionRowProps { transaction: BillingTransaction; } const TransactionRow: React.FC = ({ transaction }) => { const formatCurrency = (amount: number) => { return new Intl.NumberFormat('de-CH', { style: 'currency', currency: 'CHF' }).format(amount); }; const formatDate = (dateString?: string) => { if (!dateString) return '-'; return new Date(dateString).toLocaleString('de-CH', { year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit' }); }; const getTypeClass = (type: string) => { switch (type) { case 'CREDIT': return styles.credit; case 'DEBIT': return styles.debit; case 'ADJUSTMENT': return styles.adjustment; default: return ''; } }; const getTypeLabel = (type: string) => { switch (type) { case 'CREDIT': return 'Gutschrift'; case 'DEBIT': return 'Belastung'; case 'ADJUSTMENT': return 'Korrektur'; default: return type; } }; return ( {formatDate(transaction.sysCreatedAt)} {transaction.mandateName || '-'} {getTypeLabel(transaction.transactionType)} {transaction.description} {transaction.aicoreProvider || '-'} {transaction.aicoreModel || '-'} {transaction.featureCode || '-'} {transaction.transactionType === 'DEBIT' ? '-' : '+'}{formatCurrency(transaction.amount)} ); }; // ============================================================================ // MAIN COMPONENT // ============================================================================ export const BillingTransactions: React.FC = () => { const { t } = useLanguage(); const { transactions, loading, loadTransactions } = useBilling(); const [limit, setLimit] = useState(50); useEffect(() => { loadTransactions(limit); }, [limit, loadTransactions]); const handleLoadMore = () => { setLimit(prev => prev + 50); }; return (

{t('Transaktionen')}

{t('Übersicht aller Kontobewegungen')}

{loading && transactions.length === 0 ? (
{t('Transaktionen laden')}
) : transactions.length === 0 ? (
{t('Keine Transaktionen vorhanden')}
) : ( <>
{transactions.map((transaction) => ( ))}
Datum {t('Mandant')} Typ {t('Beschreibung')} Anbieter Modell Feature {t('Betrag')}
{transactions.length >= limit && (
)} )}
); }; export default BillingTransactions;