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