Perbarui beberapa file konfigurasi fingerprint untuk arsitektur arm64-v8a, armeabi-v7a, x86, dan x86_64. Modifikasi tampilan dan controller di modul donatur dan petugas desa untuk meningkatkan pengalaman pengguna, termasuk penggantian logika pengambilan data dan penyesuaian tampilan. Hapus kode yang tidak digunakan dan tambahkan fungsionalitas baru untuk mendukung pengelolaan data yang lebih baik.
This commit is contained in:
@ -73,17 +73,23 @@ class CounterService extends GetxService {
|
||||
void updatePengaduanCounter(int diproses) {
|
||||
jumlahDiproses.value = diproses;
|
||||
_storage.write(_keyDiproses, diproses);
|
||||
|
||||
print('Counter pengaduan updated and saved - Diproses: $diproses');
|
||||
}
|
||||
|
||||
// Metode untuk memperbarui counter notifikasi
|
||||
void updateNotifikasiCounter(int belumDibaca) {
|
||||
jumlahNotifikasiBelumDibaca.value = belumDibaca;
|
||||
_storage.write(_keyNotifikasi, belumDibaca);
|
||||
|
||||
print('Counter notifikasi updated and saved - Belum Dibaca: $belumDibaca');
|
||||
}
|
||||
|
||||
// Metode untuk memperbarui counter jadwal
|
||||
void updateJadwalCounter(int hariIni) {
|
||||
jumlahJadwalHariIni.value = hariIni;
|
||||
_storage.write(_keyJadwal, hariIni);
|
||||
|
||||
print('Counter jadwal updated and saved - Hari Ini: $hariIni');
|
||||
}
|
||||
}
|
||||
|
@ -204,6 +204,27 @@ class DetailPenyaluranController extends GetxController {
|
||||
.update(updateData)
|
||||
.eq('id', penerima.id!);
|
||||
|
||||
// Dapatkan data penerima penyaluran (stok_bantuan_id dan jumlah)
|
||||
final penerimaData = await _supabaseService.client
|
||||
.from('penerima_penyaluran')
|
||||
.select('penyaluran_bantuan_id, stok_bantuan_id, jumlah_bantuan')
|
||||
.eq('id', penerima.id!)
|
||||
.single();
|
||||
|
||||
if (penerimaData != null) {
|
||||
final String stokBantuanId = penerimaData['stok_bantuan_id'];
|
||||
final double jumlah = penerimaData['jumlah_bantuan'] is int
|
||||
? penerimaData['jumlah_bantuan'].toDouble()
|
||||
: penerimaData['jumlah_bantuan'];
|
||||
|
||||
// Kurangi stok dan catat riwayat
|
||||
final petugasId = _supabaseService.client.auth.currentUser?.id;
|
||||
if (petugasId != null) {
|
||||
await _supabaseService.kurangiStokDariPenyaluran(
|
||||
penerima.id!, stokBantuanId, jumlah, petugasId);
|
||||
}
|
||||
}
|
||||
|
||||
// Refresh data setelah konfirmasi berhasil
|
||||
await refreshData();
|
||||
|
||||
|
@ -24,7 +24,7 @@ class JadwalPenyaluranController extends GetxController {
|
||||
final RxInt selectedCategoryIndex = 0.obs;
|
||||
|
||||
// Data untuk jadwal
|
||||
final RxList<PenyaluranBantuanModel> jadwalHariIni =
|
||||
final RxList<PenyaluranBantuanModel> jadwalAktif =
|
||||
<PenyaluranBantuanModel>[].obs;
|
||||
final RxList<PenyaluranBantuanModel> jadwalMendatang =
|
||||
<PenyaluranBantuanModel>[].obs;
|
||||
@ -97,7 +97,7 @@ class JadwalPenyaluranController extends GetxController {
|
||||
List<PenyaluranBantuanModel> jadwalToUpdate = [];
|
||||
List<PenyaluranBantuanModel> jadwalTerlewat = [];
|
||||
|
||||
for (var jadwal in jadwalHariIni) {
|
||||
for (var jadwal in jadwalAktif) {
|
||||
if (jadwal.tanggalPenyaluran != null) {
|
||||
final jadwalDateTime =
|
||||
DateTimeHelper.toLocalDateTime(jadwal.tanggalPenyaluran!);
|
||||
@ -175,9 +175,9 @@ class JadwalPenyaluranController extends GetxController {
|
||||
isLoading.value = true;
|
||||
try {
|
||||
// Mengambil data jadwal hari ini
|
||||
final jadwalHariIniData = await _supabaseService.getJadwalHariIni();
|
||||
if (jadwalHariIniData != null) {
|
||||
jadwalHariIni.value = jadwalHariIniData
|
||||
final jadwalAktifData = await _supabaseService.getJadwalAktif();
|
||||
if (jadwalAktifData != null) {
|
||||
jadwalAktif.value = jadwalAktifData
|
||||
.map((data) => PenyaluranBantuanModel.fromJson(data))
|
||||
.toList();
|
||||
}
|
||||
|
@ -250,29 +250,29 @@ class PelaksanaanPenyaluranController extends GetxController {
|
||||
filteredPenerima.value = filtered;
|
||||
}
|
||||
|
||||
// Metode untuk memperbarui status penerimaan bantuan
|
||||
Future<bool> updateStatusPenerimaan(int penerimaId, String status,
|
||||
{DateTime? tanggalPenerimaan,
|
||||
String? buktiPenerimaan,
|
||||
String? keterangan}) async {
|
||||
try {
|
||||
final result = await supabaseService.updateStatusPenerimaan(
|
||||
penerimaId, status,
|
||||
tanggalPenerimaan: tanggalPenerimaan,
|
||||
buktiPenerimaan: buktiPenerimaan,
|
||||
keterangan: keterangan);
|
||||
// // Metode untuk memperbarui status penerimaan bantuan
|
||||
// Future<bool> updateStatusPenerimaan(int penerimaId, String status,
|
||||
// {DateTime? tanggalPenerimaan,
|
||||
// String? buktiPenerimaan,
|
||||
// String? keterangan}) async {
|
||||
// try {
|
||||
// final result = await supabaseService.updateStatusPenerimaan(
|
||||
// penerimaId, status,
|
||||
// tanggalPenerimaan: tanggalPenerimaan,
|
||||
// buktiPenerimaan: buktiPenerimaan,
|
||||
// keterangan: keterangan);
|
||||
|
||||
// Jika berhasil, perbarui data lokal
|
||||
if (result) {
|
||||
await loadPenerimaPenyaluran(activePenyaluranId.value);
|
||||
}
|
||||
// // Jika berhasil, perbarui data lokal
|
||||
// if (result) {
|
||||
// await loadPenerimaPenyaluran(activePenyaluranId.value);
|
||||
// }
|
||||
|
||||
return result;
|
||||
} catch (e) {
|
||||
print('Error updating status penerimaan: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// return result;
|
||||
// } catch (e) {
|
||||
// print('Error updating status penerimaan: $e');
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// Metode untuk menyelesaikan jadwal penyaluran
|
||||
Future<void> completeJadwal(String jadwalId) async {
|
||||
|
@ -309,10 +309,10 @@ class PetugasDesaController extends GetxController {
|
||||
// Metode untuk memuat data jadwal
|
||||
Future<void> loadJadwalData() async {
|
||||
try {
|
||||
final jadwalHariIniData = await _supabaseService.getJadwalHariIni();
|
||||
if (jadwalHariIniData != null) {
|
||||
jadwalHariIni.value = jadwalHariIniData;
|
||||
_counterService.updateJadwalCounter(jadwalHariIniData.length);
|
||||
final jadwalAktifData = await _supabaseService.getJadwalAktif();
|
||||
if (jadwalAktifData != null) {
|
||||
jadwalHariIni.value = jadwalAktifData;
|
||||
_counterService.updateJadwalCounter(jadwalAktifData.length);
|
||||
}
|
||||
} catch (e) {
|
||||
print('Error loading jadwal data: $e');
|
||||
@ -360,7 +360,7 @@ class PetugasDesaController extends GetxController {
|
||||
|
||||
// Hitung jumlah pengaduan dengan status DIPROSES
|
||||
for (var item in pengaduanData) {
|
||||
if (item['status'] == 'DIPROSES') {
|
||||
if (item['status'] == 'MENUNGGU') {
|
||||
diproses++;
|
||||
}
|
||||
}
|
||||
@ -609,22 +609,22 @@ class PetugasDesaController extends GetxController {
|
||||
}
|
||||
|
||||
// Metode untuk memperbarui status penerimaan bantuan
|
||||
Future<bool> updateStatusPenerimaan(int penerimaId, String status,
|
||||
{DateTime? tanggalPenerimaan,
|
||||
String? buktiPenerimaan,
|
||||
String? keterangan}) async {
|
||||
try {
|
||||
final result = await _supabaseService.updateStatusPenerimaan(
|
||||
penerimaId, status,
|
||||
tanggalPenerimaan: tanggalPenerimaan,
|
||||
buktiPenerimaan: buktiPenerimaan,
|
||||
keterangan: keterangan);
|
||||
return result;
|
||||
} catch (e) {
|
||||
print('Error updating status penerimaan: $e');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Future<bool> updateStatusPenerimaan(int penerimaId, String status,
|
||||
// {DateTime? tanggalPenerimaan,
|
||||
// String? buktiPenerimaan,
|
||||
// String? keterangan}) async {
|
||||
// try {
|
||||
// final result = await _supabaseService.updateStatusPenerimaan(
|
||||
// penerimaId, status,
|
||||
// tanggalPenerimaan: tanggalPenerimaan,
|
||||
// buktiPenerimaan: buktiPenerimaan,
|
||||
// keterangan: keterangan);
|
||||
// return result;
|
||||
// } catch (e) {
|
||||
// print('Error updating status penerimaan: $e');
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// Metode untuk menyelesaikan jadwal penyaluran
|
||||
Future<void> completeJadwal(String jadwalId) async {
|
||||
|
@ -4,10 +4,12 @@ import 'package:penyaluran_app/app/data/models/user_model.dart';
|
||||
import 'package:penyaluran_app/app/data/models/notifikasi_model.dart';
|
||||
import 'package:penyaluran_app/app/modules/auth/controllers/auth_controller.dart';
|
||||
import 'package:penyaluran_app/app/services/supabase_service.dart';
|
||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/counter_service.dart';
|
||||
|
||||
class PetugasDesaDashboardController extends GetxController {
|
||||
final AuthController _authController = Get.find<AuthController>();
|
||||
final SupabaseService _supabaseService = SupabaseService.to;
|
||||
late final CounterService _counterService;
|
||||
|
||||
final RxBool isLoading = false.obs;
|
||||
|
||||
@ -22,6 +24,12 @@ class PetugasDesaDashboardController extends GetxController {
|
||||
final RxInt totalPenitipanTerverifikasi = 0.obs;
|
||||
final RxDouble progressPenyaluran = 0.0.obs;
|
||||
|
||||
// Data untuk status penyaluran
|
||||
final RxInt penyaluranDijadwalkan = 0.obs;
|
||||
final RxInt penyaluranAktif = 0.obs;
|
||||
final RxInt penyaluranBatal = 0.obs;
|
||||
final RxInt penyaluranTerlaksana = 0.obs;
|
||||
|
||||
// Data untuk notifikasi
|
||||
final RxList<NotifikasiModel> notifikasiBelumDibaca = <NotifikasiModel>[].obs;
|
||||
final RxInt jumlahNotifikasiBelumDibaca = 0.obs;
|
||||
@ -45,13 +53,24 @@ class PetugasDesaDashboardController extends GetxController {
|
||||
userProfile['desa']?['nama'] ??
|
||||
(userProfile['desa_id'] != null ? 'Desa' : 'Desa');
|
||||
|
||||
// Getter untuk counter dari CounterService
|
||||
RxInt get jumlahMenunggu => _counterService.jumlahMenunggu;
|
||||
RxInt get jumlahDiproses => _counterService.jumlahDiproses;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
// Inisialisasi CounterService jika belum ada
|
||||
if (!Get.isRegistered<CounterService>()) {
|
||||
Get.put(CounterService(), permanent: true);
|
||||
}
|
||||
_counterService = Get.find<CounterService>();
|
||||
|
||||
loadUserProfile();
|
||||
loadDashboardData();
|
||||
loadNotifikasiData();
|
||||
loadJadwalHariIni();
|
||||
loadJadwalAktif();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -97,6 +116,15 @@ class PetugasDesaDashboardController extends GetxController {
|
||||
await _supabaseService.getTotalSemuaPenyaluran();
|
||||
totalSemuaPenyaluran.value = semuaPenyaluranData ?? 0;
|
||||
|
||||
// Mengambil data status penyaluran
|
||||
final statusPenyaluranData = await _supabaseService.getStatusPenyaluran();
|
||||
if (statusPenyaluranData != null) {
|
||||
penyaluranDijadwalkan.value = statusPenyaluranData['dijadwalkan'] ?? 0;
|
||||
penyaluranAktif.value = statusPenyaluranData['aktif'] ?? 0;
|
||||
penyaluranBatal.value = statusPenyaluranData['batal'] ?? 0;
|
||||
penyaluranTerlaksana.value = statusPenyaluranData['terlaksana'] ?? 0;
|
||||
}
|
||||
|
||||
// Menghitung progress penyaluran (persentase penyaluran yang terlaksana dari total semua penyaluran)
|
||||
if (totalSemuaPenyaluran.value > 0) {
|
||||
progressPenyaluran.value =
|
||||
@ -127,9 +155,9 @@ class PetugasDesaDashboardController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> loadJadwalHariIni() async {
|
||||
Future<void> loadJadwalAktif() async {
|
||||
try {
|
||||
final jadwalData = await _supabaseService.getJadwalHariIni();
|
||||
final jadwalData = await _supabaseService.getJadwalAktif();
|
||||
if (jadwalData != null) {
|
||||
jadwalHariIni.value = jadwalData;
|
||||
}
|
||||
@ -145,7 +173,7 @@ class PetugasDesaDashboardController extends GetxController {
|
||||
loadUserProfile(),
|
||||
loadDashboardData(),
|
||||
loadNotifikasiData(),
|
||||
loadJadwalHariIni(),
|
||||
loadJadwalAktif(),
|
||||
]);
|
||||
} catch (e) {
|
||||
print('Error refreshing data: $e');
|
||||
|
@ -302,4 +302,26 @@ class RiwayatStokController extends GetxController {
|
||||
alasan.value = '';
|
||||
fotoBukti.value = null;
|
||||
}
|
||||
|
||||
// Metode untuk mendapatkan detail referensi berdasarkan id dan sumber
|
||||
Future<Map<String, dynamic>?> getReferensiDetail({
|
||||
required String idReferensi,
|
||||
required String sumber,
|
||||
}) async {
|
||||
try {
|
||||
Map<String, dynamic>? data;
|
||||
|
||||
// Berdasarkan sumber, ambil data dari tabel yang sesuai
|
||||
if (sumber == 'penitipan') {
|
||||
data = await _supabaseService.getPenitipanById(idReferensi);
|
||||
} else if (sumber == 'penerimaan') {
|
||||
data = await _supabaseService.getPenerimaanById(idReferensi);
|
||||
}
|
||||
|
||||
return data;
|
||||
} catch (e) {
|
||||
print('Error getting referensi detail: $e');
|
||||
throw Exception('Gagal mendapatkan data: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user