Error executing template "Designs/Ege/Paragraph/CollectionSpecificationPartials/Details_Data.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_bdd7d4cb6104422f9f1ac94de415c9a0.Execute() in E:\Solutions\egecarpets.dk\Files\Templates\Designs\Ege\Paragraph\CollectionSpecificationPartials\Details_Data.cshtml:line 11
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using Dynamicweb.Frontend 5 @using EGE.Website.CustomModules.Extensions 6 @using EGE.Website.CustomModules 7 @using Dynamicweb.Ecommerce.Variants; 8 9 @{ 10 var product = Dynamicweb.Ecommerce.Services.Products.GetProductById(Model.Id, Model.VariantId, Model.LanguageId); 11 var variantCombinations = product.VariantCombinations; 12 var variantGroups = product.VariantGroups; 13 var qualityVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP3"); 14 var backingVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP2"); 15 var sampleVariants = variantGroups.SingleOrDefault(x => x.Id == "VARGRP4"); 16 var relatedSamples = Model.GetRelatedGroupById("RELGRP1"); 17 var keyDictionary = new Dictionary<string, int>(); 18 var keyValue = 0; 19 var architectFolders = Model.GetRelatedGroupByIdOfDefaultGroupInMasterLang("RELGRP3"); 20 } 21 22 <script> 23 var languageId = "@Model.LanguageId"; 24 var languageCode = "@Pageview.Area.EcomCountryCode"; 25 var architectFolderItems = [ 26 @foreach (var folder in architectFolders) 27 { 28 @:{ 29 @:"preTitle": "@folder.Name", 30 @:"title": "@folder.Name", 31 @:"id": "@folder.Id", 32 @:"imagePath": "@(ProductExtensions.GetProductImagePath(folder.Id, out bool isExternal))" 33 @:}, 34 } 35 ]; 36 37 var listJsonSampleSizeItems = [ 38 @if (sampleVariants != null) 39 { 40 foreach (var sample in sampleVariants.GetVariantOptions(Model.Id)) 41 { 42 keyDictionary.Add(sample.Id, keyValue); 43 if (sample != null) 44 { 45 @:{ 46 @:"preTitle": "@sample.Name", 47 @:"title": "@sample.Name", 48 @:"id": @keyValue, 49 @:"variantId": "@sample.Id" 50 @:} 51 if (sample != sampleVariants.GetVariantOptions(Model.Id).Last()) 52 { 53 @:, 54 } 55 keyValue++; 56 } 57 } 58 } 59 ]; 60 61 var listJsonQualityItems = [ 62 @{ 63 var qualityVariantOptions = new List<Dynamicweb.Ecommerce.Variants.VariantOption>(); 64 var isCollectionQuality = false; 65 } 66 @if (qualityVariants != null) 67 { 68 qualityVariantOptions = qualityVariants.GetVariantOptions(Model.Id).ToList(); 69 } 70 else 71 { 72 var collectionCode = product.GetFieldValue<string>("ProductCollectionCode").TrimStart(new char[] { '0' }); 73 74 if (!string.IsNullOrEmpty(collectionCode)) 75 { 76 isCollectionQuality = true; 77 78 var qualOption = new Dynamicweb.Ecommerce.Variants.VariantOption 79 { 80 Id = product.Id, 81 MediumImage = collectionCode, 82 LanguageId = product.LanguageId 83 }; 84 qualityVariantOptions.Add(qualOption); 85 } 86 } 87 @foreach (var quality in qualityVariantOptions) 88 { 89 keyDictionary.Add(quality.Id, keyValue); 90 if (quality != null) 91 { 92 var prod = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(quality.Id, quality.LanguageId); 93 // If the quality is not active in back office it should not be rendered 94 if (!prod.IsActive) 95 { 96 continue; 97 } 98 99 var productDefinedTitle = ProductExtensions.GetValueForVariantSpecField(prod, "QualityVariantTitle"); 100 var variantTitle = ""; 101 var variantImageUrl = (Constants.VariantImagePath + quality.MediumImage + ".jpg"); 102 if (!string.IsNullOrWhiteSpace(productDefinedTitle)) 103 { 104 variantTitle = productDefinedTitle; 105 var productDefinedImage = ProductExtensions.GetValueForVariantSpecField(prod, "QualityVariantImage"); 106 if (!string.IsNullOrWhiteSpace(productDefinedImage)) 107 { 108 variantImageUrl = productDefinedImage.Replace("..", "/Files"); 109 } 110 } 111 else if (isCollectionQuality && !string.IsNullOrEmpty(prod.PrimaryGroupId)) 112 { 113 var primaryGroup = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup(prod.PrimaryGroupId, prod.LanguageId); 114 variantTitle = primaryGroup.GetFieldValue<string>("M3GroupName"); 115 } 116 else 117 { 118 variantTitle = quality.Name; 119 120 } 121 @:{ 122 @:"preTitle": "@variantTitle", 123 @:"title": "@variantTitle", 124 @:"id": @keyValue, 125 @:"variantId": "@quality.Id", 126 @:"forceSelect": @isCollectionQuality.ToString().ToLower(), 127 @:"toolTip": { 128 @:"title": "@variantTitle", 129 @:"text": [{ 130 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Title")", 131 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Text")", 132 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F1Link"))" 133 @:}, 134 @:{ 135 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Title")", 136 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Text")" 137 @:}, 138 @:{ 139 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Title")", 140 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Text")" 141 @:}, 142 @:{ 143 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Title")", 144 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Text")" 145 @:}, 146 @:{ 147 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Title")", 148 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Text")" 149 @:}, 150 @:{ 151 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Title")", 152 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Text")" 153 @:} 154 @:], 155 @:"paragraph": { 156 @:"title": "@ProductExtensions.GetValueForVariantSpecField(prod, "DescriptionTitle")", 157 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "SpecDescriptionText")" 158 @:}, 159 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F8Link"))", 160 @:"linkText": "@ProductExtensions.GetValueForVariantSpecField(prod, "F8Title")", 161 @:"imageUrl": "@variantImageUrl" 162 @:} 163 @:} 164 if (qualityVariants != null && quality != qualityVariantOptions.Last()) 165 { 166 @:, 167 } 168 keyValue++; 169 } 170 } 171 ]; 172 173 var listJsonBackingItems = [ 174 @{ 175 var forceSelectBacking = false; 176 IList<VariantOption> backingVariantOptions = new List<VariantOption>(); 177 if (backingVariants == null) 178 { 179 var backingCode = product.GetFieldValue<string>("ProductBacking"); 180 if (!string.IsNullOrEmpty(backingCode)) 181 { 182 var backingOption = new Dynamicweb.Ecommerce.Variants.VariantOption 183 { 184 Id = backingCode, 185 MediumImage = backingCode, 186 LanguageId = product.LanguageId 187 }; 188 backingVariantOptions.Add(backingOption); 189 forceSelectBacking = true; 190 } 191 } 192 else 193 { 194 backingVariantOptions = backingVariants.GetVariantOptions(Model.Id); 195 } 196 } 197 @if (backingVariantOptions.Any()) 198 { 199 foreach (var backing in backingVariantOptions) 200 { 201 keyDictionary.Add(backing.Id, keyValue); 202 var prod = Dynamicweb.Ecommerce.Services.Products.GetProductByNumber(backing.Id, backing.LanguageId); 203 204 if (backing != null && prod != null) 205 { 206 var variantTitle = ProductExtensions.GetProductName(prod); 207 @:{ 208 @:"preTitle": "@ProductExtensions.GetCustomFieldValue(prod, "M3ProductName")", 209 @:"title": "@variantTitle", 210 @:"id": @keyValue, 211 @:"variantId": "@backing.Id", 212 @:"forceSelect": @forceSelectBacking.ToString().ToLower(), 213 @:"toolTip": { 214 @:"title": "@variantTitle", 215 @:"text": [{ 216 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Title")", 217 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F1Text")", 218 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F1Link"))" 219 @:}, 220 @:{ 221 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Title")", 222 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F2Text")" 223 @:}, 224 @:{ 225 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Title")", 226 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F3Text")" 227 @:}, 228 @:{ 229 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Title")", 230 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F4Text")" 231 @:}, 232 @:{ 233 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Title")", 234 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F5Text")" 235 @:}, 236 @:{ 237 @:"subtitle": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Title")", 238 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "F6Text")" 239 @:} 240 @:], 241 @:"paragraph": { 242 @:"title": "@ProductExtensions.GetValueForVariantSpecField(prod, "DescriptionTitle")", 243 @:"text": "@ProductExtensions.GetValueForVariantSpecField(prod, "SpecDescriptionText")" 244 @:}, 245 @:"link": "@SearchEngineFriendlyURLs.GetFriendlyUrl(ProductExtensions.GetValueForVariantSpecField(prod, "F8Link"))", 246 @:"linkText": "@ProductExtensions.GetValueForVariantSpecField(prod, "F8Title")", 247 @:"imageUrl": "@(Constants.VariantImagePath + backing.MediumImage + ".jpg")" 248 @:} 249 @:} 250 if (backing != backingVariantOptions.Last()) 251 { 252 @:, 253 } 254 keyValue++; 255 } 256 } 257 } 258 ]; 259 260 @if (!variantGroups.Any()) 261 { 262 int countRelated = 0; 263 @:var relatedSamples = [ 264 foreach (var sample in relatedSamples) 265 { 266 @:{ 267 @:"preTitle": "@sample.Id", 268 @:"title": "@sample.Name", 269 @:"variantId": "@sample.Id", 270 @:"id": @countRelated, 271 @:"imageUrl": "@ProductExtensions.GetProductImagePath(sample.Id, out bool isExternal, "XS")" 272 @:} 273 if (sample != relatedSamples.Last()) 274 { 275 @:, 276 } 277 countRelated++; 278 } 279 @:]; 280 } 281 282 var variantCombinations = [ 283 @if (variantCombinations.Any()) 284 { 285 foreach (var variantCombination in variantCombinations) 286 { 287 var variants = variantCombination.GetVariantOptionIds(); 288 if (variants.Any()) 289 { 290 @:{ 291 @:"qualityId": @keyDictionary[variants[0]], 292 @:"sampleSizeId": @(variants.Length >= 2 ? keyDictionary[variants[1]] : 0), 293 @:"backingId": @(variants.Length >= 3 ? keyDictionary[variants[2]] : 0) 294 @:} 295 } 296 if (variantCombination != variantCombinations.Last()) 297 { 298 @:, 299 } 300 } 301 } 302 ]; 303 var combinations = [ 304 @foreach (var variantCombination in variantCombinations) 305 { 306 var variants = variantCombination.GetVariantOptionIds(); 307 if (variants.Any(x => x == "NA")) 308 { 309 continue; 310 } 311 if (variants.Any() && variants.Length > 2) 312 { 313 int qualityId; 314 int sampleSizeId; 315 int backingId; 316 @:{ 317 if (keyDictionary.TryGetValue(variants[0], out qualityId)) 318 { 319 @:"qualityId": @qualityId, 320 } 321 if (keyDictionary.TryGetValue(variants[1], out sampleSizeId)) 322 { 323 @:"sampleSizeId": @sampleSizeId, 324 } 325 if (keyDictionary.TryGetValue(variants[2], out backingId)) 326 { 327 @:"backingId": @backingId 328 } 329 @:} 330 } 331 if (variantCombination != variantCombinations.Last()) 332 { 333 @:, 334 } 335 } 336 ]; 337 338 </script>

Recoloured

Choose quality

Chosen: {{selectedQuality.title}}
{{item.title}}

Choose backing

Chosen: {{selectedBacking.title}}
{{item.title}}

Choose sample size

Chosen: {{selectedSize.title}}
{{item.title}}
When you have chosen a quality and a backing, the available sample sizes will be shown here.

Recoloured

Choose sample

Chosen: {{selectedRelated.title}}
{{item.title}}
Error executing template "Designs/Ege/Paragraph/CollectionSpecificationPartials/Details_OutletData.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at Dynamicweb.Ecommerce.Products.ProductService.GetProductsAndVariantsByProduct(Product product)
   at CompiledRazorTemplates.Dynamic.RazorEngine_278f43844dbb451ca956ab6515760857.Execute() in E:\Solutions\egecarpets.dk\Files\Templates\Designs\Ege\Paragraph\CollectionSpecificationPartials\Details_OutletData.cshtml:line 12
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using Dynamicweb.Ecommerce.Prices 5 @using Dynamicweb.Frontend 6 @using EGE.Website.CustomModules.Extensions 7 @using EGE.Website.CustomModules 8 @using Dynamicweb.Ecommerce.Variants; 9 10 @{ 11 var product = Dynamicweb.Ecommerce.Services.Products.GetProductById(Model.Id, Model.VariantId, Model.LanguageId); 12 var productVariants = Dynamicweb.Ecommerce.Services.Products.GetProductsAndVariantsByProduct(product).Where(x => !string.IsNullOrEmpty(x.VariantId) && x.Active); 13 14 var productVariantObjects = productVariants.Select(x => new 15 { 16 Id = x.Id, 17 VariantId = x.VariantId, 18 ProductNumber = x.Number, 19 M3ProductNumber = x.GetCategoryValue("OutletSpecs", "M3ProductNumber"), 20 M3BatchNumber = x.GetCategoryValue("OutletSpecs", "M3BatchNumber"), 21 M3Version = x.GetCategoryValue("OutletSpecs", "Version"), 22 AvailableArea = x.GetCategoryValue("OutletSpecs", "AvailableArea"), 23 RollCorners = x.GetCategoryValue("OutletSpecs", "RollCorners"), 24 NumberOfFlaws = x.GetCategoryValue("OutletSpecs", "NumberOfFlaws"), 25 IsWasteCarpet = x.GetCategoryValue("OutletSpecs", "WasteCarpet"), 26 Backing = product.GetFieldValue<string>("ProductBacking"), 27 PatternNumber = x.GetCategoryValue("OutletSpecs", "PatternNumber"), 28 UnitPrice = Dynamicweb.Ecommerce.Prices.Price.GetPrices(x.Id, Dynamicweb.Ecommerce.Common.Context.Currency.Code, $"{x.GetCategoryValue("OutletSpecs", "M3ProductNumber")}-{x.GetCategoryValue("OutletSpecs", "M3BatchNumber")}-UNIT{Dynamicweb.Ecommerce.Common.Context.Currency.Code}")?.FirstOrDefault()?.Amount, 29 Price = x.GetPrice(new PriceContext(Dynamicweb.Ecommerce.Common.Context.Currency, Dynamicweb.Ecommerce.Common.Context.Country)).Price, 30 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code 31 }).ToList(); 32 } 33 34 <script> 35 var productVariantObjects = {"productVariantOptions": @Newtonsoft.Json.JsonConvert.SerializeObject(productVariantObjects)}; 36 </script>

Thank you for your request!

We are preparing your digital files pack and you will receive an email shortly with a link to download.

Meanwhile, you can select and order free physical samples from your configuration that can be shipped to you.

{{ title }}

We are sorry, we could not get data from one or more of the products.
Error executing template "Designs/Ege/Paragraph/CollectionSpecificationPartials/Details_SpecificationsAndHighlights.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_16821e2f667246a2a6a00b2228dee771.Execute() in E:\Solutions\egecarpets.dk\Files\Templates\Designs\Ege\Paragraph\CollectionSpecificationPartials\Details_SpecificationsAndHighlights.cshtml:line 11
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits ViewModelTemplate<ProductViewModel> 2 @using Dynamicweb.Rendering 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using EGE.Website.CustomModules 5 @using EGE.Website.CustomModules.Extensions 6 @using EGE.Website.CustomModules.Helpers 7 @using EGE.Website.CustomModules.ViewModels 8 9 @{ 10 var product = Dynamicweb.Ecommerce.Services.Products.GetProductById(Model.Id, Model.VariantId, Model.LanguageId); 11 var variantCombinations = product.VariantCombinations; 12 string specificationCode; 13 string backingCode; 14 string qualityId; 15 string conceptCode = product.GetFieldValue<string>("ProductConcept"); 16 var CurrentLang = Dynamicweb.Frontend.PageView.Current().Area.CultureInfo.Parent.NativeName.ToLower(); 17 byte[] tempBytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(CurrentLang); 18 CurrentLang = System.Text.Encoding.UTF8.GetString(tempBytes); 19 20 21 if (variantCombinations.Any()) 22 { 23 var defaultVariantCombination = variantCombinations.First(); 24 var defaultVariantCombinationIds = defaultVariantCombination.GetVariantOptionIds(); 25 qualityId = defaultVariantCombinationIds[0]; 26 27 var qualityVariantOption = Dynamicweb.Ecommerce.Services.VariantOptions.GetVariantOption(qualityId, Model.LanguageId); 28 specificationCode = EGE.Website.CustomModules.Services.VariantService.GetPropertyValue("SpecificationCode", qualityVariantOption.Id, Model.LanguageId); 29 backingCode = defaultVariantCombinationIds[2]; 30 } 31 else 32 { 33 qualityId = string.Empty; 34 specificationCode = Model.GetFieldValue<string>("ProductSpecificationCode"); 35 backingCode = Model.GetFieldValue<string>("ProductBacking"); 36 } 37 38 var specificationsFeed = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, Constants.SpecificationsFeedNavigationTag); 39 var highlightsFeed = Dynamicweb.Services.Pages.GetPageByNavigationTag(Pageview.AreaID, Constants.HighlightsFeedNavigationTag); 40 41 SpecificationHighlightsViewModel highlightsViewModel = null; 42 SpecificationsViewModel specificationsViewModel = null; 43 44 var specFound = false; 45 if (!string.IsNullOrWhiteSpace(specificationCode) && !string.IsNullOrWhiteSpace(backingCode)) 46 { 47 var specificationsContainer = EGE.Specification.SpecificationContainer.Instance; 48 var specifications = specificationsContainer.GetSpecification(specificationCode, backingCode, Dynamicweb.Ecommerce.Common.Context.Language.Code2); 49 if (specifications != null) 50 { 51 specFound = true; 52 var highlights = specificationsContainer.GetSpecificationHighlight(specificationCode, backingCode, Dynamicweb.Ecommerce.Common.Context.Language.Code2); 53 specificationsViewModel = new EGE.Website.CustomModules.ViewModels.SpecificationsViewModel(specifications); 54 highlightsViewModel = new EGE.Website.CustomModules.ViewModels.SpecificationHighlightsViewModel(highlights); 55 } 56 } 57 58 var sustainabilityChoices = string.Empty; 59 bool hideSpecs = false; 60 bool hideSpecsManually = Pageview.AreaSettings.GetBoolean("HideProductCertificates"); 61 62 if (Model.ProductCategories.ContainsKey("CarpetCategory")) 63 { 64 var susChoiceList = (Model.ProductCategories["CarpetCategory"].Fields["PdfSustainBlocks"]?.Value as List<FieldOptionValueViewModel>); 65 66 foreach (var choice in susChoiceList) 67 { 68 sustainabilityChoices += choice.Value; 69 } 70 Boolean.TryParse((Model.ProductCategories["CarpetCategory"].Fields["HideSpecifications"]?.Value)?.ToString(), out hideSpecs); 71 } 72 73 } 74 75 @if (specFound) 76 { 77 if (specificationsFeed == null) 78 { 79 <h5>SpecificationsFeed not found. Check Nav-tag.</h5> 80 } 81 else if (highlightsFeed == null) 82 { 83 <h5>HighlightsFeed not found. Check Nav-tag.</h5> 84 } 85 else 86 { 87 if (highlightsViewModel != null) 88 { 89 <script> 90 var highlightsFeedUrl = '/api/specifications/gethighlights'; 91 var specificationHighlights = [ 92 @foreach (var highlightSection in highlightsViewModel.HighlightSections) 93 { 94 @:{ 95 @:'title': '@highlightSection.Title', 96 @:'specificationLines': [ 97 98 foreach (var highlight in highlightSection.SpecificationLines) 99 { 100 var defaulDocCount = highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).Count(); 101 @:{ 102 @:'name': '@highlight.Name', 103 @:'selectedDocument': { 104 if(defaulDocCount > 0) 105 { 106 @:'name': "@highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).FirstOrDefault().Name", 107 @:'link': '@highlight.Documents.Where(x => x.Name.ToLower().Contains(CurrentLang)).FirstOrDefault().Link', 108 } else 109 { 110 @:'name': "", 111 @:'link': '', 112 } 113 114 @:}, 115 @:'documents': [ 116 foreach (var document in highlight.Documents) 117 { 118 if (!string.IsNullOrEmpty(document.Link) && !string.IsNullOrEmpty(document.Name)) 119 { 120 @:{ 121 @:'name': "@document.Name", 122 @:'link': '@document.Link' 123 @:}, 124 } 125 } 126 @:] 127 @:}, 128 } 129 @:] 130 @:}, 131 } 132 ]; 133 </script> 134 } 135 136 <div class="product-specification-and-highlights" id="js-product-specification-and-highlights"> 137 <section class="product-specs" id="js-product-specs"> 138 139 <div class="container"> 140 <div class="product-specs__inner"> 141 <div class="row"> 142 <h1 class="product-specs__title js-alt-color">@Translate("Product details | Specifications | Title", "Product Specifications")</h1> 143 </div> 144 145 <transition name="tooltip-show"> 146 <div class="product-specs-tool-tip" v-if="toolTip !== null" id="js-product-specs-tool-tip"> 147 <div class="product-specs-tool-tip__close" @@click="closeToolTip"> 148 <svg class="icon icon--cross"> 149 <use xmlns:xlink="http://www.w3.org/1999/xlink" 150 xlink:href="@Constants.DistPath/icons/icons.svg#cross"> 151 </use> 152 </svg> 153 </div> 154 <figure class="product-specs-tool-tip__image" v-if="toolTip.imageUrl" :alt="toolTip.title"> 155 <img v-bind:src="toolTip.imageUrl" :alt="toolTip.title"> 156 </figure> 157 <div> 158 <div class="product-specs-tool-tip__title">{{toolTip.title}}</div> 159 <div class="product-specs-tool-tip__text"> 160 <div v-for="item in toolTip.text" class="product-specs-tool-tip__lines"> 161 <span v-if="item.subtitle" class="product-specs-tool-tip__subtitle">{{item.subtitle}}:</span> 162 <a v-bind:href="item.link" v-if="item.link"> 163 <span class="product-specs-tool-tip__speclink">{{item.text}}</span> 164 </a> 165 <span v-else class="product-specs-tool-tip__spec">{{item.text}}</span> 166 </div> 167 <div class="product-specs-tool-tip__paragraph"> 168 <div class="product-specs-tool-tip__subtitle">{{toolTip.paragraph.title}}</div> 169 <span>{{toolTip.paragraph.text}}</span> 170 </div> 171 </div> 172 <a class="product-specs-tool-tip__link" v-bind:href="toolTip.link">{{toolTip.linkText}}</a> 173 </div> 174 </div> 175 </transition> 176 177 <div class="row"> 178 <div class="col-xs-12"> 179 <h2 class="product-specs__subtitle"> 180 @Translate("Product details | Specifications | Subtitle", "Specifications<br>based on") 181 </h2> 182 </div> 183 </div> 184 <div class="row"> 185 <div class="col-xs-12 col-md-10 col-md-offset-1"> 186 <div class="product-specs-info"> 187 <div id="product-specs-info__name" class="product-specs-info__name">@product.DefaultGroup.Name</div> 188 <div class="product-specs-info__item" v-if="selectedQuality != null && selectedQuality != 0"> 189 <span class="product-specs-info__label">@Translate("Product details | Specifications | Quality", "Quality"):</span> 190 {{selectedQuality.preTitle}} 191 </div> 192 <div class="product-specs-info__item" v-if="selectedBacking != null && selectedBacking != 0"> 193 <span class="product-specs-info__label">@Translate("Product details | Specifications | Backing", "Backing"):</span> 194 {{selectedBacking.preTitle}} 195 </div> 196 </div> 197 </div> 198 </div> 199 <div class="row"> 200 <div class="col-xs-12 col-md-6 col-md-offset-1"> 201 <div class="product-specs-quality"> 202 <h3 class="product-specs-quality__title">@Translate("Product details | Specifications | Quality", "Quality")</h3> 203 <div class="product-specs-list"> 204 <div class="product-specs-list-item" v-if="availableOptions.quality" 205 :class="{'product-specs-list-item--selected': selectedQuality === item ,'product-specs-list-item--hide':availableOptions.quality[item.id]===false}" 206 v-for="item in qualityItems"> 207 <figure class="product-specs-list-item__image" 208 @@click="selectOption(item,'selectedQuality')"> 209 <img :src="item.toolTip.imageUrl" :alt="item.title"> 210 <svg class="icon icon--checkmark"> 211 <use xmlns:xlink="http://www.w3.org/1999/xlink" 212 xlink:href="@Constants.DistPath/icons/icons.svg#checkmark"> 213 </use> 214 </svg> 215 </figure> 216 <div class="product-specs-list-item__title">{{item.title}}</div> 217 <div class="product-specs-list-item__read-more" v-if="item.toolTip" 218 @@click="showToolTip(item.toolTip, $event)"> 219 @Translate("Read more", "Read more") 220 </div> 221 </div> 222 </div> 223 </div> 224 </div> 225 <div class="col-xs-12 col-md-3 col-md-offset-1"> 226 <div class="product-specs-backing"> 227 <h3 class="product-specs-backing__title" v-if="Object.keys(backingItems).length !== 0">@Translate("Product details | Specifications | Backing", "Backing")</h3> 228 <div class="product-specs-list"> 229 <div class="product-specs-list-item" v-if="availableOptions.backing" 230 :class="{'product-specs-list-item--selected': selectedBacking === item ,'product-specs-list-item--hide':availableOptions.backing[item.id]===false}" 231 v-for="item in backingItems"> 232 <figure class="product-specs-list-item__image" 233 @@click="selectOption(item,'selectedBacking')"> 234 <img :src="item.toolTip.imageUrl" alt=""> 235 <svg class="icon icon--checkmark"> 236 <use xmlns:xlink="http://www.w3.org/1999/xlink" 237 xlink:href="@Constants.DistPath/icons/icons.svg#checkmark"> 238 </use> 239 </svg> 240 </figure> 241 <div class="product-specs-list-item__title">{{item.title}}</div> 242 <div class="product-specs-list-item__read-more" v-if="item.toolTip" 243 @@click="showToolTip(item.toolTip, $event)"> 244 @Translate("Read more", "Read more") 245 </div> 246 </div> 247 </div> 248 </div> 249 </div> 250 </div> 251 @if (!hideSpecs) 252 { 253 <div class="product-specs-buttons"> 254 <div class="button-double product-specs-buttons"> 255 <form method="post" action="/api/specifications/getpdf"> 256 <input type="hidden" v-if="selectedBacking != null" name="backingCode" :value="selectedBacking.variantId" /> 257 <input type="hidden" v-if="selectedBacking != null" name="backingName" :value="selectedBacking.title" /> 258 <input type="hidden" v-if="selectedQuality != null" name="qualityName" :value="selectedQuality.title" /> 259 <input type="hidden" name="collectionCode" value="@Model.GetFieldValue("ProductCollectionCode")" /> 260 261 @if (variantCombinations.Any()) 262 { 263 <input type="hidden" v-if="selectedQuality != null" name="qualityId" :value="selectedQuality.variantId" /> 264 } 265 else 266 { 267 <input type="hidden" name="specificationCode" value="@specificationCode" /> 268 } 269 <input type="hidden" name="nationalityCode" value="@Dynamicweb.Ecommerce.Common.Context.Language.Code2" /> 270 <input type="hidden" name="areaId" value="@Pageview.AreaID" /> 271 <input type="hidden" name="productName" value="@Model.Name" /> 272 <input type="hidden" name="sustainabilityChoice" value="@sustainabilityChoices" /> 273 <button type="submit" title="" property="url" class="button button--ghost button--gold" data-text="Download specifications" :class="{ 'button--error':showDownloadFullSpecificationsError }" @@click="downloadFullSpecifications" ref="showFullSpecificationsSubmitButton"> 274 <span class="button__error-message">@Translate("Product details | Specifications | View full specifications error message", "Please choose both a quality and backing above to view full specifications")</span> 275 <span class="button__content"> 276 <span class="button__icon"> 277 <svg class="svg-icon button__svg"> 278 <use xlink:href="@Constants.DistPath/icons/icons.svg#arrow-down-in-circle"></use> 279 </svg> 280 </span> 281 <span class="button__text"> 282 @Translate("Product details | Specifications | Download full specifications", "Download full specifications") 283 </span> 284 </span> 285 </button> 286 </form> 287 <button type="button" class="button button--solid button--gold " data-text="@Translate("Product details | Specifications | View full specifications", "View full specifications")" @@click="viewFullSpecs" data-service="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(specificationsFeed.ID)" data-highlights-service="@Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(highlightsFeed.ID)" data-specification-code="@specificationCode" :class="{ 'button--error':showFullSpecificationsError }"> 288 <span class="button__error-message">@Translate("Product details | Specifications | View full specifications error message", "Please choose both a quality and backing above to view full specifications")</span> 289 <span class="button__content"> 290 <span class="button__icon"> 291 <svg class="svg-icon button__svg"> 292 <use xlink:href="@Constants.DistPath/icons/icons.svg#arrow"></use> 293 </svg> 294 </span> 295 <span class="button__text">@Translate("Product details | Specifications | View full specifications", "View full specifications")</span> 296 </span> 297 </button> 298 </div> 299 </div> 300 } 301 </div> 302 </div> 303 </section> 304 305 @if (!hideSpecs) 306 { 307 308 if (specificationsViewModel != null && highlightsViewModel != null) 309 { 310 <div id="js-spec-list" class="overlay-template"> 311 @TemplateHelper.RenderPartial("Feeds/SpecificationsFeed.cshtml", specificationsViewModel) 312 </div> 313 314 if (conceptCode != "10" && !hideSpecsManually) 315 { 316 <transition name="product-highlights-fade"> 317 318 <section class="product-highlights"> 319 <div class="container"> 320 <div class="product-highlights__inner"> 321 <div class="row"> 322 <div class="col-xs-12 col-md-2"> 323 <h2 class="product-highlights__subtitle">@Translate("Product details | Specifications | Specification highlights", "Specification<br/>highlights")</h2> 324 </div> 325 <div class="col-xs-12 col-md-10"> 326 <div class="product-highlights__options"> 327 <div v-for="category in specificationHighlights"> 328 <h3 class="product-highlights__options-title">{{category.title}}</h3> 329 <div class="product-highlights__options-list"> 330 <div class="product-highlights__options-list-item" 331 v-for="line in category.specificationLines"> 332 <span class="product-highlights__options-list-item-label">{{line.name}}</span> 333 <span class="product-highlights__options-list-item-dropdown"> 334 <div class="dropdown dropdown--not-standalone"> 335 <div class="dropdown__header" 336 v-bind:class="{ 'dropdown__header-active': line.showDropdown}" 337 @@click="toggleDropdown(line)"> 338 <span class="dropdown__type"> 339 <span v-if="!line.selectedValue && line.defaultValue"> 340 {{line.defaultValue.name}} 341 </span> 342 <span v-if="line.selectedValue"> 343 {{line.selectedValue.name}} 344 </span> 345 </span> 346 <span class="dropdown__direction"> 347 <figure class="dropdown__icon" 348 v-bind:class="{ 'dropdown__icon-active': line.showDropdown}"> 349 <svg class="svg-icon dropdown__icon-arrow"> 350 <use xlink:href="../../dist/icons/icons.svg#arrow-down-in-circle"></use> 351 </svg> 352 </figure> 353 </span> 354 </div> 355 356 <div class="dropdown__body" 357 v-bind:class="{ 'dropdown__body-active': line.showDropdown}" 358 v-if="line.showDropdown != undefined"> 359 <div class="dropdown__body-header" 360 v-bind:class="{ 'dropdown__body-header-active': line.showDropdown}" 361 @@click="toggleDropdown(line)"> 362 <span class="dropdown__type dropdown__type-body"> 363 <span v-if="!line.selectedValue.name"> 364 {{line.defaultValue.name}} 365 </span> 366 <span v-if="line.selectedValue.name"> 367 {{line.selectedValue.name}} 368 </span> 369 </span> 370 <span class="dropdown__direction"> 371 <figure class="dropdown__icon dropdown_icon" 372 v-bind:class="{ 'dropdown__icon-active': line.showDropdown}"> 373 <svg class="svg-icon dropdown__icon-arrow"> 374 <use xlink:href="../../dist/icons/icons.svg#arrow-down-in-circle"></use> 375 </svg> 376 </figure> 377 </span> 378 </div> 379 <hr class="dropdown__body-hr" /> 380 <div class="dropdown__select-container"> 381 <div class="dropdown__select-list"> 382 <div class="dropdown__select-list-item" 383 v-for="doc in line.documents" 384 @@click="itemListSelected(line,doc)"> 385 <label class="dropdown__select-label">{{doc.name}}</label> 386 </div> 387 </div> 388 </div> 389 </div> 390 </div> 391 <a v-if="line.selectedValue" :href="line.selectedValue.link" download 392 class="product-highlights__options-list-item-link">@Translate("Global | Download", "Download")</a> 393 </span> 394 </div> 395 </div> 396 </div> 397 </div> 398 </div> 399 </div> 400 </div> 401 </div> 402 </section> 403 </transition> 404 } 405 } 406 } 407 </div> 408 } 409 } 410 else 411 { 412 <p>No specifications found with Backing: <b>@backingCode</b> & <b>Specificationcode: @specificationCode</b></p> 413 }
Trends & News, yes please