Cubic / PIPE Bænk - 120×37 cm - Lærk

Varenummer: 178102-3
EAN/GLN nummer: 5703393730886
DB-nummer: 1947702

Med en Cubic / PIPE Bænk har du mulighed for at sammensætte blomsterkasserne og få en siddeplads lige ved siden af planterne - så det er nemmere når der skal luges og passes.

På lager
Error executing template "Designs/Swift/Paragraph/Swift_ProductPrice.cshtml"
System.NullReferenceException: Objektreferencen er ikke indstillet til en forekomst af et objekt.
   ved Plus.CustomModules.Helpers.CampaignPrice.GetConvertedPriceWithVat(ProductViewModel product)
   ved CompiledRazorTemplates.Dynamic.RazorEngine_70791a257ac84d6fb7f712bbe962c324.Execute() i C:\inetpub\wwwroot\plus-prod\Files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml:linje 180
   ved RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   ved RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   ved RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   ved RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   ved Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   ved Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   ved 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 <span itemprop="price" content="@product.Price.Price" class="d-none"></span> 133 134 if (product.Price.Price != product.PriceBeforeDiscount.Price) 135 { 136 <span class="text-decoration-line-through opacity-75 @order"> 137 <span class="text-price">@beforePrice</span> 138 </span> 139 } 140 } 141 } 142 143 @if (showPricesWithVat == "false" && !neverShowVat) 144 { 145 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 146 { 147 <span class="text-price js-text-price"> 148 <span class="spinner-border" role="status"></span> 149 </span> 150 } 151 else 152 { 153 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 154 155 if (product?.VariantInfo?.VariantInfo != null) 156 { 157 priceMin = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 158 priceMax = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 159 } 160 if (priceMin != priceMax) 161 { 162 price = priceMin + " - " + priceMax; 163 } 164 <span class="@theme"> 165 <span class="text-price">@price</span> 166 </span> 167 } 168 } 169 else 170 { 171 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 172 { 173 <span class="text-price js-text-price"> 174 <span class="spinner-border" role="status"></span> 175 </span> 176 } 177 else 178 { 179 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceFormatted : product.Price.PriceFormatted; 180 var priceStandardFieldValueConverted = CampaignPrice.GetConvertedPriceWithVat(product); 181 bool campaignPrice = CampaignPrice.CheckCampaign(product, priceStandardFieldValueConverted); 182 var priceBefore = CampaignPrice.PriceBeforeWithVat(product, priceStandardFieldValueConverted); 183 184 if (product?.VariantInfo?.VariantInfo != null) 185 { 186 priceMin = product?.VariantInfo?.PriceMin?.PriceFormatted != null ? product.VariantInfo.PriceMin.PriceFormatted : ""; 187 priceMax = product?.VariantInfo?.PriceMax?.PriceFormatted != null ? product.VariantInfo.PriceMax.PriceFormatted : ""; 188 } 189 if (priceMin != priceMax) 190 { 191 price = priceMin + " - " + priceMax; 192 } 193 <div class="d-flex flex-wrap"> 194 @if (campaignPrice) 195 { 196 @*<span itemprop="price" content="@priceStandardFieldValueConverted" class="d-none"></span>*@ 197 <span class="text-decoration-line-through opacity-75 @order w-100"> 198 <span class="text-price">@priceBefore</span> 199 </span> 200 } 201 <span class="@theme w-100"> 202 <span class="text-price">@price</span> 203 </span> 204 </div> 205 } 206 } 207 208 @* Stock state for Schema.org, start *@ 209 @{ 210 Uri url = Dynamicweb.Context.Current.Request.Url; 211 } 212 213 <link itemprop="url" href="@url"> 214 215 @{ 216 bool IsNeverOutOfStock = product.NeverOutOfstock; 217 } 218 219 @if (IsNeverOutOfStock) 220 { 221 <span itemprop="availability" class="d-none">@Translate("Available in stock")</span> 222 } 223 else 224 { 225 if (product.StockLevel > 0) 226 { 227 <span itemprop="availability" class="d-none">InStock</span> 228 } 229 else 230 { 231 <span itemprop="availability" class="d-none">OutOfStock</span> 232 } 233 } 234 @* Stock state for Schema.org, stop *@ 235 236 </div> 237 238 @if (showPricesWithVat == "false" && !neverShowVat) 239 { 240 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 241 { 242 <small class="opacity-85 fst-normal js-text-price-with-vat d-none" data-suffix="@Translate("Incl. VAT")"></small> 243 } 244 else 245 { 246 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 247 248 if (product?.VariantInfo?.VariantInfo != null) 249 { 250 priceMin = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 251 priceMax = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 252 } 253 if (priceMin != priceMax) 254 { 255 price = priceMin + " - " + priceMax; 256 } 257 <small class="opacity-85 fst-normal">@price @Translate("Incl. VAT")</small> 258 } 259 } 260 </div> 261 } else if (Pageview.IsVisualEditorMode) { 262 <div class="alert alert-dark m-0" role="alert"> 263 <span>@Translate("No products available")</span> 264 </div> 265 } 266