Example #1
0
        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);
        }
Example #2
0
 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);
        }
Example #4
0
        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);
                }
            }
        }
Example #6
0
        //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);
                }
            }
        }
Example #7
0
        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);
        }