123 lines
3.6 KiB
PHP
123 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use App\Models\JadwalImunisasi;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class JadwalImunisasiController extends Controller
|
|
{
|
|
// Menampilkan semua jadwal imunisasi berdasarkan anak
|
|
public function index(Request $request)
|
|
{
|
|
$anak_id = $request->query('anak_id');
|
|
$jadwal = JadwalImunisasi::where('anak_id', $anak_id)->get();
|
|
return response()->json($jadwal, 200);
|
|
}
|
|
|
|
// Menyimpan jadwal imunisasi baru
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'anak_id' => 'required|exists:anak,id',
|
|
'nama_imunisasi' => 'required|string|max:255',
|
|
'tanggal_imunisasi' => 'required|date',
|
|
'is_done' => 'sometimes|boolean',
|
|
'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
|
|
]);
|
|
|
|
$data = $request->all();
|
|
|
|
// Proses upload file jika ada
|
|
if ($request->hasFile('bukti_file')) {
|
|
$file = $request->file('bukti_file');
|
|
$path = $file->store('bukti_imunisasi', 'public'); // simpan ke storage/app/public/bukti_imunisasi
|
|
$data['bukti_file'] = $path;
|
|
}
|
|
|
|
$jadwal = JadwalImunisasi::create($data);
|
|
|
|
return response()->json($jadwal, 201);
|
|
}
|
|
|
|
// Menampilkan detail jadwal imunisasi
|
|
public function show($id)
|
|
{
|
|
$jadwal = JadwalImunisasi::find($id);
|
|
|
|
if (!$jadwal) {
|
|
return response()->json(['message' => 'Data tidak ditemukan'], 404);
|
|
}
|
|
|
|
return response()->json($jadwal, 200);
|
|
}
|
|
|
|
// Mengupdate jadwal imunisasi (termasuk bukti_file)
|
|
public function update(Request $request, $id)
|
|
{
|
|
$jadwal = JadwalImunisasi::find($id);
|
|
|
|
if (!$jadwal) {
|
|
return response()->json(['message' => 'Data tidak ditemukan'], 404);
|
|
}
|
|
|
|
$request->validate([
|
|
'nama_imunisasi' => 'sometimes|required|string|max:255',
|
|
'tanggal_imunisasi' => 'sometimes|required|date',
|
|
'bukti_file' => 'nullable|file|mimes:jpg,jpeg,png,pdf|max:2048',
|
|
]);
|
|
|
|
$data = $request->all();
|
|
|
|
// Handle upload file baru (replace yang lama jika ada)
|
|
if ($request->hasFile('bukti_file')) {
|
|
// Hapus file lama jika ada
|
|
if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
|
|
Storage::disk('public')->delete($jadwal->bukti_file);
|
|
}
|
|
|
|
$file = $request->file('bukti_file');
|
|
$path = $file->store('bukti_imunisasi', 'public');
|
|
$data['bukti_file'] = $path;
|
|
}
|
|
|
|
$jadwal->update($data);
|
|
|
|
return response()->json($jadwal, 200);
|
|
}
|
|
|
|
// Menghapus jadwal imunisasi dan file buktinya jika ada
|
|
public function destroy($id)
|
|
{
|
|
$jadwal = JadwalImunisasi::find($id);
|
|
|
|
if (!$jadwal) {
|
|
return response()->json(['message' => 'Data tidak ditemukan'], 404);
|
|
}
|
|
|
|
// Hapus file bukti jika ada
|
|
if ($jadwal->bukti_file && Storage::disk('public')->exists($jadwal->bukti_file)) {
|
|
Storage::disk('public')->delete($jadwal->bukti_file);
|
|
}
|
|
|
|
$jadwal->delete();
|
|
|
|
return response()->json(['message' => 'Data berhasil dihapus'], 200);
|
|
}
|
|
|
|
// Toggle status selesai
|
|
public function toggleStatus($id)
|
|
{
|
|
$jadwal = JadwalImunisasi::find($id);
|
|
|
|
if (!$jadwal) {
|
|
return response()->json(['message' => 'Data tidak ditemukan'], 404);
|
|
}
|
|
|
|
$jadwal->is_done = !$jadwal->is_done;
|
|
$jadwal->save();
|
|
|
|
return response()->json($jadwal, 200);
|
|
}
|
|
} |