laporanService = $laporanService; } /** * Endpoint untuk ringkasan laporan dengan caching */ public function ringkasan(Request $request) { try { $filter = $request->query('filter', 'bulan'); $page = (int) $request->query('page', 1); // Validasi filter if (!in_array($filter, ['hari', 'bulan'])) { return response()->json(['error' => 'Filter harus "hari" atau "bulan"'], 400); } $data = $this->laporanService->getRingkasan($filter, $page); return response()->json($data); } catch (\Exception $e) { Log::error('Error in ringkasan method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat mengambil data'], 500); } } /** * Detail laporan per produk */ public function detailPerProduk(DetailLaporanRequest $request) { try { $data = $this->laporanService->getDetailPerProduk($request->validated()); return response()->json($data); } catch (\Exception $e) { Log::error('Error in detail PerProduk method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat mengambil data produk'], 500); } } /** * Detail laporan per nampan */ public function detailPerNampan(DetailLaporanRequest $request) { try { $data = $this->laporanService->getDetailPerNampan($request->validated()); return response()->json($data); } catch (\Exception $e) { Log::error('Error in detailPerNampan method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat mengambil data nampan'], 500); } } /** * Export laporan ringkasan */ public function exportRingkasan(ExportLaporanRequest $request) { try { return $this->laporanService->exportRingkasan($request->validated()); } catch (\Exception $e) { Log::error('Error in exportRingkasan method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat export data'], 500); } } public function exportDetailNampan(Request $request) { try { return $this->laporanService->exportPerNampan($request->validate([ 'tanggal' => 'nullable|string', 'sales_id' => 'nullable|integer|exists:sales,id', 'produk_id' => 'nullable|integer|exists:produk,id', 'nama_pembeli' => 'nullable|string|max:255', 'format' => 'required|string|in:pdf,xlsx,csv', 'page' => 'nullable|integer|min:1', ])); } catch (\Exception $e) { Log::error('Error in exprot per nampan method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat export data'], 500); } } public function exportDetailProduk(Request $request) { try { return $this->laporanService->exportPerProduk($request->validate([ 'tanggal' => 'nullable|string', 'sales_id' => 'nullable|integer|exists:sales,id', 'nampan_id' => 'nullable|integer|exists:nampan,id', 'nama_pembeli' => 'nullable|string|max:255', 'format' => 'required|string|in:pdf,xlsx,csv', 'page' => 'nullable|integer|min:1', ])); } catch (\Exception $e) { Log::error('Error in exprot per nampan method: ' . $e->getMessage()); return response()->json(['error' => 'Terjadi kesalahan saat export data'], 500); } } }