124 lines
4.1 KiB
PHP
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);
|
|
}
|
|
}
|
|
}
|