praakreditasi/app/Http/Controllers/MasterPitStopController.php
2026-05-07 19:26:20 +07:00

146 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\MasterPitStopPraAkre;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class MasterPitStopController extends Controller
{
private function dtInt($value, $default = 0)
{
$n = is_numeric($value) ? (int) $value : (int) $default;
return $n < 0 ? (int) $default : $n;
}
public function index()
{
return view('master_pitstop.index', [
'title' => 'Master PitStop',
]);
}
public function data(Request $request)
{
$draw = $this->dtInt($request->input('draw'), 1);
$start = $this->dtInt($request->input('start'), 0);
$length = $this->dtInt($request->input('length'), 10);
if ($length < 1) $length = 10;
if ($length > 200) $length = 200;
$search = trim((string) data_get($request->all(), 'search.value', ''));
$baseNoSearch = MasterPitStopPraAkre::query()
->select(['id', 'nama', 'statusenabled'])
->orderBy('id');
$recordsTotal = (clone $baseNoSearch)->count();
$base = clone $baseNoSearch;
if ($search !== '') {
$base->where('nama', 'ILIKE', '%' . $search . '%');
}
$recordsFiltered = $search === '' ? $recordsTotal : (clone $base)->count();
$rows = $base
->orderBy('nama')
->offset($start)
->limit($length)
->get();
$data = $rows->map(function ($r) {
return [
'id' => (int) $r->id,
'nama' => (string) ($r->nama ?? '-'),
'statusenabled' => (bool) $r->statusenabled,
];
})->values();
return response()->json([
'draw' => $draw,
'recordsTotal' => $recordsTotal,
'recordsFiltered' => $recordsFiltered,
'data' => $data,
]);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'nama' => 'required|string|max:255',
'statusenabled' => 'nullable|boolean',
]);
if ($validator->fails()) {
return response()->json([
'error' => 1,
'message' => 'Validasi gagal.',
'errors' => $validator->errors(),
], 422);
}
$payload = $validator->validated();
$row = MasterPitStopPraAkre::create([
'nama' => trim($payload['nama']),
'statusenabled' => array_key_exists('statusenabled', $payload) ? (bool) $payload['statusenabled'] : true,
]);
return response()->json([
'error' => 0,
'message' => 'Berhasil menambah master pitstop.',
'data' => [
'id' => $row->id,
],
]);
}
public function update(Request $request, $id)
{
$row = MasterPitStopPraAkre::findOrFail($id);
$validator = Validator::make($request->all(), [
'nama' => 'required|string|max:255',
'statusenabled' => 'nullable'
]);
if ($validator->fails()) {
return response()->json([
'error' => 1,
'message' => 'Validasi gagal.',
'errors' => $validator->errors(),
], 422);
}
$payload = $validator->validated();
$row->update([
'nama' => trim($payload['nama']),
'statusenabled' => trim($payload['statusenabled'])
]);
return response()->json([
'error' => 0,
'message' => 'Berhasil mengubah master pitstop.',
]);
}
public function toggle(Request $request, $id)
{
$row = MasterPitStopPraAkre::findOrFail($id);
$row->statusenabled = !$row->statusenabled;
$row->save();
return response()->json([
'error' => 0,
'message' => $row->statusenabled ? 'Berhasil mengaktifkan.' : 'Berhasil menonaktifkan.',
'data' => [
'statusenabled' => (bool) $row->statusenabled,
],
]);
}
}