diff --git a/Sensus.Shared/Probes/User/Scripts/ScheduleTrigger.cs b/Sensus.Shared/Probes/User/Scripts/ScheduleTrigger.cs index 559912d27..203e24f86 100644 --- a/Sensus.Shared/Probes/User/Scripts/ScheduleTrigger.cs +++ b/Sensus.Shared/Probes/User/Scripts/ScheduleTrigger.cs @@ -19,84 +19,105 @@ namespace Sensus.Probes.User.Scripts { - public class ScheduleTrigger - { - private readonly List _windows; - private int _nonDowTriggerIntervalDays; - - public int WindowCount => _windows.Count; - - public string WindowsString - { - get - { - lock (_windows) - { - return string.Join(", ", _windows); - } - } - set - { - if (value == WindowsString) - { - return; - } - - lock (_windows) - { - _windows.Clear(); - - try - { - _windows.AddRange(value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(windowString => new TriggerWindow(windowString))); - } - catch - { - // ignore improperly formatted trigger windows - } - - _windows.Sort(); - } - } - } - - public int NonDowTriggerIntervalDays - { - get - { - return _nonDowTriggerIntervalDays; - } - set - { - _nonDowTriggerIntervalDays = value; - } - } - - public bool WindowExpiration { get; set; } - - [JsonIgnore] - public string ReadableDescription - { - get - { - if (_windows.Count == 0) - { - return ""; - } - else if (_windows.Count == 1) - { - return _windows[0].GetReadableDescription(_nonDowTriggerIntervalDays); - } - else if (_windows.Count == 2) - { - return _windows[0].GetReadableDescription(_nonDowTriggerIntervalDays) + " and " + _windows[1].GetReadableDescription(_nonDowTriggerIntervalDays); - } - else - { - return string.Concat(_windows.Take(_windows.Count - 1).Select(window => window.GetReadableDescription(_nonDowTriggerIntervalDays) + ", ")) + " and " + _windows.Last().GetReadableDescription(_nonDowTriggerIntervalDays); - } - } - } + public class ScheduleTrigger + { + private readonly List _windows; + private int _nonDowTriggerIntervalDays; + + public int WindowCount => _windows.Count; + + public string WindowsString + { + get + { + lock (_windows) + { + return string.Join(", ", _windows); + } + } + set + { + if (value == WindowsString) + { + return; + } + + lock (_windows) + { + _windows.Clear(); + + try + { + _windows.AddRange(value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(windowString => new TriggerWindow(windowString))); + } + catch + { + // ignore improperly formatted trigger windows + } + + _windows.Sort(); + } + } + } + + public int NonDowTriggerIntervalDays + { + get + { + return _nonDowTriggerIntervalDays; + } + set + { + _nonDowTriggerIntervalDays = value; + } + } + + public bool WindowExpiration { get; set; } + + [JsonIgnore] + public string ReadableDescription + { + get + { + //if (_windows.Count == 0) + //{ + // return ""; + //} + //else if (_windows.Count == 1) + //{ + // return _windows[0].GetReadableDescription(_nonDowTriggerIntervalDays); + //} + //else if (_windows.Count == 2) + //{ + // return _windows[0].GetReadableDescription(_nonDowTriggerIntervalDays) + " and " + _windows[1].GetReadableDescription(_nonDowTriggerIntervalDays); + //} + //else + //{ + // return string.Concat(_windows.Take(_windows.Count - 1).Select(window => window.GetReadableDescription(_nonDowTriggerIntervalDays) + ", ")) + " and " + _windows.Last().GetReadableDescription(_nonDowTriggerIntervalDays); + //} + + int dowRunsPerWeek = _windows.Count(x => x.DayOfTheWeek != null); + int totalRunsPerWeek = dowRunsPerWeek + (_windows.Count - dowRunsPerWeek) * (7 / _nonDowTriggerIntervalDays); + int average = Math.Max(totalRunsPerWeek / 7, 1); + int high = _windows.Count; + + string description = $"avg: {average}, max: {high} times"; + + if (average == high) + { + string plural = ""; + + if (high > 1) + { + plural = "s"; + } + + description = $"{high} time{plural}"; + } + + return $"{description} a day"; + } + } public ScheduleTrigger() { diff --git a/Sensus.Shared/Probes/User/Scripts/ScriptProbe.cs b/Sensus.Shared/Probes/User/Scripts/ScriptProbe.cs index 3835bc8c3..4bf554193 100644 --- a/Sensus.Shared/Probes/User/Scripts/ScriptProbe.cs +++ b/Sensus.Shared/Probes/User/Scripts/ScriptProbe.cs @@ -204,24 +204,39 @@ public override string CollectionDescription { if (scriptRunner.Enabled) { - foreach (Trigger trigger in scriptRunner.Triggers) - { - collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": When " + trigger.Probe.DisplayName + " is " + uppercaseSplitter.Replace(trigger.Condition.ToString(), " ").ToLower() + " " + trigger.ConditionValue + "."); - } - - if (scriptRunner.RunOnStart) - { - collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": Once when the study is started."); - } - - if (scriptRunner.TriggerWindowsString != "") - { - collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": " + scriptRunner.ScheduleTriggerReadableDescription + "."); - } - } - } - - return collectionDescription.ToString(); + //foreach (Trigger trigger in scriptRunner.Triggers) + // { + // collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": When " + trigger.Probe.DisplayName + " is " + uppercaseSplitter.Replace(trigger.Condition.ToString(), " ").ToLower() + " " + trigger.ConditionValue + "."); + // } + + // if (scriptRunner.RunOnStart) + // { + // collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": Once when the study is started."); + // } + + // if (scriptRunner.TriggerWindowsString != "") + // { + // collectionDescription.Append((collectionDescription.Length == 0 ? "" : Environment.NewLine) + scriptRunner.Name + ": " + scriptRunner.ScheduleTriggerReadableDescription + "."); + // } + + foreach (Trigger trigger in scriptRunner.Triggers) + { + collectionDescription.AppendLine((collectionDescription.Length == 0 ? "" : "-") + scriptRunner.Name + ": When " + trigger.Probe.DisplayName + " is " + uppercaseSplitter.Replace(trigger.Condition.ToString(), " ").ToLower() + " " + trigger.ConditionValue + "."); + } + + if (scriptRunner.RunOnStart) + { + collectionDescription.AppendLine((collectionDescription.Length == 0 ? "" : "-") + scriptRunner.Name + ": Once when the study is started."); + } + + if (scriptRunner.TriggerWindowsString != "") + { + collectionDescription.AppendLine((collectionDescription.Length == 0 ? "" : "-") + scriptRunner.Name + ": " + scriptRunner.ScheduleTriggerReadableDescription + "."); + } + } + } + + return collectionDescription.ToString(); } }