73 lines
2.3 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
} |