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">×</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&Image={0}&Format=jpg&Width=400&Height=225&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&Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.ClassicImage.Value" )&Format=jpg&Width=600&Height=350&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&Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.HarmonyImage.Value" )&Format=jpg&Width=600&Height=350&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&Image=@GetString( "Ecom:Product.CategoryField.ProductFloorProductVariants.VariationImage.Value" )&Format=jpg&Width=600&Height=350&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&Image=@GetString( "Ecom:Product:Field.DocumentationPdf.Value" )&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@item.pdfLinkItem&Format=jpg&Width=300&Height=440&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&Image=@techDocs.GetValue("URL")&Format=jpg&Width=300&Height=440&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&Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration1Image.Value" )&Format=jpg&Width=600&Height=380&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&Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration2Image.Value" )&Format=jpg&Width=600&Height=380&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&Image=@GetString( "Ecom:Product.CategoryField.ProductsCategoryGenerel.Inspiration3Image.Value" )&Format=jpg&Width=600&Height=380&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()
Try the Junckers Carbon Calculator
Find the most environmentally
friendly flooring solution
Green credentials
EPDs, accreditation towards DGNB, LEED
and BREEAM, ISO 14001 + 50001 certified
Responsible forestry
Junckers floors are chain of custody
certified through FSC® and PEFC