Ejemplo n.º 1
0
        public async Task <OrderSubmitResponseWithXp> ProcessOrderPostSubmitAsync(OrderCalculatePayloadWithXp payload)
        {
            var processes = new PostSubmitProcesses();

            // Will catch any errors so the later processes are still attempted. Error results are stored.
            await processes.Run("Send Order Confirmation Email", Task.FromResult("..."));

            await processes.Run("Create Final Tax Transaction", _taxCalculator.CommitTransactionAsync(MapOrderToTaxSummary(payload)));

            await processes.Run("Forward Order to ERP system", Task.FromResult("..."));


            var anyErrors    = processes.AnyErrors;
            var partialOrder = new PartialOrder()
            {
                xp = new { NeedsAttention = anyErrors }
            };
            await _oc.Orders.PatchAsync(OrderDirection.All, payload.OrderWorksheet.Order.ID, partialOrder);

            return(new OrderSubmitResponseWithXp()
            {
                HttpStatusCode = anyErrors ? 500 : 200,
                xp = new OrderSubmitResponseXp()
                {
                    ProcessResults = processes.Results
                }
            });
        }
Ejemplo n.º 2
0
        private async Task HandleTaxTransactionCreationAsync(OrderWorksheet orderWorksheet)
        {
            var promotions = await _oc.Orders.ListAllPromotionsAsync(OrderDirection.All, orderWorksheet.Order.ID);

            var taxCalculation = await _taxCalculator.CommitTransactionAsync(orderWorksheet, promotions);

            await _oc.Orders.PatchAsync <HSOrder>(OrderDirection.Incoming, orderWorksheet.Order.ID, new PartialOrder()
            {
                TaxCost = taxCalculation.TotalTax,  // Set this again just to make sure we have the most up to date info
                xp      = new { ExternalTaxTransactionID = taxCalculation.ExternalTransactionID }
            });
        }