netgescon-day0/app/Http/Controllers/Condomino/DashboardController.php

64 lines
2.2 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Condomino;
use App\Http\Controllers\Condomino\Concerns\ResolvesCondominoAccess;
use App\Http\Controllers\Controller;
use App\Models\Documento;
use App\Models\Ticket;
use App\Models\UnitaRecapitoServizio;
use Illuminate\Support\Facades\Auth;
class DashboardController extends Controller
{
use ResolvesCondominoAccess;
public function index()
{
$user = Auth::user();
$soggettoId = $this->resolveSoggettoId($user);
$unitaImmobiliari = $this->resolveUserUnita($user);
$stabiliIds = $unitaImmobiliari->pluck('stabile_id')->filter()->unique();
// Statistiche principali
$stats = [
'unita_possedute' => $unitaImmobiliari->count(),
'ticket_aperti' => Ticket::where('soggetto_richiedente_id', $soggettoId)
->whereIn('stato', ['Aperto', 'Preso in Carico', 'In Lavorazione'])->count(),
'rate_scadute' => 0, // Implementeremo quando avremo le rate
'documenti_disponibili' => Documento::whereHasMorph('documentable', ['App\Models\Stabile'], function ($q) use ($stabiliIds) {
$q->whereIn('id', $stabiliIds);
})->count(),
];
// Ticket recenti
$ticketRecenti = Ticket::where('soggetto_richiedente_id', $soggettoId)
->with(['stabile', 'categoriaTicket'])
->orderBy('created_at', 'desc')
->take(5)
->get();
// Rate in scadenza (placeholder)
$rateInScadenza = collect();
// Ultimi documenti
$ultimiDocumenti = Documento::whereHasMorph('documentable', ['App\Models\Stabile'], function ($q) use ($stabiliIds) {
$q->whereIn('id', $stabiliIds);
})->orderBy('created_at', 'desc')->take(5)->get();
$serviceContactsCount = UnitaRecapitoServizio::query()
->whereIn('unita_id', $unitaImmobiliari->pluck('id')->all())
->where('attivo', true)
->count();
return view('condomino.dashboard', compact(
'stats',
'unitaImmobiliari',
'ticketRecenti',
'rateInScadenza',
'ultimiDocumenti',
'serviceContactsCount'
));
}
}