Files
AirService_potyk/app/Livewire/Users/UserShowPage.php
T
2026-03-20 15:47:17 +05:00

40 lines
1.4 KiB
PHP

<?php
namespace App\Livewire\Users;
use App\Models\ActivityLog;
use App\Models\ServiceRequest;
use App\Models\User;
use Livewire\Attributes\Layout;
use Livewire\Component;
#[Layout('layouts.app')]
class UserShowPage extends Component
{
public User $user;
public function mount(User $user): void
{
abort_unless(auth()->user()->isAdmin() || auth()->user()->isManager(), 403);
$this->user = $user->load('department');
}
public function render()
{
$assigned = ServiceRequest::query()->where('assigned_to', $this->user->id)->count();
$resolved = ServiceRequest::query()
->where('assigned_to', $this->user->id)
->whereHas('status', fn ($q) => $q->whereIn('slug', ['resolved', 'closed']))
->count();
$avgRating = ServiceRequest::query()->where('assigned_to', $this->user->id)->whereNotNull('client_rating')->avg('client_rating');
return view('livewire.users.user-show-page', [
'assigned' => $assigned,
'resolved' => $resolved,
'avgRating' => $avgRating ? round((float) $avgRating, 2) : 0,
'activities' => ActivityLog::query()->where('user_id', $this->user->id)->latest('created_at')->limit(20)->get(),
'recentRequests' => ServiceRequest::query()->where('assigned_to', $this->user->id)->latest()->limit(10)->get(),
])->title("Профиль: {$this->user->name}");
}
}