first&last

This commit is contained in:
sbb45
2026-03-20 15:47:17 +05:00
commit d6441abdd2
230 changed files with 20367 additions and 0 deletions
@@ -0,0 +1,69 @@
<?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('Создание заявки');
}
}
@@ -0,0 +1,35 @@
<?php
namespace App\Livewire\MyRequests;
use App\Models\ServiceRequest;
use Livewire\Attributes\Layout;
use Livewire\Component;
use Livewire\WithPagination;
#[Layout('layouts.app')]
class MyRequestsIndexPage extends Component
{
use WithPagination;
public string $search = '';
public function render()
{
$requests = ServiceRequest::query()
->with(['status', 'priority', 'type'])
->where('client_id', auth()->id())
->when($this->search !== '', function ($query): void {
$query->where(function ($q): void {
$q->where('ticket_number', 'like', "%{$this->search}%")
->orWhere('title', 'like', "%{$this->search}%");
});
})
->latest()
->paginate(15);
return view('livewire.my-requests.my-requests-index-page', [
'requests' => $requests,
])->title('Мои заявки');
}
}