Exemple #1
0
        public async Task <ShipEstimateResponseWithXp> EstimateShippingCostsAsync(OrderCalculatePayloadWithXp payload)
        {
            var shipments         = ContainerizeLineItems(payload);
            var packages          = shipments.Select(shipment => shipment.ShipPackage).ToList();
            var shipMethodOptions = await _shippingCalculator.CalculateShippingRatesAsync(packages);

            var response = new ShipEstimateResponseWithXp()
            {
                ShipEstimates = shipments.Select((shipment, index) =>
                {
                    return(new ShipEstimateWithXp()
                    {
                        ShipMethods = shipMethodOptions[index].Select(sm => new ShipMethodWithXp()
                        {
                            ID = sm.ID,
                            Name = sm.Name,
                            Cost = sm.Cost,
                            EstimatedTransitDays = sm.EstimatedTransitDays,
                            xp = new ShipMethodXp()
                            {
                                Carrier = sm.Carrier
                            }
                        }).ToList(),
                        ShipEstimateItems = shipment.ShipEstimateItems,
                        xp = new ShipEstimateXp
                        {
                            ShipPackage = packages[index]
                        }
                    });
                }).ToList()
            };

            return(response);
        }
Exemple #2
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
                }
            });
        }
Exemple #3
0
        private OrderSummaryForTax MapOrderToTaxSummary(OrderCalculatePayloadWithXp payload)
        {
            var taxDetails = new OrderSummaryForTax()
            {
                OrderID           = payload.OrderWorksheet.Order.ID,
                CustomerCode      = payload.OrderWorksheet.Order.FromUserID,
                PromotionDiscount = 0,
                LineItems         = payload.OrderWorksheet.LineItems.Select(li =>
                {
                    return(new LineItemSummaryForTax()
                    {
                        LineItemID = li.ID,
                        ProductID = li.ProductID,
                        ProductName = li.Product.Name,
                        Quantity = li.Quantity,
                        UnitPrice = li.UnitPrice ?? 0,
                        PromotionDiscount = li.PromotionDiscount,
                        LineTotal = li.LineTotal,
                        TaxCode = li.Product.xp.TaxCode,
                        ShipFrom = li.ShipFromAddress,
                        ShipTo = li.ShippingAddress
                    });
                }).ToList(),
                ShippingCosts = payload.OrderWorksheet.ShipEstimateResponse.ShipEstimates.Select(se =>
                {
                    var selectedMethod = se.GetSelectedShipMethod();
                    return(new ShipEstimateSummaryForTax()
                    {
                        ShipEstimateID = se.ID,
                        Description = selectedMethod.Name,
                        Cost = selectedMethod.Cost,
                    });
                }).ToList()
            };

            return(taxDetails);
        }
Exemple #4
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);
        }
Exemple #5
0
 private List <ShippingPackageWithLineItems> ContainerizeLineItems(OrderCalculatePayloadWithXp payload)
 {
     return(null);
 }
Exemple #6
0
 [OrderCloudWebhookAuth]          // Security feature to verifiy request came from Ordercloud.
 public async Task <OrderSubmitResponseWithXp> PostSubmitProcessingAsync([FromBody] OrderCalculatePayloadWithXp payload) =>
 await _checkoutCommand.ProcessOrderPostSubmitAsync(payload);
Exemple #7
0
 [OrderCloudWebhookAuth]             // Security feature to verifiy request came from Ordercloud.
 public async Task <OrderCalculateResponseWithXp> RecalculatePricesAndTaxAsync([FromBody] OrderCalculatePayloadWithXp payload) =>
 await _checkoutCommand.RecalculatePricesAndTaxAsync(payload);
Exemple #8
0
 [OrderCloudWebhookAuth]            // Security feature to verifiy request came from Ordercloud.
 public async Task <ShipEstimateResponseWithXp> EstimateShippingCostsAsync([FromBody] OrderCalculatePayloadWithXp payload) =>
 await _checkoutCommand.EstimateShippingCostsAsync(payload);