コード例 #1
0
        private Order(
            List <OrderProductData> orderProductsData,
            List <ProductPriceData> productPrices,
            string currency,
            List <ConversionRate> conversionRates
            )
        {
            _orderDate     = SystemClock.Now;
            Id             = new OrderId(Guid.NewGuid());
            _orderProducts = new List <OrderProduct>();

            foreach (OrderProductData orderProductData in orderProductsData)
            {
                ProductPriceData productPrice = productPrices.Single(x => x.ProductId == orderProductData.ProductId &&
                                                                     x.Price.Currency == currency);
                OrderProduct orderProduct = OrderProduct.CreateForProduct(
                    productPrice,
                    orderProductData.Quantity,
                    currency,
                    conversionRates);

                _orderProducts.Add(orderProduct);
            }

            CalculateOrderValue();
            _status = OrderStatus.Placed;
        }
コード例 #2
0
        private OrderProduct(
            ProductPriceData productPrice,
            int quantity,
            string currency,
            List <ConversionRate> conversionRates)
        {
            this.ProductId = productPrice.ProductId;
            this.Quantity  = quantity;

            this.CalculateValue(productPrice, currency, conversionRates);
        }
コード例 #3
0
 private void CalculateValue(ProductPriceData productPrice, string currency, List <ConversionRate> conversionRates)
 {
     this.Value = this.Quantity * productPrice.Price;
     if (currency == "EUR")
     {
         this.ValueInEUR = this.Quantity * productPrice.Price;
     }
     else
     {
         var conversionRate = conversionRates.Single(x => x.SourceCurrency == currency && x.TargetCurrency == "EUR");
         this.ValueInEUR = conversionRate.Convert(this.Value);
     }
 }
コード例 #4
0
        internal void Change(
            List <ProductPriceData> allProductPrices,
            List <OrderProductData> orderProductsData,
            List <ConversionRate> conversionRates,
            string currency)
        {
            foreach (OrderProductData orderProductData in orderProductsData)
            {
                ProductPriceData product = allProductPrices.Single(x => x.ProductId == orderProductData.ProductId &&
                                                                   x.Price.Currency == currency);

                OrderProduct existingProductOrder =
                    _orderProducts.SingleOrDefault(x => x.ProductId == orderProductData.ProductId);
                if (existingProductOrder != null)
                {
                    OrderProduct existingOrderProduct =
                        _orderProducts.Single(x => x.ProductId == existingProductOrder.ProductId);

                    existingOrderProduct.ChangeQuantity(product, orderProductData.Quantity, conversionRates);
                }
                else
                {
                    OrderProduct orderProduct = OrderProduct.CreateForProduct(product, orderProductData.Quantity,
                                                                              currency,
                                                                              conversionRates);
                    _orderProducts.Add(orderProduct);
                }
            }

            List <OrderProduct> orderProductsToCheck = _orderProducts.ToList();

            foreach (OrderProduct existingProduct in orderProductsToCheck)
            {
                OrderProductData product =
                    orderProductsData.SingleOrDefault(x => x.ProductId == existingProduct.ProductId);
                if (product == null)
                {
                    _orderProducts.Remove(existingProduct);
                }
            }

            CalculateOrderValue();

            _orderChangeDate = DateTime.UtcNow;
        }
コード例 #5
0
        public async Task <ProductPrice> GetProductPrice(ProductPriceRequest productPriceRequest)
        {
            RestClient  client  = WebServiceContext.GetUrl("/api/v2/product/price");
            RestRequest request = WebServiceContext.GetRequestBody("post");

            request.AddParameter("application/json", JsonConvert.SerializeObject(productPriceRequest), ParameterType.RequestBody);
            IRestResponse response = await client.ExecuteTaskAsync(request);

            ProductPrice     productPriceResponse = new ProductPrice();
            ProductPriceData resultdata           = new ProductPriceData();
            ErrorMessage     errorMessage         = new ErrorMessage();

            if (response.ErrorMessage != null)
            {
                errorMessage.message        = response.ErrorMessage;
                errorMessage.code           = 500;
                resultdata.error            = errorMessage;
                productPriceResponse.result = resultdata;
                return(productPriceResponse);
            }
            productPriceResponse = JsonConvert.DeserializeObject <ProductPrice>(response.Content);
            return(productPriceResponse);
        }
コード例 #6
0
        internal void ChangeQuantity(ProductPriceData productPrice, int quantity, List <ConversionRate> conversionRates)
        {
            this.Quantity = quantity;

            this.CalculateValue(productPrice, this.Value.Currency, conversionRates);
        }
コード例 #7
0
 internal static OrderProduct CreateForProduct(
     ProductPriceData productPrice, int quantity, string currency,
     List <ConversionRate> conversionRates)
 {
     return(new OrderProduct(productPrice, quantity, currency, conversionRates));
 }