public async Task <JmOptionResponse> GetOptionResponse(JmPriceRequest priceRequest) { _validator.Validate(priceRequest); var options = await _optionsRepository.GetAsync(priceRequest.CreateOptionRequest()); return(new JmOptionResponse(options.Select(o => o.CreateDomain()))); }
private async Task <JmPriceResponse> CalculateOptions(JmPriceResponse priceResponse, JmPriceRequest priceRequest) { var options = await _optionsRepository.GetAsync(priceRequest.CreateOptionRequest()); if (options == null) { throw new NullReferenceException(nameof(options)); } foreach (var option in options.Where(op => op == priceRequest.GuidingRailBracket || op == priceRequest.HeadRailBraket || op == priceRequest.OperationControl || op == priceRequest.LeftGuidingRail || op == priceRequest.RightGuidingRail)) { var optionQuantity = 1; if (option.Type == typeof(JmHeadrailBracketTypes).FullName) { var quantity = (priceRequest.Width - 400) / 800; optionQuantity = quantity < 2 ? 2 : quantity; } else if (option.Type == typeof(JmWireBracketTypes).FullName) { optionQuantity = 2; } else if (option.Type == typeof(JmGuidingRailTypes).FullName) { var quantity = (priceRequest.Height - 400) / 800; optionQuantity = quantity < 1 ? 2 : quantity * 2; } priceResponse.PricePerUnit += option.Price * optionQuantity; } priceResponse.TotalPrice = priceRequest.Quantity * priceResponse.PricePerUnit; return(priceResponse); }