fix(alarms): skip handled occurrence when recalculating
Build & Deploy PluriWave / Build APK + AAB release (push) Has been cancelled
Build & Deploy PluriWave / Análisis de código (push) Has been cancelled

This commit is contained in:
Javier Bautista Fernández
2026-05-29 13:29:41 +02:00
parent 3640a76253
commit d45fbe60db
2 changed files with 25 additions and 0 deletions
@@ -124,6 +124,12 @@ class ServicioProgramacionAlarmas {
List<RangoVacaciones> vacaciones, List<RangoVacaciones> vacaciones,
List<ExcepcionAlarma> excepciones, List<ExcepcionAlarma> excepciones,
) { ) {
final ultimaGestionada = alarma.ultimaEjecucionGestionada;
if (ultimaGestionada != null &&
_mismaEjecucion(ultimaGestionada, candidato)) {
return false;
}
if (!alarma.sonarEnVacaciones && estaEnVacaciones(candidato, vacaciones)) { if (!alarma.sonarEnVacaciones && estaEnVacaciones(candidato, vacaciones)) {
return false; return false;
} }
@@ -148,6 +148,25 @@ void main() {
expect(siguiente, DateTime(2026, 5, 26, 7, 30)); expect(siguiente, DateTime(2026, 5, 26, 7, 30));
}); });
test('no reutiliza ejecucion gestionada aunque siga en tolerancia', () {
final alarma = AlarmaMusical(
id: 'a9',
nombre: 'Diaria gestionada',
hora: 7,
minuto: 30,
tipoProgramacion: TipoProgramacionAlarma.diaria,
diasSemana: const [],
ultimaEjecucionGestionada: DateTime(2026, 5, 25, 7, 30),
);
final proxima = servicio.calcularProxima(
alarma: alarma,
desde: DateTime(2026, 5, 25, 7, 30, 20),
);
expect(proxima, DateTime(2026, 5, 26, 7, 30));
});
test('calcula siguiente por dias de semana despues de ejecucion', () { test('calcula siguiente por dias de semana despues de ejecucion', () {
final alarma = AlarmaMusical( final alarma = AlarmaMusical(
id: 'a7', id: 'a7',