cashumit/lib/models/group_submission_result.dart

47 lines
1.3 KiB
Dart
Raw Normal View History

feat: multi-grup sumber, batch send, & perbaikan tip Multi-Grup Sumber & UI: - Model ReceiptGroup: satu struk bisa punya banyak grup sumber ( revenue) - Tombol "Tambah Sumber" dengan dashed border (max 10 grup) - Hapus label "Dari:" di SourceAccountSelector (chip saja) - Default 1 grup kosong di ReceiptProvider constructor & _resetState Akun Tujuan ke Config: - Pindah DestinationAccountSelector dari receipt body ke Config screen - Persist & load via SharedPreferences (permanen, tidak di-reset) - Dropdown auto-load dari cache/mirror saat buka Config - Tombol "Sinkronisasi Manual" sekarang simpan ke mirror & refresh dropdown Batch Send via SubmissionTask: - Model SubmissionTask: konteks per-grup (group/tip + destination + date) - TransactionSubmissionDialog refactor: terima List<SubmissionTask> - Helper buildTasksFromReceipt & buildTasksFromAllUnsubmittedReceipts - LocalReceiptsScreen: tombol "Kirim Semua Nota" + post-process status Bug Fix: - copyWith sentinel pattern: field nullable (tipSourceAccount, destinationAccount, fireflyUrl, accessToken) kini bisa di-set ke null - Tip dapat dibersihkan dengan "Batal Tip" & reset antar transaksi - Hapus tombol "Muat Akun" (redundan dgn Sinkronisasi Manual) Lainnya: - Date picker untuk tanggal transaksi - Font courier prime caching via CourierStyles - Perf: compute() untuk decode image, cancel stream bluetooth, fix rebuild loop - External link: <queries> AndroidManifest + skip canLaunchUrl - Layout cetak: hapus Ke:, sederhanakan separator grup, hapus TIP: TIDAK - Hapus TransactionLinksScreen, ganti inline copy/open di popup
2026-06-27 20:18:51 +07:00
/// Status pengiriman satu entri transaksi (grup atau tip).
enum SubmissionStatus { pending, sending, success, failed }
/// Hasil pengiriman satu grup transaksi ke Firefly III.
///
/// Dipakai oleh popup daftar transaksi untuk menampilkan status real-time.
class GroupSubmissionResult {
final String groupId;
final String label; // Nama akun sumber atau "Tip"
final double amount;
final bool isTip;
SubmissionStatus status;
String? transactionId;
String? error;
GroupSubmissionResult({
required this.groupId,
required this.label,
required this.amount,
this.isTip = false,
this.status = SubmissionStatus.pending,
this.transactionId,
this.error,
});
bool get isSuccess => status == SubmissionStatus.success;
bool get isFailed => status == SubmissionStatus.failed;
bool get isSending => status == SubmissionStatus.sending;
bool get isPending => status == SubmissionStatus.pending;
GroupSubmissionResult copyWith({
SubmissionStatus? status,
String? transactionId,
String? error,
}) {
return GroupSubmissionResult(
groupId: groupId,
label: label,
amount: amount,
isTip: isTip,
status: status ?? this.status,
transactionId: transactionId ?? this.transactionId,
error: error ?? this.error,
);
}
}