diff --git a/lib/servicios/servicio_programacion_alarmas.dart b/lib/servicios/servicio_programacion_alarmas.dart index 6a5429b..86c37c4 100644 --- a/lib/servicios/servicio_programacion_alarmas.dart +++ b/lib/servicios/servicio_programacion_alarmas.dart @@ -124,6 +124,12 @@ class ServicioProgramacionAlarmas { List vacaciones, List excepciones, ) { + final ultimaGestionada = alarma.ultimaEjecucionGestionada; + if (ultimaGestionada != null && + _mismaEjecucion(ultimaGestionada, candidato)) { + return false; + } + if (!alarma.sonarEnVacaciones && estaEnVacaciones(candidato, vacaciones)) { return false; } diff --git a/test/servicios/servicio_programacion_alarmas_test.dart b/test/servicios/servicio_programacion_alarmas_test.dart index 30954ea..a6d2aae 100644 --- a/test/servicios/servicio_programacion_alarmas_test.dart +++ b/test/servicios/servicio_programacion_alarmas_test.dart @@ -148,6 +148,25 @@ void main() { 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', () { final alarma = AlarmaMusical( id: 'a7',