Cykelskur 5,7 m² - 1 modul m/dobbeltdør

Productnumber: 167560-1
TUN nummer 2095092

Et Cykelskur med dobbeltdør er et must til dig, der gerne vil passe godt på familiens cykler og andre køretøjer. Men du kender sikkert til problemet med at finde et pænt og holdbart cykelskur i træ i god kvalitet, som matcher resten af uderummet.  

Cykelskuret er designet i nordisk stil med lækre detaljer, der passer lige ind i nutidens boligindretning.

Vælg mellem flere varianter: lukket med dobbeltdør eller åben - eller måske en kombination, som gør det muligt også at opbevare andre redskaber og køretøjer bag en lukket dobbeltdør.

Med vores cykelskure og Multi Havehuse i træ har vi sørget for, at du kan bygge opbevaring til cyklerne uden at gå på kompromis med hverken kvalitet eller æstetik. Og så er skurene tilmed lette og overskuelige at bygge selv.

Out of Stock

Levering fra DKK 499.00

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