| | | 1 | | using OServices.FiltersServices.FilterModels; |
| | | 2 | | using Services.ApiServices.OpenRouterApi.Models; |
| | | 3 | | |
| | | 4 | | namespace Services.AiAssistant; |
| | | 5 | | |
| | | 6 | | public static class AiOrdersFilterBuilder |
| | | 7 | | { |
| | | 8 | | public static OrderFilterModel FromPreset(string preset) |
| | | 9 | | { |
| | 13 | 10 | | var msk = TimeZoneInfo.ConvertTimeFromUtc( |
| | 13 | 11 | | DateTime.UtcNow, |
| | 13 | 12 | | TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")); |
| | | 13 | | |
| | 13 | 14 | | return preset switch |
| | 13 | 15 | | { |
| | 1 | 16 | | "orders_today" => new OrderFilterModel |
| | 1 | 17 | | { |
| | 1 | 18 | | ProcessingDate = msk.Date, |
| | 1 | 19 | | GroupByShipment = true, |
| | 1 | 20 | | IncludeArchived = false |
| | 1 | 21 | | }, |
| | 1 | 22 | | "cancelled_orders_today" => new OrderFilterModel |
| | 1 | 23 | | { |
| | 1 | 24 | | Status = "Отменён", |
| | 1 | 25 | | LastStatusChangeDateFrom = msk.Date, |
| | 1 | 26 | | LastStatusChangeDateTo = msk.Date.AddDays(1).AddTicks(-1), |
| | 1 | 27 | | GroupByShipment = true, |
| | 1 | 28 | | IncludeArchived = false |
| | 1 | 29 | | }, |
| | 1 | 30 | | "unprofitable_orders" => new OrderFilterModel |
| | 1 | 31 | | { |
| | 1 | 32 | | OnlyNegativeProfit = true, |
| | 1 | 33 | | GroupByShipment = true, |
| | 1 | 34 | | IncludeArchived = false |
| | 1 | 35 | | }, |
| | 1 | 36 | | "no_supplier_orders" => new OrderFilterModel |
| | 1 | 37 | | { |
| | 1 | 38 | | Supplier = "", |
| | 1 | 39 | | GroupByShipment = true, |
| | 1 | 40 | | IncludeArchived = false |
| | 1 | 41 | | }, |
| | 9 | 42 | | _ => new OrderFilterModel { GroupByShipment = true, IncludeArchived = false } |
| | 13 | 43 | | }; |
| | | 44 | | } |
| | | 45 | | |
| | | 46 | | public static OrderFilterModel FromOrders(IEnumerable<OrderSummaryDto> orders) |
| | | 47 | | { |
| | 11 | 48 | | var list = orders.ToList(); |
| | 11 | 49 | | var shipments = list |
| | 27 | 50 | | .Select(o => o.ShipmentNumber?.Trim()) |
| | 27 | 51 | | .Where(n => !string.IsNullOrWhiteSpace(n)) |
| | 11 | 52 | | .Distinct(StringComparer.OrdinalIgnoreCase) |
| | 11 | 53 | | .ToList(); |
| | | 54 | | |
| | 11 | 55 | | return new OrderFilterModel |
| | 11 | 56 | | { |
| | 11 | 57 | | ShipmentNumber = shipments.Count > 0 ? string.Join(",", shipments) : null, |
| | 11 | 58 | | GroupByShipment = true, |
| | 26 | 59 | | IncludeArchived = list.Any(o => o.IsArchived) |
| | 11 | 60 | | }; |
| | | 61 | | } |
| | | 62 | | } |