using Avalonia.Controls; using Avalonia.Interactivity; using System; using System.Linq; using data.RemoteData.RemoteDataBase; using data.RemoteData.RemoteDataBase.DAO; namespace Presence { public partial class AttendanceWindow : Window { private readonly RemoteDatabaseContext _context; public AttendanceWindow() { InitializeComponent(); _context = new RemoteDatabaseContext(); // Инициализируем фильтры LoadGroups(); DatePicker.SelectedDate = DateTime.Today; // Навешиваем обработчики BtnFilter.Click += BtnFilter_Click; // Загрузка сразу при открытии LoadAttendance(); } private void LoadGroups() { var groups = _context.Groups.ToList(); GroupComboBox.ItemsSource = groups; GroupComboBox.SelectedIndex = 0; } private void BtnFilter_Click(object? sender, RoutedEventArgs e) { LoadAttendance(); } private void LoadAttendance() { // 1) Получаем Nullable из DatePicker var selectedDto = DatePicker.SelectedDate ?? DateTimeOffset.Now; // 2) Преобразуем в DateTime DateTime dt = selectedDto.DateTime; // 3) Делаем DateOnly DateOnly date = DateOnly.FromDateTime(dt); // Выбранная группа var selectedGroup = GroupComboBox.SelectedItem as GroupDAO; // Фильтруем посещаемость по DateOnly и GroupId var records = _context.Presences .Where(a => a.Date == date) // a.Date — DateOnly .Join(_context.Users, a => a.UserId, u => u.UserId, (a, u) => new { a, u }) .Where(x => selectedGroup == null || x.u.GroupId == selectedGroup.Id) .Select(x => $"{x.u.FIO} — {x.a.Date:yyyy-MM-dd} — " + (x.a.IsAttendance ? "Присутствовал" : "Отсутствовал")) .ToList(); AttendanceList.ItemsSource = records; } } }