예제 #1
0
        //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));
        }
예제 #3
0
        /// <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));
        }
예제 #4
0
        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));
        }
예제 #5
0
        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 ?? "");
        }