mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 10:43:13 +00:00
fix(work-orders): allow Complete without a linked site
Snapshot whatever Site/Vendor/POC data exists instead of gating completion on Locations.
This commit is contained in:
parent
e0139d4601
commit
deeb29b512
2 changed files with 41 additions and 13 deletions
|
|
@ -3,7 +3,6 @@ using System.Text.Json;
|
|||
using Data.SeaHavenIndustries;
|
||||
using SeaHaven.DataServices.Helpers;
|
||||
using SeaHaven.Services.DTOs;
|
||||
using SeaHaven.Services.Exceptions;
|
||||
|
||||
namespace SeaHaven.Services.Helpers
|
||||
{
|
||||
|
|
@ -13,10 +12,7 @@ namespace SeaHaven.Services.Helpers
|
|||
|
||||
public static void Capture(WorkOrder workOrder)
|
||||
{
|
||||
var location = workOrder.Locations
|
||||
?? throw new WorkOrderBoardValidationException(
|
||||
"CompletionSnapshotUnavailable",
|
||||
"Site details are required before marking the work order Completed.");
|
||||
var location = workOrder.Locations;
|
||||
|
||||
var contact = workOrder.WorkOrderContacts?
|
||||
.OrderBy(item => item.Id)
|
||||
|
|
@ -39,14 +35,14 @@ namespace SeaHaven.Services.Helpers
|
|||
new WorkOrderFrozenSite
|
||||
{
|
||||
Code = workOrder.SiteCode,
|
||||
Label = FirstNotBlank(location.Name, location.Title, workOrder.SiteCode),
|
||||
Address = JoinAddress(location.Address1, location.Address2),
|
||||
City = location.City,
|
||||
State = location.State,
|
||||
Zip = location.Zip,
|
||||
Phone = location.PhoneNumber,
|
||||
Email = location.Email,
|
||||
Maps = BuildMapsUrl(location)
|
||||
Label = FirstNotBlank(location?.Name, location?.Title, workOrder.SiteCode),
|
||||
Address = JoinAddress(location?.Address1, location?.Address2),
|
||||
City = location?.City,
|
||||
State = location?.State,
|
||||
Zip = location?.Zip,
|
||||
Phone = location?.PhoneNumber,
|
||||
Email = location?.Email,
|
||||
Maps = location == null ? null : BuildMapsUrl(location)
|
||||
},
|
||||
JsonOptions);
|
||||
|
||||
|
|
|
|||
|
|
@ -117,6 +117,38 @@ public class WorkOrderCompletionFreezeTests
|
|||
Assert.Equal("Frozen POC", afterFlag.PocName);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task FirstCompletedTransitionWithoutSiteStillCapturesAvailableSnapshot()
|
||||
{
|
||||
await using var context = CreateContext();
|
||||
var service = CreateService(context);
|
||||
var workOrder = new WorkOrder
|
||||
{
|
||||
Id = 1,
|
||||
InternalWONumber = "00000012345",
|
||||
SiteCode = "BK5",
|
||||
LifecycleStatus = LifecycleStatus.Scheduled,
|
||||
ScheduledDate = DateTime.UtcNow.Date.AddDays(1),
|
||||
RowVersion = Version()
|
||||
};
|
||||
context.Add(workOrder);
|
||||
await context.SaveChangesAsync();
|
||||
|
||||
var completed = await service.PatchFieldAsync(
|
||||
workOrder.Id,
|
||||
Patch(WorkOrderBoardFieldNames.LifecycleStatus, "Complete", workOrder),
|
||||
"actor-1");
|
||||
var persisted = await context.workOrders.SingleAsync();
|
||||
|
||||
Assert.Equal(LifecycleStatus.Completed, completed.LifecycleStatus);
|
||||
Assert.Equal("BK5", completed.FrozenSite?.Code);
|
||||
Assert.Equal("BK5", completed.FrozenSite?.Label);
|
||||
Assert.Null(completed.FrozenSite?.City);
|
||||
Assert.Null(completed.FrozenCompany);
|
||||
Assert.False(string.IsNullOrWhiteSpace(persisted.FrozenSite));
|
||||
Assert.Null(persisted.FrozenCompany);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task OpenWorkOrderProjectionKeepsUsingLiveLocation()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue