ganti label & perbaikan fungsi report & matting

This commit is contained in:
Dwi F Sukmana
2026-02-08 18:45:10 +07:00
parent 9301d81259
commit e83502af40
7 changed files with 137 additions and 115 deletions
@@ -3,18 +3,25 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\{Matting, User, Cat};
use App\Models\{Matting, User, Cat, Setting};
use App\Exports\MattingExport;
use Maatwebsite\Excel\Facades\Excel;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use Illuminate\Support\Facades\Gate;
class MattingReportController extends Controller
{
public function index(Request $request)
{
// 1. Eager Loading Lengkap (Sire, Dam, PIC, dan Detail Anak)
$query = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->withCount('kittens');
// PERBAIKAN: Proteksi akses menggunakan matriks permission
if (Gate::allows('check-access', ['matting_reports', 'read'])) {
// Lanjut proses
}
// 1. Eager Loading Lengkap (Menjamin Sire/Dam/PIC/Kittens terload dengan efisien)
$query = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->withCount('kittens');
// 2. Filter Nama Indukan (Sire atau Dam)
if ($request->filled('parent_name')) {
$name = $request->parent_name;
@@ -33,13 +40,13 @@ $query = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->withCount('kitten
});
}
// 4. Filter Registry (ICA, CFA, WCF, dll)
// 4. PERBAIKAN: Filter Registry (Mendukung Multiple Choice ICA, CFA, dll)
if ($request->filled('registry')) {
$reg = $request->registry;
$reg = is_array($request->registry) ? $request->registry : [$request->registry];
$query->where(function($q) use ($reg) {
$q->where('registry', $reg)
->orWhereHas('sire', fn($sq) => $sq->where('registry', $reg))
->orWhereHas('dam', fn($sq) => $sq->where('registry', $reg));
$q->whereIn('registry', $reg) // Cek di table matting
->orWhereHas('sire', fn($sq) => $sq->whereIn('registry', $reg)) // Cek di table cats (sire)
->orWhereHas('dam', fn($sq) => $sq->whereIn('registry', $reg)); // Cek di table cats (dam)
});
}
@@ -64,49 +71,48 @@ $query = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->withCount('kitten
}
// 8. Eksekusi dengan Pagination
$mattings = $query->latest()->paginate(15)->withQueryString();
$mattings = $query->latest()->paginate(15)->withQueryString();
// 9. Data Pendukung UI (Agar Dropdown di Blade berfungsi)
// 9. Data Pendukung UI (Mengambil data unik dari database agar dropdown akurat)
$breeds = Cat::distinct()->whereNotNull('ras')->pluck('ras');
$registries = ['ICA', 'CFA', 'WCF', 'FFF', 'LOOF'];
$statuses = ['Breeding', 'Hamil', 'Teradopsi', 'RIP'];
return view('pages.reports.matting.index', compact(
'mattings', 'breeds', 'registries', 'statuses'
));
'mattings', 'breeds', 'registries', 'statuses'
));
}
protected function processExport($data, $format)
{
$fileName = "Lineage_Report_" . now()->format('Ymd_His');
{
$fileName = "Lineage_Report_" . now()->format('Ymd_His');
if ($format === 'xlsx') {
return Excel::download(new MattingExport($data), "{$fileName}.xlsx");
if ($format === 'xlsx') {
return Excel::download(new MattingExport($data), "{$fileName}.xlsx");
}
// Penyempurnaan PDF: Tambahkan opsi font dan akses file lokal
$pdf = Pdf::loadView('pages.reports.matting.pdf', [
'data' => $data,
'setting' => Setting::pluck('value', 'key')
]);
return $pdf->setPaper('a4', 'landscape')
->setOption([
'tempDir' => public_path(),
'chroot' => public_path(),
'isHtml5ParserEnabled' => true,
'isRemoteEnabled' => true, // Penting agar gambar dari storage muncul di PDF
])
->setWarnings(false)
->download("{$fileName}.pdf");
}
// Penyempurnaan PDF: Tambahkan opsi font dan akses file lokal (untuk logo)
$pdf = Pdf::loadView('pages.reports.matting.pdf', [
'data' => $data,
// Kirim data setting jika ingin menampilkan logo/branding dinamis di PDF
'setting' => \App\Models\Setting::pluck('value', 'key')
]);
return $pdf->setPaper('a4', 'landscape')
->setOption([
'tempDir' => public_path(),
'chroot' => public_path(),
])
->setWarnings(false) // Menghindari PDF korup karena error kecil di blade
->download("{$fileName}.pdf");
}
public function show($id)
{
// Eager loading mendalam untuk silsilah dan data anak
$matting = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->findOrFail($id);
return view('pages.reports.matting.show', compact('matting'));
}
{
// Eager loading mendalam: load sire/dam (untuk foto), pic (registrar), dan kittens
$matting = Matting::with(['sire', 'dam', 'pic', 'kittens.cat'])->findOrFail($id);
return view('pages.reports.matting.show', compact('matting'));
}
}