91 lines
2.4 KiB
Dart
91 lines
2.4 KiB
Dart
import 'user.dart';
|
|
|
|
class Payment {
|
|
final String id;
|
|
final String groupId;
|
|
final String userId;
|
|
final int month;
|
|
final int year;
|
|
final double amount;
|
|
final String paymentMethod;
|
|
final String? transactionId;
|
|
final String status;
|
|
final DateTime? paidAt;
|
|
final String? notes;
|
|
final DateTime createdAt;
|
|
final DateTime updatedAt;
|
|
final User? user;
|
|
|
|
Payment({
|
|
required this.id,
|
|
required this.groupId,
|
|
required this.userId,
|
|
required this.month,
|
|
required this.year,
|
|
required this.amount,
|
|
required this.paymentMethod,
|
|
this.transactionId,
|
|
required this.status,
|
|
this.paidAt,
|
|
this.notes,
|
|
required this.createdAt,
|
|
required this.updatedAt,
|
|
this.user,
|
|
});
|
|
|
|
factory Payment.fromJson(Map<String, dynamic> json) {
|
|
return Payment(
|
|
id: json['id'],
|
|
groupId: json['group_id'],
|
|
userId: json['user_id'],
|
|
month: json['month'],
|
|
year: json['year'],
|
|
amount: _parseDouble(json['amount']),
|
|
paymentMethod: json['payment_method'],
|
|
transactionId: json['transaction_id'],
|
|
status: json['status'],
|
|
paidAt: json['paid_at'] != null ? DateTime.parse(json['paid_at']) : null,
|
|
notes: json['notes'],
|
|
createdAt: DateTime.parse(json['created_at']),
|
|
updatedAt: DateTime.parse(json['updated_at']),
|
|
user: json['User'] != null ? User.fromJson(json['User']) : null,
|
|
);
|
|
}
|
|
|
|
static double _parseDouble(dynamic value) {
|
|
if (value == null) return 0.0;
|
|
if (value is double) return value;
|
|
if (value is int) return value.toDouble();
|
|
if (value is String) return double.parse(value);
|
|
throw ArgumentError('Cannot parse $value to double');
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': id,
|
|
'group_id': groupId,
|
|
'user_id': userId,
|
|
'month': month,
|
|
'year': year,
|
|
'amount': amount,
|
|
'payment_method': paymentMethod,
|
|
'transaction_id': transactionId,
|
|
'status': status,
|
|
'paid_at': paidAt?.toIso8601String(),
|
|
'notes': notes,
|
|
'created_at': createdAt.toIso8601String(),
|
|
'updated_at': updatedAt.toIso8601String(),
|
|
'User': user?.toJson(),
|
|
};
|
|
}
|
|
|
|
// Helper methods
|
|
bool get isPending => status == 'pending';
|
|
bool get isSuccess => status == 'success';
|
|
bool get isFailed => status == 'failed';
|
|
bool get isCancelled => status == 'cancelled';
|
|
|
|
String get monthYear => '$month/$year';
|
|
String get formattedAmount => '₹${amount.toStringAsFixed(2)}';
|
|
}
|