mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 06:03:12 +00:00
Expand LifecycleStatus (EnRoute, OnSite, Rescheduled, Pending, PendingQuote) and WorkOrderType (Reactive, AddOn) to match the frontend prototype. Add FE label round-trip via LifecycleStatusMapper/WorkOrderTypeMapper, update derived fields, mutation rules and board unscheduled filter, and reactivate [Authorize] on WorkOrderController. Fix pre-existing dayGroup test expectation.
42 lines
1.5 KiB
C#
42 lines
1.5 KiB
C#
using Data.SeaHavenIndustries.Enums;
|
|
|
|
namespace SeaHaven.Services.Helpers
|
|
{
|
|
public static class WorkOrderBoardMutationRules
|
|
{
|
|
private static readonly HashSet<LifecycleStatus?> ReadOnlyStatuses = new()
|
|
{
|
|
LifecycleStatus.Canceled,
|
|
LifecycleStatus.Completed
|
|
};
|
|
|
|
public static bool IsReadOnly(LifecycleStatus? status) => ReadOnlyStatuses.Contains(status);
|
|
|
|
public static bool ShouldBlockStatusChangeWhenPastDue(string field, bool isPastDue)
|
|
=> field.Equals(WorkOrderBoardFieldNames.LifecycleStatus, StringComparison.OrdinalIgnoreCase) && isPastDue;
|
|
|
|
public static bool ShouldAutoSchedule(
|
|
LifecycleStatus? status,
|
|
DateTime? scheduledDate,
|
|
string? assignTo)
|
|
=> status == LifecycleStatus.Incomplete
|
|
&& scheduledDate.HasValue
|
|
&& !string.IsNullOrWhiteSpace(assignTo);
|
|
|
|
public static bool IsReschedule(DateTime? previousDate, DateTime? newDate)
|
|
=> previousDate.HasValue
|
|
&& newDate.HasValue
|
|
&& previousDate.Value.Date != newDate.Value.Date;
|
|
|
|
public static DateOnly? ComputeOriginalWeek(DateTime? scheduledDate)
|
|
=> scheduledDate.HasValue
|
|
? DateOnly.FromDateTime(GetWeekStartMonday(scheduledDate.Value))
|
|
: null;
|
|
|
|
private static DateTime GetWeekStartMonday(DateTime date)
|
|
{
|
|
var diff = (7 + (date.DayOfWeek - DayOfWeek.Monday)) % 7;
|
|
return date.Date.AddDays(-diff);
|
|
}
|
|
}
|
|
}
|