public async Task <HSOrderCalculateResponse> CalculateOrder(HSOrderCalculatePayload orderCalculatePayload) { if (orderCalculatePayload.OrderWorksheet.Order.xp != null && orderCalculatePayload.OrderWorksheet.Order.xp.OrderType == OrderType.Quote) { // quote orders do not have tax cost associated with them return(new HSOrderCalculateResponse()); } else { var promotions = await _oc.Orders.ListAllPromotionsAsync(OrderDirection.All, orderCalculatePayload.OrderWorksheet.Order.ID); var promoCalculationTask = _discountDistribution.SetLineItemProportionalDiscount(orderCalculatePayload.OrderWorksheet, promotions); var taxCalculationTask = _taxCalculator.CalculateEstimateAsync(orderCalculatePayload.OrderWorksheet.Reserialize <OrderWorksheet>(), promotions); var taxCalculation = await taxCalculationTask; await promoCalculationTask; return(new HSOrderCalculateResponse { TaxTotal = taxCalculation.TotalTax, xp = new OrderCalculateResponseXp() { TaxCalculation = taxCalculation } }); } }
public async Task <OrderCalculateResponseWithXp> RecalculatePricesAndTaxAsync(OrderCalculatePayloadWithXp payload) { var summary = MapOrderToTaxSummary(payload); var tax = await _taxCalculator.CalculateEstimateAsync(summary); var response = new OrderCalculateResponseWithXp() { TaxTotal = tax.TotalTax, xp = new OrderCalculateResponseXp { TaxDetails = tax } }; return(response); }