Error executing template "Designs/eCommerce/eCom/Product/Product.cshtml"
System.Data.SqlClient.SqlException (0x80131904): Error converting data type nvarchar to bigint.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
at System.Data.SqlClient.SqlDataReader.Read()
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.Read()
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at KSCustomModules.Services.AjaxRequests.ProductGetPrice(String ProductId, Int32 UserId) in C:\Visual Studio Workspaces\KEN Storkøkken GIT\WebShop2019\Services\AjaxRequests.asmx.cs:line 1177
at CompiledRazorTemplates.Dynamic.RazorEngine_248f5e02600d43fb844042a34c8c2495.Execute() in C:\home\site\wwwroot\Files\Templates\Designs\eCommerce\eCom\Product\Product.cshtml:line 33
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.b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
ClientConnectionId:04a89f00-e7be-4670-b8bf-b89bb1aa8b0b
Error Number:8114,State:5,Class:16
ClientConnectionId before routing:5fcfdea6-7a93-4dc8-ba69-936ec3c792e4
Routing Destination:b6442f23d359.tr47117.westeurope1-a.worker.database.windows.net,11027
1 @using KSCustomModules
2 @using Dynamicweb
3 @using System
4 @using System.Web.Mvc
5
6
7 @{
8 var pUrl = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl("Default.aspx?ID=3&ProductID=" + ((string)GetValue("Ecom:Product.ID")));
9 }
10 <link rel='canonical' href='@pUrl'>
11 @{
12 Int32 userId = 0;
13 Boolean isSkiUser = false;
14 var disableShop = "";
15 bool buyBack = false;
16 bool swapForNew = false;
17
18 Dynamicweb.Security.UserManagement.User CurrentUser = Dynamicweb.Security.UserManagement.User.get_Current(Dynamicweb.Security.UserManagement.PagePermissionLevels.Frontend);
19 if (CurrentUser != null && CurrentUser.Active)
20 {
21 userId = CurrentUser.ID;
22 isSkiUser = CurrentUser.CustomFieldValues.Where(w => w.CustomField.SystemName == "AccessUser_Prisgruppekode").First().Value.ToString() == "SKI";
23 if (CurrentUser.CustomFieldValues.Where(w => w.CustomField.SystemName == "AccessUser_DisableShop").FirstOrDefault().Value.Equals(true))
24 {
25 disableShop = "hidden";
26 }
27 }
28
29
30 var activeUsed = "active";
31 var ajaxRequestCode = new KSCustomModules.Services.AjaxRequests();
32 //Finding custom price from owen matrix
33 var customPrice = ajaxRequestCode.ProductGetPrice((string)GetValue("Ecom:Product.ID"), userId);
34 string priceRegular = "";
35 string priceDiscount = "";
36 string discountCss = "";
37 bool onDiscount = false;
38 string userAgent = Dynamicweb.Context.Current.Request.UserAgent.ToLower();
39 string userDevice = Dynamicweb.Frontend.Devices.DeviceInfo.ParseFromUserAgentString(userAgent).DeviceType.ToString();
40 string groupURL = GetString("Ecom:Product.LinkGroup.Clean");
41
42
43 if (customPrice.OnDiscount)
44 {
45 onDiscount = true;
46 discountCss = customPrice.DiscountColor.Replace(".png", "").Replace("/files/Images/Shop/Discounts/", "");
47
48 if (customPrice.DiscountType.IndexOf("Bundpris") > -1 || GetString("Ecom:Product:Field.VareRabatGrp.Value") == "BASIC" || GetString("Ecom:Product:Field.VareRabatGrp.Value") == "BASIC01")
49 {
50 priceRegular = customPrice.DiscountPriceString;
51 onDiscount = false;
52 }
53 else
54 {
55 priceDiscount = customPrice.DiscountPriceString;
56 priceRegular = customPrice.PriceString;
57 }
58 }
59 else
60 {
61 priceRegular = customPrice.PriceString;
62 }
63 string productName = GetString("Ecom:Product.Name");
64
65
66 //Sustainability Oktober 2020 by Henrik
67 string categories = GetString("Ecom:Product:Field.Categories.Value");
68 List<string> sustainabilityIcons = new List<string>();
69 foreach (var categori in categories.Split(',').ToList())
70 {
71 switch (categori)
72 {
73 case "BD":
74 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/Baeredygtigtigt.svg");
75 break;
76 case "FSC":
77 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/FSC.svg");
78 break;
79 case "REC":
80 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/Recycled.svg");
81 break;
82 case "STRØM":
83 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/LavtStroemforbrug.svg");
84 break;
85 case "Vand":
86 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/LavtVandforbrug.svg");
87 break;
88 case "Co2":
89 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/LavtCo2-Aftryk.svg");
90 break;
91 case "BIO":
92 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/Bioprodukt.svg");
93 break;
94 case "DK":
95 sustainabilityIcons.Add("/Files/Images/Shop/Sustainability/svg/DanskProduceret.svg");
96 break;
97 }
98 }
99 //End Sustainability
100 }
101
102 <div id="groupURL" data-href="@groupURL" data-name="@productName" style="display:none;">@groupURL</div>
103
104 <script>
105 isProductPage = true;
106 currentProductID = '@GetString("@Ecom:Product.ID")';
107 getGroupsBreadcrumb("product");
108 function imgError(image) {
109 image.onerror = "";
110 image.src = "/files/images/no-image.png";
111 return true;
112 }
113 </script>
114
115 <section class="product-details-content" style="">
116 @SnippetStart("ogImage")<meta property="og:image" content="http://@GetGlobalValue("Global:Request.Host")@GetValue("Ecom:Product.ImageMedium.Default.Clean")" />@SnippetEnd("ogImage")
117
118 <div id="ProductInfo" itemscope itemtype="http://schema.org/Product">
119 <meta itemprop="brand" content="@GetString("Ecom:Product:Manufacturer.Name")" />
120 <meta itemprop='url' content='http://www.kenstorkoekken.dk/@pUrl' />
121 <meta itemprop="sku" content="@GetValue("Ecom:Product:Field.EAN.Value")" />
122 @if (userDevice == "Mobile")
123 {
124 <div class="row">
125
126 <div class="col-xs-12 prod-header">
127 <h1 itemprop="name">@GetString("Ecom:Product.Name")</h1>
128 <h2>@GetString("Ecom:Product.ShortDescription.Raw")</h2>
129 <p class="product-number">
130 Varenr.: <span itemprop="mpn">@GetString("Ecom:Product.Number")</span>
131 @{
132 if (GetString("Ecom:Product:Field.EAN.Value") != "")
133 {
134 <br />
135 @:EAN: @GetString("Ecom:Product:Field.EAN.Value")
136 }
137
138 if (isSkiUser)
139 {
140 <br />@:SKI-ID: <span itemprop="mpn">@GetString("Ecom:Product.SkiId")</span>
141 }
142 }
143 </p>
144 </div>
145 </div>
146 }
147 <div class="row">
148 <div class="col-lg-6" id="product-details-image-col">
149 @{
150 string brand = GetString("Ecom:Product:Field.ProductBrand.Value").Replace("&", "og").Replace(" ", "-").Replace("'", "").Replace("ö", "o").Replace("ä", "a").Replace("Ø", "OE").Replace("/", "-");
151
152 if (brand != "")
153 {
154 brand = brand + ".jpg";
155 <img class="prod-logo" src="/Files/Images/Brandpages/Brands - Logoer/Til-produkter/@brand">
156 }
157
158
159 }
160 <div class="tags">
161 @if (discountCss != "" && GetString("Ecom:Product:Field.VareRabatGrp.Value") != "BASIC" && GetString("Ecom:Product:Field.VareRabatGrp.Value") != "BASIC01")
162 {
163 <div class="tag @discountCss">@customPrice.DiscountType</div>
164 }
165 @if (customPrice.SplashOn)
166 {
167 <div class="tag blue">@customPrice.SplashText</div>
168 }
169 @if (GetString("Ecom:Product:Field.VareRabatGrp.Value") == "BASIC" || GetString("Ecom:Product:Field.VareRabatGrp.Value") == "BASIC01")
170 {
171 <div class="tag blue">BASIC</div>
172 }
173
174 </div>
175
176 <div id="product-details-image">
177 <input id="ProductId" type="hidden" value="@GetValue("Ecom:Product.ID")" />
178 <input id="UserId" type="hidden" value="@userId" />
179
180 <div class="product-image-zoomed">
181 <img itemprop="image" id="main-image" src='/Admin/Public/GetImage.aspx?Image=@GetValue("Ecom:Product.ImageMedium.Default.Clean")&Height=450' onerror="imgError(this)" alt='@GetValue("Ecom:Product.ShortDescription.Raw")' />
182 <div id="embed-wrap" class="hidden">
183 <div></div>
184 </div>
185
186
187 @if (customPrice.SplashOn)
188 {
189 <div class="splash-line">
190 @if (customPrice.SplashText.Contains("Gennemgået") || customPrice.SplashText.Contains("Gennem-gået") || customPrice.SplashText.Contains("Demo") || customPrice.SplashText.Contains("Renoveret") || customPrice.SplashText.Contains("Midlertidig udsolgt"))
191 {
192 if (customPrice.SplashText == "Gennem-gået" || customPrice.SplashText == "Gennemgået")
193 {
194 @:Gennemgået: Min. 3 mdr. garanti
195 }
196 if (customPrice.SplashText == "Demo")
197 {
198 @:Demo: Min. 12 mdr. garanti
199 }
200 if (customPrice.SplashText == "Renoveret")
201 {
202 @:Renoveret: Min. 6 mdr. garanti
203 }
204 if (customPrice.SplashText == "Midlertidig udsolgt")
205 {
206 @:Kontakt kundeservice 86248400
207 }
208 }
209 </div>
210 }
211
212
213
214
215 </div>
216
217 @if (GetValue("Ecom:Product:Field.DetailImages.Value") != null && GetValue("Ecom:Product:Field.DetailImages.Value") != "" || !String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkFilm.Value")))
218 {
219 <script type="text/javascript">
220
221 function showProdVideo(thumb) {
222 var video = thumb.getAttribute("data-videoid");
223 var image = document.getElementById("main-image");
224 image.classList.add("hidden");
225 var embedWrap = document.getElementById("embed-wrap");
226 var embedDiv = document.querySelector("#embed-wrap > *");
227 var iframe = document.createElement("iframe");
228 iframe.setAttribute("src",
229 "https://www.youtube.com/embed/" + video + "?modestbranding=1&autoplay=1&playsinline=1&rel=0");
230 iframe.setAttribute("allow", "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture");
231 iframe.setAttribute("allowfullscreen", "");
232 embedWrap.replaceChild(iframe, embedDiv);
233 embedWrap.classList.remove("hidden");
234 }
235 function showProdImg(thumb) {
236 var imageData = thumb.getAttribute("data-image");
237 var image = document.getElementById("main-image");
238 var embedWrap = document.getElementById("embed-wrap");
239 var embedDiv = document.createElement("div");
240 embedWrap.classList.add("hidden");
241 image.setAttribute("src", imageData);
242 image.classList.remove("hidden");
243 var iframe = document.querySelector("#embed-wrap > *");
244 embedWrap.replaceChild(embedDiv, iframe);
245 }
246
247 </script>
248 <div class="product-image-subthumbs">
249
250 <div>
251 <div class="thumbnail-prod" onclick="showProdImg(this)" data-image="@GetValue("Ecom:Product.ImageMedium.Default.Clean")">
252 <p style="background-image:url('/Admin/Public/GetImage.aspx?Image=@GetValue("Ecom:Product.ImageMedium.Default.Clean")&Height=185');"></p>
253 </div>
254 </div>
255 @if (GetValue("Ecom:Product:Field.DetailImages.Value") != null && GetValue("Ecom:Product:Field.DetailImages.Value") != "")
256 {
257 foreach (String img in GetString("Ecom:Product:Field.DetailImages.Value").Split(','))
258 {
259 <div>
260 <div class="thumbnail-prod" onclick="showProdImg(this)" data-image="@img">
261 <p style="background-image:url('/Admin/Public/GetImage.aspx?Image=@(img)&Height=185');"></p>
262 </div>
263 </div>
264 }
265 }
266 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkFilm.Value")))
267 {
268 foreach (String demo in @GetString("Ecom:Product:Field.LinkFilm.Value").Split(','))
269 {
270 if (!String.IsNullOrEmpty(demo))
271 {
272 var demoURL = demo;
273 string youtubeID = "";
274 if (demoURL.Contains(".yout"))
275 {
276 string result = demoURL;
277 if (demoURL.Contains("&"))
278 {
279 result = demoURL.Substring(0, demoURL.IndexOf("&"));
280 }
281 string result2 = result.Split('=')[1];
282 youtubeID = result2;
283
284 <div>
285 <div class="thumbnail-prod thumbnail-video" onclick="showProdVideo(this)" data-videoid="@youtubeID">
286 <p style="cursor:pointer; background-image:url('https://img.youtube.com/vi/@youtubeID/default.jpg');"></p>
287 </div>
288 </div>
289 }
290
291
292 }
293 }
294
295 }
296
297 </div>
298 }
299
300 </div>
301 </div>
302 <div class="col-xs-12 col-lg-6" id="product-details-information">
303 @if (userDevice != "Mobile")
304 {
305 <div class="row">
306
307 <div class="col-xs-12 prod-header">
308 <h1 itemprop="name">@GetString("Ecom:Product.Name")</h1>
309 <h2>@GetString("Ecom:Product.ShortDescription.Raw")</h2>
310 <p class="product-number">
311 Varenr.: <span itemprop="mpn">@GetString("Ecom:Product.Number")</span>
312 @{
313 if (customPrice.StockText.IndexOf("lager") > -1)
314 {
315 <br /><span class="forbehold">Der tages forbehold for mellemsalg.</span>
316 }
317
318 if (GetString("Ecom:Product:Field.EAN.Value") != "")
319 {
320 <br />
321 @:EAN: @GetString("Ecom:Product:Field.EAN.Value")
322 }
323
324 if (isSkiUser)
325 {
326 <br />@:SKI-ID: <span itemprop="mpn">@GetString("Ecom:Product.SkiId")</span>
327 }
328 }
329 </p>
330 </div>
331 </div>
332 }
333 <div class="row">
334 <div class="col-xs-12">
335 <!--@If Not(Global:Request.Url<contains>'ski=1')-->
336 <div class="product-details-price" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
337
338 @if (userId != 0 && disableShop != "hidden")
339 {
340 <h5>Din pris</h5>
341 }
342 <div>
343 @{
344 if ((string)priceRegular == (string)"Login for pris")
345 {
346 <h3 class="product-price discount">Login for pris</h3>
347 }
348 else
349 {
350
351 string isBP = customPrice.DiscountType.Contains("Bundpris") ? "bundpris" : "";
352
353 <meta itemprop="priceCurrency" content="@GetString("Ecom:Product.Currency.Code")" />
354 <meta itemprop="availability" content="@customPrice.StockText" />
355 <div class="product-price has-discount" @(onDiscount ? "" : "style='display: none;'")>
356 <h3 class="product-price regular" style="font-size: 12px; text-decoration: line-through">@priceRegular</h3>
357 <h3 class="product-price discount @isBP">@priceDiscount.Replace("Bundpris ", "")</h3>
358 </div>
359 <div class="product-price no-discount" @(onDiscount ? "style='display: none;'" : "")>
360 <h3 class="product-price regular @isBP">@priceRegular.Replace("Bundpris ", "")</h3>
361 </div>
362 @* -- AUGUST2019 -- *@
363
364
365
366
367
368 @* -- /AUGUST2019 -- *@
369 if (onDiscount)
370 {
371 <meta itemprop="price" content="@customPrice.DiscountPrice.ToString().Replace(",", ".")" />
372 }
373 else
374 {
375 <meta itemprop="price" content="@customPrice.Price.ToString().Replace(",", ".")" />
376 }
377 }
378 }
379 </div>
380 <div class="text-right price-col">
381 @{
382 string colliText = "1 Stk.";
383 var colli = 1;
384 IEnumerable<Dynamicweb.Ecommerce.Variants.VariantOption> variants = Dynamicweb.Ecommerce.Variants.VariantOption.GetAllVariantOptions();
385 var variant = variants.Where(w => w.Id == GetString("Ecom:Product.DefaultUnitID"));
386 if (variant.Any())
387 {
388 colliText = variant.First().Name;
389 try
390 {
391 colli = Convert.ToInt32(colliText.Split(new char[] { ' ' })[0].Trim());
392
393 if (customPrice.StockQuantity > 0 && customPrice.StockQuantity < colli)
394 {
395 colli = customPrice.StockQuantity;
396 }
397 }
398 catch
399 {
400 colli = 1;
401 }
402 }
403
404 <p>Pakket i kolli af: @colliText</p>
405 <div class="product-addtocart input-group">
406 <script>
407 var coli = @colli;
408 var stockVal = @customPrice.StockQuantity;
409 function colliCheck(input)
410 {
411
412 if (input.value > stockVal && stockVal != 0) {
413 input.value = stockVal;
414 alert('Denne vare er kun på lager i ' + stockVal + ' antal!');
415 }
416
417 if (input.value % coli != 0) {
418 if (input.value < coli)
419 input.value = coli;
420 else
421 input.value = input.value - (input.value % coli);
422 alert('Colli brud. Denne vare sælges i colli a @colliText');
423 }
424 }
425 var collichange = function (gnyf, p, t) {
426 //console.log(stockVal);
427 var gnyf = gnyf;
428 var $inputField = $("input[data-input-id='" + gnyf + "']");
429 var colli = parseInt(p, 10);
430 var currVal = parseInt($inputField.attr("value"), 10);
431 var newVal = currVal;
432 if (t == "inc"){
433 newVal = currVal + colli;
434
435 }
436 if (t == "dec"){
437 newVal = currVal - colli;
438 }
439 if (newVal >= colli) {
440 $inputField.attr("value", newVal);
441
442 } else {
443 $inputField.attr("value", colli);
444 }
445 //colliCheck($inputField);
446
447 //colliCheckAngular(e, p.Colli, p.Colli + ' Stk.', p.StockQuantity);
448 }
449 </script>
450 @{
451 string inputCLS = GetString("Ecom:Product.ID");
452 }
453 <div class="quant-row">
454 <div>
455 <button class="dec button" title="Færre" onclick="collichange('@inputCLS', @colli, 'dec')">-</button>
456 <div>
457 <input id="QuantityOrderLineOL88" min="@colli" step="@colli" onblur="colliCheck(this)" name="quantity" value="@colli" type="number" data-input-id="@inputCLS" class="product-quantity form-control" style="padding: 4.5px 5px;width:64px;">
458 </div>
459 <button class="inc button" title="Flere" onclick="collichange('@inputCLS', @colli, 'inc')">+</button>
460 </div>
461 <!--@If Not(Global:Extranet.Groups<contains>'4198')-->
462 <BUTTON class="btn btn-primary put-in-cart-main" onclick="AddToCart($(this), '@GetValue("Ecom:Product.ID")', $(this).parent().parent().find('input').val())">
463 Læg i kurv <span><i class="fal fa-shopping-basket"></i></span>
464 </BUTTON>
465 <!--@EndIf-->
466 </div>
467 </div>
468 }
469 </div>
470 @{
471 string Energimaerkning = GetString("Ecom:Product:Field.Energimaerkning.Value");
472 string EnergimaerkningPdf = GetString("Ecom:Product:Field.EnergimaerkningPdf.Value");
473 string EnergimaerkningDataPdf = GetString("Ecom:Product:Field.EnergimaerkningDataPdf.Value");
474 if (Energimaerkning != null && Energimaerkning != "")
475 {
476 <div class="energy-label">
477 <button type="button" class="btn btn-energyLabel btn-energyLabel-action" data-pdf="@EnergimaerkningPdf" title="se energimærke rapport">
478 <img src="/Files/Images/Energimaerkninger/@Energimaerkning" style="margin:0;" />
479 </button>
480
481 @if (EnergimaerkningDataPdf != null && EnergimaerkningDataPdf != "")
482 {
483 <button type="button" class="btn btn-energyLabel btn-energyLabel-action" data-pdf="@EnergimaerkningDataPdf" title="se energi datablad">
484 Energi datablad
485 </button>
486 }
487 </div>
488 }
489 }
490 </div>
491 <!--@EndIf-->
492 </div>
493 </div>
494 <div class="row">
495
496
497
498 @{
499 string stockCols = "col-sm-6";
500 if (CurrentUser != null)
501 {
502 if (!CurrentUser.GroupsIds.Contains(3121) || CurrentUser.GroupsIds.Contains(107883))
503 {
504 <div class="col-sm-6">
505 <div class="product-favorites @disableShop">
506 @if (!GetBoolean("Ecom:Product.IsProductInFavoriteList"))
507 {
508 <button type="button" class="btn-favorite-action" data-id="@GetValue("Ecom:Product.ID")" data-listids="@customPrice.OnFavList" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" onclick='OpenFavouriteModal(this);' title="tilføj favoritter">
509 <i class="fal fa-heart" aria-hidden="true"></i> Tilføj til favoritter
510 </button>
511
512 @*<a href='@GetValue("Ecom:Product.AddToList")' class="btn btn-default">Tilføj til favoritter</a><br />*@
513 }
514 @if (GetBoolean("Ecom:Product.IsProductInFavoriteList"))
515 {
516 <button type="button" class="btn-favorite-action" data-id="@GetValue("Ecom:Product.ID")" data-listids="@customPrice.OnFavList" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" onclick='OpenFavouriteModal(this);' title="tilføj favoritter">
517 <i class="fas fa-heart" aria-hidden="true"></i> Favoritter
518 </button>
519 }
520 </div>
521 </div>
522 }
523 }
524 else
525 {
526 stockCols = "col-sm-12";
527 }
528 }
529
530 @if (customPrice.StockText.IndexOf("lager") != -1)
531 {
532 <div class="@stockCols stock-col">
533 <p id="productStock" class="product-stock">
534 <span class="fa-stack checkmark">
535 <i class="fas fa-circle fa-stack-1x"></i>
536 <i class="fal fa-check-circle fa-stack-1x"></i>
537 </span>
538 @(customPrice.StockText.IndexOf("lager") > -1 ? customPrice.StockText : customPrice.StockText)
539 </p>
540 </div>
541 }
542 </div>
543
544 @{
545 string susCols = "col-md-7";
546 string leaseCols = "col-md-5";
547 string susCls = "";
548 bool hasLease = customPrice.Price <= 25000 && customPrice.DiscountPrice <= 25000 ? false : true;
549
550 if (sustainabilityIcons.Count != 0)
551 {
552 if (!hasLease)
553 {
554 susCols = "col-md-12";
555 susCls = "no-lease";
556 }
557 leaseCols = "col-md-5 has-sus";
558 }
559 else
560 {
561 leaseCols = "col-md-12";
562 }
563 }
564
565 <!--Start Ring mig op-->
566 <div id="callMe" class="row sus-lease p-0">
567 <div class="col-md-12">
568 <div class="product-leasing">
569 <h3>
570 Hvad kan vi hjælpe med?
571 </h3>
572 <p style="margin-top:6px;">
573 Har du spørgsmål, som du ikke kan finde svar på her på siden, eller ønsker du et særligt tilbud på dette produkt, så klik på knappen og udfyld formularen, så kontakter vi dig hurtigst muligt.
574 </p>
575 <button type="button" class="btn btn-success btn-form-action" data-id="@GetValue("Ecom:Product.ID")" data-name="@GetValue("Ecom:Product.Name")" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" data-title="Ring mig op!" data-modalId="callMe" title="Ring mig op!">
576 <i class="fal fa-phone"></i> Ring mig op!
577 </button>
578 </div>
579 </div>
580 </div>
581 <!--Slut Ring mig op-->
582 <!--Start tibagekøb-->
583 <div id="buyBack" class="row sus-lease p-0" style="display:none;">
584 <div class="col-md-12">
585 <div class="product-leasing">
586 <h3>
587 Tilbagekøb ved køb af ny maskine
588 </h3>
589 <strong style="font-size:16px;">– få et tilbud på din gamle køkkenmaskine</strong>
590 <p style="margin-top:6px;">
591 Mange køkkenmaskiner kan få nyt liv. Vi tilbagekøber hvert
592 år mange maskiner af alle fabrikater, som vi renoverer og
593 sælger igen. Få derfor en vurdering af din gamle maskine.
594 Klik her og få et tilbud.
595 </p>
596 <button type="button" class="btn btn-primary btn-form-action" data-id="@GetValue("Ecom:Product.ID")" data-name="@GetValue("Ecom:Product.Name")" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" data-title="Tilbagekøb" data-modalId="buyBack" title="Tilbagekøb">
597 <i class="fal fa-sync"></i> Tilbagekøb
598 </button>
599 </div>
600 </div>
601 </div>
602 <!--Slut tilbagekøb-->
603 <!--Start byt til nyt-->
604 <div id="swapForNew" class="row sus-lease" style="display:none;">
605 <div class="col-md-12">
606 <div class="product-leasing">
607 <h3>
608 Byt til nyt – Få mindst 40% i rabat på dit nye stel
609 </h3>
610 <p style="margin-top:6px;">
611 Vi tilbyder dig mindst 40% i rabat på dit nye stel, hvis vi får
612 dit gamle retur (Bestående af minimum 180 blandede
613 enheder, en-til-en). Vi sørger for afhentningen. Så vil andre få glæde af
614 jeres brugte porcelæn eller vi giver det væk med henblik
615 på recirkulation. Vi kalder konceptet for BYT TIL NYT.
616 </p>
617 <button type="button" class="btn btn-primary btn-form-action" data-id="@GetValue("Ecom:Product.ID")" data-name="@GetValue("Ecom:Product.Name")" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" data-modalId="swapForNew" title="Byt til nyt – Få mindst 40% i rabat på dit nye stel">
618 <i class="fal fa-recycle"></i> Byt til nyt
619 </button>
620 </div>
621 </div>
622 </div>
623 <!--Slut byt til nyt-->
624 <!--Start leasing-->
625 @if (hasLease)
626 {
627 <div class="row sus-lease">
628 <div class="col-md-12">
629 <div class="product-leasing">
630 <h3>Få et leasingtilbud</h3>
631 <p style="margin-top:6px;">
632 Vi kontakter dig, så vi kan skræddersy tilbud til netop dine behov.
633 </p>
634 <button type="button" class="btn btn-primary btn-leasing-action" data-id="@GetValue("Ecom:Product.ID")" data-name="@GetValue("Ecom:Product.Name")" data-nr="@GetValue("Ecom:Product.Number")" data-img="@GetValue("Ecom:Product.ImageSmall.Default.Clean")" onclick='OpenLeasingModal(this);' title="Bestil leasing tilbud">
635 <i class="fal fa-check"></i> BESTIL TILBUD
636 </button>
637
638 </div>
639 </div>
640 </div>
641 }
642
643 @if (sustainabilityIcons.Count != 0)
644 {
645 <script>
646 var simulateClick = function () {
647 var elem = document.getElementById("menu-tab-sustainability");
648 // Create our event (with options)
649 var evt = new MouseEvent('click', {
650 bubbles: true,
651 cancelable: true,
652 view: window
653 });
654 // If cancelled, don't dispatch our event
655 var canceled = !elem.dispatchEvent(evt);
656 };
657 </script>
658
659 <div class="sustainability-icons @susCols">
660 <br />
661 <span>Hensyn</span>
662 <div class="@susCls">
663 @foreach (var imgSrc in sustainabilityIcons)
664 {
665 <a href="#" onclick="simulateClick()" data-toggle="tab"><img src="@imgSrc" /></a>
666 }
667 </div>
668 </div>
669 }
670
671 <!--Slut leasing-->
672 <div class="row">
673 <div class="col-lg-12">
674 <ul class="nav nav-tabs" id="product-tabs">
675
676 <li class="@activeUsed">
677 <a href="#tab-specs" class="btn btn-sm btn-inverse" id="menu-tab-specs" data-toggle="tab">Specifikationer</a>
678 </li>
679 @{
680 activeUsed = "";
681 }
682 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkUserManual.Value")))
683 {
684 <li class="@activeUsed">
685 <a href="#tab-usermanuals" class="btn btn-sm btn-inverse" id="menu-tab-usermanuals" data-toggle="tab">Brugervejledninger</a>
686 </li>
687 activeUsed = "";
688 }
689 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkBrochures.Value")))
690 {
691 <li class="activeUsed">
692 <a href="#tab-papers" class="btn btn-sm btn-inverse" id="menu-tab-papers" data-toggle="tab">Brochurer</a>
693 </li>
694 activeUsed = "";
695 }
696 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkProductSheet.Value")))
697 {
698 <li class="@activeUsed">
699 <a href="#tab-productsheet" class="btn btn-sm btn-inverse" id="menu-tab-productsheet" data-toggle="tab">Produktark</a>
700 </li>
701 activeUsed = "";
702 }
703 @*
704 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkFilm.Value")))
705 {
706 <li class="@activeUsed">
707 <a href="#tab-demos" class="btn btn-sm btn-inverse" id="menu-tab-demos" data-toggle="tab">Demofilm</a>
708 </li>
709 activeUsed = "";
710 }
711 *@
712 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkSustainability.Value")))
713 {
714 <li class="@activeUsed">
715 <a href="#tab-sustainability" class="btn btn-sm btn-inverse" id="menu-tab-sustainability" data-toggle="tab">Hensyn</a>
716 </li>
717 activeUsed = "";
718 }
719 </ul>
720 <br />
721 @{activeUsed = "active";}
722 @{var counter = 0;}
723 <div class="tab-content">
724 @{
725 <div class="tab-pane @activeUsed" id="tab-specs">
726
727 @{
728 string productDescription = GetString("Ecom:Product.LongDescription").Replace("<br />", "<br/>").Replace("<br/> <br/> <br/>", "");
729
730 string hasTech = "";
731 bool descEmpty = false;
732 if (productDescription.Contains("Tekniske data") || productDescription.Contains("Teknisk data"))
733 {
734 string tech = "";
735 string desc = "";
736
737 if (productDescription.StartsWith("<p>"))
738 {
739 productDescription = productDescription.Remove(0, 3);
740 productDescription = productDescription.Remove(productDescription.LastIndexOf("</p>"), 4);
741 }
742
743 string toBeSearched = "Tekniske data";
744 int ix = productDescription.IndexOf(toBeSearched);
745
746
747 if (ix != -1)
748 {
749 tech = productDescription.Substring(ix + toBeSearched.Length);
750
751 if (tech.StartsWith(": <br/>"))
752 {
753 tech = tech.Remove(0, 7);
754 }
755
756 if (tech.StartsWith(" <br/>"))
757 {
758 tech = tech.Remove(0, 6);
759
760 }
761
762 if (tech.StartsWith("<br/>"))
763 {
764 tech = tech.Remove(0, 5);
765 }
766
767 if (ix - toBeSearched.Length + 4 >= 0)
768 {
769 desc = productDescription.Substring(0, ix - toBeSearched.Length + 4);
770 if (string.IsNullOrWhiteSpace(desc))
771 {
772 desc = "";
773 descEmpty = true;
774 }
775 }
776 else
777 {
778 if (string.IsNullOrWhiteSpace(desc))
779 {
780 desc = "";
781 descEmpty = true;
782 }
783 }
784
785 if (desc.StartsWith(" <br/>"))
786 {
787 desc = desc.Remove(0, 6);
788 }
789
790 if (desc.StartsWith("<br/>"))
791 {
792 desc = desc.Remove(0, 5);
793 }
794 // do something here
795 }
796
797 toBeSearched = "Teknisk data";
798 ix = productDescription.IndexOf(toBeSearched);
799
800 if (ix != -1)
801 {
802 tech = productDescription.Substring(ix + toBeSearched.Length);
803 if (tech.StartsWith(": <br/>"))
804 {
805 tech = tech.Remove(0, 7);
806 }
807
808 if (tech.StartsWith(" <br/>"))
809 {
810 tech = tech.Remove(0, 6);
811 }
812
813 if (tech.StartsWith("<br/>"))
814 {
815 tech = tech.Remove(0, 5);
816 }
817
818 if (ix - toBeSearched.Length + 4 >= 0)
819 {
820 desc = productDescription.Substring(0, ix - toBeSearched.Length + 4);
821 if (string.IsNullOrWhiteSpace(desc))
822 {
823 desc = "";
824 descEmpty = true;
825 }
826 }
827 else
828 {
829 if (string.IsNullOrWhiteSpace(desc))
830 {
831 desc = "";
832 descEmpty = true;
833 }
834 }
835
836 if (desc.StartsWith(" <br/>"))
837 {
838 desc = desc.Remove(0, 6);
839 }
840
841 if (desc.StartsWith("<br/>"))
842 {
843 desc = desc.Remove(0, 5);
844 }
845 // do something here
846 }
847 productDescription = "<div class=\"tech\"><p><span>Tekniske data:</span>" + tech + "</p></div>";
848 if (!descEmpty)
849 {
850 productDescription = productDescription + "<div class=\"desc\"><p><span>Beskrivelse:</span>" + desc + "</p></div>";
851 }
852
853 hasTech = "has-tech";
854 }
855 else
856 {
857 if (productDescription.StartsWith(" <br/>"))
858 {
859 productDescription = productDescription.Remove(0, 6);
860 }
861 productDescription = "<div class=\"desc\"><p><span>Beskrivelse:</span>" + productDescription + "</p></div>";
862 }
863 }
864 <div itemprop="description" class="product-description @hasTech">
865 @productDescription
866 </div>
867 </div>
868 activeUsed = "";
869 }
870 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkUserManual.Value")))
871 {
872 <div class="tab-pane @activeUsed" id="tab-usermanuals">
873 <div class="list-group product-list-group">
874 @foreach (String manual in @GetString("Ecom:Product:Field.LinkUserManual.Value").Split(','))
875 {
876 if (!String.IsNullOrEmpty(manual))
877 {
878 var manualName = manual;
879 if (manual.LastIndexOf(@"/") > -1)
880 {
881 manualName = manual.Substring(manual.LastIndexOf(@"/"), manual.Length - manual.LastIndexOf(@"/"));
882 }
883 counter++;
884 <div class="list-group-item row">
885 <div class="col-xs-9" style="padding-right: 0">
886 <input class="form-control input-sm" disabled style="background:white;" value="@manualName" />
887 </div>
888 <div class="col-xs-3" style="padding-left: 0;">
889 <a href="@manual" target="_blank" class="btn btn-sm btn-primary" style="width:100%;">Download <span class="glyphicon glyphicon-download-alt"></span></a>
890 </div>
891 </div>
892 }
893 }
894 <script>
895 $('#menu-tab-usermanuals').text('Brugervejledninger');
896 </script>
897
898 </div>
899 </div>
900 activeUsed = "";
901 }
902 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkBrochures.Value")))
903 {
904 <div class="tab-pane @activeUsed" id="tab-papers">
905 <div class="list-group product-list-group">
906 @{
907 counter = (int)0;
908 }
909 @foreach (String brochurer in @GetString("Ecom:Product:Field.LinkBrochures.Value").Split(','))
910 {
911 if (!String.IsNullOrEmpty(brochurer))
912 {
913 var brochurerName = brochurer;
914 if (brochurer.LastIndexOf(@"/") > -1)
915 {
916 brochurerName = brochurer.Substring(brochurer.LastIndexOf(@"/"), brochurer.Length - brochurer.LastIndexOf(@"/"));
917 }
918
919 counter++;
920 <div class="list-group-item row">
921 <div class="col-xs-9" style="padding-right: 0">
922 <input class="form-control input-sm" disabled style="background:white;" value="@brochurerName" />
923 </div>
924 <div class="col-xs-3" style="padding-left: 0;">
925 <a href="@brochurer" target="_blank" class="btn btn-sm btn-primary" style="width:100%;">Download <span class="glyphicon glyphicon-download-alt"></span></a>
926 </div>
927 </div>
928 }
929 }
930 <script>
931 $('#menu-tab-papers').text('Brochurer');
932 </script>
933
934 </div>
935 </div>
936 activeUsed = "";
937 }
938 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkProductSheet.Value")))
939 {
940 <div class="tab-pane @activeUsed" id="tab-productsheet">
941 <div class="list-group product-list-group">
942 @{counter = 0;}
943 @foreach (String sheet in @GetString("Ecom:Product:Field.LinkProductSheet.Value").Split(','))
944 {
945 if (!String.IsNullOrEmpty(sheet))
946 {
947 var sheetName = sheet;
948 if (sheet.LastIndexOf(@"/") > -1)
949 {
950 sheetName = sheet.Substring(sheet.LastIndexOf(@"/"), sheet.Length - sheet.LastIndexOf(@"/"));
951 }
952
953 counter++;
954 <div class="list-group-item row">
955 <div class="col-xs-9" style="padding-right: 0">
956 <input class="form-control input-sm" disabled style="background:white;" value="@sheetName" />
957 </div>
958 <div class="col-xs-3" style="padding-left: 0;">
959 <a href="@sheet" target="_blank" class="btn btn-sm btn-primary" style="width:100%;">Download <span class="glyphicon glyphicon-download-alt"></span></a>
960 </div>
961 </div>
962 }
963 }
964 <script>
965 $('#menu-tab-productsheet').text('Produktark');
966 </script>
967 </div>
968 </div>
969 activeUsed = "";
970 }
971 @*
972 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkFilm.Value")))
973 {
974 <div class="tab-pane @activeUsed" id="tab-demos">
975 <div class="list-group product-list-group">
976 @{counter = 0;}
977 @foreach (String demo in @GetString("Ecom:Product:Field.LinkFilm.Value").Split(','))
978 {
979 if (!String.IsNullOrEmpty(demo))
980 {
981 var demoName = demo;
982 var demoURL = demo;
983 string youtubeID = "";
984 if (demo.LastIndexOf(@"/") > -1)
985 {
986 demoName = demo.Substring(demo.LastIndexOf(@"/"), demo.Length - demo.LastIndexOf(@"/"));
987 }
988 if (demoURL.Contains(".yout"))
989 {
990 string result = demoURL;
991 if (demoURL.Contains("&")){
992 result = demoURL.Substring(0, demoURL.IndexOf("&"));
993 }
994 string result2 = result.Split('=')[1];
995 youtubeID = result2;
996 }
997
998 counter++;
999 <div class="list-group-item row">
1000 <div class="col-xs-9" style="padding-right: 0">
1001 @youtubeID
1002 <input class="form-control input-sm" disabled style="background:white;" value="@demoName" />
1003 </div>
1004 <div class="col-xs-3" style="padding-left: 0;">
1005 <a href="@demo" target="_blank" class="btn btn-sm btn-primary" style="width:100%;">Download <span class="glyphicon glyphicon-download-alt"></span></a>
1006 </div>
1007 </div>
1008 }
1009 }
1010 <script>
1011 $('#menu-tab-demos').text('Demofilm');
1012 </script>
1013 </div>
1014 </div>
1015 activeUsed = "";
1016 }
1017 *@
1018 @if (!String.IsNullOrEmpty(@GetString("Ecom:Product:Field.LinkSustainability.Value")))
1019 {
1020 <div class="tab-pane @activeUsed" id="tab-sustainability">
1021 <div class="list-group product-list-group">
1022 @{counter = 0;}
1023 @foreach (String sustainabilityFile in @GetString("Ecom:Product:Field.LinkSustainability.Value").Split(','))
1024 {
1025 if (!String.IsNullOrEmpty(sustainabilityFile))
1026 {
1027 var sustainabilityFileName = sustainabilityFile;
1028 if (sustainabilityFile.LastIndexOf(@"/") > -1)
1029 {
1030 sustainabilityFileName = sustainabilityFile.Substring(sustainabilityFile.LastIndexOf(@"/"), sustainabilityFile.Length - sustainabilityFile.LastIndexOf(@"/"));
1031 }
1032
1033 counter++;
1034 <div class="list-group-item row">
1035 <div class="col-xs-9" style="padding-right: 0">
1036 <input class="form-control input-sm" disabled style="background:white;" value="@sustainabilityFileName" />
1037 </div>
1038 <div class="col-xs-3" style="padding-left: 0;">
1039 <a href="https://doc.kenstorkoekken.dk/@sustainabilityFile" target="_blank" class="btn btn-sm btn-primary" style="width:100%;">Download <span class="glyphicon glyphicon-download-alt"></span></a>
1040 </div>
1041 </div>
1042 }
1043 }
1044 <script>
1045 $('#menu-tab-sustainability').text('Hensyn');
1046 </script>
1047 </div>
1048 </div>
1049 activeUsed = "";
1050 }
1051 </div>
1052
1053 </div>
1054 </div>
1055
1056 <div class="clearfix"></div>
1057 </div>
1058 </div>
1059 <div class="clearfix"></div>
1060 </div>
1061 <div class="clearfix"></div>
1062 </section>
1063
1064 @{
1065 var relatedCount = 0;
1066 if (GetInteger("Ecom:Product.RelatedCount") > 0)
1067 {
1068 <div id="relatedIDs" style="display: none;">
1069 @foreach (LoopItem g in GetLoop("ProductRelatedGroups"))
1070 {
1071 foreach (LoopItem i in g.GetLoop("RelatedProducts"))
1072 {
1073 relatedCount++;
1074 <div class="productId">@i.GetValue("Ecom:Product.ID")#</div>
1075 }
1076 }
1077 </div>
1078 }
1079 }
1080 @if (relatedCount > 0)
1081 {
1082 <h3 class="related-header">Tilbehør og relaterede varer</h3>
1083 <div class="hidden" id="ProductTemplate">
1084 <div class="row">
1085 <div class="product-list-item-wrapper mode-tiles" style="margin: 0 15px;">
1086 <button type="button" class="btn btn-favorite btn-favorite-action @disableShop" onclick="OpenFavouriteModal(this);" title="Tilføj favoritter">
1087 <i class=""></i>
1088 </button>
1089 <div class="thumbnail product">
1090 <a style="display: block; width: 100%" class="product-link">
1091 <div class="tags">
1092 <div class="tag discount-type"></div>
1093 @*<div class="tag blue splash"></div>*@
1094 </div>
1095 <div class="img-container"></div>
1096 <div class="img-thumbnail no-img hidden" style="">Intet billede</div>
1097 <div class="caption">
1098 <h4 class="product-name"></h4>
1099 <p class="product-number"></p>
1100 </div>
1101 <div class="product-buy-row">
1102 <div class="product-price-container">
1103 <div class="product-price has-discount hidden">
1104 <span class="product-price regular" style="font-size: 12px; text-decoration: line-through"></span>
1105 <span class="product-price discount"></span>
1106 </div>
1107 <div class="product-price no-discount hidden">
1108 <span class="product-price" style="font-size: 12px;"> </span>
1109 <span class="product-price regular"></span>
1110 </div>
1111 </div>
1112 <!--@If Not(Global:Extranet.Groups<contains>'4198')-->
1113 <div class="quant-row">
1114 <button class="dec button" title="Færre">-</button>
1115 <div>
1116 <input id="Quantity" name="quantity" value="" class="product-quantity quantity" />
1117 </div>
1118 <button class="inc button" title="Flere">+</button>
1119 <button class="put-in-cart" title="Køb" type="button" data-toggle="modal">
1120 <i class="fal fa-shopping-basket"></i>
1121 </button>
1122 </div>
1123 <!--@EndIf-->
1124 </div>
1125 </a>
1126 <div class="energyLabelRow">
1127 <button type="button" onclick="return false;" class="btn btn-energyLabel btn-energyLabel-action" title="se energimærke rapport"></button>
1128 <button type="button" onclick="return false;" class="btn btn-energyLabel btn-energyLabel-action" title="se energi datablad">
1129 Energi datablad
1130 </button>
1131 </div>
1132
1133 <p class="product-stock"></p>
1134 <div class="hover-info">
1135 <h6></h6>
1136 <div class="json-load"></div>
1137 <a href="Default.aspx?ID=3&ProductID=" style="cursor: pointer; cursor: hand;">
1138 Vis produkt
1139 </a>
1140 </div>
1141 </div>
1142 </div>
1143 </div>
1144 </div>
1145 <div class="row">
1146 <div id="ProdSlider"></div>
1147 </div>
1148 <div class="row hidden">
1149 <div class="slider-controls col-xs-12" style="top: -250px;">
1150 <a class="slider-control left img-circle" href="#productCarousel" data-slide="prev">‹</a>
1151 <a class="slider-control right img-circle" href="#productCarousel" data-slide="next">›</a>
1152 </div>
1153 </div>
1154 }
1155 <script type="text/javascript">
1156 require(
1157 ['jquery', 'layout', 'dw-carousel', 'json', 'slick'],
1158 function ($) {
1159 function ListPrices(result) {
1160 var onDiscount = result.d.OnDiscount;
1161 template = $('#ProductInfo');
1162 if (onDiscount == true) {
1163 $(template).find('.discount-indicator').show();
1164 $(template).find('.discount-indicator').text(result.d.DiscountType);
1165 $(template).find('.discount-indicator').css('background', "url('/files/images/shop/Discounts/" + result.d.DiscountColor + "') no-repeat 0 0");
1166 if (result.d.DiscountType.indexOf('Rabat') > -1) {
1167 $(template).find('.discount-indicator').css('line-height', "15px");
1168 $(template).find('.discount-indicator').css('padding', "32px 10px 0 10px");
1169 }
1170 if (result.d.DiscountType.indexOf('Bundpris') > -1) {
1171 $(template).find('.no-discount').show();
1172 $(template).find('.no-discount .regular').html(result.d.DiscountPriceString);
1173 }
1174 else {
1175 $(template).find('.has-discount .discount').html(result.d.DiscountPriceString);
1176 $(template).find('.has-discount .regular').html(result.d.PriceString);
1177 $(template).find('.has-discount').show();
1178 }
1179 } else {
1180 $(template).find('.no-discount').show();
1181 $(template).find('.no-discount .regular').html(result.d.PriceString);
1182 }
1183
1184 var stockText = result.d.StockText;
1185 if (stockText.indexOf('lager') > -1) {
1186 stockText = stockText + '<br />Der tages forbehold for mellemsalg.'
1187 }
1188 $('#productStock').text(stockText);
1189
1190 }
1191 function ListProducts(result) {
1192 //Vars
1193 var template;
1194 //Generate products
1195 var count = 0;
1196 //var itemContainer = "";
1197 //Calc number of products fits
1198 //var prodCount = parseInt(parseInt($('#ProductSlider').width()) / 292);
1199
1200 //Generate products
1201 $.each(result, function () {
1202 //Find template for specific listmode
1203 template = $('#ProductTemplate').find('.product-list-item-wrapper').clone();
1204 //Append values
1205 $(template).attr("id", this.Id);
1206 $(template).find('.thumbnail.product').attr("data-id", this.Id);
1207 $(template).find('.product-name').text(this.InfoText);
1208 $(template).find('.hover-info h6').text(this.Name);
1209
1210 //$(template).find('.product-description').text(this.InfoText);
1211 $(template).find('.product-number').text('Varenr.: ' + this.ProductNumber);
1212
1213 if (this.StockText.toLowerCase().indexOf('lager') != -1) {
1214 $(template).find('.product-stock').addClass("instock");
1215 $(template).find('.product-stock').html("<span class=\"fa-stack\"><i class=\"fas fa-circle fa-stack-1x\"></i><i class=\"fal fa-check-circle fa-stack-1x\"></i></span>" + this.StockText);
1216 } else {
1217 $(template).find('.product-stock').text(this.StockText);
1218 }
1219 if (this.DiscountType.indexOf('Bundpris') > -1) {
1220 $(template).find('.product-price.regular,.product-price.discount').addClass("bundpris");
1221 $(template).find('.product-price.regular').html(this.Price.replace("Bundpris ", ""));
1222 $(template).find('.product-price.discount').html(this.PriceDiscount.replace("Bundpris ", ""));
1223 } else {
1224 $(template).find('.product-price.regular').html(this.Price);
1225 $(template).find('.product-price.discount').html(this.PriceDiscount);
1226 }
1227 $(template).find('.dec.button').attr("onclick", "collichange('" + this.Id + "'," + this.Colli + ", 'dec')");
1228 $(template).find('.inc.button').attr("onclick", "collichange('" + this.Id + "'," + this.Colli + ", 'inc')");
1229
1230 $(template).find('.product-link').data('href', 'Default.aspx?ID=3&ProductID=' + this.Id);
1231 $(template).find('.hover-info a').attr('href', $(template).find('.hover-info a').attr('href') + this.Id);
1232 $(template).find('.img-container').attr("style", "background-image: url('/files/Images/Shop/Products/Small/" + this.ImgSrc + "');");
1233 $(template).find('.product-quantity').val(this.Colli);
1234 $(template).find('.product-quantity').attr('data-steps', this.Colli);
1235 $(template).find('.product-quantity').attr('data-input-id', this.Id);
1236
1237 $(template).find('.put-in-cart').attr("onclick", "AddToCart($(this),'" + this.Id + "', $(this).parent().find('input').val())");
1238 //Hide or show discount
1239 if (this.PriceDiscount == null || this.Price == this.PriceDiscount) {
1240 $(template).find('.no-discount').removeClass('hidden');
1241 //console.log(this.Price + " < " + this.PriceDiscount)
1242 } else {
1243 $(template).find('.has-discount').removeClass('hidden');
1244 //console.log(this.Price + " > " + this.PriceDiscount)
1245 }
1246 //Discount indicator
1247 if (this.DiscountType.indexOf('Bundpris') > -1 || this.DiscountType.indexOf('Nyhed') > -1 || this.DiscountType.indexOf('Rabat') > -1 || this.DiscountType.indexOf('Tilbud') > -1) {
1248 $(template).find('.discount-type').html(this.DiscountType);
1249 $(template).find('.discount-type').addClass(this.DiscountColor.replace(".png", ""));
1250 if (this.DiscountType.indexOf('Bundpris') > -1) {
1251 $(template).find('.product-price.regular,.product-price.discount').addClass("bundpris");
1252 }
1253 } else {
1254 $(template).find(".discount-type").remove();
1255 }
1256 if (this.SplashText.indexOf('Gennemgået') != -1 || this.SplashText.indexOf('Gennem-gået') != -1 || this.SplashText.indexOf('Demo') != -1 || this.SplashText.indexOf('Renoveret') != -1 || this.SplashText.indexOf('Midlertidig udsolgt') != -1 && this.SplashOn) {
1257 var SplashText = "";
1258 if (this.SplashText == 'Gennemgået' || this.SplashText == 'Gennem-gået') {
1259 SplashText = "<div class=\"splash-line\"><span>Gennemgået: Min. 3 mdr. garanti</span></div>";
1260 }
1261 if (this.SplashText == 'Demo') {
1262 SplashText = "<div class=\"splash-line\"><span>Demo: Min. 12 mdr. garanti</span></div>";
1263 }
1264 if (this.SplashText == 'Renoveret') {
1265 SplashText = "<div class=\"splash-line\"><span>Renoveret: Min. 6 mdr. garanti</span></div>";
1266 }
1267 if (this.SplashText == 'Midlertidig udsolgt') {
1268 SplashText = "<div class=\"splash-line\"><span>Kontakt kundeservice 86248400</span></div>";
1269 }
1270
1271 $(template).find(".img-container").html(SplashText);
1272
1273 } else {
1274 $(template).find(".splash").remove();
1275 }
1276
1277 if (this.Energimaerkning != null && this.Energimaerkning != '' && this.Energimaerkning != ' ') {
1278 $(template).find(".energyLabelRow").remove();
1279 energyLabelRow
1280 $(template).find(".energyLabelRow").find("button").first().data("pdf", "/Admin/Public/getimage.ashx?Image=/Files/Files/Documents/Energimaerkninger/" + this.EnergimaerkningPdf + "&width=600");
1281 //$(template).find(".energyLabelRow").find("button").first().html("<img src=\"/Files/Images/Energimaerkninger/" + this.Energimaerkning + "\" />");
1282 $(template).find(".energyLabelRow").find("button").last().data("pdf", "/Admin/Public/getimage.ashx?Image=/Files/Files/Documents/Energimaerkninger/" + this.EnergimaerkningDataPdf + "&width=600");
1283 } else {
1284 $(template).find(".energyLabelRow").remove();
1285 }
1286
1287 var favoriteOrNot = this.OnFavList != '' ? 'fas fa-heart' : 'fal fa-heart';
1288 $(template).find(".btn-favorite-action i").addClass(favoriteOrNot);
1289 $(template).find(".btn-favorite-action").data("listids", this.OnFavList);
1290 $(template).find(".btn-favorite-action").data("id", this.Id);
1291 $(template).find(".btn-favorite-action").data("nr", this.ProductNumber);
1292 $(template).find(".btn-favorite-action").data("img", "/files/Images/Shop/Products/Small/" + this.ImgSrc);
1293
1294 //Add item to markup
1295 $('#ProdSlider').append(template);
1296
1297 //itemContainer += $(template)[0].outerHTML;
1298 //if (count == prodCount - 1 || result.d.list.length == 1) {
1299 // var item = $('<div>');
1300 // $(item).append(itemContainer);
1301 // $('#carouselContent').append(item);
1302 // itemContainer = "";
1303 // count = 0;
1304 //}
1305 //else
1306 // count++
1307 });
1308 $('#ProdSlider').slick({
1309 dots: false,
1310 infinite: true,
1311 speed: 300,
1312 slidesToShow: 4,
1313 slidesToScroll: 4,
1314 responsive: [
1315 {
1316 breakpoint: 992,
1317 settings: {
1318 slidesToShow: 3,
1319 slidesToScroll: 3
1320 }
1321 },
1322 {
1323 breakpoint: 768,
1324 settings: {
1325 slidesToShow: 2,
1326 slidesToScroll: 2
1327 }
1328 },
1329 {
1330 breakpoint: 480,
1331 settings: {
1332 slidesToShow: 1,
1333 slidesToScroll: 1
1334 }
1335 }
1336 // You can unslick at a given breakpoint now by adding:
1337 // settings: "unslick"
1338 // instead of a settings object
1339 ]
1340 });
1341 $(".product-link").on("click", function () {
1342 var destination = $(this).data("href");
1343 window.location.href = destination;
1344 }).find("button").on('click', function (event) {
1345 event.stopPropagation();
1346 //you can also use `return false;` which is the same as `event.preventDefault()` and `event.stopPropagation()` all in one (in a jQuery event handler)
1347 });
1348
1349 /*
1350 var waitForFinalEvent = (function () {
1351 var timers = {};
1352 return function (callback, ms, uniqueId) {
1353 if (!uniqueId) {
1354 uniqueId = "Don't call this twice without a uniqueId";
1355 }
1356 if (timers[uniqueId]) {
1357 clearTimeout(timers[uniqueId]);
1358 }
1359 timers[uniqueId] = setTimeout(callback, ms);
1360 };
1361 })();
1362
1363 $("#ListProducts").on("hover",".thumbnail.product", function(e) {
1364 console.
1365 log("test");
1366 var prodId = e.currentTarget.dataset.id;
1367
1368 if (e.type == "mouseenter"){
1369 waitForFinalEvent(function () {
1370 if(! $("#" + prodId).find(".tech").length ){
1371 $.getJSON( "https://kensweb-staging.azurewebsites.net/Default.aspx?ID=5078&ProductID=" + prodId, function( data ) {
1372 $.each( data, function( key, val ) {
1373 result = data.text;
1374 $("#" + prodId + " .json-load").append(result);
1375 $("#" + prodId + " .hover-info").addClass("active");
1376 });
1377 });
1378 } else {
1379 $("#" + prodId + " .hover-info").addClass("active");
1380 }
1381 }, 150, prodId);
1382 } else {
1383 waitForFinalEvent(function () {
1384 $("#" + prodId + " .hover-info").removeClass("active");
1385 }, 1, prodId);
1386
1387 }
1388 });
1389 */
1390
1391 //window.prodSwipe = Swipe(document.getElementById('ProductSlider'));
1392
1393 //$('.slider-control').on('click', function () {
1394 // if ($(this).data('slide') == 'prev')
1395 // window.prodSwipe.prev();
1396 // else
1397 // window.prodSwipe.next();
1398 //});
1399
1400 //$('.products-carousel, .fetureCarousel').live('mouseover', function () {
1401 // $(this).parent().find('.carousel-control').show();
1402 //});
1403 //$('.products-carousel, .fetureCarousel').live('mouseout', function () {
1404 // $(this).find('.carousel-control').hide();
1405 //});
1406 //$('#productCarousel').dwThumbnailsCarousel({
1407 // enlargeHolder: null
1408 //});
1409
1410 //var carouselMapFiller = function ($target, $holder, data) {
1411 // var spanNum = Math.floor(12 / data.length);
1412 // $.each(data, function (i, item) {
1413 // $holder.append($('<div class="span' + spanNum + ' map-item" />').html(item.title));
1414 // });
1415 // $('.map-item', $holder).on('click', function (e) {
1416 // $target.carousel($(this).index());
1417 // });
1418 //}
1419
1420 //$('.carousel[data-carousel-map]').each(function (i, el) {
1421 // var $this = $(this),
1422 // $el = $(el),
1423 // $slides = $el.find('.item'),
1424 // containerMap = $el.data().carouselMap,
1425 // $carouselMap = $(containerMap),
1426 // mapData = [];
1427
1428 // $slides.each(function (i, el) {
1429 // mapData.push({
1430 // title: $.trim($(el).find('.buttonName').html())
1431 // });
1432 // });
1433
1434 // carouselMapFiller($this, $carouselMap, mapData);
1435 // $this.on('slid', function (e) {
1436 // var slideIndex = $('.item.active', this).index(),
1437 // $mapItems = $('.map-item', $carouselMap);
1438
1439 // $mapItems.removeClass('active');
1440 // $mapItems.eq(slideIndex).addClass('active');
1441 // });
1442 //});
1443 }
1444
1445 function getRelatedProducts() {
1446 var pID = '';
1447 $('#relatedIDs').each(function (index, template) {
1448 pID += $(template).find('.productId').text();
1449 });
1450
1451 if (pID != '') {
1452 var q = pID;
1453 //Get products
1454 $.ajax({
1455 type: "POST",
1456 url: "Services/AjaxRequests.asmx/SearchProductListDynamic",
1457 contentType: "application/json; charset=utf-8",
1458 dataType: "json",
1459 data: JSON.stringify({
1460 SearchString: q,
1461 SearchDocType: 'GetProducts',
1462 SearchInGroupId: '',
1463 RowsPerPage: 999,
1464 PageNumber: 1,
1465 GroupFilter: null
1466 }),
1467 error: function (msg) {
1468 console.log(JSON.stringify(msg.d))
1469 },
1470 success: function (response) {
1471 ListProducts(response.d[0].products);
1472 },
1473 complete: function (msg) {
1474 }
1475 });
1476 }
1477 }
1478
1479 $(document).ready(function () {
1480
1481 groupUrl = $('#groupURL').attr("data-href");
1482 if (groupUrl.indexOf("/maskiner/") > -1) {
1483 var buyBack = @(customPrice.Price <= 25000 && customPrice.DiscountPrice <= 25000 ? "false" : "true");
1484 if (buyBack)
1485 $('#buyBack').show();
1486 }
1487 if (groupUrl.indexOf("/stel/") > -1) {
1488 $('#swapForNew').show();
1489 }
1490
1491
1492 //Hide back button if no history
1493 if (document.referrer == "") {
1494 $('#back-button').hide();
1495 }
1496
1497 //Gets related products. :-)
1498 getRelatedProducts();
1499
1500 // Changing the main image source attribute
1501 /*
1502 var imageZoomed = '.product-image-zoomed';
1503 $('.product-image-subthumbs p').on('click', function (e) {
1504 var data = $(this).data(), $imageZoomedImg = $(imageZoomed + ' img');
1505 $imageZoomedImg.attr('src', data.thumbImage);
1506 e.stopPropagation();
1507 });
1508 */
1509
1510 // Image sizes pattern stored as JSON obnject
1511 // in data attribute on 'img' tag
1512 // Example: {'w480':[200,100],'w768':[575]}
1513 $('img[data-src]').each(function (index, el) {
1514 var $el = $(el),
1515 src = $el.data('src'),
1516 srcParsed = $.parseParams(src.split('?')[1] || ''),
1517 // srcPath = src.split('?')[0],
1518 srcPath,
1519 sizes = JSON.parse($el.data('sizes').replace(/'/g, '"')),
1520 windowWidth = Layout.params.windowWidth;
1521
1522 var diff = windowWidth,
1523 nearest, _diff;
1524
1525 if (src.indexOf('?') != -1) {
1526 srcPath = srcPath = src.split('?')[0];
1527 } else {
1528 srcPath = Layout.params.getImagePath;
1529 srcParsed['Image'] = src;
1530 }
1531 for (var key in sizes) {
1532 _diff = Math.abs(windowWidth - key.substr(1));
1533 if (diff > _diff) {
1534 diff = _diff;
1535 nearest = key;
1536 }
1537 }
1538 if (typeof sizes[nearest] === 'string') {
1539 $el.attr('src', src);
1540 return;
1541 }
1542 if (sizes[nearest][0]) {
1543 srcParsed['Width'] = sizes[nearest][0];
1544 }
1545 if (sizes[nearest][1]) {
1546 srcParsed['Height'] = sizes[nearest][1];
1547 }
1548 $el.attr('src', srcPath + '?' + decodeURIComponent($.param(srcParsed, true)));
1549 });
1550
1551 ///Mærkelig return ??????
1552 return;
1553 // Changing active tab after clicking on
1554 // comments link from details tab
1555 $('.product-comments a[data-toggle="tab"]').on('click', function (e) {
1556 var $navtabs = $('.nav-tabs'),
1557 $tabHeader = $navtabs.find('a[href*="#tab-reviews"]');
1558
1559 $navtabs.find('.active').removeClass('active');
1560 $tabHeader.parent().addClass('active');
1561 });
1562 // Attach zoom plugin if not mobile device
1563 var imageZoomed = '.product-image-zoomed';
1564 if (!Layout.isMobile.any()) {
1565 $(imageZoomed).zoom({
1566 url: $(imageZoomed + ' img').data().fullImage
1567 });
1568 /*
1569 $('.product-image-subthumbs p').on('click', function (e) {
1570 var data = $(this).data(), $imageZoomedImg = $(imageZoomed + ' img');
1571 // Changing the zoomed image sources
1572 $imageZoomedImg.data('fullImage', data.fullImage);
1573 // Destroy and reinit the instance of zoomed image
1574 $(imageZoomed).zoom('destroy');
1575 $(imageZoomed).zoom({ url: $imageZoomedImg.data().fullImage });
1576 e.stopPropagation();
1577 });
1578 */
1579 }
1580 // Changing the main image source attribute
1581 $('.product-image-subthumbs p').on('click', function (e) {
1582 var data = $(this).data(), $imageZoomedImg = $(imageZoomed + ' img');
1583 $imageZoomedImg.attr('src', data.thumbImage);
1584 e.stopPropagation();
1585 });
1586 // Manually trigger the modal box after
1587 // click on big product image
1588 $('.product-image-zoomed').on('click', function (e) {
1589 var $target = $($(this).data().target);
1590 e.preventDefault();
1591 $target.modal('show');
1592 });
1593 });
1594 }
1595 );
1596 </script>
1597