app mobile allarmi prima
This commit is contained in:
111
lib/models/allarme.dart
Normal file
111
lib/models/allarme.dart
Normal file
@@ -0,0 +1,111 @@
|
||||
class Allarme {
|
||||
final int id;
|
||||
final int sitoId;
|
||||
final String tipo;
|
||||
final String severita;
|
||||
final String stato;
|
||||
final String titolo;
|
||||
final String? descrizione;
|
||||
final double? valoreRilevato;
|
||||
final double? valoreSoglia;
|
||||
final String? unitaMisura;
|
||||
final Map<String, dynamic>? datiSensori;
|
||||
final DateTime timestampRilevamento;
|
||||
final DateTime createdAt;
|
||||
|
||||
Allarme({
|
||||
required this.id,
|
||||
required this.sitoId,
|
||||
required this.tipo,
|
||||
required this.severita,
|
||||
required this.stato,
|
||||
required this.titolo,
|
||||
this.descrizione,
|
||||
this.valoreRilevato,
|
||||
this.valoreSoglia,
|
||||
this.unitaMisura,
|
||||
this.datiSensori,
|
||||
required this.timestampRilevamento,
|
||||
required this.createdAt,
|
||||
});
|
||||
|
||||
factory Allarme.fromJson(Map<String, dynamic> json) {
|
||||
return Allarme(
|
||||
id: json['id'] as int,
|
||||
sitoId: json['sito_id'] as int,
|
||||
tipo: json['tipo'] as String,
|
||||
severita: json['severita'] as String,
|
||||
stato: json['stato'] as String,
|
||||
titolo: json['titolo'] as String,
|
||||
descrizione: json['descrizione'] as String?,
|
||||
valoreRilevato: json['valore_rilevato'] != null
|
||||
? (json['valore_rilevato'] as num).toDouble()
|
||||
: null,
|
||||
valoreSoglia: json['valore_soglia'] != null
|
||||
? (json['valore_soglia'] as num).toDouble()
|
||||
: null,
|
||||
unitaMisura: json['unita_misura'] as String?,
|
||||
datiSensori: json['dati_sensori'] as Map<String, dynamic>?,
|
||||
timestampRilevamento: DateTime.parse(json['timestamp_rilevamento'] as String),
|
||||
createdAt: DateTime.parse(json['created_at'] as String),
|
||||
);
|
||||
}
|
||||
|
||||
bool get isCritical => severita == 'critical';
|
||||
bool get isWarning => severita == 'warning';
|
||||
bool get isRisolto => stato == 'risolto';
|
||||
|
||||
String get tipoReadable {
|
||||
final labels = {
|
||||
'movimento_terreno': 'Movimento Terreno',
|
||||
'deformazione': 'Deformazione',
|
||||
'altro': 'Altro',
|
||||
};
|
||||
return labels[tipo] ?? tipo;
|
||||
}
|
||||
|
||||
String get statoReadable {
|
||||
final labels = {
|
||||
'nuovo': 'Nuovo',
|
||||
'in_gestione': 'In Gestione',
|
||||
'risolto': 'Risolto',
|
||||
};
|
||||
return labels[stato] ?? stato;
|
||||
}
|
||||
|
||||
String get severitaReadable {
|
||||
final labels = {
|
||||
'critical': 'CRITICO',
|
||||
'warning': 'AVVISO',
|
||||
'info': 'INFO',
|
||||
};
|
||||
return labels[severita] ?? severita.toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
class AllarmeListResponse {
|
||||
final int total;
|
||||
final List<Allarme> items;
|
||||
final int page;
|
||||
final int pageSize;
|
||||
|
||||
AllarmeListResponse({
|
||||
required this.total,
|
||||
required this.items,
|
||||
required this.page,
|
||||
required this.pageSize,
|
||||
});
|
||||
|
||||
factory AllarmeListResponse.fromJson(Map<String, dynamic> json) {
|
||||
return AllarmeListResponse(
|
||||
total: json['total'] as int,
|
||||
items: (json['items'] as List)
|
||||
.map((item) => Allarme.fromJson(item as Map<String, dynamic>))
|
||||
.toList(),
|
||||
page: json['page'] as int,
|
||||
pageSize: json['page_size'] as int,
|
||||
);
|
||||
}
|
||||
|
||||
bool get hasMore => items.length < total;
|
||||
}
|
||||
81
lib/models/sito.dart
Normal file
81
lib/models/sito.dart
Normal file
@@ -0,0 +1,81 @@
|
||||
class Sito {
|
||||
final int id;
|
||||
final int clienteId;
|
||||
final String nome;
|
||||
final String tipo;
|
||||
final String? descrizione;
|
||||
final double? latitudine;
|
||||
final double? longitudine;
|
||||
final double? altitudine;
|
||||
final String? comune;
|
||||
final String? provincia;
|
||||
final String? regione;
|
||||
final String? codiceIdentificativo;
|
||||
final DateTime createdAt;
|
||||
final DateTime? updatedAt;
|
||||
|
||||
Sito({
|
||||
required this.id,
|
||||
required this.clienteId,
|
||||
required this.nome,
|
||||
required this.tipo,
|
||||
this.descrizione,
|
||||
this.latitudine,
|
||||
this.longitudine,
|
||||
this.altitudine,
|
||||
this.comune,
|
||||
this.provincia,
|
||||
this.regione,
|
||||
this.codiceIdentificativo,
|
||||
required this.createdAt,
|
||||
this.updatedAt,
|
||||
});
|
||||
|
||||
factory Sito.fromJson(Map<String, dynamic> json) {
|
||||
return Sito(
|
||||
id: json['id'] as int,
|
||||
clienteId: json['cliente_id'] as int,
|
||||
nome: json['nome'] as String,
|
||||
tipo: json['tipo'] as String,
|
||||
descrizione: json['descrizione'] as String?,
|
||||
latitudine: json['latitudine'] != null
|
||||
? (json['latitudine'] as num).toDouble()
|
||||
: null,
|
||||
longitudine: json['longitudine'] != null
|
||||
? (json['longitudine'] as num).toDouble()
|
||||
: null,
|
||||
altitudine: json['altitudine'] != null
|
||||
? (json['altitudine'] as num).toDouble()
|
||||
: null,
|
||||
comune: json['comune'] as String?,
|
||||
provincia: json['provincia'] as String?,
|
||||
regione: json['regione'] as String?,
|
||||
codiceIdentificativo: json['codice_identificativo'] as String?,
|
||||
createdAt: DateTime.parse(json['created_at'] as String),
|
||||
updatedAt: json['updated_at'] != null
|
||||
? DateTime.parse(json['updated_at'] as String)
|
||||
: null,
|
||||
);
|
||||
}
|
||||
|
||||
String get tipoReadable {
|
||||
final labels = {
|
||||
'ponte': 'Ponte',
|
||||
'galleria': 'Galleria',
|
||||
'diga': 'Diga',
|
||||
'frana': 'Frana',
|
||||
'versante': 'Versante',
|
||||
'edificio': 'Edificio',
|
||||
};
|
||||
return labels[tipo] ?? tipo;
|
||||
}
|
||||
|
||||
String get localita {
|
||||
final parts = <String>[];
|
||||
if (comune != null) parts.add(comune!);
|
||||
if (provincia != null) parts.add('($provincia)');
|
||||
return parts.isNotEmpty ? parts.join(' ') : 'N/D';
|
||||
}
|
||||
|
||||
bool get hasCoordinates => latitudine != null && longitudine != null;
|
||||
}
|
||||
103
lib/models/statistiche.dart
Normal file
103
lib/models/statistiche.dart
Normal file
@@ -0,0 +1,103 @@
|
||||
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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
41
lib/models/user.dart
Normal file
41
lib/models/user.dart
Normal file
@@ -0,0 +1,41 @@
|
||||
class User {
|
||||
final int id;
|
||||
final String email;
|
||||
final String nome;
|
||||
final String cognome;
|
||||
final String ruolo;
|
||||
final int clienteId;
|
||||
|
||||
User({
|
||||
required this.id,
|
||||
required this.email,
|
||||
required this.nome,
|
||||
required this.cognome,
|
||||
required this.ruolo,
|
||||
required this.clienteId,
|
||||
});
|
||||
|
||||
factory User.fromJson(Map<String, dynamic> json) {
|
||||
return User(
|
||||
id: json['id'] as int,
|
||||
email: json['email'] as String,
|
||||
nome: json['nome'] as String,
|
||||
cognome: json['cognome'] as String,
|
||||
ruolo: json['ruolo'] as String,
|
||||
clienteId: json['cliente_id'] as int,
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'id': id,
|
||||
'email': email,
|
||||
'nome': nome,
|
||||
'cognome': cognome,
|
||||
'ruolo': ruolo,
|
||||
'cliente_id': clienteId,
|
||||
};
|
||||
}
|
||||
|
||||
String get nomeCompleto => '$nome $cognome';
|
||||
}
|
||||
Reference in New Issue
Block a user