private List <FashionItemContent> GetProductVariants(FashionProductViewModel model) { var fashionItems = model.Variants.Value .Select(x => x.CatalogContent) .OfType <FashionItemContent>() .ToList(); return(fashionItems); }
public virtual FashionProductViewModel Create(FashionProduct currentContent, string variationCode) { var variants = GetVariants(currentContent).ToList(); FashionVariant variant; if (!TryGetFashionVariant(variants, variationCode, out variant)) { return(new FashionProductViewModel { Product = currentContent, Images = currentContent.GetAssets <IContentImage>(_contentLoader, _urlResolver) }); } var market = _currentMarket.GetCurrentMarket(); var currency = _currencyservice.GetCurrentCurrency(); var defaultPrice = GetDefaultPrice(variant.Code, market, currency); var discountedPrice = GetDiscountPrice(defaultPrice, market, currency); var viewModel = new FashionProductViewModel { Product = currentContent, Variant = variant, ListingPrice = defaultPrice != null ? defaultPrice.UnitPrice : new Money(0, currency), DiscountedPrice = discountedPrice, Colors = variants .Where(x => x.Size != null) .GroupBy(x => x.Color) .Select(g => new SelectListItem { Selected = false, Text = g.Key, Value = g.Key }) .ToList(), Sizes = variants .Where(x => x.Color != null && x.Color.Equals(variant.Color, StringComparison.OrdinalIgnoreCase)) .Select(x => new SelectListItem { Selected = false, Text = x.Size, Value = x.Size }) .ToList(), Color = variant.Color, Size = variant.Size, Images = variant.GetAssets <IContentImage>(_contentLoader, _urlResolver), IsAvailable = defaultPrice != null }; return(viewModel); }
private void CreateSizeListItems(FashionProductViewModel model, List <FashionItemContent> fashionItems) { if (model.FashionItemViewModel != null) { List <SelectListItem> items = fashionItems.Distinct(new FashionProductSizeVariationComparer()) .OrderBy(x => { return(ShoppingController.SortSizes(model.SizeType + "/" + model.SizeUnit + "/" + x.Facet_Size)); }) .Select(x => { var inventory = _inventoryService.GetTotal(new CatalogKey(AppContext.Current.ApplicationId, x.Code)); bool inStock = inventory != null && inventory.InStockQuantity - inventory.ReservedQuantity > 0; return(CreateSelectListItem(x.Facet_Size, x.Facet_Size + GetStockText(inStock), !inStock, x.Code)); }).ToList(); model.Size = items; } }
public FashionProductViewModel CreateFashionProductViewModel(FashionProductContent currentContent, HomePage currentPage) { var model = new FashionProductViewModel(currentContent); InitializeProductViewModel(model); // get delivery and returns from the start page var startPage = ContentLoader.Get <HomePage>(ContentReference.StartPage); model.DeliveryAndReturns = startPage.Settings.DeliveryAndReturns; model.SizeGuideReference = GetSizeGuide(currentContent); model.SizeUnit = currentContent.SizeUnit; model.SizeType = currentContent.SizeType; return(model); }
public ViewResult Product(string productId, HomePage currentPage) { var contentLoader = ServiceLocator.Current.GetInstance <IContentLoader>(); ContentReference productLink = null; FashionProductViewModel model; // First we try the content link directly ContentReference.TryParse(productId, out productLink); if (ContentReference.IsNullOrEmpty(productLink)) { // Then we try the code var referenceConverter = ServiceLocator.Current.GetInstance <ReferenceConverter>(); try { productLink = referenceConverter.GetContentLink(productId, CatalogContentType.CatalogEntry); } catch (Exception ex) { // We cannot parse it _log.Warning("Cannot parse " + productId + " as a product link or code", ex); productLink = null; } } if (productLink != null) { var currentContent = contentLoader.Get <FashionProductContent>(productLink); string size = ""; string color = ""; currentPage = currentPage ?? contentLoader.Get <HomePage>(ContentReference.StartPage); model = GetProductViewModel(currentContent, currentPage, size, color); } else { model = new FashionProductViewModel(null); } return(View("_Product", model)); }
public ViewResult Product(string productId, HomePage currentPage) { var contentLoader = ServiceLocator.Current.GetInstance <IContentLoader>(); ContentReference productLink; FashionProductViewModel model; if (!productId.Contains("_")) { int pid = 0; if (int.TryParse(productId, out pid)) { var referenceConverter = ServiceLocator.Current.GetInstance <ReferenceConverter>(); productLink = referenceConverter.GetContentLink(pid, CatalogContentType.CatalogEntry, 0); } else { ContentReference.TryParse(productId, out productLink); } } else { productLink = ContentReference.Parse(productId); } if (productLink != null) { var currentContent = contentLoader.Get <FashionProductContent>(productLink); string size = ""; string color = ""; currentPage = currentPage ?? contentLoader.Get <HomePage>(ContentReference.StartPage); model = GetProductViewModel(currentContent, currentPage, size, color); } else { model = new FashionProductViewModel(null); } return(View("_Product", model)); }
public ActionResult Index(FashionProduct currentContent, string variationCode = "", bool quickview = false) { var variations = GetVariations(currentContent).ToList(); if (_isInEditMode && !variations.Any()) { var productWithoutVariation = new FashionProductViewModel { Product = currentContent, Images = currentContent.GetAssets <IContentImage>(_contentLoader, _urlResolver) }; return(Request.IsAjaxRequest() ? PartialView("ProductWithoutVariation", productWithoutVariation) : (ActionResult)View("ProductWithoutVariation", productWithoutVariation)); } FashionVariant variation; if (!TryGetFashionVariant(variations, variationCode, out variation)) { return(HttpNotFound()); } var market = _currentMarket.GetCurrentMarket(); var currency = _currencyservice.GetCurrentCurrency(); var defaultPrice = GetDefaultPrice(variation, market, currency); var discountedPrice = GetDiscountPrice(defaultPrice, market, currency); var viewModel = new FashionProductViewModel { Product = currentContent, Variation = variation, ListingPrice = defaultPrice != null ? defaultPrice.UnitPrice : new Money(0, currency), DiscountedPrice = discountedPrice, Colors = variations .Where(x => x.Size != null) .GroupBy(x => x.Color) .Select(g => new SelectListItem { Selected = false, Text = g.First().Color, Value = g.First().Color }) .ToList(), Sizes = variations .Where(x => x.Color != null && x.Color.Equals(variation.Color, StringComparison.OrdinalIgnoreCase)) .Select(x => new SelectListItem { Selected = false, Text = x.Size, Value = x.Size }) .ToList(), Color = variation.Color, Size = variation.Size, Images = variation.GetAssets <IContentImage>(_contentLoader, _urlResolver), IsAvailable = defaultPrice != null }; if (quickview) { return(PartialView("Quickview", viewModel)); } return(Request.IsAjaxRequest() ? PartialView(viewModel) : (ActionResult)View(viewModel)); }
public static KeyValuePair <FashionProduct, FashionProductViewModel> ComplexMap() { var sizes = new List <Size>(); var sizesViewModels = new List <SizeViewModel>(); var random = new Random(); var sizeCount = random.Next(3, 10); var cityCount = random.Next(4, 10); for (var i = 0; i < sizeCount; i++) { var newGuid = Guid.NewGuid(); var name = string.Format("Size {0}", i); var alias = string.Format("Alias Size {0}", i); sizes.Add( new Size { Id = newGuid, Name = name, Alias = alias, SortOrder = i }); sizesViewModels.Add(new SizeViewModel { Id = newGuid, Name = name, Alias = alias, SortOrder = i }); } var cities = new List <City>(); var cityViewModels = new List <CityViewModel>(); var ftRandom = new Random(); for (var i = 0; i < cityCount; i++) { var newGuid = Guid.NewGuid(); var name = string.Format("City {0}", i); var featureCount = ftRandom.Next(7, 50); var features = new Feature[featureCount]; var featureViewModels = new List <FeatureViewModel>(); for (var j = 0; j < featureCount; j++) { var fId = Guid.NewGuid(); var fName = string.Format("Feature - {0}", j); var fDescription = string.Format("Description Feature - {0}", j); features[j] = new Feature { Id = fId, Name = fName, Description = fDescription, Rank = 8 }; featureViewModels.Add(new FeatureViewModel { Id = fId, Name = fName, Description = fDescription, Rank = 8 }); } cities.Add(new City { Id = newGuid, Name = name, Features = features }); cityViewModels.Add(new CityViewModel { Id = newGuid, Name = name, FeaturesList = featureViewModels }); } var brandId = Guid.NewGuid(); var brandName = "Brand name"; var brand = new Brand { Id = brandId, Name = brandName }; var brandViewModel = new BrandViewModel { Id = brandId, Name = brandName }; var supId = Guid.NewGuid(); var supplierName = "Supplier name"; var agreementDate = DateTime.Now; var supplier = new Supplier { Id = supId, Name = supplierName, AgreementDate = agreementDate, Rank = 6, Sizes = sizes, }; var supplierViewModel = new SupplierViewModel { Id = supId, Name = supplierName, AgreementDate = agreementDate, Sizes = sizesViewModels, }; var sizeId = Guid.NewGuid(); var lonelySize = "Lonely size"; var sizeSAlias = "Size's alias"; var size = new Size { Id = sizeId, Name = lonelySize, Alias = sizeSAlias, SortOrder = 5 }; var sizeViewModel = new SizeViewModel { Id = sizeId, Name = lonelySize, Alias = sizeSAlias, SortOrder = 5 }; var optionsCount = random.Next(10, 50); var options = new List <ProductOption>(); var optionViewModels = new List <ProductOptionViewModel>(); for (var i = 0; i < optionsCount; i++) { var optionId = Guid.NewGuid(); var color = "Random"; var discount = 54M; var price = 34M; var stock = 102; var weight = 23; options.Add( new ProductOption { Id = optionId, Cities = cities, Color = color, Discount = discount, Price = price, Stock = stock, Weight = weight, Size = size }); optionViewModels.Add( new ProductOptionViewModel { Id = optionId, Cities = cityViewModels, Color = color, Discount = discount, Price = price, Stock = stock, Weight = weight, Size = sizeViewModel, DiscountedPrice = Math.Floor(price * discount / 100) }); } var fpId = Guid.NewGuid(); var fashionProductDescription = "Fashion product description"; var ean = "6876876-5345345-345345tgreg-435345df-adskf34"; var topFashionProductName = "Top Fashion Product"; var createdOn = DateTime.Now; var end = DateTime.Now.AddDays(30); var start = DateTime.Now; var warehouseOn = DateTime.Now.AddDays(-3); var fashionProduct = new FashionProduct { Id = fpId, Brand = brand, CreatedOn = createdOn, Description = fashionProductDescription, Ean = ean, End = end, Gender = GenderTypes.Unisex, Name = topFashionProductName, Options = options, Start = start, Supplier = supplier, WarehouseOn = warehouseOn }; var fashionProductViewModel = new FashionProductViewModel { Id = fpId, Brand = brandViewModel, CreatedOn = createdOn, Description = fashionProductDescription, Ean = ean, End = end, OptionalGender = null, Name = topFashionProductName, Options = optionViewModels, Start = start, Supplier = supplierViewModel, WarehouseOn = warehouseOn }; var result = new KeyValuePair <FashionProduct, FashionProductViewModel>(fashionProduct, fashionProductViewModel); return(result); }
public ActionResult Index(FashionProduct currentContent, string variationCode = "", bool quickview = false) { var variations = GetVariations(currentContent).ToList(); if (_isInEditMode && !variations.Any()) { var productWithoutVariation = new FashionProductViewModel { Product = currentContent, Images = currentContent.GetAssets <IContentImage>(_contentLoader, _urlResolver) }; return(Request.IsAjaxRequest() ? PartialView("ProductWithoutVariation", productWithoutVariation) : (ActionResult)View("ProductWithoutVariation", productWithoutVariation)); } FashionVariant variation; if (!TryGetFashionVariant(variations, variationCode, out variation)) { return(HttpNotFound()); } var market = _currentMarket.GetCurrentMarket(); var currency = _currencyservice.GetCurrentCurrency(); var priceFilters = new List <CustomerPricing>(); priceFilters.Add(CustomerPricing.AllCustomers); var currentContact = PrincipalInfo.Current.Principal.GetCustomerContact(); if (currentContact != null) { priceFilters.Add(new CustomerPricing(CustomerPricing.PriceType.PriceGroup, currentContact.EffectiveCustomerGroup)); priceFilters.Add(new CustomerPricing(CustomerPricing.PriceType.UserName, PrincipalInfo.Current.Name)); } var prices = _priceService.GetPrices(market.MarketId, DateTime.Now, new CatalogKey(_appContext.ApplicationId, variation.Code), new PriceFilter { Currencies = new Currency[] { currency }, CustomerPricing = priceFilters }); var priceViewModels = prices.Select(price => new PriceViewModel() { Quantity = price.MinQuantity, Price = price.UnitPrice, DiscountPrice = GetDiscountPrice(variation, price, market, currency) }).OrderBy(x => x.Quantity); var viewModel = new FashionProductViewModel { Prices = priceViewModels, Product = currentContent, Variation = variation, Colors = variations .Where(x => x.Size != null && x.Size == variation.Size) .Select(x => new SelectListItem { Selected = false, Text = x.Color, Value = x.Color }) .ToList(), Sizes = variations .Where(x => x.Color != null && x.Color == variation.Color) .Select(x => new SelectListItem { Selected = false, Text = x.Size, Value = x.Size }) .ToList(), Color = variation.Color, Size = variation.Size, Images = variation.GetAssets <IContentImage>(_contentLoader, _urlResolver) }; if (quickview) { return(PartialView("Quickview", viewModel)); } return(Request.IsAjaxRequest() ? PartialView(viewModel) : (ActionResult)View(viewModel)); }
public static KeyValuePair<FashionProduct, FashionProductViewModel> ComplexMap() { var sizes = new List<Size>(); var sizesViewModels = new List<SizeViewModel>(); var random = new Random(); var sizeCount = random.Next(3, 10); var cityCount = random.Next(4, 10); for (var i = 0; i < sizeCount; i++) { var newGuid = Guid.NewGuid(); var name = string.Format("Size {0}", i); var alias = string.Format("Alias Size {0}", i); sizes.Add( new Size { Id = newGuid, Name = name, Alias = alias, SortOrder = i }); sizesViewModels.Add(new SizeViewModel { Id = newGuid, Name = name, Alias = alias, SortOrder = i }); } var cities = new List<City>(); var cityViewModels = new List<CityViewModel>(); var ftRandom = new Random(); for (var i = 0; i < cityCount; i++) { var newGuid = Guid.NewGuid(); var name = string.Format("City {0}", i); var featureCount = ftRandom.Next(7 , 50); var features = new Feature[featureCount]; var featureViewModels = new List<FeatureViewModel>(); for (var j = 0; j < featureCount; j++) { var fId = Guid.NewGuid(); var fName = string.Format("Feature - {0}", j); var fDescription = string.Format("Description Feature - {0}", j); features[j] = new Feature { Id = fId, Name = fName, Description = fDescription, Rank = 8 }; featureViewModels.Add(new FeatureViewModel { Id = fId, Name = fName, Description = fDescription, Rank = 8 }); } cities.Add(new City { Id = newGuid, Name = name, Features = features }); cityViewModels.Add(new CityViewModel { Id = newGuid, Name = name, FeaturesList = featureViewModels }); } var brandId = Guid.NewGuid(); var brandName = "Brand name"; var brand = new Brand { Id = brandId, Name = brandName }; var brandViewModel = new BrandViewModel { Id = brandId, Name = brandName }; var supId = Guid.NewGuid(); var supplierName = "Supplier name"; var agreementDate = DateTime.Now; var supplier = new Supplier { Id = supId, Name = supplierName, AgreementDate = agreementDate, Rank = 6, Sizes = sizes, }; var supplierViewModel = new SupplierViewModel { Id = supId, Name = supplierName, AgreementDate = agreementDate, Sizes = sizesViewModels, }; var sizeId = Guid.NewGuid(); var lonelySize = "Lonely size"; var sizeSAlias = "Size's alias"; var size = new Size { Id = sizeId, Name = lonelySize, Alias = sizeSAlias, SortOrder = 5 }; var sizeViewModel = new SizeViewModel { Id = sizeId, Name = lonelySize, Alias = sizeSAlias, SortOrder = 5 }; var optionsCount = random.Next(10, 50); var options = new List<ProductOption>(); var optionViewModels = new List<ProductOptionViewModel>(); for (var i = 0; i < optionsCount; i++) { var optionId = Guid.NewGuid(); var color = "Random"; var discount = 54M; var price = 34M; var stock = 102; var weight = 23; options.Add( new ProductOption { Id = optionId, Cities = cities, Color = color, Discount = discount, Price = price, Stock = stock, Weight = weight, Size = size }); optionViewModels.Add( new ProductOptionViewModel { Id = optionId, Cities = cityViewModels, Color = color, Discount = discount, Price = price, Stock = stock, Weight = weight, Size = sizeViewModel, DiscountedPrice = Math.Floor(price * discount / 100) }); } var fpId = Guid.NewGuid(); var fashionProductDescription = "Fashion product description"; var ean = "6876876-5345345-345345tgreg-435345df-adskf34"; var topFashionProductName = "Top Fashion Product"; var createdOn = DateTime.Now; var end = DateTime.Now.AddDays(30); var start = DateTime.Now; var warehouseOn = DateTime.Now.AddDays(-3); var fashionProduct = new FashionProduct { Id = fpId, Brand = brand, CreatedOn = createdOn, Description = fashionProductDescription, Ean = ean, End = end, Gender = GenderTypes.Unisex, Name = topFashionProductName, Options = options, Start = start, Supplier = supplier, WarehouseOn = warehouseOn }; var fashionProductViewModel = new FashionProductViewModel { Id = fpId, Brand = brandViewModel, CreatedOn = createdOn, Description = fashionProductDescription, Ean = ean, End = end, OptionalGender = null, Name = topFashionProductName, Options = optionViewModels, Start = start, Supplier = supplierViewModel, WarehouseOn = warehouseOn }; var result = new KeyValuePair<FashionProduct, FashionProductViewModel>(fashionProduct, fashionProductViewModel); return result; }