40 lines
1.4 KiB
PHP
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}");
|
|
}
|
|
}
|