using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using BathHouseManagmet.Database; using BathHouseManagmet.Models; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; namespace BathHouseManagmet.ViewModels; public partial class OrderViewModel : ViewModelBase { private readonly IServiceProvider _serviceProvider; [ObservableProperty] private int _currentPageSize; [ObservableProperty] private List _pageSizes; [ObservableProperty] private string _pageInfo; private int currentPage = 0; private int totalPages; [ObservableProperty] ObservableCollection orders; [ObservableProperty] ObservableCollection employees; [ObservableProperty] ObservableCollection positions; [ObservableProperty] ObservableCollection clients; [ObservableProperty] ObservableCollection zones; [ObservableProperty] ObservableCollection services; [ObservableProperty] ObservableCollection discounts; public OrderViewModel(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; using (var rep = _serviceProvider.GetRequiredService()) Orders = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Employees = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Zones = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Services = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Clients = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Positions = new ObservableCollection(rep.GetPage()); using (var rep = _serviceProvider.GetRequiredService()) Discounts = new ObservableCollection(rep.GetPage()); PageSizes = new List([5,10,20]); CurrentPageSize = PageSizes.First(); } partial void OnCurrentPageSizeChanged(int value) { CalculatePages(); } void CalculatePages() { using var db = new OrderRepository(); var rowsCount = db.GetRowsCount(); totalPages = (int)Math.Ceiling(((double)rowsCount / CurrentPageSize)); ShowFirstPage(); } void ShowPage(int pageIndex) { currentPage = pageIndex; using var db = new OrderRepository(); Orders.Clear(); var rows = db.GetPage(pageIndex, CurrentPageSize); rows.ForEach(o => Orders.Add(o)); PageInfo = $"Страница {currentPage + 1} из {totalPages}"; } [RelayCommand] private void ShowFirstPage() { ShowPage(0); } [RelayCommand] private void ShowLastPage() { ShowPage(totalPages - 1); } [RelayCommand] private void ShowNextPage() { if (currentPage < totalPages - 1) ShowPage(currentPage + 1); } [RelayCommand] private void ShowPreviousPage() { if (currentPage > 0) ShowPage(currentPage - 1); } }