forked from equinor/flotilla
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAutoScheduleFrequency.cs
More file actions
73 lines (66 loc) · 2.3 KB
/
AutoScheduleFrequency.cs
File metadata and controls
73 lines (66 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
#pragma warning disable CS8618
namespace Api.Database.Models
{
[Owned]
public class AutoScheduleFrequency
{
[Required]
// In local time
public IList<TimeOnly> TimesOfDay { get; set; } = new List<TimeOnly>();
[Required]
public IList<DayOfWeek> DaysOfWeek { get; set; } = new List<DayOfWeek>();
public bool HasValidValue()
{
return TimesOfDay.Count != 0 && DaysOfWeek.Count != 0;
}
public void ValidateAutoScheduleFrequency()
{
if (TimesOfDay.Count == 0)
{
throw new ArgumentException(
"AutoScheduleFrequency must have at least one time of day"
);
}
if (DaysOfWeek.Count == 0)
{
throw new ArgumentException(
"AutoScheduleFrequency must have at least one day of week"
);
}
}
public IList<TimeSpan>? GetSchedulingTimesForNext24Hours()
{
// NCS is always in CET
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(
"Central European Standard Time"
);
DateTime nowLocal = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi);
TimeOnly nowLocalTimeOnly = new(nowLocal.Hour, nowLocal.Minute, nowLocal.Second);
var autoScheduleNext24Hours = new List<TimeSpan>();
if (DaysOfWeek.Contains(nowLocal.DayOfWeek))
{
foreach (TimeOnly time in TimesOfDay)
{
if (time > nowLocalTimeOnly)
{
autoScheduleNext24Hours.Add(time - nowLocalTimeOnly);
}
}
}
if (DaysOfWeek.Contains(nowLocal.DayOfWeek + 1))
{
foreach (TimeOnly time in TimesOfDay)
{
if (time <= nowLocalTimeOnly)
{
autoScheduleNext24Hours.Add(time - nowLocalTimeOnly);
}
}
}
return autoScheduleNext24Hours.Count > 0 ? autoScheduleNext24Hours : null;
}
}
}