126 lines
3.5 KiB
Dart
126 lines
3.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class Imunisasi {
|
|
final int? id;
|
|
final String jenis;
|
|
final String usia;
|
|
final String tanggal;
|
|
final String status;
|
|
final String deskripsi;
|
|
final String lokasi;
|
|
final String manfaat;
|
|
final Color color;
|
|
final int? anakId;
|
|
final int? jenisId;
|
|
final int? jadwalId;
|
|
final int? minUmurHari;
|
|
final int? maxUmurHari;
|
|
|
|
Imunisasi({
|
|
this.id,
|
|
required this.jenis,
|
|
required this.usia,
|
|
required this.tanggal,
|
|
required this.status,
|
|
required this.deskripsi,
|
|
required this.lokasi,
|
|
required this.manfaat,
|
|
required this.color,
|
|
this.anakId,
|
|
this.jenisId,
|
|
this.jadwalId,
|
|
this.minUmurHari,
|
|
this.maxUmurHari,
|
|
});
|
|
|
|
// Convert Map to Imunisasi object
|
|
factory Imunisasi.fromMap(Map<String, dynamic> map) {
|
|
return Imunisasi(
|
|
id: map['id'],
|
|
jenis: map['jenis'] as String,
|
|
usia: map['usia'] as String,
|
|
tanggal: map['tanggal'] as String,
|
|
status: map['status'] as String,
|
|
deskripsi: map['deskripsi'] as String,
|
|
lokasi: map['lokasi'] as String,
|
|
manfaat: map['manfaat'] as String,
|
|
color: map['color'] as Color,
|
|
anakId: map['anak_id'],
|
|
jenisId: map['jenis_id'],
|
|
jadwalId: map['jadwal_imunisasi_id'],
|
|
minUmurHari: map['min_umur_hari'],
|
|
maxUmurHari: map['max_umur_hari'],
|
|
);
|
|
}
|
|
|
|
// Convert API response to Imunisasi object
|
|
factory Imunisasi.fromApi(Map<String, dynamic> map, {Color defaultColor = Colors.blue}) {
|
|
// Extract jenis_imunisasi if available
|
|
Map<String, dynamic> jenisImunisasi = {};
|
|
if (map['jenis_imunisasi'] != null) {
|
|
jenisImunisasi = map['jenis_imunisasi'] as Map<String, dynamic>;
|
|
}
|
|
|
|
// Handle ID yang bisa dalam bentuk String atau int
|
|
int? parseId(dynamic value) {
|
|
if (value == null) return null;
|
|
if (value is int) return value;
|
|
if (value is String) {
|
|
try {
|
|
return int.parse(value);
|
|
} catch (e) {
|
|
print('Error parsing ID: $value to int - $e');
|
|
return null;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
return Imunisasi(
|
|
id: parseId(map['id']),
|
|
jenis: jenisImunisasi['nama'] ?? map['jenis'] ?? 'Unknown',
|
|
usia: map['usia'] ?? '0 bulan',
|
|
tanggal: map['tanggal'] ?? 'N/A',
|
|
status: map['status'] ?? 'Belum',
|
|
deskripsi: jenisImunisasi['deskripsi'] ?? map['deskripsi'] ?? '',
|
|
lokasi: map['lokasi'] ?? 'Posyandu',
|
|
manfaat: jenisImunisasi['manfaat'] ?? map['manfaat'] ?? '',
|
|
color: defaultColor,
|
|
anakId: parseId(map['anak_id']),
|
|
jenisId: parseId(map['jenis_id'] ?? jenisImunisasi['id']),
|
|
jadwalId: parseId(map['jadwal_imunisasi_id']),
|
|
minUmurHari: parseId(jenisImunisasi['min_umur_hari'] ?? map['min_umur_hari']),
|
|
maxUmurHari: parseId(jenisImunisasi['max_umur_hari'] ?? map['max_umur_hari']),
|
|
);
|
|
}
|
|
|
|
// Convert Imunisasi object to Map
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'id': id,
|
|
'jenis': jenis,
|
|
'usia': usia,
|
|
'tanggal': tanggal,
|
|
'status': status,
|
|
'deskripsi': deskripsi,
|
|
'lokasi': lokasi,
|
|
'manfaat': manfaat,
|
|
'color': color,
|
|
'anak_id': anakId,
|
|
'jenis_id': jenisId,
|
|
'jadwal_imunisasi_id': jadwalId,
|
|
'min_umur_hari': minUmurHari,
|
|
'max_umur_hari': maxUmurHari,
|
|
};
|
|
}
|
|
|
|
// Convert to API format for submission
|
|
Map<String, dynamic> toApiMap() {
|
|
return {
|
|
'jenis_id': jenisId,
|
|
'status': status,
|
|
'tanggal': tanggal,
|
|
};
|
|
}
|
|
}
|