70 lines
2.1 KiB
PHP
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('Создание заявки');
|
|
}
|
|
}
|