146 lines
4.1 KiB
PHP
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,
|
|
],
|
|
]);
|
|
}
|
|
}
|
|
|