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; }
private OrderProduct( ProductPriceData productPrice, int quantity, string currency, List <ConversionRate> conversionRates) { this.ProductId = productPrice.ProductId; this.Quantity = quantity; this.CalculateValue(productPrice, currency, conversionRates); }
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); } }
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; }
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); }
internal void ChangeQuantity(ProductPriceData productPrice, int quantity, List <ConversionRate> conversionRates) { this.Quantity = quantity; this.CalculateValue(productPrice, this.Value.Currency, conversionRates); }
internal static OrderProduct CreateForProduct( ProductPriceData productPrice, int quantity, string currency, List <ConversionRate> conversionRates) { return(new OrderProduct(productPrice, quantity, currency, conversionRates)); }