public Order AddProductInOrder(int idOrder, AddOrderToProductModel item) { if (item == null) { throw new AppValidationException(MessageConstants.ADD_PRODUCT_MODEL_IS_EMPTY); } var order = GetOrderFromRepository(idOrder); var product = GetProduct(item.SKU); if (product.PriceType == PriceType.PerEach && (item.QTY - Math.Floor(item.QTY)) != 0) { throw new AppValidationException(MessageConstants.FRACTIONAL_QTY_NOT_AVALIABLE_IN_ORDER_FOR_PRODUCT_WITH_LB_PRICE); } var orderToProduct = order.OrderToProducts.FirstOrDefault(p => p.IdProduct == product.Id); if (orderToProduct == null) { orderToProduct = new OrderToProduct() { IdProduct = product.Id, }; order.OrderToProducts.Add(orderToProduct); } orderToProduct.QTY += item.QTY; order = GetRecalculatedOrder(order); var result = _orderRepository.Update(order); return(result ? order : null); }
public OrderToProductDto(OrderToProduct o) { OrderId = o.OrderId; productId = o.productId; sizeId = o.sizeId; price = o.price; amount = Convert.ToInt32(o.amount); }
public void GetAsync_ProductHasNotBeenRated_Test() { // Arrange var now = DateTime.Now; long orderId = 0; long customerId = 0; long productId = 0; var customer = _dataFixture.GetCustomer(); var feedback = _dataFixture.GetFeedback(now, FeedbackType.Product); var order = _dataFixture.GetOrder(now); order.FeedbackSid = feedback.Sid; var cachedFeedbackList = new List <Feedback> { }; OrderToProduct orderToProduct = new OrderToProduct { Ordersid = orderId, ProductSid = productId, Ammount = 1, FeedbackSid = null }; _dataFixture.GetMocks <Feedback>(out var mockRepository, out var mockCacheManager, out var mockOptions); _dataFixture.GetMocks(out var orderFacadeMock, out var customerFacadeMock, out var productFacadeMock); mockCacheManager .Setup(cache => cache.GetFromCacheAsync <List <Feedback> >(It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(cachedFeedbackList); mockRepository.Setup(repo => repo.GetManagerInstance <ProductFeedbackManager>()).Returns(() => new ProductFeedbackManager()); mockRepository .Setup(repo => repo.GetAsync <OrderToProduct>(otp => otp.Ordersid == orderId && otp.ProductSid == productId, CancellationToken.None)) .ReturnsAsync(orderToProduct); customerFacadeMock .Setup(facade => facade.GetCustommerByIdAsync(It.IsAny <long>(), It.IsAny <CancellationToken>())) .ReturnsAsync(customer); orderFacadeMock .Setup(facade => facade.GetOrderByIdAsync(It.IsAny <long>(), It.IsAny <CancellationToken>())) .ReturnsAsync(order); var productFeedbackFacade = new ProductFeedbackFacade (mockRepository.Object, orderFacadeMock.Object, customerFacadeMock.Object, productFacadeMock.Object, mockCacheManager.Object, mockOptions.Object); // Act & Assert var ex = Assert.Throws <AggregateException>(() => productFeedbackFacade.GetAsync(customerId, orderId, productId, CancellationToken.None).Result); Assert.Equal("One or more errors occurred. (The product has not been rated)", ex.Message); }
public static bool addOrdersProducts(List <OrderToProductDto> orderItems, int orderId) { bool b = false; foreach (var item in orderItems) { OrderToProduct op = OrderToProductDto.ToDal(item, orderId); b = OrderToProductDal.addOrderItem(op); bool c = OrderToProductToToppingBl.addToppingsToProductInOrder(item.toppings, op.OrderToProductId); } return(b); }
public void ExecuteAction(OrderCalculationContext context, IWorkflowProcessorContext processorContext) { var productsInOrderWithoutPromotions = context.SourceOrder.OrderToProducts. Where(p => !p.IdUsedBuyGetPromotion.HasValue).ToList(); var productService = processorContext.Resolve <IProductService>(); var products = productService.GetProducts(productsInOrderWithoutPromotions.Select(p => p.IdProduct).ToList()); foreach (var item in productsInOrderWithoutPromotions) { var product = products.FirstOrDefault(p => p.Id == item.IdProduct); if (product != null) { var orderToProduct = new OrderToProduct(); orderToProduct.IdProduct = item.IdProduct; orderToProduct.QTY = item.QTY; orderToProduct.Price = product.Price; context.OrderToProducts.Add(orderToProduct); } } }
//Set prices based on products from data source and promotion rules private void SetPricesForPromoProducts(OrderCalculationContext context, IEnumerable <Product> products, IEnumerable <Tuple <BuyXGetYPromotion, int> > appliedPromotionInfos) { foreach (var item in appliedPromotionInfos) { foreach (var getItem in item.Item1.GetItems) { var sourceProduct = products.FirstOrDefault(p => p.Id == getItem.IdProduct); if (sourceProduct == null) { continue; } var orderToProduct = new OrderToProduct(); orderToProduct.IdProduct = getItem.IdProduct; orderToProduct.IdUsedBuyGetPromotion = item.Item1.Id; // applied time * qty from getItem orderToProduct.QTY = item.Item2 * getItem.QTY; orderToProduct.Price = Math.Round(sourceProduct.Price * (100 - getItem.PercentDiscount) / 100, 2); context.OrderToProducts.Add(orderToProduct); } } }
private async void btnAddProduct_Click(object sender, EventArgs e) { var Values = dbGridClient.CurrentRow.DataBoundItem as Customer; var customerId = applicationCustomer.Where(x => x.PasportData == txtPasportCustomer.Text).FirstOrDefault(); // MessageBox.Show(OrderId.Id.ToString()); if (customerId != null) { var OrderId = applicationOrdering.Where(x => x.CustomerId == customerId.Id).FirstOrDefault(); if (OrderId != null) { int ID = OrderId.Id; var FindIdOrder = db.Orders.Find(ID); var productID = applicationProduct.Where(x => x.NameProduct == txtNameProduct.Text).FirstOrDefault(); // Massage(FindIdOrder.Id.ToString()); if (OrderId != null) { if (txtCountProduct.Text.Length > 0) { if (txtNameProduct.Text.Length > 0) { var addProductList = new OrderToProduct() { OrderId = FindIdOrder.Id, ProductId = productID.Id, Measure = txtEd.SelectedItem.ToString(), CountProduct = Convert.ToInt32(txtCountProduct.Text), Price = productID.PriceProduct * Convert.ToInt32(txtCountProduct.Text), //подсчет цены }; db.OrdersToProducts.Add(addProductList); db.SaveChanges(); } else { MessageBox.Show("Выберите товар!"); } } else { MessageBox.Show("Поле 'Количество' не заполнено!"); } } applicationCustomer = await Controller.Controller.getCustomerAsync(); applicationOrdering = await Controller.Controller.getOrderAsync(); applicationOrderToProduct = await Controller.Controller.getOrderToProductAsync(); var getProduct = applicationOrdering.Where(x => x.CustomerId == Values.Id).FirstOrDefault(); var getOrderToProduct = applicationOrderToProduct.Where(x => getProduct.Id == x.OrderId).ToList(); if (getOrderToProduct != null) { displayOrderToProducts(getOrderToProduct); } else { Massage("ERROR"); } } else { Massage("Заказ не найден!"); } } else { Massage("Заказ не найден!"); } }
public void UpdateAsync_Test() { // Arrange var now = DateTime.Now; long orderId = 0; long customerId = 0; long productId = 0; var customer = _dataFixture.GetCustomer(); var feedback = _dataFixture.GetFeedback(now, FeedbackType.Product); feedback.Products = new List <Product>(); var order = _dataFixture.GetOrder(now); order.FeedbackSid = feedback.Sid; var cachedFeedbackList = new List <Feedback> { }; var product = _dataFixture.GetProduct(); OrderToProduct orderToProduct = new OrderToProduct { Ordersid = orderId, ProductSid = productId, Ammount = 1, FeedbackSid = 0 }; _dataFixture.GetMocks <Feedback>(out var mockRepository, out var mockCacheManager, out var mockOptions); _dataFixture.GetMocks(out var orderFacadeMock, out var customerFacadeMock, out var productFacadeMock); mockCacheManager .Setup(cache => cache.GetFromCacheAsync <List <Feedback> >(It.IsAny <string>(), It.IsAny <CancellationToken>())) .ReturnsAsync(cachedFeedbackList); mockRepository .Setup(repo => repo.GetManagerInstance <ProductFeedbackManager>()) .Returns(() => new ProductFeedbackManager()); mockRepository .Setup(repo => repo.GetAsync <OrderToProduct>(otp => otp.Ordersid == orderId && otp.ProductSid == productId, CancellationToken.None)) .ReturnsAsync(orderToProduct); mockRepository .Setup(repo => repo.GetAsync <Product>(p => p.Sid == productId, CancellationToken.None)) .ReturnsAsync(product); mockRepository .Setup(repo => repo.GetAsync <Feedback>(feedback => feedback.Sid == orderToProduct.FeedbackSid && feedback.FeedbackType == (int)FeedbackType.Product, CancellationToken.None)) .ReturnsAsync(feedback); customerFacadeMock .Setup(facade => facade.GetCustommerByIdAsync(It.IsAny <long>(), It.IsAny <CancellationToken>())) .ReturnsAsync(customer); orderFacadeMock .Setup(facade => facade.GetOrderByIdAsync(It.IsAny <long>(), It.IsAny <CancellationToken>())) .ReturnsAsync(order); feedback.Comment = "Updated"; feedback.Rating = 5; var productFeedbackFacade = new ProductFeedbackFacade (mockRepository.Object, orderFacadeMock.Object, customerFacadeMock.Object, productFacadeMock.Object, mockCacheManager.Object, mockOptions.Object); // Act var result = productFeedbackFacade.UpdateAsync(customerId, orderId, productId, feedback, CancellationToken.None).Result; // Assert Assert.NotNull(result); Assert.Equal("Updated", result.Comment); Assert.Equal(5, result.Rating); }