145 lines
4.6 KiB
Dart
145 lines
4.6 KiB
Dart
import 'dart:convert';
|
|
|
|
class TindakanPengaduanModel {
|
|
final String? id;
|
|
final String? pengaduanId;
|
|
final String? tindakan;
|
|
final String? catatan;
|
|
final String? statusTindakan; // PROSES, SELESAI
|
|
final String? kategoriTindakan; // Kategori tindakan enum
|
|
final String? petugasId;
|
|
final String? verifikatorId;
|
|
final String? hasilTindakan;
|
|
final List<dynamic>? buktiTindakan;
|
|
final DateTime? estimasiSelesai;
|
|
final DateTime? tanggalTindakan;
|
|
final DateTime? tanggalVerifikasi;
|
|
final DateTime? createdAt;
|
|
final DateTime? updatedAt;
|
|
final double? biayaTindakan;
|
|
final Map<String, dynamic>? petugas; // Data petugas yang melakukan tindakan
|
|
final Map<String, dynamic>? verifikator; // Data petugas yang memverifikasi
|
|
|
|
TindakanPengaduanModel({
|
|
this.id,
|
|
this.pengaduanId,
|
|
this.tindakan,
|
|
this.catatan,
|
|
this.statusTindakan,
|
|
this.kategoriTindakan,
|
|
this.petugasId,
|
|
this.verifikatorId,
|
|
this.hasilTindakan,
|
|
this.buktiTindakan,
|
|
this.estimasiSelesai,
|
|
this.tanggalTindakan,
|
|
this.tanggalVerifikasi,
|
|
this.createdAt,
|
|
this.updatedAt,
|
|
this.biayaTindakan,
|
|
this.petugas,
|
|
this.verifikator,
|
|
});
|
|
|
|
factory TindakanPengaduanModel.fromRawJson(String str) =>
|
|
TindakanPengaduanModel.fromJson(json.decode(str));
|
|
|
|
String toRawJson() => json.encode(toJson());
|
|
|
|
factory TindakanPengaduanModel.fromJson(Map<String, dynamic> json) =>
|
|
TindakanPengaduanModel(
|
|
id: json["id"],
|
|
pengaduanId: json["pengaduan_id"],
|
|
tindakan: json["tindakan"],
|
|
catatan: json["catatan"],
|
|
statusTindakan: json["status_tindakan"],
|
|
kategoriTindakan: json["kategori_tindakan"],
|
|
petugasId: json["petugas_id"],
|
|
verifikatorId: json["verifikator_id"],
|
|
hasilTindakan: json["hasil_tindakan"],
|
|
buktiTindakan: json["bukti_tindakan"],
|
|
estimasiSelesai: json["estimasi_selesai"] != null
|
|
? DateTime.parse(json["estimasi_selesai"])
|
|
: null,
|
|
tanggalTindakan: json["tanggal_tindakan"] != null
|
|
? DateTime.parse(json["tanggal_tindakan"])
|
|
: null,
|
|
tanggalVerifikasi: json["tanggal_verifikasi"] != null
|
|
? DateTime.parse(json["tanggal_verifikasi"])
|
|
: null,
|
|
createdAt: json["created_at"] != null
|
|
? DateTime.parse(json["created_at"])
|
|
: null,
|
|
updatedAt: json["updated_at"] != null
|
|
? DateTime.parse(json["updated_at"])
|
|
: null,
|
|
biayaTindakan: json["biaya_tindakan"]?.toDouble(),
|
|
petugas: json["petugas"],
|
|
verifikator: json["verifikator"],
|
|
);
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
"id": id,
|
|
"pengaduan_id": pengaduanId,
|
|
"tindakan": tindakan,
|
|
"catatan": catatan,
|
|
"status_tindakan": statusTindakan,
|
|
"kategori_tindakan": kategoriTindakan,
|
|
"petugas_id": petugasId,
|
|
"verifikator_id": verifikatorId,
|
|
"hasil_tindakan": hasilTindakan,
|
|
"bukti_tindakan": buktiTindakan,
|
|
"estimasi_selesai": estimasiSelesai?.toIso8601String(),
|
|
"tanggal_tindakan": tanggalTindakan?.toIso8601String(),
|
|
"tanggal_verifikasi": tanggalVerifikasi?.toIso8601String(),
|
|
"created_at": createdAt?.toIso8601String(),
|
|
"updated_at": updatedAt?.toIso8601String(),
|
|
"biaya_tindakan": biayaTindakan,
|
|
"petugas": petugas,
|
|
"verifikator": verifikator,
|
|
};
|
|
|
|
// Getter untuk mendapatkan nama petugas
|
|
String get namaPetugas {
|
|
if (petugas != null && petugas!['nama'] != null) {
|
|
return petugas!['nama'];
|
|
} else if (petugas != null && petugas!['name'] != null) {
|
|
return petugas!['name'];
|
|
}
|
|
return 'Petugas';
|
|
}
|
|
|
|
// Getter untuk mendapatkan nama verifikator
|
|
String get namaVerifikator {
|
|
if (verifikator != null && verifikator!['nama'] != null) {
|
|
return verifikator!['nama'];
|
|
} else if (verifikator != null && verifikator!['name'] != null) {
|
|
return verifikator!['name'];
|
|
}
|
|
return 'Belum diverifikasi';
|
|
}
|
|
|
|
// Getter untuk mendapatkan status tindakan yang lebih user-friendly
|
|
String get statusTindakanText {
|
|
switch (statusTindakan) {
|
|
case 'PROSES':
|
|
return 'Dalam Proses';
|
|
case 'SELESAI':
|
|
return 'Selesai';
|
|
default:
|
|
return statusTindakan ?? 'Tidak Diketahui';
|
|
}
|
|
}
|
|
|
|
// Getter untuk mendapatkan kategori tindakan yang lebih user-friendly
|
|
String get kategoriTindakanText {
|
|
if (kategoriTindakan == null) return 'Tidak Diketahui';
|
|
|
|
// Mengubah format SNAKE_CASE menjadi Title Case
|
|
return kategoriTindakan!
|
|
.split('_')
|
|
.map((word) => word[0].toUpperCase() + word.substring(1).toLowerCase())
|
|
.join(' ');
|
|
}
|
|
}
|