/// <summary> /// 转换订单商品到显示信息 /// </summary> /// <param name="orderProduct">订单商品</param> /// <returns></returns> public static OrderProductDisplayInfo ToDisplayInfo(this OrderProduct orderProduct) { var productAlbumManager = Application.Ioc.Resolve <ProductAlbumManager>(); var currencyManager = Application.Ioc.Resolve <CurrencyManager>(); var info = new OrderProductDisplayInfo(); var product = orderProduct.Product; info.ProductId = product.Id; info.OrderProductId = orderProduct.Id; info.Name = new T(product.Name); info.ImageWebPath = productAlbumManager.GetAlbumImageWebPath( product.Id, null, ProductAlbumImageType.Thumbnail); info.MatchedParameters = orderProduct.MatchParameters; info.MatchedParametersDescription = product .GetMatchParametersDescription(orderProduct.MatchParameters); info.UnitPrice = orderProduct.UnitPrice; info.OriginalUnitPrice = orderProduct.OriginalUnitPriceCalcResult.Parts.Sum(); info.Currency = currencyManager.GetCurrency(orderProduct.Currency); info.UnitPriceString = info.Currency.Format(info.UnitPrice); info.UnitPriceDescription = orderProduct.UnitPriceCalcResult.Parts.GetDescription(); info.OriginalUnitPriceString = info.Currency.Format(info.OriginalUnitPrice); info.OriginalUnitPriceDescription = orderProduct.OriginalUnitPriceCalcResult.Parts.GetDescription(); info.Count = orderProduct.Count; info.ShippedCount = orderProduct.Deliveries.Sum(d => (long?)d.Count) ?? 0; info.SellerId = product.Seller?.Id; info.Seller = product.Seller?.Username; info.State = product.State; info.Type = product.Type; info.IsRealProduct = product.GetProductType() is IAmRealProduct; return(info); }
/// <summary> /// 获取订单商品数量的Html /// </summary> /// <param name="info">订单商品的信息</param> /// <returns></returns> public static HtmlString GetOrderCountHtml(this OrderProductDisplayInfo info) { var templateManager = Application.Ioc.Resolve <TemplateManager>(); var html = templateManager.RenderTemplate( "shopping.order/tmpl.order_product_count.html", new { info }); return(new HtmlString(html)); }
/// <summary> /// 获取编辑订单商品数量的Html /// </summary> /// <param name="info">订单商品的信息</param> /// <returns></returns> public static HtmlString GetCountEditor(this OrderProductDisplayInfo info) { var templateManager = Application.Ioc.Resolve <TemplateManager>(); var html = templateManager.RenderTemplate( "common.base/tmpl.number_input_integer.html", new { extraClass = "order-count", value = info.Count }); return(new HtmlString(html)); }
/// <summary> /// 获取编辑订单商品价格的Html /// </summary> /// <param name="info">订单商品的信息</param> /// <returns></returns> public static HtmlString GetPriceEditor(this OrderProductDisplayInfo info) { var templateManager = Application.Ioc.Resolve <TemplateManager>(); var html = templateManager.RenderTemplate( "common.base/tmpl.number_input_decimal.html", new { extraClass = "price", value = info.UnitPrice }); return(new HtmlString(html)); }
/// <summary> /// 从订单商品创建参数生成显示信息 /// </summary> /// <param name="parameters">订单商品创建参数</param> /// <param name="userId">用户Id,未登录时等于null</param> /// <returns></returns> public static OrderProductDisplayInfo ToOrderProductDisplayInfo( this CreateOrderProductParameters parameters, Guid?userId) { var orderManager = Application.Ioc.Resolve <SellerOrderManager>(); var productManager = Application.Ioc.Resolve <ProductManager>(); var productAlbumManager = Application.Ioc.Resolve <ProductAlbumManager>(); var currencyManager = Application.Ioc.Resolve <CurrencyManager>(); var descriptionProviders = Application.Ioc.ResolveMany <IProductMatchParametersDescriptionProvider>(); var unitPrice = orderManager.CalculateOrderProductUnitPrice(userId, parameters); var info = new OrderProductDisplayInfo(); var product = productManager.GetWithCache(parameters.ProductId); if (product == null) { throw new BadRequestException(new T("The product you are try to purchase does not exist.")); } info.ProductId = product.Id; info.OrderProductId = null; info.Name = new T(product.Name); info.ImageWebPath = productAlbumManager.GetAlbumImageWebPath( product.Id, null, ProductAlbumImageType.Thumbnail); info.MatchedParameters = parameters.MatchParameters; info.MatchedParametersDescription = string.Join(" ", descriptionProviders .Select(p => p.GetDescription(product, parameters.MatchParameters)) .Where(d => !string.IsNullOrEmpty(d))); info.UnitPrice = unitPrice.Parts.Sum(); info.OriginalUnitPrice = info.UnitPrice; info.Currency = currencyManager.GetCurrency(unitPrice.Currency); info.UnitPriceString = info.Currency.Format(info.UnitPrice); info.UnitPriceDescription = unitPrice.Parts.GetDescription(); info.OriginalUnitPriceString = info.UnitPriceString; info.OriginalUnitPriceDescription = info.UnitPriceDescription; info.Count = parameters.MatchParameters.GetOrderCount(); info.ShippedCount = 0; info.SellerId = product.Seller?.Id; info.Seller = product.Seller?.Username; info.State = product.State; info.Type = product.Type; info.IsRealProduct = product.GetProductType() is IAmRealProduct; return(info); }