using OOO_WriteAndClear.DBModels;
using OOO_WriteAndClear.EventBus.Signals;
using OOO_WriteAndClear.MVP.Models.ProductsUserControlModel;
using OOO_WriteAndClear.MVP.MVPInterfaces;
using OOO_WriteAndClear.MVP.Presenters;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.DirectoryServices;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace OOO_WriteAndClear.MVP.Views
{
///
/// Логика взаимодействия для ProductsUserControl.xaml
///
public partial class ProductsUserControl : UserControl, IProductsUserControlContract.IView
{
public ProductsUserControl()
{
InitializeComponent();
_presenter = new ProductsUserControlPresenter(this);
SetUserData();
}
#region Обработчики событий
private async void UserControlWasLoaded(object sender, RoutedEventArgs e)
{
InitSortComboBoxProperty();
InitFilterComboBoxProperty();
Products = new ObservableCollection(await _presenter.UpdateProductsList(
FormProductsListParams()));
AllProductsCount.Text = _presenter.GetAllProductsCount().ToString();
_statusUC = 1;
}
private void FilterComboBoxSelectionWasChanged(object sender, SelectionChangedEventArgs e)
{
if (_statusUC == 0)
return;
FilterSearchSortParameters par = FormProductsListParams();
Task.Run(() =>
{
Products = new ObservableCollection(_presenter.FilterSearchSortProducts(par));
});
}
private void SortComboBoxSelectionWasChanged(object sender, SelectionChangedEventArgs e)
{
if (_statusUC == 0)
return;
FilterSearchSortParameters par = FormProductsListParams();
Task.Run(() =>
{
Products = new ObservableCollection(_presenter.FilterSearchSortProducts(par));
});
}
private void SearchBarTextWasChanged(object sender, TextChangedEventArgs e)
{
if (_statusUC == 0)
return;
FilterSearchSortParameters par = FormProductsListParams();
Task.Run(() =>
{
Products = new ObservableCollection(_presenter.FilterSearchSortProducts(par));
});
}
///
/// Ловит нажатие на пункт добавление к заказу в контекстном меню
///
/// Отправитель
/// Параметры события
private void AddProductToOrder_Button(object sender, RoutedEventArgs e)
{
Product product = (Product)ProductsList.SelectedItem;
Task.Run(() =>
{
_presenter.AddProductIntoOrder(product);
});
}
///
/// Ловит нажатие на пункт удаление из заказа в контекстном меню
///
/// Отправитель
/// Событие
private void RemoveProductFromOrder_Button(object sender, RoutedEventArgs e)
{
Product product = (Product)ProductsList.SelectedItem;
Task.Run(() =>
{
_presenter.RemoveProductFromOrder(product);
});
}
///
/// Нажатие на кнопку перехода в корзину
///
/// Кнопка "в корзину"
/// параметры события
private void GoToOrderCart_ButtonClick(object sender, RoutedEventArgs e)
{
EventBus.EventBus.GetService().Unsubscribe(OrderCartWasClosed);
EventBus.EventBus.GetService().Subscribe(OrderCartWasClosed);
EventBus.EventBus.GetService().Invoke(new GoToOrderCartSignal(_presenter.GetCurrentOrderFormerer()));
}
private void OrderCartWasClosed(OrderCartWasClosedSignal signal)
{
ChangeDisplayingBasketData(_presenter.GetCurrentOrderFormerer().Order);
}
private void ReturnBack_ButtonClick(object sender, RoutedEventArgs e)
{
User user = (User)Application.Current.Resources["CurrentUser"];
if (user.UserId == -1 || user.UserRole == 1)
EventBus.EventBus.GetService().Invoke(new BackToAuthorizationUserControlSignal());
else
EventBus.EventBus.GetService().Invoke(new BackToFeaturesMenuUserControlSignal());
}
#endregion
#region Реализация IProductsUserControlContract.IView
public void ChangeDisplayingBasketData(Order order)
{
Dispatcher.BeginInvoke(new Action(() =>
{
BasketCostLabel.Content = order.OrderCost.ToString("f2") + " Руб.";
if (order.OrderCost == 0m)
GoToBasketButton.Visibility = Visibility.Hidden;
else
GoToBasketButton.Visibility = Visibility.Visible;
}));
}
#endregion
public ObservableCollection Products
{
get => _products;
set
{
_products = value;
Dispatcher.BeginInvoke(new Action(() =>
{
ProductsList.ItemsSource = _products;
DisplayingProductsCount.Text = _products.Count.ToString();
}));
}
}
private int _statusUC = 0;
private ObservableCollection _products;
private IProductsUserControlContract.IPresenter _presenter;
private void InitSortComboBoxProperty()
{
List sortingVariants = new List()
{
"По возрастанию",
"По убыванию"
};
SortComboBox.ItemsSource = sortingVariants;
SortComboBox.SelectedIndex = 0;
}
private void InitFilterComboBoxProperty()
{
List