Muttertrekker på luft 1/2" 610/814/1017Nmm
Error compiling template "Designs/Swift/Paragraph/Swift_ProductPrice.cshtml" Line 552: Argument 1: cannot convert from 'double?' to 'decimal'
1 //------------------------------------------------------------------------------ 2 // <auto-generated> 3 // This code was generated by a tool. 4 // Runtime Version:4.0.30319.42000 5 // 6 // Changes to this file may cause incorrect behavior and will be lost if 7 // the code is regenerated. 8 // </auto-generated> 9 //------------------------------------------------------------------------------ 10 11 namespace CompiledRazorTemplates.Dynamic { 12 13 #line 3 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 14 using System; 15 16 #line default 17 #line hidden 18 using System.Collections.Generic; 19 using System.Linq; 20 21 #line 2 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 22 using Dynamicweb.Ecommerce.ProductCatalog; 23 24 #line default 25 #line hidden 26 27 #line 4 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 28 using System.Globalization; 29 30 #line default 31 #line hidden 32 33 34 public class RazorEngine_63383127be8b4ff99d025d21dca95b37 : Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> { 35 36 #line hidden 37 38 public RazorEngine_63383127be8b4ff99d025d21dca95b37() { 39 } 40 41 public override void Execute() { 42 WriteLiteral("\r\n"); 43 44 45 #line 6 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 46 47 ProductViewModel product = null; 48 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 49 { 50 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 51 } 52 else if (Pageview.Item["DummyProduct"] != null) 53 { 54 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 55 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 56 57 if (productList?.Products is object) 58 { 59 product = productList.Products[0]; 60 } 61 } 62 63 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", ""); 64 bool anonymousUser = Pageview.User == null; 65 bool isErpConnectionDown = !Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsWebServiceConnectionAvailable"]); 66 bool hidePrice = anonymousUsersLimitations.Contains("price") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHidePrices") && isErpConnectionDown; 67 var isB2C = Pageview.User != null && Dynamicweb.Security.UserManagement.User.GetAncestors(Pageview.User.ID)?.Any(x => x.CustomerNumber == "103895") == true; 68 var user = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser(); 69 bool isInPrivateNewsletterGroup = user != null && user.Groups != null && user.Groups.Any(group => group.Name == "Private Newsletter Email"); 70 bool isDetailPage = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ProductID")); 71 72 73 #line default 74 #line hidden 75 WriteLiteral("\r\n\r\n"); 76 77 78 #line 33 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 79 if (product is object && !hidePrice) 80 { 81 bool showInformativePrice = Model.Item.GetBoolean("ShowInformativePrice"); 82 string unitId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("UnitId")) ? Dynamicweb.Context.Current.Request.Form.Get("UnitId") : string.Empty; 83 84 string priceFontSize = Model.Item.GetRawValueString("PriceSize", "fs-2"); 85 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); 86 string layout = Model.Item.GetRawValueString("Layout", "horizontal"); 87 string textAlign = horizontalAlign == "center" ? "text-center" : string.Empty; 88 textAlign = horizontalAlign == "end" ? "text-end" : textAlign; 89 90 91 horizontalAlign = horizontalAlign == "center" && layout == "horizontal" ? "justify-content-center" : horizontalAlign; 92 horizontalAlign = horizontalAlign == "end" && layout == "horizontal" ? "justify-content-end" : horizontalAlign; 93 horizontalAlign = horizontalAlign == "center" && layout == "vertical" ? "align-items-center" : horizontalAlign; 94 horizontalAlign = horizontalAlign == "end" && layout == "vertical" ? "align-items-end" : horizontalAlign; 95 96 string flexDirection = layout == "horizontal" ? string.Empty : "flex-column"; 97 string flexGap = layout == "horizontal" ? "gap-3" : string.Empty; 98 string order = layout == "horizontal" ? string.Empty : "order-2"; 99 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? "theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 100 theme = GetViewParameter("theme") != null ? GetViewParameterString("theme") : theme; 101 102 string contentPadding = Model.Item.GetRawValueString("ContentPadding", ""); 103 contentPadding = contentPadding == "none" ? "p-0" : contentPadding; 104 contentPadding = contentPadding == "small" ? "p-1 px-md-2 py-md-1" : contentPadding; 105 contentPadding = contentPadding == "large" ? "p-2 px-md-3 py-md-2" : contentPadding; 106 107 string showPricesWithVat = Pageview.Area.EcomPricesWithVat.ToLower(); 108 bool neverShowVat = string.IsNullOrEmpty(showPricesWithVat); 109 110 var stocksLevels = product.StockUnits.Select(x => x.StockLevel).Sum(); 111 112 var priceWithVat = product.Price.PriceWithVat; 113 string formattedPriceWithVat = priceWithVat.ToString("0.00", CultureInfo.InvariantCulture); 114 115 string priceMinWithoutVat = ""; 116 string priceMaxWithoutVat = ""; 117 string priceMinWithVat = ""; 118 string priceMaxWithVat = ""; 119 120 string liveInfoClass = ""; 121 string productInfoFeed = ""; 122 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]); 123 if (isLazyLoadingForProductInfoEnabled) 124 { 125 if (Dynamicweb.Context.Current.Items.Contains("ProductInfoFeed")) 126 { 127 productInfoFeed = Dynamicweb.Context.Current.Items["ProductInfoFeed"]?.ToString(); 128 if (!string.IsNullOrEmpty(productInfoFeed)) 129 { 130 productInfoFeed = $"data-product-info-feed=\"{productInfoFeed}\""; 131 } 132 } 133 liveInfoClass = "js-live-info"; 134 } 135 136 137 138 #line default 139 #line hidden 140 WriteLiteral(" <div"); 141 142 WriteAttribute("class", Tuple.Create(" class=\"", 5059), Tuple.Create("\"", 5130) 143 144 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 145 , Tuple.Create(Tuple.Create("", 5067), Tuple.Create<System.Object, System.Int32>(textAlign 146 147 #line default 148 #line hidden 149 , 5067), false) 150 151 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 152 , Tuple.Create(Tuple.Create(" ", 5077), Tuple.Create<System.Object, System.Int32>(liveInfoClass 153 154 #line default 155 #line hidden 156 , 5078), false) 157 , Tuple.Create(Tuple.Create(" ", 5092), Tuple.Create("item_", 5093), true) 158 159 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 160 , Tuple.Create(Tuple.Create("", 5098), Tuple.Create<System.Object, System.Int32>(Model.Item.SystemName.ToLower() 161 162 #line default 163 #line hidden 164 , 5098), false) 165 ); 166 167 WriteLiteral(" data-product-id=\""); 168 169 170 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 171 Write(product.Id); 172 173 174 #line default 175 #line hidden 176 WriteLiteral("\""); 177 178 WriteLiteral(" data-variant-id=\""); 179 180 181 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 182 Write(product.VariantId); 183 184 185 #line default 186 #line hidden 187 WriteLiteral("\""); 188 189 WriteLiteral(" "); 190 191 192 #line 90 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 193 Write(productInfoFeed); 194 195 196 #line default 197 #line hidden 198 WriteLiteral(">\r\n"); 199 200 201 #line 91 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 202 203 204 #line default 205 #line hidden 206 207 #line 91 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 208 if (showInformativePrice && product.PriceInformative.Price != 0) 209 { 210 211 212 #line default 213 #line hidden 214 WriteLiteral(" <div"); 215 216 WriteLiteral(" class=\"opacity-50\""); 217 218 WriteLiteral(">\r\n <span>"); 219 220 221 #line 94 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 222 Write(Translate("RRP")); 223 224 225 #line default 226 #line hidden 227 WriteLiteral(" </span>\r\n <span"); 228 229 WriteLiteral(" class=\"text-decoration-line-through text-price\""); 230 231 WriteLiteral(">"); 232 233 234 #line 95 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 235 Write(product.PriceInformative.PriceFormatted); 236 237 238 #line default 239 #line hidden 240 WriteLiteral("</span>\r\n </div>\r\n"); 241 242 243 #line 97 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 244 } 245 246 247 #line default 248 #line hidden 249 WriteLiteral(" <div"); 250 251 WriteAttribute("class", Tuple.Create(" class=\"", 5553), Tuple.Create("\"", 5627) 252 253 #line 98 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 254 , Tuple.Create(Tuple.Create("", 5561), Tuple.Create<System.Object, System.Int32>(priceFontSize 255 256 #line default 257 #line hidden 258 , 5561), false) 259 , Tuple.Create(Tuple.Create(" ", 5575), Tuple.Create("m-0", 5576), true) 260 , Tuple.Create(Tuple.Create(" ", 5579), Tuple.Create("d-flex", 5580), true) 261 262 #line 98 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 263 , Tuple.Create(Tuple.Create(" ", 5586), Tuple.Create<System.Object, System.Int32>(flexDirection 264 265 #line default 266 #line hidden 267 , 5587), false) 268 269 #line 98 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 270 , Tuple.Create(Tuple.Create(" ", 5601), Tuple.Create<System.Object, System.Int32>(flexGap 271 272 #line default 273 #line hidden 274 , 5602), false) 275 276 #line 98 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 277 , Tuple.Create(Tuple.Create(" ", 5610), Tuple.Create<System.Object, System.Int32>(horizontalAlign 278 279 #line default 280 #line hidden 281 , 5611), false) 282 ); 283 284 WriteLiteral(" itemprop=\"offers\""); 285 286 WriteLiteral(" itemscope"); 287 288 WriteLiteral(" itemtype=\"https://schema.org/Offer\""); 289 290 WriteLiteral(">\r\n <span"); 291 292 WriteLiteral(" itemprop=\"priceCurrency\""); 293 294 WriteAttribute("content", Tuple.Create(" content=\"", 5737), Tuple.Create("\"", 5774) 295 296 #line 99 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 297 , Tuple.Create(Tuple.Create("", 5747), Tuple.Create<System.Object, System.Int32>(product.Price.CurrencyCode 298 299 #line default 300 #line hidden 301 , 5747), false) 302 ); 303 304 WriteLiteral(" class=\"d-none\""); 305 306 WriteLiteral("></span>\r\n\r\n\r\n\r\n"); 307 308 309 #line 103 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 310 311 312 #line default 313 #line hidden 314 315 #line 103 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 316 if (showPricesWithVat == "false" && !neverShowVat) 317 { 318 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 319 { 320 321 322 #line default 323 #line hidden 324 WriteLiteral(" <span"); 325 326 WriteLiteral(" itemprop=\"price\""); 327 328 WriteLiteral(" content=\"\""); 329 330 WriteLiteral(" class=\"d-none\""); 331 332 WriteLiteral("></span>\r\n"); 333 334 WriteLiteral(" <span"); 335 336 WriteLiteral(" class=\"text-decoration-line-through js-text-decoration-line-through opacity-75 m" + 337 "e-3 text-price js-text-price d-none\""); 338 339 WriteLiteral(" data-show-if=\"LiveProductInfo.product.Price.Price != LiveProductInfo.product.Pri" + 340 "ceBeforeDiscount.Price\""); 341 342 WriteLiteral("></span>\r\n"); 343 344 345 #line 109 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 346 347 348 349 #line default 350 #line hidden 351 WriteLiteral(" <span"); 352 353 WriteLiteral(" class=\"text-price js-text-price\""); 354 355 WriteLiteral(">\r\n <span"); 356 357 WriteLiteral(" class=\"spinner-border\""); 358 359 WriteLiteral(" role=\"status\""); 360 361 WriteLiteral("></span>\r\n </span>\r\n"); 362 363 364 #line 113 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 365 } 366 else 367 { 368 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceWithoutVatFormatted : product.PriceBeforeDiscount.PriceWithoutVatFormatted; 369 if (product?.VariantInfo?.VariantInfo != null && product.VariantInfo.PriceMax?.PriceWithVatFormatted != null) 370 { 371 var variantPriceWithVat = product.VariantInfo.PriceMax.PriceWithVat; 372 string variantFormattedPriceWithVat = variantPriceWithVat.ToString("0.00", CultureInfo.InvariantCulture); 373 374 375 376 #line default 377 #line hidden 378 WriteLiteral(" <span"); 379 380 WriteLiteral(" itemprop=\"price\""); 381 382 WriteAttribute("content", Tuple.Create(" content=\"", 7183), Tuple.Create("\"", 7222) 383 384 #line 122 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 385 , Tuple.Create(Tuple.Create("", 7193), Tuple.Create<System.Object, System.Int32>(variantFormattedPriceWithVat 386 387 #line default 388 #line hidden 389 , 7193), false) 390 ); 391 392 WriteLiteral(" class=\"d-none\""); 393 394 WriteLiteral("></span>\r\n"); 395 396 397 #line 123 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 398 } 399 else 400 { 401 402 403 #line default 404 #line hidden 405 WriteLiteral(" <span"); 406 407 WriteLiteral(" itemprop=\"price\""); 408 409 WriteAttribute("content", Tuple.Create(" content=\"", 7366), Tuple.Create("\"", 7398) 410 411 #line 126 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 412 , Tuple.Create(Tuple.Create("", 7376), Tuple.Create<System.Object, System.Int32>(formattedPriceWithVat 413 414 #line default 415 #line hidden 416 , 7376), false) 417 ); 418 419 WriteLiteral(" class=\"d-none\""); 420 421 WriteLiteral("></span>\r\n"); 422 423 424 #line 127 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 425 } 426 if (product.Price.Price != product.PriceBeforeDiscount.Price) 427 { 428 429 430 #line default 431 #line hidden 432 WriteLiteral(" <span"); 433 434 WriteAttribute("class", Tuple.Create(" class=\"", 7582), Tuple.Create("\"", 7636) 435 , Tuple.Create(Tuple.Create("", 7590), Tuple.Create("text-decoration-line-through", 7590), true) 436 , Tuple.Create(Tuple.Create(" ", 7618), Tuple.Create("opacity-75", 7619), true) 437 438 #line 130 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 439 , Tuple.Create(Tuple.Create(" ", 7629), Tuple.Create<System.Object, System.Int32>(order 440 441 #line default 442 #line hidden 443 , 7630), false) 444 ); 445 446 WriteLiteral(">"); 447 448 449 #line 130 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 450 Write(beforePrice); 451 452 453 #line default 454 #line hidden 455 WriteLiteral("</span>\r\n"); 456 457 458 #line 131 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 459 } 460 461 string pricesRangeWithVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 462 string pricesRangeWithoutVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 463 464 if (product?.VariantInfo?.VariantInfo != null) 465 { 466 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 467 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 468 priceMaxWithVat = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 469 priceMinWithVat = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 470 } 471 if (priceMinWithoutVat != priceMaxWithoutVat) 472 { 473 pricesRangeWithoutVat = priceMinWithoutVat + " - " + priceMaxWithoutVat; 474 pricesRangeWithVat = priceMinWithVat + " - " + priceMaxWithVat; 475 476 } 477 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 478 { 479 pricesRangeWithVat = priceMaxWithVat; 480 pricesRangeWithoutVat = priceMinWithoutVat; 481 } 482 483 bool isMobile = Pageview.Device.ToString() == "Mobile"; 484 string price = ""; 485 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 486 { 487 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 488 { 489 if (isMobile) 490 { 491 price = "Fra " + priceMinWithVat; 492 } 493 else 494 { 495 price = pricesRangeWithVat; 496 } 497 } 498 else 499 { 500 price = pricesRangeWithVat; 501 } 502 } 503 else 504 { 505 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 506 { 507 if (isMobile) 508 { 509 price = "Fra " + priceMaxWithoutVat; 510 } 511 else 512 { 513 price = pricesRangeWithoutVat; 514 } 515 } 516 else 517 { 518 price = pricesRangeWithoutVat; 519 } 520 } 521 522 523 #line default 524 #line hidden 525 WriteLiteral(" <span"); 526 527 WriteAttribute("class", Tuple.Create(" class=\"", 10989), Tuple.Create("\"", 11019) 528 529 #line 193 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 530 , Tuple.Create(Tuple.Create("", 10997), Tuple.Create<System.Object, System.Int32>(theme 531 532 #line default 533 #line hidden 534 , 10997), false) 535 536 #line 193 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 537 , Tuple.Create(Tuple.Create(" ", 11003), Tuple.Create<System.Object, System.Int32>(contentPadding 538 539 #line default 540 #line hidden 541 , 11004), false) 542 ); 543 544 WriteLiteral(">\r\n<!-- Added this section -->\t\t\t\t\t\t\r\n"); 545 546 547 #line 195 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 548 if (@product.Cost != 0) 549 550 { 551 double.TryParse(price, out double priceValue); 552 double? discountPercentage = Math.Floor(((product.Cost - product.Price.PriceWithVat) / product.Cost) * 100); 553 554 555 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 556 { 557 558 559 #line default 560 #line hidden 561 WriteLiteral("<span"); 562 563 WriteLiteral(" class=\"text-price fw-bold\""); 564 565 WriteLiteral(" style=\"font-size: 0.8em; text-decoration: line-through;\""); 566 567 WriteLiteral(">"); 568 569 570 #line 204 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 571 Write(product.Cost); 572 573 574 #line default 575 #line hidden 576 WriteLiteral(",-</span>\r\n"); 577 578 WriteLiteral("<span"); 579 580 WriteLiteral(" style=\"background-color: red; color: white; font-size: 0.8em; font-weight: bold;" + 581 " padding: 2px 6px; border-radius: 4px; margin-left: 5px;\""); 582 583 WriteLiteral(">\r\n - "); 584 585 586 #line 206 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 587 Write(discountPercentage.Value.ToString("0")); 588 589 590 #line default 591 #line hidden 592 WriteLiteral("%\r\n </span>"); 593 594 WriteLiteral("<br>\r\n"); 595 596 597 #line 208 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 598 } 599 else 600 { 601 double? costExVat = product.Cost /1.25; 602 603 604 #line default 605 #line hidden 606 WriteLiteral("<span"); 607 608 WriteLiteral(" class=\"text-price fw-bold\""); 609 610 WriteLiteral(" style=\"font-size: 0.8em; text-decoration: line-through;\""); 611 612 WriteLiteral(">"); 613 614 615 #line 212 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 616 Write(costExVat); 617 618 619 #line default 620 #line hidden 621 WriteLiteral(",-</span>\r\n"); 622 623 WriteLiteral("<span"); 624 625 WriteLiteral(" style=\"background-color: red; color: white; font-size: 0.8em; font-weight: bold;" + 626 " padding: 2px 6px; border-radius: 4px; margin-left: 5px;\""); 627 628 WriteLiteral(">\r\n - "); 629 630 631 #line 214 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 632 Write(discountPercentage.Value.ToString("0")); 633 634 635 #line default 636 #line hidden 637 WriteLiteral("%\r\n </span>"); 638 639 WriteLiteral("<br>\r\n"); 640 641 642 #line 216 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 643 } 644 } 645 646 647 #line default 648 #line hidden 649 WriteLiteral("<!-- Until this -->\r\n <span"); 650 651 WriteLiteral(" class=\"text-price fw-bold\""); 652 653 WriteLiteral(">"); 654 655 656 #line 219 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 657 Write(price); 658 659 660 #line default 661 #line hidden 662 WriteLiteral("</span>\r\n </span>\r\n"); 663 664 665 #line 221 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 666 } 667 } 668 else 669 { 670 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 671 { 672 673 674 #line default 675 #line hidden 676 WriteLiteral(" <span"); 677 678 WriteLiteral(" itemprop=\"price\""); 679 680 WriteLiteral(" content=\"\""); 681 682 WriteLiteral(" class=\"d-none\""); 683 684 WriteLiteral("></span>\r\n"); 685 686 WriteLiteral(" <span"); 687 688 WriteLiteral(" class=\"text-decoration-line-through js-text-decoration-line-through opacity-75 m" + 689 "e-3 text-price js-text-price d-none\""); 690 691 WriteLiteral(" data-show-if=\"LiveProductInfo.product.Price.Price != LiveProductInfo.product.Pri" + 692 "ceBeforeDiscount.Price\""); 693 694 WriteLiteral("></span>\r\n"); 695 696 697 #line 229 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 698 699 700 701 #line default 702 #line hidden 703 WriteLiteral(" <span"); 704 705 WriteLiteral(" class=\"text-price js-text-price\""); 706 707 WriteLiteral(">\r\n <span"); 708 709 WriteLiteral(" class=\"spinner-border\""); 710 711 WriteLiteral(" role=\"status\""); 712 713 WriteLiteral("></span>\r\n </span>\r\n"); 714 715 716 #line 233 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 717 } 718 else 719 { 720 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceFormatted : product.PriceBeforeDiscount.PriceFormatted; 721 722 723 724 #line default 725 #line hidden 726 WriteLiteral(" <span"); 727 728 WriteLiteral(" itemprop=\"price\""); 729 730 WriteAttribute("content", Tuple.Create(" content=\"", 13126), Tuple.Create("\"", 13158) 731 732 #line 238 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 733 , Tuple.Create(Tuple.Create("", 13136), Tuple.Create<System.Object, System.Int32>(formattedPriceWithVat 734 735 #line default 736 #line hidden 737 , 13136), false) 738 ); 739 740 WriteLiteral(" class=\"d-none\""); 741 742 WriteLiteral("></span>\r\n"); 743 744 745 #line 239 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 746 747 if (product.Price.Price != product.PriceBeforeDiscount.Price) 748 { 749 750 751 #line default 752 #line hidden 753 WriteLiteral(" <span"); 754 755 WriteAttribute("class", Tuple.Create(" class=\"", 13321), Tuple.Create("\"", 13375) 756 , Tuple.Create(Tuple.Create("", 13329), Tuple.Create("text-decoration-line-through", 13329), true) 757 , Tuple.Create(Tuple.Create(" ", 13357), Tuple.Create("opacity-75", 13358), true) 758 759 #line 242 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 760 , Tuple.Create(Tuple.Create(" ", 13368), Tuple.Create<System.Object, System.Int32>(order 761 762 #line default 763 #line hidden 764 , 13369), false) 765 ); 766 767 WriteLiteral(">\r\n <span"); 768 769 WriteLiteral(" class=\"text-price\""); 770 771 WriteLiteral(">"); 772 773 774 #line 243 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 775 Write(beforePrice); 776 777 778 #line default 779 #line hidden 780 WriteLiteral("</span>\r\n </span>\r\n"); 781 782 783 #line 245 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 784 } 785 786 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceFormatted : product.Price.PriceFormatted; 787 788 if (product?.VariantInfo?.VariantInfo != null) 789 { 790 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceFormatted != null ? product.VariantInfo.PriceMin.PriceFormatted : ""; 791 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceFormatted != null ? product.VariantInfo.PriceMax.PriceFormatted : ""; 792 } 793 if (priceMinWithoutVat != priceMaxWithoutVat) 794 { 795 price = priceMinWithoutVat + " - " + priceMaxWithoutVat; 796 } 797 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 798 { 799 price = priceMinWithoutVat; 800 } 801 802 803 #line default 804 #line hidden 805 WriteLiteral(" <span"); 806 807 WriteAttribute("class", Tuple.Create(" class=\"", 14498), Tuple.Create("\"", 14528) 808 809 #line 262 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 810 , Tuple.Create(Tuple.Create("", 14506), Tuple.Create<System.Object, System.Int32>(theme 811 812 #line default 813 #line hidden 814 , 14506), false) 815 816 #line 262 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 817 , Tuple.Create(Tuple.Create(" ", 14512), Tuple.Create<System.Object, System.Int32>(contentPadding 818 819 #line default 820 #line hidden 821 , 14513), false) 822 ); 823 824 WriteLiteral(">\r\n <span"); 825 826 WriteLiteral(" class=\"text-price\""); 827 828 WriteLiteral(">"); 829 830 831 #line 263 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 832 Write(price); 833 834 835 #line default 836 #line hidden 837 WriteLiteral("</span>\r\n </span>\r\n"); 838 839 840 #line 265 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 841 } 842 } 843 844 845 #line default 846 #line hidden 847 WriteLiteral("\r\n "); 848 849 WriteLiteral("\r\n"); 850 851 852 #line 269 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 853 854 855 #line default 856 #line hidden 857 858 #line 269 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 859 860 Uri url = Dynamicweb.Context.Current.Request.Url; 861 862 863 #line default 864 #line hidden 865 WriteLiteral("\r\n\r\n <link"); 866 867 WriteLiteral(" itemprop=\"url\""); 868 869 WriteAttribute("href", Tuple.Create(" href=\"", 14846), Tuple.Create("\"", 14857) 870 871 #line 273 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 872 , Tuple.Create(Tuple.Create("", 14853), Tuple.Create<System.Object, System.Int32>(url 873 874 #line default 875 #line hidden 876 , 14853), false) 877 ); 878 879 WriteLiteral(">\r\n\r\n"); 880 881 882 #line 275 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 883 884 885 #line default 886 #line hidden 887 888 #line 275 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 889 890 bool IsNeverOutOfStock = product.NeverOutOfstock; 891 892 893 #line default 894 #line hidden 895 WriteLiteral("\r\n\r\n"); 896 897 898 #line 279 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 899 900 901 #line default 902 #line hidden 903 904 #line 279 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 905 if (IsNeverOutOfStock) 906 { 907 if (stocksLevels > 0) 908 { 909 910 911 #line default 912 #line hidden 913 WriteLiteral(" <link"); 914 915 WriteLiteral(" itemprop=\"availability\""); 916 917 WriteLiteral(" href=\"https://schema.org/InStock\""); 918 919 WriteLiteral(" class=\"d-none\""); 920 921 WriteLiteral(" />\r\n"); 922 923 924 #line 284 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 925 } 926 else 927 { 928 929 930 #line default 931 #line hidden 932 WriteLiteral(" <link"); 933 934 WriteLiteral(" itemprop=\"availability\""); 935 936 WriteLiteral(" href=\"https://schema.org/OutOfStock\""); 937 938 WriteLiteral(" class=\"d-none\""); 939 940 WriteLiteral(" />\r\n"); 941 942 943 #line 288 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 944 } 945 946 } 947 948 949 950 #line default 951 #line hidden 952 953 #line 292 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 954 955 956 957 #line default 958 #line hidden 959 WriteLiteral("\r\n </div>\r\n\r\n"); 960 961 962 #line 296 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 963 964 965 #line default 966 #line hidden 967 968 #line 296 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 969 if (showPricesWithVat == "false" && !neverShowVat) 970 { 971 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 972 { 973 974 975 #line default 976 #line hidden 977 WriteLiteral(" <small"); 978 979 WriteLiteral(" class=\"opacity-85 fst-normal js-text-price-with-vat d-none\""); 980 981 WriteLiteral(" data-suffix=\""); 982 983 984 #line 300 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 985 Write(Translate("Incl. VAT")); 986 987 988 #line default 989 #line hidden 990 WriteLiteral("\""); 991 992 WriteLiteral("></small>\r\n"); 993 994 995 #line 301 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 996 } 997 else 998 { 999 string pricesRangeWithVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 1000 string pricesRangeWithoutVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 1001 1002 bool isMobile = Pageview.Device.ToString() == "Mobile"; 1003 1004 if (product?.VariantInfo?.VariantInfo != null) 1005 { 1006 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 1007 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 1008 priceMaxWithVat = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 1009 priceMinWithVat = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 1010 } 1011 if (priceMinWithoutVat != priceMaxWithoutVat) 1012 { 1013 pricesRangeWithoutVat = priceMinWithoutVat + " - " + priceMaxWithoutVat; 1014 pricesRangeWithVat = priceMinWithVat + " - " + priceMaxWithVat; 1015 1016 } 1017 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 1018 { 1019 pricesRangeWithoutVat = priceMinWithoutVat; 1020 pricesRangeWithVat = priceMaxWithVat; 1021 } 1022 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 1023 { 1024 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 1025 { 1026 if (isMobile) 1027 { 1028 1029 1030 #line default 1031 #line hidden 1032 WriteLiteral(" <span"); 1033 1034 WriteAttribute("class", Tuple.Create(" class=\"", 17830), Tuple.Create("\"", 17860) 1035 1036 #line 333 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1037 , Tuple.Create(Tuple.Create("", 17838), Tuple.Create<System.Object, System.Int32>(theme 1038 1039 #line default 1040 #line hidden 1041 , 17838), false) 1042 1043 #line 333 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1044 , Tuple.Create(Tuple.Create(" ", 17844), Tuple.Create<System.Object, System.Int32>(contentPadding 1045 1046 #line default 1047 #line hidden 1048 , 17845), false) 1049 ); 1050 1051 WriteLiteral(">\r\n <small"); 1052 1053 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1054 1055 WriteLiteral(">Fra "); 1056 1057 1058 #line 334 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1059 Write(priceMinWithoutVat); 1060 1061 1062 #line default 1063 #line hidden 1064 WriteLiteral(" "); 1065 1066 1067 #line 334 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1068 Write(Translate("excl. VAT")); 1069 1070 1071 #line default 1072 #line hidden 1073 WriteLiteral("</small>\r\n </span>\r\n"); 1074 1075 1076 #line 336 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1077 } 1078 else 1079 { 1080 1081 1082 #line default 1083 #line hidden 1084 WriteLiteral(" <small"); 1085 1086 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1087 1088 WriteLiteral(">"); 1089 1090 1091 #line 339 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1092 Write(pricesRangeWithoutVat); 1093 1094 1095 #line default 1096 #line hidden 1097 WriteLiteral(" "); 1098 1099 1100 #line 339 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1101 Write(Translate("excl. VAT")); 1102 1103 1104 #line default 1105 #line hidden 1106 WriteLiteral("</small>\r\n"); 1107 1108 1109 #line 340 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1110 } 1111 } 1112 else 1113 { 1114 1115 1116 #line default 1117 #line hidden 1118 WriteLiteral(" <small"); 1119 1120 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1121 1122 WriteLiteral(">"); 1123 1124 1125 #line 344 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1126 Write(pricesRangeWithoutVat); 1127 1128 1129 #line default 1130 #line hidden 1131 WriteLiteral(" "); 1132 1133 1134 #line 344 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1135 Write(Translate("eks. VAT")); 1136 1137 1138 #line default 1139 #line hidden 1140 WriteLiteral("</small>\r\n"); 1141 1142 1143 #line 345 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1144 } 1145 1146 } 1147 else 1148 { 1149 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 1150 { 1151 if (isMobile) 1152 { 1153 1154 1155 #line default 1156 #line hidden 1157 WriteLiteral(" <span"); 1158 1159 WriteAttribute("class", Tuple.Create(" class=\"", 18741), Tuple.Create("\"", 18771) 1160 1161 #line 354 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1162 , Tuple.Create(Tuple.Create("", 18749), Tuple.Create<System.Object, System.Int32>(theme 1163 1164 #line default 1165 #line hidden 1166 , 18749), false) 1167 1168 #line 354 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1169 , Tuple.Create(Tuple.Create(" ", 18755), Tuple.Create<System.Object, System.Int32>(contentPadding 1170 1171 #line default 1172 #line hidden 1173 , 18756), false) 1174 ); 1175 1176 WriteLiteral(">\r\n <small"); 1177 1178 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1179 1180 WriteLiteral(">Fra "); 1181 1182 1183 #line 355 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1184 Write(priceMinWithVat); 1185 1186 1187 #line default 1188 #line hidden 1189 WriteLiteral(" "); 1190 1191 1192 #line 355 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1193 Write(Translate("excl. VAT")); 1194 1195 1196 #line default 1197 #line hidden 1198 WriteLiteral("</small>\r\n </span>\r\n"); 1199 1200 1201 #line 357 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1202 } 1203 else 1204 { 1205 1206 1207 #line default 1208 #line hidden 1209 WriteLiteral(" <small"); 1210 1211 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1212 1213 WriteLiteral(">"); 1214 1215 1216 #line 360 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1217 Write(pricesRangeWithVat); 1218 1219 1220 #line default 1221 #line hidden 1222 WriteLiteral(" "); 1223 1224 1225 #line 360 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1226 Write(Translate("Incl. VAT")); 1227 1228 1229 #line default 1230 #line hidden 1231 WriteLiteral("</small>\r\n"); 1232 1233 1234 #line 361 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1235 } 1236 } 1237 else 1238 { 1239 1240 1241 #line default 1242 #line hidden 1243 WriteLiteral(" <small"); 1244 1245 WriteLiteral(" class=\"opacity-85 fst-normal\""); 1246 1247 WriteLiteral(">"); 1248 1249 1250 #line 365 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1251 Write(pricesRangeWithVat); 1252 1253 1254 #line default 1255 #line hidden 1256 WriteLiteral(" "); 1257 1258 1259 #line 365 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1260 Write(Translate("Incl. VAT")); 1261 1262 1263 #line default 1264 #line hidden 1265 WriteLiteral("</small>\r\n"); 1266 1267 1268 #line 366 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1269 } 1270 1271 } 1272 1273 } 1274 } 1275 1276 1277 #line default 1278 #line hidden 1279 WriteLiteral(" </div>\r\n"); 1280 1281 1282 #line 373 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1283 } 1284 else if (Pageview.IsVisualEditorMode) 1285 { 1286 1287 1288 #line default 1289 #line hidden 1290 WriteLiteral(" <div"); 1291 1292 WriteLiteral(" class=\"alert alert-dark m-0\""); 1293 1294 WriteLiteral(" role=\"alert\""); 1295 1296 WriteLiteral(">\r\n <span>"); 1297 1298 1299 #line 377 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1300 Write(Translate("No products available")); 1301 1302 1303 #line default 1304 #line hidden 1305 WriteLiteral("</span>\r\n </div>\r\n"); 1306 1307 1308 #line 379 "D:\dynamicweb.net\Solutions\Degree\proff1.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Swift_ProductPrice.cshtml" 1309 } 1310 1311 1312 #line default 1313 #line hidden 1314 } 1315 } 1316 } 1317
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using System; 4 @using System.Globalization; 5 6 @{ 7 ProductViewModel product = null; 8 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 9 { 10 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 11 } 12 else if (Pageview.Item["DummyProduct"] != null) 13 { 14 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 15 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 16 17 if (productList?.Products is object) 18 { 19 product = productList.Products[0]; 20 } 21 } 22 23 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", ""); 24 bool anonymousUser = Pageview.User == null; 25 bool isErpConnectionDown = !Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsWebServiceConnectionAvailable"]); 26 bool hidePrice = anonymousUsersLimitations.Contains("price") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHidePrices") && isErpConnectionDown; 27 var isB2C = Pageview.User != null && Dynamicweb.Security.UserManagement.User.GetAncestors(Pageview.User.ID)?.Any(x => x.CustomerNumber == "103895") == true; 28 var user = Dynamicweb.Security.UserManagement.User.GetCurrentFrontendUser(); 29 bool isInPrivateNewsletterGroup = user != null && user.Groups != null && user.Groups.Any(group => group.Name == "Private Newsletter Email"); 30 bool isDetailPage = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("ProductID")); 31 } 32 33 @if (product is object && !hidePrice) 34 { 35 bool showInformativePrice = Model.Item.GetBoolean("ShowInformativePrice"); 36 string unitId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("UnitId")) ? Dynamicweb.Context.Current.Request.Form.Get("UnitId") : string.Empty; 37 38 string priceFontSize = Model.Item.GetRawValueString("PriceSize", "fs-2"); 39 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); 40 string layout = Model.Item.GetRawValueString("Layout", "horizontal"); 41 string textAlign = horizontalAlign == "center" ? "text-center" : string.Empty; 42 textAlign = horizontalAlign == "end" ? "text-end" : textAlign; 43 44 45 horizontalAlign = horizontalAlign == "center" && layout == "horizontal" ? "justify-content-center" : horizontalAlign; 46 horizontalAlign = horizontalAlign == "end" && layout == "horizontal" ? "justify-content-end" : horizontalAlign; 47 horizontalAlign = horizontalAlign == "center" && layout == "vertical" ? "align-items-center" : horizontalAlign; 48 horizontalAlign = horizontalAlign == "end" && layout == "vertical" ? "align-items-end" : horizontalAlign; 49 50 string flexDirection = layout == "horizontal" ? string.Empty : "flex-column"; 51 string flexGap = layout == "horizontal" ? "gap-3" : string.Empty; 52 string order = layout == "horizontal" ? string.Empty : "order-2"; 53 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? "theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 54 theme = GetViewParameter("theme") != null ? GetViewParameterString("theme") : theme; 55 56 string contentPadding = Model.Item.GetRawValueString("ContentPadding", ""); 57 contentPadding = contentPadding == "none" ? "p-0" : contentPadding; 58 contentPadding = contentPadding == "small" ? "p-1 px-md-2 py-md-1" : contentPadding; 59 contentPadding = contentPadding == "large" ? "p-2 px-md-3 py-md-2" : contentPadding; 60 61 string showPricesWithVat = Pageview.Area.EcomPricesWithVat.ToLower(); 62 bool neverShowVat = string.IsNullOrEmpty(showPricesWithVat); 63 64 var stocksLevels = product.StockUnits.Select(x => x.StockLevel).Sum(); 65 66 var priceWithVat = product.Price.PriceWithVat; 67 string formattedPriceWithVat = priceWithVat.ToString("0.00", CultureInfo.InvariantCulture); 68 69 string priceMinWithoutVat = ""; 70 string priceMaxWithoutVat = ""; 71 string priceMinWithVat = ""; 72 string priceMaxWithVat = ""; 73 74 string liveInfoClass = ""; 75 string productInfoFeed = ""; 76 bool isLazyLoadingForProductInfoEnabled = Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsLazyLoadingForProductInfoEnabled"]); 77 if (isLazyLoadingForProductInfoEnabled) 78 { 79 if (Dynamicweb.Context.Current.Items.Contains("ProductInfoFeed")) 80 { 81 productInfoFeed = Dynamicweb.Context.Current.Items["ProductInfoFeed"]?.ToString(); 82 if (!string.IsNullOrEmpty(productInfoFeed)) 83 { 84 productInfoFeed = $"data-product-info-feed=\"{productInfoFeed}\""; 85 } 86 } 87 liveInfoClass = "js-live-info"; 88 } 89 90 <div class="@textAlign @liveInfoClass item_@Model.Item.SystemName.ToLower()" data-product-id="@product.Id" data-variant-id="@product.VariantId" @productInfoFeed> 91 @if (showInformativePrice && product.PriceInformative.Price != 0) 92 { 93 <div class="opacity-50"> 94 <span>@Translate("RRP") </span> 95 <span class="text-decoration-line-through text-price">@product.PriceInformative.PriceFormatted</span> 96 </div> 97 } 98 <div class="@priceFontSize m-0 d-flex @flexDirection @flexGap @horizontalAlign" itemprop="offers" itemscope itemtype="https://schema.org/Offer"> 99 <span itemprop="priceCurrency" content="@product.Price.CurrencyCode" class="d-none"></span> 100 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 <span class="text-price js-text-price"> 111 <span class="spinner-border" role="status"></span> 112 </span> 113 } 114 else 115 { 116 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceWithoutVatFormatted : product.PriceBeforeDiscount.PriceWithoutVatFormatted; 117 if (product?.VariantInfo?.VariantInfo != null && product.VariantInfo.PriceMax?.PriceWithVatFormatted != null) 118 { 119 var variantPriceWithVat = product.VariantInfo.PriceMax.PriceWithVat; 120 string variantFormattedPriceWithVat = variantPriceWithVat.ToString("0.00", CultureInfo.InvariantCulture); 121 122 <span itemprop="price" content="@variantFormattedPriceWithVat" class="d-none"></span> 123 } 124 else 125 { 126 <span itemprop="price" content="@formattedPriceWithVat" class="d-none"></span> 127 } 128 if (product.Price.Price != product.PriceBeforeDiscount.Price) 129 { 130 <span class="text-decoration-line-through opacity-75 @order">@beforePrice</span> 131 } 132 133 string pricesRangeWithVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 134 string pricesRangeWithoutVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 135 136 if (product?.VariantInfo?.VariantInfo != null) 137 { 138 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 139 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 140 priceMaxWithVat = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 141 priceMinWithVat = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 142 } 143 if (priceMinWithoutVat != priceMaxWithoutVat) 144 { 145 pricesRangeWithoutVat = priceMinWithoutVat + " - " + priceMaxWithoutVat; 146 pricesRangeWithVat = priceMinWithVat + " - " + priceMaxWithVat; 147 148 } 149 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 150 { 151 pricesRangeWithVat = priceMaxWithVat; 152 pricesRangeWithoutVat = priceMinWithoutVat; 153 } 154 155 bool isMobile = Pageview.Device.ToString() == "Mobile"; 156 string price = ""; 157 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 158 { 159 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 160 { 161 if (isMobile) 162 { 163 price = "Fra " + priceMinWithVat; 164 } 165 else 166 { 167 price = pricesRangeWithVat; 168 } 169 } 170 else 171 { 172 price = pricesRangeWithVat; 173 } 174 } 175 else 176 { 177 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 178 { 179 if (isMobile) 180 { 181 price = "Fra " + priceMaxWithoutVat; 182 } 183 else 184 { 185 price = pricesRangeWithoutVat; 186 } 187 } 188 else 189 { 190 price = pricesRangeWithoutVat; 191 } 192 } 193 <span class="@theme @contentPadding"> 194 <!-- Added this section --> 195 @if (@product.Cost != 0) 196 197 { 198 double.TryParse(price, out double priceValue); 199 double? discountPercentage = Math.Floor(((product.Cost - product.Price.PriceWithVat) / product.Cost) * 100); 200 201 202 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 203 { 204 <span class="text-price fw-bold" style="font-size: 0.8em; text-decoration: line-through;">@product.Cost,-</span> 205 <span style="background-color: red; color: white; font-size: 0.8em; font-weight: bold; padding: 2px 6px; border-radius: 4px; margin-left: 5px;"> 206 - @discountPercentage.Value.ToString("0")% 207 </span><br> 208 } 209 else 210 { 211 double? costExVat = product.Cost /1.25; 212 <span class="text-price fw-bold" style="font-size: 0.8em; text-decoration: line-through;">@costExVat,-</span> 213 <span style="background-color: red; color: white; font-size: 0.8em; font-weight: bold; padding: 2px 6px; border-radius: 4px; margin-left: 5px;"> 214 - @discountPercentage.Value.ToString("0")% 215 </span><br> 216 } 217 } 218 <!-- Until this --> 219 <span class="text-price fw-bold">@price</span> 220 </span> 221 } 222 } 223 else 224 { 225 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 226 { 227 <span itemprop="price" content="" class="d-none"></span> 228 <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> 229 230 <span class="text-price js-text-price"> 231 <span class="spinner-border" role="status"></span> 232 </span> 233 } 234 else 235 { 236 string beforePrice = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).PriceBeforeDiscount.PriceFormatted : product.PriceBeforeDiscount.PriceFormatted; 237 238 <span itemprop="price" content="@formattedPriceWithVat" class="d-none"></span> 239 240 if (product.Price.Price != product.PriceBeforeDiscount.Price) 241 { 242 <span class="text-decoration-line-through opacity-75 @order"> 243 <span class="text-price">@beforePrice</span> 244 </span> 245 } 246 247 string price = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceFormatted : product.Price.PriceFormatted; 248 249 if (product?.VariantInfo?.VariantInfo != null) 250 { 251 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceFormatted != null ? product.VariantInfo.PriceMin.PriceFormatted : ""; 252 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceFormatted != null ? product.VariantInfo.PriceMax.PriceFormatted : ""; 253 } 254 if (priceMinWithoutVat != priceMaxWithoutVat) 255 { 256 price = priceMinWithoutVat + " - " + priceMaxWithoutVat; 257 } 258 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 259 { 260 price = priceMinWithoutVat; 261 } 262 <span class="@theme @contentPadding"> 263 <span class="text-price">@price</span> 264 </span> 265 } 266 } 267 268 @* Stock state for Schema.org, start *@ 269 @{ 270 Uri url = Dynamicweb.Context.Current.Request.Url; 271 } 272 273 <link itemprop="url" href="@url"> 274 275 @{ 276 bool IsNeverOutOfStock = product.NeverOutOfstock; 277 } 278 279 @if (IsNeverOutOfStock) 280 { 281 if (stocksLevels > 0) 282 { 283 <link itemprop="availability" href="https://schema.org/InStock" class="d-none" /> 284 } 285 else 286 { 287 <link itemprop="availability" href="https://schema.org/OutOfStock" class="d-none" /> 288 } 289 290 } 291 292 @* Stock state for Schema.org, stop *@ 293 294 </div> 295 296 @if (showPricesWithVat == "false" && !neverShowVat) 297 { 298 if (isLazyLoadingForProductInfoEnabled && !Pageview.IsVisualEditorMode) 299 { 300 <small class="opacity-85 fst-normal js-text-price-with-vat d-none" data-suffix="@Translate("Incl. VAT")"></small> 301 } 302 else 303 { 304 string pricesRangeWithVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithVatFormatted : product.Price.PriceWithVatFormatted; 305 string pricesRangeWithoutVat = !string.IsNullOrEmpty(unitId) ? product.GetPrice(unitId).Price.PriceWithoutVatFormatted : product.Price.PriceWithoutVatFormatted; 306 307 bool isMobile = Pageview.Device.ToString() == "Mobile"; 308 309 if (product?.VariantInfo?.VariantInfo != null) 310 { 311 priceMinWithoutVat = product?.VariantInfo?.PriceMin?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithoutVatFormatted : ""; 312 priceMaxWithoutVat = product?.VariantInfo?.PriceMax?.PriceWithoutVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithoutVatFormatted : ""; 313 priceMaxWithVat = product?.VariantInfo?.PriceMax?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMax.PriceWithVatFormatted : ""; 314 priceMinWithVat = product?.VariantInfo?.PriceMin?.PriceWithVatFormatted != null ? product.VariantInfo.PriceMin.PriceWithVatFormatted : ""; 315 } 316 if (priceMinWithoutVat != priceMaxWithoutVat) 317 { 318 pricesRangeWithoutVat = priceMinWithoutVat + " - " + priceMaxWithoutVat; 319 pricesRangeWithVat = priceMinWithVat + " - " + priceMaxWithVat; 320 321 } 322 else if (priceMinWithoutVat == priceMaxWithoutVat && priceMinWithoutVat != "") 323 { 324 pricesRangeWithoutVat = priceMinWithoutVat; 325 pricesRangeWithVat = priceMaxWithVat; 326 } 327 if (anonymousUser || isB2C || isInPrivateNewsletterGroup) 328 { 329 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 330 { 331 if (isMobile) 332 { 333 <span class="@theme @contentPadding"> 334 <small class="opacity-85 fst-normal">Fra @priceMinWithoutVat @Translate("excl. VAT")</small> 335 </span> 336 } 337 else 338 { 339 <small class="opacity-85 fst-normal">@pricesRangeWithoutVat @Translate("excl. VAT")</small> 340 } 341 } 342 else 343 { 344 <small class="opacity-85 fst-normal">@pricesRangeWithoutVat @Translate("eks. VAT")</small> 345 } 346 347 } 348 else 349 { 350 if ((product?.VariantInfo?.VariantInfo != null) && !isDetailPage) 351 { 352 if (isMobile) 353 { 354 <span class="@theme @contentPadding"> 355 <small class="opacity-85 fst-normal">Fra @priceMinWithVat @Translate("excl. VAT")</small> 356 </span> 357 } 358 else 359 { 360 <small class="opacity-85 fst-normal">@pricesRangeWithVat @Translate("Incl. VAT")</small> 361 } 362 } 363 else 364 { 365 <small class="opacity-85 fst-normal">@pricesRangeWithVat @Translate("Incl. VAT")</small> 366 } 367 368 } 369 370 } 371 } 372 </div> 373 } 374 else if (Pageview.IsVisualEditorMode) 375 { 376 <div class="alert alert-dark m-0" role="alert"> 377 <span>@Translate("No products available")</span> 378 </div> 379 } 380
Kraftig 1/2" muttertrekker på luft med 1356 Nm momentområde, twin hammer-mekanisme og lettvektsdesign for effektiv og fleksibel bruk. Passer til Tecos innlegg for verktøyvogn.
Larvik: 0
Drammen: 0
Bestillingsvare - Forventet leveringstid 3 dager
Beskrivelse
|
1/2" muttertrekker på luft med kraftig twin hammer-mekanisme, ideell for krevende oppgaver som krever høy presisjon og pålitelighet. Perfekt for både profesjonelle og hjemmebrukere.
- Merke
- Tecos
- Produsentens produktnummer
- 34583201
- EAN
- 5704645124835