102 lines
3.5 KiB
C#
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);
|
|
}
|
|
} |