Пример #1
0
        public async Task <data.Orders.CustomerOrder> CreateOrderAsync()
        {
            data.Orders.CustomerOrder order = null;

            var cart = await _cartClient.GetCartAsync(SiteContext.Current.StoreId, SiteContext.Current.CustomerId);

            if (cart != null)
            {
                order = await _orderClient.CreateOrderAsync(cart.Id);
                await DeleteCartAsync(cart.Id);
            }

            return(order);
        }
Пример #2
0
        public static Order ToViewModel(this DataContracts.Orders.CustomerOrder order)
        {
            var orderViewModel = new Order();

            orderViewModel.Id = order.Id;

            foreach (var lineItem in order.Items)
            {
                orderViewModel.LineItems.Add(lineItem.ToViewModel());
            }

            orderViewModel.Number = order.Number;

            if (order.InPayments != null)
            {
                var firstPayment = order.InPayments.FirstOrDefault();
                if (firstPayment != null)
                {
                    orderViewModel.PaymentMethod = new PaymentMethod {
                        Keyword = firstPayment.GatewayCode
                    };
                }

                orderViewModel.PaymentId = firstPayment.Id;
            }

            if (order.Shipments != null)
            {
                var firstShipment = order.Shipments.FirstOrDefault();
                if (firstShipment != null)
                {
                    orderViewModel.ShippingMethod = new ShippingMethod {
                        Keyword = firstShipment.ShipmentMethodCode, Price = firstShipment.Sum
                    };
                }
            }

            return(orderViewModel);
        }
        public static CustomerOrder AsWebModel(this Data.Orders.CustomerOrder customerOrder)
        {
            var ret = new CustomerOrder {
                Id = customerOrder.Id
            };

            if (customerOrder.Addresses != null)
            {
                var billingAddress = customerOrder.Addresses.FirstOrDefault(a =>
                                                                            a.AddressType == Data.Orders.AddressType.Billing);

                if (billingAddress != null)
                {
                    ret.BillingAddress = billingAddress.AsWebModel();
                }

                var shippingAddress = customerOrder.Addresses.FirstOrDefault(a =>
                                                                             a.AddressType == Data.Orders.AddressType.Shipping);

                if (shippingAddress != null)
                {
                    ret.ShippingAddress = shippingAddress.AsWebModel();
                }

                // Temporary ordinal case, when billing address == shipping address
                if (shippingAddress != null && billingAddress == null)
                {
                    ret.BillingAddress = shippingAddress.AsWebModel();
                }
            }

            ret.Cancelled         = customerOrder.IsCancelled;
            ret.CancelledAt       = customerOrder.CancelledDate;
            ret.CancelReason      = customerOrder.CancelReason;
            ret.CancelReasonLabel = customerOrder.CancelReason;

            ret.CreatedAt   = customerOrder.CreatedDate;
            ret.CustomerUrl = VirtualPathUtility.ToAbsolute(string.Format("~/account/order/{0}", customerOrder.Id));

            if (customerOrder.Discount != null)
            {
                ret.Discounts.Add(customerOrder.Discount.AsWebModel());
            }

            var inPayment = customerOrder.InPayments != null?
                            customerOrder.InPayments.OrderByDescending(p => p.CreatedDate).FirstOrDefault() : null; // TEST

            var orderShipment = customerOrder.Shipments != null?
                                customerOrder.Shipments.FirstOrDefault() : null;

            var addressWithEmail = customerOrder.Addresses != null?
                                   customerOrder.Addresses.FirstOrDefault(a => !string.IsNullOrEmpty(a.Email)) : null;

            ret.Email = addressWithEmail != null ? addressWithEmail.Email : null;

            if (inPayment != null)
            {
                if (string.IsNullOrEmpty(inPayment.Status))
                {
                    ret.FinancialStatus      = inPayment.IsApproved ? "Paid" : "Pending";
                    ret.FinancialStatusLabel = inPayment.IsApproved ? "Paid" : "Pending";
                }
                else
                {
                    ret.FinancialStatus      = inPayment.Status;
                    ret.FinancialStatusLabel = inPayment.Status;
                }

                if (inPayment.TaxIncluded)
                {
                    if (ret.TaxLines == null)
                    {
                        ret.TaxLines = new List <TaxLine>();
                    }
                    ret.TaxLines.Add(new TaxLine
                    {
                        Price = inPayment.Tax,
                        Title = "Payments tax"
                    });
                }
            }

            if (orderShipment != null)
            {
                if (string.IsNullOrEmpty(orderShipment.Status))
                {
                    ret.FulfillmentStatus      = orderShipment.IsApproved ? "Sent" : "Not sent";
                    ret.FulfillmentStatusLabel = orderShipment.IsApproved ? "Sent" : "Not sent";
                }
                else
                {
                    ret.FulfillmentStatus      = inPayment.Status;
                    ret.FulfillmentStatusLabel = inPayment.Status;
                }

                if (orderShipment.TaxIncluded)
                {
                    if (ret.TaxLines == null)
                    {
                        ret.TaxLines = new List <TaxLine>();
                    }
                    ret.TaxLines.Add(new TaxLine
                    {
                        Price = orderShipment.Tax,
                        Title = "Shipping tax"
                    });
                }
            }

            if (customerOrder.Items != null)
            {
                foreach (var lineItem in customerOrder.Items)
                {
                    ret.LineItems.Add(lineItem.AsWebModel());
                }

                var taxableLineItems = customerOrder.Items;//.Where(i => i.TaxIncluded);
                if (taxableLineItems.Count() > 0)
                {
                    if (ret.TaxLines == null)
                    {
                        ret.TaxLines = new List <TaxLine>();
                    }

                    ret.TaxLines.Add(new TaxLine
                    {
                        Price = taxableLineItems.Sum(li => li.Tax),
                        Rate  = taxableLineItems.Where(i => i.TaxDetails != null).Sum(i => i.TaxDetails.Sum(td => td.Rate)),
                        Title = "Line items"
                    });
                }
            }

            ret.Name        = customerOrder.Number;
            ret.OrderNumber = 0; // TODO

            if (customerOrder.Shipments != null)
            {
                foreach (var shipment in customerOrder.Shipments)
                {
                    ret.ShippingMethods.Add(shipment.AsWebModel());
                }

                var taxableShipments = customerOrder.Shipments;//.Where(s => s.TaxIncluded);
                if (taxableShipments.Count() > 0)
                {
                    if (ret.TaxLines == null)
                    {
                        ret.TaxLines = new List <TaxLine>();
                    }

                    ret.TaxLines.Add(new TaxLine
                    {
                        Price = taxableShipments.Sum(s => s.Tax),
                        Rate  = taxableShipments.Where(s => s.TaxDetails != null).Sum(i => i.TaxDetails.Sum(td => td.Rate)),
                        Title = "Shipping"
                    });
                }
            }

            return(ret);
        }
Пример #4
0
        public static Checkout AsCheckoutWebModel(
            this Data.ShoppingCart cart, VirtoCommerce.ApiClient.DataContracts.Orders.CustomerOrder order = null)
        {
            var checkoutModel = new Checkout();

            checkoutModel.TaxLines = new List <TaxLine>();

            if (cart.Addresses != null)
            {
                var billingAddress = cart.Addresses.FirstOrDefault(a => a.Type == AddressType.Billing);
                if (billingAddress != null)
                {
                    checkoutModel.BillingAddress = billingAddress.AsCartWebModel();
                    checkoutModel.Email          = billingAddress.Email;
                }

                var shippingAddress = cart.Addresses.FirstOrDefault(a => a.Type == AddressType.Shipping);
                if (shippingAddress != null)
                {
                    checkoutModel.ShippingAddress = shippingAddress.AsCartWebModel();
                    checkoutModel.Email           = shippingAddress.Email;
                }
            }

            checkoutModel.BuyerAcceptsMarketing = true;
            checkoutModel.Currency   = cart.Currency;
            checkoutModel.CustomerId = cart.CustomerId;

            if (cart.Discounts != null)
            {
                checkoutModel.Discounts = new List <VirtoCommerce.Web.Models.Discount>();

                foreach (var discount in cart.Discounts)
                {
                    checkoutModel.Discounts.Add(new VirtoCommerce.Web.Models.Discount
                    {
                        Amount = (decimal)discount.DiscountAmount,
                        Code   = discount.PromotionId,
                        Id     = discount.Id
                    });
                }
            }

            checkoutModel.Email = "";

            // TODO: Gift cards

            checkoutModel.Id = cart.Id;

            if (cart.Items != null)
            {
                checkoutModel.LineItems = new List <LineItem>();

                foreach (var item in cart.Items)
                {
                    checkoutModel.LineItems.Add(item.AsWebModel());
                }

                checkoutModel.TaxLines.Add(new TaxLine
                {
                    Title = "Line items taxes",
                    Price = cart.Items.Sum(i => i.TaxTotal)
                });
            }

            checkoutModel.Name = cart.Name;
            //checkoutModel.Note = cart.Note;

            if (order != null)
            {
                checkoutModel.Order = order.AsWebModel();
            }

            if (cart.Payments != null)
            {
                var payment = cart.Payments.FirstOrDefault(); // Remake for multipayment

                if (payment != null)
                {
                    checkoutModel.PaymentMethod = new Models.PaymentMethod
                    {
                        Code = payment.PaymentGatewayCode
                    };
                }

                checkoutModel.TaxLines.Add(new TaxLine
                {
                    Title = "Payments taxes",
                    Price = 0
                });
            }

            if (cart.Shipments != null)
            {
                var shipment = cart.Shipments.FirstOrDefault(); // Remake for multishipment

                if (shipment != null)
                {
                    checkoutModel.ShippingMethod = new ShippingMethod
                    {
                        Handle = shipment.ShipmentMethodCode,
                        Price  = shipment.ShippingPrice,
                        Title  = shipment.ShipmentMethodCode
                    };
                }

                checkoutModel.TaxLines.Add(new TaxLine
                {
                    Title = "Shipping taxes",
                    Price = cart.Shipments.Sum(s => s.TaxTotal)
                });
            }

            // Transactions

            return(checkoutModel);
        }
Пример #5
0
        public static Order ToViewModel(this DataContracts.Orders.CustomerOrder order)
        {
            var orderModel = new Order();

            if (order.Addresses != null)
            {
                var billingAddress = order.Addresses.FirstOrDefault(a => a.AddressType == DataContracts.Orders.AddressType.Billing);
                if (billingAddress != null)
                {
                    orderModel.BillingAddress = billingAddress.ToViewModel();
                }

                var shippingAddress = order.Addresses.FirstOrDefault(a => a.AddressType == DataContracts.Orders.AddressType.Shipping);
                if (shippingAddress != null)
                {
                    orderModel.ShippingAddress = shippingAddress.ToViewModel();
                }
            }

            orderModel.Id = order.Id;

            foreach (var lineItem in order.Items)
            {
                orderModel.LineItems.Add(lineItem.ToViewModel());
            }

            orderModel.OrderNumber = order.Number;

            if (order.InPayments != null)
            {
                var firstPayment = order.InPayments.FirstOrDefault();
                if (firstPayment != null)
                {
                    orderModel.FinancialStatus = firstPayment.Status;
                    if (string.IsNullOrEmpty(firstPayment.Status))
                    {
                        if (firstPayment.IsCancelled)
                        {
                            orderModel.FinancialStatus = "Cancelled";
                        }
                        else
                        {
                            orderModel.FinancialStatus = firstPayment.IsApproved ? "Paid" : "Pending";
                        }
                    }

                    orderModel.PaymentId       = firstPayment.Id;
                    orderModel.PaymentMethodId = firstPayment.GatewayCode;
                }
            }

            if (order.Shipments != null)
            {
                var firstShipment = order.Shipments.FirstOrDefault();
                if (firstShipment != null)
                {
                    orderModel.FulfillmentStatus = firstShipment.Status;
                    if (string.IsNullOrEmpty(firstShipment.Status))
                    {
                        if (firstShipment.IsCancelled)
                        {
                            orderModel.FulfillmentStatus = "Cancelled";
                        }
                        else
                        {
                            orderModel.FulfillmentStatus = firstShipment.IsApproved ? "Sent" : "Not sent";
                        }
                    }

                    orderModel.ShippingMethodId = firstShipment.ShipmentMethodCode;
                }

                orderModel.ShippingPrice = order.Shipments.Sum(s => s.Sum);
            }

            return(orderModel);
        }
Пример #6
0
        public static CustomerOrder AsWebModel(this Data.Orders.CustomerOrder customerOrder)
        {
            var ret = new CustomerOrder {
                Id = customerOrder.Id
            };

            if (customerOrder.Addresses != null)
            {
                var billingAddress = customerOrder.Addresses.FirstOrDefault(a =>
                                                                            a.AddressType == Data.Orders.AddressType.Billing);

                if (billingAddress != null)
                {
                    ret.BillingAddress = billingAddress.AsWebModel();
                }

                var shippingAddress = customerOrder.Addresses.FirstOrDefault(a =>
                                                                             a.AddressType == Data.Orders.AddressType.Shipping);

                if (shippingAddress != null)
                {
                    ret.ShippingAddress = shippingAddress.AsWebModel();
                }

                // Temporary ordinal case, when billing address == shipping address
                if (shippingAddress != null && billingAddress == null)
                {
                    ret.BillingAddress = shippingAddress.AsWebModel();
                }
            }

            ret.Cancelled         = customerOrder.IsCancelled;
            ret.CancelledAt       = customerOrder.CancelledDate;
            ret.CancelReason      = customerOrder.CancelReason;
            ret.CancelReasonLabel = customerOrder.CancelReason;

            ret.CreatedAt   = customerOrder.CreatedDate;
            ret.CustomerUrl = new Uri(string.Format("account/order/{0}", customerOrder.Id), UriKind.Relative).ToString();

            if (customerOrder.Discount != null)
            {
                ret.Discounts.Add(customerOrder.Discount.AsWebModel());
            }

            var inPayment = customerOrder.InPayments != null?
                            customerOrder.InPayments.OrderByDescending(p => p.CreatedDate).FirstOrDefault() : null; // TEST

            var orderShipment = customerOrder.Shipments != null?
                                customerOrder.Shipments.FirstOrDefault() : null;

            var addressWithEmail = customerOrder.Addresses != null?
                                   customerOrder.Addresses.FirstOrDefault(a => !string.IsNullOrEmpty(a.Email)) : null;

            ret.Email = addressWithEmail != null ? addressWithEmail.Email : null;

            if (inPayment != null)
            {
                if (string.IsNullOrEmpty(inPayment.Status))
                {
                    ret.FinancialStatus      = inPayment.IsApproved ? "Paid" : "Pending";
                    ret.FinancialStatusLabel = inPayment.IsApproved ? "Paid" : "Pending";
                }
                else
                {
                    ret.FinancialStatus      = inPayment.Status;
                    ret.FinancialStatusLabel = inPayment.Status;
                }
            }

            if (orderShipment != null)
            {
                if (string.IsNullOrEmpty(orderShipment.Status))
                {
                    ret.FulfillmentStatus      = orderShipment.IsApproved ? "Sent" : "Not sent";
                    ret.FulfillmentStatusLabel = orderShipment.IsApproved ? "Sent" : "Not sent";
                }
                else
                {
                    ret.FulfillmentStatus      = inPayment.Status;
                    ret.FulfillmentStatusLabel = inPayment.Status;
                }
            }

            if (customerOrder.Items != null)
            {
                foreach (var lineItem in customerOrder.Items)
                {
                    ret.LineItems.Add(lineItem.AsWebModel());
                }
            }

            ret.Name        = customerOrder.Number;
            ret.OrderNumber = 0; // TODO

            if (customerOrder.Shipments != null)
            {
                foreach (var shipment in customerOrder.Shipments)
                {
                    ret.ShippingMethods.Add(shipment.AsWebModel());
                    ret.ShippingPrice += shipment.Sum;
                }
            }

            ret.SubtotalPrice = ret.LineItems.Sum(li => li.Quantity * li.Price);

            if (customerOrder.TaxIncluded)
            {
                ret.TaxLines.Add(new TaxLine {
                    Price = customerOrder.Tax
                });
                ret.TaxPrice = ret.TaxLines.Sum(tl => tl.Price);
            }

            ret.TotalPrice = customerOrder.Sum;

            return(ret);
        }