E41220983_MuhamadSugengCahy.../praresi/lib/presentation/controllers/pelanggan_controller.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;
}
}
}