Systemair VSR 300 filter

Her på nettsiden finner du et bredt sortiment av filtre til Systemair VSR 300 ventilasjonsanlegg. Alle filtrene våre blir utviklet og produsert etter Systemairs spesifikasjoner på fabrikken vår i Danmark, hvor de også blir sendt fra. Derfor kan du være helt sikker på at filtrene passer perfekt i ventilasjonsanlegget ditt, og at leveringstiden er kort. 

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 Systemair VSR 300 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å Systemair VSR 300

For å sikre at filtrene dine ikke er tette eller at de trenger til å bli byttet, anbefaler vi at du inspiserer dem hver 3. måned. Det kan være vanskelig å bestemme holdbarheten på filtrene ettersom det kommer an på omgivelsene omkring boligen din, og hvilke filtre som sitter i anlegget nå. 

Vi anbefaler også at du bytter Standardfiltre hver 3 måned, og Pollenfilter hver 6. måned. 

Systemair VSR 300 ventilasjonsanlegg

SystemAir SAVE VSR 300 gir deg og din familie et sunt inneklima. Det filtrerer vekk alminnelige støvpartikler som kan være skadelige for våre omgivelser.

Filterets unike oppbygning av filtermediet og ramme, gir en tett anleggs flate på sidene av anlegget. Energien fra utsugningen brukes til å varme eller kjøle luften som kommer inn utenfra. På den måten får du en behagelig innetemperatur hele året. 

Systemair VSR 300 Ventilationsanlæg

Systemair VSR 300 ventilationsanlæg

Systemair VSR 300 ventilasjonsanlegg

SystemAir SAVE VSR 300 gir deg og din familie et sunt inneklima. Det filtrerer vekk alminnelige støvpartikler som kan være skadelige for våre omgivelser.

Filterets unike oppbygning av filtermediet og ramme, gir en tett anleggs flate på sidene av anlegget. Energien fra utsugningen brukes til å varme eller kjøle luften som kommer inn utenfra. På den måten får du en behagelig innetemperatur hele året. 

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