cashumit/lib/providers/receipt_state.dart

96 lines
3.3 KiB
Dart
Raw Normal View History

// lib/providers/receipt_state.dart
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
import 'package:cashumit/models/receipt_group.dart';
class ReceiptState {
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
List<ReceiptGroup> groups;
DateTime transactionDate;
List<Map<String, dynamic>> accounts;
String? destinationAccountId;
String? destinationAccountName;
String? fireflyUrl;
String? accessToken;
2025-12-27 15:45:41 +07:00
double paymentAmount;
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
String? tipSourceAccountId;
String? tipSourceAccountName;
ReceiptState({
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
List<ReceiptGroup>? groups,
DateTime? transactionDate,
List<Map<String, dynamic>>? accounts,
this.destinationAccountId,
this.destinationAccountName,
this.fireflyUrl,
this.accessToken,
2025-12-27 15:45:41 +07:00
this.paymentAmount = 0.0,
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
this.tipSourceAccountId,
this.tipSourceAccountName,
}) : groups = groups ?? [],
transactionDate = transactionDate ?? DateTime.now(),
accounts = accounts ?? [];
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
static const _unset = Object();
ReceiptState copyWith({
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
List<ReceiptGroup>? groups,
DateTime? transactionDate,
List<Map<String, dynamic>>? accounts,
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
Object? destinationAccountId = _unset,
Object? destinationAccountName = _unset,
Object? fireflyUrl = _unset,
Object? accessToken = _unset,
2025-12-27 15:45:41 +07:00
double? paymentAmount,
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
Object? tipSourceAccountId = _unset,
Object? tipSourceAccountName = _unset,
}) {
return ReceiptState(
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
groups: groups ?? this.groups,
transactionDate: transactionDate ?? this.transactionDate,
accounts: accounts ?? this.accounts,
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
destinationAccountId: identical(destinationAccountId, _unset)
? this.destinationAccountId
: destinationAccountId as String?,
destinationAccountName: identical(destinationAccountName, _unset)
? this.destinationAccountName
: destinationAccountName as String?,
fireflyUrl: identical(fireflyUrl, _unset)
? this.fireflyUrl
: fireflyUrl as String?,
accessToken: identical(accessToken, _unset)
? this.accessToken
: accessToken as String?,
2025-12-27 15:45:41 +07:00
paymentAmount: paymentAmount ?? this.paymentAmount,
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
tipSourceAccountId: identical(tipSourceAccountId, _unset)
? this.tipSourceAccountId
: tipSourceAccountId as String?,
tipSourceAccountName: identical(tipSourceAccountName, _unset)
? this.tipSourceAccountName
: tipSourceAccountName as String?,
);
}
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
// Total gabungan semua grup
double get total => groups.fold(0.0, (sum, group) => sum + group.total);
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
// Kembalian
2025-12-27 15:45:41 +07:00
double get changeAmount => paymentAmount - total;
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
// Apakah ada tip aktif (akun sumber tip dipilih dan ada kembalian)
bool get hasTip =>
tipSourceAccountId != null && paymentAmount > total;
// Nominal tip = kembalian jika tip aktif
double get tipAmount => hasTip ? (paymentAmount - total) : 0.0;
// Helper validasi
bool get hasItems => groups.any((g) => g.items.isNotEmpty);
bool get allGroupsHaveSource =>
groups.isEmpty || groups.every((g) => g.hasSource || g.items.isEmpty);
@override
String toString() {
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
return 'ReceiptState(groups: $groups, transactionDate: $transactionDate, accounts: $accounts, destinationAccountId: $destinationAccountId, destinationAccountName: $destinationAccountName, fireflyUrl: $fireflyUrl, accessToken: $accessToken, paymentAmount: $paymentAmount, tipSourceAccountId: $tipSourceAccountId, tipSourceAccountName: $tipSourceAccountName)';
}
2025-12-27 15:45:41 +07:00
}