feat(alarm): complete musical alarm flows
Build & Deploy Pluriwave / Análisis de código (push) Successful in 15s
Build & Deploy Pluriwave / Build APK + AAB release (push) Successful in 4m21s

This commit is contained in:
2026-05-22 00:39:50 +02:00
parent 7f1874f873
commit a3a648c633
25 changed files with 1458 additions and 167 deletions
+23 -2
View File
@@ -12,6 +12,7 @@ class AlarmaMusical {
required this.minuto,
required this.tipoProgramacion,
required this.diasSemana,
this.fechaUnica,
this.emisora,
this.emisoraFallback,
this.activa = true,
@@ -31,6 +32,7 @@ class AlarmaMusical {
final int minuto;
final TipoProgramacionAlarma tipoProgramacion;
final List<int> diasSemana;
final DateTime? fechaUnica;
final Emisora? emisora;
final Emisora? emisoraFallback;
final bool sonarEnVacaciones;
@@ -49,6 +51,8 @@ class AlarmaMusical {
int? minuto,
TipoProgramacionAlarma? tipoProgramacion,
List<int>? diasSemana,
DateTime? fechaUnica,
bool limpiarFechaUnica = false,
Emisora? emisora,
Emisora? emisoraFallback,
bool? sonarEnVacaciones,
@@ -67,6 +71,7 @@ class AlarmaMusical {
minuto: minuto ?? this.minuto,
tipoProgramacion: tipoProgramacion ?? this.tipoProgramacion,
diasSemana: diasSemana ?? this.diasSemana,
fechaUnica: limpiarFechaUnica ? null : fechaUnica ?? this.fechaUnica,
emisora: emisora ?? this.emisora,
emisoraFallback: emisoraFallback ?? this.emisoraFallback,
sonarEnVacaciones: sonarEnVacaciones ?? this.sonarEnVacaciones,
@@ -87,6 +92,7 @@ class AlarmaMusical {
'minuto': minuto,
'tipoProgramacion': tipoProgramacion.name,
'diasSemana': diasSemana,
'fechaUnica': fechaUnica?.toIso8601String(),
'emisora': emisora?.toMap(),
'emisoraFallback': emisoraFallback?.toMap(),
'sonarEnVacaciones': sonarEnVacaciones,
@@ -115,6 +121,7 @@ class AlarmaMusical {
.whereType<int>()
.where((d) => d >= DateTime.monday && d <= DateTime.sunday)
.toList(),
fechaUnica: _dateFromJson(json['fechaUnica']),
emisora: _emisoraFromJson(json['emisora']),
emisoraFallback: _emisoraFromJson(json['emisoraFallback']),
sonarEnVacaciones: json['sonarEnVacaciones'] as bool? ?? true,
@@ -166,13 +173,27 @@ class RangoVacaciones {
final DateTime fin;
final bool activo;
DateTime get inicioDia => DateTime(inicio.year, inicio.month, inicio.day);
DateTime get finDia => DateTime(fin.year, fin.month, fin.day);
bool contiene(DateTime fecha) {
final dia = DateTime(fecha.year, fecha.month, fecha.day);
final desde = DateTime(inicio.year, inicio.month, inicio.day);
final hasta = DateTime(fin.year, fin.month, fin.day);
final desde = inicioDia;
final hasta = finDia;
return activo && !dia.isBefore(desde) && !dia.isAfter(hasta);
}
RangoVacaciones normalizado() {
if (!finDia.isBefore(inicioDia)) return this;
return RangoVacaciones(
id: id,
nombre: nombre,
inicio: finDia,
fin: inicioDia,
activo: activo,
);
}
Map<String, dynamic> toJson() => {
'id': id,
'nombre': nombre,