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

Et sundt valg

Junckers gulve og træplejeprodukter
bærer det danske indeklimamærke

Godt indeklima

Velegnet til gulvvarme

Elegant løsning med design frihed
uden rør og radiatorer

Mere information 

Nem installering

Bøjle-, lim- eller strøsystem -
Hvilken løsning passer til dig?

Installationsmetoder

Prøv Junckers coberegner

Find den mest
miljøvenlige gulvløsning

Beregn Co2 aftryk

Bæredygtigt byggeri

Vi dokumenterer vores gulves miljøpåvirkning med
EPD'er og ISO 14001 + 50001 certificering

Mere information 

Ansvarligt skovbrug

Junckers gulve består af bæredygtig træ
og er certificeret via FSC® og PEFC

Certificeret træ

 
keyboard_arrow_up



picture_as_pdf