Files
terrain_monitor_app/lib/models/statistiche.dart
2025-10-20 19:17:45 +02:00

104 lines
3.0 KiB
Dart

class Statistiche {
final int totaleAllarmi;
final int totaleSiti;
final int allarmiAperti;
final int allarmiRecenti7gg;
// Per severità
final int allarmiCritical;
final int allarmiWarning;
final int allarmiInfo;
// Per stato
final int allarmiNuovo;
final int allarmiInGestione;
final int allarmiRisolto;
// Siti per tipo
final int sitiPonte;
final int sitiGalleria;
final int sitiDiga;
final int sitiFrana;
final int sitiVersante;
final int sitiEdificio;
Statistiche({
required this.totaleAllarmi,
required this.totaleSiti,
required this.allarmiAperti,
required this.allarmiRecenti7gg,
required this.allarmiCritical,
required this.allarmiWarning,
required this.allarmiInfo,
required this.allarmiNuovo,
required this.allarmiInGestione,
required this.allarmiRisolto,
required this.sitiPonte,
required this.sitiGalleria,
required this.sitiDiga,
required this.sitiFrana,
required this.sitiVersante,
required this.sitiEdificio,
});
factory Statistiche.fromJson(Map<String, dynamic> json) {
return Statistiche(
totaleAllarmi: json['totale_allarmi'] as int,
totaleSiti: json['totale_siti'] as int,
allarmiAperti: json['allarmi_aperti'] as int,
allarmiRecenti7gg: json['allarmi_recenti_7gg'] as int,
allarmiCritical: json['allarmi_critical'] as int,
allarmiWarning: json['allarmi_warning'] as int,
allarmiInfo: json['allarmi_info'] as int,
allarmiNuovo: json['allarmi_nuovo'] as int,
allarmiInGestione: json['allarmi_in_gestione'] as int,
allarmiRisolto: json['allarmi_risolto'] as int,
sitiPonte: json['siti_ponte'] as int,
sitiGalleria: json['siti_galleria'] as int,
sitiDiga: json['siti_diga'] as int,
sitiFrana: json['siti_frana'] as int,
sitiVersante: json['siti_versante'] as int,
sitiEdificio: json['siti_edificio'] as int,
);
}
int get totaleSeverita => allarmiCritical + allarmiWarning + allarmiInfo;
int get totaleStato => allarmiNuovo + allarmiInGestione + allarmiRisolto;
double get percentualeCritici =>
totaleAllarmi > 0 ? (allarmiCritical / totaleAllarmi) * 100 : 0;
double get percentualeAperti =>
totaleAllarmi > 0 ? (allarmiAperti / totaleAllarmi) * 100 : 0;
}
class AllarmePerGiorno {
final DateTime data;
final int count;
AllarmePerGiorno({
required this.data,
required this.count,
});
factory AllarmePerGiorno.fromJson(Map<String, dynamic> json) {
return AllarmePerGiorno(
data: DateTime.parse(json['data'] as String),
count: json['count'] as int,
);
}
}
class AllarmiPerGiornoResponse {
final List<AllarmePerGiorno> dati;
AllarmiPerGiornoResponse({required this.dati});
factory AllarmiPerGiornoResponse.fromJson(Map<String, dynamic> json) {
return AllarmiPerGiornoResponse(
dati: (json['dati'] as List)
.map((item) => AllarmePerGiorno.fromJson(item as Map<String, dynamic>))
.toList(),
);
}
}