mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 08:23:12 +00:00
SH-44 and SH-82 both left "blocks, or requires explicit confirmation" to be decided with the team, and the implementation took the blocking branch. SH-254 settles it the other way: the approved design offers "Deactivate anyway" beside the list of open work orders. Deactivation with open work orders is now permitted, but only when the caller says it has shown them: ConfirmOpenWorkOrders on the update DTO and a confirmOpenWorkOrders query parameter on the delete route. Absent the flag the existing guard still throws, so nothing deactivates by accident and no caller loses the check by omission. confirmOpenWorkOrders is a required parameter on DeleteVendorAsync rather than an optional one, so every call site states its intent.
127 lines
4.7 KiB
C#
127 lines
4.7 KiB
C#
namespace SeaHaven.Services.DTOs
|
|
{
|
|
public class VendorDTO
|
|
{
|
|
public int Id { get; set; }
|
|
public string? Name { get; set; }
|
|
public int? CompanyId { get; set; }
|
|
public string? ContactName { get; set; }
|
|
public string? Email { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? CompanyPhone { get; set; }
|
|
public string? PreferredContact { get; set; }
|
|
public string? Address { get; set; }
|
|
public string? City { get; set; }
|
|
public string? State { get; set; }
|
|
public string? Zipcode { get; set; }
|
|
public string? TradeSpecialties { get; set; }
|
|
public string? GoogleMapsUrl { get; set; }
|
|
public string? Notes { get; set; }
|
|
public int TotalJobs { get; set; }
|
|
public bool IsActive { get; set; }
|
|
}
|
|
|
|
// SH-198 vendor directory row. Id is the nullable vendor id (null for company-only
|
|
// rows that have zero technicians); CompanyId is always populated.
|
|
public class VendorDirectoryItemDTO
|
|
{
|
|
public int? Id { get; set; }
|
|
public int? CompanyId { get; set; }
|
|
public string? CompanyName { get; set; }
|
|
public string? ContactName { get; set; }
|
|
public string? Email { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? CompanyPhone { get; set; }
|
|
public string? PreferredContact { get; set; }
|
|
public string? Address { get; set; }
|
|
public string? City { get; set; }
|
|
public string? State { get; set; }
|
|
public string? Zipcode { get; set; }
|
|
public string? TradeSpecialties { get; set; }
|
|
public string? GoogleMapsUrl { get; set; }
|
|
public string? Notes { get; set; }
|
|
public int TotalJobs { get; set; }
|
|
public bool IsActive { get; set; }
|
|
}
|
|
|
|
public class CreateVendorDTO
|
|
{
|
|
public required string Name { get; set; }
|
|
public int? CompanyId { get; set; }
|
|
public string? ContactName { get; set; }
|
|
public string? Email { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? CompanyPhone { get; set; }
|
|
public string? PreferredContact { get; set; }
|
|
public string? Address { get; set; }
|
|
public string? City { get; set; }
|
|
public string? State { get; set; }
|
|
public string? Zipcode { get; set; }
|
|
public string? TradeSpecialties { get; set; }
|
|
public string? GoogleMapsUrl { get; set; }
|
|
public string? Notes { get; set; }
|
|
public bool IsActive { get; set; } = true;
|
|
}
|
|
|
|
public class UpdateVendorDTO
|
|
{
|
|
public string? Name { get; set; }
|
|
public int? CompanyId { get; set; }
|
|
public string? ContactName { get; set; }
|
|
public string? Email { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? CompanyPhone { get; set; }
|
|
public string? PreferredContact { get; set; }
|
|
public string? Address { get; set; }
|
|
public string? City { get; set; }
|
|
public string? State { get; set; }
|
|
public string? Zipcode { get; set; }
|
|
public string? TradeSpecialties { get; set; }
|
|
public string? GoogleMapsUrl { get; set; }
|
|
public string? Notes { get; set; }
|
|
public bool? IsActive { get; set; }
|
|
|
|
// SH-254: deactivating a vendor with open work orders is allowed, but only
|
|
// when the caller has seen those work orders and said so. Absent this flag
|
|
// the open-work-order guard still blocks.
|
|
public bool ConfirmOpenWorkOrders { get; set; }
|
|
}
|
|
|
|
public class VendorDeactivationImpactDTO
|
|
{
|
|
public int VendorId { get; set; }
|
|
public bool CanDeactivate { get; set; }
|
|
public List<LinkedWorkOrderDTO> OpenWorkOrders { get; set; } = new();
|
|
}
|
|
|
|
public class LinkedWorkOrderDTO
|
|
{
|
|
public int WorkOrderId { get; set; }
|
|
public string? WorkOrderNumber { get; set; }
|
|
public string? WorkOrderTitle { get; set; }
|
|
public string? Status { get; set; }
|
|
public DateTime? ScheduledDate { get; set; }
|
|
public int? DispatchId { get; set; }
|
|
}
|
|
|
|
public class WorkOrderVendorUpdateDTO
|
|
{
|
|
public int WorkOrderId { get; set; }
|
|
public string? ContactName { get; set; }
|
|
public string? PreferredContact { get; set; }
|
|
public string? Phone { get; set; }
|
|
public string? Email { get; set; }
|
|
public string? Notes { get; set; }
|
|
}
|
|
|
|
public class VendorDeactivationBlockedException : InvalidOperationException
|
|
{
|
|
public List<LinkedWorkOrderDTO> OpenWorkOrders { get; }
|
|
|
|
public VendorDeactivationBlockedException(string message, List<LinkedWorkOrderDTO> openWorkOrders)
|
|
: base(message)
|
|
{
|
|
OpenWorkOrders = openWorkOrders;
|
|
}
|
|
}
|
|
}
|