/// Domain Entity: Payment /// /// Represents a payment transaction from the API. library; import 'package:equatable/equatable.dart'; /// Payment Entity /// /// Contains payment information from API: /// - name: Payment ID (e.g., "ACC-PAY-2025-00020") /// - posting_date: Payment date /// - paid_amount: Amount paid /// - mode_of_payment: Payment method (e.g., "Chuyển khoản") /// - invoice_id: Related invoice ID (nullable) /// - order_id: Related order ID (nullable) class Payment extends Equatable { /// Payment ID (e.g., "ACC-PAY-2025-00020") final String name; /// Payment posting date final DateTime postingDate; /// Amount paid final double paidAmount; /// Payment method (e.g., "Chuyển khoản", null if not specified) final String? modeOfPayment; /// Related invoice ID (nullable) final String? invoiceId; /// Related order ID (nullable) final String? orderId; const Payment({ required this.name, required this.postingDate, required this.paidAmount, this.modeOfPayment, this.invoiceId, this.orderId, }); /// Get display payment method String get displayPaymentMethod => modeOfPayment ?? 'Chuyển khoản'; /// Get description based on order/invoice String get description { if (orderId != null) { return 'Thanh toán cho Đơn hàng #$orderId'; } else if (invoiceId != null) { return 'Thanh toán hóa đơn #$invoiceId'; } return 'Thanh toán #$name'; } /// Copy with method for immutability Payment copyWith({ String? name, DateTime? postingDate, double? paidAmount, String? modeOfPayment, String? invoiceId, String? orderId, }) { return Payment( name: name ?? this.name, postingDate: postingDate ?? this.postingDate, paidAmount: paidAmount ?? this.paidAmount, modeOfPayment: modeOfPayment ?? this.modeOfPayment, invoiceId: invoiceId ?? this.invoiceId, orderId: orderId ?? this.orderId, ); } @override List get props => [name, postingDate, paidAmount, modeOfPayment, invoiceId, orderId]; @override String toString() { return 'Payment(name: $name, paidAmount: $paidAmount, orderId: $orderId)'; } }