mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-05 15:22:08 +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 Data.SeaHavenIndustries;
|
||||||
using SeaHaven.DataServices.Helpers;
|
using SeaHaven.DataServices.Helpers;
|
||||||
using SeaHaven.Services.DTOs;
|
using SeaHaven.Services.DTOs;
|
||||||
using SeaHaven.Services.Exceptions;
|
|
||||||
|
|
||||||
namespace SeaHaven.Services.Helpers
|
namespace SeaHaven.Services.Helpers
|
||||||
{
|
{
|
||||||
|
|
@ -13,10 +12,7 @@ namespace SeaHaven.Services.Helpers
|
||||||
|
|
||||||
public static void Capture(WorkOrder workOrder)
|
public static void Capture(WorkOrder workOrder)
|
||||||
{
|
{
|
||||||
var location = workOrder.Locations
|
var location = workOrder.Locations;
|
||||||
?? throw new WorkOrderBoardValidationException(
|
|
||||||
"CompletionSnapshotUnavailable",
|
|
||||||
"Site details are required before marking the work order Completed.");
|
|
||||||
|
|
||||||
var contact = workOrder.WorkOrderContacts?
|
var contact = workOrder.WorkOrderContacts?
|
||||||
.OrderBy(item => item.Id)
|
.OrderBy(item => item.Id)
|
||||||
|
|
@ -39,14 +35,14 @@ namespace SeaHaven.Services.Helpers
|
||||||
new WorkOrderFrozenSite
|
new WorkOrderFrozenSite
|
||||||
{
|
{
|
||||||
Code = workOrder.SiteCode,
|
Code = workOrder.SiteCode,
|
||||||
Label = FirstNotBlank(location.Name, location.Title, workOrder.SiteCode),
|
Label = FirstNotBlank(location?.Name, location?.Title, workOrder.SiteCode),
|
||||||
Address = JoinAddress(location.Address1, location.Address2),
|
Address = JoinAddress(location?.Address1, location?.Address2),
|
||||||
City = location.City,
|
City = location?.City,
|
||||||
State = location.State,
|
State = location?.State,
|
||||||
Zip = location.Zip,
|
Zip = location?.Zip,
|
||||||
Phone = location.PhoneNumber,
|
Phone = location?.PhoneNumber,
|
||||||
Email = location.Email,
|
Email = location?.Email,
|
||||||
Maps = BuildMapsUrl(location)
|
Maps = location == null ? null : BuildMapsUrl(location)
|
||||||
},
|
},
|
||||||
JsonOptions);
|
JsonOptions);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,38 @@ public class WorkOrderCompletionFreezeTests
|
||||||
Assert.Equal("Frozen POC", afterFlag.PocName);
|
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]
|
[Fact]
|
||||||
public async Task OpenWorkOrderProjectionKeepsUsingLiveLocation()
|
public async Task OpenWorkOrderProjectionKeepsUsingLiveLocation()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue