2025-12-01 12:50:47 +07:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
|
|
use App\Models\Asset;
|
|
|
|
|
use App\Models\AssetMaintenance;
|
2025-12-02 13:21:34 +07:00
|
|
|
use App\Services\Asset\AssetService;
|
2025-12-01 12:50:47 +07:00
|
|
|
use Illuminate\Http\RedirectResponse;
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
|
use Illuminate\View\View;
|
|
|
|
|
|
|
|
|
|
class AssetMaintenanceController extends Controller
|
|
|
|
|
{
|
2025-12-02 13:21:34 +07:00
|
|
|
public function __construct(private readonly AssetService $assets)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-01 12:50:47 +07:00
|
|
|
public function index(): View
|
|
|
|
|
{
|
2025-12-02 14:23:28 +07:00
|
|
|
$status = request('status');
|
|
|
|
|
$maintenances = AssetMaintenance::with('asset')
|
|
|
|
|
->when($status, fn($q) => $q->where('status', $status))
|
|
|
|
|
->latest()
|
|
|
|
|
->paginate(config('system.ui.table_page_size', 20))
|
|
|
|
|
->withQueryString();
|
2025-12-01 12:50:47 +07:00
|
|
|
$assets = Asset::orderBy('code')->get();
|
|
|
|
|
|
2025-12-02 14:23:28 +07:00
|
|
|
return view('assets.maintenances', compact('maintenances', 'assets', 'status'));
|
2025-12-01 12:50:47 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function store(Request $request): RedirectResponse
|
|
|
|
|
{
|
|
|
|
|
$data = $request->validate([
|
|
|
|
|
'asset_id' => ['required', 'uuid', 'exists:assets,id'],
|
|
|
|
|
'performed_at' => ['nullable', 'date'],
|
|
|
|
|
'description' => ['required', 'string', 'max:255'],
|
|
|
|
|
'vendor' => ['nullable', 'string', 'max:255'],
|
|
|
|
|
'cost' => ['nullable', 'numeric', 'min:0'],
|
|
|
|
|
'notes' => ['nullable', 'string'],
|
|
|
|
|
]);
|
|
|
|
|
|
2025-12-02 13:21:34 +07:00
|
|
|
$asset = Asset::findOrFail($data['asset_id']);
|
|
|
|
|
$this->assets->maintenance($asset, $data);
|
2025-12-01 12:50:47 +07:00
|
|
|
|
|
|
|
|
return back()->with('success', 'Data perawatan berhasil dicatat.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function update(Request $request, AssetMaintenance $asset_maintenance): RedirectResponse
|
|
|
|
|
{
|
|
|
|
|
$data = $request->validate([
|
|
|
|
|
'asset_id' => ['required', 'uuid', 'exists:assets,id'],
|
|
|
|
|
'performed_at' => ['nullable', 'date'],
|
|
|
|
|
'description' => ['required', 'string', 'max:255'],
|
|
|
|
|
'vendor' => ['nullable', 'string', 'max:255'],
|
|
|
|
|
'cost' => ['nullable', 'numeric', 'min:0'],
|
|
|
|
|
'status' => ['required', 'string'],
|
|
|
|
|
'notes' => ['nullable', 'string'],
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$asset_maintenance->update($data);
|
|
|
|
|
|
|
|
|
|
return back()->with('success', 'Data perawatan berhasil diperbarui.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function destroy(AssetMaintenance $asset_maintenance): RedirectResponse
|
|
|
|
|
{
|
|
|
|
|
$asset_maintenance->delete();
|
|
|
|
|
|
|
|
|
|
return back()->with('success', 'Data perawatan dihapus.');
|
|
|
|
|
}
|
|
|
|
|
}
|