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:
@ -1,12 +1,14 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
|
||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
||||
import 'package:penyaluran_app/app/routes/app_pages.dart';
|
||||
|
||||
class JadwalSectionWidget extends StatelessWidget {
|
||||
final JadwalPenyaluranController controller;
|
||||
final String title;
|
||||
final List<dynamic> jadwalList;
|
||||
final List<PenyaluranBantuanModel> jadwalList;
|
||||
final String status;
|
||||
|
||||
const JadwalSectionWidget({
|
||||
@ -62,7 +64,7 @@ class JadwalSectionWidget extends StatelessWidget {
|
||||
);
|
||||
}
|
||||
|
||||
List<dynamic> _getCurrentJadwalList() {
|
||||
List<PenyaluranBantuanModel> _getCurrentJadwalList() {
|
||||
switch (title) {
|
||||
case 'Hari Ini':
|
||||
return controller.jadwalHariIni.toList();
|
||||
@ -75,11 +77,7 @@ class JadwalSectionWidget extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildJadwalItem(TextTheme textTheme, dynamic jadwal) {
|
||||
// Konversi jadwal ke Map jika itu adalah PenyaluranBantuanModel
|
||||
final Map<String, dynamic> jadwalData =
|
||||
jadwal is Map<String, dynamic> ? jadwal : jadwal.toJson();
|
||||
|
||||
Widget _buildJadwalItem(TextTheme textTheme, PenyaluranBantuanModel jadwal) {
|
||||
Color statusColor;
|
||||
switch (status) {
|
||||
case 'Aktif':
|
||||
@ -95,10 +93,26 @@ class JadwalSectionWidget extends StatelessWidget {
|
||||
statusColor = Colors.orange;
|
||||
}
|
||||
|
||||
// Format tanggal
|
||||
String formattedDate = jadwal.tanggalPenyaluran != null
|
||||
? DateFormat('dd MMMM yyyy').format(jadwal.tanggalPenyaluran!)
|
||||
: 'Belum ditentukan';
|
||||
|
||||
// Format waktu
|
||||
String formattedTime = jadwal.tanggalPenyaluran != null
|
||||
? DateFormat('HH:mm').format(jadwal.tanggalPenyaluran!)
|
||||
: '-';
|
||||
|
||||
// Dapatkan nama lokasi dan kategori
|
||||
String lokasiName =
|
||||
controller.getLokasiPenyaluranName(jadwal.lokasiPenyaluranId);
|
||||
String kategoriName =
|
||||
controller.getKategoriBantuanName(jadwal.kategoriBantuanId);
|
||||
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
// Navigasi ke halaman pelaksanaan penyaluran dengan data jadwal
|
||||
Get.toNamed(Routes.pelaksanaanPenyaluran, arguments: jadwalData);
|
||||
Get.toNamed(Routes.pelaksanaanPenyaluran, arguments: jadwal);
|
||||
},
|
||||
child: Container(
|
||||
width: double.infinity,
|
||||
@ -123,10 +137,13 @@ class JadwalSectionWidget extends StatelessWidget {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
jadwalData['lokasi'] ?? '',
|
||||
style: textTheme.titleMedium?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
Expanded(
|
||||
child: Text(
|
||||
jadwal.nama ?? 'Tanpa Nama',
|
||||
style: textTheme.titleMedium?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
@ -147,24 +164,38 @@ class JadwalSectionWidget extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
if (jadwal.deskripsi != null && jadwal.deskripsi!.isNotEmpty) ...[
|
||||
Text(
|
||||
jadwal.deskripsi!,
|
||||
style: textTheme.bodyMedium,
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
],
|
||||
Text(
|
||||
'Kategori Bantuan: ${jadwalData['kategori_bantuan'] ?? ''}',
|
||||
'Lokasi: $lokasiName',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Tanggal: ${jadwalData['tanggal'] ?? ''}',
|
||||
'Kategori: $kategoriName',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Waktu: ${jadwalData['waktu'] ?? ''}',
|
||||
'Tanggal: $formattedDate',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
if (jadwalData['jumlah_penerima'] != null) ...[
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Waktu: $formattedTime',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
if (jadwal.jumlahPenerima != null) ...[
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Jumlah Penerima: ${jadwalData['jumlah_penerima']}',
|
||||
'Jumlah Penerima: ${jadwal.jumlahPenerima}',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
],
|
||||
|
@ -1,5 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:penyaluran_app/app/data/models/penyaluran_bantuan_model.dart';
|
||||
import 'package:penyaluran_app/app/modules/petugas_desa/controllers/jadwal_penyaluran_controller.dart';
|
||||
import 'package:penyaluran_app/app/routes/app_pages.dart';
|
||||
import 'package:penyaluran_app/app/theme/app_theme.dart';
|
||||
@ -134,10 +136,16 @@ class PermintaanPenjadwalanSummaryWidget extends StatelessWidget {
|
||||
});
|
||||
}
|
||||
|
||||
Widget _buildPermintaanPreview(TextTheme textTheme, dynamic permintaan) {
|
||||
// Konversi permintaan ke Map jika itu adalah PenyaluranBantuanModel
|
||||
final Map<String, dynamic> permintaanData =
|
||||
permintaan is Map<String, dynamic> ? permintaan : permintaan.toJson();
|
||||
Widget _buildPermintaanPreview(
|
||||
TextTheme textTheme, PenyaluranBantuanModel permintaan) {
|
||||
// Format tanggal
|
||||
String formattedDate = permintaan.tanggalPermintaan != null
|
||||
? DateFormat('dd MMMM yyyy').format(permintaan.tanggalPermintaan!)
|
||||
: 'Belum ditentukan';
|
||||
|
||||
// Dapatkan nama kategori
|
||||
String kategoriName =
|
||||
controller.getKategoriBantuanName(permintaan.kategoriBantuanId);
|
||||
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
@ -155,7 +163,7 @@ class PermintaanPenjadwalanSummaryWidget extends StatelessWidget {
|
||||
children: [
|
||||
Expanded(
|
||||
child: Text(
|
||||
permintaanData['nama'] ?? '',
|
||||
permintaan.nama ?? 'Tanpa Nama',
|
||||
style: textTheme.titleSmall?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
@ -180,13 +188,20 @@ class PermintaanPenjadwalanSummaryWidget extends StatelessWidget {
|
||||
],
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
if (permintaan.deskripsi != null && permintaan.deskripsi!.isNotEmpty)
|
||||
Text(
|
||||
permintaan.deskripsi!,
|
||||
style: textTheme.bodySmall,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 1,
|
||||
),
|
||||
Text(
|
||||
'Kategori: ${permintaanData['kategori_bantuan'] ?? ''}',
|
||||
'Kategori: $kategoriName',
|
||||
style: textTheme.bodySmall,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
Text(
|
||||
'Tanggal: ${permintaanData['tanggal_permintaan'] ?? ''}',
|
||||
'Tanggal: $formattedDate',
|
||||
style: textTheme.bodySmall,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
|
@ -120,7 +120,7 @@ class PermintaanPenjadwalanWidget extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
permintaan.judul ?? '',
|
||||
permintaan.nama ?? '',
|
||||
style: textTheme.titleMedium?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
@ -149,7 +149,7 @@ class PermintaanPenjadwalanWidget extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Jenis Bantuan: ${permintaan.judul ?? ''}',
|
||||
'Jenis Bantuan: ${permintaan.kategoriBantuanId ?? ''}',
|
||||
style: textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
@ -200,7 +200,7 @@ class PermintaanPenjadwalanWidget extends StatelessWidget {
|
||||
return DropdownMenuItem<String>(
|
||||
value: jadwal.id,
|
||||
child: Text(
|
||||
'${jadwal.tanggalPenjadwalan?.toString().substring(0, 10) ?? ''} - ${jadwal.lokasiPenyaluranId ?? ''} (${jadwal.judul ?? ''})'),
|
||||
'${jadwal.tanggalPenjadwalan?.toString().substring(0, 10) ?? ''} - ${jadwal.lokasiPenyaluranId ?? ''} (${jadwal.nama ?? ''})'),
|
||||
);
|
||||
}).toList();
|
||||
|
||||
@ -220,7 +220,7 @@ class PermintaanPenjadwalanWidget extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Anda akan mengkonfirmasi permintaan penjadwalan dari ${permintaan.judul}.'),
|
||||
'Anda akan mengkonfirmasi permintaan penjadwalan dari ${permintaan.nama}.'),
|
||||
const SizedBox(height: 16),
|
||||
const Text('Pilih jadwal penyaluran:'),
|
||||
const SizedBox(height: 8),
|
||||
@ -290,7 +290,7 @@ class PermintaanPenjadwalanWidget extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Anda akan menolak permintaan penjadwalan dari ${permintaan.judul}.'),
|
||||
'Anda akan menolak permintaan penjadwalan dari ${permintaan.nama}.'),
|
||||
const SizedBox(height: 16),
|
||||
const Text('Alasan penolakan:'),
|
||||
const SizedBox(height: 8),
|
||||
|
Reference in New Issue
Block a user