77 lines
2.4 KiB
Dart
77 lines
2.4 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart';
|
|
|
|
class PelangganController extends GetxController {
|
|
final FirebaseFirestore _firestore = FirebaseFirestore.instance;
|
|
final FirebaseAuth _auth = FirebaseAuth.instance;
|
|
|
|
var isLoading = true.obs;
|
|
var pelangganList = <Map<String, dynamic>>[].obs;
|
|
var totalPelanggan = 0.obs;
|
|
|
|
@override
|
|
void onInit() {
|
|
super.onInit();
|
|
fetchAllPelanggan();
|
|
}
|
|
|
|
/// Ambil data pelanggan berdasarkan user yang login
|
|
Future<void> fetchAllPelanggan() async {
|
|
try {
|
|
isLoading.value = true;
|
|
|
|
final user = _auth.currentUser;
|
|
if (user == null) {
|
|
Get.snackbar("Error", "User belum login");
|
|
return;
|
|
}
|
|
|
|
final userId = user.uid;
|
|
|
|
// Ambil semua resi yang dibuat oleh user yang login
|
|
final snapshot = await _firestore
|
|
.collection('resis')
|
|
.where('store_id', isEqualTo: userId)
|
|
.get();
|
|
|
|
// Mengelompokkan data berdasarkan nama penerima
|
|
final Map<String, Map<String, dynamic>> pelangganMap = {};
|
|
|
|
for (var doc in snapshot.docs) {
|
|
final data = doc.data();
|
|
|
|
final nama = (data['penerima'] ?? '').toString();
|
|
if (nama.isEmpty) continue;
|
|
|
|
if (!pelangganMap.containsKey(nama)) {
|
|
pelangganMap[nama] = {
|
|
'penerima': nama,
|
|
'no_wa': data['no_wa'] ?? '-',
|
|
'alamat': data['alamat'] ?? '-',
|
|
'kota': data['kota'] ?? '-',
|
|
'provinsi': data['provinsi'] ?? '-',
|
|
'barang': data['barang'] ?? '-', // 🔹 Ganti totalTransaksi → barang
|
|
'totalNominal':
|
|
double.tryParse(data['total']?.toString() ?? '0') ?? 0.0,
|
|
'created_at': (data['created_at'] is Timestamp)
|
|
? (data['created_at'] as Timestamp).toDate()
|
|
: DateTime.now(), // 🔹 Tambahan untuk tanggal pembuatan
|
|
};
|
|
} else {
|
|
// Jika nama pelanggan sama, tambahkan nominal tapi barang tidak berubah
|
|
pelangganMap[nama]!['totalNominal'] +=
|
|
double.tryParse(data['total']?.toString() ?? '0') ?? 0.0;
|
|
}
|
|
}
|
|
|
|
pelangganList.assignAll(pelangganMap.values.toList());
|
|
totalPelanggan.value = pelangganList.length;
|
|
} catch (e) {
|
|
Get.snackbar("Error", "Gagal memuat data pelanggan: $e");
|
|
} finally {
|
|
isLoading.value = false;
|
|
}
|
|
}
|
|
}
|