From af10af1573d372818d422676bd3901b826472d4d Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 11 Sep 2026 09:56:54 -0400 Subject: [PATCH] feat(template-engine): persist IsMesReportable on alarm update; IsMesReportableOverride on SetAlarmOverrideAsync Claude-Session: https://claude.ai/code/session_01Y5ef34iUUMjmwnMpL9xgmB --- .../Services/InstanceService.cs | 6 +- .../TemplateService.cs | 1 + .../Services/InstanceServiceTests.cs | 95 +++++++++++++++++++ .../TemplateServiceTests.cs | 59 ++++++++++++ 4 files changed, 160 insertions(+), 1 deletion(-) diff --git a/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/Services/InstanceService.cs b/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/Services/InstanceService.cs index 0e7ed342..0d4a497e 100644 --- a/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/Services/InstanceService.cs +++ b/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/Services/InstanceService.cs @@ -213,6 +213,7 @@ public class InstanceService /// Override JSON for the trigger configuration. /// Override priority level, or null to use template value. /// Username of the user setting the override. + /// Override for the alarm's MES-reportable flag, or null to use the template value. /// Cancellation token. /// Result containing the alarm override or failure message. public async Task> SetAlarmOverrideAsync( @@ -221,6 +222,7 @@ public class InstanceService string? triggerConfigurationOverride, int? priorityLevelOverride, string user, + bool? isMesReportableOverride = null, CancellationToken cancellationToken = default) { var instance = await _repository.GetInstanceByIdAsync(instanceId, cancellationToken); @@ -254,6 +256,7 @@ public class InstanceService { existingOverride.TriggerConfigurationOverride = triggerConfigurationOverride; existingOverride.PriorityLevelOverride = priorityLevelOverride; + existingOverride.IsMesReportableOverride = isMesReportableOverride; await _repository.UpdateInstanceAlarmOverrideAsync(existingOverride, cancellationToken); await _repository.SaveChangesAsync(cancellationToken); @@ -268,7 +271,8 @@ public class InstanceService { InstanceId = instanceId, TriggerConfigurationOverride = triggerConfigurationOverride, - PriorityLevelOverride = priorityLevelOverride + PriorityLevelOverride = priorityLevelOverride, + IsMesReportableOverride = isMesReportableOverride }; await _repository.AddInstanceAlarmOverrideAsync(newOverride, cancellationToken); diff --git a/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/TemplateService.cs b/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/TemplateService.cs index c524a344..e559ab45 100644 --- a/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/TemplateService.cs +++ b/src/ZB.MOM.WW.ScadaBridge.TemplateEngine/TemplateService.cs @@ -621,6 +621,7 @@ public class TemplateService existing.Description = proposed.Description; existing.OnTriggerScriptId = proposed.OnTriggerScriptId; existing.IsLocked = proposed.IsLocked; + existing.IsMesReportable = proposed.IsMesReportable; if (template?.IsDerived == true) existing.IsInherited = proposed.IsInherited; else diff --git a/tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests/Services/InstanceServiceTests.cs b/tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests/Services/InstanceServiceTests.cs index b7e0a7fc..ae38bade 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests/Services/InstanceServiceTests.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.TemplateEngine.Tests/Services/InstanceServiceTests.cs @@ -220,6 +220,101 @@ public class InstanceServiceTests Assert.Contains("locked", result.Error, StringComparison.OrdinalIgnoreCase); } + [Fact] + public async Task SetAlarmOverrideAsync_StoresIsMesReportableOverride() + { + var instance = new Instance("Inst1") { Id = 1, TemplateId = 1 }; + _repoMock.Setup(r => r.GetInstanceByIdAsync(1, It.IsAny())) + .ReturnsAsync(instance); + _repoMock.Setup(r => r.GetAllTemplatesAsync(It.IsAny())) + .ReturnsAsync(new List