109 lines
4.1 KiB
PHP
Executable File
109 lines
4.1 KiB
PHP
Executable File
<?php
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Documento;
|
|
use App\Models\MovimentoContabile;
|
|
use App\Models\Stabile;
|
|
use App\Models\Ticket;
|
|
use Illuminate\Http\Request; // hint for analyzers
|
|
use Illuminate\Support\Facades\Auth;
|
|
// hint for analyzers
|
|
|
|
class DashboardController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
if ($this->isMobileRequest($request) && ! $request->boolean('desktop')) {
|
|
return redirect()->route('admin.mobile');
|
|
}
|
|
|
|
// Ottieni l'ID dell'amministratore in modo sicuro
|
|
$user = Auth::user();
|
|
$amministratore_id = null;
|
|
|
|
if ($user && $user->amministratore) {
|
|
$amministratore_id = $user->amministratore->id; // Usa 'id' invece di 'id_amministratore'
|
|
}
|
|
|
|
// Se l'utente non ha un amministratore associato, mostra vista vuota
|
|
if (! $amministratore_id) {
|
|
// Utente senza amministratore: vista vuota
|
|
return view('admin.dashboard', [
|
|
'stats' => [
|
|
'stabili_gestiti' => 0,
|
|
'stabili_attivi' => 0,
|
|
'ticket_aperti' => 0,
|
|
'ticket_urgenti' => 0,
|
|
],
|
|
'ticketsAperti' => collect(),
|
|
'scadenzeImminenti' => collect(),
|
|
'ultimiDocumenti' => collect(),
|
|
'ultimiMovimenti' => collect(),
|
|
]);
|
|
}
|
|
|
|
// Statistiche principali
|
|
$stats = [
|
|
'stabili_gestiti' => Stabile::where('amministratore_id', $amministratore_id)->count(),
|
|
'stabili_attivi' => Stabile::where('amministratore_id', $amministratore_id)->where('stato', 'attivo')->count(),
|
|
'ticket_aperti' => Ticket::whereHas('stabile', function ($q) use ($amministratore_id) {
|
|
$q->where('amministratore_id', $amministratore_id);
|
|
})->whereIn('stato', ['Aperto', 'Preso in Carico', 'In Lavorazione'])->count(),
|
|
'ticket_urgenti' => Ticket::whereHas('stabile', function ($q) use ($amministratore_id) {
|
|
$q->where('amministratore_id', $amministratore_id);
|
|
})->where('priorita', 'Urgente')->whereIn('stato', ['Aperto', 'Preso in Carico'])->count(),
|
|
];
|
|
|
|
// Ticket aperti da lavorare
|
|
$ticketsAperti = Ticket::with(['stabile', 'categoriaTicket'])
|
|
->whereHas('stabile', function ($q) use ($amministratore_id) {
|
|
$q->where('amministratore_id', $amministratore_id);
|
|
})
|
|
->whereIn('stato', ['Aperto', 'Preso in Carico', 'In Lavorazione'])
|
|
->orderBy('priorita', 'desc')
|
|
->orderBy('created_at', 'desc')
|
|
->take(5)
|
|
->get();
|
|
|
|
// Scadenze imminenti (prossimi 30 giorni)
|
|
$scadenzeImminenti = collect(); // Placeholder per quando implementeremo le rate
|
|
|
|
// Ultimi documenti caricati
|
|
$ultimiDocumenti = Documento::with('documentable')
|
|
->whereHasMorph('documentable', [Stabile::class], function ($q) use ($amministratore_id) {
|
|
$q->where('amministratore_id', $amministratore_id);
|
|
})
|
|
->orderBy('created_at', 'desc')
|
|
->take(5)
|
|
->get();
|
|
|
|
// Movimenti contabili recenti
|
|
$ultimiMovimenti = MovimentoContabile::with(['stabile', 'fornitore'])
|
|
->whereHas('stabile', function ($q) use ($amministratore_id) {
|
|
$q->where('amministratore_id', $amministratore_id);
|
|
})
|
|
->orderBy('created_at', 'desc')
|
|
->take(5)
|
|
->get();
|
|
|
|
return view('admin.dashboard', compact(
|
|
'stats',
|
|
'ticketsAperti',
|
|
'scadenzeImminenti',
|
|
'ultimiDocumenti',
|
|
'ultimiMovimenti'
|
|
));
|
|
}
|
|
|
|
private function isMobileRequest(Request $request): bool
|
|
{
|
|
$ua = strtolower((string) $request->header('User-Agent', ''));
|
|
|
|
return str_contains($ua, 'android')
|
|
|| str_contains($ua, 'iphone')
|
|
|| str_contains($ua, 'ipad')
|
|
|| str_contains($ua, 'mobile');
|
|
}
|
|
}
|