156 lines
5.4 KiB
PHP
156 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace Modules\MasterData\Http\Controllers;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
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
|
|
{
|
|
public function index()
|
|
{
|
|
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(),
|
|
]);
|
|
}
|
|
|
|
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.');
|
|
}
|
|
}
|