From 743841d93e990b5ecb8df758909902a60ef1ae1a Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Thu, 20 Aug 2026 13:41:42 -0300 Subject: [PATCH] fix(work-orders): map primary dispatch status on detail (SH-183) --- .../Implementation/WorkOrderDetailService.cs | 1 + .../WorkOrderPhase6Tests.cs | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/SeaHaven.Services/Implementation/WorkOrderDetailService.cs b/SeaHaven.Services/Implementation/WorkOrderDetailService.cs index 8a94e26..9fcf0ab 100644 --- a/SeaHaven.Services/Implementation/WorkOrderDetailService.cs +++ b/SeaHaven.Services/Implementation/WorkOrderDetailService.cs @@ -118,6 +118,7 @@ namespace SeaHaven.Services.Implementation DayGroup = row.DayGroup, VendorId = row.VendorId, VendorName = row.VendorName, + PrimaryDispatchStatus = row.PrimaryDispatchStatus, TechName = row.TechName, TechPhone = row.TechPhone, ApptDate = row.ApptDate, diff --git a/SeaHavenIndustries.Tests/WorkOrderPhase6Tests.cs b/SeaHavenIndustries.Tests/WorkOrderPhase6Tests.cs index 34a3cbb..af241d4 100644 --- a/SeaHavenIndustries.Tests/WorkOrderPhase6Tests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderPhase6Tests.cs @@ -216,6 +216,73 @@ public class WorkOrderDetailServiceTests Assert.Equal(1500m, detail.Info.UpliftSummary.Amount); } + [Fact] + public async Task GetDetail_InactivePrimaryDispatch_OmitsVendorAndMapsStatus() + { + var (context, service) = CreateSut(); + + context.Vendors.Add(new Vendor { Id = 1, CompanyName = "Acme HVAC" }); + context.Dispatches.Add(new Dispatch + { + Id = 10, + VendorId = 1, + WorkOrderId = 1, + Status = "Refused", + ScheduledDate = new DateTime(2026, 6, 24, 8, 0, 0) + }); + context.workOrders.Add(new WorkOrder + { + Id = 1, + InternalWONumber = "10000000001", + LifecycleStatus = LifecycleStatus.Scheduled, + ScheduledDate = DateTime.UtcNow.AddDays(1), + PrimaryDispatchId = 10, + SiteCode = "BK5", + RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 } + }); + await context.SaveChangesAsync(); + + var detail = await service.GetDetailAsync(1, WorkOrderAccountTestHelpers.OrgWideAdmin()); + + Assert.NotNull(detail); + Assert.Null(detail!.Info.VendorId); + Assert.Null(detail.Info.VendorName); + Assert.Equal("Refused", detail.Info.PrimaryDispatchStatus); + } + + [Fact] + public async Task GetDetail_LiveDispatchWithEmptyCompanyName_KeepsVendorIdAndMapsStatus() + { + var (context, service) = CreateSut(); + + context.Vendors.Add(new Vendor { Id = 1, CompanyName = "" }); + context.Dispatches.Add(new Dispatch + { + Id = 10, + VendorId = 1, + WorkOrderId = 1, + Status = "Sent", + ScheduledDate = new DateTime(2026, 6, 24, 8, 0, 0) + }); + context.workOrders.Add(new WorkOrder + { + Id = 1, + InternalWONumber = "10000000001", + LifecycleStatus = LifecycleStatus.Scheduled, + ScheduledDate = DateTime.UtcNow.AddDays(1), + PrimaryDispatchId = 10, + SiteCode = "BK5", + RowVersion = new byte[] { 1, 0, 0, 0, 0, 0, 0, 1 } + }); + await context.SaveChangesAsync(); + + var detail = await service.GetDetailAsync(1, WorkOrderAccountTestHelpers.OrgWideAdmin()); + + Assert.NotNull(detail); + Assert.Equal(1, detail!.Info.VendorId); + Assert.Equal("Sent", detail.Info.PrimaryDispatchStatus); + } + [Fact] public async Task GetDetail_ReturnsAdditionalContactsFromBoardRow() {