using OOO_WriteAndClear.DBModels;
using OOO_WriteAndClear.EventBus;
using OOO_WriteAndClear.EventBus.Signals;
using OOO_WriteAndClear.MVP.Models.OrderFormerer;
using OOO_WriteAndClear.MVP.MVPInterfaces;
using OOO_WriteAndClear.MVP.Presenters;
using System;
using System.Collections.Generic;
using System.ComponentModel;
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.Shapes;
namespace OOO_WriteAndClear.MVP.Views
{
///
/// Логика взаимодействия для OrderCartWindow.xaml
///
public partial class OrderCartWindow : Window, IOrderCartWindowContract.IView
{
public OrderCartWindow()
{
_presenter = new OrderCartWindowPresenter(this);
InitializeComponent();
LoadPickupPoints();
}
public OrderCartWindow(OrderFormerer orderFormerer)
{
_presenter = new OrderCartWindowPresenter(this);
InitializeComponent();
SetCurrentOrderFormerer(orderFormerer);
LoadPickupPoints();
}
#region Свойства для установки данных на экран
public string OrderCostWithoutDiscount
{
get => _orderCostWithoutDiscount;
set
{
_orderCostWithoutDiscount = value;
Dispatcher.Invoke(new Action(() =>
{
OrderCostWithoutDiscountField.Text = _orderCostWithoutDiscount;
}));
}
}
public string OrderDiscount
{
get => _orderDiscount;
set
{
_orderDiscount = value;
Dispatcher.Invoke(new Action(() =>
{
OrderDiscountField.Text = _orderDiscount;
}));
}
}
public string OrderCostWithDiscount
{
get => _orderCostWithDiscount;
set
{
_orderCostWithDiscount = value;
Dispatcher.Invoke(new Action(() =>
{
OrderCostWithDiscountField.Text = _orderCostWithDiscount;
}));
}
}
public ICollection OrderList
{
set
{
Dispatcher.Invoke(new Action(() =>
{
DisplayingOrderList.Items.Refresh();
DisplayingOrderList.ItemsSource = value;
}));
}
}
#endregion
#region Обработчики событий окна
///
/// Нажатие по кнопке добавления единицы продукта
///
/// Кнопка добавления
/// параметры события
private void AddProductUnitInOrder_ButtonClick(object sender, RoutedEventArgs e)
{
string article = ((Button)sender).Uid;
Task.Run(() =>
{
_presenter.AddProductUnitIntoOrder(article);
});
}
///
/// Нажатие по кнопке уменьшения количества продукта
///
/// Кнопка уменьшения
/// параметры события
private void RemoveProductUnitFromOrder_ButtonClick(object sender, RoutedEventArgs e)
{
string article = ((Button)sender).Uid;
Task.Run(() =>
{
_presenter.RemoveProductUnitFromOrder(article);
});
}
///
/// Нажатие по кнопке удаления продукта из заказа
///
/// Кнопка удаления
/// параметры события
private void RemoveProductFromOrder_ButtonClick(object sender, RoutedEventArgs e)
{
string article = ((Button)sender).Uid;
Task.Run(() =>
{
_presenter.RemoveProductFromOrder(article);
});
}
///
/// Нажатие по кнопке формирования заказа
///
/// Кнопка формирования заказа
/// параметры события
private void FormOrder_ButtonClick(object sender, RoutedEventArgs e)
{
if (_presenter.CurrentOrder.OrderProducts.Count == 0)
{
MessageBox.Show("Корзина пуста!", "Корзина", MessageBoxButton.OK);
return;
}
if (_selectedPickupPoint is null)
{
MessageBox.Show("Пункт выдачи не выбран!", "Пункт выдачи", MessageBoxButton.OK);
return;
}
_presenter.AddOrderInSystem(_selectedPickupPoint);
EventBus.EventBus.GetService().Invoke(new ShowOrderTalonSignal(_presenter.CurrentOrder));
}
///
/// Смена пункта выдачи заказа в comboBox
///
/// ComboBox заказа
/// параметры события
private void PickupPointComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
_selectedPickupPoint = (PickupPoint)PickupPointComboBox.SelectedItem;
}
#endregion
private IOrderCartWindowContract.IPresenter _presenter;
private PickupPoint? _selectedPickupPoint = null;
private string _orderCostWithoutDiscount;
private string _orderDiscount;
private string _orderCostWithDiscount;
private void SetCurrentOrderFormerer(OrderFormerer orderFormerer)
=> _presenter.SetCurrentOrderFormerer(orderFormerer);
private void LoadPickupPoints()
{
ICollection pickupPoints;
Task.Run(() =>
{
pickupPoints = _presenter.GetAllPickupPoints();
Dispatcher.BeginInvoke(new Action(() =>
{
PickupPointComboBox.ItemsSource = pickupPoints;
}));
});
}
}
}