Perbarui model PenyaluranBantuan dan tampilan terkait untuk mendukung kategori bantuan dan informasi tambahan

- Ganti properti 'judul' menjadi 'nama' di model PenyaluranBantuanModel
- Tambahkan properti baru: kategoriBantuanId, tanggalPermintaan, jumlahPenerima, dan skemaId
- Perbarui tampilan JadwalSectionWidget dan PermintaanPenjadwalanSummaryWidget untuk menggunakan PenyaluranBantuanModel
- Tambahkan format tanggal dan waktu di tampilan
- Perbarui controller untuk memuat data lokasi penyaluran dan kategori bantuan
This commit is contained in:
Khafidh Fuadi
2025-03-13 19:56:17 +07:00
parent d9cc7aaf92
commit 0223d457a5
8 changed files with 243 additions and 78 deletions

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
import 'package:penyaluran_app/app/data/models/lokasi_penyaluran_model.dart';
import 'package:penyaluran_app/app/data/models/kategori_bantuan_model.dart';
import 'package:penyaluran_app/app/data/models/user_model.dart';
import 'package:penyaluran_app/app/modules/auth/controllers/auth_controller.dart';
import 'package:penyaluran_app/app/services/supabase_service.dart';
@ -27,6 +29,12 @@ class JadwalPenyaluranController extends GetxController {
<PenyaluranBantuanModel>[].obs;
final RxInt jumlahPermintaanPenjadwalan = 0.obs;
// Cache untuk lokasi penyaluran dan kategori bantuan
final RxMap<String, LokasiPenyaluranModel> lokasiPenyaluranCache =
<String, LokasiPenyaluranModel>{}.obs;
final RxMap<String, KategoriBantuanModel> kategoriBantuanCache =
<String, KategoriBantuanModel>{}.obs;
// Controller untuk pencarian
final TextEditingController searchController = TextEditingController();
@ -37,6 +45,8 @@ class JadwalPenyaluranController extends GetxController {
super.onInit();
loadJadwalData();
loadPermintaanPenjadwalanData();
loadLokasiPenyaluranData();
loadKategoriBantuanData();
}
@override
@ -92,6 +102,50 @@ class JadwalPenyaluranController extends GetxController {
}
}
Future<void> loadLokasiPenyaluranData() async {
try {
final lokasiData = await _supabaseService.getAllLokasiPenyaluran();
if (lokasiData != null) {
for (var lokasi in lokasiData) {
final lokasiModel = LokasiPenyaluranModel.fromJson(lokasi);
lokasiPenyaluranCache[lokasiModel.id] = lokasiModel;
}
}
} catch (e) {
print('Error loading lokasi penyaluran data: $e');
}
}
Future<void> loadKategoriBantuanData() async {
try {
final kategoriData = await _supabaseService.getAllKategoriBantuan();
if (kategoriData != null) {
for (var kategori in kategoriData) {
final kategoriModel = KategoriBantuanModel.fromJson(kategori);
if (kategoriModel.id != null) {
kategoriBantuanCache[kategoriModel.id!] = kategoriModel;
}
}
}
} catch (e) {
print('Error loading kategori bantuan data: $e');
}
}
// Mendapatkan nama lokasi penyaluran berdasarkan ID
String getLokasiPenyaluranName(String? lokasiId) {
if (lokasiId == null) return 'Lokasi tidak diketahui';
final lokasi = lokasiPenyaluranCache[lokasiId];
return lokasi?.nama ?? 'Lokasi tidak diketahui';
}
// Mendapatkan nama kategori bantuan berdasarkan ID
String getKategoriBantuanName(String? kategoriId) {
if (kategoriId == null) return 'Kategori tidak diketahui';
final kategori = kategoriBantuanCache[kategoriId];
return kategori?.nama ?? 'Kategori tidak diketahui';
}
Future<void> approveJadwal(String jadwalId) async {
isLoading.value = true;
try {
@ -176,6 +230,8 @@ class JadwalPenyaluranController extends GetxController {
try {
await loadJadwalData();
await loadPermintaanPenjadwalanData();
await loadLokasiPenyaluranData();
await loadKategoriBantuanData();
} finally {
isLoading.value = false;
}