From cf313a3f65def1bd16793fdb66b4c71edbe3c86d Mon Sep 17 00:00:00 2001 From: jessikitty Date: Tue, 9 Jun 2026 12:27:28 +1000 Subject: [PATCH] fix: v1.5.6 - skip NTT tickets with closed status override; restore On Hold sidebar panel --- Services/ServiceTrackerService.cs | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Services/ServiceTrackerService.cs b/Services/ServiceTrackerService.cs index 088b0b4..c0dab5a 100644 --- a/Services/ServiceTrackerService.cs +++ b/Services/ServiceTrackerService.cs @@ -9,7 +9,14 @@ namespace Disco.Plugins.ServiceTracker.Services { public class ServiceTrackerService { - public const string PluginVersion = "1.5.5"; + public const string PluginVersion = "1.5.6"; + + /// + /// Status values that mean a ticket is closed/done. Checked against the saved StatusOverride + /// for NTT tickets so that manually resolved/dismissed sheet jobs don't reappear. + /// + private static readonly string[] ClosedStatusKeywords = new[] { "resolved", "dismissed", "complete", "closed", "done", "cancel", "finished" }; + private readonly DiscoDataContext _database; private readonly ServiceTrackerDataStore _dataStore; private readonly ServiceTrackerConfig _config; @@ -42,7 +49,19 @@ namespace Disco.Plugins.ServiceTracker.Services var ext = _dataStore.LoadExternalTickets(); var el = ext.ToDictionary(t => t.JobId, t => t); foreach (var e in sr.Tickets) { - ServiceTicket st; if (!el.TryGetValue(e.InternalId, out st)) + ServiceTicket st; el.TryGetValue(e.InternalId, out st); + + // Skip if the ticket has been manually closed/resolved/dismissed in the tracker, + // even if the sheet row still appears open. + if (st != null && !string.IsNullOrEmpty(st.StatusOverride)) + { + var ov = st.StatusOverride.ToLower().Trim(); + bool manuallyClosed = false; + foreach (var kw in ClosedStatusKeywords) { if (ov.Contains(kw)) { manuallyClosed = true; break; } } + if (manuallyClosed) continue; + } + + if (st == null) { st = new ServiceTicket { JobId = e.InternalId, Source = "ntt", PriorityId = GoogleSheetService.MapPriority(e.RawPriority), LocationId = _config.DefaultLocationId, AssignedTechId = ResolveSheetTech(e.AssignedTo), Summary = e.IssueDescription, EstimatedCompletion = e.PreferredDate, CreatedDate = e.Timestamp, LastModifiedDate = DateTime.Now }; _dataStore.SaveExternalTicket(st); el[e.InternalId] = st; } tiles.Add(BuildSheetTile(e, st)); sheetCount++; }