Artura kompositlåge 99×95 cm + 16 cm stolper til nedstøbning - højrehængt

Productnumber: 17570-1
EAN/GLN number: 5703393175700
TUN nummer 2033628

Med Artura Komposithegn får du alle fordelene ved det næsten vedligeholdelsesfri materiale, komposit, samt muligheden for at skræddersy din hegnsløsning. Kombinér det flotte skifergrå hegn - med træstruktur - med enten stålstolper eller kompositstolper, og få et imponerende, tidløst hegn, som passer til enhver stil.

Fordelen ved komposit er minimal vedligehold og lang holdbarhed. Produktet kræver udelukkende afvaskning med vand, så man slipper for at tænke på slibning og efterbehandling med træbeskyttelse/maling.

🟡 Få på lager (<5)

Error executing template "Designs/Swift/Paragraph/Swift_ProductPrice.cshtml"
System.FormatException: Input string was not in a correct format.
   at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Convert.ToDouble(String value)
   at Plus.CustomModules.Helpers.CampaignPrice.GetConvertedPriceWithVat(ProductViewModel product)
   at CompiledRazorTemplates.Dynamic.RazorEngine_08304da990a3406792fa85cf8addc7f2.Execute() in C:\inetpub\wwwroot\plus-prod\Files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml:line 140
   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 Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using System 3 @using System.Linq 4 @using Dynamicweb.Ecommerce.International 5 @using Dynamicweb.Ecommerce.Prices 6 @using Dynamicweb.Ecommerce.ProductCatalog 7 @using Plus.CustomModules.Helpers 8 @using PriceViewModel = Dynamicweb.Frontend.PriceViewModel 9 10 @{ 11 ProductViewModel product = new ProductViewModel(); 12 13 ProductViewModelSettings productSetting = new ProductViewModelSettings 14 { 15 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 16 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 17 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 18 ShopId = Pageview.Area.EcomShopId 19 }; 20 21 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 22 { 23 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 24 } 25 else if (Pageview.Item["DummyProduct"] != null) 26 { 27 28 string dummyProductId = ""; 29 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 30 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 31 if (productList.Products != null) 32 { 33 foreach (var p in productList.Products) { dummyProductId = p.Id; } 34 ProductViewModel dummyProduct = dummyProductId != "" ? ViewModelFactory.CreateView(productSetting, dummyProductId) : new ProductViewModel(); 35 product = dummyProduct; 36 } 37 else 38 { 39 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 40 } 41 } 42 else if (Pageview.Item["DummyProduct"] == null) 43 { 44 product = ViewModelFactory.CreateView(productSetting, Dynamicweb.Ecommerce.Services.Products.GetLastActiveProducts(1, Dynamicweb.Ecommerce.Common.Context.LanguageID, false).FirstOrDefault().Id); 45 } 46 47 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", ""); 48 bool anonymousUser = Pageview.User == null; 49 bool isErpConnectionDown = !Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsWebServiceConnectionAvailable(); 50 bool hidePrice = anonymousUsersLimitations.Contains("price") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHidePrices") && isErpConnectionDown; 51 52 bool showInformativePrice = Model.Item.GetBoolean("ShowInformativePrice"); 53 string unitId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("UnitId")) ? Dynamicweb.Context.Current.Request.Form.Get("UnitId") : string.Empty; 54 55 string priceFontSize = Model.Item.GetRawValueString("PriceSize", "fs-2"); 56 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); 57 string layout = Model.Item.GetRawValueString("Layout", "horizontal"); 58 string textAlign = horizontalAlign == "center" ? "text-center" : string.Empty; 59 textAlign = horizontalAlign == "end" ? "text-end" : textAlign; 60 61 horizontalAlign = horizontalAlign == "center" && layout == "horizontal" ? "justify-content-center" : horizontalAlign; 62 horizontalAlign = horizontalAlign == "end" && layout == "horizontal" ? "justify-content-end" : horizontalAlign; 63 horizontalAlign = horizontalAlign == "center" && layout == "vertical" ? "align-items-center" : horizontalAlign; 64 horizontalAlign = horizontalAlign == "end" && layout == "vertical" ? "align-items-end" : horizontalAlign; 65 66 string flexDirection = layout == "horizontal" ? string.Empty : "flex-column"; 67 string flexGap = layout == "horizontal" ? "gap-3" : string.Empty; 68 string order = layout == "horizontal" ? string.Empty : "order-2"; 69 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? "theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 70 theme = GetViewParameter("theme") != null ? GetViewParameterString("theme") : theme; 71 } 72 73 @if (!hidePrice && product.Id != null && !product.Discontinued) 74 { 75 string showPricesWithVat = Pageview.Area.EcomPricesWithVat.ToLower(); 76 bool neverShowVat = string.IsNullOrEmpty(showPricesWithVat); 77 78 string priceMin = ""; 79 string priceMax = ""; 80 81 string liveInfoClass = ""; 82 string productInfoFeed = ""; 83 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Ecommerce.DynamicwebLiveIntegration.TemplatesHelper.IsLazyLoadingForProductInfoEnabled; 84 if (isLazyLoadingForProductInfoEnabled) 85 { 86 if (Dynamicweb.Context.Current.Items.Contains("ProductInfoFeed")) 87 { 88 productInfoFeed = Dynamicweb.Context.Current.Items["ProductInfoFeed"]?.ToString(); 89 if (!string.IsNullOrEmpty(productInfoFeed)) 90 { 91 productInfoFeed = $"data-product-info-feed=\"{productInfoFeed}\""; 92 } 93 } 94 liveInfoClass = "js-live-info"; 95 } 96 97 <div class="@textAlign @liveInfoClass item_@Model.Item.SystemName.ToLower()" data-product-id="@product.Id" @productInfoFeed> 98 @if (showInformativePrice && product.PriceInformative.Price != 0) 99 { 100 <div class="opacity-50"> 101 <span>@Translate("RRP") </span> 102 <span class="text-decoration-line-through text-price">@product.PriceInformative.PriceFormatted</span> 103 </div> 104 } 105 <div class="@priceFontSize m-0 d-flex @flexDirection @flexGap @horizontalAlign product-price-efa" itemprop="offers" itemscope itemtype="https://schema.org/Offer"> 106 <span itemprop="priceCurrency" content="@product.Price.CurrencyCode" class="d-none"></span> 107 108 109 @if (showPricesWithVat == "false" && !neverShowVat) 110 { 111 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 112 { 113 <span itemprop="price" content="" class="d-none"></span> 114 <span class="text-decoration-line-through js-text-decoration-line-through opacity-75 me-3 text-price js-text-price d-none" data-show-if="LiveProductInfo.product.Price.Price != LiveProductInfo.product.PriceBeforeDiscount.Price"></span> 115 } 116 else 117 { 118 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceWithoutVatFormatted : product.PriceBeforeDiscount.PriceWithoutVatFormatted; 119 120 <span itemprop="price" content="@product.Price.PriceWithoutVat" class="d-none"></span> 121 if (product.Price.Price != product.PriceBeforeDiscount.Price) 122 { 123 <span class="text-decoration-line-through opacity-75 @order">@beforePrice</span> 124 } 125 } 126 } 127 else 128 { 129 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 130 { 131 <span itemprop="price" content="" class="d-none"></span> 132 <span class="text-decoration-line-through js-text-decoration-line-through opacity-75 me-3 text-price js-text-price d-none" data-show-if="LiveProductInfo.product.Price.Price != LiveProductInfo.product.PriceBeforeDiscount.Price"></span> 133 } 134 else 135 { 136 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceFormatted : product.PriceBeforeDiscount.PriceFormatted; 137 138 string googlepriceraw = product.Price.PriceWithVat.ToString(); 139 string googlepriceformatted = googlepriceraw.Replace(',', '.'); 140 var priceStandardFieldValueConverted = CampaignPrice.GetConvertedPriceWithVat(product); 141 bool campaignPrice = CampaignPrice.CheckCampaign(product, priceStandardFieldValueConverted); 142 143 <span itemprop="price" content="@googlepriceformatted" class="d-none"></span> 144 145 @*Old price shown if e.g. productdiscounts are active*@ 146 if (product.Price.Price != product.PriceBeforeDiscount.Price & campaignPrice == false) 147 { 148 <span class="text-decoration-line-through opacity-75 campaign-price-efa @order"> 149 <span class="text-price">@beforePrice</span> 150 </span> 151 } 152 } 153 } 154 155 @if (showPricesWithVat == "false" && !neverShowVat) 156 { 157 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 158 { 159 <span class="text-price js-text-price"> 160 <span class="spinner-border" role="status"></span> 161 </span> 162 } 163 else 164 { 165 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 166 167 if (product?.VariantInfo?.VariantInfo != null) 168 { 169 priceMin = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 170 priceMax = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 171 } 172 if (priceMin != priceMax) 173 { 174 price = priceMin + " - " + priceMax; 175 } 176 <span class="@theme"> 177 <span class="text-price">@price</span> 178 </span> 179 } 180 } 181 else 182 { 183 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 184 { 185 <span class="text-price js-text-price"> 186 <span class="spinner-border" role="status"></span> 187 </span> 188 } 189 else 190 { 191 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceFormatted : product.Price.PriceFormatted; 192 var priceStandardFieldValueConverted = CampaignPrice.GetConvertedPriceWithVat(product); 193 bool campaignPrice = CampaignPrice.CheckCampaign(product, priceStandardFieldValueConverted); 194 var priceBefore = CampaignPrice.PriceBeforeWithVat(product, priceStandardFieldValueConverted); 195 196 if (product?.VariantInfo?.VariantInfo != null) 197 { 198 priceMin = product?.VariantInfo?.PriceMin?.PriceFormatted != null ? product.VariantInfo.PriceMin.PriceFormatted : ""; 199 priceMax = product?.VariantInfo?.PriceMax?.PriceFormatted != null ? product.VariantInfo.PriceMax.PriceFormatted : ""; 200 } 201 if (priceMin != priceMax) 202 { 203 price = priceMin + " - " + priceMax; 204 } 205 <div class="d-flex flex-wrap"> 206 @if (campaignPrice) 207 { 208 var oldprice = product.PriceBeforeDiscount.PriceFormatted; 209 @*<span itemprop="price" content="@priceStandardFieldValueConverted" class="d-none"></span>*@ 210 <span class="text-decoration-line-through opacity-75 @order w-100 campaign-price-efa"> 211 <span class="text-price">@oldprice</span> 212 </span> 213 } 214 @*New Price shown if e.g. productdicounts are active*@ 215 <span class="@theme w-100"> 216 <span class="text-price">@price</span> 217 </span> 218 </div> 219 } 220 } 221 222 @* Stock state for Schema.org, start *@ 223 @{ 224 Uri url = Dynamicweb.Context.Current.Request.Url; 225 } 226 227 <link itemprop="url" href="@url"> 228 229 @{ 230 bool IsNeverOutOfStock = product.NeverOutOfstock; 231 } 232 233 @if (IsNeverOutOfStock) 234 { 235 <span itemprop="availability" class="d-none">@Translate("Available in stock")</span> 236 } 237 else 238 { 239 if (product.StockLevel > 0) 240 { 241 <span itemprop="availability" class="d-none">InStock</span> 242 } 243 else 244 { 245 <span itemprop="availability" class="d-none">OutOfStock</span> 246 } 247 } 248 @* Stock state for Schema.org, stop *@ 249 250 </div> 251 252 @if (showPricesWithVat == "false" && !neverShowVat) 253 { 254 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 255 { 256 <small class="opacity-85 fst-normal js-text-price-with-vat d-none" data-suffix="@Translate("Incl. VAT")"></small> 257 } 258 else 259 { 260 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 261 262 if (product?.VariantInfo?.VariantInfo != null) 263 { 264 priceMin = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 265 priceMax = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 266 } 267 if (priceMin != priceMax) 268 { 269 price = priceMin + " - " + priceMax; 270 } 271 <small class="opacity-85 fst-normal">@price @Translate("Incl. VAT")</small> 272 } 273 } 274 </div> 275 } 276 else if (Pageview.IsVisualEditorMode) 277 { 278 <div class="alert alert-dark m-0" role="alert"> 279 <span>@Translate("No products available")</span> 280 </div> 281 } 282