BathhouseManagment/ViewModels/UserControlViewModels/OrderViewModel.cs

102 lines
3.5 KiB
C#

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<int> _pageSizes;
[ObservableProperty] private string _pageInfo;
private int currentPage = 0;
private int totalPages;
[ObservableProperty] ObservableCollection<Order> orders;
[ObservableProperty] ObservableCollection<Employee> employees;
[ObservableProperty] ObservableCollection<Position> positions;
[ObservableProperty] ObservableCollection<Client> clients;
[ObservableProperty] ObservableCollection<Zone> zones;
[ObservableProperty] ObservableCollection<Service> services;
[ObservableProperty] ObservableCollection<Discount> discounts;
public OrderViewModel(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
using (var rep = _serviceProvider.GetRequiredService<OrderRepository>())
Orders = new ObservableCollection<Order>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<EmployeeRepository>())
Employees = new ObservableCollection<Employee>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<ZoneRepository>())
Zones = new ObservableCollection<Zone>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<ServiceRepository>())
Services = new ObservableCollection<Service>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<ClientRepository>())
Clients = new ObservableCollection<Client>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<PositionRepository>())
Positions = new ObservableCollection<Position>(rep.GetPage());
using (var rep = _serviceProvider.GetRequiredService<DiscountRepository>())
Discounts = new ObservableCollection<Discount>(rep.GetPage());
PageSizes = new List<int>([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);
}
}