json([ 'message' => 'Data user berhasil diambil', 'data' => $loker ]); } public function getByNomorLoker($nomor_loker) { $loker = Lokers::where('nomor_loker', $nomor_loker)->first(); if ($loker) { return response()->json($loker); } else { return response()->json([ 'message' => 'Loker tidak ditemukan' ], 404); } } //tambah loker public function store(Request $request) { $validator = Validator::make($request->all(), [ 'nomor_loker' => 'required|string', 'status' => 'required|in:kosong,digunakan,pending,servis' ]); if ($validator->fails()) { return response()->json(['errors' => $validator->errors()], 422); } $loker = lokers::create([ 'nomor_loker' => $request->nomor_loker, 'status' => $request->status ]); return response()->json([ 'message' => 'Loker berhasil ditambahkan', 'data' => $loker], 200); } // hapus loker berdasarkan id public function destroy($id) { $loker = Lokers::find($id); if (!$loker) { return response()->json([ 'message' => 'Loker tidak ditemukan' ], 404); } $loker->delete(); return response()->json([ 'message' => 'Loker berhasil dihapus' ], 200); } public function updateStatus(Request $request, $id) { $request->validate([ 'status' => 'required|in:kosong,digunakan,pending,servis' ]); $loker = Lokers::find($id); if (!$loker) { return response()->json(['message' => 'Loker tidak ditemukan'], 404); } $prevStatus = $loker->status; $loker->status = $request->status; $loker->save(); // Temukan penitipan aktif yang berhubungan $penitipan = Penitipan::where('loker_id', $loker->id) ->whereNull('waktu_selesai') ->latest() ->first(); if ($penitipan) { // Jika status berubah ke 'digunakan' dan waktu_mulai belum ada if ($request->status === 'digunakan' && !$penitipan->waktu_mulai) { $penitipan->waktu_mulai = now(); $penitipan->save(); } // Jika status berubah ke 'kosong' dan sebelumnya 'digunakan' if ($request->status === 'kosong' && $prevStatus === 'digunakan') { $penitipan->waktu_selesai = now(); // Parsing waktu selesai dan mulai ke Carbon $end = Carbon::parse($penitipan->waktu_mulai); $start = Carbon::parse($penitipan->waktu_selesai); // Hitung durasi dalam detik $durasiDetik = $end->diffInSeconds($start); // Hitung blok per 30 detik $blok = ceil($durasiDetik / 30); $biaya = $blok * 1000; // Simpan durasi dan biaya $penitipan->durasi_menit = $durasiDetik; // kamu mau isi dengan jumlah detik (bukan menit) $penitipan->biaya = $biaya; $penitipan->save(); } } return response()->json([ 'message' => 'Status loker berhasil diperbarui', 'data' => $loker ], 200); } public function today() { $tanggal = Carbon::today()->toDateString(); $penitipanList = Penitipan::whereDate('waktu_selesai', $tanggal)->get(); $total = 0; foreach ($penitipanList as $item) { $total += $item->biaya ?? 0; } return response()->json([ 'tanggal' => $tanggal, 'total_penghasilan' => $total, 'jumlah_transaksi' => $penitipanList->count(), 'detail' => $penitipanList, ]); } public function countByDate(Request $request) { $request->validate([ 'tanggal' => 'required|date', ]); $tanggal = Carbon::parse($request->tanggal)->toDateString(); $penitipanList = Penitipan::whereDate('waktu_selesai', $tanggal)->get(); $total = 0; foreach ($penitipanList as $item) { $total += $item->biaya ?? 0; // jika biaya null, anggap 0 } return response()->json([ 'tanggal' => $tanggal, 'total_penghasilan' => $total, 'jumlah_transaksi' => $penitipanList->count(), 'detail' => $penitipanList, ]); } }