diff --git a/Elwig/Helpers/Utils.cs b/Elwig/Helpers/Utils.cs index 6eff9f3..74b738c 100644 --- a/Elwig/Helpers/Utils.cs +++ b/Elwig/Helpers/Utils.cs @@ -24,6 +24,7 @@ namespace Elwig.Helpers { public static readonly Regex TcpRegex = GeneratedTcpRegex(); public static readonly Regex PartialDateRegex = GeneratedPartialDateRegex(); public static readonly Regex FromToRegex = GeneratedFromToRegex(); + public static readonly Regex FromToTimeRegex = GeneratedFromToTimeRegex(); [GeneratedRegex("^serial://([A-Za-z0-9]+):([0-9]+)(,([5-9]),([NOEMSnoems]),(0|1|1\\.5|2|))?$", RegexOptions.Compiled)] private static partial Regex GeneratedSerialRegex(); @@ -37,6 +38,9 @@ namespace Elwig.Helpers { [GeneratedRegex(@"^([0-9]+([\.,][0-9]+)?)?-([0-9]+([\.,][0-9]+)?)?$", RegexOptions.Compiled)] private static partial Regex GeneratedFromToRegex(); + [GeneratedRegex(@"^([0-9]{1,2}:[0-9]{2})?-([0-9]{1,2}:[0-9]{2})?$", RegexOptions.Compiled)] + private static partial Regex GeneratedFromToTimeRegex(); + private static readonly ushort[] Crc16ModbusTable = { 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, diff --git a/Elwig/Windows/DeliveryAdminWindow.xaml.cs b/Elwig/Windows/DeliveryAdminWindow.xaml.cs index ac38ba2..e6c63f5 100644 --- a/Elwig/Windows/DeliveryAdminWindow.xaml.cs +++ b/Elwig/Windows/DeliveryAdminWindow.xaml.cs @@ -170,6 +170,8 @@ namespace Elwig.Windows { var filterMgNr = new List(); var filterDate = new List(); var filterPartDate = new List(); + string? filterTimeGt = null; + string? filterTimeLt = null; int filterYearGt = 0; int filterYearLt = 0; double filterKmwGt = 0; @@ -205,6 +207,12 @@ namespace Elwig.Windows { case ('<', _): filterOeLt = num; break; } filter.RemoveAt(i--); + } else if (TimeOnly.TryParse(e[1..], out var time)) { + switch ((e[0], time)) { + case ('>', _): filterTimeGt = $"{time:HH:mm}"; break; + case ('<', _): filterTimeLt = $"{time:HH:mm}"; break; + } + filter.RemoveAt(i--); } if (e.Length == 1) filter.RemoveAt(i--); } else if (e.Length > 1 && Utils.FromToRegex.IsMatch(e)) { @@ -230,6 +238,11 @@ namespace Elwig.Windows { break; } filter.RemoveAt(i--); + } else if (e.Length > 1 && Utils.FromToTimeRegex.IsMatch(e)) { + var parts = e.Split("-"); + filterTimeGt = TimeOnly.TryParse(parts[0], out var from) ? $"{from:HH:mm}" : null; + filterTimeLt = TimeOnly.TryParse(parts[1], out var to) ? $"{to:HH:mm}" : null; + filter.RemoveAt(i--); } else if (DateOnly.TryParse(e, out var date)) { filterDate.Add($"{date:yyyy-MM-dd}"); filter.RemoveAt(i--); @@ -247,6 +260,8 @@ namespace Elwig.Windows { if (filterPartDate.Count > 0) deliveryQuery = deliveryQuery.Where(d => filterPartDate.Contains(d.DateString.Substring(4))); if (filterYearGt > 0) deliveryQuery = deliveryQuery.Where(d => d.Year >= filterYearGt); if (filterYearLt > 0) deliveryQuery = deliveryQuery.Where(d => d.Year < filterYearLt); + if (filterTimeGt != null) deliveryQuery = deliveryQuery.Where(d => filterTimeGt.CompareTo(d.TimeString) <= 0); + if (filterTimeLt != null) deliveryQuery = deliveryQuery.Where(d => filterTimeLt.CompareTo(d.TimeString) > 0); if (filterVar.Count > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => filterVar.Contains(p.SortId))); if (filterQual.Count > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => filterQual.Contains(p.QualId))); if (filterKmwGt > 0) deliveryQuery = deliveryQuery.Where(d => d.Parts.Any(p => p.Kmw >= filterKmwGt));