Commit Graph
142 Commits
Author SHA1 Message Date
efrilmandClaude Opus 5 1505a83dd3 feat: dukung penjualan produk per timbangan
Produk kini punya cara jual `unit` (cacah) atau `weight` (timbangan),
mengikuti kontrak backend di docs/integration-weight-based-products.md.

- tipe SellBy, domain/infrastructure unit baru, dan endpoint /api/v1/units
- dialog input berat saat produk timbangan ditambahkan ke keranjang
- tiap penimbangan jadi baris keranjang sendiri; total baris dihitung
  berat x harga satuan, sedangkan produk cacah tetap digabung
- request ke backend mengirim quantity 1 dan membawa berat
- migrasi DB v3: kolom sell_by, unit_id, unit_name, unit_abbreviation
  di tabel products supaya satuan tetap tampil saat offline
- tampilan keranjang, struk, split bill, void, dan refund memakai berat
- test/weight_based_products_test.dart menutup perilaku di atas (9 test)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-06 23:03:31 +07:00
efrilm 9777f63426 chore: naikkan build number ke 1.0.12+19 2026-09-05 14:06:35 +07:00
efrilmandClaude Opus 5 7986164a17 fix: beri tiap tab pengaturan printer bloc sendiri
PrinterFormBloc dan PrinterLoaderBloc di-provide sekali secara global, sementara lima tab pengaturan printer hidup bersamaan di dalam TabBarView dan semuanya membaca-menulis state yang sama.

Karena created dan updated membangun entitas Printer sepenuhnya dari state itu (type, address, code, name, paper), tab yang terakhir menulis state akan menang, lalu tombol Simpan di tab mana pun menyimpan milik tab lain. Nilai awal state kebetulan type 'Bluetooth' — itu sebabnya printer kitchen tersimpan dengan alamat IP yang benar tapi tipe Bluetooth, dan cetakannya dikirim ke radio Bluetooth untuk mencari perangkat yang tidak pernah ada.

Provider global dihapus karena tidak ada tempat lain yang memakainya. Catatan: ini mencegah kerusakan baru, tidak memulihkan baris yang sudah terlanjur salah di SQLite — konfigurasi kelima tab perlu disimpan ulang.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-05 14:06:34 +07:00
efrilmandClaude Opus 5 32f64a197a fix: pulihkan koneksi Bluetooth dan deteksi kegagalan printer jaringan
Bluetooth: percobaan ulang connect sebelumnya tidak menutup socket lebih dulu, padahal 'read failed, socket might closed or timeout' justru berarti socket RFCOMM masih setengah terbuka — ketiga percobaan gagal identik dan retry-nya sia-sia. Tiap percobaan ulang kini didahului disconnect paksa.

connectBluetooth mengembalikan sukses begitu ADA koneksi tanpa memeriksa apakah itu printer yang diminta, dan tidak pernah mencatat MAC yang aktif. Kini memakai jalur yang sama dengan mencetak.

Izin runtime Bluetooth sebelumnya hanya diminta dari dialog pilih perangkat. Karena reinstall mencabut izin, kasir yang tidak pernah membuka dialog itu gagal cetak tanpa penjelasan. Status adapter, izin, dan pairing kini ikut di log, dan printer yang tidak ter-pairing digagalkan langsung dengan pesan yang menyebut tindakannya.

Jaringan: printTicket hanya menaruh byte di socket lalu menutup koneksi, tidak pernah membaca balik, sehingga kertas habis atau cover terbuka terlihat sama dengan sukses — itu sebabnya kegagalan kitchen tidak pernah muncul di Crashlytics. NetworkPrinterClient baru menanyakan kondisi printer lewat DLE EOT sebelum dan sesudah mencetak, dengan degradasi anggun untuk printer yang tidak mendukungnya.

Panggilan disconnect() ganda dihapus; printTicket sudah flush dan close sendiri, dan panggilan kedua tanpa await membuat error-nya tercatat sebagai crash fatal palsu. Ditambah jejak per station ke Crashlytics.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-05 14:06:22 +07:00
efrilmandClaude Opus 5 cb7139fc3e docs: tambahkan langkah PATH untuk fvm di bagian Instalasi
dart pub global activate memasang fvm ke folder bin pub yang belum tentu ada di PATH, dan setiap orang yang setup dari nol akan menabraknya tepat setelah langkah activate. Sebelumnya hanya disebut di Troubleshooting.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 20:46:47 +07:00
efrilm 951e154623 chore: base URL dev, exclude platform dir dari analyzer, dan naikkan versi ke 1.0.12+18
Perubahan ini sudah ada di working tree sebelum pekerjaan print dimulai; dikumpulkan di sini supaya tidak tercampur dengan commit perbaikan printer. Ditambah pembersihan import injectable yang tidak terpakai di main.dart.
2026-09-02 20:45:13 +07:00
efrilmandClaude Opus 5 ebcddca4bb docs: perbarui README untuk FVM, build_runner, dan cara run/build
Bagian setup lama tidak cuma kurang, tapi salah: diklaim environment dipilih otomatis dari debug/release, padahal datang dari --dart-define=ENV. Siapa pun yang mengikutinya akan menghasilkan APK 'production' yang menunjuk database dev. Tabel environment dan contoh kodenya juga sudah tidak sesuai isi lib/env.dart.

Ditambah: prasyarat FVM, langkah instalasi ber-fvm, perintah build per environment, bagian Code Generation (termasuk peringatan --delete-conflicting-outputs yang menghapus seluruh file generated sebelum build), dan Troubleshooting.

URL base sengaja tidak disalin ke README; cukup menunjuk lib/env.dart, karena menyalin nilai itulah yang membuat dokumen ini basi.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 20:44:24 +07:00
efrilmandClaude Opus 5 1b4caf45d5 fix: cetak semua station tanpa saling membatalkan
printStruckOrder berhenti di kegagalan pertama, jadi satu station gagal membuat semua station sesudahnya tidak pernah dicoba. Karena checker (Bluetooth) berada sebelum kitchen dan bar (Network) dalam rantai, satu kegagalan koneksi Bluetooth menghilangkan tiga tiket sekaligus, dua di antaranya di jaringan yang sehat.

Jalur printer Network juga mengembalikan right(false) saat gagal, yang lolos sebagai sukses ke pemanggil, sehingga kasir melihat 'berhasil dicetak' padahal tidak ada kertas keluar.

Perubahan: repository kini mengembalikan Stream<List<PrintStationResult>> dan tetap mencoba semua station; kegagalan Network jadi left; station Network berjalan paralel dengan rantai Bluetooth; station Bluetooth dikelompokkan per alamat agar perpindahan koneksi seminimal mungkin; CapabilityProfile di-cache.

Bluetooth: retry connect dengan backoff dan disconnect di tiap percobaan ulang (socket RFCOMM setengah terbuka membuat connect berulang gagal identik), jeda settle dikembalikan setelah dipangkas ke 300ms, satu lock untuk seluruh radio (bukan per MAC), izin runtime dipastikan di jalur cetak, dan repository jadi LazySingleton agar state koneksi benar-benar dibagi.

UI: dialog progres per-station menggantikan toast tunggal, lengkap dengan durasi tiap station dan tombol cetak ulang khusus yang gagal. Enam listener duplikat di halaman diganti satu listener terpusat di AppWidget. Menu Print di detail transaksi dapat item Print All.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 20:44:14 +07:00
efrilmandClaude Opus 5 038f4d65fe chore: pin Flutter 3.41.9 lewat FVM
Stack codegen project ini (freezed 2.x, build_runner 2.5, analyzer 7.7.1) hanya paham bahasa Dart sampai 3.9. Flutter 3.44+ membawa framework yang ditulis di bahasa 3.10+, dan analyzer 7.7.1 crash saat men-serialize-nya (visitDotShorthandPropertyAccess) sehingga build_runner tidak bisa jalan sama sekali.

3.41.9 adalah rilis terbaru yang framework-nya masih di bahasa 3.9. Versi dipin per-project lewat .fvmrc supaya tidak mengganggu project lain di mesin yang sama.

android/build/ ikut di-ignore; isinya artefak Gradle.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-02 20:43:49 +07:00
efrilmandClaude Opus 5 865897fc04 config: upgrade gradle 8.14.3, agp 8.11.1, kotlin 2.2.20
Flutter 3.47 menolak build dengan Gradle < 8.14.0, AGP < 8.11.1, dan
Kotlin < 2.2.20.

Hapus juga assets/icons/ dan assets/json/ dari pubspec: foldernya tidak
pernah ada dan tidak dirujuk dari lib/, menyebabkan error "unable to find
directory entry" saat build.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-02 19:10:11 +07:00
Efril f5b0e66706 config: update version 2026-07-22 14:57:06 +07:00
Efril 1ff144a1a2 feat: sort order printer 2026-07-22 14:56:38 +07:00
Efril eb031d4c2a config: prod and dev 2026-07-09 23:08:50 +07:00
Efril 7161f523c2 feat: update api url 2026-07-03 16:04:08 +07:00
Efril d097df1592 update 2026-06-04 07:22:58 +07:00
Efril e8bbef03b0 config: update version 2026-06-04 00:50:34 +07:00
Efril b228538725 feat: implement idempotency key for critical API endpoints 2026-06-04 00:48:50 +07:00
Efril 2ab20a1150 add printer checker checks 2026-05-28 18:11:02 +07:00
Efril b9fcd79962 update version 2026-05-27 19:52:47 +07:00
Efril 9a5f0c7415 fix printer 2026-05-27 19:51:43 +07:00
Efril d345294a2f update printer bar and kitchen 2026-05-27 16:19:11 +07:00
Efril beb86f6259 update printer checker 2026-05-27 16:13:12 +07:00
efrilm ea29c62af1 update build number 2026-05-26 12:14:30 +07:00
efrilm c8a84ffe5f update kitchen printer 2026-05-26 12:14:02 +07:00
Efril 539c70be17 update 2026-05-25 23:35:24 +07:00
Efril c45848bcf2 update printer 2026-05-25 23:33:49 +07:00
Efril 6d9377f4ab update printer 2026-05-25 20:35:40 +07:00
Efril 56e720e253 update checker print 2026-05-25 19:34:31 +07:00
Efril c7ed45a374 fix printer 2026-05-24 00:59:02 +07:00
Efril a0610459bf update login with device info 2026-05-10 22:51:04 +07:00
Efril 842b7a5041 fix fcm 2026-05-07 18:03:41 +07:00
Efril dc09aabbe8 setup fcm 2026-05-07 17:44:03 +07:00
Efril cdc65f8f8f update success add item user before customer name 2026-04-29 12:46:52 +07:00
Efril e7260ea0e2 fix success add item order 2026-04-27 17:39:15 +07:00
Efril b173654a9c update print ui and report dashboard 2026-04-27 17:28:34 +07:00
Efril 699ca4cfb7 handler error print 2026-04-27 12:53:55 +07:00
Efril d790262fd4 update version 2026-04-26 22:33:33 +07:00
Efril 60fec68a92 fix void 2026-04-26 22:32:48 +07:00
Efril ab2d7d7be5 fix void 2026-04-26 22:31:26 +07:00
Efril 6ac88b92ae fix add order item 2026-04-26 22:27:44 +07:00
Efril 9e4e2ebbd1 fix printer fc 2026-04-26 22:15:50 +07:00
Efril 3513c63259 fix qty split bill 2026-04-10 09:50:44 +07:00
Efril 46dfb7e44e update print all segment 2026-04-03 17:44:04 +07:00
Efril a0db13feb4 update version 2026-03-04 23:33:08 +07:00
Efril f626b18d31 fix date range picker 2026-03-04 23:32:47 +07:00
Efril 200f996d3e fix split bill 2026-03-04 23:30:52 +07:00
Efril a739e1c29e update payment page 2026-03-04 22:43:18 +07:00
Efril 4481d24375 update 2026-03-03 19:35:11 +07:00
Efril 59d8f06d75 update printer 2026-03-03 19:11:29 +07:00
Efril e625bd3d2a const constructure 2026-03-01 20:02:12 +07:00