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 filteringVarients = new List() { new FilterByDiscountParameters(0d, 100d), new FilterByDiscountParameters(0d, 9.99d), new FilterByDiscountParameters(10d, 14.99d), new FilterByDiscountParameters(15d, 100d) }; FilterComboBox.ItemsSource = filteringVarients; FilterComboBox.SelectedIndex = 0; } private FilterSearchSortParameters FormProductsListParams() { return new FilterSearchSortParameters ((SortComboBox.SelectedIndex == 0) ? SortDirection.Ascending : SortDirection.Descending, SearchBar.Text, (FilterByDiscountParameters)FilterComboBox.SelectedItem); } private void SetUserData() { User user = (User)Application.Current.Resources["CurrentUser"]; if(user.UserId == -1) { DisplayingUserName.Text = "Гость"; DisplayingUserRole.Visibility = Visibility.Collapsed; return; } DisplayingUserName.Text = user.UserSurname + " " + user.UserName + " " + user.UserPatronymic; DisplayingUserRole.Text = user.UserRoleNavigation.RoleName; } } }