//GET protected override DriverResult Editor(OrderPart part, dynamic shapeHelper) { if (!_orchardServices.Authorizer.Authorize(OrderPermissions.ManageOrders, null, T("Cannot manage orders"))) { return(null); } var contentManager = part.ContentItem.ContentManager; var productContents = contentManager .GetMany <IContent>( part.Items.Select(p => p.ProductId).Distinct(), VersionOptions.Latest, QueryHints.Empty); var products = productContents .ToDictionary(p => p.Id, p => p); var linkToTransaction = _checkoutServices .Select(s => s.GetChargeAdminUrl(part.Charge.TransactionId)) .FirstOrDefault(u => u != null); var orderItems = part.Items.ToList(); // Add attribute extension provider instances to order item attributes foreach (var item in orderItems) { if (item.Attributes != null) { foreach (var attr in item.Attributes) { attr.Value.ExtensionProviderInstance = _extensionProviders.SingleOrDefault(e => e.Name == attr.Value.ExtensionProvider); } } } var model = new OrderEditorViewModel { Order = part, OrderItems = orderItems, Products = products, BillingAddressText = _addressFormatter.Format(part.BillingAddress), ShippingAddressText = _addressFormatter.Format(part.ShippingAddress), OrderStates = OrderPart.States, StatusLabels = _orderService.StatusLabels, EventCategories = OrderPart.EventCategories, EventCategoryLabels = _orderService.EventCategoryLabels, LinkToTransaction = linkToTransaction, UserName = part.User == null ? "" : part.User.UserName, UserNameNeeded = productContents.Any(p => p.As <ProductPart>() == null ? false : p.As <ProductPart>().AuthenticationRequired), CurrencyCode = string.IsNullOrWhiteSpace(part.CurrencyCode) ? _currencyProvider.CurrencyCode : part.CurrencyCode }; return(ContentShape("Parts_Order_Edit", () => shapeHelper.EditorTemplate( TemplateName: "Parts/Order", Model: model, Prefix: Prefix))); }
public ActionResult Confirmation() { if (!TempData.ContainsKey("OrderId")) { return(HttpNotFound()); } var orderId = TempData["OrderId"]; var order = _contentManager.Get <OrderPart>((int)orderId); var billingAddress = _addressFormatter.Format(order.BillingAddress); var shippingAddress = _addressFormatter.Format(order.ShippingAddress); var items = order.Items.ToList(); var products = _contentManager .GetMany <IContent>( items.Select(p => p.ProductId).Distinct(), VersionOptions.Latest, QueryHints.Empty) .ToDictionary(p => p.Id, p => p); var shape = _shapeFactory.Order_Confirmation( OrderId: order.Id, Status: _orderService.StatusLabels[order.Status], CheckoutItems: items, Products: products, SubTotal: order.SubTotal, Taxes: order.Taxes, Total: order.Total, ShippingOption: order.ShippingOption, BillingAddress: billingAddress, ShippingAddress: shippingAddress, TrackingUrl: order.TrackingUrl, CustomerEmail: order.CustomerEmail, CustomerPhone: order.CustomerPhone, ChargeText: order.Charge.ChargeText, SpecialInstructions: order.SpecialInstructions, PurchaseOrder: order.PurchaseOrder, Password: order.Password, CurrencyCode: string.IsNullOrWhiteSpace(order.CurrencyCode) ? _currencyProvider.CurrencyCode : order.CurrencyCode); foreach (var handler in _cartLifeCycleEventHandlers) { handler.Finalized(); } _shoppingCart.Clear(); return(new ShapeResult(this, shape)); }
/// <summary> /// InvokeAsync() method can take any number of parameters and is passed using anonymous object when invoking the View Component /// </summary> /// <param name="employeeId"></param> /// <returns></returns> public async Task <IViewComponentResult> InvokeAsync(int employeeId) { var model = new AddressViewModel { EmployeeId = employeeId, Line1 = "Shanghai", Line2 = "PuDong", Line3 = "BiBo Road" }; model.FormattedValue = formatter.Format(model.Line1, model.Line2, model.Line3); return(View(model)); }
public async Task <IViewComponentResult> InvokeAsync(int employeeId) { var model = new AddressViewModel { EmployeeId = employeeId, Line1 = "Secret Location", Line2 = "London", Line3 = "UK" }; model.FormattedValue = _addressFormatter.Format(model.Line1, model.Line2, model.Line3); return(View("Default", model)); }
public void Evaluate(EvaluateContext context) { context.For <OrderPart>("Order") .Token("Id", o => o.Id) .Token("EditUrl", o => _orderService.GetEditUrl(o)) .Chain("EditUrl", "Url", o => _orderService.GetEditUrl(o)) .Token("DisplayUrl", o => _orderService.GetDisplayUrl(o)) .Chain("DisplayUrl", "Url", o => _orderService.GetDisplayUrl(o)) .Token("Items", o => string.Join(T(", ").Text, o.Items.Select(i => i.ToString()))) .Chain("Items", "CheckoutItems", o => o.Items) .Token("Status", o => o.Status) .Token("ShippingAddress", o => _addressFormatter.Format(o.ShippingAddress)) .Chain("ShippingAddress", "Address", o => o.ShippingAddress) .Token("BillingAddress", o => _addressFormatter.Format(o.BillingAddress)) .Chain("BillingAddress", "Address", o => o.BillingAddress) .Token("CustomerEmail", o => o.CustomerEmail) .Chain("CustomerEmail", "Email", o => o.CustomerEmail) .Token("CustomerPhone", o => o.CustomerPhone) .Chain("CustomerPhone", "Tel", o => o.CustomerPhone) .Token("SpecialInstructions", o => o.SpecialInstructions) .Chain("SpecialInstructions", "Text", o => o.SpecialInstructions) .Token("TrackingUrl", o => o.TrackingUrl) .Chain("TrackingUrl", "Url", o => o.TrackingUrl) .Token("Password", o => o.Password) .Chain("Password", "Text", o => o.Password) .Token("Shipping", o => o.ShippingOption.ToString()) .Chain("Shipping", "ShippingOption", o => o.ShippingOption) .Token("Subtotal", o => o.SubTotal.ToString("C")) .Token("Taxes", o => o.Taxes.Amount.ToString("C")) .Chain("Taxes", "TaxAmount", o => o.Taxes) .Token("Total", o => o.Total.ToString("C")) .Token("AmountPaid", o => o.AmountPaid.ToString("C")) .Token("Charge", o => o.Charge.ToString()) .Chain("Charge", "Charge", o => o.Charge) .Token("User", o => o.User == null ? "" : o.User.UserName) .Chain("User", "User", o => o.User) .Token("PurchaseOrder", o => o.PurchaseOrder) .Chain("PurchaseOrder", "Text", o => o.PurchaseOrder); context.For <IEnumerable <CheckoutItem> >("CheckoutItems") .Token(s => s.StartsWith("Format:", StringComparison.OrdinalIgnoreCase) ? s.Substring("Format:".Length) : null, (s, q) => { var separator = ""; var colonIndex = s.IndexOf(':'); if (colonIndex != -1 && s.Length > colonIndex + 1) { separator = s.Substring(0, colonIndex); s = s.Substring(colonIndex + 1); } var format = s .Replace("$quantity", "{0}") .Replace("$product", "{1}") .Replace("$price", "{2}") .Replace("$lineadjustment", "{3}") .Replace("$linetotal", "{4}"); // Html decoding so we can use html in format string. // For example: {Order.Items.Format:<tr><td>$quantity</td><td>$product</td></tr>} return(WebUtility.HtmlDecode(String.Join(separator, q.Select(qp => String.Format(format, qp.Quantity, qp.Title, qp.Price.ToString("C"), qp.LinePriceAdjustment.ToString("C"), (qp.Quantity * qp.Price + qp.LinePriceAdjustment).ToString("C")))))); }); context.For <Address>("Address") .Token("Honorific", a => a.Honorific) .Chain("Honorific", "Text", a => a.Honorific) .Token("FirstName", a => a.FirstName) .Chain("FirstName", "Text", a => a.FirstName) .Token("LastName", a => a.LastName) .Chain("LastName", "Text", a => a.LastName) .Token("Address1", a => a.Address1) .Chain("Address1", "Text", a => a.Address1) .Token("Address2", a => a.Address2) .Chain("Address2", "Text", a => a.Address2) .Token("Company", a => a.Company) .Chain("Company", "Text", a => a.Company) .Token("City", a => a.City) .Chain("City", "Text", a => a.City) .Token("Province", a => a.Province) .Chain("Province", "Text", a => a.Province) .Token("PostalCode", a => a.PostalCode) .Chain("PostalCode", "Text", a => a.PostalCode) .Token("Country", a => a.Country) .Chain("Country", "Text", a => a.Country); context.For <CheckoutError>("CheckoutError") .Token("Type", o => o.Type ?? "") .Chain("Type", "Text", o => o.Type ?? "") .Token("Message", o => o.Message ?? "") .Chain("Message", "Text", o => o.Message ?? "") .Token("Code", o => o.Code ?? "") .Chain("Code", "Text", o => o.Code ?? ""); }