public SimpleTextRenderingModel RaisePageEvent(IVisitorContext visitorContext, StringPropertyCollection propertyBag = null) { SimpleTextRenderingModel model = this.ModelProvider.GetModel <SimpleTextRenderingModel>(); this.Init((BaseCommerceRenderingModel)model); Item currentCatalogItem = this.SiteContext.CurrentCatalogItem; if (this.Context.IsExperienceEditor) { model.Text = "Visited Product Details Page Event - Invisible at runtime."; } else if (currentCatalogItem != null) { CatalogItemRenderingModel product = this.GetProduct(visitorContext); if (product != null) { if (!string.IsNullOrEmpty(this.XcBaseCatalogRepository.GetPersonalizationId())) { if (propertyBag == null) { propertyBag = new StringPropertyCollection(); } if (!propertyBag.ContainsProperty("PersonalizationId")) { propertyBag.Add("PersonalizationId", this.XcBaseCatalogRepository.GetPersonalizationId()); } } this.CatalogManager.VisitedProductDetailsPage(this.StorefrontContext.CurrentStorefront, visitorContext, product.CatalogItem.ID.ToGuid().ToString(), product.DisplayName, product.ParentCategoryId, product.ParentCategoryName, propertyBag); } } return(model); }
public virtual CatalogItemRenderingModel XcGetCatalogItemRenderingModel(IVisitorContext visitorContext, Item productItem) { Assert.ArgumentNotNull(visitorContext, nameof(visitorContext)); CommerceStorefront currentStorefront = this.StorefrontContext.CurrentStorefront; List <VariantEntity> variantEntityList = new List <VariantEntity>(); if (productItem != null && productItem.HasChildren) { var childList = productItem.Children.Where(child => { var variantPersonalizationId = child["PersonalizationId"]; var liveDate = child["LiveDate"]; var expiryDate = child["ExpiryDate"]; if (this.PersonalizationId.Equals(child["PersonalizationId"], System.StringComparison.OrdinalIgnoreCase)) { if (!string.IsNullOrEmpty(liveDate)) { var parseSuccess = DateTimeOffset.TryParseExact(liveDate, "yyyyMMddTHHmmss", null, DateTimeStyles.None, out var variantLiveDate); if (parseSuccess && variantLiveDate > DateTimeOffset.Now) { return(false); } } if (!string.IsNullOrEmpty(expiryDate)) { var parseSuccess = DateTimeOffset.TryParseExact(expiryDate, "yyyyMMddTHHmmss", null, DateTimeStyles.None, out var variantExpiryDate); if (parseSuccess && variantExpiryDate <= DateTimeOffset.Now) { return(false); } } return(true); } return(false); }); if (!childList.Any()) { childList = productItem.Children.Where(child => string.IsNullOrEmpty(child["PersonalizationId"])); } foreach (Item variantItem in childList) { VariantEntity model = this.ModelProvider.GetModel <VariantEntity>(); model.Initialize(variantItem); variantEntityList.Add(model); } } ProductEntity model1 = this.ModelProvider.GetModel <ProductEntity>(); model1.Initialize(currentStorefront, productItem, variantEntityList); CatalogItemRenderingModel model2 = this.ModelProvider.GetModel <CatalogItemRenderingModel>(); this.Init(model2); if (this.SiteContext.UrlContainsCategory) { model2.ParentCategoryId = this.CatalogUrlManager.ExtractCategoryNameFromCurrentUrl(); Item category = this.SearchManager.GetCategory(model2.ParentCategoryId, currentStorefront.Catalog); if (category != null) { model2.ParentCategoryName = category.DisplayName; } } if (model2.ProductId == currentStorefront.GiftCardProductId) { model2.GiftCardAmountOptions = this.GetGiftCardAmountOptions(visitorContext, currentStorefront, model1); } else { this.CatalogManager.GetProductPrice(currentStorefront, visitorContext, model1, null); model2.CustomerAverageRating = this.CatalogManager.GetProductRating(productItem, null); } model2.Initialize(model1, false); //this.SiteContext.Items["CurrentCatalogItemRenderingModel"] = model2; if (model2.CatalogItem.HasChildren) { var childList = model2.CatalogItem.Children.Where(child => this.PersonalizationId.Equals(child["PersonalizationId"], System.StringComparison.OrdinalIgnoreCase)); if (!childList.Any()) { childList = model2.CatalogItem.Children.Where(child => string.IsNullOrEmpty(child["PersonalizationId"])); } foreach (Item child in childList) { MultilistField field = child.Fields["Images"]; if (field != null) { model2.Images.Clear(); foreach (ID targetId in field.TargetIDs) { model2.Images.Add(child.Database.GetItem(targetId)); } return(model2); } } } return(model2); }