Files
2026-03-20 15:47:17 +05:00

70 lines
2.1 KiB
PHP

<?php
namespace App\Livewire\MyRequests;
use App\Enums\StatusSlug;
use App\Models\Equipment;
use App\Models\Priority;
use App\Models\RequestType;
use App\Models\Status;
use App\Services\RequestService;
use Livewire\Attributes\Layout;
use Livewire\Component;
#[Layout('layouts.app')]
class MyRequestFormPage extends Component
{
public string $title = '';
public string $description = '';
public string $typeId = '';
public string $equipmentId = '';
public string $priorityId = '';
public function mount(): void
{
abort_unless(auth()->user()->isClient(), 403);
$this->priorityId = (string) Priority::query()->where('level', 2)->value('id');
}
public function save(RequestService $requestService)
{
$this->validate([
'title' => ['required', 'string', 'max:255'],
'description' => ['required', 'string'],
'typeId' => ['required', 'exists:request_types,id'],
'priorityId' => ['required', 'exists:priorities,id'],
'equipmentId' => ['nullable', 'exists:equipment,id'],
]);
$statusId = (string) Status::query()->where('slug', StatusSlug::NEW->value)->value('id');
$request = $requestService->create([
'title' => $this->title,
'description' => $this->description,
'type_id' => $this->typeId,
'priority_id' => $this->priorityId,
'status_id' => $statusId,
'client_id' => auth()->id(),
'equipment_id' => $this->equipmentId ?: null,
'assigned_to' => null,
], auth()->user());
session()->flash('success', 'Заявка создана.');
return redirect()->route('my-requests.show', $request);
}
public function render()
{
return view('livewire.my-requests.my-request-form-page', [
'types' => RequestType::query()->orderBy('name')->get(),
'equipmentItems' => Equipment::query()->where('client_id', auth()->id())->orderBy('name')->get(),
'priorities' => Priority::query()->orderBy('level')->get(),
])->title('Создание заявки');
}
}