Kasir/app/Http/Controllers/LaporanController.php
2025-09-10 13:32:58 +07:00

124 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Services\LaporanService;
use App\Http\Requests\DetailLaporanRequest;
use App\Http\Requests\ExportLaporanRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class LaporanController extends Controller
{
private LaporanService $laporanService;
public function __construct(LaporanService $laporanService)
{
$this->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);
}
}
}