Kinetic S400 filter

Filterhuset forhandler kvalitetsfiltre til Kinetic S400 ventilasjonsanlegg. Vårt Kinetic S400 filter er et grovfilter i filterklassen G4 som overholder den gledende EU standarden og Kinetics forskrifter. Derfor kan du være helt sikker på at filteret er i topp kvalitet, og at det passer perfekt i Kinetic anlegget ditt. 

Error executing template "Designs/danfilter/eCom/Productlist/espresso.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at Dynamicweb.Ecommerce.LiveIntegration.Products.PriceManager.ProcessResponse(XmlDocument response)
at Dynamicweb.Ecommerce.LiveIntegration.Products.PriceManager.FetchQuantityPrices(Product product)
at Co3.Danfilter.Website.Services.ProductService.GetPrices(Product product, PriceType priceType) in C:\Users\csv\Documents\Git_Co3\danfilter\Co3.Danfilter.Website\Services\ProductService.cs:line 41
at CompiledRazorTemplates.Dynamic.RazorEngine_11a7c5531e71459588b75788577fcf86.<>c__DisplayClass16_0.<ProductlistItem>b__0(TextWriter __razor_helper_writer) in E:\Dynamicweb.NET\Solutions\danfilter.espresso4.dk\files\Templates\Designs\danfilter\eCom\Productlist\espresso.cshtml:line 363
at CompiledRazorTemplates.Dynamic.RazorEngine_11a7c5531e71459588b75788577fcf86.Execute() in E:\Dynamicweb.NET\Solutions\danfilter.espresso4.dk\files\Templates\Designs\danfilter\eCom\Productlist\espresso.cshtml:line 693
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 @using Co3.Espresso.Website.Services; @using Dynamicweb.Frontend; @using Dynamicweb.Rendering; @using Co3.Espresso.Base.Extensions; @using Co3.Espresso.Website.Models.FrontEnd; @using Dynamicweb.Ecommerce.Common @using Dynamicweb.Ecommerce.Products @inherits RazorTemplateBase< RazorTemplateModel< Template > > @using System.Globalization @using System.Security.Cryptography.X509Certificates @using Co3.Danfilter.Website.Models.FrontEnd @using danfilterModels = Co3.Danfilter.Data.Models @using Co3.Danfilter.Website.Services @using Co3.Espresso.Base.Extensions @using Co3.Espresso.Website.Models.FrontEnd @using Co3.Espresso.Website.Services @using Dynamicweb.Content @using Dynamicweb.Ecommerce @using Dynamicweb.Frontend @using Dynamicweb.Rendering @using Dynamicweb.Rendering.Translation @using EcomContext = Dynamicweb.Ecommerce.Common.Context @using ProductService = Co3.Espresso.Website.Services.ProductService @using danfilterService = Co3.Danfilter.Website.Services @using Dynamicweb.Ecommerce.Orders @using Co3.Danfilter.Data.Services @using Co3.Espresso.Website.Models.FrontEnd.Elements @using Dynamicweb.Ecommerce.Products @using Dynamicweb.SystemTools @using System.Web @functions { public static List<dynamic> GetFilterTypes(IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productCategories){ List<dynamic> returnValue = new List< dynamic >(); foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem productCategory in productCategories ) { foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem productCategoryField in productCategory.GetLoop( "ProductCategoryFields" ) ) { if ( productCategoryField.GetString( "Ecom:Product.CategoryField.ID" ) == "B2CFilterType" ) { if ( !string.IsNullOrEmpty( productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ) ) ) { string[] filterTypesLabels = productCategoryField.GetString( "Ecom:Product.CategoryField.OptionLabel" ).Split( ',' ); string[] filterTypeValues = productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ).Split( ',' ); int index = 0; foreach ( string filterTypeValue in filterTypeValues ) { returnValue.Add( new { url = string.Format( "/admin/public/getimage.ashx?Crop=0&Image=/Files/Images/danfilter/ikon-{0}.png&Format=png&Width=40&Height=40&Quality=75", filterTypeValue ), label = Translation.GetTranslation("eCom Product - Filter type label - " + filterTypesLabels[ index ]) } ); ++index; } } } } } return returnValue; } public static List< dynamic > GetImageOverlays(IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productCategories) { List<dynamic> returnValue = new List< dynamic >(); foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem productCategory in productCategories ) { foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem productCategoryField in productCategory.GetLoop( "ProductCategoryFields" ) ) { if ( productCategoryField.GetString( "Ecom:Product.CategoryField.ID" ) == "ImageOverlay" ) { if ( !string.IsNullOrEmpty( productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ) ) ) { if ( productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ) != "noOverlay" ) { string imageOverlayValue = productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ); string globalAreaLang = PageView.Current().Area.CultureInfo.TwoLetterISOLanguageName; returnValue.Add( new { label = productCategoryField.GetString( "Ecom:Product.CategoryField.OptionLabel" ), value = productCategoryField.GetString( "Ecom:Product.CategoryField.Value.Clean" ), url = string.Format( "/admin/public/getimage.ashx?Crop=0&Image=/Files/Images/danfilter/imageOverlay-{0}-{1}.png&Format=png&Width=150&Height=150&Quality=75", imageOverlayValue, globalAreaLang ), } ); } } } } } return returnValue; } public string getCountryCodeFromArea( Area area ) { RegionInfo regionInfo = new RegionInfo( area.CultureInfo.LCID ); return regionInfo.TwoLetterISORegionName; } public static string GetStandardCollapseToggleTextExpand() { return "Se mere"; } public static string GetStandardCollapseToggleTextCollapse() { return "Se mindre"; } public static bool HasFreeDelivery( string productID = "" ) { bool returnValue = false; if ( !string.IsNullOrEmpty( productID ) ) { Shipping shippingWithLowestFreeFeeAmount = Services.Shippings.GetShippings( EcomContext.LanguageID )?.Where( s => s.Active && s.FreeFeeAmount != default( double ) )?.OrderBy( s => s.FreeFeeAmount ).FirstOrDefault(); if ( shippingWithLowestFreeFeeAmount != null ) { EspressoPrice price = danfilterService.ProductService.Instance.GetPrice( productID ); EspressoPrice priceBefore = danfilterService.ProductService.Instance.GetBeforePrice( productID ); EspressoPrice priceToUse; if ( priceBefore.Price != default( double ) && priceBefore.Price < price.Price ) { priceToUse = priceBefore; } else { priceToUse = price; } returnValue = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( shippingWithLowestFreeFeeAmount.FreeFeeAmount ).Price < priceToUse.Price; } } return returnValue; } public static bool HasDiscount( string productID = "" ) { bool returnValue = false; if ( !string.IsNullOrEmpty( productID ) ) { Co3.Danfilter.Data.Models.PriceList prices = danfilterService.ProductService.Instance.GetPrices( productID, EcomContext.LanguageID, PriceType.QuantityPrice ); returnValue = prices.Prices.Count > 1; } return returnValue; } public static EspressoPrice GetLowestEspressoPrice(string productID, danfilterModels.PriceList prices ) { EspressoPrice returnValue = danfilterService.ProductService.Instance.GetPrice( productID ); foreach ( KeyValuePair< double, danfilterModels.Price > price in prices.Prices ) { EspressoPrice itemEspressoPrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductPrice ) ); if ( itemEspressoPrice.Price < returnValue.Price ) { returnValue = itemEspressoPrice; } } return returnValue; } public static EspressoPrice GetLowestEspressoBeforePrice(string productID, danfilterModels.PriceList prices ) { EspressoPrice espressoPrice = danfilterService.ProductService.Instance.GetPrice( productID ); EspressoPrice returnValue = danfilterService.ProductService.Instance.GetBeforePrice( productID ); foreach ( KeyValuePair< double, danfilterModels.Price > price in prices.Prices ) { EspressoPrice itemEspressoPrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductPrice ) ); EspressoPrice itemEspressoBeforePrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductBasePrice ) ); if ( itemEspressoPrice.Price < espressoPrice.Price ) { returnValue = itemEspressoBeforePrice; } } return returnValue; } public static EspressoPrice GetHighestEspressoPrice(string productID, danfilterModels.PriceList prices ) { EspressoPrice returnValue = danfilterService.ProductService.Instance.GetPrice( productID ); foreach ( KeyValuePair< double, danfilterModels.Price > price in prices.Prices ) { EspressoPrice itemEspressoPrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductPrice ) ); if ( itemEspressoPrice.Price > returnValue.Price ) { returnValue = itemEspressoPrice; } } return returnValue; } public static EspressoPrice GetHighestEspressoBeforePrice(string productID, danfilterModels.PriceList prices ) { EspressoPrice espressoPrice = danfilterService.ProductService.Instance.GetPrice( productID ); EspressoPrice returnValue = danfilterService.ProductService.Instance.GetBeforePrice( productID ); foreach ( KeyValuePair< double, danfilterModels.Price > price in prices.Prices ) { EspressoPrice itemEspressoPrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductPrice ) ); EspressoPrice itemEspressoBeforePrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductBasePrice ) ); if ( itemEspressoPrice.Price > espressoPrice.Price ) { returnValue = itemEspressoBeforePrice; } } return returnValue; } public static string GetPricePrefix( string productID, danfilterModels.PriceList prices ) { string returnValue = string.Empty; EspressoPrice espressoPrice = danfilterService.ProductService.Instance.GetPrice( productID ); foreach ( KeyValuePair< double, danfilterModels.Price > price in prices.Prices ) { EspressoPrice itemEspressoPrice = danfilterService.ProductService.Instance.GetPriceWithOrWithoutVAT( decimal.ToDouble( price.Value.ProductPrice ) ); if ( itemEspressoPrice.Price < espressoPrice.Price ) { returnValue = string.Format("{0} ", Translation.GetTranslation( "eCom Productlist - Price from - Text" )); break; } } return returnValue; } } @helper ProductDescription( string sectionClasses = "e-section", bool sectionCollapse = false, string contentClasses = null, string heading = null, string content = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null ) { if ( string.IsNullOrEmpty( content ) == false ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, sectionCollapse: sectionCollapse, contentClasses: contentClasses, collapseToggleTextCollapse: collapseToggleTextCollapse, collapseToggleTextExpand: collapseToggleTextExpand ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2 class="h2">@heading</h2> </div> } <div class="@contentClassList"> @content </div> @sectionEnd() } } @helper ProductVideo( string sectionClasses = "e-section", string contentClasses = null, string heading = null, string videoURL = null ) { if ( string.IsNullOrEmpty( videoURL ) == false ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <p class="h2">@heading</p> </div> } <div class="@contentClassList"> <div class="embed-responsive embed-responsive-16by9 mb-2"> <iframe class="embed-responsive-item" src="@videoURL" width="1080" height="608" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> </div> </div> @sectionEnd() } } @helper ProductRelatedProducts( string sectionClasses = "e-section", string contentClasses = null, string heading = null, IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null ) { if ( productLoop != null && productLoop.Any() == true ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2 class="text-center">@heading</h2> </div> } <div class="@contentClassList"> <div class="e-products mb-2"> <div class="row justify-content-center"> @{ string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses(); } @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop ) { @ProductlistItem( product, productlistItemClassList ) } </div> </div> </div> @sectionEnd() } } @helper ProductRelatedProductsDanFilter( string sectionClasses = "e-section", string contentClasses = null, string heading = null, IEnumerable< RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem > productLoop = null ) { if ( productLoop != null && productLoop.Any() == true ) { ClassList headingClassList = new ClassList(); headingClassList.AddClasses( "col-12" ); ClassList contentClassList = new ClassList(); contentClassList.AddClasses( "col-12" ); @sectionStart( sectionClasses: sectionClasses, contentClasses: contentClasses ) if ( string.IsNullOrEmpty( heading ) == false ) { <div class="@headingClassList"> <h2 class="text-center">@heading</h2> </div> } <div class="@contentClassList"> <div class="e-products mb-2"> <div class="row justify-content-center"> @{ string productlistItemClassList = ProductlistService.Instance.GetGridItemWidth( null ).ToResponsiveClasses(); } @foreach ( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product in productLoop ) { @ProductlistItemDanFilter( product, productlistItemClassList ) } </div> </div> </div> @sectionEnd() } } @helper ProductlistItem( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null ) { if ( product != null ) { List<dynamic> filterTypes = GetFilterTypes( product.GetLoop( "ProductCategories" ) ); List<dynamic> imageOverlays = GetImageOverlays( product.GetLoop( "ProductCategories" ) ); danfilterModels.PriceList prices = danfilterService.ProductService.Instance.GetPrices( product.GetString( "Ecom:Product.ID" ), EcomContext.LanguageID, PriceType.QuantityPrice ); EspressoPrice productEspressoPrice = GetLowestEspressoPrice( product.GetString( "Ecom:Product.ID" ), prices ); EspressoPrice productEspressoBeforePrice = GetLowestEspressoBeforePrice( product.GetString( "Ecom:Product.ID" ), prices ); string pricePrefix = GetPricePrefix(product.GetString( "Ecom:Product.ID" ), prices); dynamic productData = new { id = product.GetString( "Ecom:Product.ID" ), variantId = product.GetString( "Ecom:Product.VariantID" ), url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ), number = product.GetString( "Ecom:Product.Number" ), name = ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ), imageLarge = ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageDefault.Clean" ), 400, 400, 5 ), pricePrefix = pricePrefix, price = productEspressoPrice,//danfilterService.ProductService.Instance.GetPrice( product.GetString( "Ecom:Product.ID" ) ), priceBefore = productEspressoBeforePrice,//danfilterService.ProductService.Instance.GetBeforePrice( product.GetString( "Ecom:Product.ID" ) ), descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ), discountLable = HasDiscount(product.GetString( "Ecom:Product.ID" )), freeDeliveryLable = HasFreeDelivery(product.GetString( "Ecom:Product.ID" )), filterTypes = filterTypes, hasFilterTypes = filterTypes.Count > 0, imageOverlays = imageOverlays, hasImageOverlays = imageOverlays.Count > 0, stock = new { id = product.GetString( "Ecom:Product:Stock.ID" ), quantity = product.GetString( "Ecom:Product.Stock" ), text = product.GetString( "Ecom:Product:Stock.Text" ), delivery = product.GetString( "Ecom:Product:Stock.DeliveryText" ) } }; bool showBeforePrice = productData.priceBefore.Price != 0 && productData.priceBefore.Price > productData.price.Price; <div class="@productlistItemClassList"> <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link " data-variant-id="@productData.variantId"> <div class="e-products-item-container"> <div class="e-products-item-image-container"> <a class="e-products-item-image-wrapper" href="@productData.url" onclick="trackProductClick(@HttpUtility.HtmlAttributeEncode( JsonService.Instance.ToJson( productData )))"> <img src="@productData.imageLarge" alt="" class="e-products-item-image"> @if ( productData.freeDeliveryLable && !productData.discountLable ) { <span class="danfilter-productlist-item-label label-freedelivery"> <span class="label-text">@Translation.GetTranslation( "eCom Product - Label - Free delivery" )</span> </span> } @if ( productData.discountLable && !productData.freeDeliveryLable ) { <span class="danfilter-productlist-item-label label-discount"> <span class="label-text">@Translation.GetTranslation( "eCom Product - Label - Discounts" )</span> </span> } @if ( productData.discountLable && productData.freeDeliveryLable ) { <span class="danfilter-productlist-item-label label-both"> <span class="label-text">@Translation.GetTranslation( "eCom Product - Label - Free delivery and discounts" )</span> </span> } @if ( imageOverlays.Any() ) { foreach ( dynamic imageOverlay in imageOverlays ) { <span class="danfilter-productlist-item-label-imageoverlay danfilter-label-@imageOverlay.value"> <span class="label-text"> <img src="@imageOverlay.url" alt="@imageOverlay.label" title="@imageOverlay.label"> </span> </span> } } </a> </div> <div class="e-products-item-text-container text-center"> <h3 class="e-products-item-name mb-0"> <a href="@productData.url" onclick="trackProductClick(@HttpUtility.HtmlAttributeEncode( JsonService.Instance.ToJson( productData )))"> @productData.name </a> </h3> <div class="danfilter-productlist-item-pictogram-wrapper"> @if ( productData.filterTypes.Count > 0 ) { foreach ( dynamic filterType in productData.filterTypes ) { <img src="@filterType.url" alt="@filterType.label" title="@filterType.label"> } } </div> @{ ProductStatus productStatus = Co3.Danfilter.Website.Services.ProductService.Instance.GetProductStatus( productData.id, productData.variantId ); } @RenderingService.Instance.PartialView( "/eCom/Product/_partials/productStatusStock.cshtml", productStatus ) @if ( showBeforePrice ) { <p class="e-products-item-text mb-0 small"> <small class="e-products-item-price m-0 e-product-price-before text-muted"> <a href="@productData.url" onclick="trackProductClick(@HttpUtility.HtmlAttributeEncode( JsonService.Instance.ToJson( productData )))"> @productData.priceBefore </a> </small> </p> } <p class="e-products-item-text mb-0"> <small class="e-products-item-price"> <a href="@productData.url" onclick="trackProductClick(@HttpUtility.HtmlAttributeEncode( JsonService.Instance.ToJson( productData )))"> @string.Format("{0}{1}", pricePrefix, productData.price) </a> </small> </p> <form action="/system/data/cart" class="e-product-form js-e-product-form" method="post"> <input name="CartCmd" type="hidden" value="Add"> <input type="hidden" name="ProductID" value="@productData.id"> <input name="VariantID" type="hidden" value=""> <input name="UnitID" type="hidden" value=""> <input name="Redirect" type="hidden" value=""> <div class="danfilter-product-list-add-to-cart-wrapper"> <input name="Quantity" type="hidden" value="1"> <button class="btn btn-primary" type="submit">@Translation.GetTranslation( "eCom Product - Add To Cart - Button" )</button> </div> </form> </div> </div> </div> </div> } } @helper ProductlistItemDanFilter( RazorTemplateBase< RazorTemplateModel< Template > >.LoopItem product, string productlistItemClassList = null ) { if ( product != null ) { List<dynamic> filterTypes = GetFilterTypes( product.GetLoop( "ProductCategories" ) ); List<dynamic> imageOverlays = GetImageOverlays( product.GetLoop( "ProductCategories" ) ); danfilterModels.PriceList prices = danfilterService.ProductService.Instance.GetPrices( product.GetString( "Ecom:Product.ID" ), EcomContext.LanguageID, PriceType.QuantityPrice ); EspressoPrice productEspressoPrice = GetLowestEspressoPrice( product.GetString( "Ecom:Product.ID" ), prices ); EspressoPrice productEspressoBeforePrice = GetLowestEspressoBeforePrice( product.GetString( "Ecom:Product.ID" ), prices ); string pricePrefix = GetPricePrefix(product.GetString( "Ecom:Product.ID" ), prices); dynamic productData = new { id = product.GetString( "Ecom:Product.ID" ), variantId = product.GetString( "Ecom:Product.VariantID" ), url = ProductService.Instance.GetProductLink( product.GetString( "Ecom:Product.PrimaryOrFirstGroupID" ), product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ), number = product.GetString( "Ecom:Product.Number" ), name = ProductService.Instance.GetName( product.GetString( "Ecom:Product.ID" ), product.GetString( "Ecom:Product.VariantID" ) ), imageLarge = ImageService.Instance.GetImageURL( product.GetString( "Ecom:Product.ImageDefault.Clean" ), 400, 400, 5 ), pricePrefix = pricePrefix, price = productEspressoPrice,//danfilterService.ProductService.Instance.GetPrice( product.GetString( "Ecom:Product.ID" ) ), priceBefore = productEspressoBeforePrice,//danfilterService.ProductService.Instance.GetBeforePrice( product.GetString( "Ecom:Product.ID" ) ), descriptionShortExtra01 = product.GetString( "Ecom:Product:Field.DescriptionShortExtra01" ), discountLable = HasDiscount(product.GetString( "Ecom:Product.ID" )), freeDeliveryLable = HasFreeDelivery(product.GetString( "Ecom:Product.ID" )), filterTypes = filterTypes, hasFilterTypes = filterTypes.Count > 0, imageOverlays = imageOverlays, hasImageOverlays = imageOverlays.Count > 0, stock = new { id = product.GetString( "Ecom:Product:Stock.ID" ), quantity = product.GetString( "Ecom:Product.Stock" ), text = product.GetString( "Ecom:Product:Stock.Text" ), delivery = product.GetString( "Ecom:Product:Stock.DeliveryText" ) } }; bool showBeforePrice = productData.priceBefore.Price != 0 && productData.priceBefore.Price > productData.price.Price; <div class="@productlistItemClassList"> <div class="e-products-item js-e-products-item js-e-products-item-@productData.id js-e-block-link e-block-link " data-variant-id="@productData.variantId"> <div class="e-products-item-container"> <div class="e-products-item-image-container"> <a class="e-products-item-image-wrapper" href="@productData.url"> <img src="@productData.imageLarge" alt="" class="e-products-item-image"> </a> </div> <div class="e-products-item-text-container text-center"> <h3 class="e-products-item-name mb-0"> <a href="@productData.url"> @productData.name </a> </h3> <div class="danfilter-productlist-item-pictogram-wrapper"> @if ( productData.filterTypes.Count > 0 ) { foreach ( dynamic filterType in productData.filterTypes ) { <img src="@filterType.url" alt="@filterType.label" title="@filterType.label"> } } </div> @{ ProductStatus productStatus = Co3.Danfilter.Website.Services.ProductService.Instance.GetProductStatus( productData.id, productData.variantId ); } @RenderingService.Instance.PartialView( "/eCom/Product/_partials/productStatusStock.cshtml", productStatus ) <form action="/system/data/cart" class="e-product-form js-e-product-form" method="post"> <input name="CartCmd" type="hidden" value="Add"> <input type="hidden" name="ProductID" value="@productData.id"> <input name="VariantID" type="hidden" value=""> <input name="UnitID" type="hidden" value=""> <input name="Redirect" type="hidden" value=""> <div class="danfilter-product-list-add-to-cart-wrapper"> <input name="Quantity" type="hidden" value="1"> <button class="btn btn-primary" type="submit">@Translation.GetTranslation( "eCom Product - Add To Cart - Button" )</button> </div> </form> </div> </div> </div> </div> } } @helper sectionStart( string sectionClasses = "e-section", string contentClasses = null, bool sectionCollapse = false, string sectionId = null, string collapseToggleTextExpand = null, string collapseToggleTextCollapse = null ) { sectionId = string.IsNullOrEmpty( sectionId ) ? Guid.NewGuid().ToString( "N" ) : sectionId; ClassList sectionClassList = new ClassList(); sectionClassList.AddClasses( sectionClasses ); ClassList contentClassList; if ( contentClasses == null ) { contentClassList = Co3.Espresso.Website.Services.PageService.Instance.GetResponsiveClassesFromPageItem( PageView.Current().Page.Item ); } else { contentClassList = new ClassList(); contentClassList.AddClasses( contentClasses ); } // TODO: Split collapse logic into separate helper function. string collapseId = Guid.NewGuid().ToString( "N" ); ClassList collapseToggleClassList = new ClassList(); if ( sectionCollapse ) { sectionClassList.AddClasses( "p-section-collapse js-p-section-collapse" ); collapseToggleClassList.AddClasses( contentClasses ); collapseToggleClassList.AddClasses( "p-section-collapse-toggle collapsed order-last text-center" ); contentClassList.AddClasses( "p-section-collapse-content collapse is-md" ); } @:<section class="@sectionClassList" id="@sectionId"> @:<div class="container-fluid"> @:<div class="row"> // TODO: Split collapse logic into separate helper function. if ( sectionCollapse ) { <div class="@collapseToggleClassList" data-toggle="collapse" data-target="#@collapseId"> <button class="btn bg-white p-section-collapse-toggle-btn" type="button"> <i class="material-icons p-section-collapse-toggle-icon">keyboard_arrow_down</i> </button> <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> </div> } @:<div class="@contentClassList" id="@collapseId"> @:<div class="row"> } @helper sectionEnd() { @:</div> @:</div> @:</div> @:</div> @:</section> } 2 3@{ ClassList productlistItemClassList = new ClassList(); Dictionary< string, decimal > paragraphEcommerceGridItemWidth = ProductlistService.Instance.GetGridItemWidth( PageView.Current().CurrentParagraph.Item.GetValue< string >( "ItemWidth" ) ); productlistItemClassList.AddClasses ( paragraphEcommerceGridItemWidth.ToResponsiveClasses () ); } <script> function trackProductClick(productObj) { dataLayer.push({ 'event': 'productClick', 'ecommerce': { 'click': { 'products': [{ 'name': productObj.name, 'id': productObj.id, 'price': productObj.price.Price }] } }, 'eventCallback': function() { document.location = productObj.url; } }); return false; } </script> <div class="e-productlist js-gtm-tracking-productlist"> <div class="row"> <div class="col-12"> <div class="e-productlist-body"> <div class="row"> <div class="col-12"> <div class="e-products"> <div class="row"> @{ int productIndex = 1; } <script> var arrImpressions = []; </script> @foreach ( LoopItem product in GetLoop( "Products" ) ) { if ( product.GetBoolean("Ecom:Product.Discontinued") == false ) { @ProductlistItem( product, productlistItemClassList.ToString() ) IEnumerable< ProductGroupRelation > groups = Dynamicweb.Ecommerce.Services.ProductGroups.GetProductGroupRelations( product.GetString( "Ecom:Product.ID" ) ); string listName = string.Empty; if ( groups != null && groups.FirstOrDefault( g => g.IsPrimary ) != null ) { listName = Dynamicweb.Ecommerce.Services.ProductGroups.GetGroup( groups.FirstOrDefault( g => g.IsPrimary ).GroupId )?.Name ; } <script> arrImpressions.push({ "id": '@product.GetString( "Ecom:Product.ID" )', "name": '@product.GetString( "Ecom:Product.Name" )', "price": @product.GetDouble( "Ecom:Product.Price.Price" ), "position": @productIndex, "list": '@listName' }); </script> productIndex++; } } </div> </div> </div> </div> </div> </div> </div> </div> <script> dataLayer.push({ "ecommerce": { "currencyCode": "@Context.Currency.Code", "impressions": arrImpressions } }); </script>

Hvilket Kinetic S400 filter skal jeg velge?

Standardfilter

• G4 filterklasse
• PM: 10
• Fjerner støv og skitt
•  Kan monteres på inn- og utsugning

Les mere her

standardfilter

Pollenfilter

• F7 filterklasse
• PM: 2,5
• Forminsker allergigener
• Montering på innsugningen

Les mere her

pollenfilter

SafeAir

• F9 filterklasse
• PM: 1,0
• Fjerner skadelige partikler
• Montering på innsugningen

Les mere her

SafeAir

Kulfilter

• Fjerner dårlig lukt
• Ingen partikkelfiltrering
• Monteres på innsugning med partikkelfilter

Les mere her

Kulfilter

Filterbytte på Kinetic S400

Filterhuset anbefaler at du bytter filter ca. Hver 3. måned. For å sikre deg at ventilasjonsanlegget ditt er rent for støv og skitt, anbefaler vi også at du regelmessig inspiserer filter og anlegg. Bor du i et område med mye forurensning, kan det være nødvendig å bytte filter oftere. 

Kinetic ventilasjonsfilter

Fant du ikke det du lette etter? 

Hvis du fortsatt er i tvil om hvilket anlegg som er montert hjemme hos deg, eller om hvilken filtertype du skal velge, så er du alltid velkommen til å kontakte Filterhusets kundeservice. Vi står også klar til å besvare med eventuelle andre spørsmål. 

Lad os høre fra deg

Adresse

Retur
Filterhuset, c/o Direct House, Bjørumsvegen 15, 4820 Froland, Norge

Nett lager og kontor
Farum Gydevej 75
3520 Farum, Danmark

Åpningstider

Kundeservice tlf.: 
Man - fre kl. 10.00 - 12.00

Fant du ikke det du lette etter? 

Hvis du fortsatt er i tvil om hvilket anlegg som er montert hjemme hos deg, eller om hvilken filtertype du skal velge, så er du alltid velkommen til å kontakte Filterhusets kundeservice. Vi står også klar til å besvare med eventuelle andre spørsmål. 

Lad os høre fra deg

Adresse

Retur
Filterhuset, c/o Direct House, Bjørumsvegen 15,
4820 Froland, Norge

Nett lager og kontor
Farum Gydevej 75
3520 Farum, Danmark

Åpningstider

Kundeservice tlf.: 
Man - fre kl. 10.00 - 12.00
 

keyboard_arrow_up