81 lines
2.6 KiB
PHP
81 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\Labors\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
use Modules\Labors\Models\Labor;
|
|
use Modules\Labors\Models\Skill;
|
|
use Illuminate\Support\Str;
|
|
|
|
class LaborController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
return Inertia::render('Labors::Index', [
|
|
'labors' => Labor::with('skills')->latest()->get(),
|
|
'skills' => Skill::orderBy('name')->get(),
|
|
]);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'category' => 'required|string|in:skilled,unskilled',
|
|
'hourly_rate' => 'required|numeric|min:0',
|
|
'status' => 'required|string|in:active,inactive',
|
|
'skills' => 'nullable|array',
|
|
'skills.*' => 'integer|exists:skills,id',
|
|
]);
|
|
|
|
\DB::transaction(function () use ($validated) {
|
|
$labor = Labor::create([
|
|
'ulid' => (string) Str::ulid(),
|
|
'name' => $validated['name'],
|
|
'category' => $validated['category'],
|
|
'hourly_rate' => $validated['hourly_rate'],
|
|
'status' => $validated['status'],
|
|
]);
|
|
|
|
if (!empty($validated['skills'])) {
|
|
$labor->skills()->sync($validated['skills']);
|
|
}
|
|
});
|
|
|
|
return redirect()->back()->with('success', 'Labor record created successfully.');
|
|
}
|
|
|
|
public function update(Request $request, Labor $labor)
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'category' => 'required|string|in:skilled,unskilled',
|
|
'hourly_rate' => 'required|numeric|min:0',
|
|
'status' => 'required|string|in:active,inactive',
|
|
'skills' => 'nullable|array',
|
|
'skills.*' => 'integer|exists:skills,id',
|
|
]);
|
|
|
|
\DB::transaction(function () use ($labor, $validated) {
|
|
$labor->update([
|
|
'name' => $validated['name'],
|
|
'category' => $validated['category'],
|
|
'hourly_rate' => $validated['hourly_rate'],
|
|
'status' => $validated['status'],
|
|
]);
|
|
|
|
$labor->skills()->sync($validated['skills'] ?? []);
|
|
});
|
|
|
|
return redirect()->back()->with('success', 'Labor record updated successfully.');
|
|
}
|
|
|
|
public function destroy(Labor $labor)
|
|
{
|
|
$labor->delete();
|
|
return redirect()->back()->with('success', 'Labor record deleted successfully.');
|
|
}
|
|
}
|