Error executing template "Designs/junckers/eCom/Product/junckers-b2c.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_4cd13068937a44debcfade608c9ee308.Execute() in D:\dynamicweb.net\Solutions\junckers.espresso4.dk\Files\Templates\Designs\junckers\eCom\Product\junckers-b2c.cshtml:line 1701
   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 RazorTemplateBase<RazorTemplateModel<Template>> 2 @using System.Globalization 3 @using Dynamicweb.Ecommerce.Prices; 4 @using Co3.Espresso.Base.Extensions; 5 @using Co3.Espresso.Base.Models; 6 @using Co3.Espresso.Website.Models.FrontEnd 7 @using Co3.Espresso.Website.Services 8 @using Dynamicweb.Ecommerce.Common.eCom7 9 @using Dynamicweb.Rendering 10 @using Dynamicweb.Ecommerce.Products; 11 @using ProductService = Co3.Espresso.Website.Services.ProductService 12 @using System.Web 13 @using Dynamicweb.Ecommerce.Common 14 @using Dynamicweb.Environment 15 @using Dynamicweb.Frontend 16 17 @using System.Globalization 18 @using Co3.Espresso.Base.Extensions 19 @using Co3.Espresso.DownloadManager.Models 20 @using Co3.Espresso.Website.Models.FrontEnd 21 @using Co3.Espresso.Website.Services 22 @using Dynamicweb.Content 23 @using Dynamicweb.Frontend 24 @using Dynamicweb.Rendering 25 @using EcomContext = Dynamicweb.Ecommerce.Common.Context 26 27 @functions { 28 29 public string getCountryCodeFromArea( Area area ) 30 { 31 RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID ); 32 return regionInfo.TwoLetterISORegionName; 33 } 34 35 public dynamic GetPriceInfo( string beforePrice = "", string basicPrice = "" ) 36 { 37 double vat = EcomContext.Country.Vat; 38 double dblBeforePrice = 0; 39 double.TryParse( beforePrice, out dblBeforePrice ); 40 double dblBasicPrice = 0; 41 double.TryParse( basicPrice, out dblBasicPrice ); 42 double dblBeforePriceWithVat = 0; 43 double dblDiffPrice = 0; 44 int pct = 0; 45 46 if ( dblBeforePrice > 0 ) 47 { 48 dblBeforePriceWithVat = dblBeforePrice * ( ( vat / 100d ) + 1 ); 49 if ( dblBeforePriceWithVat > dblBasicPrice ) 50 { 51 dblDiffPrice = dblBeforePriceWithVat - dblBasicPrice; 52 pct = (int)Math.Ceiling((( 100d / dblBeforePriceWithVat ) * dblDiffPrice)); 53 } 54 } 55 56 dynamic returnValue = new 57 { 58 beforePriceWithVat = dblBeforePriceWithVat, 59 beforePriceWithVatFormatted = ProductService.Instance.GetPriceFormatted(dblBeforePriceWithVat), 60 basicPrice = dblBasicPrice, 61 basicPriceFormatted = ProductService.Instance.GetPriceFormatted(dblBasicPrice), 62 diffPrice = dblDiffPrice, 63 diffPriceFormatted = ProductService.Instance.GetPriceFormatted(dblDiffPrice), 64 pct = pct, 65 vat = vat 66 }; 67 return returnValue; 68 } 69 70 } 71 72 73 @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null) 74 { 75 if ( string.IsNullOrEmpty( content ) == false ) 76 { 77 ClassList headingClassList = new ClassList(); 78 headingClassList.AddClasses( "col-12" ); 79 ClassList contentClassList = new ClassList(); 80 contentClassList.AddClasses( "col-12" ); 81 82 @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses ) 83 84 if ( string.IsNullOrEmpty( heading ) == false ) 85 { 86 <div class="@headingClassList"> 87 <h2>@heading</h2> 88 </div> 89 } 90 <div class="@contentClassList"> 91 @content 92 </div> 93 94 @sectionEnd() 95 } 96 } 97 98 99 @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null) 100 { 101 if ( string.IsNullOrEmpty( videoURL ) == false ) 102 { 103 ClassList headingClassList = new ClassList(); 104 headingClassList.AddClasses( "col-12" ); 105 ClassList contentClassList = new ClassList(); 106 contentClassList.AddClasses( "col-12" ); 107 108 109 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) 110 111 if ( string.IsNullOrEmpty( heading ) == false ) 112 { 113 <div class="@headingClassList"> 114 <h2>@heading</h2> 115 </div> 116 } 117 118 <div class="@contentClassList"> 119 <div class="embed-responsive embed-responsive-16by9 mb-2"> 120 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 121 </div> 122 </div> 123 @sectionEnd() 124 } 125 } 126 127 @helper ProductRelatedProducts(string sectionClasses = "e-section p-section p-section-bg-white pt-3 border-bottom", string contentClasses = null, string heading = null, 128 IEnumerable<RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem> productLoop = null) 129 { 130 if ( productLoop != null && productLoop.Any() == true ) 131 { 132 ClassList headingClassList = new ClassList(); 133 headingClassList.AddClasses( "col-10 mx-auto" ); 134 ClassList contentClassList = new ClassList(); 135 contentClassList.AddClasses( "col-10 mx-auto" ); 136 137 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) 138 139 if ( string.IsNullOrEmpty( heading ) == false ) 140 { 141 <div class="@headingClassList"> 142 <h2>@heading</h2> 143 </div> 144 } 145 146 147 <div class="@contentClassList"> 148 <div class="e-products mb-2"> 149 <div class="row"> 150 @{ 151 string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses(); 152 } 153 @foreach ( RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem product in productLoop ) 154 { 155 @ProductlistItem( product, productlistItemClassList ) 156 } 157 </div> 158 </div> 159 </div> 160 161 @sectionEnd() 162 } 163 } 164 165 @helper ProductlistItem(RazorTemplateBase<RazorTemplateModel<Template>>.LoopItem product, string productlistItemClassList = null) 166 { 167 if ( product != null ) 168 { 169 dynamic productData = new 170 { 171 id = product.GetString( "Ecom:Product.ID" ), 172 url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ) ), 173 number = product.GetString( "Ecom:Product.Number" ), 174 name = product.GetString( "Ecom:Product.Name" ), 175 imageLarge = ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageLarge.Clean" ), 450, 350, 5 ), 176 price = ProductService.Instance.GetPriceFormatted( product.GetDouble( "Ecom:Product.Price.Price" ) ), 177 descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ), 178 descriptionShort = product.GetString( "Ecom:Product.ShortDescription" ), 179 stock = new 180 { 181 id = product.GetString( "Ecom:Product:Stock.ID" ), 182 quantity = product.GetString( "Ecom:Product.Stock" ), 183 text = product.GetString( "Ecom:Product:Stock.Text" ), 184 delivery = product.GetString( "Ecom:Product:Stock.DeliveryText" ) 185 } 186 }; 187 188 <div class="@productlistItemClassList"> 189 <div class="e-products-item js-e-products-item"> 190 <div class="e-products-item-container"> 191 <div class="junckers-relatedproducts-item-image-container" style="background: url(@productData.imageLarge)"> 192 @if ( string.IsNullOrEmpty( productData.descriptionShort ) == false ) 193 {<div class="junckers-relatedproducts-item-text-container py-1"> 194 <p class="e-products-item-text mb-0 px-2 small"> 195 <strong>Package Size</strong> 196 </p> 197 <p class="e-products-item-text mb-0 text-muted px-2 small"> 198 @productData.descriptionShort 199 </p> 200 </div> 201 } 202 </div> 203 <div class="e-products-item-text-container text-center"> 204 <h3 class="e-products-item-name mb-0"> 205 @productData.name 206 </h3> 207 @* <p class="e-products-item-text mb-0"> *@ 208 @* <small class="e-products-item-price small text-muted"> *@ 209 @* <a href="@productData.url"> *@ 210 @* @productData.price *@ 211 @* </a> *@ 212 @* </small> *@ 213 @* </p> *@ 214 </div> 215 </div> 216 </div> 217 </div> 218 } 219 } 220 221 222 @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string collapseToggleTextExpand = "Se mere", string collapseToggleTextCollapse = "Se mindre") 223 { 224 ClassList sectionClassList = new ClassList(); 225 sectionClassList.AddClasses( sectionClasses ); 226 ClassList contentClassList; 227 string collapseId = Guid.NewGuid().ToString( "N" ); 228 ClassList collapseToggleClassList = new ClassList(); 229 if ( contentClasses == null ) 230 { 231 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item ); 232 } 233 else 234 { 235 contentClassList = new ClassList(); 236 contentClassList.AddClasses( contentClasses ); 237 } 238 if ( sectionCollapse == true ) 239 { 240 sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" ); 241 collapseToggleClassList.AddClasses( contentClasses ); 242 collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" ); 243 contentClassList.AddClasses( "p-section-collapse-content collapse is-md" ); 244 } 245 @:<section class="@sectionClassList"> 246 @:<div class="container-fluid"> 247 @:<div class="row"> 248 249 if ( sectionCollapse == true ) 250 // TODO: SplitPattern into seperate heler function 251 { 252 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId"> 253 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button"> 254 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i> 255 </button> 256 <small class="p-section-collapse-toggle-text h4" data-expand-text="@collapseToggleTextExpand" data-collapse-text="@collapseToggleTextCollapse"></small> 257 </div> 258 } 259 260 @:<div class="@contentClassList" id="@collapseId"> 261 @:<div class="row"> 262 } 263 264 @helper sectionEnd() 265 { 266 @:</div> 267 @:</div> 268 @:</div> 269 @:</div> 270 @:</section> 271 } 272 273 274 275 276 @{ 277 bool showTaxDisclaimerModal = Pageview.Area.Item["ShowTaxDisclaimerModal"] + "" == "True"; 278 bool testMode = HttpContext.Current.Request["testMode"] == "true"; 279 int stock = GetInteger( "Ecom:Product.Stock" ); 280 dynamic JSON = new 281 { 282 productid = GetValue( "Ecom:Product.ID" ), 283 variantoptions = new List<dynamic>(), 284 variantcombinations = new List<dynamic>() 285 }; 286 287 foreach ( LoopItem variantCombo in GetLoop( "VariantCombinations" ) ) 288 { 289 if ( variantCombo.GetBoolean( "Ecom:VariantCombination.Product.Active" ) == true ) 290 { 291 //if ( stock < variantCombo.GetInteger( "Ecom:VariantCombination.Product.Stock" ) ) 292 //{ 293 // stock = variantCombo.GetInteger( "Ecom:VariantCombination.Product.Stock" ); 294 //} 295 296 JSON.variantcombinations.Add( new 297 { 298 id = variantCombo.GetString( "Ecom:VariantCombination.Product.ID" ), 299 name = variantCombo.GetString( "Ecom:VariantCombination.Product.Name" ), 300 text = variantCombo.GetString( "Ecom:VariantCombination.VariantText" ), 301 number = variantCombo.GetString( "Ecom:VariantCombination.Product.Number" ), 302 price = variantCombo.GetDouble( "Ecom:VariantCombination.Product.Price.Price" ), 303 imageLarge = variantCombo.GetString( "Ecom:VariantCombination.Product.ImageLarge.Clean" ), 304 stock = variantCombo.GetDouble( "Ecom:VariantCombination.Product.Stock" ), 305 stockState = variantCombo.GetString( "Ecom:VariantCombination.Product.Stock.Text" ), 306 delivery = variantCombo.GetString( "Ecom:VariantCombination.Product.Stock.DeliveryText" ) 307 } ); 308 } 309 } 310 string primaryGroupID = GetString( "Ecom:Product.PrimaryGroupID" ); 311 GroupService groupService = new GroupService(); 312 313 int AccessoriesProductCounter = 0; 314 315 316 CultureInfo currencyCulture = ExecutingContext.GetCulture(); // new CultureInfo( Context.Currency.CultureInfo ); 317 string currencyDecimalSeparator = currencyCulture.NumberFormat.CurrencyDecimalSeparator; // NumberDecimalSeparator; 318 string currencyGroupSeparator = currencyCulture.NumberFormat.CurrencyGroupSeparator; // .NumberGroupSeparator; 319 string currencyCode = Context.Currency.Code; 320 string currencySymbol = Context.Currency.Symbol; 321 int currencySymbolPlace = Context.Currency.SymbolPlace; 322 323 string orderLineGroupID = Guid.NewGuid().ToString(); 324 string orderLineGroupIDSample = Guid.NewGuid().ToString(); 325 326 List<LoopItem> relatedGroups = GetLoop( "ProductRelatedGroups" ); 327 List<string> groupIds = new List<string>(); 328 groupIds.Add( "RELGRP4" ); //Basic Installation Package: Concrete subfloor 329 groupIds.Add( "RELGRP9" ); //Basic installation package (Board length 189cm) 330 groupIds.Add( "RELGRP5" ); //Underfloor Heating package: Concrete subfloor 331 groupIds.Add( "RELGRP6" ); //Subfloor package for: Concrete without underfloor heating 332 groupIds.Add( "RELGRP7" ); //Subfloor package: Wood based subfloor 333 334 335 string colliNumber = GetString( "Ecom:Product.CategoryField.OutletShop.ColliNumber.Value" ).Replace( ',', '.' ); 336 string colliUnit = GetString( "Ecom:Product.CategoryField.OutletShop.ColliUnit.Value" ); 337 string salesUnit = GetString( "Ecom:Product.CategoryField.OutletShop.SalesUnit.Value" ); 338 string aAccCalculationDesc = GetString( "Ecom:Product.CategoryField.OutletShop.AccCalculationDesc.Value" ); 339 string accM2Number = GetString( "Ecom:Product.CategoryField.OutletShop.AccM2Number.Value" ); 340 string accM2Waste = GetString( "Ecom:Product.CategoryField.OutletShop.AccM2Waste.Value" ); 341 string price = ProductService.Instance.GetPriceFormatted( GetDouble( "Ecom:Product.Price.Price" ) ); 342 double basicPrice = GetDouble( "Ecom:Product.Price.PriceWithVAT.Value" ); 343 bool allowB2C = GetString( "Ecom:Product.CategoryField.OutletShop.AllowB2C.Value.Clean" ) == "True"; 344 string fromPrice = string.Empty; 345 dynamic priceInfo = null; 346 347 if ( string.IsNullOrEmpty( salesUnit ) || !allowB2C ) 348 { 349 LoopItem variant = null; 350 if ( GetLoop( "VariantCombinations" ).Any( vc => !string.IsNullOrEmpty( vc.GetString( "Ecom:Product.CategoryField.OutletShop.SalesUnit.Value.Clean" ) ) ) ) 351 { 352 variant = GetLoop( "VariantCombinations" ).OrderBy( vc => vc.GetDouble( "Ecom:Product.Price.Price" ) ).First( vc => !string.IsNullOrEmpty( vc.GetString( "Ecom:Product.CategoryField.OutletShop.SalesUnit.Value.Clean" ) ) ); 353 } 354 355 if ( variant != null ) 356 { 357 colliNumber = variant.GetString( "Ecom:Product.CategoryField.OutletShop.ColliNumber.Value" ).Replace( ',', '.' ); 358 colliUnit = variant.GetString( "Ecom:Product.CategoryField.OutletShop.ColliUnit.Value" ); 359 salesUnit = variant.GetString( "Ecom:Product.CategoryField.OutletShop.SalesUnit.Value" ); 360 aAccCalculationDesc = variant.GetString( "Ecom:Product.CategoryField.OutletShop.AccCalculationDesc.Value" ); 361 accM2Number = variant.GetString( "Ecom:Product.CategoryField.OutletShop.AccM2Number.Value" ); 362 accM2Waste = variant.GetString( "Ecom:Product.CategoryField.OutletShop.AccM2Waste.Value" ); 363 allowB2C = variant.GetString( "Ecom:Product.CategoryField.OutletShop.AllowB2C.Value.Clean" ) == "True"; 364 fromPrice = ProductService.Instance.GetPriceFormatted( variant.GetDouble( "Ecom:Product.Price.Price" ) ); 365 priceInfo = GetPriceInfo( variant.GetString( "Ecom:Product.CategoryField.OutletShop.BeforePrice.Value" ), variant.GetString( "Ecom:Product.Price.Price" ) ); 366 <script>console.log('__1_colliNumber', '@colliNumber', '@variant.GetString( "Ecom:Product.Number" )')</script> 367 } 368 } 369 } 370 371 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase 372 373 @{ 374 string eComProductCanonical = string.Empty; 375 string globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ); 376 377 if ( GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) > -1 ) 378 { 379 globalValueUrl = GetGlobalValue( "Global:Pageview.Url" ).Substring( 0, GetGlobalValue( "Global:Pageview.Url" ).IndexOf( "?" ) ); 380 } 381 382 if ( string.IsNullOrEmpty( GetString( "Ecom:Product.Canonical" ) ) == false ) 383 { 384 eComProductCanonical = String.Format( "{0}://{1}{2}", GetGlobalValue( "Global:Request.Scheme" ), GetGlobalValue( "Global:Request.Host" ), GetString( "Ecom:Product.Canonical" ) ); 385 } 386 else 387 { 388 eComProductCanonical = String.Format( "{0}://{1}{2}", GetGlobalValue( "Global:Request.Scheme" ), GetGlobalValue( "Global:Request.Host" ), globalValueUrl ); 389 } 390 string metaTitle = @GetString( "Ecom:Product.MetaTitle" ); 391 string metaDescription = @GetString( "Ecom:Product.MetaDescription" ); 392 } 393 394 @SnippetStart( "productMetaTags" ) 395 396 @{ 397 if (string.IsNullOrEmpty( metaTitle ) ) 398 { 399 metaTitle = GetString( "Ecom:Product.Name" ); 400 } 401 402 } 403 404 <title>@metaTitle</title> 405 <meta title="@metaTitle" /> 406 <meta name="description" content="@metaDescription" /> 407 <link rel="canonical" href="@eComProductCanonical"> 408 @SnippetEnd( "productMetaTags" ) 409 410 @sectionEnd() 411 412 <div class="e-product js-e-product" data-pdf="@GetString( "Ecom:Product:Field.DocumentationPdf.Value" )"> 413 414 415 416 @sectionStart( "e-section pb-3 p-section-bg-white pt-6" ) 417 418 <div class="col-12"> 419 <div class="row"> 420 <div class="align-self-center col-12 col-md-5"> 421 <div class="e-product-text-container"> 422 <h1 class="e-product-name mb-0"> 423 @GetString( "Ecom:Product.Name" ) 424 </h1> 425 @* <p class="lead">@groupService.GetGroup(primaryGroupID).Name</p> *@ 426 <div class="e-product-text mb-2"> 427 @GetString( "Ecom:Product.ShortDescription" ) 428 </div> 429 <div class="e-product-text mb-2"> 430 @GetString( "Ecom:Product.LongDescription" ) 431 </div> 432 <!-- 433 <div class="e-product-delivery mb-2"> 434 @if ( string.IsNullOrEmpty( GetString( "Ecom:Product:Stock.ID" ) ) == false ) 435 { 436 <ul class="material-icons-ul list-condensed mb-0 text-heading font-weight-bold"> 437 @if ( GetInteger( "Ecom:Product.Stock" ) > 0 ) 438 { 439 <li class="d-none"> 440 <i class="material-icons text-primary">check</i>@GetString( "Ecom:Product:Stock.Text" )</li> 441 } 442 else 443 { 444 <li class="d-none"> 445 <i class="material-icons text-danger">close</i>@GetString( "Ecom:Product:Stock.Text" )</li> 446 } 447 <li> 448 <i class="material-icons text-primary">check</i>@GetString( "Ecom:Product:Stock.DeliveryText" )</li> 449 <li> 450 <i class="material-icons text-primary">check</i>@Translate( "eCom Product - Delivery Policy - Text", "Free delivery" )</li> 451 <li> 452 <i class="material-icons text-primary">check</i>@Translate( "eCom Product - Return Policy - Text", "Free returns" )</li> 453 </ul> 454 } 455 456 </div> 457 --> 458 <!-- 459 <p class="e-product-price h2 mb-1 mt-0"> 460 @ProductService.Instance.GetPriceFormatted( GetDouble("Ecom:Product.Price.Price") ) 461 @if( GetDouble("Ecom:Product:Field.BeforePrice") != 0 ){ 462 <span class="e-product-price-before text-muted small"> 463 @ProductService.Instance.GetPriceFormatted( GetDouble("Ecom:Product:Field.BeforePrice") ) 464 </span> 465 } 466 467 </p> 468 --> 469 @*<a href="#" class="btn btn-success mr-1 mb-1">Gå til webshop</a>*@ 470 @if ( ( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Hide_Get_Quote_Button.Value" ) ) != "True" ) 471 { 472 <a href="@GetString( "Ecom:Product.Link.Clean" )#junckers-form-link" class="btn btn-success mr-1 mb-1 pdf-hidden junckers-btn-get-quote">@Translate( "Quote/Sample", "Quote/Sample" )</a> 473 } 474 475 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.WhereToBuy.Value" ) ) ) 476 { 477 <a href="@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.WhereToBuy.Value" )" class="btn btn-primary mr-1 mb-1 pdf-hidden">@Translate( "Where to buy", "Where to buy" )</a> 478 } 479 480 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLink.Value" ) ) ) 481 { 482 <a target="_blank" href="@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLink.Value" )" class="btn btn-primary mr-1 mb-1 pdf-hidden">@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkName.Value" )</a> 483 } 484 485 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkSecondary.Value" ) ) ) 486 { 487 <a target="_blank" href="@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkSecondary.Value" )" class="btn btn-primary mr-1 mb-1 pdf-hidden">@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkSecondaryLinkName.Value" )</a> 488 } 489 490 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkTertiary.Value" ) ) ) 491 { 492 <a target="_blank" href="@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkTertiary.Value" )" class="btn btn-primary mr-1 mb-1 pdf-hidden">@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorProductShopLinkTertiaryLinkName.Value" )</a> 493 } 494 495 <form action="/system/data/cart" class="e-product-form js-e-product-form d-none" method="post"> 496 <input name="CartCmd" type="hidden" value="Add"> 497 <input type="hidden" name="ProductID" value="@GetString( "Ecom:Product.ID" )"> 498 <input name="VariantID" type="hidden" value=""> 499 <input name="UnitID" type="hidden" value=""> 500 <input name="Redirect" type="hidden" value=""> 501 <input name="Quantity" type="hidden" value="1"> 502 <!-- <a href="http://showroom.junckers.com/touch#scene=19&l38=320&l40=349" target="_blank" class="btn btn-primary mr-1 mb-1">Go to Showcase</a> --> 503 <!-- <button class="btn btn-success mb-1" type="submit">@Translate( "eCom Product - Add To Cart - Button", "Add to cart" )</button>--> 504 </form> 505 506 507 @if ( (!string.IsNullOrEmpty( salesUnit ) && allowB2C) || testMode ) 508 { 509 if ( GetLoop( "ProductRelatedGroups" ).Any( prg => prg.GetValue( "Ecom:Product:RelatedGroup.GroupID" ).ToString().Contains( "RELGRP8" ) ) ) 510 { 511 LoopItem group = GetLoop( "ProductRelatedGroups" ).First( prg => prg.GetValue( "Ecom:Product:RelatedGroup.GroupID" ).ToString().Contains( "RELGRP8" ) ); 512 foreach ( LoopItem product in group.GetLoop( "RelatedProducts" ) ) 513 { 514 515 <form action="/system/data/samples-cart" class="border-bottom d-flex e-product-form flex-grow-1 js-junckers-sample-form junckers-sample-form mb-5 mt-2 pb-3" method="post"> 516 @if ( product.GetLoop( "VariantCombinations" ).Any() ) 517 { 518 <input name="ProductID" type="hidden" value="@product.GetString( "Ecom:Product.ID" )"> 519 <select class="js-variantid-picker" id="VariantID" name="VariantID"> 520 <option value="">@Translate( "eCom Product - Order a sample - Button", "Order a sample" )</option> 521 <option value="">@Translate( "eCom Product - Choose nothing - Text", "Choose nothing ..." )</option> 522 @foreach ( LoopItem variantCombination in product.GetLoop( "VariantCombinations" ) ) 523 { 524 <option value="@variantCombination.GetString( "Ecom:VariantCombination.VariantID" )">@variantCombination.GetString( "Ecom:VariantCombination.VariantText" )</option> 525 } 526 </select> 527 } 528 else 529 { 530 <select class="js-variantid-picker" id="ProductID" name="ProductID"> 531 <option value="">@Translate( "eCom Product - Order a sample - Button", "Order a sample" )</option> 532 <option value="">@Translate( "eCom Product - Choose nothing - Text", "Choose nothing ..." )</option> 533 <option value="@product.GetString( "Ecom:Product.ID" )">@product.GetString("Ecom:Product.Name")</option> 534 </select> 535 } 536 537 <input name="CartCmd" type="hidden" value="Add"> 538 <input name="OrderContext" type="hidden" value="ORDERCONTEXT3"> 539 <input name="UnitID" type="hidden" value=""> 540 <input name="Redirect" type="hidden" value="false"> 541 <input name="Quantity" type="hidden" value="1"> 542 <input id="EcomOrderLineFieldInput_OrderlineGroupID" name="EcomOrderLineFieldInput_OrderlineGroupID" type="hidden" value="sample"> 543 <button class="border btn btn-success d-none flex-shrink-0 js-sample-buy-btn m-0 p-0 px-2" type="submit"> 544 @Translate( "eCom Product - Add To Cart - Button" ) 545 </button> 546 <button class="border btn btn-primary flex-shrink-0 js-junckers-open-sample-checkout-modal d-none m-0 p-0 px-2" type="button"> 547 <i class="e-nav-pageicon material-icons" style="transform: scale(1.4);">shopping_cart</i> 548 </button> 549 </form> 550 551 <div aria-hidden="true" aria-labelledby="sampleCheckoutModal" class="fade modal" id="sampleCheckoutModal" role="dialog" tabindex="-1"> 552 <div class="modal-dialog modal-sm" role="document"> 553 <div class="modal-content"> 554 <div class="modal-header"> 555 <h2 class="modal-title" id="sampleCheckoutModal">@Translate( "eCom Sample Checkout - Order - Text", "Bestilling" )</h2> 556 <button aria-label="Close" class="close" data-dismiss="modal" type="button"> 557 <span aria-hidden="true">&times;</span> 558 </button> 559 </div> 560 <div class="modal-body"> 561 @{ 562 string activeCampaignId = string.Empty; 563 if ( PageView.Current().AreaID == 17 ) //DK 564 { 565 activeCampaignId = "229"; 566 } 567 else if (PageView.Current().AreaID == 24 ) //IE 568 { 569 activeCampaignId = "238"; 570 } 571 else if (PageView.Current().AreaID == 53 ) //UK 572 { 573 activeCampaignId = "235"; 574 } 575 576 if (!string.IsNullOrEmpty(activeCampaignId) ) 577 { 578 <div class="junckers-active-campaign _form_@activeCampaignId js-junckers-active-campaign-modal" style="overflow: hidden; width: 0; height: 0;"></div><script src="https://junckersdk.activehosted.com/f/embed.php?id=@activeCampaignId" type="text/javascript" charset="utf-8"></script> 579 } 580 } 581 582 <div class="js-junckers-sample-checkout-orderlines"> 583 <script id="js-e-handlebars-tmpl-junckers-sample-checkout-orderlines" type="text/x-handlebars-template"> 584 {{#if orderIsCompleted}} 585 <h2>@Translate( "eCom Sample Checkout - Thank you - Text", "Tak for din bestilling!" )</h2> 586 {{else}} 587 <div class="js-junckers-modal-samples-checkout-step row" data-step="1"> 588 <div class="col-12"> 589 <h3 class="pb-1">@Translate( "eCom Sample Checkout - Sample is added - Text", "Din sample er nu lagt i kurven." )</h3> 590 <div class="d-flex justify-content-between"> 591 <button class="btn btn-lg btn-success e-checkout-next-step js-junckers-sample-checkout-next-step">@Translate( "eCom Sample Checkout - Checkout - Text", "Checkout" )</button> 592 <button class="btn btn-lg btn-link e-checkout-next-step js-junckers-sample-checkout-close-modal-btn px-0">@Translate( "eCom Sample Checkout - Continue Shopping - Text", "Shop videre" )</button> 593 </div> 594 </div> 595 </div> 596 <div class="js-junckers-modal-samples-checkout-step row d-none" data-step="2"> 597 {{#each cart.orderlines}} 598 <div class="col-12"> 599 <div class="row"> 600 <div class="col-10 small"> 601 <p class="font-weight-bold mb-0">{{product.name}} (x{{quantity}})</p> 602 <span class="small">{{product.number}}</span> 603 </div> 604 <div class="col-2 text-right"> 605 <form action="/system/data/samples-cart" class="js-junckers-samples-orderline-delete-form" method="post"> 606 <input name="CartCmd" type="hidden" value="DelOrderLine"> 607 <input name="OrderContext" type="hidden" value="ORDERCONTEXT3"> 608 <input name="Key" type="hidden" value="{{id}}"> 609 <input name="Redirect" type="hidden" value="false"> 610 <button class="btn btn-link" type="submit">fjern</button> 611 </form> 612 </div> 613 </div> 614 <hr style="margin: .25em 0;"> 615 </div> 616 {{/each}} 617 </div> 618 {{/if}} 619 </script> 620 </div> 621 622 <form class="d-none js-junckers-modal-samples-checkout-step js-junckers-samples-checkout-form" data-step="2" data-validate="true"> 623 <h3 class="mt-2">@Translate( "eCom Checkout - Shipping Address - Heading", "Shipping address" )</h3> 624 <input name="CartV2.GotoStep1" type="hidden"> 625 <input name="EcomOrderDeliveryCountry" type="hidden" value="@PageView.Current().Area.EcomCountryCode"> 626 <fieldset class="form-group"> 627 <label class="form-control-label" for="EcomOrderDeliveryName"> 628 @Translate( "eCom Checkout - Name - Heading", "Name" ) 629 </label> 630 <input class="form-control required" id="EcomOrderDeliveryName" name="EcomOrderDeliveryName" type="text" value=""> 631 </fieldset> 632 633 <fieldset class="form-group"> 634 <label class="form-control-label" for="EcomOrderDeliveryCompany">@Translate( "eCom Checkout - Company - Heading", "Company" ) </label> 635 <input class="form-control" id="EcomOrderDeliveryCompany" name="EcomOrderDeliveryCompany" type="text" value=""> 636 </fieldset> 637 638 <fieldset class="form-group"> 639 <div class="row"> 640 <div class="col-12 col-sm-9"> 641 <label class="form-control-label" for="EcomOrderDeliveryAddress">@Translate( "eCom Checkout - Address - Text", "Address" )</label> 642 <input class="form-control required" id="EcomOrderDeliveryAddress" name="EcomOrderDeliveryAddress" type="text" value=""> 643 </div> 644 <div class="col-12 col-sm-3"> 645 <label class="form-control-label" for="EcomOrderDeliveryHouseNumber">@Translate( "eCom Checkout - HouseNumber - Text", "Nummer" )</label> 646 <input class="form-control required" id="EcomOrderDeliveryHouseNumber" name="EcomOrderDeliveryHouseNumber" type="text" value=""> 647 </div> 648 </div> 649 650 <div class=""> 651 <div class="checkbox-toggle form-check mb-0 mt-1 small"> 652 <label class="form-check-label" for="ToggleEcomOrderDeliveryAddress2"> 653 <input class="form-check-input js-e-checkout-toggle-field" id="ToggleEcomOrderDeliveryAddress2" type="checkbox" value="EcomOrderDeliveryAddress2"> 654 @Translate( "eCom Checkout - Add Address2 - Text Toggle", "Add another address" ) 655 </label> 656 </div> 657 </div> 658 659 </fieldset> 660 661 <fieldset class="e-checkout-toggle-target form-group js-e-checkout-toggle-target" data-target="EcomOrderDeliveryAddress2" style="display: none;"> 662 <label class="form-control-label" for="EcomOrderDeliveryAddress2"> 663 @Translate( "eCom Checkout - Address2 - Text", "Address 2" ) 664 </label> 665 <input class="form-control" id="EcomOrderDeliveryAddress2" name="EcomOrderDeliveryAddress2" type="text" value=""> 666 </fieldset> 667 668 <fieldset class=""> 669 <div class="row"> 670 <div class="col-12 col-sm-3 form-group"> 671 <label class="form-control-label" for="EcomOrderDeliveryZip">@Translate( "eCom Checkout - Zip - Heading", "Zip" )</label> 672 <input class="form-control required" id="EcomOrderDeliveryZip" name="EcomOrderDeliveryZip" type="text" value=""> 673 </div> 674 <div class="col-12 col-sm-9 form-group"> 675 <label class="form-control-label" for="EcomOrderDeliveryCity">@Translate( "eCom Checkout - City - Heading", "City" )</label> 676 <input class="form-control required" id="EcomOrderDeliveryCity" name="EcomOrderDeliveryCity" type="text" value=""> 677 </div> 678 </div> 679 </fieldset> 680 <fieldset class="form-group"> 681 <label class="form-control-label" for="EcomOrderDeliveryPhone">@Translate( "eCom Checkout - Phone - Heading", "Phone" )</label> 682 <input class="form-control required" id="EcomOrderDeliveryPhone" name="EcomOrderDeliveryPhone" type="text" value=""> 683 <small class="">@Translate( "eCom Checkout - Call Help - Text", "We won't call you unless we have questions regarding your delivery" )</small> 684 </fieldset> 685 686 <fieldset class="form-group"> 687 <label class="form-control-label" for="EcomOrderCustomerEmail">@Translate( "eCom Checkout - Email - Heading", "Email" )</label> 688 <input class="email form-control required" id="EcomOrderCustomerEmail" name="EcomOrderCustomerEmail" type="email" value=""> 689 <small class="">@Translate( "eCom Checkout - Email Help - Text", "Your receipt will be send to this e-mail." )</small> 690 </fieldset> 691 692 @*Vi værdsætter dit privatliv og ønsker at give dig den bedste oplevelse. Ved at bestille en gratis gulvprøve giver du samtidig samtykke til at lade Junckers A/S behandle dine personoplysninger til kommercielle formål. Du kan til enhver tid trække dit samtykke tilbage. Læs vores privatlivspolitik. (link: https://www.junckers.dk/om-junckers/privatlivspolitik-disclaimer)*@ 693 <fieldset class="form-group small"> 694 <div class="form-check"> 695 <label class="form-check-label" for="EcomOrderCustomerAccepted"> 696 <input class="form-check-input mr-1 required" id="EcomOrderCustomerAccepted" name="EcomOrderCustomerAccepted" type="checkbox" value="1"> @Translate( "eCom Checkout Approve - We value your privacy - Text", "We value your privacy" ) <a data-target=".modal.e-checkout-modal-privacy-policy" data-toggle="modal" tabindex> @Translate( "eCom Checkout Approve - Read our privacy policy - Link", "Read our privacy policy" )</a> 697 </label> 698 </div> 699 </fieldset> 700 701 <div class="align-items-center d-flex e-checkout-actions form-group"> 702 <button class="btn btn-lg btn-success e-checkout-next-step js-e-checkout-approve-order">@Translate( "eCom Checkout - Order - Button", "Bestil" )</button> 703 </div> 704 </form> 705 </div> 706 </div> 707 </div> 708 </div> 709 } 710 } 711 712 bool purchaseAllowed = true; 713 string campaignDescription = string.Empty; 714 string afterPurchasePeriodDescription = string.Empty; 715 string saleStartsText = string.Empty; 716 string campaignLabel = string.Empty; 717 string dkBuyPeriodStart = string.Empty; 718 719 if ( GetBoolean( "Ecom:Product.CategoryField.OutletShop.IsCampaignProduct.Value.Clean" ) ) 720 { 721 Dynamicweb.Ecommerce.Products.Product dwProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById( GetString("Ecom:Product.ID"), string.Empty, false ); 722 Dynamicweb.Ecommerce.Products.Group groupWithCampaignPeriod = dwProduct.Groups.FirstOrDefault( pg => pg.GetProductGroupFieldValue<DateTime?>( "CampaignBuyPeriodStart" ) != null && pg.GetProductGroupFieldValue<DateTime?>( "CampaignBuyPeriodEnd" ) != null ); 723 if ( groupWithCampaignPeriod != null ) 724 { 725 DateTime nowDateTime = DateTime.Now; 726 DateTime buyPeriodStart = groupWithCampaignPeriod.GetProductGroupFieldValue<DateTime>( "CampaignBuyPeriodStart" ); 727 DateTime buyPeriodEnd = groupWithCampaignPeriod.GetProductGroupFieldValue<DateTime>( "CampaignBuyPeriodEnd" ); 728 DateTime displayBuyPeriodStart = buyPeriodStart; 729 730 int differenceToDanishTimezone = PageView.Current().Area.Item.GetValue<int>( "EcommerceDifferenceToDanishTimezone" ); 731 if (differenceToDanishTimezone != 0 ) 732 { 733 differenceToDanishTimezone = -Math.Sign(differenceToDanishTimezone) * Math.Abs(differenceToDanishTimezone); 734 buyPeriodStart = buyPeriodStart.AddHours( differenceToDanishTimezone ); 735 buyPeriodEnd = buyPeriodEnd.AddHours( differenceToDanishTimezone ); 736 } 737 738 dkBuyPeriodStart = buyPeriodStart.ToString("f"); 739 740 741 campaignLabel = !string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.OutletShop.CampaignLabel.Value.Clean" ) ) ? GetString( "Ecom:Product.CategoryField.OutletShop.CampaignLabel.OptionLabel" ) : string.Empty; 742 743 if ( buyPeriodStart.Ticks > 0 ) 744 { 745 purchaseAllowed = false; 746 if ( nowDateTime >= buyPeriodStart ) 747 { 748 purchaseAllowed = true; 749 if ( buyPeriodEnd.Ticks > 0 ) 750 { 751 purchaseAllowed = false; 752 if ( buyPeriodEnd >= nowDateTime ) 753 { 754 purchaseAllowed = true; 755 } 756 else 757 { 758 afterPurchasePeriodDescription = Translate( "Product Campaign - After Purchase Period - Text", "Salgsperioden af dette produkt er desværre overskredet" ); 759 } 760 } 761 } 762 else 763 { 764 campaignDescription = GetString( "Ecom:Product.CategoryField.OutletShop.CampaignDescription.Value.Clean" ); 765 saleStartsText = string.Format( "{0}: <b>{1:f}</b>", Translate( "Product Campaign - Sale Starts - Text", "Sale Starts" ), displayBuyPeriodStart ); 766 } 767 } 768 } 769 } 770 771 <div class="align-items-baseline d-flex mb-1"> 772 <p class="d-flex flex-column mb-1 mr-auto"> 773 <span class="mr-1 text-muted">@Translate( "eCom Productlist Filters - Price Min - Text", "from" ).ToLower()</span> 774 <span class="h2 m-0 mr-1"> 775 @if ( showTaxDisclaimerModal ) 776 { 777 <span> 778 <a href="javascript:void(0);"> 779 <i class="material-icons mr-1 my-1" data-target="#disclaimerFeesModal" data-toggle="modal">info</i> 780 </a> 781 </span> 782 } 783 @fromPrice <span class="small">@Translate( "eCom Product - Outlet - per sqm", "per sqm" )</span> 784 </span> 785 @if ( (double?)priceInfo.diffPrice > 0 ) 786 { 787 <span class="text-primary">@Translate( "eCom Product - Outlet - Save text", "Save" ) @priceInfo.diffPriceFormatted</span> 788 } 789 <span class="small">@Translate( "eCom Product - Outlet - Tax included - Text", "(Tax included)" )</span> 790 </p> 791 </div> 792 793 <div class="d-flex"> 794 @if ( purchaseAllowed ) 795 { 796 <button aria-controls="accessories" aria-expanded="false" class="btn btn-flex btn-success collapsed flex-grow-1 mr-1" data-toggle="collapse" href="#accessories" role="button"> 797 @Translate( "eCom Product - Configure - Text", "Configure" ) 798 </button> 799 } 800 else if ( !string.IsNullOrEmpty( campaignDescription ) ) 801 { 802 <div class="bg-light border p-1"> 803 @if ( !string.IsNullOrEmpty( campaignLabel ) ) 804 { 805 <h2>@campaignLabel</h2> 806 } 807 <p>@campaignDescription</p> 808 @if ( !string.IsNullOrEmpty( saleStartsText ) ) 809 { 810 <p class="mb-0 small" data-dk-buy-period-start="@dkBuyPeriodStart">@saleStartsText</p> 811 } 812 </div> 813 } 814 else if ( !string.IsNullOrEmpty( afterPurchasePeriodDescription ) ) 815 { 816 <div class="bg-light border p-1"> 817 @if ( !string.IsNullOrEmpty( campaignLabel ) ) 818 { 819 <h2>@campaignLabel</h2> 820 } 821 <p>@campaignLabel</p> 822 <p>@afterPurchasePeriodDescription</p> 823 </div> 824 } 825 </div> 826 } 827 828 </div> 829 </div> 830 <div class="col-12 col-md-7 order-first"> 831 <div class="e-product-image-container"> 832 @using Co3.Espresso.Base.Extensions 833 @using Co3.Espresso.Base.Models 834 @using Co3.Espresso.Website.Services 835 @using Dynamicweb.Ecommerce.Products 836 837 @{ 838 string extraAltText = string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorCategoryName.Value" ) ) ? GetString( "Ecom:Product.ShortDescription" ).StripHtml() : GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorCategoryName.Value" ); 839 840 Product dynamicwebProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById(GetString( "Ecom:Product.ID" ), GetString( "Ecom:Product.VariantID" ), Dynamicweb.Ecommerce.Common.Context.LanguageID, false); 841 IEnumerable< Detail > detailsImages = Dynamicweb.Ecommerce.Services.Details.GetDetails( dynamicwebProduct, "0" ).Where( d => d.GroupId == 1 ); 842 843 List< Detail > details = new List< Detail >(); 844 if ( Dynamicweb.Ecommerce.Services.Details.GetDefaultDetail( dynamicwebProduct ) != null ) 845 { 846 details.Add(Dynamicweb.Ecommerce.Services.Details.GetDefaultDetail( dynamicwebProduct )); 847 } 848 if ( detailsImages.Any() ) 849 { 850 details.AddRange(detailsImages); 851 } 852 } 853 854 <div class="e-product-image-container my-2 my-lg-5"> 855 <div class="carousel" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel"> 856 <div class="e-product-image-wrapper"> 857 @{ 858 var variantOption = GetLoop( "VariantGroups" ).Any( vg => vg.GetLoop( "VariantAvailableOptions" ).Any() ); 859 string variantGroupName = string.Empty; 860 861 } 862 <div class="carousel-inner fade d-flex align-items-center"> 863 864 @if ( variantOption ) 865 { 866 foreach ( LoopItem variantGroup in GetLoop( "VariantGroups" ) ) 867 { 868 variantGroupName = variantGroup.GetString( "Ecom:VariantGroup.Name" ); 869 if ( variantGroup.GetString( "Ecom:VariantGroup.Name" ) != "Gloss" ) 870 { 871 <img class="j-product-image-detail-image js-chosen-variant-image" src=""> 872 } 873 } 874 } 875 876 @if ( !details.Any() ) 877 { 878 <div class="active carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal"> 879 <img src="/admin/public/getimage.ashx?Crop=0&Image=@dynamicwebProduct.ImageLarge&Format=jpg&Width=1000&Height=&Quality=90" alt="@GetString( "Ecom:Product.Name" ) @extraAltText" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0" @(variantOption ? "" : "style='left:0'")> 880 </div> 881 } 882 883 @foreach ( ElementWithIndex<Detail> image in details.WithIndex() ) 884 { 885 string activeClass = image.Index == 0 ? "active" : string.Empty; 886 <div class="carousel-item pdf-hidden @activeClass" data-target="#js-e-product-image-modal" data-toggle="modal"> 887 <img style="@(variantGroupName == "Gloss" ? "left:0" : "")" src="/admin/public/getimage.ashx?Crop=0&Image=@(image.Element.Value)&Format=jpg&Width=1000&Height=&Quality=90" alt="@GetString( "Ecom:Product.Name" )" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@( image.Index )" > 888 </div> 889 } 890 891 @{ 892 int loopCounter = 0; 893 } 894 @foreach ( ElementWithIndex<Detail> imageDetails in details.WithIndex() ) 895 { 896 if ( loopCounter == 1 && details.WithIndex().Count() > 1 ) 897 { 898 if ( !string.IsNullOrEmpty( imageDetails.Element.Value ) ) 899 { 900 <a class="carousel-control-prev pdf-hidden" data-slide="prev" data-target="#js-e-product-image-carousel"></a> 901 <a class="carousel-control-next pdf-hidden" data-slide="next" data-target="#js-e-product-image-carousel"></a> 902 } 903 } 904 loopCounter++; 905 } 906 </div> 907 </div> 908 909 @{ int CarouselItemLoopCounter = 1; } 910 911 @foreach ( ElementWithIndex<Detail> imageDetails in details.WithIndex() ) 912 { 913 if ( CarouselItemLoopCounter == 1 && details.WithIndex().Count() > 1 ) 914 { 915 916 if ( !string.IsNullOrEmpty( imageDetails.Element.Value ) ) 917 { 918 919 <ol class="carousel-indicators pdf-hidden"> 920 @if ( !details.Any() ) 921 { 922 <li class="active" data-slide-to="0" data-target="#js-e-product-image-carousel"> 923 <span style="background-size: cover; background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@( imageDetails.Element.Value )&Format=jpg&Width=50&Height=&Quality=90)"></span> 924 </li> 925 } 926 @foreach ( ElementWithIndex<Detail> image in details.WithIndex() ) 927 { 928 string activeClass = image.Index == 0 ? "active" : string.Empty; 929 930 <li class="@activeClass" data-target="#js-e-product-image-carousel" data-slide-to="@( image.Index )"> 931 <span style="background-size: cover; background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@(image.Element.Value)&Format=jpg&Width=50&Height=&Quality=75)"></span> 932 </li> 933 } 934 </ol> 935 } 936 CarouselItemLoopCounter++; 937 } 938 } 939 </div> 940 </div> 941 942 943 @*<section id="js-e-product-banner-carousel" class="e-section p-0 carousel slide junckers-carousel" data-keyboard="false" data-interval="0">*@ 944 @* <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel">*@ 945 @* <div class="carousel-inner">*@ 946 @* <div class="active carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">*@ 947 @* <img style="width: 100%;" src="/admin/public/getimage.ashx?Crop=0&Image=@GetValue( "Ecom:Product.ImageLarge.Clean" )&Format=jpg&Width=2000&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0">*@ 948 @* </div>*@ 949 @* @foreach ( ElementWithIndex<LoopItem> image in GetLoop( "Details" ).WithIndex() )*@ 950 @* {*@ 951 @* <div class="carousel-item" data-target="#js-e-product-image-modal" data-toggle="modal">*@ 952 @* <img style="width: 100%;" src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=2000&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@( image.Index + 1 )">*@ 953 @* </div>*@ 954 @* }*@ 955 @* <a class="carousel-control-prev" data-slide="prev" data-target="#js-e-product-image-carousel"></a>*@ 956 @* <a class="carousel-control-next" data-slide="next" data-target="#js-e-product-image-carousel"></a>*@ 957 @* </div>*@ 958 @* </div>*@ 959 @*</section>*@ 960 961 </div> 962 <div class="modal modal-fullscreen fade e-product-image-modal" id="js-e-product-image-modal" data-backdrop="false" data-keyboard="true"> 963 <div class="modal-dialog"> 964 <div class="modal-content"> 965 <div class="modal-body"> 966 967 <button type="button" class="close" data-dismiss="modal"> 968 <i class="material-icons">close</i> 969 </button> 970 971 <div id="js-e-product-image-modal-carousel" class="carousel slide" data-keyboard="true" data-interval="false"> 972 <div class="carousel-inner"> 973 @if ( !details.Any() ) 974 { 975 <div class="carousel-item active" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@GetValue( "Ecom:Product.ImageLarge.Clean" )&Format=jpg&Width=&Height=1800&Quality=90)"> 976 </div> 977 } 978 @foreach ( ElementWithIndex<Detail> image in details.WithIndex() ) 979 { 980 string activeClass = image.Index == 0 ? "active" : string.Empty; 981 <div class="carousel-item @activeClass" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@(image.Element.Value)&Format=jpg&Width=&Height=1800&Quality=90)"> 982 </div> 983 } 984 </div> 985 @{ int CarouselModalItemLoopCounter = 1; } 986 987 @foreach ( ElementWithIndex<Detail> imageIndicator in details.WithIndex() ) 988 { 989 if ( CarouselModalItemLoopCounter == 1 ) 990 { 991 if ( !string.IsNullOrEmpty( imageIndicator.Element.Value ) ) 992 { 993 <ol class="carousel-indicators"> 994 @if ( !details.Any() ) 995 { 996 <li data-target="#js-e-product-image-modal-carousel" data-slide-to="0" class="active"> 997 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@( imageIndicator.Element.Value )&Format=jpg&Width=50&Height=&Quality=90)"></span> 998 </li> 999 } 1000 @foreach ( ElementWithIndex<Detail> image in details.WithIndex() ) 1001 { 1002 string activeClass = image.Index == 0 ? "active" : string.Empty; 1003 <li class="@activeClass" data-target="#js-e-product-image-modal-carousel" data-slide-to="@( image.Index + 1 )"> 1004 <span style="background-image: url(/admin/public/getimage.ashx?Crop=0&Image=@(image.Element.Value)&Format=jpg&Width=50&Height=&Quality=75)"></span> 1005 </li> 1006 } 1007 </ol> 1008 <a class="carousel-control-prev" data-target="#js-e-product-image-modal-carousel" data-slide="prev"></a> 1009 <a class="carousel-control-next" data-target="#js-e-product-image-modal-carousel" data-slide="next"></a> 1010 } 1011 CarouselModalItemLoopCounter++; 1012 } 1013 } 1014 </div> 1015 1016 </div> 1017 </div> 1018 </div> 1019 </div> 1020 1021 </div> 1022 </div> 1023 </div> 1024 @sectionEnd() 1025 1026 1027 <div class="modal fade e-checkout-modal e-checkout-modal-privacy-policy js-e-checkout-modal-privacy-policy" data-backdrop="false"> 1028 <div class="modal-dialog modal-lg mt-0"> 1029 <div class="modal-content"> 1030 <button type="button" class="close" data-dismiss="modal"> 1031 <i class="material-icons">close</i> 1032 </button> 1033 <div class="modal-body"> 1034 <div class="js-e-checkout-modal-privacy-policy-body"></div> 1035 </div> 1036 <div class="modal-footer bg-info border-top-0"> 1037 <button type="button" class="btn btn-success js-e-accept-privacy-policy" data-dismiss="modal"> 1038 @Translate("eCom Checkout - I accept the privacy policy - Text", "I accept the privacy policy") 1039 </button> 1040 </div> 1041 </div> 1042 </div> 1043 </div> 1044 1045 1046 <div class="e-product"> 1047 1048 @if ( (!string.IsNullOrEmpty( salesUnit ) && allowB2C) || testMode ) 1049 { 1050 string colliUnitTranslateKey = string.Format( "eCom Product - Configurator - Unit - {0} - Text", colliUnit ); 1051 1052 <div class="collapse" id="accessories"> 1053 1054 @sectionStart( 1055 contentClasses: "col-10 mx-auto pt-6 pb-3", 1056 sectionClasses: "e-section col-12 p-section-bg-light pb-4 border-bottom" 1057 ) 1058 1059 <form action="/system/data/cart" class="col-12 e-product-form js-e-product-form js-outlet-form" data-currencyCode="@currencyCode" data-currencyDecimalSeparator="@currencyDecimalSeparator" data-currencyGroupSeparator="@currencyGroupSeparator" data-currencySymbol="@currencySymbol" data-currencySymbolPlace="@currencySymbolPlace" method="post"> 1060 <input id="CartCmd" name="CartCmd" type="hidden" value="addmulti"> 1061 <input id="ProductLoopCounter@( AccessoriesProductCounter )" name="ProductLoopCounter0" type="hidden" value="@AccessoriesProductCounter"> 1062 <input class="js-junckers-productid" id="ProductID@( AccessoriesProductCounter )" name="ProductID@( AccessoriesProductCounter )" type="hidden" value="@GetString( "Ecom:Product.ID" )"> 1063 <input class="js-junckers-variantid" id="VariantID@( AccessoriesProductCounter )" name="VariantID@( AccessoriesProductCounter )" type="hidden" value="@GetString( "Ecom:Product.VariantID" )"> 1064 <input id="UnitID@( AccessoriesProductCounter )" name="UnitID@( AccessoriesProductCounter )" type="hidden" value=""> 1065 <input id="EcomOrderLineFieldInput_OrderlineGroupID@( AccessoriesProductCounter )" name="EcomOrderLineFieldInput_OrderlineGroupID@( AccessoriesProductCounter )" type="hidden" value="@orderLineGroupID"> 1066 <input class="js-outlet-mainproduct-orderline-floorsqm" id="EcomOrderLineFieldInput_OrderlineFloorUnitQuantity@( AccessoriesProductCounter )" name="EcomOrderLineFieldInput_OrderlineFloorUnitQuantity@( AccessoriesProductCounter )" type="hidden" value=""> 1067 <input name="Redirect" type="hidden" value=""> 1068 1069 <h2 class="h1 mt-0 text-center">@Translate( "eCom Product - Configurator - Design your floor - Heading", "Design your floor" )</h2> 1070 <p class="col-lg-9 mb-6 mx-auto text-center">@Translate( "eCom Product - Configurator - Introduction - Text", "Sit cum quicquid inquit quae voluptatum nostros quis loco quam loco familiares. Credo aegyptum pertinacior neglegendi istud nostrae adiunxit coercendi." )</p> 1071 1072 <div class="accordion bg-white border" id="accordionExample"> 1073 1074 <div class="align-items-center d-flex flex-column mt-4 w-100"> 1075 <div class="d-flex flex-row mb-1 mb-lg-0"> 1076 <h2>@Translate( "eCom Product - How many sqm do you need - Heading", "How many sqm do you need?" )</h2> 1077 </div> 1078 <div class="d-flex flex-row mb-1 mb-lg-0"> 1079 <input class="js-junckers-goal-sqm pl-1" data-accm2number="@accM2Number" data-colliNumber="@colliNumber" data-colliUnit="@colliUnit" data-content="" data-m2waste="@accM2Waste" data-placeholder-content="Vi har desværre kun {maxStock} på lager" data-placement="bottom" data-toggle="popover" data-trigger="manual" max="@stock" min="0" style="max-width: 4em;" type="number" value="1" /> 1080 <input class="js-junckers-quantity" id="Quantity@( AccessoriesProductCounter )" max="@stock" min="0" name="Quantity@( AccessoriesProductCounter )" type="hidden" value="1" /> 1081 <span class="bg-light border border-dark mr-1 p-1" style="transform: translateX(-1px);">@salesUnit</span> 1082 </div> 1083 </div> 1084 1085 <div class="card-body pb-0 pt-4 px-3 px-lg-6"> 1086 <div class="border-dark card col-12 d-flex flex-column flex-md-row p-2"> 1087 <div class="align-items-baseline d-flex"> 1088 <h2 class="mb-0">@Translate( "eCom Product - Configurator - Floor - Label", "Floor" )</h2> 1089 </div> 1090 <div class="align-items-baseline d-flex ml-auto"> 1091 <h2 class="js-main-product-quantity mb-0 text-right"></h2> 1092 <span class="pl-1 small text-muted">@Translate( colliUnitTranslateKey, colliUnit )</span> 1093 </div> 1094 </div> 1095 </div> 1096 1097 <div class="steps"> 1098 <div class="step-item"> 1099 <button aria-controls="collapseOne" aria-expanded="true" class="collapsed step-button text-center" 1100 data-target="#collapseOne" data-toggle="collapse" type="button">1 1101 </button> 1102 </div> 1103 <div class="step-item"> 1104 <button aria-controls="collapseTwo" aria-expanded="false" class="collapsed step-button text-center" 1105 data-target="#collapseTwo" data-toggle="collapse" type="button">2 1106 </button> 1107 </div> 1108 </div> 1109 1110 <div class="border-0 card step-wrapper"> 1111 1112 <div aria-labelledby="headingOne" class="collapse js-junckers-step show" data-parent="#accordionExample" id="collapseOne"> 1113 <div class="card-body pt-4 px-3 px-lg-6"> 1114 @inherits RazorTemplateBase< RazorTemplateModel< Template > > 1115 @using Co3.Espresso.Base.Extensions 1116 @using Co3.Espresso.Base.Models 1117 @using Co3.Espresso.Website.Services 1118 @using Dynamicweb.Rendering 1119 1120 @{ 1121 string selectedVariantComboID = GetString( "Ecom:Product.SelectedVariantComboID" ); 1122 string[] selectedVariantIDs = new string[0]; 1123 if ( !string.IsNullOrEmpty( selectedVariantComboID ) ) 1124 { 1125 selectedVariantIDs = selectedVariantComboID.Split( '.' ); 1126 } 1127 1128 dynamic _JSON = new 1129 { 1130 productid = GetValue( "Ecom:Product.ID" ), 1131 variantoptions = new List< dynamic >(), 1132 variantcombinations = new List< dynamic >(), 1133 selectedVariantComboID = selectedVariantComboID, 1134 selectedVariantIDs = selectedVariantIDs 1135 }; 1136 1137 foreach ( LoopItem variantCombo in GetLoop( "VariantCombinations" ) ) 1138 { 1139 if ( variantCombo.GetBoolean( "Ecom:VariantCombination.Product.Active" ) == true ) 1140 { 1141 //_JSON.variantcombinations[ variantCombo.GetString("Ecom:VariantCombination.VariantID") ] = new List< dynamic >(); 1142 _JSON.variantcombinations.Add( new 1143 { 1144 id = variantCombo.GetString( "Ecom:VariantCombination.Product.ID" ), 1145 variantid = variantCombo.GetString( "Ecom:VariantCombination.VariantID" ), 1146 name = variantCombo.GetString( "Ecom:VariantCombination.Product.Name" ), 1147 text = variantCombo.GetString( "Ecom:VariantCombination.VariantText" ), 1148 number = variantCombo.GetString( "Ecom:VariantCombination.Product.Number" ), 1149 price = variantCombo.GetDouble( "Ecom:VariantCombination.Product.Price.Price" ), 1150 imageLarge = variantCombo.GetString( "Ecom:VariantCombination.Product.ImageLarge.Clean" ), 1151 stock = variantCombo.GetDouble( "Ecom:VariantCombination.Product.Stock" ), 1152 stockState = variantCombo.GetString( "Ecom:VariantCombination.Product.Stock.Text" ), 1153 delivery = variantCombo.GetString( "Ecom:VariantCombination.Product.Stock.DeliveryText" ) 1154 } ); 1155 } 1156 } 1157 1158 <div class="js-junckers-variant-picker"> 1159 1160 @foreach ( LoopItem variantGroup in GetLoop( "VariantGroups" ).OrderBy( vg => vg.GetString( "Ecom:VariantGroup.ID" ) ) ) 1161 { 1162 <div class="card mb-2 px-1 py-2"> 1163 <h3 class="font-weight-bold mb-1 pl-1 small">@variantGroup.GetString( "Ecom:VariantGroup.Name" )</h3> 1164 1165 <div class="d-flex flex-wrap js-junckers-variant-options junckers-variant-options" data-groupIndex="@( variantGroup.GetInteger( "VariantGroups.LoopCounter" ) - 1 )"> 1166 @{ 1167 string variantGroupID = variantGroup.GetString( "Ecom:VariantGroup.ID" ); 1168 List< LoopItem > variantAvailableOptions = variantGroup.GetLoop( "VariantAvailableOptions" ); 1169 int numbersOfOptions = variantAvailableOptions.Count(); 1170 bool hasNoneValueOption = variantAvailableOptions.Any( vao => vao.GetString( "Ecom:VariantOption.ID" ) == "VO1909"); 1171 1172 foreach ( ElementWithIndex< LoopItem > variantAvailableOption in variantAvailableOptions.WithIndex() ) 1173 { 1174 string inputID = string.Format( "variantoption_{0}_{1}", variantGroupID, variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" ) ); 1175 bool isChecked = Array.IndexOf( selectedVariantIDs, variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" ) ) > -1; 1176 if ( selectedVariantIDs.Length == 0 ) 1177 { 1178 isChecked = variantAvailableOption.Index == 0; 1179 } 1180 1181 if ( variantGroupID == "VARGRP28" ) //Sortering 1182 { 1183 string descriptionKey = string.Format( "{0}Description.Clean", variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" ) ); 1184 string imagePathKey = string.Format( "{0}Image.Clean", variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" ) ); 1185 string imagePath = string.Format( "/admin/public/getimage.ashx?Crop=0&amp;Image={0}&amp;Format=jpg&amp;Width=400&Height=225&amp;Quality=75", GetString( imagePathKey ) ); 1186 1187 <label class="col-12 col-lg-3 col-sm-6 custom-control custom-radio custom-radio-img d-inline-block px-1 small" for="@inputID"> 1188 <i class="material-icons material-icons material-icons-large position-absolute pr-2 pt-1 text-black" style="right: 0" data-toggle="popover" data-trigger="hover focus" data-content="@GetString( descriptionKey ).StripHtml()" data-original-title="" title="">info</i> 1189 <img src="@imagePath" style="width: 100%;"> 1190 1191 @if ( isChecked ) 1192 { 1193 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" checked /> 1194 } 1195 else 1196 { 1197 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" /> 1198 } 1199 <span class="custom-control-indicator"></span> 1200 <span class="custom-control-description d-block mt-1">@variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" )</span> 1201 1202 </label> 1203 } 1204 else if ( variantGroupID == "VARGRP31" && numbersOfOptions == 2 && hasNoneValueOption ) //Extra features 1205 { 1206 if ( isChecked ) 1207 { 1208 <input type="radio" name="variantoption_@variantGroupID" class="d-none js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" checked /> 1209 } 1210 else 1211 { 1212 <input type="radio" name="variantoption_@variantGroupID" class="d-none js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" /> 1213 } 1214 1215 if ( variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" ) != "VO1909" ) //value=none 1216 { 1217 <label class="custom-checkbox custom-control d-inline-block ml-1 mr-2 small" for="@inputID"> 1218 @if ( isChecked ) 1219 { 1220 <input type="checkbox" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="ExtraFeatureSwitch" id="@inputID" class="js-junckers-extra-features-switch custom-control-input" data-for="variantoption_@variantGroupID" checked /> 1221 } 1222 else 1223 { 1224 <input type="checkbox" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="ExtraFeatureSwitch" id="@inputID" class="js-junckers-extra-features-switch custom-control-input" data-for="variantoption_@variantGroupID" /> 1225 } 1226 <span class="custom-control-indicator custom-checkbox-control"> 1227 <span class="material-icons"> 1228 check 1229 </span> 1230 </span> 1231 <span class="custom-control-description">@variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" )</span> 1232 </label> 1233 } 1234 } 1235 else 1236 { 1237 <label class="custom-control custom-radio d-inline-block ml-1 mr-2 small" for="@inputID"> 1238 @if ( isChecked ) 1239 { 1240 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" checked /> 1241 } 1242 else 1243 { 1244 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input js-junckers-variant-option junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" /> 1245 } 1246 <span class="custom-control-indicator"></span> 1247 <span class="custom-control-description">@variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" )</span> 1248 </label> 1249 } 1250 } 1251 } 1252 </div> 1253 </div> 1254 } 1255 1256 </div> 1257 } 1258 <script>var jsonProductData = @JsonService.Instance.ToJson( _JSON );</script> 1259 1260 @*if ( variantGroupID == "VARGRP31" ) //Extra features 1261 { 1262 <label class="ml-1 mr-2 custom-control custom-radio d-inline-block small" for="@inputID"> 1263 @if ( isChecked ) 1264 { 1265 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input junckers-variant-option js-junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" checked /> 1266 } 1267 else 1268 { 1269 <input type="radio" data-toggle="popover" data-trigger="manual" data-placement="bottom" data-content="Den valgte variant er ikke tilgængelig" data-custom-class="junckers-popover-variantoption" name="variantoption_@variantGroupID" id="@inputID" class="custom-control-input junckers-variant-option js-junckers-variant-option" value="@variantAvailableOption.Element.GetString( "Ecom:VariantOption.ID" )" /> 1270 } 1271 <span class="custom-control-indicator"></span> 1272 <span class="custom-control-description">@variantAvailableOption.Element.GetString( "Ecom:VariantOption.Name" )</span> 1273 </label> 1274 } 1275 else*@ 1276 1277 </div> 1278 <div class="d-flex justify-content-center pb-6"> 1279 <a aria-controls="collapseOne" aria-expanded="false" class="arrow-left btn d-block mx-1 p-0 text-muted" data-target="#collapseOne" data-toggle="collapse" type="button">@Translate( "eCom Product - Configurator - Previous step - Link", "Previous step" )</a> 1280 <a aria-controls="collapseTwo" aria-expanded="false" class="arrow-right btn d-block mx-1 p-0 text-primary" data-target="#collapseTwo" data-toggle="collapse" type="button">@Translate( "eCom Product - Configurator - Next step - Link", "Next step" )</a> 1281 </div> 1282 </div> 1283 </div> 1284 1285 <div class="border-0 card step-wrapper"> 1286 <div aria-labelledby="headingTwo" class="collapse js-junckers-step" data-parent="#accordionExample" 1287 id="collapseTwo"> 1288 <div class="card-body pt-6 px-3 px-lg-6"> 1289 @inherits RazorTemplateBase< RazorTemplateModel< Template > > 1290 @using Dynamicweb.Core 1291 @using Dynamicweb.Rendering 1292 1293 @*RELGRP8 = Samples*@ 1294 1295 @if ( relatedGroups.Any( rg => !rg.GetValue( "Ecom:Product:RelatedGroup.GroupID" ).ToString().Contains( "RELGRP8" ) && !rg.GetValue( "Ecom:Product:RelatedGroup.Name" ).ToString().Contains( "Ekstra features" ) ) ) 1296 { 1297 <div class="align-items-center d-flex flex-column flex-md-row justify-content-between"> 1298 <p class="js-total-outlet-price mb-1 mt-0 order-md-last small" data-basicPrice="@basicPrice.ToString().Replace(',', '.')">@Translate( "eCom Checkout - Total - Text", "Total incl. VAT" ) @price</p> 1299 1300 <span class="d-flex"> 1301 <h2 class="float-left mb-1 mt-0 small">@Translate( "eCom Product - Add accessories - Text", "Add accessories" )</h2> 1302 <span class="d-none form-group js-remove-accessories-container mb-0 small"> 1303 <span class="form-check"> 1304 <label class="form-check-label text-primary" for="remove-accessories" style="transform: translateY(5px);"> 1305 <input class="d-none form-check-input js-remove-accessories mr-1" id="remove-accessories" name="remove-accessories" type="checkbox" value="1"> (@Translate( "eCom Product - Outlet Remove Accessories - Checkbox", "Remove Accessories" )) 1306 </label> 1307 </span> 1308 </span> 1309 </span> 1310 </div> 1311 } 1312 1313 <div class="js-outlet-choose-accessory-container outlet-choose-accessory-container"> 1314 @foreach ( LoopItem group in relatedGroups.OrderBy( rg => groupIds.IndexOf( rg.GetString( "Ecom:Product:RelatedGroup.GroupID" ) ) ) ) 1315 { 1316 if ( group.GetLoop( "RelatedProducts" ).Any() && !group.GetValue( "Ecom:Product:RelatedGroup.GroupID" ).ToString().Contains( "RELGRP8" ) && !group.GetValue( "Ecom:Product:RelatedGroup.Name" ).ToString().Contains( "Ekstra features" ) ) 1317 { 1318 <div class="card col-12 d-flex flex-column flex-md-row js-outlet-choose-accessory mb-1 outlet-choose-accessory p-2 small"> 1319 <div class="d-flex"> 1320 <div class="align-self-start d-flex"> 1321 <input name="accessories" id="@group.GetValue( "Ecom:Product:RelatedGroup.GroupID" )" class="j-outlet-checkbox js-outlet-checkbox" type="radio" /> 1322 <label for="accessories"> 1323 <span></span> 1324 </label> 1325 </div> 1326 <div class="mr-2"> 1327 <h3>@group.GetValue( "Ecom:Product:RelatedGroup.Name" )</h3> 1328 <div class="js-calc-part-products"> 1329 @foreach ( LoopItem product in group.GetLoop( "RelatedProducts" ) ) 1330 { 1331 ++AccessoriesProductCounter; 1332 string _accM2Number = product.GetString( "AccM2Number.Clean" ).Replace( ',', '.' ); 1333 1334 <div class="js-calc-part-product mb-1" data-name="@product.GetString( "Ecom:Product.Name" )" data-calculation="@product.GetString( "AccCalculationDesc.Clean" )" data-perm2="@_accM2Number" data-m2waste="@product.GetString( "AccM2Waste.Clean" )" data-colliUnit="@product.GetString( "ColliUnit.Clean" )" data-colliNumber="@product.GetString( "ColliNumber.Clean" )" data-colliVolume="@product.GetString( "ColliVolume.Clean" )" data-stock="@product.GetDouble( "Ecom:Product.Stock" )" data-price="@product.GetDouble( "Ecom:Product.Price.Price" ).ToString().Replace(',', '.')"> 1335 @product.GetString( "Ecom:Product.Name" ) 1336 <input type="hidden" value="@( AccessoriesProductCounter )" id="ProductLoopCounter@( AccessoriesProductCounter )" name="ProductLoopCounter@( AccessoriesProductCounter )"> 1337 <input type="hidden" value="@product.GetString( "Ecom:Product.ID" )" id="ProductID@( AccessoriesProductCounter )" name="ProductID@( AccessoriesProductCounter )"> 1338 <input type="hidden" value="@product.GetString( "Ecom:Product.VariantID" )" id="VariantID@( AccessoriesProductCounter )" name="VariantID@( AccessoriesProductCounter )"> 1339 <input type="hidden" value="" id="UnitID@( AccessoriesProductCounter )" name="UnitID@( AccessoriesProductCounter )"> 1340 <input type="hidden" class="js-junckers-accessories-quantity" name="Quantity@( AccessoriesProductCounter )" id="Quantity@( AccessoriesProductCounter )" value="0"> 1341 <input id="EcomOrderLineFieldInput_OrderlineGroupID@( AccessoriesProductCounter )" name="EcomOrderLineFieldInput_OrderlineGroupID@( AccessoriesProductCounter )" type="hidden" value="@orderLineGroupID"> 1342 </div> 1343 } 1344 </div> 1345 </div> 1346 </div> 1347 <div class="flex-shrink-0 ml-5 ml-md-auto mt-2 mt-md-0"> 1348 <p class="align-self-end h2 js-outlet-choose-accessory-calcprice m-0 ml-auto"></p> 1349 </div> 1350 </div> 1351 } 1352 } 1353 </div> 1354 1355 </div> 1356 <div class="d-flex justify-content-center pb-4"> 1357 <a aria-controls="collapseOne" aria-expanded="false" class="arrow-left btn d-block mx-1 p-0 text-muted" data-target="#collapseOne" data-toggle="collapse" type="button">@Translate( "eCom Product - Configurator - Previous step - Link", "Previous step" )</a> 1358 </div> 1359 </div> 1360 </div> 1361 </div> 1362 1363 <div class="alert bg-dark d-none js-junckers-container-alert text-center text-white">@Translate( "eCom Product - No varians match the combo - Text", "Den ønskede variant og/eller mængde er ikke tilgængelig" )</div> 1364 1365 <div class="d-none js-junckers-container-buy justify-content-center mt-3 w-100"> 1366 <div class="d-flex flex-row mb-1 mb-lg-0"> 1367 <span class="align-self-center mr-2">@Translate( "eCom Checkout - Total - Text", "Total incl. VAT" )</span> 1368 <p class="align-self-center h2 js-total-outlet-price m-0 mr-1" data-basicPrice="@basicPrice.ToString().Replace( ',', '.' )">@price</p> 1369 </div> 1370 <div class="d-flex flex-row mb-1 mb-lg-0"> 1371 <button class="bg-primary border-primary btn btn-primary d-none" id="add-to-cart-button" type="submit">@Translate( "eCom Product - Add To Cart - Button", "Add to cart" )</button> 1372 </div> 1373 </div> 1374 1375 </form> 1376 @sectionEnd() 1377 </div> 1378 } 1379 1380 <section class="col-12 col-lg-12 col-md-12 mx-auto p-section-bg-light pdf-page-break-avoid py-6"> 1381 <div class="container-fluid"> 1382 <div class="row"> 1383 <div class="col-10 mx-auto"> 1384 <div class="row"> 1385 <div class="col-12"> 1386 <h2 class="h1 small">@Translate( "Choose the look of the floor", "Choose the look of the floor" ):</h2> 1387 <div class="row"> 1388 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicImage.Value" ) ) ) 1389 { 1390 <div class="col-12 col-md-4 col-sm-6"> 1391 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicImage.Value" )&amp;Format=jpg&amp;Width=600&Height=350&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1392 <h3 class="h2 mt-1 small">@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicName.Value" )</h3> 1393 @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicDescription.Value" ) 1394 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicThicknessWidth.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicThicknessWidth.Value" ) 1395 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicSurfaces.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicSurfaces.Value" ) 1396 </div> 1397 } 1398 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyImage.Value" ) ) ) 1399 { 1400 <div class="col-12 col-md-4 col-sm-6"> 1401 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyImage.Value" )&amp;Format=jpg&amp;Width=600&Height=350&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1402 <h3 class="h2 mt-1 small">@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyName.Value" )</h3> 1403 @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyDescription.Value" ) 1404 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyThicknessWidth.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyThicknessWidth.Value" ) 1405 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonySurfaces.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonySurfaces.Value" ) 1406 </div> 1407 } 1408 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationImage.Value" ) ) ) 1409 { 1410 <div class="col-12 col-md-4 col-sm-6"> 1411 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationImage.Value" )&amp;Format=jpg&amp;Width=600&Height=350&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1412 <h3 class="h2 mt-1 small">@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationName.Value" )</h3> 1413 @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationDescription.Value" ) 1414 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationThicknessWidth.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationThicknessWidth.Value" ) 1415 <br /><br /><strong>@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationSurfaces.Label" )</strong><br /> @GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationSurfaces.Value" ) 1416 </div> 1417 } 1418 </div> 1419 </div> 1420 </div> 1421 </div> 1422 </div> 1423 </div> 1424 </section> 1425 1426 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorConfigurator.Value" ) ) ) 1427 { 1428 @sectionStart( 1429 contentClasses: "col-12 col-md-10 mx-auto py-6", 1430 sectionClasses: "e-section col-12 p-section-bg-white pdf-hidden pdf-page-break-avoid" 1431 ) 1432 <div class="col-12"> 1433 <div class="col-12 col-lg-9 col-xl-6 mb-4 pl-0"> 1434 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.BeInspiredText.Value" ) 1435 1436 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.BeInspiredProjekterLink.Value" ) ) ) 1437 { 1438 <a class="arrow-right pdf-hidden text-dark" href="@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.BeInspiredProjekterLink.Value" )"> 1439 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.BeInspiredProjekterLinktext.Value" ) 1440 </a> 1441 } 1442 </div> 1443 <div style="width: 100%; padding-top: 57%; position: relative;"> 1444 <iframe allowfullscreen="true" frameborder="0" src="@GetString("Ecom:Product.CategoryField.ProductsCategoryGenerel.FloorConfigurator.Value").StripHtml()" style="height: 100%; width: 100%; position: absolute; left: 0; top: 0;"></iframe> 1445 </div> 1446 </div> 1447 @sectionEnd() 1448 } 1449 1450 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Ressource1.Value" ) ) ) 1451 { 1452 @sectionStart( 1453 contentClasses: "col-12 col-md-10 mx-auto pt-6 pb-3", 1454 sectionClasses: "e-section col-12 p-section-bg-light pdf-hidden pdf-page-break-avoid border-top" 1455 ) 1456 1457 Dictionary< string, List< dynamic > > resourcesList = new Dictionary< string, List< dynamic > >(); 1458 1459 foreach ( LoopItem pc in GetLoop( "ProductCategories" ) ) 1460 { 1461 1462 if ( pc.GetString( "Ecom:Product.Category.ID" ) == "ProductsCategoryGenerel" ) 1463 { 1464 foreach ( LoopItem pci in pc.GetLoop( "ProductCategoryFields" ) ) 1465 { 1466 if ( pci.GetString( "Ecom:Product.CategoryField.ID" ).ToLower().Contains( "doctype" ) == true && string.IsNullOrEmpty( pci.GetString( "Ecom:Product.CategoryField.Value" ) ) == false ) 1467 { 1468 if ( resourcesList.ContainsKey( pci.GetString( "Ecom:Product.CategoryField.Value" ) ) == false ) 1469 { 1470 resourcesList.Add( pci.GetString( "Ecom:Product.CategoryField.Value" ), new List< dynamic >() ); 1471 } 1472 1473 string catIdNew = string.Format( "Ressource #{0}", System.Text.RegularExpressions.Regex.Match( pci.GetString( "Ecom:Product.CategoryField.Label" ), @"\d+" ).Value ); 1474 string catLabelNew = string.Format( "Ressource #{0} Type", System.Text.RegularExpressions.Regex.Match( pci.GetString( "Ecom:Product.CategoryField.Label" ), @"\d+" ).Value ); 1475 1476 string catId = pci.GetString( "Ecom:Product.CategoryField.Label" ).Replace( " Doctype", string.Empty ); 1477 string catLabel = pci.GetString( "Ecom:Product.CategoryField.Label" ).Replace( "Doctype", "Type" ); 1478 1479 LoopItem pdfLinkItem = pc.GetLoop( "ProductCategoryFields" ).FirstOrDefault( pcil => pcil.GetString( "Ecom:Product.CategoryField.Label" ) == catIdNew ); 1480 LoopItem pdfTextItem = pc.GetLoop( "ProductCategoryFields" ).FirstOrDefault( pcil => pcil.GetString( "Ecom:Product.CategoryField.Label" ) == catLabelNew ); 1481 1482 foreach ( LoopItem damn in pc.GetLoop( "ProductCategoryFields" ) ) 1483 { 1484 } 1485 1486 if ( pdfLinkItem != null && pdfTextItem != null && string.IsNullOrEmpty( pdfLinkItem.GetString( "Ecom:Product.CategoryField.Value" ) ) == false ) 1487 { 1488 resourcesList[ pci.GetString( "Ecom:Product.CategoryField.Value" ) ].Add( new 1489 { 1490 pdfLinkItem = pdfLinkItem.GetString( "Ecom:Product.CategoryField.Value" ), 1491 pdfTextItem = pdfTextItem.GetString( "Ecom:Product.CategoryField.Value" ) 1492 } ); 1493 } 1494 } 1495 } 1496 } 1497 } 1498 1499 1500 <h2 class="col-12 x">@Translate( "Resources", "Resources" )</h2> 1501 if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product:Field.DocumentationPdf.Value" ) ) ) 1502 { 1503 <div class="col-4 col-md-2 mb-4"> 1504 <a href="@GetString( "Ecom:Product:Field.DocumentationPdf.Value" )"> 1505 <img alt="" class="border col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product:Field.DocumentationPdf.Value" )&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1506 </a> 1507 <h4 class="mt-1 small">@GetString( "Ecom:Product:Field.PDFDocumentTitle.Value" )</h4> 1508 </div> 1509 } 1510 1511 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1512 { 1513 if ( kpv.Key == "SafetyDataSheets" ) 1514 { 1515 foreach ( dynamic item in kpv.Value ) 1516 { 1517 <div class="col-4 col-md-2 mb-4"> 1518 <a href="@item.pdfLinkItem"> 1519 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1520 </a> 1521 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1522 </div> 1523 } 1524 } 1525 } 1526 1527 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1528 { 1529 if ( kpv.Key == "Brochure" ) 1530 { 1531 foreach ( dynamic item in kpv.Value ) 1532 { 1533 <div class="col-4 col-md-2 mb-4"> 1534 <a href="@item.pdfLinkItem"> 1535 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1536 </a> 1537 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1538 </div> 1539 } 1540 } 1541 } 1542 1543 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1544 { 1545 if ( kpv.Key == "StyleChart" ) 1546 { 1547 foreach ( dynamic item in kpv.Value ) 1548 { 1549 <div class="col-4 col-md-2 mb-4"> 1550 <a href="@item.pdfLinkItem"> 1551 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1552 </a> 1553 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1554 </div> 1555 } 1556 } 1557 } 1558 1559 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1560 { 1561 if ( kpv.Key == "Certificates" ) 1562 { 1563 foreach ( dynamic item in kpv.Value ) 1564 { 1565 <div class="col-4 col-md-2 mb-4"> 1566 <a href="@item.pdfLinkItem"> 1567 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1568 </a> 1569 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1570 </div> 1571 } 1572 } 1573 } 1574 1575 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1576 { 1577 if ( kpv.Key == "TechnicalInformation" ) 1578 { 1579 foreach ( dynamic item in kpv.Value ) 1580 { 1581 <div class="col-4 col-md-2 mb-4"> 1582 <a href="@item.pdfLinkItem"> 1583 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1584 </a> 1585 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1586 </div> 1587 } 1588 } 1589 } 1590 1591 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1592 { 1593 if ( kpv.Key == "Image" ) 1594 { 1595 foreach ( dynamic item in kpv.Value ) 1596 { 1597 <div class="col-4 col-md-2 mb-4"> 1598 <a href="@item.pdfLinkItem"> 1599 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1600 </a> 1601 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1602 </div> 1603 } 1604 } 1605 } 1606 1607 foreach ( KeyValuePair< string, List< dynamic > > kpv in resourcesList ) 1608 { 1609 if ( kpv.Key == "SpecificationResource" ) 1610 { 1611 foreach ( dynamic item in kpv.Value ) 1612 { 1613 <div class="col-4 col-md-2 mb-4"> 1614 <a href="@item.pdfLinkItem"> 1615 <img alt="" class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@item.pdfLinkItem&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1616 </a> 1617 <h4 class="mt-1 small">@item.pdfTextItem</h4> 1618 </div> 1619 } 1620 } 1621 } 1622 1623 @sectionEnd() 1624 } 1625 1626 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.FloorTechnicalDocuments.TecDoc1.Value" ) ) ) 1627 { 1628 @sectionStart( 1629 contentClasses: "col-12 col-md-10 mx-auto pt-6 pb-3", 1630 sectionClasses: "e-section col-12 p-section-bg-white pdf-hidden pdf-page-break-avoid" 1631 ) 1632 <h2 class="col-12">@Translate("Technical Documents","Technical Documents")</h2> 1633 @:@foreach (var techDocs in GetLoop("TechnicalDocuments")) 1634 { 1635 <div class="col-4 col-md-2 mb-4"> 1636 <a href="@techDocs.GetValue("URL")"> 1637 <img alt="" class="col-12 p-0 border js-image-lazyloading image-lazyloading image-lazyload" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@techDocs.GetValue("URL")&amp;Format=jpg&amp;Width=300&amp;Height=440&amp;Quality=75"> 1638 </a> 1639 <h4 class="mt-1 small"><span class="text-primary">@techDocs.GetValue("Id")</span><br/> @techDocs.GetValue("Title")</h4> 1640 </div> 1641 } 1642 1643 @sectionEnd() 1644 } 1645 1646 1647 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Disclaimer.Value" ) ) ) 1648 { 1649 <section class="col-12 mx-auto p-section-bg-dark pdf-page-break-avoid py-6"> 1650 <div class="container-fluid"> 1651 <div class="row"> 1652 <div class="col-12 col-lg-6 col-md-10 offset-md-1 text-left"> 1653 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Disclaimer.Value" ) 1654 </div> 1655 </div> 1656 </div> 1657 </section> 1658 } 1659 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration1Text.Value" ) ) ) 1660 { 1661 <section class="col-12 col-lg-12 col-md-12 mx-auto p-section-bg-white pdf-page-break-avoid py-6"> 1662 <div class="container-fluid"> 1663 <div class="row"> 1664 <div class="col-10 mx-auto"> 1665 <div class="row"> 1666 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration1Text.Value" ) ) ) 1667 { 1668 <div class="col-12 col-md-4 col-sm-6"> 1669 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration1Image.Value" )&amp;Format=jpg&amp;Width=600&amp;Height=380&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1670 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration1Text.Value" ) 1671 </div> 1672 } 1673 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration2Text.Value" ) ) ) 1674 { 1675 <div class="col-12 col-md-4 col-sm-6"> 1676 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration2Image.Value" )&amp;Format=jpg&amp;Width=600&amp;Height=380&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1677 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration2Text.Value" ) 1678 </div> 1679 } 1680 @if ( !string.IsNullOrWhiteSpace( GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration3Text.Value" ) ) ) 1681 { 1682 <div class="col-12 col-md-4 col-sm-12"> 1683 <img class="col-12 image-lazyload image-lazyloading js-image-lazyloading p-0" data-src="/admin/public/getimage.ashx?Crop=0&amp;Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration3Image.Value" )&amp;Format=jpg&amp;Width=600&amp;Height=380&amp;Quality=75" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"> 1684 @GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration3Text.Value" ) 1685 </div> 1686 } 1687 </div> 1688 </div> 1689 </div> 1690 </div> 1691 </section> 1692 } 1693 1694 @if ( !string.IsNullOrEmpty( primaryGroupID ) ) 1695 { 1696 1697 <script type="application/ld+json"> 1698 { 1699 "@@context" : "http://schema.org", 1700 "@@type" : "Product", 1701 "category" : "@groupService.GetGroup(primaryGroupID).Name", 1702 "description" : "@GetString("Ecom:Product.LongDescription").StripHtml()", 1703 "mpn" : "@GetString("Ecom:Product.Number").StripHtml()", 1704 "name" : "@GetString("Ecom:Product.Name").StripHtml()", 1705 "image" : "@( GetGlobalValue( "Global:Request.Scheme" ) + "://" + GetGlobalValue( "Global:Request.Host" ) + GetString("Ecom:Product.ImageLarge.Clean") )", 1706 "offers" : { 1707 "@@type" : "Offer", 1708 "availability" : "http://schema.org/InStock", 1709 "price" : "@GetDouble("Ecom:Product.Price.Price")", 1710 "priceCurrency" : "@EcomContext.Currency.Code" 1711 } 1712 } 1713 </script> 1714 1715 } 1716 1717 <code class="js-e-breadcrumb-item-append" data-link="@HttpUtility.HtmlAttributeEncode( ProductService.Instance.GetProductLink( GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), GetString( "Ecom:Product.ID" ) ) )" data-text="@HttpUtility.HtmlAttributeEncode( GetString( "Ecom:Product.Name" ) )"></code> 1718 1719 </div> 1720 </div> 1721 1722 @if ( showTaxDisclaimerModal ) 1723 { 1724 <!-- MODAL --> 1725 <div aria-hidden="true" aria-labelledby="feesModalCenterTitle" class="fade modal" id="disclaimerFeesModal" role="dialog" tabindex="-1"> 1726 <div class="modal-dialog modal-dialog-centered" role="document"> 1727 <div class="modal-content"> 1728 <div class="modal-header"> 1729 <h4 class="modal-title" id="exampleModalLongTitle"> 1730 @Translate( "eCom Product - Fees Modal Heading - Modal" ) 1731 </h4> 1732 <button aria-label="Close" class="close" data-dismiss="modal" type="button"> 1733 <span aria-hidden="true">×</span> 1734 </button> 1735 </div> 1736 <div class="modal-body"> 1737 <div class="col-12 p p-imagetext p-imagetext-tb p-width-auto" id="18082"> 1738 <div class="row"> 1739 <div class="col-12 p-txt-container"> 1740 @Translate( "eCom Product - Fees Modal Information - Modal" ) 1741 </div> 1742 </div> 1743 </div> 1744 </div> 1745 <div class="modal-footer"> 1746 <button class="btn btn-success" data-dismiss="modal" type="button">@Translate( "eCom Product - Fees Modal Button - Modal", "OK" )</button> 1747 </div> 1748 </div> 1749 </div> 1750 </div> 1751 } 1752 1753 1754 <script> 1755 dataLayer.push({ 1756 event: 'view_item', 1757 ecommerce: { 1758 items: [ 1759 { 1760 item_name: "@GetString( "Ecom:Product.Name" )", 1761 item_id: "@GetString( "Ecom:Product.ID" )", 1762 item_category: "@groupService.GetGroup(primaryGroupID).Name", 1763 } 1764 ] 1765 } 1766 }); 1767 </script> 1768 @sectionStart()

Healthy flooring

Junckers floors and woodcare
carry the Danish Indoor Climate label

Wellbeing

Underfloor heating

Elegant solution and design freedom
without pipes and heaters

More information 

How to install

The clip-, glue-, or batten system
- which do you prefere?

Installation methods

Try the Junckers Carbon Calculator

Find the most environmentally
friendly flooring solution

Compare footprint 

Green credentials

EPDs, accreditation towards DGNB, LEED
and BREEAM, ISO 14001 + 50001 certified

More information 

Responsible forestry

Junckers floors are chain of custody
certified through FSC® and PEFC

Certified timber 

 

East Coast Office
Junckers Hardwood
270 Lafayette Street #1200
New York 10012 U.S.
Tel: 212-334-8060   

West Coast Office
(not open to the public)
Junckers Hardwood, Inc.
5101 E. La Palma Avenue
Suite 202-E
Anaheim Hills, CA 92807

keyboard_arrow_up



picture_as_pdf