Skip to content

Fix: perbaikan suplemen detail dan edit#1081

Merged
affandii06 merged 3 commits into
rilis-devfrom
fix/fitur_suplemen
Jun 26, 2026
Merged

Fix: perbaikan suplemen detail dan edit#1081
affandii06 merged 3 commits into
rilis-devfrom
fix/fitur_suplemen

Conversation

@pandigresik

Copy link
Copy Markdown
Contributor

Pull Request: Fix Error Halaman Detail Suplemen dan Refactor ke Service Layer

Description

Fix error "Call to undefined function selected()" pada halaman edit suplemen serta refactor data access dari Eloquent model langsung ke SuplemenService yang melakukan API request. Perubahan ini menyesuaikan field mapping antara API response (menggunakan sasaran string dan sasaran_id/status_id numeric) dengan template Blade yang sebelumnya mengharapkan format berbeda.

Changes made:

  1. New File: app/Services/SuplemenService.php — Membuat service class baru yang mengakses data suplemen melalui API (/api/v1/suplemen) dengan caching, menggantikan Eloquent model Suplemen::findOrFail().
  2. Refactor: app/Http/Controllers/SuplemenController.php — Menggunakan dependency injection SuplemenService pada constructor, mengganti semua query Eloquent (Suplemen, SuplemenTerdata, Config, Wilayah) menjadi method call ke service.
  3. Bug Fix: resources/views/suplemen/edit.blade.php — Mengganti selected() helper yang tidak ada dengan inline ternary operator, serta menyesuaikan field mapping ($suplemen->sasaran_id, $suplemen->status_id).
  4. Fix Template: resources/views/suplemen/cetak/table.blade.php dan resources/views/suplemen/table_terdata.blade.php — Mengubah perbandingan numeric ($suplemen->sasaran == 1) menjadi string comparison ($suplemen->sasaran === 'Penduduk').
  5. Fix Template: resources/views/suplemen/cetak/data_suplemen.blade.php dan resources/views/suplemen/rincian.blade.php — Menghapus array lookup $sasaran[$suplemen->sasaran] karena data sasaran sudah berupa string dari API.
  6. Fix JS: resources/views/suplemen/js/data_suplemen_terdata.blade.php — Mengubah $suplemen->sasaran menjadi $suplemen->sasaran_id untuk URL API terdata.
  7. Simplify: resources/views/suplemen/preview_js.blade.php — Menyederhanakan logika preview sasaran dan status karena data sudah dalam format final dari API.

Reason for change:

  • Error Fix: selected() bukan helper function bawaan Laravel, sehingga menyebabkan fatal error saat membuka halaman edit suplemen.
  • Data Format Mismatch: API mengembalikan data dengan field sasaran (string seperti "Penduduk"/"Hamil") dan sasaran_id (numeric), sedangkan template Blade sebelumnya menggunakan numeric sasaran dengan array lookup dari constant SASARAN.
  • Architectural Improvement: Mengganti direct Eloquent query ke service layer untuk konsistensi akses data melalui API (pattern yang sama dengan service lainnya).

Impact of change:

Bug Fix: Error "Call to undefined function selected()" pada halaman edit suplemen teratasi
Data Consistency: Template Blade menggunakan format data yang sesuai dengan API response
Maintainability: Akses data terpusat di SuplemenService, memudahkan maintenance dan testing
Cache Strategy: suplemenById() tidak menggunakan cache untuk data real-time, method lain tetap ter-cache
Export Fix: Data cetak/ekspor menggunakan format sasaran string yang benar

Related Issue

  • Solution for fix related to issue #1078

Steps to Reproduce

Before fix (problem):

  1. Buka halaman admin OpenKab
  2. Navigasi ke menu Data Suplemen
  3. Klik tombol "Edit" atau "Detail" pada salah satu data suplemen
  4. ❌ Error: "Call to undefined function selected()" di edit.blade.php:65
  5. ❌ Halaman tidak dapat dibuka sama sekali

After fix (solution):

  1. Buka halaman admin OpenKab
  2. Navigasi ke menu Data Suplemen
  3. Klik tombol "Edit" atau "Detail" pada salah satu data suplemen
  4. ✅ Halaman terbuka normal tanpa error
  5. ✅ Form edit menampilkan data dengan benar (sasaran, nama, keterangan, status)
  6. ✅ Status dropdown (Aktif/Tidak Aktif) berfungsi dengan benar

Testing on related features:

  • Halaman list suplemen ✅ Normal
  • Halaman detail suplemen ✅ Normal
  • Halaman edit suplemen ✅ Normal (fix error selected())
  • Export/Download Excel ✅ Normal
  • Cetak data suplemen ✅ Normal
  • Preview sebelum simpan ✅ Normal
  • DataTable terdata ✅ Normal

Checklist

Technical Details

Technical Explanation

Sebelum refactor, SuplemenController mengakses data langsung menggunakan Eloquent model:

// Sebelumnya (error)
$suplemen = Suplemen::with('terdata')->findOrFail($id);

Setelah refactor, semua akses data melalui SuplemenService yang melakukan API request:

// Sesudahnya
$suplemen = $this->service->suplemenById($id);

API mengembalikan data dengan format:

  • sasaran: string ("Penduduk", "Keluarga", dll)
  • sasaran_id: numeric (1, 2, dll)
  • status: string ("Aktif", "Tidak Aktif")
  • status_id: numeric (1, 0)

Template Blade disesuaikan untuk menggunakan field yang benar:

// Sebelumnya (error)
<option value="1" {{ selected(1, $suplemen->status) }}>

// Sesudahnya (fix)
<option value="1" {{ $suplemen->status_id == 1 ? 'selected' : '' }}>

Field Mapping

Field API Response Template View (Before) Template View (After)
sasaran "Penduduk" (string) $suplemen->sasaran == 1 (numeric) $suplemen->sasaran === 'Penduduk' (string)
sasaran_id 1 (numeric) $suplemen->sasaran (assumed numeric) $suplemen->sasaran_id (explicit)
status "Aktif" (string) selected(1, $suplemen->status) $suplemen->status_id == 1
status_id 1 (numeric) - $suplemen->status_id

Dependencies added

  • No new dependencies (menggunakan BaseApiService yang sudah ada)

Testing

Manual Testing

  • Buka halaman list data suplemen
  • Klik tombol "Tambah" — form tambah suplemen terbuka
  • Klik tombol "Edit" — form edit suplemen terbuka tanpa error
  • Ubah data suplemen (sasaran, nama, keterangan, status) dan simpan
  • Klik tombol "Detail" — halaman detail suplemen terbuka
  • Klik tombol "Export/Download" — file Excel terdownload
  • Klik tombol "Cetak" — halaman cetak terbuka dengan benar
  • Test preview sebelum simpan
  • Regression testing: fitur lain tidak terpengaruh

Breaking Changes

None — Perubahan ini backward compatible. API response format sudah ada sebelumnya, hanya template Blade yang disesuaikan.

Migration Guide

Not required

References

  • Issue #1078
  • app/Services/BaseApiService.php — Parent class untuk API service
  • app/Services/SuplemenService.php — Service baru untuk akses data suplemen

Depedency

https://github.com/OpenSID/API-Database-Gabungan/pull/441

Video

simplescreenrecorder-2026-06-26_06.22.20.mp4

Additional notes: PR ini menggabungkan bug fix (selected() error) dan refactor (Eloquent ke Service). Untuk reviewer, mohon pastikan field mapping sasaran vs sasaran_id dan status vs status_id sudah sesuai dengan API response di OpenSID/API-Database-Gabungan.

@pandigresik pandigresik requested a review from affandii06 June 25, 2026 23:34
@github-actions

Copy link
Copy Markdown

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1081

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants