From 8959efc06b0e57eeb01e0cc3f9e8ac19cd97437f Mon Sep 17 00:00:00 2001 From: Adam Moussa <166072409+amoussa1229@users.noreply.github.com> Date: Thu, 16 Apr 2026 19:04:59 -0400 Subject: [PATCH] Add ChangeAssignment endpoint with audit logging - POST /api/WorkOrder/ChangeAssignment?id=&assignTo= - Logs old and new user names in audit trail - Returns updated assignment name --- .../Controllers/WorkOrderController.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Api.SeaHavenIndustries/Controllers/WorkOrderController.cs b/Api.SeaHavenIndustries/Controllers/WorkOrderController.cs index b4706d0..a3cd6b1 100644 --- a/Api.SeaHavenIndustries/Controllers/WorkOrderController.cs +++ b/Api.SeaHavenIndustries/Controllers/WorkOrderController.cs @@ -785,6 +785,43 @@ namespace Api.SeaHavenIndustries.Controllers } } + [HttpPost] + [Route("ChangeAssignment")] + public async Task ChangeAssignment(int id, string? assignTo) + { + try + { + var data = await _db.workOrders.Where(w => w.Id == id).FirstOrDefaultAsync(); + if (data == null) + return BadRequest(new Response { Status = "Error", Message = "Work order not found" }); + if (data.AssignTo != assignTo) + { + var oldUser = data.AssignTo != null ? await _db.Users.FindAsync(data.AssignTo) : null; + var newUser = assignTo != null ? await _db.Users.FindAsync(assignTo) : null; + _db.WorkOrderAuditLogs.Add(new WorkOrderAuditLog + { + WorkOrderId = id, + UserId = User.FindFirstValue(ClaimTypes.NameIdentifier), + FieldName = "AssignedTo", + OldValue = oldUser != null ? (oldUser.FirstName + " " + oldUser.LastName).Trim() : "", + NewValue = newUser != null ? (newUser.FirstName + " " + newUser.LastName).Trim() : "Unassigned", + Action = "assignment_change", + CreatedAt = DateTime.UtcNow + }); + } + data.AssignTo = assignTo; + await _db.SaveChangesAsync(); + + var assignedUser = assignTo != null ? await _db.Users.FindAsync(assignTo) : null; + var assignedName = assignedUser != null ? (assignedUser.FirstName + " " + assignedUser.LastName).Trim() : ""; + return Ok(new { message = "Updated Successfully", assignedTo = assignedName }); + } + catch (Exception ex) + { + return BadRequest(new Response { Status = "Error", Message = ex.Message }); + } + } + [HttpPost] [Route("AddComment")] public async Task AddComment([FromForm] Comments_DTO model)