initial commit

This commit is contained in:
2026-09-23 12:45:02 +07:00
parent d16f454083
commit 507fc6ccdf
235 changed files with 19587 additions and 2835 deletions
@@ -6,7 +6,7 @@ use App\Http\Controllers\Controller;
use App\Models\{Matting, Cat, Kitten};
use App\Traits\LogsActivity;
use Illuminate\Http\{Request, RedirectResponse, JsonResponse};
use Illuminate\Support\Facades\{DB, Storage};
use Illuminate\Support\Facades\{DB, Storage, Gate};
use Illuminate\View\View;
class MattingController extends Controller
@@ -15,6 +15,7 @@ class MattingController extends Controller
public function index(): View
{
Gate::authorize('check-access', ['matting', 'read']);
$mattings = Matting::with(['sire', 'dam'])
->withCount('kittens')
->latest()
@@ -25,6 +26,7 @@ class MattingController extends Controller
public function create(): View
{
Gate::authorize('check-access', ['matting', 'create']);
$sires = Cat::where('jenis_kelamin', 'Jantan')->get(['id', 'nama_kucing', 'ras']);
$dams = Cat::where('jenis_kelamin', 'Betina')->get(['id', 'nama_kucing', 'ras']);
return view('pages.matting.create', compact('sires', 'dams'));
@@ -32,6 +34,7 @@ class MattingController extends Controller
public function getCatData($id): JsonResponse
{
Gate::authorize('check-access', ['matting', 'read']);
$cat = Cat::find($id);
if (!$cat) return response()->json(['error' => 'Kucing tidak ditemukan'], 404);
@@ -48,6 +51,7 @@ class MattingController extends Controller
*/
public function store(Request $request): RedirectResponse
{
Gate::authorize('check-access', ['matting', 'create']);
$this->validateMatting($request);
return DB::transaction(function () use ($request) {
@@ -79,6 +83,7 @@ class MattingController extends Controller
*/
public function edit(Matting $matting): View
{
Gate::authorize('check-access', ['matting', 'update']);
// Load relasi agar data anak muncul di form edit
$matting->load('kittens.cat');
@@ -93,6 +98,7 @@ class MattingController extends Controller
*/
public function update(Request $request, Matting $matting): RedirectResponse
{
Gate::authorize('check-access', ['matting', 'update']);
$this->validateMatting($request);
return DB::transaction(function () use ($request, $matting) {
@@ -157,14 +163,12 @@ class MattingController extends Controller
private function syncParentData(Request $request)
{
Cat::where('id', $request->sire_id)->update([
'pedigree' => $request->no_pedigree_bapak,
'microchip' => $request->no_microchip_bapak,
'tanggal_lahir' => $request->tgl_lahir_sire,
'kode_ems' => $request->ems_bapak // Sinkron EMS Bapak
]);
Cat::where('id', $request->dam_id)->update([
'pedigree' => $request->no_pedigree_ibu,
'microchip' => $request->no_microchip_ibu,
'tanggal_lahir' => $request->tgl_lahir_dam,
'kode_ems' => $request->ems_ibu // Sinkron EMS Ibu
@@ -218,6 +222,7 @@ class MattingController extends Controller
public function destroy(Matting $matting): RedirectResponse
{
Gate::authorize('check-access', ['matting', 'delete']);
return DB::transaction(function () use ($matting) {
try {
$pairName = ($matting->sire->nama_kucing ?? 'Sire') . ' x ' . ($matting->dam->nama_kucing ?? 'Dam');