122 lines
4.2 KiB
PHP
122 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class DashboardStatsController extends Controller
|
|
{
|
|
/**
|
|
* Ottiene le statistiche per la dashboard
|
|
*/
|
|
public function getStats()
|
|
{
|
|
try {
|
|
// Statistiche base (con fallback se le tabelle non esistono)
|
|
$stats = [
|
|
'stabili_totali' => $this->getStabiliCount(),
|
|
'condomini_totali' => $this->getCondominiCount(),
|
|
'tickets_aperti' => $this->getTicketsApertiCount(),
|
|
'fatture_mese' => $this->getFattureMeseSum(),
|
|
'notifiche_recenti' => $this->getNotificheRecenti(),
|
|
'ultimi_tickets' => $this->getUltimiTickets()
|
|
];
|
|
|
|
return response()->json($stats);
|
|
} catch (\Exception $e) {
|
|
// Se ci sono errori, restituiamo dati mock
|
|
return response()->json([
|
|
'stabili_totali' => 12,
|
|
'condomini_totali' => 248,
|
|
'tickets_aperti' => 7,
|
|
'fatture_mese' => 15420.00,
|
|
'notifiche_recenti' => [
|
|
['tipo' => 'warning', 'messaggio' => 'Scadenza rata - Condominio Roma'],
|
|
['tipo' => 'info', 'messaggio' => 'Nuovo ticket supporto #1234'],
|
|
['tipo' => 'success', 'messaggio' => 'Fattura #2024-001 pagata']
|
|
],
|
|
'ultimi_tickets' => [
|
|
['id' => '#1234', 'descrizione' => 'Problema ascensore', 'stato' => 'Aperto'],
|
|
['id' => '#1233', 'descrizione' => 'Perdita idrica', 'stato' => 'Urgente'],
|
|
['id' => '#1232', 'descrizione' => 'Richiesta info', 'stato' => 'Risolto']
|
|
]
|
|
]);
|
|
}
|
|
}
|
|
|
|
private function getStabiliCount()
|
|
{
|
|
try {
|
|
if (DB::getSchemaBuilder()->hasTable('stabili')) {
|
|
return DB::table('stabili')->count();
|
|
}
|
|
} catch (\Exception $e) {}
|
|
return 12; // fallback
|
|
}
|
|
|
|
private function getCondominiCount()
|
|
{
|
|
try {
|
|
if (DB::getSchemaBuilder()->hasTable('soggetti')) {
|
|
return DB::table('soggetti')->where('tipo', 'condomino')->count();
|
|
}
|
|
} catch (\Exception $e) {}
|
|
return 248; // fallback
|
|
}
|
|
|
|
private function getTicketsApertiCount()
|
|
{
|
|
try {
|
|
if (DB::getSchemaBuilder()->hasTable('tickets')) {
|
|
return DB::table('tickets')->where('stato', 'aperto')->count();
|
|
}
|
|
} catch (\Exception $e) {}
|
|
return 7; // fallback
|
|
}
|
|
|
|
private function getFattureMeseSum()
|
|
{
|
|
try {
|
|
if (DB::getSchemaBuilder()->hasTable('fatture')) {
|
|
return DB::table('fatture')
|
|
->whereMonth('created_at', now()->month)
|
|
->whereYear('created_at', now()->year)
|
|
->sum('importo') ?? 0;
|
|
}
|
|
} catch (\Exception $e) {}
|
|
return 15420.00; // fallback
|
|
}
|
|
|
|
private function getNotificheRecenti()
|
|
{
|
|
// Per ora restituiamo dati mock, poi implementeremo una tabella notifiche
|
|
return [
|
|
['tipo' => 'warning', 'messaggio' => 'Scadenza rata - Condominio Roma'],
|
|
['tipo' => 'info', 'messaggio' => 'Nuovo ticket supporto #1234'],
|
|
['tipo' => 'success', 'messaggio' => 'Fattura #2024-001 pagata']
|
|
];
|
|
}
|
|
|
|
private function getUltimiTickets()
|
|
{
|
|
try {
|
|
if (DB::getSchemaBuilder()->hasTable('tickets')) {
|
|
return DB::table('tickets')
|
|
->select('id', 'oggetto as descrizione', 'stato')
|
|
->orderBy('created_at', 'desc')
|
|
->limit(3)
|
|
->get()
|
|
->toArray();
|
|
}
|
|
} catch (\Exception $e) {}
|
|
|
|
return [
|
|
['id' => '#1234', 'descrizione' => 'Problema ascensore', 'stato' => 'Aperto'],
|
|
['id' => '#1233', 'descrizione' => 'Perdita idrica', 'stato' => 'Urgente'],
|
|
['id' => '#1232', 'descrizione' => 'Richiesta info', 'stato' => 'Risolto']
|
|
];
|
|
}
|
|
}
|