diff --git a/spk_mobile/lib/models/laundry.dart b/spk_mobile/lib/models/laundry.dart index ad92b01..aeeff48 100644 --- a/spk_mobile/lib/models/laundry.dart +++ b/spk_mobile/lib/models/laundry.dart @@ -15,6 +15,8 @@ class Laundry { final double hargaHarian; final double hargaJam; final int waktuProses; // dalam jam + final int waktuProsesHarian; + final int waktuProsesJam; final String? deskripsi; final String? fotoUtama; final String? foto; // Field foto dari API @@ -39,6 +41,8 @@ class Laundry { required this.hargaHarian, required this.hargaJam, required this.waktuProses, + required this.waktuProsesHarian, + required this.waktuProsesJam, this.deskripsi, this.fotoUtama, this.foto, @@ -98,6 +102,29 @@ class Laundry { if (hargaHarian == 0) hargaHarian = hargaKiloan > 0 ? hargaKiloan : harga; if (hargaJam == 0) hargaJam = harga; + int waktuProsesHarian = 0; + int waktuProsesJam = 0; + + if (json['layanan'] != null && + (json['layanan'] as List).isNotEmpty) { + for (final item in json['layanan'] as List) { + final jenis = item['jenis_layanan']?.toString().toLowerCase() ?? ''; + final estimasi = int.tryParse(item['estimasi_selesai']?.toString() ?? '0') ?? 0; + final waktu = int.tryParse(item['waktu_proses']?.toString() ?? '0') ?? 0; + final actualWaktu = waktu > 0 ? waktu : (estimasi > 0 ? estimasi : 24); + + if (jenis == 'harian' || jenis == 'kiloan' || jenis == 'reguler') { + waktuProsesHarian = actualWaktu; + } else if (jenis == 'jam' || jenis == 'express' || jenis == 'kilat' || jenis == 'satuan') { + waktuProsesJam = actualWaktu; + } + } + } + + if (waktuProsesHarian == 0) waktuProsesHarian = json['waktu_proses'] ?? 24; + if (waktuProsesJam == 0) waktuProsesJam = json['waktu_proses'] ?? 24; + + // Get foto from API and build gallery list final List galleryList = []; @@ -147,6 +174,8 @@ class Laundry { hargaHarian: hargaHarian, hargaJam: hargaJam, waktuProses: json['waktu_proses'] ?? 24, + waktuProsesHarian: waktuProsesHarian, + waktuProsesJam: waktuProsesJam, deskripsi: json['deskripsi'], fotoUtama: json['foto_utama'], foto: json['foto'], // Store raw foto field @@ -232,6 +261,20 @@ class Laundry { } } + // Format waktu proses sesuai jenis layanan (harian / jam) + int waktuProsesFor(String? jenisLayanan) { + if (jenisLayanan == null || jenisLayanan.isEmpty) { + return waktuProsesHarian > 0 ? waktuProsesHarian : waktuProses; + } + + final target = jenisLayanan.toLowerCase(); + if (target == 'jam' || target == 'express' || target == 'kilat' || target == 'satuan') { + return waktuProsesJam > 0 ? waktuProsesJam : waktuProses; + } else { + return waktuProsesHarian > 0 ? waktuProsesHarian : waktuProses; + } + } + String _formatRupiah(double value) { return value .toStringAsFixed(0) diff --git a/spk_mobile/lib/screens/laundry_detail_screen.dart b/spk_mobile/lib/screens/laundry_detail_screen.dart index c705fb5..ec43c10 100644 --- a/spk_mobile/lib/screens/laundry_detail_screen.dart +++ b/spk_mobile/lib/screens/laundry_detail_screen.dart @@ -295,7 +295,7 @@ class _LaundryDetailScreenState extends State { ), _buildHeaderChip( icon: Icons.schedule_rounded, - label: widget.laundry.estimasiSelesai, + label: '${widget.laundry.waktuProsesFor(widget.selectedJenisLayanan)} jam', ), ], ), @@ -347,7 +347,7 @@ class _LaundryDetailScreenState extends State { _buildInfoRow( Icons.schedule, 'Kecepatan Layanan', - widget.laundry.estimasiSelesai, + '${widget.laundry.waktuProsesFor(widget.selectedJenisLayanan)} jam', ), ], ), diff --git a/spk_mobile/lib/widgets/laundry_card.dart b/spk_mobile/lib/widgets/laundry_card.dart index 8a33288..8f28ff3 100644 --- a/spk_mobile/lib/widgets/laundry_card.dart +++ b/spk_mobile/lib/widgets/laundry_card.dart @@ -236,7 +236,7 @@ class LaundryCard extends StatelessWidget { ), const SizedBox(width: 4), Text( - '${laundry.waktuProses}h', + '${laundry.waktuProsesFor(selectedJenisLayanan)}h', style: const TextStyle( fontSize: 12, fontWeight: FontWeight.bold,