cashumit/lib/models/local_receipt.dart

105 lines
3.5 KiB
Dart

import 'package:cashumit/models/receipt_item.dart';
class LocalReceipt {
final String id;
final List<ReceiptItem> items;
final String? sourceAccountId;
final String? sourceAccountName;
final String? destinationAccountId;
final String? destinationAccountName;
final DateTime transactionDate;
final String?
transactionDescription; // Deskripsi transaksi untuk tampilan di daftar
final bool isSubmitted;
final String? submissionError;
final DateTime? submittedAt;
final DateTime createdAt;
LocalReceipt({
required this.id,
required this.items,
this.sourceAccountId,
this.sourceAccountName,
this.destinationAccountId,
this.destinationAccountName,
required this.transactionDate,
this.transactionDescription,
this.isSubmitted = false,
this.submissionError,
this.submittedAt,
required this.createdAt,
});
double get total => items.fold(0.0, (sum, item) => sum + item.total);
Map<String, dynamic> toJson() {
return {
'id': id,
'items': items.map((item) => item.toJson()).toList(),
'sourceAccountId': sourceAccountId,
'sourceAccountName': sourceAccountName,
'destinationAccountId': destinationAccountId,
'destinationAccountName': destinationAccountName,
'transactionDate': transactionDate.toIso8601String(),
'transactionDescription': transactionDescription,
'isSubmitted': isSubmitted,
'submissionError': submissionError,
'submittedAt': submittedAt?.toIso8601String(),
'createdAt': createdAt.toIso8601String(),
};
}
factory LocalReceipt.fromJson(Map<String, dynamic> json) {
return LocalReceipt(
id: json['id'],
items: (json['items'] as List)
.map((item) => ReceiptItem.fromJson(item))
.toList(),
sourceAccountId: json['sourceAccountId'],
sourceAccountName: json['sourceAccountName'],
destinationAccountId: json['destinationAccountId'],
destinationAccountName: json['destinationAccountName'],
transactionDate: DateTime.parse(json['transactionDate']),
transactionDescription: json['transactionDescription'],
isSubmitted: json['isSubmitted'] ?? false,
submissionError: json['submissionError'],
submittedAt: json['submittedAt'] != null
? DateTime.parse(json['submittedAt'])
: null,
createdAt: DateTime.parse(json['createdAt']),
);
}
LocalReceipt copyWith({
String? id,
List<ReceiptItem>? items,
String? sourceAccountId,
String? sourceAccountName,
String? destinationAccountId,
String? destinationAccountName,
DateTime? transactionDate,
String? transactionDescription,
bool? isSubmitted,
String? submissionError,
DateTime? submittedAt,
DateTime? createdAt,
}) {
return LocalReceipt(
id: id ?? this.id,
items: items ?? this.items,
sourceAccountId: sourceAccountId ?? this.sourceAccountId,
sourceAccountName: sourceAccountName ?? this.sourceAccountName,
destinationAccountId: destinationAccountId ?? this.destinationAccountId,
destinationAccountName:
destinationAccountName ?? this.destinationAccountName,
transactionDate: transactionDate ?? this.transactionDate,
transactionDescription:
transactionDescription ?? this.transactionDescription,
isSubmitted: isSubmitted ?? this.isSubmitted,
submissionError: submissionError ?? this.submissionError,
submittedAt: submittedAt ?? this.submittedAt,
createdAt: createdAt ?? this.createdAt,
);
}
}