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(), ]); } public function storeLabor(Request $request) { $validated = $request->validate([ 'trade_name' => 'required|string|max:255|unique:labor_rates,trade_name', 'hourly_rate' => 'required|numeric|min:0', 'status' => 'required|string|in:active,inactive', ]); LaborRate::create([ 'ulid' => (string) Str::ulid(), 'trade_name' => $validated['trade_name'], 'hourly_rate' => $validated['hourly_rate'], 'status' => $validated['status'], ]); return redirect()->back()->with('success', 'Labor rate added successfully.'); } public function updateLabor(Request $request, LaborRate $laborRate) { $validated = $request->validate([ 'trade_name' => 'required|string|max:255|unique:labor_rates,trade_name,' . $laborRate->id, 'hourly_rate' => 'required|numeric|min:0', 'status' => 'required|string|in:active,inactive', ]); $laborRate->update($validated); return redirect()->back()->with('success', 'Labor rate updated successfully.'); } public function destroyLabor(LaborRate $laborRate) { $laborRate->delete(); return redirect()->back()->with('success', 'Labor rate deleted successfully.'); } public function storeEquipment(Request $request) { $validated = $request->validate([ 'equipment_name' => 'required|string|max:255|unique:equipment_rates,equipment_name', 'hourly_rate' => 'required|numeric|min:0', 'status' => 'required|string|in:active,inactive', ]); EquipmentRate::create([ 'ulid' => (string) Str::ulid(), 'equipment_name' => $validated['equipment_name'], 'hourly_rate' => $validated['hourly_rate'], 'status' => $validated['status'], ]); return redirect()->back()->with('success', 'Equipment rate added successfully.'); } public function updateEquipment(Request $request, EquipmentRate $equipmentRate) { $validated = $request->validate([ 'equipment_name' => 'required|string|max:255|unique:equipment_rates,equipment_name,' . $equipmentRate->id, 'hourly_rate' => 'required|numeric|min:0', 'status' => 'required|string|in:active,inactive', ]); $equipmentRate->update($validated); return redirect()->back()->with('success', 'Equipment rate updated successfully.'); } public function destroyEquipment(EquipmentRate $equipmentRate) { $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.'); } }