shoc-backend/SeaHaven.Services/Helpers/WorkOrderDerivedFields.cs

81 lines
2.6 KiB
C#
Raw Normal View History

using Data.SeaHavenIndustries.Enums;
namespace SeaHaven.Services.Helpers
{
public static class WorkOrderDerivedFields
{
private static readonly HashSet<LifecycleStatus?> TerminalStatuses = new()
{
LifecycleStatus.Complete,
LifecycleStatus.Canceled,
LifecycleStatus.Closed
};
public static bool IsPastDue(
DateTime? scheduledDate,
LifecycleStatus? lifecycleStatus,
DateTime? utcNow = null)
{
if (!scheduledDate.HasValue)
return false;
if (TerminalStatuses.Contains(lifecycleStatus))
return false;
var today = (utcNow ?? DateTime.UtcNow).Date;
return scheduledDate.Value.Date < today;
}
public static bool IsTerminal(LifecycleStatus? lifecycleStatus)
=> TerminalStatuses.Contains(lifecycleStatus);
public static string? GetDayGroup(DateTime? scheduledDate)
{
if (!scheduledDate.HasValue)
return null;
return scheduledDate.Value.DayOfWeek switch
{
DayOfWeek.Monday => "monday",
DayOfWeek.Tuesday => "tuesday",
DayOfWeek.Wednesday => "wednesday",
DayOfWeek.Thursday => "thursday",
DayOfWeek.Friday => "friday",
_ => null
};
}
public static string? FormatApptTime(DateTime? start, DateTime? end)
{
if (!start.HasValue)
return null;
if (end.HasValue)
return $"{start.Value:HH:mm} – {end.Value:HH:mm}";
return start.Value.ToString("HH:mm");
}
public static string GetLifecycleStatusLabel(LifecycleStatus? status)
{
if (!status.HasValue)
return "";
return status.Value switch
{
LifecycleStatus.Incomplete => "Incomplete",
LifecycleStatus.Scheduled => "Scheduled",
LifecycleStatus.InProgress => "In Progress",
LifecycleStatus.Complete => "Complete",
LifecycleStatus.Canceled => "Canceled",
LifecycleStatus.OnHold => "On Hold",
LifecycleStatus.PendingVendor => "Pending Vendor",
LifecycleStatus.PendingApproval => "Pending Approval",
LifecycleStatus.NeedsReview => "Needs Review",
LifecycleStatus.Closed => "Closed",
_ => status.Value.ToString()
};
}
}
}