using Avalonia.Controls; using AvaloniaAppApplication.DTO; using AvaloniaAppApplication.Models; using Microsoft.EntityFrameworkCore; using MsBox.Avalonia; using System; using System.Collections.Generic; using System.Linq; using static System.Net.WebRequestMethods; namespace AvaloniaAppApplication { public partial class MainWindow : Window { public List filteredServices = new List(); public List servicesList = new List(); public MainWindow() { InitializeComponent(); if (Manager.isAdmin == true) { AddServiceButton.IsVisible = true; ViewClosestAppointments.IsVisible = true; } loadServices(); } public void loadServices() { servicesList = Manager.context.Services.Select(s => new ServiceDTO { Id = s.Id, Title = s.Title, Discount = (float?)s.Discount, Description = s.Description, Durationinseconds = s.Durationinseconds, ClientServices = s.Clientservices, Cost = (float)s.Cost, MainImagePath = s.Mainimagepath, ImageBitmap = s.Mainimagepath != null ? new Avalonia.Media.Imaging.Bitmap(AppDomain.CurrentDomain.BaseDirectory.ToString() + s.Mainimagepath.Trim()) : null }).ToList(); var comboPriceList = new List() { "По умолчанию", "По возрастанию цены", "По убыванию цены" }; var comboFilterList = new List() { "Все варианты", " от 0 до 5%", "от 5% до 15%", " от 15% до 30%", "от 30% до 70%", "от 70% до 100%" }; ComboPrice.ItemsSource = comboPriceList; ComboDiscount.ItemsSource = comboFilterList; ProductListBox.ItemsSource = servicesList; DisplayedItemsNumber.Text = servicesList.Count.ToString(); TotalItemsNumber.Text = servicesList.Count.ToString(); ComboDiscount.SelectedIndex = -1; ComboPrice.SelectedIndex = -1; ServiceSearchTextBox.Text = null; } public void method() { var list = Manager.context.Services.ToList(); foreach ( var item in list ) { if (item.Discount < 1) item.Discount = item.Discount * 100; } Manager.context.SaveChanges(); } private async void AddServiceButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { await new AddEditWindow().ShowDialog(this); loadServices(); } private void ServiceSearchTextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e) { UpdateListBox(); } private void ComboPrice_SelectionChanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e) { UpdateListBox(); } private void ComboDiscount_SelectionChanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e) { UpdateListBox(); } public void UpdateListBox() { filteredServices = servicesList; // поиск if (!string.IsNullOrEmpty(ServiceSearchTextBox.Text)) { string searchText = ServiceSearchTextBox.Text.ToLower().Trim(); filteredServices = filteredServices.Where(s => s.Title.ToLower().Trim().Contains(searchText) || s.Description != null && s.Description.ToLower().Trim().Contains(searchText)).ToList(); } // фильтрация if (ComboDiscount.SelectedIndex > 0) { switch (ComboDiscount.SelectedIndex) { case 1: filteredServices = filteredServices.Where(s => s.Discount >= 0 && s.Discount < 5).ToList(); break; case 2: filteredServices = filteredServices.Where(s => s.Discount >= 5 && s.Discount < 15).ToList(); break; case 3: filteredServices = filteredServices.Where(s => s.Discount >= 15 && s.Discount < 30).ToList(); break; case 4: filteredServices = filteredServices.Where(s => s.Discount >= 30 && s.Discount < 70).ToList(); break; case 5: filteredServices = filteredServices.Where(s => s.Discount >= 70 && s.Discount < 100).ToList(); break; } } // сортировка switch (ComboPrice.SelectedIndex) { case 1: filteredServices = filteredServices.OrderBy(s => s.CostWithDiscount).ToList(); break; case 2: filteredServices = filteredServices.OrderByDescending(s => s.CostWithDiscount).ToList(); break; } ProductListBox.ItemsSource = filteredServices; DisplayedItemsNumber.Text = filteredServices.Count.ToString(); TotalItemsNumber.Text = servicesList.Count.ToString(); } private async void EditButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (Manager.isAdmin == false) { var mes = MessageBoxManager.GetMessageBoxStandard("Ошибка!", "Только администратор может править данные!"); var res = await mes.ShowWindowDialogAsync(this); return; } var serviceToEdit = (sender as Button).DataContext as ServiceDTO; await new AddEditWindow(serviceToEdit).ShowDialog(this); loadServices(); } private async void DeleteButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (Manager.isAdmin == false) { var msss = MessageBoxManager.GetMessageBoxStandard("Ошибка!", "Только администратор может править данные!"); var bb = await msss.ShowWindowDialogAsync(this); return; } var serviceFressed = (sender as Button).DataContext as ServiceDTO; var serviceToDelete = Manager.context.Services.FirstOrDefault(s => s.Id == serviceFressed.Id); var clientServicesToDelete = Manager.context.Clientservices .Where(cs => cs.Serviceid == serviceToDelete.Id); Manager.context.Clientservices.RemoveRange(clientServicesToDelete); Manager.context.Services.Remove(serviceToDelete); Manager.context.SaveChanges(); var mes = MessageBoxManager.GetMessageBoxStandard("OK!", "Информация удалена успешно!"); var res = await mes.ShowWindowDialogAsync(this); loadServices(); return; } private async void LogOutButton_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { AuthWindow authW = new AuthWindow(); authW.Show(); Close(); } private void MenuItem_Click_1(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { if (Manager.isAdmin == true) { var selectedService = (sender as MenuItem).DataContext as ServiceDTO; if (selectedService != null) new ClientServiceWindow(selectedService).ShowDialog(this); } } private void Button_Click_2(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { new ClientAppointmentsWindow().ShowDialog(this); } } }