using OOO_WriteAndClear.DBModels; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; namespace OOO_WriteAndClear.MVP.Models.OrderFormerer { public class OrderFormerer { public OrderFormerer() { _order = new Order(); _order.OrderProducts = new List(); } /// /// Формируемый заказ /// public Order Order => _order; /// /// Добавляет продукт в заказ в количестве 1 штуки, если уже существует то ничего не делает /// /// Продукт для добавления public bool AddProductIntoOrder(Product product) { if (CheckAvailabilityOfProductInOrder(product)) return false; _order.OrderProducts.Add(new OrderProduct() { Order = _order, OrderId = _order.OrderId, ProductArticleNumberNavigation = product, ProductArticleNumber = product.ProductArticleNumber, ProductAmount = 1 }); return true; } /// /// Удаляет продукт из заказа /// /// удаляемый продукт public bool RemoveProductFromOrder(Product product) { if (!CheckAvailabilityOfProductInOrder(product)) return false; OrderProduct orderItem = GetOrderItem(product); _order.OrderProducts.Remove(orderItem); return true; } /// /// Добавить один продукт в заказ /// /// public void AddProductUnitIntoOrder(Product product) { if(AddProductIntoOrder(product)) return; OrderProduct orderItem = GetOrderItem(product); orderItem.ProductAmount++; } /// /// Убрать один продукт из заказа /// /// продукт public void RemoveProductUnitFromOrder(Product product) { if (!CheckAvailabilityOfProductInOrder(product)) return; OrderProduct orderItem = GetOrderItem(product); orderItem.ProductAmount--; if (orderItem.ProductAmount == 0) _order.OrderProducts.Remove(orderItem); } /// /// Проверяет наличие продукта в заказе /// /// продукт /// true - есть в заказе; false - нет в заказе public bool CheckAvailabilityOfProductInOrder(Product product) => _order.OrderProducts.Where(a => a.ProductArticleNumber == product.ProductArticleNumber).ToList().Count > 0; public Order PrepareOrderForAdd() { int DeliveryDelay = GenerateDeliveryDelay(); Order order = new Order() { OrderReceiveCode = GenerateReceiveCode(), OrderCustomer = Order.OrderCustomer, OrderStatusId = 1, OrderCreateDate = DateTime.Now, OrderDeliveryDate = DateTime.Now.AddDays(DeliveryDelay), OrderPickupPointId = Order.OrderPickupPoint.PickupPointId, OrderProducts = new List() }; Order.OrderCreateDate = order.OrderCreateDate; Order.OrderDeliveryDate = order.OrderDeliveryDate; Order.OrderReceiveCode = order.OrderReceiveCode; foreach(var OrderProduct in Order.OrderProducts) { order.OrderProducts.Add(new OrderProduct() { ProductArticleNumber = OrderProduct.ProductArticleNumber, ProductAmount = OrderProduct.ProductAmount }); } return order; } private Order _order; /// /// Получение строки заказа по продукту /// /// продукт /// null - если заказа не существует; OrderProduct - если существует private OrderProduct? GetOrderItem(Product product) => _order.OrderProducts.Where(a => a.ProductArticleNumber == product.ProductArticleNumber).FirstOrDefault(); private int GenerateReceiveCode() => new Random().Next(100, 1000); private int GenerateDeliveryDelay() { bool IsShortageInStock = false; foreach (var product in Order.OrderProducts) { if(product.ProductArticleNumberNavigation.ProductQuantityInStock < 3) { return 6; } } return 3; } } }