De prijzen in de VILLA-configurator zijn richtprijzen – vraag de definitieve prijs op bij uw lokale dealer.
Error executing template "Designs/isabella/eCom/Product/isabella-villa-and-camplet.cshtml" System.ArgumentNullException: Value cannot be null. Parameter name: original at Co3.Isabella.Dw.Models.FrontEnd.Ecommerce.IsabellaProductImageUrl..ctor(String original, Int32 type, Int32 groupId) in C:\git\isabella\Co3.Isabella.Dynamicweb\Models\FrontEnd\Ecommerce\IsabellaProductImageUrl.cs:line 41 at Co3.Isabella.Dw.Services.ProductService.GetImagePrimary(Product product) in C:\git\isabella\Co3.Isabella.Dynamicweb\Services\ProductService.cs:line 287 at CompiledRazorTemplates.Dynamic.RazorEngine_219b4db3ccf24170b5d459f14cc15362.<>c__DisplayClass8_0.<ProductlistItem>b__0(TextWriter __razor_helper_writer) in F:\dynamicweb.net\Solutions\isabella.espresso4.dk\Files\Templates\Designs\isabella\eCom\Product\isabella-villa-and-camplet.cshtml:line 223 at CompiledRazorTemplates.Dynamic.RazorEngine_219b4db3ccf24170b5d459f14cc15362.<>c__DisplayClass7_0.<ProductRelatedProducts>b__0(TextWriter __razor_helper_writer) in F:\dynamicweb.net\Solutions\isabella.espresso4.dk\Files\Templates\Designs\isabella\eCom\Product\isabella-villa-and-camplet.cshtml:line 193 at CompiledRazorTemplates.Dynamic.RazorEngine_219b4db3ccf24170b5d459f14cc15362.Execute() in F:\dynamicweb.net\Solutions\isabella.espresso4.dk\Files\Templates\Designs\isabella\eCom\Product\isabella-villa-and-camplet.cshtml:line 1787 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 Co3.Espresso.Website.TemplateBases.Pages.PageBase 2 3 @using System.Security.Cryptography 4 @using System.Text.RegularExpressions 5 @using Co3.Espresso.Website.Services 6 @using Dynamicweb.Ecommerce.Products 7 @using Dynamicweb.Frontend 8 @using Co3.Isabella.Dw.Models.FrontEnd.Ecommerce 9 @using Dynamicweb.Ecommerce 10 @using Dynamicweb.Ecommerce.Common 11 @using Newtonsoft.Json 12 @using System.Web 13 @using Co3.Espresso.Base.Extensions 14 @using Co3.Espresso.Base.Models 15 @using Co3.Isabella.Dw.Services 16 @using Dynamicweb.Content.Items 17 @using Dynamicweb.Ecommerce.Products.Categories 18 @using eProductService = Co3.Espresso.Website.Services.ProductService 19 @using ProductService = Co3.Isabella.Dw.Services.ProductService 20 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 21 22 @using System.Globalization 23 @using System.Security.Cryptography.X509Certificates 24 @using System.Web.Razor.Parser.SyntaxTree 25 @using Co3.Espresso.Base.Extensions 26 @using Co3.Espresso.Website.Models.FrontEnd 27 @using Co3.Espresso.Website.Services 28 @using Co3.Isabella.Dw.Models.FrontEnd.Ecommerce 29 @using Dynamicweb.Content 30 @using Dynamicweb.Ecommerce.Products 31 @using Dynamicweb.Frontend 32 @using Dynamicweb.Rendering 33 @using Dynamicweb.Rendering.Translation 34 @using Dynamicweb.SystemTools 35 @using EcomContext = Dynamicweb.Ecommerce.Common.Context 36 @using eProductService = Co3.Espresso.Website.Services.ProductService 37 @using Page = Dynamicweb.Content.Page 38 @using PageService = Dynamicweb.Content.PageService 39 40 @functions { 41 42 public string getCountryCodeFromArea(Area area) 43 { 44 RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID ); 45 return regionInfo.TwoLetterISORegionName; 46 } 47 48 public string getCheckoutSetup(string shopType = "") 49 { 50 bool isB2bCheckout = PageView.Current().User != null; 51 if (isB2bCheckout) 52 { 53 return "shipping,customer,approve"; 54 } else if (shopType == "B2C") 55 { 56 return "shipping,payment,approve"; 57 } else if (shopType == "Outlet") 58 { 59 return "shipping,customer,payment,approve"; 60 } 61 62 return "customer,approve"; 63 } 64 65 public static string GetStandardCollapseToggleTextExpand() 66 { 67 return "Se mere"; 68 } 69 70 public static string GetStandardCollapseToggleTextCollapse() 71 { 72 return "Se mindre"; 73 } 74 75 public string getModelTypeLink() 76 { 77 bool isUserAuthenticated = PageView.Current().User != null; 78 string eComCountryCode = PageView.Current().Area.Item[ "EcommerceCountryCode" ] != null ? PageView.Current().Area.Item[ "EcommerceCountryCode" ].ToString() : ""; 79 string returnValue = string.Empty; 80 81 if ( isUserAuthenticated == false ) 82 { 83 if ( string.IsNullOrEmpty(eComCountryCode) == false) 84 { 85 { 86 returnValue = string.Format( "Ecom:Product.CategoryField.ModelType.ModelTypeLink_{0}.Value", eComCountryCode ); 87 } 88 } 89 else 90 { 91 returnValue = "Ecom:Product.CategoryField.ModelType.ModelTypeLink.Value"; 92 } 93 } 94 else 95 { 96 if ( string.IsNullOrEmpty(eComCountryCode) == false) 97 { 98 { 99 returnValue = string.Format( "Ecom:Product.CategoryField.ModelType.ModelTypeLinkB2B_{0}.Value", eComCountryCode ); 100 } 101 } 102 else 103 { 104 returnValue = "Ecom:Product.CategoryField.ModelType.ModelTypeLinkB2B.Value"; 105 } 106 } 107108 return returnValue; 109 } 110111 } 112113 @helper ProductDescription(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null) 114 { 115 if ( string.IsNullOrEmpty( content ) == false ) 116 { 117 ClassList headingClassList = new ClassList(); 118 headingClassList.AddClasses( "col-12" ); 119 ClassList contentClassList = new ClassList(); 120 contentClassList.AddClasses( "col-12" ); 121122 @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand ) 123124 if ( string.IsNullOrEmpty( heading ) == false ) 125 { 126 <div class="@headingClassList"> 127 <h2>@heading</h2> 128 </div> 129 } 130 <div class="@contentClassList"> 131 @content 132 </div> 133134 @sectionEnd() 135 } 136 } 137138139 @helper ProductVideo(string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null) 140 { 141 if ( string.IsNullOrEmpty( videoURL ) == false ) 142 { 143 ClassList headingClassList = new ClassList(); 144 headingClassList.AddClasses( "col-12" ); 145 ClassList contentClassList = new ClassList(); 146 contentClassList.AddClasses( "col-12" ); 147148149 @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) 150151 if ( string.IsNullOrEmpty( heading ) == false ) 152 { 153 <div class="@headingClassList"> 154 <h2>@heading</h2> 155 </div> 156 } 157158 <div class="@contentClassList"> 159 <div class="embed-responsive embed-responsive-16by9 mb-2"> 160 <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 161 </div> 162 </div> 163 @sectionEnd() 164 } 165 } 166167 @helper ProductRelatedProducts(string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null, 168 IEnumerable< Product > productLoop = null) 169 { 170 if ( productLoop != null && productLoop.Any() == true ) 171 { 172 ClassList headingClassList = new ClassList(); 173 headingClassList.AddClasses( "col-12" ); 174 ClassList contentClassList = new ClassList(); 175 contentClassList.AddClasses( "col-12" ); 176177 @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand ) 178179 if ( string.IsNullOrEmpty( heading ) == false ) 180 { 181 <div class="@headingClassList"> 182 <h4 class="isabella-text-bullets-left mb-3">@heading</h4> 183 </div> 184 } 185 <div class="@contentClassList"> 186 <div class="e-products mb-2"> 187 <div class="row"> 188 @{ 189 string productlistItemClassList = "col-12 col-sm-6 col-md-3 col-lg-3 col-xl-3"; 190 } 191 @foreach ( Product product in productLoop.Where(p => p.Groups.Any(g => g.ShopId.Equals("SHOP1")) && (bool) p.GetCategoryValue( "ProductsGeneral", "PIMActive" ) != false && (bool) p.ShowInProductList && p.Active) ) 192 { 193 @ProductlistItem(product, productlistItemClassList) 194 } 195 </div> 196 </div> 197 </div> 198199 @sectionEnd() 200 } 201 } 202203204 @helper ProductlistItem(Product product, string productlistItemClassList = null, string isModelProductList = null) 205 { 206 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService(); 207 string shopType = PageView.Current().Area.Item["ShopType"]?.ToString(); 208 string productLink = eProductService.Instance.GetProductLink( product.GetDefaultGroupByShopId( product.DefaultShopId ).Id, product.Id, product.VariantId ); 209210211 productLink = SearchEngineFriendlyURLs.GetFriendlyUrl( productLink ); 212213 if (shopType == "Outlet") 214 { 215 Page page = new PageService().GetPageByNavigationTag(PageView.Current().AreaID, "outletdisplaypage"); 216 if (page != null) 217 { 218 productLink = SearchEngineFriendlyURLs.GetFriendlyUrl( $"Default.aspx?ID={page.ID}&productId={product.Id}" ); 219 } 220221 } 222223 IsabellaProductImageUrl primaryImage = Co3.Isabella.Dw.Services.ProductService.Instance.GetImagePrimary(product); 224 List<IsabellaProductImageUrl> detailsImages = Co3.Isabella.Dw.Services.ProductService.Instance.GetImageDetails(product); 225 string detailsImage = detailsImages?.FirstOrDefault( pd => pd.Type == 0 && pd.GroupId == 4 )?.Medium ?? string.Empty; 226227 //string productlistDetailImage = product.Details.FirstOrDefault( pd => pd.Type == 0 && pd.GroupId == 4 )?.Value; 228229230231 string image = "/Files/Templates/Designs/isabella/_assets/img/NoImage.gif"; 232233 if (primaryImage != null) 234 { 235 image = primaryImage.Medium; 236 } 237238 if ( product != null ) 239 { 240 dynamic productData = new 241 { 242 id = product.Id, 243 url = productLink, 244 number = product.Number, 245 name = product.Name, 246 imageDefault = image, 247 price = Co3.Isabella.Dw.Services.ProductService.Instance.GetPrice( product.Id ).Format(), 248 priceClean = Co3.Isabella.Dw.Services.ProductService.Instance.GetPrice( product.Id ).Price, 249 productIntroText = product.GetCategoryValue( "ProductsGeneral", "ProductIntroText" )?.ToString(), 250 news = product.GetCategoryValue( "ProductsGeneral", "News" )?.ToString(), 251 productType = product.GetCategoryValue( "ProductsGeneral", "ProductType" )?.ToString(), 252 isModelProductList = isModelProductList, 253 productlistDetailImage = detailsImage, 254 shopType 255 }; 256257 <div class="@productlistItemClassList"> 258 <div class="border-1 card mb-6"> 259 <a href="@productData.url"> 260 @if ( productData.isModelProductList == "True" ) 261 { 262 <img src="@productData.productlistDetailImage" alt="@productData.name @productData.productType" class="col-12 p-0"> 263 } 264 else 265 { 266 <img src="@productData.imageDefault" alt="@productData.name @productData.productType" class="col-12 p-0"> 267 } 268 @if ( productData.news == "True" ) 269 { 270 <div class="isabella-product-item-news"> 271 @Dynamicweb.Rendering.Translation.Translation.GetTranslation( "Ecom Product - News Badge - Text" ) 272 </div> 273 } 274 </a> 275 <div class="card-body p-1 p-lg-3"> 276 <h4 class="e-products-item-name mb-0"> 277 <a href="@productData.url"> 278 @productData.name 279 </a> 280 </h4> 281282 </div> 283 </div> 284 </div> 285 } 286 } 287288289 @helper sectionStart(string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null) 290 { 291 sectionId = string.IsNullOrEmpty( sectionId ) ? Guid.NewGuid().ToString( "N" ) : sectionId; 292 ClassList sectionClassList = new ClassList(); 293 sectionClassList.AddClasses( sectionClasses ); 294 ClassList contentClassList; 295296 if ( contentClasses == null ) 297 { 298 contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item ); 299 } 300 else 301 { 302 contentClassList = new ClassList(); 303 contentClassList.AddClasses( contentClasses ); 304 } 305306 // TODO: Split collapse logic into separate helper function. 307 string collapseId = Guid.NewGuid().ToString( "N" ); 308 ClassList collapseToggleClassList = new ClassList(); 309 if ( sectionCollapse ) 310 { 311 sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" ); 312 collapseToggleClassList.AddClasses( contentClasses ); 313 collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" ); 314 contentClassList.AddClasses( "p-section-collapse-content collapse is-md" ); 315 } 316317 @:<section class="@sectionClassList" id="@sectionId"> 318 @:<div class="container-fluid"> 319 @:<div class="row"> 320321 // TODO: Split collapse logic into separate helper function. 322 if ( sectionCollapse ) 323 { 324 <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId"> 325 <button class="btn btn-primary p-section-collapse-toggle-btn" type="button"> 326 <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i> 327 </button> 328 <small class="h4 p-section-collapse-toggle-text" data-expand-text="@( string.IsNullOrEmpty( collapseToggleTextExpand ) ? GetStandardCollapseToggleTextExpand() : collapseToggleTextExpand )" data-collapse-text="@( string.IsNullOrEmpty( collapseToggleTextCollapse ) ? GetStandardCollapseToggleTextCollapse() : collapseToggleTextCollapse )"></small> 329 </div> 330 } 331332 @:<div class="@contentClassList" id="@collapseId"> 333 @:<div class="row"> 334 } 335336 @helper sectionEnd() 337 { 338 @:</div> 339 @:</div> 340 @:</div> 341 @:</div> 342 @:</section> 343 } 344345346347348349 @{ 350 bool isUserAuthenticated = PageView.Current().User != null; 351 string userDealerType = string.Empty; 352 string variantId = HttpContext.Current.Request[ "VariantID" ] ?? GetString("Ecom:Product.VariantID"); 353 IsabellaProduct isabellaProduct = ProductService.Instance.GetIsabellaProduct(GetString("Ecom:Product.ID"), variantId, GetString("Ecom:Product.DefaultVariantComboID")); 354 string OrderContext = PageView.Current().Area.Item[ "ContextCart" ]?.ToString(); 355 string shopType = PageView.Current().Area.Item["ShopType"]?.ToString(); 356357 string jsDataPropertyPath = isabellaProduct.Id; 358359 object noBuyB2BandB2C = Espresso.Page.Area.Item[ "EcommerceNoBuyB2CB2B" ]; 360361 bool isHybridShop = (bool)noBuyB2BandB2C && isUserAuthenticated && shopType == "Hybrid"; 362363 bool userCanBuy = false; 364365 bool isIsabellaProduct = GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.IsabellaProduct.Value" ); 366 bool isCampletProduct = GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.CampletProduct.Value" ); 367 bool isVillaProduct = GetString("Ecom:Product.CategoryField.ProductsGeneral.ProductType.Value") == "Villa"; 368 bool isAccessorieProduct = GetBoolean( "Ecom:Product.CategoryField.IsAccessory.VillaProduct.Value" ); 369370 if ( isUserAuthenticated ) 371 { 372 Item item = null; 373374 if (!string.IsNullOrEmpty(PageView.Current().User.ItemType)) 375 { 376 item = Dynamicweb.Services.Items.GetItem( PageView.Current().User.ItemType, PageView.Current().User.ItemId ); 377 } 378379 if ( item != null && item.ContainsKey( "Type" ) && item[ "Type" ] != null ) 380 { 381 userDealerType = item[ "Type" ].ToString(); 382 } 383384 if ( string.IsNullOrEmpty( userDealerType ) ) 385 { 386 userDealerType = string.Empty; 387 } 388389390 if ( isIsabellaProduct && userDealerType.Contains( "Isabella" ) == true ) 391 { 392 userCanBuy = true; 393 } else if ( isCampletProduct && userDealerType.Contains( "Camplet" ) == true ) 394 { 395 userCanBuy = true; 396 } else if ( isVillaProduct && userDealerType.Contains( "Villa" ) == true ) 397 { 398 userCanBuy = true; 399 } 400 } 401 else 402 { 403 userCanBuy = true; 404 } 405406 string productHeadline = eProductService.Instance.GetName(GetString("Ecom:Product.ID")); 407 string productPrice = Co3.Isabella.Dw.Services.ProductService.Instance.GetPrice(GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID")).Price.ToJavaScript(); 408 string productDescription = Regex.Replace(GetString("Ecom:Product.CategoryField.ProductsGeneral.ProductIntroText.Value"), @"<[^>]*>", String.Empty); 409 string productImage = GetString("Ecom:Product.ImageDefault.Clean"); 410411 Dynamicweb.Ecommerce.Products.ProductService dwProductService = new Dynamicweb.Ecommerce.Products.ProductService(); 412 Product product = dwProductService.GetProductById(GetString("Ecom:Product.ID"), GetString("Ecom:Product.VariantID"), true); 413 IEnumerable< Product > parentProducts = Co3.Isabella.Dw.Services.ProductService.Instance.GetRelatedParentProducts(product); 414415 string howItWorksPage = Espresso.Page.Area.Item[ "Villa_Camplet_HowItWorks" ]?.ToString().ToLower().Replace("default.aspx?id=", ""); 416417 @* Global Image modal variable used in part image carousel *@ 418 string isActive = string.Empty; 419420 string modelTypeLink = getModelTypeLink(); 421422 dynamic JSON = new 423 { 424 pdfData = new 425 { 426 colors = new List< dynamic >(), 427 frameMatch = new List< dynamic >(), 428 miscFrameMaterial = new List<dynamic>(), 429 frameMaterial = new List<dynamic>(), 430 materials = new List< dynamic >(), 431 measures = new List< dynamic >(), 432 } 433 }; 434435 dynamic isabellaExtendPdfData = new 436 { 437 currency = Context.Currency.Code, 438 logo = "Files/Images/isabella/signbuilder/signbuilder-logo.png", 439 campletLogo = "Files/Images/isabella/Products/Camp-let/Camp-let.png", 440 noBuyB2BandB2C = noBuyB2BandB2C, 441 deliveryCost = new 442 { 443 label = string.IsNullOrEmpty( GetString("Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Value") ) == false ? GetString("Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Label") : string.Empty, 444 value = GetString("Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Value") 445 }, 446 translations = new 447 { 448 totalPrice = Translate("PDF - Total Price - Text", "Total"), 449 specsHeader = Translate("PDF - Villa Variant Specs - Header", "Specifikationer"), 450 Fronts = Translate("PDF - Villa Variant Specs - Fronts", "Fronter"), 451 Length = Translate("PDF - Villa Variant Specs - Length", "Længde"), 452 VillaTotalLength = Translate("PDF - Villa Variant Specs - VillaTotalLength", "Total længde"), 453 Depth = Translate("PDF - Villa Variant Specs - Depth", "Dybde"), 454 Height = Translate("PDF - Villa Variant Specs - Height", "Højde med vogn"), 455 LengthOfAccessories = Translate("PDF - Villa Variant Specs - LengthOfAccessories", "LengthOfAccessories") 456 } 457 }; 458459 string formClassList = "js-e-product-form"; 460 string sendToDealerType = "Camplet"; 461 if (isUserAuthenticated == false ) 462 { 463 formClassList = "js-e-product-form js-i-context-cart-product-form"; 464 } 465 object findDealerLink = Espresso.Page.Area.Item[ "FindDealer" ].ToString(); 466467 bool useSendToDealer = false; 468 if (isUserAuthenticated == false) 469 { 470 if (isVillaProduct) 471 { 472 sendToDealerType = "Villa"; 473 } 474 if (isCampletProduct || isVillaProduct) 475 { 476 useSendToDealer = true; 477 } 478 } 479 } 480481 @sectionEnd() 482483 <div class="e-product js-e-product js-isabella-villa-and-camplet-pdf" data-product-id="@isabellaProduct.Id" data-has-variants="@isabellaProduct.HasVariants.ToString().ToLower()" data-variant-id="@isabellaProduct.VariantId" > 484 <form class="@formClassList" data-dealer-type="@sendToDealerType"> 485 <input name="CartCmd" type="hidden" value="addmulti"> 486 <input name="Redirect" type="hidden" value="false"> 487 <input name="ProductLoopCounter0" type="hidden" value="0"> 488 <input name="ProductID0" type="hidden" value="@isabellaProduct.Id"> 489 <input name="VariantID0" type="hidden" value="@isabellaProduct.VariantId"> 490 <input name="Name" type="hidden" value="@isabellaProduct.Name"> 491 <input name="Number" type="hidden" value="@isabellaProduct.Number"> 492 <input name="Price" type="hidden" value="@isabellaProduct.bomPrice.Price.ToJavaScript()"> 493 <input name="CurrencyCode" type="hidden" value="@Context.Currency.Code"> 494 <input name="Quantity0" type="hidden" value="1"> 495496497498 @if ( useSendToDealer ) { 499 <input name="OrderContext" type="hidden" value="Camplet"> 500 <input name="QuoteType" type="hidden" value="@sendToDealerType" > 501 } 502 else 503 { 504 <input name="OrderContext" type="hidden" value="@OrderContext"> 505 } 506507508 @if ( isabellaProduct.ImagePrimary != null ) 509 { 510 <section class="align-items-center e-reveal-done e-section e-section-height-md js-e-section mb-6 p p-banner p-banner-gradient-disabled pb-auto pt-auto" id="11589"> 511 <div class="bg-center-middle e-product-image js-i-villa-and-camplet-image-large p-img-container" style="background-image: url('@isabellaProduct.ImagePrimary.Large')" title=""></div> 512 <a class="hidden-sm-down js-p-banner-next-section-link p-banner-next-section-link" href=""> 513 <i class="material-icons p-banner-next-section-link-icon">keyboard_arrow_down</i> 514 </a> 515 </section> 516517 } 518519520 @sectionStart(sectionClasses: "e-section pb-2", contentClasses: "col-12") 521522 <div class="col-12"> 523 <h1 class="e-product-name h2 js-e-product-name js-i-villa-and-camplet-name"> 524 @isabellaProduct.Name 525 </h1> 526 <div class="row"> 527 <div class="col-12 col-md-7"> 528 <div class="e-product-description-long js-e-product-description-long mb-2"> 529 @isabellaProduct.DescriptionLong 530 </div> 531 </div> 532 </div> 533 <div class="row"> 534 <div class="col-12 col-md-7"> 535 <div class="bg-septenary-opacity-low p-2"> 536 @if ( GetString("Ecom:Product.CategoryField.ProductsGeneral.CampletProduct.Value") == "True" ) 537 { 538 <h2>@Translate("Camp-let - Camp-let - Heading", "Camp-let")</h2> 539 } 540 else 541 { 542 <h2>@Translate("Villa - Byg dit telt - Heading", "Byg dit telt")</h2> 543 } 544545 @if ( isabellaProduct.VariantGroups.Any() ) 546 { 547 foreach ( KeyValuePair< string, IsabellaVariantGroup > variantGroup in isabellaProduct.VariantGroups ) 548 { 549 @* Variant form groups and label - START *@ 550 <div class="form-group isabella-form-variant-form-group-custom-control js-e-product-form-variant-group" data-variant-group-id="@variantGroup.Value.Id"> 551552 @if ( variantGroup.Value.Id == "VARGRP26" ) 553 { 554 @* Villa front modules - START *@ 555 <label class="font-weight-bold form-control-label"> 556 @variantGroup.Value.Name 557 </label> 558 <p class="form-text"> 559 @variantGroup.Value.Description 560 </p> 561 <div class="col-12 p-0"> 562 <div class="row"> 563 @foreach ( KeyValuePair< string, IsabellaVariantOption > variantOption in variantGroup.Value.Options ) 564 { 565 string variantInputFieldId = string.Format("{0}_{1}_{2}", isabellaProduct.Id, variantGroup.Value.Id, variantOption.Value.Id); 566 <div class="col-12 col-sm-6 js-i-villa-and-camplet-variant-group-option mb-2"> 567 <label class="custom-control h-100 p-2" for="@variantInputFieldId"> 568 <input type="radio" name="@variantGroup.Value.Id" class="custom-control-input js-e-product-form-variant-group-input required" id="@variantInputFieldId" value="@variantOption.Value.Id" @(variantOption.Value.IsSelected ? "checked" : string.Empty)> 569 <span class="custom-control-indicator h-100 position-absolute w-100"> </span> 570 <img class="col-12" src="@variantOption.Value.Image"> 571 @*<span class="custom-control-image" style="background-image: url('@variantOption.Value.Image')"></span>*@ 572 <span class="custom-control-description d-none"> 573 @variantOption.Value.Properties[ "Description" ]<br /> 574 @variantGroup.Value.Id @variantOption.Value.Id</span> 575 </label> 576 </div> 577 } 578 </div> 579 </div> 580 @* Villa front modules - END *@ 581 } 582 else 583 { 584 string variantInputFieldId = string.Format("{0}_{1}", isabellaProduct.Id, variantGroup.Value.Id); 585586587 @* Villa length & Villa porch - START *@ 588589 <label class="font-weight-bold form-control-label" for="@variantInputFieldId"> 590 @variantGroup.Value.Name 591 @if ( !string.IsNullOrEmpty(variantGroup.Value.Description) ) 592 { 593 <i class="material-icons material-icons-large ml-2 p-0 text-muted" data-toggle="popover" data-trigger="click hover focus" data-content="@HttpUtility.HtmlAttributeEncode(variantGroup.Value.Description)">info</i> 594 } 595 </label> 596 if (isVillaProduct) 597 { 598 <select class="form-control js-e-product-form-variant-group-input required" data-variant-group-id="@variantGroup.Value.Id" name="@variantGroup.Value.Id" id="@variantInputFieldId"> 599 @foreach ( KeyValuePair< string, IsabellaVariantOption > variantOption in variantGroup.Value.Options ) 600 { 601 <option value="@variantOption.Value.Id" @(variantOption.Value.IsSelected ? "selected" : string.Empty)>@variantOption.Value.Name</option> 602 } 603 </select> 604 } 605 else if(isCampletProduct) 606 { 607 <select class="form-control js-e-product-form-variant-group-input required" data-variant-group-id="@variantGroup.Value.Id" name="@variantGroup.Value.Id" id="@variantInputFieldId"> 608 @foreach ( KeyValuePair< string, IsabellaVariantOption > variantOption in variantGroup.Value.Options ) 609 { 610 KeyValuePair<string, IsabellaProduct> optionProduct = isabellaProduct.VariantCombinations.FirstOrDefault(vc => vc.Key == variantOption.Key); 611 Product dwProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById(optionProduct.Value.Id, optionProduct.Value.VariantId, Context.LanguageID); 612 if (dwProduct.ShowInProductList) 613 { 614 <option value="@variantOption.Value.Id" @(variantOption.Value.IsSelected ? "selected" : string.Empty)>@variantOption.Value.Name</option> 615 } 616617 } 618 </select> 619 } 620621622623 @* Villa length & Villa porch - END *@ 624 } 625626 </div> 627 @* Variant form groups and label - END *@ 628 } 629 } 630 </div> 631 <div class="bg-septenary-opacity-low p-2"> 632 <div class="border-top isabella-product-form-heading py-1" id="isabella-product-form-heading-addons"> 633 <h4 class="mb-0"> 634 <a aria-controls="isabella-product-form-collapse-addons" aria-expanded="true" class="collapsed h3 isabella-product-form-heading-collapse" data-target="#isabella-product-form-collapse-addons" data-toggle="collapse"> 635 @Translate("eCom Product - Choose Accessory - Heading","Vælg tilbehør") 636 <i class="order-last p-accordion-toggle-icon-img"> </i> 637 </a> 638 </h4> 639 </div> 640 <div aria-expanded="false" aria-labelledby="isabella-product-form-heading-addons" class="collapse" id="isabella-product-form-collapse-addons"> 641642 <div class="flex-table js-i-villa-and-camplet-acc isabella-form-variant-form-group-custom-control" role="rowgroup"> 643 <script id="js-e-handlebars-tmpl-villa-and-camplet-acc" type="text/x-handlebars-template"> 644 {{#if campletProduct}} 645 {{#each products}} 646 <div class="col-6 mb-2 js-i-villa-and-camplet-variant-group-option"> 647 <label class="bg-white custom-control h-100 p-2 d-block" for="{{id}}"> 648 <input type="checkbox" name="{{id}}" class="custom-control-input js-e-camplet-product-related-form-input" id="{{id}}" value="{{id}}"> 649 <span class="custom-control-indicator h-100 position-absolute w-100"> </span> 650 <img class="col-12 mb-2" src="{{image}}"> 651 <span class="custom-control-description col-12 p-0"> 652 <span class="font-weight-bold">{{name}}</span> 653 @if (!isHybridShop) 654 { 655 <span class="@Co3.Isabella.Dw.Services.ProductService.Instance.GetNoBuyB2CandB2B()"><br />{{{price}}}</span><br /> 656 } 657 else 658 { 659 <span ><br />{{{price}}}</span><br /> 660 } 661662 <span><a href="{{link}}" target="_blank" rel="noreferrer noopener">@Translate("eCom Villa Camplet Product - Product Link - Text","Se detaljer")</a></span> 663 </span> 664 <div class="d-none js-isabella-product-villa-and-camplet-acc-row"> 665 <input id="ProductID{{counter @@index}}" type="hidden" value="{{id}}" name="ProductID{{counter @@index}}"> 666 <input id="VariantID{{counter @@index}}" name="VariantID{{counter @@index}}" type="hidden" value="{{variantId}}"> 667 <input id="ProductLoopCounter{{counter @@index}}" name="ProductLoopCounter{{counter @@index}}" type="hidden" value="{{counter @@index}}"> 668 <input id="UnitID{{counter @@index}}" name="UnitID{{counter @@index}}" type="hidden" value=""> 669 <input class="js-acc-product-id" type="hidden" value="{{id}}"> 670 <input class="js-acc-product-variantid" type="hidden" value="{{variantId}}"> 671 <input class="js-acc-product-name" type="hidden" value="{{name}}"> 672 <input class="form-control text-right js-isabella-colli-quanitity js-isabella-quanitity" name="Quantity{{counter @@index}}" type="text" value="0" data-rule-digits="true" data-price="{{priceClean}}"> 673 </div> 674 </label> 675 </div> 676 {{/each}} 677 {{else}} 678 {{#each groups as |group|}} 679 <div class="flex-row first w-100"> 680 <div class="flex-table header" role="rowgroup"> 681 <div class="first flex-row w-50" role="columnheader"> 682 <h3 class="mb-0">{{group.name}}</h3> 683 </div> 684 @if (!isHybridShop) 685 { 686 <div class="flex-row w-30 font-weight-bold" role="columnheader">@Translate("eCom Product - Add To Cart Form Table - Price Text", "Pris")</div> 687 <div class="flex-row w-20 font-weight-bold" role="columnheader">@Translate("eCom Product - Add To Cart Form Table - Quantity Text", "Antal")</div> 688 } 689 else 690 { 691 <div class="flex-row w-30 font-weight-bold" role="columnheader">@Translate("eCom Product - Add To Cart Form Table - Recommended Retail Price Text", "Vejl. Pris")</div> 692693 } 694695 </div> 696 </div> 697 {{#each group.products}} 698 <div class="flex-row first w-50 align-self-center " role="cell"> 699700 {{#unless image}} 701 {{name}} 702 {{else}} 703 <span class="text-with-image-popover" data-rel="image-popover" data-placement="right" data-content="<img style='max-width:100%;' src='{{image}}'>">{{name}}</span> 704 {{/unless}} 705 </div> 706 <div class="flex-row w-30 align-self-center" role="cell"> 707 @if (!isHybridShop) 708 { 709 <span class="@Co3.Isabella.Dw.Services.ProductService.Instance.GetNoBuyB2CandB2B()">{{{price}}}</span> 710 } 711 else 712 { 713 <span>{{{price}}}</span> 714 } 715716 </div> 717718 <div class="flex-row w-20 align-self-center js-isabella-product-villa-and-camplet-acc-row" role="cell"> 719 <input id="ProductID{{counter @@index}}" type="hidden" value="{{id}}" name="ProductID{{counter @@index}}"> 720 <input id="VariantID{{counter @@index}}" name="VariantID{{counter @@index}}" type="hidden" value="{{variantId}}"> 721 <input id="ProductLoopCounter{{counter @@index}}" name="ProductLoopCounter{{counter @@index}}" type="hidden" value="{{counter @@index}}"> 722 <input id="UnitID{{counter @@index}}" name="UnitID{{counter @@index}}" type="hidden" value=""> 723 <input class="js-acc-product-id" type="hidden" value="{{id}}"> 724 <input class="js-acc-product-variantid" type="hidden" value="{{variantId}}"> 725 <input class="js-acc-product-name" type="hidden" value="{{name}}"> 726 <input class="form-control text-right js-isabella-colli-quanitity js-isabella-quanitity" name="Quantity{{counter @@index}}" type="@(isHybridShop ? "hidden" : "text")" value="0" data-rule-digits="true" data-price="{{priceClean}}"> 727 </div> 728729 {{/each}} 730 <div class="flex-row first w-100 border-bottom"></div> 731 {{/each}} 732 {{/if}} 733734 </script> 735 </div> 736737 </div> 738 </div> 739740 </div> 741 <div class="col-12 col-md-5"> 742 <div class="py-2"> 743 <h2 class=""> 744 @if ( GetString("Ecom:Product.CategoryField.ProductsGeneral.CampletProduct.Value") == "True" ) 745 { 746 <p>@Translate("eCom Villa Camplet Product - Min Camplet - Heading ","Min Camplet")</p> 747 } else if ( isVillaProduct ) 748 { 749 <p>@Translate("eCom Villa Camplet Product - Mit Villa telt - Heading ","Mit Villa telt")</p> 750 } 751 </h2> 752 @{ 753 string imagePrimary = isabellaProduct.ImagePrimary != null ? isabellaProduct.ImagePrimary.Medium : string.Empty; 754 } 755 <img src="@imagePrimary" alt="" class="e-product-image-small img-fluid js-i-villa-and-camplet-image-medium" /> 756757 <div class="e-product-specs js-i-villa-and-camplet-specs" data-has-villa="@GetString("Ecom:Product.CategoryField.ProductsGeneral.VillaProduct.Value")"> 758 <script id="js-e-handlebars-tmpl-villa-and-camplet-specs" type="text/x-handlebars-template"> 759 @if ( isVillaProduct ) 760 { 761 <hr /> 762 <h4>@Translate("eCom Villa Camplet Product - Mål - Heading ","Mål")</h4> 763 <p> 764 @Translate("eCom Villa Camplet Product - Længde - Heading ","Længde"): {{villa.Length}}<br /> 765 @Translate("eCom Villa Camplet Product - Dybde - Heading ","Dybde"): {{villa.Depth}}<br /> 766 @Translate("eCom Villa Camplet Product - Højde med vogn - Heading ","Højde med vogn"): {{villa.Height}}<br /> 767 {{#if villa.VillaTotalLength}} 768 @Translate("eCom Villa Camplet Product - Total længde - Heading ","Total længde"): {{villa.VillaTotalLength}}<br /> 769 {{/if}} 770 </p> 771 <h4>@Translate("eCom Villa Camplet Product - Veranda - Heading ","Veranda")</h4> 772 <p class="js-i-villa-and-camplet-specs-porch"> 773 - {{#contains variantId "VO1863"}}@Translate("eCom Villa Camplet Product - Yes - Text ","Ja") 774 {{else}} 775 {{#contains variantId "VO1928"}} 776 @Translate("eCom Villa Camplet Product - Yes - Text ","Ja") 777 {{else}} 778 @Translate("eCom Villa Camplet Product - No - Text ","Nej") 779 {{/contains}} 780 {{/contains}} 781 </p> 782 <h4>@Translate("eCom Villa Camplet Product - Fronter - Heading ","Fronter")</h4> 783 <p class="js-i-villa-and-camplet-specs-fronts"> 784 {{#each villa.Fronts}} 785 <span>- @Translate("eCom Villa Camplet Product - Sektion - Heading ","Sektion") {{counter @@index}}: {{this}}</span> 786 <br /> 787 {{/each}} 788 </p> 789 } 790 </script> 791 </div> 792793 <div class="mt-0 table-container" role="table"> 794 <hr /> 795 <div class="flex-table mt-1" role="rowgroup"> 796 <div class="align-self-center first flex-row js-i-villa-and-camplet-name w-50" role="cell"> 797 @isabellaProduct.Name 798 </div> 799 <div class="flex-row text-right w-50 @Co3.Isabella.Dw.Services.ProductService.Instance.GetNoBuyB2CandB2B()" role="cell"> 800 <div class="js-i-villa-and-camplet-price">@isabellaProduct.Price.Format()</div> 801 </div> 802 </div> 803 @if ( string.IsNullOrEmpty( GetString( "Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Value" ) ) == false ) 804 { 805806807 <div class="flex-table mt-1" role="rowgroup"> 808 <div class="flex-row text-left w-50" role="cell"> 809 @GetString("Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Label") 810 </div> 811 <div class="flex-row text-right w-50" role="cell"> 812 @GetString("Ecom:Product.CategoryField.TentCamVillaGeneral.Delivery_cost.Value") 813 </div> 814 </div> 815 } 816 <hr /> 817 <div class="e-product-specs js-i-villa-and-camplet-specs-acc"> 818 <script id="js-e-handlebars-tmpl-villa-and-camplet-spec-acc" type="text/x-handlebars-template"> 819 {{#if this}} 820 <h4>@Translate("eCom Villa Camplet Product - Accessory - Heading ","Tilbehør")</h4> 821 {{#each this}} 822 <div class="flex-table mt-1" role="rowgroup"> 823 <div class="align-self-center first flex-row w-50" role="cell"> 824 {{this.name}} 825 </div> 826 @if (!isHybridShop) 827 { 828 <div class="flex-row text-right w-50 @Co3.Isabella.Dw.Services.ProductService.Instance.GetNoBuyB2CandB2B()" role="cell"> 829 {{this.formattedPrice}} <span class="e-price-currency e-price-currency-symbol">@Context.Currency.Code</span> 830 </div> 831 } 832 else 833 { 834 <div class="flex-row text-right w-50" role="cell"> 835 {{this.formattedPrice}} <span class="e-price-currency e-price-currency-symbol">@Context.Currency.Code</span> 836 </div> 837 } 838839 </div> 840 {{/each}} 841 <hr /> 842 {{/if}} 843 </script> 844 </div> 845846 <div class="flex-table mt-1 @Co3.Isabella.Dw.Services.ProductService.Instance.GetNoBuyB2CandB2B()" role="rowgroup"> 847 <div class="align-self-center first flex-row h4 w-50" role="cell"> 848 @Translate("eCom Product - Add To Cart Form Table - Total Price Text", "I alt") 849 </div> 850 <div class="flex-row text-right w-50" role="cell"> 851 <div class="h3 js-i-villa-and-camplet-total-price">@isabellaProduct.bomPrice.Format()</div> 852 </div> 853854 </div> 855 <div class="flex-table" role="rowgroup"> 856 <div class="align-self-center first flex-row w-50" role="cell"> 857 <a class="text-underline" data-target="#howItWorksModal" data-toggle="modal"> 858 @if (isUserAuthenticated == false) 859 { 860 @Translate("eCom Villa Camplet Product - Sådan fungerer det - Link", "Sådan fungerer det") 861 } 862 else 863 { 864 @Translate("eCom Villa Camplet Product - Sådan fungerer det B2B - Link", "Sådan fungerer det") 865 } 866 </a> 867 </div> 868 <div class="flex-row text-right w-50" role="cell"> 869 @if ( ( bool ) noBuyB2BandB2C == false && userCanBuy == true ) 870 { 871 if ( GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.NoBuyB2C.Value" ) != true && isUserAuthenticated == false ) 872 { 873 <button class="btn btn-primary btn-block" type="submit">@Translate( "eCom Product - Send to dealer - Button", "Send til forhandler" )</button> 874 } 875 if ((GetBoolean("Ecom:Product.CategoryField.ProductsGeneral.NoBuyB2B.Value") != true && isUserAuthenticated == true) || shopType == "B2C" ) 876 { 877 <button class="btn btn-block btn-success" type="submit">@Translate( "eCom Product - Add To Cart - Button", "Add to cart" )</button> 878 } 879 } 880 @if ( GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.NoBuyB2C.Value" ) == true && isUserAuthenticated == false || GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.NoBuyB2B.Value" ) == true || userCanBuy == false && isUserAuthenticated == true ) 881 { 882 <p class="mb-0">@Translate( "eCom Product - No Buy Online - Text", "Denne varer kan ikke købes online" )</p> 883 } 884 </div> 885 </div> 886 <div class="flex-table mb-2" role="rowgroup"> 887 <div class="align-self-center first flex-row w-50 pr-1" role="cell"> 888 @if (!string.IsNullOrEmpty(PageView.Current().Area.Domain)) 889 { 890 @Translate("Product page - Not On Stock Info B2B - Text", "B2B relevant text") 891 } 892 else 893 { 894 @Translate("Product page - Not On Stock Info - Start Text", "Er varen ikke på lager kontakt Isabellas salgsafdeling på") 895 <span class="text-primary">@Translate("Product page - Contact Phone - Number", "76497292")</span> 896 @Translate("Product page - Not On Stock Info - End Textr", "eller send en mail") 897 } 898 </div> 899 <div class="flex-row text-right w-50" role="cell"> 900 @if (!string.IsNullOrEmpty(PageView.Current().Area.Domain)) 901 { 902 <a href="@findDealerLink" class="btn btn-block btn-secondary">@Translate("Product Page - Find Dealer B2B - Link", "Find forhandler")</a> 903 } 904 else 905 { 906 <a href="@findDealerLink" class="btn btn-block btn-secondary">@Translate("Product Page - Find Dealer - Link", "Find forhandler")</a> 907 } 908 </div> 909 <p class="mt-2"> 910 <a class="js-isabella-villa-and-camplet-pdf-generate text-primary" href="#"> 911 <i class="material-icons material-icons-large">vertical_align_bottom</i> @Translate("eCom Product - Download PDF - Text", "Hent produkt-PDF")</a> 912 </p> 913 </div> 914 </div> 915 </div> 916 </div> 917 </div> 918 </div> 919920 @sectionEnd() 921922 @sectionStart( 923 sectionClasses: "e-section py-2", 924 contentClasses: "col-12") 925 <div class="col-12"> 926 <div class="row"> 927 <div class="col-12 col-md-5"> 928 @using Dynamicweb.Admin.dk.dynamicweb.templates 929 @using WebSupergoo.ImageGlue6 930931 @{ 932 string moodCarouselClassList = "d-none"; 933 } 934935 @if ( GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.IsAccessory.Value" ) == true ) 936 { 937 <div class="e-product-image-container position-relative"> 938 @if(GetBoolean( "Ecom:Product.CategoryField.ProductsGeneral.News.Value" ) == true ) { 939 <div class="isabella-product-item-news zi-sticky"> 940 @Translate("Ecom Product - News Badge - Text","Nyhed") 941 </div> 942 } 943 <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel"> 944 <div class="e-product-image-wrapper"> 945 <div class="carousel-inner"> 946 <div class="active carousel-item" data-target="#js-e-product-image-modal-mood" data-toggle="modal"> 947 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&Width=600&Height=&Quality=90&AlternativeImage=/Files/Templates/Designs/isabella/_assets/img/NoImage.gif" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel-mood" data-slide-to="0"> 948 </div> 949950 @foreach ( LoopItem imageCategories in GetLoop("ImageCategories") ) 951 { 952 if ( imageCategories.GetString("Category.SystemName") == "MoodImages" ) 953 { 954 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop("Category.Images").WithIndex() ) 955 { 956 if ( image.Index != null ) 957 { 958 moodCarouselClassList = "d-flex"; 959 } 960 <div class="carousel-item" data-target="#js-e-product-image-modal-mood" data-toggle="modal"> 961 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=600&Height=&Quality=90&AlternativeImage=/Files/Templates/Designs/isabella/_assets/img/NoImage.gif" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel-mood" data-slide-to="@(image.Index + 1)"> 962 </div> 963 } 964 } 965 } 966967 <a class="carousel-control-prev @moodCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel"></a> 968 <a class="carousel-control-next @moodCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel"></a> 969970 </div> 971 </div> 972973 <ol class="carousel-indicators @moodCarouselClassList"> 974 <li data-target="#js-e-product-image-carousel" class="active" data-slide-to="0"></li> 975 @foreach ( LoopItem imageCategories in GetLoop("ImageCategories") ) 976 { 977 if ( imageCategories.GetString("Category.SystemName") == "MoodImages" ) 978 { 979 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop("Category.Images").WithIndex() ) 980 { 981 <li data-target="#js-e-product-image-carousel" data-slide-to="@(image.Index + 1)"></li> 982 } 983 } 984 } 985 </ol> 986987 </div> 988 </div> 989 } 990 else 991 { 992993 <div class="e-product-image-container isabella-product-image-container-mood"> 994 <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel"> 995 <div class="e-product-image-wrapper"> 996 <div class="carousel-inner"> 997998 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 999 { 1000 if ( imageCategories.GetString( "Category.SystemName" ) == "MoodImages" ) 1001 { 1002 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1003 { 1004 if ( image.Element.Index == 1 ) 1005 { 1006 isActive = "active"; 1007 } 1008 else 1009 { 1010 isActive = ""; 1011 } 1012 if ( image.Index != 0 ) 1013 { 1014 moodCarouselClassList = "d-flex"; 1015 } 1016 <div class="carousel-item @isActive" data-target="#js-e-product-image-modal-mood" data-toggle="modal"> 1017 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel-mood" data-slide-to="@( image.Index )"> 1018 </div> 1019 } 1020 } 1021 } 10221023 <a class="carousel-control-prev @moodCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel"></a> 1024 <a class="carousel-control-next @moodCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel"></a> 10251026 </div> 1027 </div> 1028 <ol class="carousel-indicators @moodCarouselClassList"> 1029 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1030 { 1031 if ( imageCategories.GetString( "Category.SystemName" ) == "MoodImages" ) 1032 { 1033 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1034 { 1035 if ( image.Element.Index == 1 ) 1036 { 1037 isActive = "active"; 1038 } 1039 else 1040 { 1041 isActive = ""; 1042 } 10431044 <li class="@isActive" data-target="#js-e-product-image-carousel" data-slide-to="@( image.Index )"></li> 1045 } 1046 } 1047 } 1048 </ol> 1049 </div> 1050 </div> 1051 } 1052 @using Dynamicweb.Admin.dk.dynamicweb.templates 1053 <div class="modal modal-fullscreen fade e-product-image-modal" id="js-e-product-image-modal-mood" data-backdrop="false" data-keyboard="true"> 1054 <div class="modal-dialog"> 1055 <div class="modal-content"> 1056 <div class="modal-body"> 10571058 <button type="button" class="close" data-dismiss="modal"> 1059 <i class="material-icons">close</i> 1060 </button> 10611062 <div id="js-e-product-image-modal-carousel-mood" class="carousel slide" data-keyboard="true" data-interval="false"> 1063 <div class="carousel-inner"> 10641065 <div class="carousel-item active" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&Width=&Height=1800&Quality=90&AlternativeImage=/Files/Templates/Designs/isabella/_assets/img/NoImage.gif)"> 1066 </div> 1067 @foreach (LoopItem imageCategories in GetLoop("ImageCategories")) 1068 { 1069 if (imageCategories.GetString("Category.SystemName") == "MoodImages") 1070 { 1071 foreach (ElementWithIndex<LoopItem> image in imageCategories.GetLoop("Category.Images").WithIndex()) 1072 { 1073 if (image.Element.Index == 1) 1074 { 1075 isActive = "active"; 1076 } 1077 else 1078 { 1079 isActive = ""; 1080 } 1081 <div class="carousel-item" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=&Height=1800&Quality=90)"> 1082 </div> 1083 } 1084 } 1085 } 1086 </div> 10871088 <ol class="carousel-indicators @moodCarouselClassList"> 1089 <li class="" data-target="#js-e-product-image-modal-carousel-mood" data-slide-to="0"> 1090 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&Width=50&Height=&Quality=75)"></span> 1091 </li> 1092 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1093 { 1094 if ( imageCategories.GetString( "Category.SystemName" ) == "MoodImages" ) 1095 { 1096 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1097 { 1098 if (image.Element.Index == 1 ) 1099 { 1100 isActive = "active"; 1101 } 1102 else 1103 { 1104 isActive = ""; 1105 } 1106 <li class="" data-target="#js-e-product-image-modal-carousel-mood" data-slide-to="@( image.Index + 1 )"> 1107 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span> 1108 </li> 1109 } 1110 } 1111 } 1112 </ol> 11131114 <a class="carousel-control-prev @moodCarouselClassList" data-target="#js-e-product-image-modal-carousel-mood" data-slide="prev"></a> 1115 <a class="carousel-control-next @moodCarouselClassList" data-target="#js-e-product-image-modal-carousel-mood" data-slide="next"></a> 11161117 </div> 1118 </div> 1119 </div> 1120 </div> 1121 </div> 11221123 </div> 1124 <div class="col-12 col-md-7"> 1125 <h2 class="col-12">@Translate("eCom Product - Productinformation - Heading","Produktinformation")</h2> 1126 @using Co3.Espresso.Base.Extensions 1127 @using Co3.Espresso.Website.Services 1128 @using Dynamicweb.Admin.dk.dynamicweb.templates 1129 @using Dynamicweb.Ecommerce.Products 1130 @using Dynamicweb.Ecommerce.Products.Categories 1131 @using Dynamicweb.Ecommerce.Products.FieldDisplayGroups 1132 @using Dynamicweb.Frontend 1133 @using ProductService = Co3.Isabella.Dw.Services.ProductService 11341135 @{ 1136 //Hard coded group ID's from Model Display Groups // 1137 List< string > modelDisplayGroupIds = new List< string >(); 1138 modelDisplayGroupIds.Add("7"); 1139 List< LoopItem > modelDisplayGroupList = new List< LoopItem >(); 1140 } 11411142 <div class="col-12 p p-accordion"> 1143 <div class="p-accordion-container "> 1144 <div class="border-bottom e-reveal-done mb-0 p-accordion-item"> 11451146 @{ 1147 int displayGroupCount = 0; 1148 } 11491150 @foreach (LoopItem groupItem in GetLoop("FieldDisplayGroups")) 1151 { 11521153 string displayGroupId = groupItem.GetString("Ecom:FieldDisplayGroup.ID"); 11541155 if (modelDisplayGroupIds.Contains(groupItem.GetString("Ecom:FieldDisplayGroup.ID"))) 1156 { 1157 modelDisplayGroupList.Add(groupItem); 1158 } 1159 else 1160 { 1161 List<LoopItem> fieldItems = new List<LoopItem>(); 1162 bool hasValues = false; 11631164 foreach (LoopItem fieldItem in groupItem.GetLoop("Fields")) 1165 { 1166 fieldItems.Add(fieldItem); 1167 if (!string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value"))) 1168 { 1169 hasValues = true; 1170 } 1171 } 11721173 if (hasValues == true) 1174 { 1175 <div class="p-accordion-toggle"> 1176 <p class="align-items-center border-top collapsed d-flex justify-content-between m-0 py-1" data-target="#accordion-id-@displayGroupId" data-toggle="collapse"> 1177 <span class="font-weight-bold line-height-sm my-0 p-accordion-toggle-text text-auto">@groupItem.GetString("Ecom:FieldDisplayGroup.Name")</span> 1178 <i class="order-last p-accordion-toggle-icon-img"> </i> 1179 </p> 1180 </div> 1181 <div class="collapse @(displayGroupCount == 0 ? "show" : string.Empty)" id="accordion-id-@displayGroupId"> 1182 <div class="pb-2"> 1183 <div class="row"> 1184 @{ 1185 int loopCounter = 0; 1186 } 118711881189 @foreach (LoopItem fieldItem in fieldItems) 1190 { 1191 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("Color")) 1192 { 1193 string[] fieldValue = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Split(','); 1194 string[] fieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel").Split(','); 1195 string fieldImage = string.Empty; 11961197 for (int sharedArrayIndex = 0; sharedArrayIndex < fieldValue.Length; sharedArrayIndex++) 1198 { 1199 if (fieldValue.Length == fieldLabel.Length) 1200 { 1201 fieldImage = fieldValue[sharedArrayIndex] + ".png"; 12021203 JSON.pdfData.colors.Add(new 1204 { 1205 fieldLabel = fieldValue[sharedArrayIndex], 1206 path = string.Format("/Files/Images/isabella/IsabellaIcons/{0}", fieldImage), 1207 imageUri = string.Empty 1208 }); 1209 } 1210 } 1211 } 12121213 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("FrameMatch")) 1214 { 1215 string[] fieldValue = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Split(','); 1216 string[] fieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel").Split(','); 1217 string fieldImage = string.Empty; 12181219 for (int sharedArrayIndex = 0; sharedArrayIndex < fieldValue.Length; sharedArrayIndex++) 1220 { 1221 if (fieldValue.Length == fieldLabel.Length) 1222 { 1223 fieldImage = fieldValue[sharedArrayIndex] + ".png"; 12241225 JSON.pdfData.frameMatch.Add(new 1226 { 1227 fieldLabel = fieldValue[sharedArrayIndex], 1228 path = string.Format("/Files/Images/isabella/IsabellaIcons/{0}", fieldImage), 1229 imageUri = string.Empty 1230 }); 1231 } 1232 } 1233 } 12341235 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("MiscFrameMaterial")) 1236 { 1237 string[] fieldValue = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Split(','); 1238 string[] fieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel").Split(','); 1239 string fieldImage = string.Empty; 12401241 for (int sharedArrayIndex = 0; sharedArrayIndex < fieldValue.Length; sharedArrayIndex++) 1242 { 1243 if (fieldValue.Length == fieldLabel.Length) 1244 { 1245 fieldImage = fieldValue[sharedArrayIndex] + ".png"; 12461247 JSON.pdfData.miscFrameMaterial.Add(new 1248 { 1249 fieldLabel = fieldValue[sharedArrayIndex], 1250 path = string.Format("/Files/Images/isabella/IsabellaIcons/{0}", fieldImage), 1251 imageUri = string.Empty 1252 }); 1253 } 1254 } 1255 } 12561257 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("FrameMaterial")) 1258 { 1259 string[] fieldValue = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Split(','); 1260 string[] fieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel").Split(','); 1261 string fieldImage = string.Empty; 12621263 for (int sharedArrayIndex = 0; sharedArrayIndex < fieldValue.Length; sharedArrayIndex++) 1264 { 1265 if (fieldValue.Length == fieldLabel.Length) 1266 { 1267 fieldImage = fieldValue[sharedArrayIndex] + ".png"; 12681269 JSON.pdfData.frameMaterial.Add(new 1270 { 1271 fieldLabel = fieldValue[sharedArrayIndex], 1272 path = string.Format("/Files/Images/isabella/IsabellaIcons/{0}", fieldImage), 1273 imageUri = string.Empty 1274 }); 1275 } 1276 } 1277 } 12781279 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("Color") || fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Contains("FrameMatch")) 1280 { 1281 string translatedFieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name"); 1282 string[] categoryFieldIds = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Split('|'); 1283 if (categoryFieldIds.Length == 3) 1284 { 1285 Field translatedField = GetTranslatedCategoryFieldName(categoryFieldIds[1], categoryFieldIds[2]); 1286 translatedFieldLabel = translatedField.Label; 1287 } 1288 <div class="col-12"> 1289 @{ 1290 string[] colorValue = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Split(','); 1291 string[] colorLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel").Split(','); 1292 string colorImagePng = string.Empty; 1293 } 1294129512961297 @if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false) 1298 { 12991300 <p class="font-weight-bold mb-1">@translatedFieldLabel</p> 13011302 <div class="row"> 1303 @for (int sharedArrayIndex = 0; sharedArrayIndex < colorValue.Length; sharedArrayIndex++) 1304 { 1305 if (colorValue.Length == colorLabel.Length) 1306 { 1307 colorImagePng = colorValue[sharedArrayIndex] + ".png"; 1308 <div class="col-4 mb-2"> 1309 <img src="@Co3.Espresso.Website.Services.ImageService.Instance.GetImageURL("/Files/Images/isabella/IsabellaIcons/" + @colorImagePng, 200, 65, 0)" class="col-12 mb-1 mr-2 p-0"> 1310 <div> 1311 @colorLabel[sharedArrayIndex] 1312 </div> 1313 </div> 1314 } 1315 } 1316 </div> 1317 } 13181319 </div> 1320 } 1321 else if (fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name").Contains("VideoPresentation") && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value") != "") 1322 { 1323 <div class="col-12 mb-2"> 1324 <div class="col-12 px-0 mt-1"> 1325 <iframe width="100%" height="400" src="@fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 1326 </div> 1327 </div> 1328 } 1329 else if (fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName").Contains("Filemanager") && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Contains(".jpg")) 1330 { 1331 <img class="col-12 col-md-6" src="@Co3.Espresso.Website.Services.ImageService.Instance.GetImageURL("/Files/Images/" + fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value"), 500, 0, 0)"/> 1332 } 1333 else if (fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName").Contains("Filemanager") && fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Contains(".pdf")) 1334 { 1335 <div class="col-5 col-lg-3 d-flex"> 1336 <p class="font-weight-bold mb-0 pb-0">@fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name")</p> 1337 </div> 1338 <div class="col-7 col-lg-9 d-flex flex-column"> 1339 <a href="@fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value").Replace("../", "/Files/")"> 1340 @Translate("eCom Product = Download PDF - Link", "Download pdf here") 1341 </a> 1342 </div> 1343 } 1344 else if (fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName").Contains("Link")) 1345 { 1346 <div class="col-5 col-lg-3 d-flex"> 1347 <p class="font-weight-bold mb-0 pb-0">@fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name")</p> 1348 </div> 1349 <div class="col-7 col-lg-9 d-flex flex-column"> 1350 <a href="@fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")"> 1351 @Translate("eCom Product - View more - Text", "View more") 1352 </a> 1353 </div> 1354 } 1355 else 1356 { 1357 string translatedFieldLabel = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Name"); 1358 string[] categoryFieldIds = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Id").Split('|'); 1359 if (categoryFieldIds.Length == 3) 1360 { 1361 Field translatedField = GetTranslatedCategoryFieldName(categoryFieldIds[1], categoryFieldIds[2]); 1362 translatedFieldLabel = translatedField.Label; 1363 } 13641365 switch (groupItem.GetString("Ecom:FieldDisplayGroup.ID")) 1366 { 1367 case "11": // Delivery Width 1368 <div class="col-12"> 1369 <div class="row"> 1370 <div class="col-12 col-md-6"> 1371 <p> 1372 @if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1373 { 1374 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1375 } 1376 else 1377 { 1378 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1379 } 1380 </p> 1381 </div> 1382 <div class="col-12 col-md-6"> 1383 @using Dynamicweb.Admin.dk.dynamicweb.templates 13841385 @{ 1386 string deliveryCarouselClassList = "d-none"; 1387 } 13881389 <div class="e-product-image-container"> 1390 <div class="carousel slide" data-interval="false" data-ride="carousel" id="js-e-product-image-carousel-delivery"> 1391 <div class="e-product-image-wrapper"> 1392 <div class="carousel-inner"> 1393 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1394 { 1395 if ( imageCategories.GetString( "Category.SystemName" ) == "DeliveryWithGallery" ) 1396 { 1397 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1398 { 1399 if (image.Element.Index == 1 ) 1400 { 1401 isActive = "active"; 1402 } 1403 else 1404 { 1405 isActive = ""; 1406 } 1407 if (image.Index != 0 ) 1408 { 1409 deliveryCarouselClassList = "d-flex"; 1410 } 1411 <div class="carousel-item @isActive" data-target="#js-e-product-image-modal-delivery" data-toggle="modal"> 1412 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=600&Height=&Quality=90" alt="" class="e-product-image" data-target="#js-e-product-image-modal-carousel-delivery" data-slide-to="@( image.Index )"> 1413 </div> 1414 } 1415 } 1416 } 14171418 <a class="carousel-control-prev @deliveryCarouselClassList" data-slide="prev" data-target="#js-e-product-image-carousel-delivery"></a> 1419 <a class="carousel-control-next @deliveryCarouselClassList" data-slide="next" data-target="#js-e-product-image-carousel-delivery"></a> 14201421 </div> 1422 </div> 1423 <ol class="carousel-indicators @deliveryCarouselClassList"> 1424 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1425 { 1426 if ( imageCategories.GetString( "Category.SystemName" ) == "DeliveryWithGallery" ) 1427 { 1428 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1429 { 1430 if (image.Element.Index == 1 ) 1431 { 1432 isActive = "active"; 1433 } 1434 else 1435 { 1436 isActive = ""; 1437 } 1438 <li class="@isActive" data-target="#js-e-product-image-carousel-delivery" data-slide-to="@( image.Index )"></li> 1439 } 1440 } 1441 } 1442 </ol> 1443 </div> 1444 </div> 1445 @using Dynamicweb.Admin.dk.dynamicweb.templates 1446 <div class="modal modal-fullscreen fade e-product-image-modal" id="js-e-product-image-modal-delivery" data-backdrop="false" data-keyboard="true"> 1447 <div class="modal-dialog"> 1448 <div class="modal-content"> 1449 <div class="modal-body"> 14501451 <button type="button" class="close" data-dismiss="modal"> 1452 <i class="material-icons">close</i> 1453 </button> 14541455 <div id="js-e-product-image-modal-carousel-delivery" class="carousel slide" data-keyboard="true" data-interval="false"> 1456 <div class="carousel-inner"> 1457 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1458 { 1459 if ( imageCategories.GetString( "Category.SystemName" ) == "DeliveryWithGallery" ) 1460 { 1461 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1462 { 1463 if (image.Element.Index == 1 ) 1464 { 1465 isActive = "active"; 1466 } 1467 else 1468 { 1469 isActive = ""; 1470 deliveryCarouselClassList = "d-flex"; 1471 } 1472 <div class="carousel-item @isActive" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString("Ecom:Product:Detail.Image.Clean")&Format=jpg&Width=&Height=1800&Quality=90)"> 1473 </div> 1474 } 1475 } 1476 } 1477 </div> 14781479 <ol class="carousel-indicators @deliveryCarouselClassList"> 1480 @foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1481 { 1482 if ( imageCategories.GetString( "Category.SystemName" ) == "DeliveryWithGallery" ) 1483 { 1484 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1485 { 1486 if (image.Element.Index == 1 ) 1487 { 1488 isActive = "active"; 1489 } 1490 else 1491 { 1492 isActive = ""; 1493 deliveryCarouselClassList = "d-flex"; 1494 } 1495 <li class="@isActive" data-target="#js-e-product-image-modal-carousel-delivery" data-slide-to="@( image.Index + 1 )"> 1496 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=jpg&Width=50&Height=&Quality=75)"></span> 1497 </li> 1498 } 1499 } 1500 } 1501 </ol> 15021503 <a class="carousel-control-prev @deliveryCarouselClassList" data-target="#js-e-product-image-modal-carousel-delivery" data-slide="prev"></a> 1504 <a class="carousel-control-next @deliveryCarouselClassList" data-target="#js-e-product-image-modal-carousel-delivery" data-slide="next"></a> 15051506 </div> 1507 </div> 1508 </div> 1509 </div> 1510 </div> 15111512 </div> 1513 </div> 1514 </div> 1515 break; 1516 case "2": // Material 1517 <div class="col-12"> 1518 @{ 1519 string materialImg = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) + ".png"; 15201521 if ( string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false ) 1522 { 1523 JSON.pdfData.materials.Add( new 1524 { 1525 id = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ), 1526 label = translatedFieldLabel, 1527 text = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.OptionLabel" ), 1528 path = string.Format( "/Files/Images/isabella/IsabellaIcons/{0}", materialImg ), 1529 imageUri = string.Empty 1530 } ); 1531 } 15321533 bool isEditor = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.TypeName") == "EditorText"; 15341535 } 15361537 @if ( string.IsNullOrEmpty(fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )) == false ) 1538 { 1539 if(isEditor){ 1540 <p class="mb-1">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</p> 1541 } 1542 else 1543 { 1544 <p class="font-weight-bold mb-1">@translatedFieldLabel</p> 1545 <div class="d-flex align-items-start mb-3"> 1546 <img src="/Files/Images/isabella/IsabellaIcons/@materialImg" style="width: 45px" class="mr-2"> 1547 <div> 1548 @if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1549 { 1550 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1551 } 1552 else 1553 { 1554 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1555 } 1556 </div> 1557 </div> 1558 } 155915601561 } 15621563 </div> 1564 break; 1565 case "3": // Measures 1566 if(loopCounter == 0) { 1567 foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1568 { 1569 if ( imageCategories.GetString( "Category.SystemName" ) == "MeasureIllustrations" ) 1570 { 1571 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1572 { 1573 <div class="col-12"> 1574 <img src="@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )" alt="" class="col-12 p-0 mb-3"> 1575 </div> 1576 } 1577 } 1578 } 15791580 } 15811582 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("MeasureDesc") || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("MeasureDesc2")) 1583 { 1584 <div class="col-12 col-md-6"> 1585 <p class="font-weight-bold"> 1586 @if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1587 { 1588 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1589 } 1590 else 1591 { 1592 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1593 } 1594 </p> 1595 </div> 1596 } 1597 else if (string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false) { 1598 <div class="col-5 col-lg-3 d-flex"> 1599 <p class="font-weight-bold mb-0 pb-0">@translatedFieldLabel</p> 1600 </div> 1601 <div class="col-7 col-lg-9 d-flex"> 1602 <p class="mb-0 pb-0"> 1603 @if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1604 { 1605 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1606 } 1607 else 1608 { 1609 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1610 } 1611 </p><br /> 1612 </div> 16131614 JSON.pdfData.measures.Add( new 1615 { 1616 value = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ), 1617 name = fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Name" ) 1618 } ); 1619 } 1620 break; 1621 case "1": // Details & Features 1622 if (string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false) { 1623 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("VideoPresentation")) { 1624 <div class="col-12 mb-2"> 1625 <div class="col-12 px-0"> 1626 <p class="font-weight-bold">@GetString( "Ecom:Product.CategoryField.TentCamVillaGeneral.AssemblyLabelVideo3.Value.Clean" )</p> 1627 <iframe width="100%" height="210" src="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 1628 </div> 1629 </div> 1630 } else { 1631 <div class="col-5 col-lg-3 d-flex"> 1632 <p class="font-weight-bold mb-0 pb-0">@translatedFieldLabel</p> 1633 </div> 1634 <div class="col-7 col-lg-9 d-flex flex-column"> 1635 @if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) == "FrameGuide" || fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) == "FrameIllustration") { 1636 <a href="@GetString( "Ecom:Product.CategoryField.AccessoriesGeneral.FrameGuide.Value" )">@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )</a> 1637 } else { 1638 if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1639 { 1640 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1641 } 1642 else 1643 { 1644 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1645 } 1646 } 1647 <br /> 1648 </div> 1649 } 1650 } 1651 break; 1652 case "5": // Assembly 16531654 if(loopCounter == 0) { 1655 foreach ( LoopItem imageCategories in GetLoop( "ImageCategories" ) ) 1656 { 1657 if ( imageCategories.GetString( "Category.SystemName" ).Contains("AssemblyIllustrations" )) 1658 { 1659 foreach ( ElementWithIndex< LoopItem > image in imageCategories.GetLoop( "Category.Images" ).WithIndex() ) 1660 { 1661 <div class="col-12 col-lg-8"> 1662 <img src="/admin/public/getimage.ashx?Crop=0&Image=@image.Element.GetString( "Ecom:Product:Detail.Image.Clean" )&Format=png&Width=600&Height=&Quality=90" alt="" class="col-12 p-0 mb-3"> 1663 </div> 1664 } 1665 } 1666 } 16671668 } 1669 if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ) == "AssemblyGuide" && string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false ) 1670 { 1671 <div class="col-12 mb-3"> 1672 <p class="font-weight-bold mb-1">@Translate( "eCom Product - Download installation instructions - Header", "Opstillingsvejledning" )</p> 1673 <a class="text-primary" href="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" download> 1674 <i class="material-icons material-icons-large">vertical_align_bottom</i> @Translate( "eCom Product - Download installation instructions - Link", "Download opstillingsvejledning" ) 1675 </a> 1676 </div> 1677 } 1678 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("AssemblyVideo1") && string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false ) 1679 { 1680 <div class="col-12"> 1681 <p class="font-weight-bold">@GetString( "Ecom:Product.CategoryField.TentCamVillaGeneral.AssemblyLabelVideo1.Value.Clean" )</p> 1682 <iframe width="100%" height="400" src="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 1683 </div> 1684 } 1685 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("AssemblyVideo2") && string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false ) 1686 { 1687 <div class="col-12"> 1688 <p class="font-weight-bold">@GetString( "Ecom:Product.CategoryField.TentCamVillaGeneral.AssemblyLabelVideo2.Value.Clean" )</p> 1689 <iframe width="100%" height="400" src="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 1690 </div> 1691 } 1692 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("AssemblyVideo3") && string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false ) 1693 { 1694 <div class="col-12"> 1695 <p class="font-weight-bold">@GetString( "Ecom:Product.CategoryField.TentCamVillaGeneral.AssemblyLabelVideo3.Value.Clean" )</p> 1696 <iframe width="100%" height="400" src="@fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" )" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 1697 </div> 1698 } 1699 else if ( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("MaintenanceAdvice") || string.IsNullOrEmpty( fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Value" ) ) == false && fieldItem.GetString( "Ecom:FieldDisplayGroup.Field.Id" ).Contains("AssemblyLabelVideo") == false ) 1700 { 1701 <div class="col-5 col-lg-3 d-flex"> 1702 <p class="font-weight-bold mb-0 pb-0">@translatedFieldLabel</p> 1703 </div> 1704 <div class="col-7 col-lg-9 d-flex flex-column"> 1705 @if ( fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True" ) 1706 { 1707 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel")<br /> 1708 } 1709 else 1710 { 1711 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br /> 1712 } 1713 </div> 1714 } 1715 break; 1716 default: 1717 if (string.IsNullOrEmpty(fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")) == false) 1718 { 1719 <div class="col-5 col-lg-3 d-flex"> 1720 <p class="font-weight-bold mb-0 pb-0">@translatedFieldLabel</p> 1721 </div> 1722 <div class="col-7 col-lg-9 d-flex flex-column"> 1723 @if (fieldItem.GetString("Ecom:FieldDisplayGroup.Field.IsList") == "True") 1724 { 1725 string text = fieldItem.GetString("Ecom:FieldDisplayGroup.Field.OptionLabel"); 1726 if (text.Contains(",")) 1727 { 1728 string[] splitText = text.Split(','); 1729 text = string.Join(", ", splitText); 1730 } 1731 @text<br/> 1732 } 1733 else 1734 { 1735 @fieldItem.GetString("Ecom:FieldDisplayGroup.Field.Value")<br/> 1736 } 1737 </div> 1738 } 1739 break; 1740 } 1741 } 1742 loopCounter++; 1743 } 1744 </div> 1745 </div> 1746 </div> 1747 displayGroupCount++; 1748 } 1749 } 17501751 } 1752 </div> 1753 </div> 1754 </div> 175517561757 @functions 1758 { 1759 public Field GetTranslatedCategoryFieldName(string categoryId, string fieldId) 1760 { 1761 Field result = null; 17621763 Category category = Category.GetCategoryById(categoryId, Dynamicweb.Ecommerce.Common.Context.LanguageID); 17641765 Field field = category.Fields.FirstOrDefault(f => f.Id.Equals(fieldId)); 17661767 if (field != null && string.IsNullOrEmpty(field.Label) == false) 1768 { 17691770 result = field; 1771 } 17721773 return result; 1774 } 1775 } 17761777 </div> 1778 </div> 1779 </div> 1780 @sectionEnd() 178117821783 @if ( GetBoolean("Ecom:Product.CategoryField.ProductsGeneral.IsAccessory.Value") == false ) 1784 { 1785 foreach ( LoopItem group in GetLoop("ProductRelatedGroups") ) 1786 { 1787 @ProductRelatedProducts( 1788 sectionClasses: "e-section pt-6 bg-septenary-opacity-low isabella-related-productlist", 1789 contentClasses: "col-12", 1790 sectionCollapse: true, 1791 collapseToggleTextExpand: Translate( "eCom Product - View more - Text", "View more" ), 1792 collapseToggleTextCollapse: Translate( "eCom Product - View less - Text", "View less" ), 1793 heading: group.GetString("Ecom:Product:RelatedGroup.Name"), 1794 productLoop: group.GetLoop("RelatedProducts").Take(999).Select(p => Product.GetProductById(p.GetString("Ecom:Product.ID"))) 1795 ) 1796 } 1797 } 1798 else 1799 { 1800 @ProductRelatedProducts( 1801 sectionClasses: "e-section pt-6 bg-septenary-opacity-low isabella-related-productlist", 1802 contentClasses: "col-12", 1803 sectionCollapse: true, 1804 collapseToggleTextExpand: Translate( "eCom Product - View more - Text", "View more" ), 1805 collapseToggleTextCollapse: Translate( "eCom Product - View less - Text", "View less" ), 1806 heading: Translate("eCom Product - Accessory for these products - Heading", "Kan også bruges som tilbehør til disse produkter"), 1807 productLoop: parentProducts.Take(999) 1808 ) 1809 } 18101811 @if ( string.IsNullOrEmpty(GetString("Ecom:Product.CategoryField.ModelType.ModelTypeDesc.Value.Clean")) == false ) 1812 { 1813 <section class="e-section e-theme-secondary js-e-section mb-0 p p-0 p-mosaic p-mosaic-img-right"> 1814 <div class="container-fluid px-0"> 1815 <div class="e-reveal-done no-gutters row"> 1816 <div class="align-self-center col-12 col-md-6 p-txt-container"> 1817 <h2>@GetString( "Ecom:Product.CategoryField.ModelType.ModelTypeName.OptionLabel" )</h2> 1818 @GetString( "Ecom:Product.CategoryField.ModelType.ModelTypeDesc.Value.Clean" ) 1819 <p> 1820 <a class="arrow-white isabella-arrow text-white" href="@GetString( modelTypeLink )"> 1821 @Translate( "eCom Product - Model - Read more about - Link", "Læs mere om" ) @GetString( "Ecom:Product.CategoryField.ModelType.ModelTypeName.OptionLabel" ) @Translate( "eCom Product - Model - series - Link", "serien" ) 1822 </a> 1823 </p> 1824 </div> 1825 <div class="col-12 col-md-6 e-section-height-md order-md-last p-img-container position-relative"> 1826 <div class="bg-center-middle bg-cover p-img pos-b-0 position-absolute pos-l-0 pos-r-0 pos-t-0" style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@GetString( "Ecom:Product.CategoryField.ModelType.ModelTypeImage.Value.Clean" )&Format=png&Width=1280&Height=0&Quality=75);" title=""></div> 1827 </div> 1828 </div> 1829 </div> 1830 </section> 1831 } 18321833 </form> 18341835 <script>e4.data.set( '@jsDataPropertyPath', @JsonService.Instance.ToJson(isabellaProduct) );</script> 1836 <script>e4.data.set( 'isabella.villaAndCamplet.extendedPdfdata', @JsonService.Instance.ToJson(isabellaExtendPdfData) );</script> 1837 <code class="js-e-breadcrumb-item-append" data-text="@HttpUtility.HtmlAttributeEncode(isabellaProduct.Name)" data-link="@HttpUtility.HtmlAttributeEncode(isabellaProduct.Link)"></code> 1838 </div> 18391840 @sectionStart() 184118421843 <!-- Modal - B2C Send mail --> 18441845 <div aria-hidden="true" aria-labelledby="CampLetB2CCheckoutLabel" class="fade modal" id="CampletB2CModal" role="dialog" tabindex="-1"> 1846 <div class="modal-dialog modal-lg" role="document"> 1847 <div class="modal-content"> 1848 <div class="modal-header"> 1849 <h3 class="modal-title" id="CampLetB2CCheckoutLabel">@Translate("eCom Product - Camp-let Modal - Header", "Beregn pris på din Camp-let")</h3> 1850 <button aria-label="Close" class="close" data-dismiss="modal" type="button"> 1851 <span aria-hidden="true">×</span> 1852 </button> 1853 </div> 1854 <div class="modal-body"> 1855 @using System.Globalization 1856 @using Co3.Espresso.Website.Models.XML 1857 @using Co3.Espresso.Website.Services 1858 @using Dynamicweb.Frontend 1859 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.ParagraphBase 1860 @{ 1861 Dictionary< string, Territory > countriesOfTheWorld = TranslationService.Instance.GetCountries(); 1862 Dictionary< string, Territory > dealersearchCountries = new Dictionary< string, Territory >(); 1863 dealersearchCountries = countriesOfTheWorld.Values.OrderBy(t => t.Name).ToDictionary(t => t.Code, t => t); 1864 string quoteType = GetString("QuoteType.Clean"); 1865 string formAction = $"/{PageView.Current().Area.Name}/cart/checkout-camplet"; 18661867 string areaCountryCode = new RegionInfo(Espresso.Page.Area.CultureInfo.LCID).TwoLetterISORegionName; 1868 } 18691870 <div class="e-checkout-step"> 1871 <div class="card-body e-checkout-step-card-body pt-0"> 1872 <form action="@formAction" class="e-checkout-step-form e-product js-e-product js-e-checkout-step-form row" method="post" name="CheckoutApproveForm" data-validate="true"> 1873 <fieldset class="col-12 col-md-6 form-group"> 1874 <h3>@Translate("MasterLogin_PersonalInfoLabel","Personoplysninger")</h3> 1875 <div class="js-e-checkout-alternative-billing-address mt-2 show" id="CustomerAddress"> 1876 <fieldset class="form-group"> 1877 <label class="form-control-label" for="EcomOrderCustomerName"> 1878 <span class="js-e-checkout-name-label-toggle">@Translate("eCom Checkout - Name - Heading", "Name")</span> 1879 </label> 1880 <input class="form-control required" id="EcomOrderCustomerName" name="EcomOrderCustomerName" type="text" value=""> 1881 </fieldset> 1882 <fieldset class="form-group"> 1883 <label class="form-control-label" for="EcomOrderCustomerAddress">@Translate("eCom Checkout - Address - Text", "Address")</label> 1884 <input class="form-control required" id="EcomOrderCustomerAddress" name="EcomOrderCustomerAddress" type="text" value=""> 1885 </fieldset> 1886 <fieldset class=""> 1887 <div class="row"> 1888 <div class="col-12 col-sm-3 form-group"> 1889 <label class="form-control-label" for="EcomOrderCustomerZip">@Translate("eCom Checkout - Zip - Heading", "ZIP")</label> 1890 <input class="form-control required" id="EcomOrderCustomerZip" name="EcomOrderCustomerZip" type="text" value=""> 1891 </div> 1892 <div class="col-12 col-sm-9 form-group"> 1893 <label class="form-control-label" for="EcomOrderCustomerCity"> 1894 @Translate("eCom Checkout - City - Heading", "City") 1895 </label> 1896 <input class="form-control required" id="EcomOrderCustomerCity" name="EcomOrderCustomerCity" type="text" value=""> 1897 </div> 1898 </div> 1899 </fieldset> 1900 <fieldset class="form-group"> 1901 <label class="form-control-label" for="EcomOrderCustomerCountry">@Translate("eCom Checkout - Country - Heading", "Country")</label> 1902 <select autocomplete="none" class="form-control js-e-checkout-change-billing-country" id="EcomOrderCustomerCountry" name="EcomOrderCustomerCountry"> 1903 <option>@Translate("eCom Checkout - Country Select - Heading", "Choose country")</option> 1904 @foreach ( KeyValuePair< string, Territory > country in dealersearchCountries ) 1905 { 1906 <option value="@country.Value.Code">@country.Value.Name</option> 1907 } 1908 </select> 1909 </fieldset> 1910 <fieldset class="form-group"> 1911 <label class="form-control-label" for="EcomOrderCustomerPhone">@Translate("eCom Checkout - Phone - Heading", "Phone")</label> 1912 <input class="form-control" id="EcomOrderCustomerPhone" name="EcomOrderCustomerPhone" type="text" value=""> 1913 <small>@Translate("eCom Checkout - Call Help - Text", "We won't call you unless we have questions regarding your shipping")</small> 1914 </fieldset> 1915 <fieldset class="form-group"> 1916 <label class="form-control-label" for="EcomOrderCustomerComment">@Translate("eCom Checkout - Comment - Heading", "Comment")</label> 1917 <textarea class="form-control" id="EcomOrderCustomerComment" name="EcomOrderCustomerComment" rows="3" type="text"></textarea> 1918 </fieldset> 1919 </div> 1920 </fieldset> 1921 <div class="col-12 col-md-6"> 1922 <h3>@Translate("Modules_UserManagement_DealerText","Forhandler")</h3> 1923 <fieldset class="form-group"> 1924 <div class="js-i-camplet-cart-dealer" data-country-code="@areaCountryCode"> 1925 <script id="js-e-handlebars-tmpl-cart-b2c-dealer" type="text/x-handlebars-template"> 1926 <select autocomplete="none" class="form-control js-i-camplet-cart-dealer-select" id="EcomOrderCustomerDealer" name="EcomOrderCustomerDealer"> 1927 <option>@Translate("eCom Checkout - Dealer Select - Heading", "Vælg forhandler")</option> 1928 {{#each users}} 1929 <option value="{{id}}">{{name}}</option> 1930 {{/each}} 1931 </select> 1932 </script> 1933 </div> 1934 </fieldset> 1935 <input type="hidden" name="EcomOrderDeliveryName" value="" /> 1936 <input type="hidden" name="EcomOrderDeliveryAddress" value="" /> 1937 <input type="hidden" name="EcomOrderDeliveryAddress2" value="" /> 1938 <input type="hidden" name="EcomOrderDeliveryZip" value="" /> 1939 <input type="hidden" name="EcomOrderDeliveryCity" value="" /> 1940 <input type="hidden" name="EcomOrderDeliveryCountry" value="" /> 1941 <input type="hidden" name="EcomOrderDeliveryCountryCode" value="" /> 1942 <input type="hidden" name="EcomOrderDeliveryPhone" value="" /> 1943 <input type="hidden" name="EcomOrderDeliveryMail" value="" /> 1944 <input type="hidden" name="Company" value="" /> 19451946 <h3>@Translate("eCom Checkout - Receipt - Heading", "Receipt")</h3> 1947 <fieldset class="form-group"> 1948 <label class="form-control-label" for="EcomOrderCustomerEmail">@Translate("eCom Checkout - Email - Heading", "Email")</label> 1949 <input class="email form-control required" id="EcomOrderCustomerEmail" name="EcomOrderCustomerEmail" type="email" value=""> 1950 <small class="">@Translate("eCom Checkout - Email Help - Text", "Your receipt will be send to this e-mail.")</small> 1951 </fieldset> 19521953 <div class="align-items-center d-flex e-checkout-actions form-group"> 1954 <button type="submit" name="@GetString("CartV2.NextStepButtonName")" class="arrow-right btn btn-lg btn-success e-checkout-next-step">@Translate("eCom Checkout Approve - Next - Button", "Checkout")</button> 1955 </div> 1956 </div> 1957 </form> 1958 </div> 1959 </div> 19601961 </div> 1962 </div> 1963 </div> 1964 </div> 19651966 <!-- Modal - How it Works --> 19671968 <div aria-hidden="true" aria-labelledby="howItWorksModalLabel" class="fade modal" id="howItWorksModal" role="dialog" tabindex="-1"> 1969 <div class="modal-dialog" role="document"> 1970 <div class="modal-content"> 1971 <div class="modal-body"> 19721973 @if ( !string.IsNullOrEmpty( howItWorksPage ) ) 1974 { 1975 @RenderPageContent(int.Parse(howItWorksPage)) 1976 } 1977 </div> 1978 </div> 1979 </div> 1980 </div> 1981 @SnippetStart("ProductOpenGraph") 1982 @{ 1983 string openGraphTitle = product.Meta.Title; 1984 if (string.IsNullOrEmpty(openGraphTitle)) 1985 { 1986 openGraphTitle = product.Name; 1987 } 1988 string openGraphDescription = product.Meta.Description; 1989 if (string.IsNullOrEmpty(openGraphDescription)) 1990 { 1991 openGraphDescription = product.ShortDescription; 1992 } 1993 string openGraphImage = $"{HttpContext.Current.Request.Url.Scheme}://{HttpContext.Current.Request.Url.Host}/admin/public/getimage.ashx?Crop=0&Image={productImage}&Format=jpg&Width=1820&Height=1000&Quality=90"; 1994 } 1995 <meta property="og:title" content="@openGraphTitle"> 1996 <meta property="og:description" content="@openGraphDescription.StripHtml()"> 1997 <meta property="og:image" content="@openGraphImage"> 1998 @SnippetEnd("ProductOpenGraph")