MIF_E31230910_MP-HRIS-MOBILE/lib/models/surat_izin_model.dart

113 lines
3.7 KiB
Dart

class ApprovalModel {
final int tahap;
final String tahapLabel;
final String status;
final String approverNama;
final String approverJabatan;
final String? ttdApprover;
final String? catatan;
final String? createdAt;
ApprovalModel({
required this.tahap,
required this.tahapLabel,
required this.status,
required this.approverNama,
required this.approverJabatan,
this.ttdApprover,
this.catatan,
this.createdAt,
});
factory ApprovalModel.fromJson(Map<String, dynamic> json) {
return ApprovalModel(
tahap: json['tahap'] is int ? json['tahap'] : int.tryParse(json['tahap']?.toString() ?? '0') ?? 0,
tahapLabel: json['tahap_label']?.toString() ?? '',
status: json['status']?.toString() ?? '',
approverNama: json['approver_nama']?.toString() ?? 'N/A',
approverJabatan: json['approver_jabatan']?.toString() ?? 'N/A',
ttdApprover: json['ttd_approver']?.toString(),
catatan: json['catatan']?.toString(),
createdAt: json['created_at']?.toString(),
);
}
}
class SuratIzinModel {
final String id;
final String nomorSurat;
final String statusSurat;
final String jenisIzin;
final String? ttdPengaju;
final List<ApprovalModel> approvals;
final String? createdAt;
final String? isiSurat;
final String? pengajuNama;
final String? pengajuNik;
final String? pengajuJabatan;
final String? pengajuDivisi;
final String? tanggalMulai;
final String? tanggalSelesai;
final String? alasan;
SuratIzinModel({
required this.id,
required this.nomorSurat,
required this.statusSurat,
required this.jenisIzin,
this.ttdPengaju,
required this.approvals,
this.createdAt,
this.isiSurat,
this.pengajuNama,
this.pengajuNik,
this.pengajuJabatan,
this.pengajuDivisi,
this.tanggalMulai,
this.tanggalSelesai,
this.alasan,
});
factory SuratIzinModel.fromJson(Map<String, dynamic> json) {
List<ApprovalModel> approvalsList = [];
if (json['approvals'] != null && json['approvals'] is List) {
approvalsList = (json['approvals'] as List)
.map((a) => ApprovalModel.fromJson(a))
.toList();
}
return SuratIzinModel(
id: json['id_surat']?.toString() ?? '',
nomorSurat: json['nomor_surat']?.toString() ?? '',
statusSurat: json['status_surat']?.toString() ?? '',
jenisIzin: json['jenis_izin']?.toString() ?? 'N/A',
ttdPengaju: json['ttd_pengaju']?.toString(),
approvals: approvalsList,
createdAt: json['created_at']?.toString(),
isiSurat: json['isi_surat']?.toString(),
pengajuNama: json['pengaju'] != null ? json['pengaju']['nama']?.toString() : null,
pengajuNik: json['pengaju'] != null ? json['pengaju']['nik']?.toString() : null,
pengajuJabatan: json['pengaju'] != null ? json['pengaju']['jabatan']?.toString() : null,
pengajuDivisi: json['pengaju'] != null ? json['pengaju']['divisi']?.toString() : null,
tanggalMulai: json['pengajuan'] != null ? json['pengajuan']['tanggal_mulai']?.toString() : null,
tanggalSelesai: json['pengajuan'] != null ? json['pengajuan']['tanggal_selesai']?.toString() : null,
alasan: json['pengajuan'] != null ? json['pengajuan']['alasan']?.toString() : null,
);
}
String get statusLabel {
switch (statusSurat) {
case 'menunggu_manajer': return 'Menunggu Manajer';
case 'menunggu_hrd': return 'Menunggu HRD';
case 'disetujui': return 'Disetujui';
case 'ditolak': return 'Ditolak';
default: return statusSurat;
}
}
bool get isApproved => statusSurat == 'disetujui';
bool get isRejected => statusSurat == 'ditolak';
bool get isPending => statusSurat.startsWith('menunggu');
}