email the assignee when a ticket is assigend

This commit is contained in:
Yinyin Liu 2026-03-24 15:47:30 +01:00
parent 4bb35c6951
commit d59027a277
2 changed files with 87 additions and 1 deletions

View File

@ -2134,6 +2134,31 @@ public class Controller : ControllerBase
});
}
var assigneeChanged = ticket.AssigneeId != existing.AssigneeId
&& ticket.AssigneeId.HasValue;
if (assigneeChanged)
{
var assignee = Db.GetUserById(ticket.AssigneeId);
Db.Create(new TicketTimelineEvent
{
TicketId = ticket.Id,
EventType = (Int32)TimelineEventType.Assigned,
Description = $"Ticket assigned to {assignee?.Name ?? "unknown"}.",
ActorType = (Int32)TimelineActorType.Human,
ActorId = user.Id,
CreatedAt = DateTime.UtcNow
});
if (assignee is not null)
_ = Task.Run(async () =>
{
try { await assignee.SendTicketAssignedEmail(ticket); }
catch (Exception ex) { Console.WriteLine($"Failed to send ticket assignment email: {ex}"); }
});
}
return Db.Update(ticket) ? ticket : StatusCode(500, "Update failed.");
}

View File

@ -297,5 +297,66 @@ public static class UserMethods
return user.SendEmail(subject, body);
}
public static Task SendTicketAssignedEmail(this User user, Ticket ticket)
{
var ticketLink = $"https://monitor.inesco.energy/tickets/{ticket.Id}";
var priority = (TicketPriority)ticket.Priority;
var category = (TicketCategory)ticket.Category;
var (subject, body) = (user.Language ?? "en") switch
{
"de" => (
$"inesco Energy Ticket #{ticket.Id} wurde Ihnen zugewiesen",
$"Sehr geehrte/r {user.Name},\n\n" +
$"Ein Ticket wurde Ihnen zugewiesen:\n\n" +
$"Ticket: #{ticket.Id}\n" +
$"Betreff: {ticket.Subject}\n" +
$"Priorität: {priority}\n" +
$"Kategorie: {category}\n\n" +
$"Beschreibung:\n{ticket.Description}\n\n" +
$"Öffnen Sie das Ticket hier: {ticketLink}\n\n" +
"Mit freundlichen Grüssen\ninesco Energy Monitor"
),
"fr" => (
$"inesco Energy Le ticket #{ticket.Id} vous a été attribué",
$"Cher/Chère {user.Name},\n\n" +
$"Un ticket vous a été attribué :\n\n" +
$"Ticket : #{ticket.Id}\n" +
$"Objet : {ticket.Subject}\n" +
$"Priorité : {priority}\n" +
$"Catégorie : {category}\n\n" +
$"Description :\n{ticket.Description}\n\n" +
$"Ouvrir le ticket : {ticketLink}\n\n" +
"Cordialement,\ninesco Energy Monitor"
),
"it" => (
$"inesco Energy Il ticket #{ticket.Id} le è stato assegnato",
$"Gentile {user.Name},\n\n" +
$"Le è stato assegnato un ticket:\n\n" +
$"Ticket: #{ticket.Id}\n" +
$"Oggetto: {ticket.Subject}\n" +
$"Priorità: {priority}\n" +
$"Categoria: {category}\n\n" +
$"Descrizione:\n{ticket.Description}\n\n" +
$"Aprire il ticket: {ticketLink}\n\n" +
"Cordiali saluti,\ninesco Energy Monitor"
),
_ => (
$"inesco Energy Ticket #{ticket.Id} has been assigned to you",
$"Dear {user.Name},\n\n" +
$"A ticket has been assigned to you:\n\n" +
$"Ticket: #{ticket.Id}\n" +
$"Subject: {ticket.Subject}\n" +
$"Priority: {priority}\n" +
$"Category: {category}\n\n" +
$"Description:\n{ticket.Description}\n\n" +
$"Open the ticket: {ticketLink}\n\n" +
"Best regards,\ninesco Energy Monitor"
)
};
return user.SendEmail(subject, body);
}
}