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 } }); }
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 } }); }