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
                    }
                });
            }
        }
Exemplo n.º 2
0
        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);
        }