Perbarui model PenerimaPenyaluran untuk menyertakan properti qrCodeHash dan hapus properti yang tidak digunakan. Modifikasi controller DetailPenyaluranController untuk menambahkan fungsi pengambilan data penerima penyaluran berdasarkan ID. Sesuaikan tampilan di halaman konfirmasi penerima dan detail penerimaan untuk meningkatkan pengalaman pengguna. Hapus kode yang tidak diperlukan untuk menjaga kebersihan kode.

This commit is contained in:
Khafidh Fuadi
2025-03-30 18:50:26 +07:00
parent 5aaeb58d2b
commit ba3e71efe7
16 changed files with 1416 additions and 527 deletions

View File

@ -604,4 +604,59 @@ class DetailPenyaluranController extends GetxController {
isExporting.value = false;
}
}
// Fungsi untuk mengambil data penerima penyaluran berdasarkan ID
Future<PenerimaPenyaluranModel?> getPenerimaPenyaluranById(
String penerimaPenyaluranId) async {
try {
// Ambil data penerima penyaluran dengan relasinya
final data = await _supabaseService.client
.from('penerima_penyaluran')
.select(
'*, warga:warga_id(*), stok_bantuan:stok_bantuan_id(*), penyaluran_bantuan:penyaluran_bantuan_id(*)')
.eq('id', penerimaPenyaluranId)
.single();
// Konversi data ke model
final Map<String, dynamic> sanitizedData =
Map<String, dynamic>.from(data);
// Konversi jumlah_bantuan ke double jika bertipe String
if (sanitizedData['jumlah_bantuan'] is String) {
sanitizedData['jumlah_bantuan'] =
double.tryParse(sanitizedData['jumlah_bantuan'] as String);
}
return PenerimaPenyaluranModel.fromJson(sanitizedData);
} catch (e) {
print('Error mengambil data penerima penyaluran: $e');
Get.snackbar(
'Error',
'Terjadi kesalahan saat mengambil data penerima',
backgroundColor: Colors.red,
colorText: Colors.white,
);
return null;
}
}
// Fungsi untuk memuat penyaluran dengan id tertentu
Future<void> getDetailPenyaluran(String penyaluranId) async {
try {
isLoading.value = true;
// Ambil data penyaluran
await loadPenyaluranData(penyaluranId);
} catch (e) {
print('Error getDetailPenyaluran: $e');
Get.snackbar(
'Error',
'Gagal memuat data detail penyaluran',
backgroundColor: Colors.red,
colorText: Colors.white,
);
} finally {
isLoading.value = false;
}
}
}

View File

@ -376,7 +376,6 @@ class PelaksanaanPenyaluranController extends GetxController {
statusPenerimaan: 'DITERIMA',
tanggalPenerimaan: penerimaPenyaluran[index].tanggalPenerimaan,
buktiPenerimaan: penerimaPenyaluran[index].buktiPenerimaan,
keterangan: penerimaPenyaluran[index].keterangan,
jumlahBantuan: penerimaPenyaluran[index].jumlahBantuan,
stokBantuanId: penerimaPenyaluran[index].stokBantuanId,
warga: penerimaPenyaluran[index].warga,

View File

@ -1406,16 +1406,10 @@ class DetailPenyaluranPage extends StatelessWidget {
void _showKonfirmasiPenerimaan(
BuildContext context, PenerimaPenyaluranModel penerima) {
// Dapatkan data jumlah bantuan dari penerima
final jumlahBantuan = penerima.jumlahBantuan?.toString() ?? '5';
// Navigasi ke halaman konfirmasi penerima
// Navigasi ke halaman konfirmasi penerima dengan hanya mengirimkan ID
Get.to(
() => KonfirmasiPenerimaPage(
penerima: penerima,
bentukBantuan:
null, // Tidak ada data bentuk bantuan yang tersedia langsung
jumlahBantuan: jumlahBantuan,
penerimaPenyaluranId: penerima.id!,
tanggalPenyaluran: controller.penyaluran.value?.tanggalPenyaluran,
),
)?.then((result) {
@ -1778,9 +1772,6 @@ class DetailPenyaluranPage extends StatelessWidget {
if (penerima.jumlahBantuan != null)
_buildInfoRow('Jumlah Bantuan',
penerima.jumlahBantuan.toString()),
if (penerima.keterangan != null &&
penerima.keterangan!.isNotEmpty)
_buildInfoRow('Keterangan', penerima.keterangan!),
],
),
),

View File

@ -158,24 +158,6 @@ class WargaDetailPenerimaanView extends GetView<WargaDashboardController> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text(
penyaluran.namaPenyaluran ??
penyaluran.keterangan ??
'Bantuan',
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
color: Colors.black,
),
),
),
],
),
const SizedBox(height: 16),
if (penyaluran.deskripsiPenyaluran != null &&
penyaluran.deskripsiPenyaluran!.isNotEmpty)
Padding(
@ -452,16 +434,6 @@ class WargaDetailPenerimaanView extends GetView<WargaDashboardController> {
],
),
],
if (penyaluran.keterangan != null &&
penyaluran.keterangan!.isNotEmpty) ...[
const Divider(height: 24),
_buildDetailItem(
icon: Icons.note,
title: 'Keterangan',
value: penyaluran.keterangan!,
statusColor: null,
),
],
],
),
),