fix(alarms): skip handled occurrence when recalculating
This commit is contained in:
@@ -124,6 +124,12 @@ class ServicioProgramacionAlarmas {
|
||||
List<RangoVacaciones> vacaciones,
|
||||
List<ExcepcionAlarma> excepciones,
|
||||
) {
|
||||
final ultimaGestionada = alarma.ultimaEjecucionGestionada;
|
||||
if (ultimaGestionada != null &&
|
||||
_mismaEjecucion(ultimaGestionada, candidato)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!alarma.sonarEnVacaciones && estaEnVacaciones(candidato, vacaciones)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user