fix: auto-create ticket when adding notes if ticket doesn't exist yet
This commit is contained in:
@@ -41,7 +41,6 @@ namespace Disco.Plugins.ServiceTracker.Services
|
|||||||
var json = File.ReadAllText(_configPath);
|
var json = File.ReadAllText(_configPath);
|
||||||
var config = JsonConvert.DeserializeObject<ServiceTrackerConfig>(json);
|
var config = JsonConvert.DeserializeObject<ServiceTrackerConfig>(json);
|
||||||
if (config == null) return ServiceTrackerConfig.CreateDefault();
|
if (config == null) return ServiceTrackerConfig.CreateDefault();
|
||||||
// Ensure new fields have defaults
|
|
||||||
if (config.Technicians == null) config.Technicians = new List<TechEntry>();
|
if (config.Technicians == null) config.Technicians = new List<TechEntry>();
|
||||||
if (config.GoogleSheet == null) config.GoogleSheet = new GoogleSheetConfig();
|
if (config.GoogleSheet == null) config.GoogleSheet = new GoogleSheetConfig();
|
||||||
if (string.IsNullOrEmpty(config.DiscoBaseUrl)) config.DiscoBaseUrl = "http://disco:9292";
|
if (string.IsNullOrEmpty(config.DiscoBaseUrl)) config.DiscoBaseUrl = "http://disco:9292";
|
||||||
@@ -63,12 +62,7 @@ namespace Disco.Plugins.ServiceTracker.Services
|
|||||||
|
|
||||||
public List<ServiceTicket> LoadAllTickets()
|
public List<ServiceTicket> LoadAllTickets()
|
||||||
{
|
{
|
||||||
lock (_lock)
|
lock (_lock) { return LoadAllTicketsUnsafe(); }
|
||||||
{
|
|
||||||
if (!File.Exists(_ticketsPath)) return new List<ServiceTicket>();
|
|
||||||
var json = File.ReadAllText(_ticketsPath);
|
|
||||||
return JsonConvert.DeserializeObject<List<ServiceTicket>>(json) ?? new List<ServiceTicket>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServiceTicket GetTicket(int jobId)
|
public ServiceTicket GetTicket(int jobId)
|
||||||
@@ -104,13 +98,16 @@ namespace Disco.Plugins.ServiceTracker.Services
|
|||||||
{
|
{
|
||||||
var tickets = LoadAllTicketsUnsafe();
|
var tickets = LoadAllTicketsUnsafe();
|
||||||
var ticket = tickets.FirstOrDefault(t => t.JobId == jobId);
|
var ticket = tickets.FirstOrDefault(t => t.JobId == jobId);
|
||||||
if (ticket != null)
|
if (ticket == null)
|
||||||
{
|
{
|
||||||
if (ticket.Notes == null) ticket.Notes = new List<TicketNote>();
|
// Auto-create if missing
|
||||||
ticket.Notes.Add(note);
|
ticket = new ServiceTicket { JobId = jobId, Source = "disco" };
|
||||||
ticket.LastModifiedDate = DateTime.Now;
|
tickets.Add(ticket);
|
||||||
SaveAllTicketsUnsafe(tickets);
|
|
||||||
}
|
}
|
||||||
|
if (ticket.Notes == null) ticket.Notes = new List<TicketNote>();
|
||||||
|
ticket.Notes.Add(note);
|
||||||
|
ticket.LastModifiedDate = DateTime.Now;
|
||||||
|
SaveAllTicketsUnsafe(tickets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,12 +115,7 @@ namespace Disco.Plugins.ServiceTracker.Services
|
|||||||
|
|
||||||
public List<ServiceTicket> LoadExternalTickets()
|
public List<ServiceTicket> LoadExternalTickets()
|
||||||
{
|
{
|
||||||
lock (_lock)
|
lock (_lock) { return LoadExternalTicketsUnsafe(); }
|
||||||
{
|
|
||||||
if (!File.Exists(_externalPath)) return new List<ServiceTicket>();
|
|
||||||
var json = File.ReadAllText(_externalPath);
|
|
||||||
return JsonConvert.DeserializeObject<List<ServiceTicket>>(json) ?? new List<ServiceTicket>();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveExternalTickets(List<ServiceTicket> tickets)
|
public void SaveExternalTickets(List<ServiceTicket> tickets)
|
||||||
@@ -159,14 +151,17 @@ namespace Disco.Plugins.ServiceTracker.Services
|
|||||||
{
|
{
|
||||||
var tickets = LoadExternalTicketsUnsafe();
|
var tickets = LoadExternalTicketsUnsafe();
|
||||||
var ticket = tickets.FirstOrDefault(t => t.JobId == internalId);
|
var ticket = tickets.FirstOrDefault(t => t.JobId == internalId);
|
||||||
if (ticket != null)
|
if (ticket == null)
|
||||||
{
|
{
|
||||||
if (ticket.Notes == null) ticket.Notes = new List<TicketNote>();
|
// Auto-create if missing
|
||||||
ticket.Notes.Add(note);
|
ticket = new ServiceTicket { JobId = internalId, Source = "ntt" };
|
||||||
ticket.LastModifiedDate = DateTime.Now;
|
tickets.Add(ticket);
|
||||||
var json = JsonConvert.SerializeObject(tickets, Formatting.Indented);
|
|
||||||
File.WriteAllText(_externalPath, json);
|
|
||||||
}
|
}
|
||||||
|
if (ticket.Notes == null) ticket.Notes = new List<TicketNote>();
|
||||||
|
ticket.Notes.Add(note);
|
||||||
|
ticket.LastModifiedDate = DateTime.Now;
|
||||||
|
var json = JsonConvert.SerializeObject(tickets, Formatting.Indented);
|
||||||
|
File.WriteAllText(_externalPath, json);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user