FinalPresenceLexa/Presence/AttendanceWindow.axaml.cs
2025-04-28 11:51:01 +03:00

73 lines
2.3 KiB
C#

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<DateTimeOffset> из 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;
}
}
}