Team Roster Feature
Some checks failed
Tests / PHP 8.3 (push) Has been cancelled
Tests / PHP 8.4 (push) Has been cancelled
Tests / PHP 8.5 (push) Has been cancelled

This commit is contained in:
2026-06-08 17:45:15 +08:00
parent 3cb68bc6b0
commit 32c3e3af69
26 changed files with 1170 additions and 371 deletions

View File

@@ -7,6 +7,8 @@ use Illuminate\Http\Request;
use Inertia\Inertia;
use Modules\MasterData\Models\LaborRate;
use Modules\MasterData\Models\EquipmentRate;
use Modules\MasterData\Models\Team;
use App\Models\User;
use Illuminate\Support\Str;
class ResourceMasterController extends Controller
@@ -16,6 +18,8 @@ class ResourceMasterController extends Controller
return Inertia::render('MasterData::Resources/Index', [
'laborRates' => LaborRate::latest()->get(),
'equipmentRates' => EquipmentRate::latest()->get(),
'teams' => Team::with('users:id,ulid,name,email')->latest()->get(),
'employees' => User::whereIn('user_type', ['admin', 'employee'])->active()->select('id', 'ulid', 'name', 'email')->get(),
]);
}
@@ -92,4 +96,60 @@ class ResourceMasterController extends Controller
$equipmentRate->delete();
return redirect()->back()->with('success', 'Equipment rate deleted successfully.');
}
public function storeTeam(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255|unique:teams,name',
'description' => 'nullable|string',
'status' => 'required|string|in:active,inactive',
'user_ulids' => 'nullable|array',
'user_ulids.*' => 'string|exists:users,ulid',
]);
$team = Team::create([
'ulid' => (string) Str::ulid(),
'name' => $validated['name'],
'description' => $validated['description'] ?? null,
'status' => $validated['status'],
]);
if (!empty($validated['user_ulids'])) {
$userIds = User::whereIn('ulid', $validated['user_ulids'])->pluck('id')->toArray();
$team->users()->sync($userIds);
}
return redirect()->back()->with('success', 'Team created successfully.');
}
public function updateTeam(Request $request, Team $team)
{
$validated = $request->validate([
'name' => 'required|string|max:255|unique:teams,name,' . $team->id,
'description' => 'nullable|string',
'status' => 'required|string|in:active,inactive',
'user_ulids' => 'nullable|array',
'user_ulids.*' => 'string|exists:users,ulid',
]);
$team->update([
'name' => $validated['name'],
'description' => $validated['description'] ?? null,
'status' => $validated['status'],
]);
$userIds = [];
if (!empty($validated['user_ulids'])) {
$userIds = User::whereIn('ulid', $validated['user_ulids'])->pluck('id')->toArray();
}
$team->users()->sync($userIds);
return redirect()->back()->with('success', 'Team updated successfully.');
}
public function destroyTeam(Team $team)
{
$team->delete();
return redirect()->back()->with('success', 'Team deleted successfully.');
}
}