/// <summary> /// The to product variant detached content. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="destination"> /// The destination. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> public static IProductVariantDetachedContent ToProductVariantDetachedContent( this ProductVariantDetachedContentDisplay display, IProductVariantDetachedContent destination) { destination.Slug = display.Slug; destination.TemplateId = display.TemplateId; destination.CanBeRendered = display.CanBeRendered; // Find any detached content items that should be removed var validPropertyTypeAliases = display.DetachedDataValues.Select(x => x.Key); var removers = destination.DetachedDataValues.Where(x => validPropertyTypeAliases.All(y => y != x.Key)); foreach (var remove in removers) { destination.DetachedDataValues.RemoveValue(remove.Key); } foreach (var item in display.DetachedDataValues) { if (!item.Key.IsNullOrWhiteSpace()) { destination.DetachedDataValues.AddOrUpdate(item.Key, item.Value, (x, y) => item.Value); } } return(destination); }
/// <summary> /// Ensures the slug is valid. /// </summary> /// <param name="detachedContent"> /// The detached content. /// </param> /// <param name="slug"> /// The slug. /// </param> /// <returns> /// A slug incremented with a count if necessary. /// </returns> private string EnsureSlug(IProductVariantDetachedContent detachedContent, string slug) { var count = Database.ExecuteScalar <int>("SELECT COUNT(slug) FROM [merchProductVariantDetachedContent] WHERE [merchProductVariantDetachedContent].[slug] = @Slug AND [merchProductVariantDetachedContent].[productVariantKey] != @Pvk", new { @Slug = slug, @Pvk = detachedContent.ProductVariantKey }); if (count > 0) { slug = string.Format("{0}-{1}", slug, count + 1); } return(slug); }
/// <summary> /// The to product variant detached content. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="destination"> /// The destination. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> public static IProductVariantDetachedContent ToProductVariantDetachedContent( this ProductVariantDetachedContentDisplay display, IProductVariantDetachedContent destination) { destination.Slug = display.Slug; destination.TemplateId = display.TemplateId; destination.CanBeRendered = display.CanBeRendered; foreach (var item in display.DetachedDataValues) { destination.DetachedDataValues.AddOrUpdate(item.Key, item.Value, (x, y) => item.Value); } return(destination); }
/// <summary> /// The build detached content. /// </summary> /// <param name="productVariantKey"> /// The product variant key. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="originalDetachedContent"> /// The original detached content. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> private IProductVariantDetachedContent BuildDetachedContent( Guid productVariantKey, string name, IProductVariantDetachedContent originalDetachedContent) { return(new ProductVariantDetachedContent( productVariantKey, originalDetachedContent.DetachedContentType, originalDetachedContent.CultureName, new DetachedDataValuesCollection(originalDetachedContent.DetachedDataValues.ToArray())) { Slug = PathHelper.ConvertToSlug(name), CanBeRendered = originalDetachedContent.CanBeRendered, TemplateId = originalDetachedContent.TemplateId, }); }
/// <summary> /// The build detached content. /// </summary> /// <param name="productVariantKey"> /// The product variant key. /// </param> /// <param name="name"> /// The name. /// </param> /// <param name="originalDetachedContent"> /// The original detached content. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> private IProductVariantDetachedContent BuildDetachedContent( Guid productVariantKey, string name, IProductVariantDetachedContent originalDetachedContent) { return new ProductVariantDetachedContent( productVariantKey, originalDetachedContent.DetachedContentType, originalDetachedContent.CultureName, new DetachedDataValuesCollection(originalDetachedContent.DetachedDataValues.ToArray())) { Slug = PathHelper.ConvertToSlug(name), CanBeRendered = originalDetachedContent.CanBeRendered, TemplateId = originalDetachedContent.TemplateId, }; }
/// <summary> /// The save detached content. /// </summary> /// <param name="detachedContent"> /// The detached content. /// </param> /// <param name="slug"> /// The generated slug /// </param> internal void SaveDetachedContent(IProductVariantDetachedContent detachedContent, string slug) { var factory = new ProductVariantDetachedContentFactory(); if (!detachedContent.HasIdentity) { ((Entity)detachedContent).AddingEntity(); detachedContent.Slug = this.EnsureSlug(detachedContent, slug); var dto = factory.BuildDto(detachedContent); Database.Insert(dto); detachedContent.Key = dto.Key; } else { ((Entity)detachedContent).UpdatingEntity(); detachedContent.Slug = this.EnsureSlug(detachedContent, detachedContent.Slug); var dto = factory.BuildDto(detachedContent); const string Update = "UPDATE [merchProductVariantDetachedContent] SET [merchProductVariantDetachedContent].[detachedContentTypeKey] = @Dctk, [merchProductVariantDetachedContent].[templateId] = @Tid, [merchProductVariantDetachedContent].[slug] = @Slug, [merchProductVariantDetachedContent].[values] = @Vals, [merchProductVariantDetachedContent].[canBeRendered] = @Cbr, [merchProductVariantDetachedContent].[updateDate] = @Ud WHERE [merchProductVariantDetachedContent].[cultureName] = @Cn AND [merchProductVariantDetachedContent].[productVariantKey] = @Pvk"; Database.Execute( Update, new { @Dctk = dto.DetachedContentTypeKey, @Tid = dto.TemplateId, @Slug = dto.Slug, @Vals = dto.Values, @Cbr = dto.CanBeRendered, @Ud = dto.UpdateDate, @Cn = dto.CultureName, @Pvk = dto.ProductVariantKey }); } }
/// <summary> /// The to product variant detached content display. /// </summary> /// <param name="detachedContent"> /// The detached content. /// </param> /// <returns> /// The <see cref="ProductVariantDetachedContentDisplay"/>. /// </returns> public static ProductVariantDetachedContentDisplay ToProductVariantDetachedContentDisplay( this IProductVariantDetachedContent detachedContent) { return(AutoMapper.Mapper.Map <ProductVariantDetachedContentDisplay>(detachedContent)); }
/// <summary> /// The to product variant detached content. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="destination"> /// The destination. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> public static IProductVariantDetachedContent ToProductVariantDetachedContent( this ProductVariantDetachedContentDisplay display, IProductVariantDetachedContent destination) { destination.Slug = display.Slug; destination.TemplateId = display.TemplateId; destination.CanBeRendered = display.CanBeRendered; // Find any detached content items that should be removed var validPropertyTypeAliases = display.DetachedDataValues.Select(x => x.Key); var removers = destination.DetachedDataValues.Where(x => validPropertyTypeAliases.All(y => y != x.Key)); foreach (var remove in removers) { destination.DetachedDataValues.RemoveValue(remove.Key); } foreach (var item in display.DetachedDataValues) { if (!item.Key.IsNullOrWhiteSpace()) destination.DetachedDataValues.AddOrUpdate(item.Key, item.Value, (x, y) => item.Value); } return destination; }
/// <summary> /// The to product variant detached content. /// </summary> /// <param name="display"> /// The display. /// </param> /// <param name="destination"> /// The destination. /// </param> /// <returns> /// The <see cref="IProductVariantDetachedContent"/>. /// </returns> public static IProductVariantDetachedContent ToProductVariantDetachedContent( this ProductVariantDetachedContentDisplay display, IProductVariantDetachedContent destination) { destination.Slug = display.Slug; destination.TemplateId = display.TemplateId; destination.CanBeRendered = display.CanBeRendered; foreach (var item in display.DetachedDataValues) { destination.DetachedDataValues.AddOrUpdate(item.Key, item.Value, (x, y) => item.Value); } return destination; }
/// <summary> /// The delete detached content. /// </summary> /// <param name="detachedContent"> /// The detached content. /// </param> internal void DeleteDetachedContent(IProductVariantDetachedContent detachedContent) { Database.Execute( "DELETE [merchProductVariantDetachedContent] WHERE pk = @Key", new { @Key = detachedContent.Key }); }