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
This commit is contained in:
Adam Moussa 2026-04-16 19:04:59 -04:00
parent d07e24e419
commit 8959efc06b

View file

@ -785,6 +785,43 @@ namespace Api.SeaHavenIndustries.Controllers
}
}
[HttpPost]
[Route("ChangeAssignment")]
public async Task<IActionResult> 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<IActionResult> AddComment([FromForm] Comments_DTO model)