fix(alarms): skip handled occurrence when recalculating
This commit is contained in:
@@ -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',
|
||||||
|
|||||||
Reference in New Issue
Block a user