using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Threading; using AvaloniaAppApplication.DTO; using Microsoft.EntityFrameworkCore; using System; using System.Collections.ObjectModel; using System.Globalization; using System.Linq; namespace AvaloniaAppApplication; public partial class ClientAppointmentsWindow : Window { private DispatcherTimer timer; ObservableCollection appointments; public ClientAppointmentsWindow() { InitializeComponent(); DataContext= this; LoadData(); StartTimer(); } public void LoadData() { string todayDate = DateTime.Today.ToString("dd.MM.yy"); string tommorowDate = DateTime.Today.AddDays(1).ToString("dd.MM.yy"); var moscowTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"); var appointmentList = Manager.context.Clientservices.AsNoTracking() .Include(c => c.Client) .Include(s => s.Service) .Where(a => a.Starttime.Contains(todayDate) || a.Starttime.Contains(tommorowDate)) .Select(a => new ClientServiceDTO { Title = a.Service.Title, ClientFIO = a.Client.Lastname + " " + a.Client.Firstname + " " + a.Client.Patronymic, Email = a.Client.Email, StartTime = a.Starttime, Phone = a.Client.Phone, RemainingTime = (int)((DateTime.ParseExact(a.Starttime, "dd.MM.yy H:mm", CultureInfo.InvariantCulture) - TimeZoneInfo.ConvertTime(DateTime.Now, moscowTimeZone)).TotalSeconds / 60) }) .ToList(); appointments = new ObservableCollection(appointmentList); ClientAppointmentLB.ItemsSource = appointments; } private void StartTimer() { timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(30) // Set the interval to 30 seconds }; timer.Tick += (sender, e) => LoadData(); // Reload data on tick timer.Start(); // Start the timer } }