demo_term/demko_term/HistoryWindow.axaml.cs

82 lines
2.5 KiB
C#
Raw Normal View History

2025-04-14 05:39:47 +00:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Avalonia.Controls;
using Avalonia.Interactivity;
using demko_term.Models;
using Microsoft.EntityFrameworkCore;
namespace demko_term;
public partial class HistoryWindow : Window
{
private ObservableCollection<HistoryPresenter> history = new();
private List<HistoryPresenter> dataSourceHistory;
public HistoryWindow()
{
InitializeComponent();
DataContext = this;
using var context = new DemoCourseworkContext();
dataSourceHistory = context.EmployeesHistories
.Include(h => h.Employee)
.Select(h => new HistoryPresenter
{
Login = h.Employee.Login,
LastLogin = h.LastLogin,
SuccessLoginBool = h.SuccessLogin
})
.ToList();
LoginComboBox.ItemsSource = dataSourceHistory.Select(it => it.Login).Distinct().ToList();
DateComboBox.ItemsSource = dataSourceHistory.Select(it => it.LastLogin).Where(it => it.HasValue).Distinct().ToList();
HistoryListBox.ItemsSource = history;
DisplayServices();
}
public class HistoryPresenter
{
public string Login { get; set; } = string.Empty;
public DateTime? LastLogin { get; set; }
public bool? SuccessLoginBool { get; set; }
public string SuccessLogin => SuccessLoginBool.HasValue ? (SuccessLoginBool.Value ? "Успешно" : "Не успешно") : "";
}
private void DisplayServices()
{
var filteredData = dataSourceHistory;
if (LoginComboBox.SelectedItem is string selectedLogin)
{
filteredData = filteredData
.Where(it => it.Login == selectedLogin)
.ToList();
}
if (DateComboBox.SelectedItem is DateTime selectedDate)
{
filteredData = filteredData
.Where(it => it.LastLogin.HasValue && it.LastLogin.Value.Date == selectedDate.Date)
.ToList();
}
history.Clear();
foreach (var item in filteredData.OrderBy(it => it.LastLogin))
{
history.Add(item);
}
}
public void LoginComboBox_OnSelectionChanged(object? sender, RoutedEventArgs e)
{
DisplayServices();
}
public void DateComboBox_OnSelectionChanged(object? sender, RoutedEventArgs e)
{
DisplayServices();
}
}