53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import { ViewData } from '../contracts/view-data/ViewData';
|
|
|
|
export interface PaymentMethodViewData extends ViewData {
|
|
id: string;
|
|
type: 'card' | 'bank' | 'sepa';
|
|
last4: string;
|
|
brand?: string;
|
|
isDefault: boolean;
|
|
expiryMonth?: number;
|
|
expiryYear?: number;
|
|
bankName?: string;
|
|
displayLabel: string;
|
|
expiryDisplay: string | null;
|
|
}
|
|
|
|
export interface InvoiceViewData extends ViewData {
|
|
id: string;
|
|
invoiceNumber: string;
|
|
date: string;
|
|
dueDate: string;
|
|
amount: number;
|
|
vatAmount: number;
|
|
totalAmount: number;
|
|
status: 'paid' | 'pending' | 'overdue' | 'failed';
|
|
description: string;
|
|
sponsorshipType: 'league' | 'team' | 'driver' | 'race' | 'platform';
|
|
pdfUrl: string;
|
|
formattedTotalAmount: string;
|
|
formattedVatAmount: string;
|
|
formattedDate: string;
|
|
isOverdue: boolean;
|
|
}
|
|
|
|
export interface BillingStatsViewData extends ViewData {
|
|
totalSpent: number;
|
|
pendingAmount: number;
|
|
nextPaymentDate: string;
|
|
nextPaymentAmount: number;
|
|
activeSponsorships: number;
|
|
averageMonthlySpend: number;
|
|
formattedTotalSpent: string;
|
|
formattedPendingAmount: string;
|
|
formattedNextPaymentAmount: string;
|
|
formattedAverageMonthlySpend: string;
|
|
formattedNextPaymentDate: string;
|
|
}
|
|
|
|
export interface BillingViewData extends ViewData {
|
|
paymentMethods: PaymentMethodViewData[];
|
|
invoices: InvoiceViewData[];
|
|
stats: BillingStatsViewData;
|
|
}
|