using CommunityToolkit.Mvvm.ComponentModel; using Elwig.Models.Entities; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; namespace Elwig.ViewModels { public partial class DeliveryScheduleAdminViewModel : ObservableObject { [ObservableProperty] public partial string? SearchQuery { get; set; } = ""; public List TextFilter => [.. SearchQuery?.ToLower().Split(' ').ToList().FindAll(e => e.Length > 0) ?? []]; [ObservableProperty] public partial bool FilterOnlyUpcoming { get; set; } [ObservableProperty] public partial string? FilterSeasonString { get; set; } public int? FilterSeason { get => int.TryParse(FilterSeasonString, out var year) ? year : null; set => FilterSeasonString = $"{value}"; } [ObservableProperty] public partial DeliverySchedule? SelectedDeliverySchedule { get; set; } [ObservableProperty] public partial IEnumerable DeliverySchedules { get; set; } = []; [ObservableProperty] public partial bool EnableSearchInputs { get; set; } = true; [ObservableProperty] public partial string DateString { get; set; } = ""; public DateOnly? Date { get => DateOnly.TryParseExact(DateString, "dd.MM.yyyy", out var d) ? d : null; set => DateString = $"{value:dd.MM.yyyy}"; } [ObservableProperty] public partial Branch? Branch { get; set; } [ObservableProperty] public partial IEnumerable BranchSource { get; set; } = []; [ObservableProperty] public partial string Description { get; set; } = ""; [ObservableProperty] public partial string? MaxWeightString { get; set; } = ""; public int? MaxWeight { get => int.TryParse(MaxWeightString, out var w) ? w : null; set => MaxWeightString = $"{value}"; } [ObservableProperty] public partial bool IsCancelled { get; set; } public ObservableCollection MainVarieties { get; set; } = []; [ObservableProperty] public partial IEnumerable MainVarietiesSource { get; set; } = []; public ObservableCollection OtherVarieties { get; set; } = []; [ObservableProperty] public partial IEnumerable OtherVarietiesSource { get; set; } = []; [ObservableProperty] public partial IEnumerable AttributeSource { get; set; } = []; [ObservableProperty] public partial object? AttributeObj { get; set; } public WineAttr? Attribute { get => AttributeObj as WineAttr; set => AttributeObj = value ?? AttributeSource.FirstOrDefault(); } [ObservableProperty] public partial IEnumerable CultivationSource { get; set; } = []; [ObservableProperty] public partial object? CultivationObj { get; set; } public WineCult? Cultivation { get => CultivationObj as WineCult; set => CultivationObj = value ?? CultivationSource.FirstOrDefault(); } [ObservableProperty] public partial string AncmtFromDateString { get; set; } = ""; public DateOnly? AncmtFromDate { get => DateOnly.TryParseExact(AncmtFromDateString, "dd.MM.yyyy", out var d) ? d : null; set => AncmtFromDateString = $"{value:dd.MM.yyyy}"; } [ObservableProperty] public partial string AncmtFromTimeString { get; set; } = ""; public TimeOnly? AncmtFromTime { get => TimeOnly.TryParseExact(AncmtFromTimeString, "HH:mm", out var t) ? t : null; set => AncmtFromTimeString = $"{value:HH:mm}"; } public DateTime? AncmtFrom { get => AncmtFromDate != null && AncmtFromTime != null ? AncmtFromDate.Value.ToDateTime(AncmtFromTime.Value) : null; set { AncmtFromDateString = $"{value:dd.MM.yyyy}"; AncmtFromTimeString = $"{value:HH:mm}"; } } [ObservableProperty] public partial string AncmtToDateString { get; set; } = ""; public DateOnly? AncmtToDate { get => DateOnly.TryParseExact(AncmtToDateString, "dd.MM.yyyy", out var d) ? d : null; set => AncmtToDateString = $"{value:dd.MM.yyyy}"; } [ObservableProperty] public partial string AncmtToTimeString { get; set; } = ""; public TimeOnly? AncmtToTime { get => TimeOnly.TryParseExact(AncmtToTimeString, "HH:mm", out var t) ? t : null; set => AncmtToTimeString = $"{value:HH:mm}"; } public DateTime? AncmtTo { get => AncmtToDate != null && AncmtToTime != null ? AncmtToDate.Value.ToDateTime(AncmtToTime.Value) : null; set { AncmtToDateString = $"{value:dd.MM.yyyy}"; AncmtToTimeString = $"{value:HH:mm}"; } } [ObservableProperty] public partial Visibility ControlButtonsVisibility { get; set; } = Visibility.Visible; [ObservableProperty] public partial Visibility EditingButtonsVisibility { get; set; } = Visibility.Hidden; } }