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

80 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
};
}
}
}