MT625E COMFORT

Modal iconVis flere billeder
    • Prisforespørgsel

Info om maskinen

    • Specifikationer
    • Flere specifikationer
    • Downloads
Error executing template "Designs/Swift/Paragraph/Custom_RelatedProducts.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.GetOrderedInheritableParentIds(Group group, String defaultLanguageId)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.RecursivelySearchForFieldValues(Group group, String defaultLanguageId, List`1 categoryFields)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.RecursivelySearchForFieldValues(Group group, String defaultLanguageId, List`1 categoryFields)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.RecursivelySearchForFieldValues(Group group, String defaultLanguageId, List`1 categoryFields)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.RecursivelySearchForFieldValues(Group group, String defaultLanguageId, List`1 categoryFields)
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.GetGroupFieldValuesByLanguage(Group group, List`1 categoryFields, String languageId, Boolean isInheritedValue, Boolean searchRecursively)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.GetGroupCategoryFieldValues(IEnumerable`1 groups, List`1 fields, Boolean allowFallback)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.GetDefaultCategoryValuesFromGroups(IEnumerable`1 groupInfos, List`1 catFields)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldGroupValueService.GetDefaultCategoryValueFromGroups(IEnumerable`1 groupInfos, Field catField)
at Dynamicweb.Ecommerce.Products.Categories.ProductCategoryFieldValueService.GetProductCategoryFieldValue(Product product, String categoryId, Field field)
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductViewModelSettings settings, Product product, Field field)
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.GetFieldDisplayGroupValues(ProductViewModelSettings settings, Product product, String languageID, Lazy`1 productIds)
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.<>c__DisplayClass3_1.<BulkCreateView>b__59()
at Dynamicweb.Ecommerce.ProductCatalog.ViewModelPropertyFiller`1.Fill[S](T model, String propertyName, Func`1 source)
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.BulkCreateView(ProductViewModelSettings settings, Boolean isRecursive, IList`1 products)
at Dynamicweb.Ecommerce.ProductCatalog.ViewEngine.CreateView(ProductViewModelSettings settings, Product product)
at CompiledRazorTemplates.Dynamic.RazorEngine_5de09412b9f94ce8b0cfe56e2846706c.ExecuteAsync()
at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Core 3 @using Dynamicweb.Ecommerce.ProductCatalog 4 @using System.Linq 5 @using Dynamicweb.Environment 6 @using Application.Extensions 7 @using Scantruck.Website.Custom.ViewModels 8 9 @if (!Pageview.IsVisualEditorMode) 10 { 11 12 string lazyHeight = Model.Item?.GetBoolean("SetMinHeightForLazyLoading") == true ? "min-height: 360px" : ""; 13 string theme = !string.IsNullOrWhiteSpace(Model.Item?.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 14 int paragraphId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("ParagraphId")) ? Convert.ToInt32(Dynamicweb.Context.Current.Request.Form.Get("ParagraphId")) : 0; 15 16 //Link generation 17 string pageId = Model.Item?.GetLink("ProductSliderServicePage")?.PageId.ToString() ?? ""; 18 string servicePageByNavigationTag = GetPageIdByNavigationTag("RelatedProductSliderService") != 0 ? GetPageIdByNavigationTag("RelatedProductSliderService").ToString() : ""; 19 pageId = string.IsNullOrEmpty(pageId) ? servicePageByNavigationTag : pageId; 20 string HrefTarget = Model.Item?.GetBoolean("OpenNewWindow") == true ? "_blank" : ""; 21 22 bool productViewModelFound = false; 23 ProductViewModel product = new ProductViewModel(); 24 25 ProductViewModelSettings productSetting = new ProductViewModelSettings 26 { 27 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 28 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 29 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 30 ShopId = Pageview.Area.EcomShopId 31 }; 32 33 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 34 { 35 productViewModelFound = true; 36 product = Dynamicweb.Context.Current.Items["ProductDetails"] as ProductViewModel; 37 } 38 39 string title = Model?.Item?.GetRawValueString("Title", Translate("Products")); 40 41 if (product?.RelatedGroups?.Count > 0) 42 { 43 <div class="custom-related-products"> 44 @if (!string.IsNullOrWhiteSpace(title)) 45 { 46 <h2 class="custom-related-products__title">@title</h2> 47 } 48 @if (product.RelatedGroups.Count > 1) 49 { 50 <ul class="custom-related-products__menu tabs tabs--related"> 51 <li id="related-tabs-toggle" class="tabs__tab__toggle"> 52 <span class="tab-toggle__text"></span> 53 <svg class="tabs__tab__toggle__icon" :class="{ 'tabs__tab__toggle__icon--active': isToggleActive }" xmlns="http://www.w3.org/2000/svg" width="14" height="8" viewBox="0 0 14 8"> 54 <path d="M13.6641 2.56489L7.18487 8L6.79492 8L0.33073 2.56489L1.74055 1.42186e-07L7.00489 4.30534L12.2542 1.6812e-08L13.6641 2.56489Z" /> 55 </svg> 56 </li> 57 <li> 58 <ul class="tabs__dropdown custom-related-products__menu__button-container"> 59 @{ 60 int buttonCount = 0; 61 } 62 @foreach (var relatedGroup in product.RelatedGroups.OrderBy(x => x.Id)) 63 { 64 <li id="button-@relatedGroup.Id.ToLower()" data-swiper-target="#swiper-@relatedGroup.Id.ToLower()" class="tabs__tab @(buttonCount == 0 ? "tabs__tab--active" : "") custom-related-products__menu__button-container__button @(buttonCount == 0 ? "custom-related-products__menu__button-container__button--active" : "")">@relatedGroup.Name</li> 65 66 buttonCount++; 67 } 68 </ul> 69 </li> 70 </ul> 71 } 72 <div class="custom-product-slider" id="related-product-sliders"> 73 @{ 74 int groupCount = 0; 75 } 76 77 @foreach (var relatedGroup in product.RelatedGroups.OrderBy(x => x.Id)) 78 { 79 <div id="swiper-@relatedGroup.Id.ToLower()" class="swiper swiper-@relatedGroup.Id.ToLower() swiper-container @(groupCount > 0 ? "collapse" : "collapse show")"> 80 <div class="swiper-controls-container container-xl"> 81 <div class="swiper-pagination swiper-pagination-@relatedGroup.Id.ToLower() swiper-controls-container__custom-slider"></div> 82 <div class="swiper-controls-container__button-container"> 83 <div class="swiper-button-next swiper-button-@relatedGroup.Id.ToLower()-next button-box "> 84 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> 85 <path d="M6.11959e-07 9L12.17 9L6.58 14.59L8 16L16 8L8 -6.99382e-07L6.59 1.41L12.17 7L7.86805e-07 7L6.11959e-07 9Z" fill="black" /> 86 </svg> 87 </div> 88 <div class="swiper-button-prev swiper-button-@relatedGroup.Id.ToLower()-prev button-box "> 89 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> 90 <path d="M16 7H3.83L9.42 1.41L8 0L0 8L8 16L9.41 14.59L3.83 9H16V7Z" fill="black" /> 91 </svg> 92 </div> 93 </div> 94 </div> 95 <div class="swiper-wrapper"> 96 @foreach (var relatedProduct in relatedGroup.Products) 97 { 98 CustomProductViewModel productInfo = ViewModelFactory.CreateView(productSetting, relatedProduct.ProductId) as CustomProductViewModel; 99100 string imagePath = productInfo?.HasImages == true ? productInfo.DefaultImage.Value : productInfo?.GetCustomDefaultImage(Pageview.AreaID); 101102 int customProductType = 0; 103 var productTypeValue = productInfo?.ProductFields["CustomProductType"]; 104 var specFallbackGroup = "AllSpecs"; 105106 var categoryFields = productInfo?.ProductCategories?.FirstOrDefault(x => x.Key == "specifications_bc"); 107 var bcFields = categoryFields?.Value?.Fields; 108109 bool hasClassification = false; 110 string classification = ""; 111 bool isPremium = false; 112113 if (bcFields != null) 114 { 115 var classificationField = bcFields.FirstOrDefault(x => x.Key == "M_0010500"); 116 classification = classificationField.Value != null ? classificationField.Value.ToString() : ""; 117118 if (!string.IsNullOrWhiteSpace(classification)) 119 { 120 hasClassification = true; 121 } 122123 if (bcFields?.Any(x => x.Key == "M_0090530") == true) 124 { 125 var premiumValue = bcFields.FirstOrDefault(x => x.Key == "M_0090530").Value.ToString(); 126127 if (!string.IsNullOrWhiteSpace(premiumValue)) 128 { 129 isPremium = Convert.ToBoolean(premiumValue); 130 } 131132133 } 134 } 135136 if (Pageview.AreaID == 6) 137 { 138 hasClassification = false; 139 } 140141 if (productTypeValue != null && productTypeValue.Value is List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel> productTypeValues) 142 { 143 if (productTypeValues.Any()) 144 { 145 customProductType = Convert.ToInt32(productTypeValues.First().Value); 146 } 147 } 148149 int customProductCondition = 0; 150151 var productConditionValue = productInfo?.ProductFields["CustomProductCondition"]; 152153 if (productConditionValue != null && productConditionValue.Value is List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel> productConditionValues) 154 { 155 if (productConditionValues.Any()) 156 { 157 customProductCondition = Convert.ToInt32(productConditionValues.First().Value); 158 } 159 } 160161 var navigationTag = "ShopNewMachines"; 162163 if (customProductType != 2) // 2 == maskiner 164 { 165 if (customProductCondition == 2) // 2 == nyt 166 { 167 navigationTag = "ShopNewEquipment"; 168 } 169 else 170 { 171 navigationTag = "ShopOldEquipment"; 172 } 173 } 174 else 175 { 176 if (customProductCondition == 2) 177 { 178 navigationTag = "ShopNewMachines"; 179 specFallbackGroup = "NewMachinesDefaultListSpecs"; 180 } 181 else 182 { 183 navigationTag = "ShopUsedMachines"; 184 specFallbackGroup = "UsedMachinesDefaultListSpecs"; 185 } 186 } 187188 var link = productInfo?.GetProductLink(GetPageIdByNavigationTag(navigationTag), false); 189190 @if (!string.IsNullOrWhiteSpace(productInfo.PrimaryOrDefaultGroup?.Id)) 191 { 192 <div class="swiper-slide custom-product-slider__item"> 193 <div class="custom-product-slider__item-iner"> 194 <a href="@link" class="custom-product-slider__item-name"> 195 @productInfo?.Name 196 @if (hasClassification) 197 { 198 <span class="classification-badge classification-badge--@classification"></span> 199 } 200 </a> 201202 <a href="@link" class="custom-product-slider__item-media"> 203 <picture> 204 <img src="@imagePath" alt="@productInfo?.Name"> 205 </picture> 206 <div class="custom-product-slider__item-media-overlay"></div> 207 <div class="custom-product-slider__item-tags"> 208 <div class="custom-product-slider__item-link"> 209 <span class="text">@Translate("Se produkt")</span> 210 <span class="icon"> 211 <svg viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 212 <path d="M0.9875 11.6029L15.5915 11.6029L8.8835 18.3109L10.5875 20.0029L20.1875 10.4029L10.5875 0.802928L8.8955 2.49493L15.5915 9.20293L0.9875 9.20293L0.9875 11.6029Z" fill="currentColor" /> 213 </svg> 214 </span> 215 </div> 216 </div> 217218 @if (isPremium) 219 { 220 <div class="product-badge product-badge--premium">@Translate("ProductBadge:Premium")</div> 221 } 222 </a> 223 @if (productInfo?.Price?.Price > 0) 224 { 225 <div class="custom-product-slider__item-price"> 226 <span class="custom-product-slider__item-price-text">@Translate("excl. VAT")</span> 227 <span class="custom-product-slider__item-price-value"> 228 @productInfo.Price.PriceWithoutVat.ToString("N2") @productInfo.Price.CurrencyCode @*ATTENTION: Shows the Price in whole numbers with commas*@ 229 </span> 230 </div> 231 } 232233 @{ 234 var productGroup = productInfo?.Groups?.FirstOrDefault(); 235 var specGroup = productGroup != null ? productInfo?.FieldDisplayGroups?.Values?.FirstOrDefault(group => group.Id.Contains(productGroup.Id)) : null; 236 var defaultGroup = productInfo?.FieldDisplayGroups?.Values?.FirstOrDefault(group => group.Id == specFallbackGroup); 237 var groupToUse = specGroup != null && specGroup.Fields.Count > 0 ? specGroup : defaultGroup; 238 } 239240 @if (groupToUse != null && groupToUse.Fields.Count > 0) 241 { 242 <div class="custom-product-slider__item-specs"> 243 @foreach (var fieldViewModel in groupToUse.Fields.Take(5)) 244 { 245 var field = fieldViewModel.Value; 246 var value = field.Value; 247 if (!String.IsNullOrWhiteSpace(value?.ToString())) 248 { 249 value = value.ToString() == "False" ? Translate("No") : value; 250 value = value.ToString() == "True" ? Translate("Yes") : value; 251252 if (value.ToString() != "0") 253 { 254 <div class="custom-product-slider__item-specs-line"> 255 @if (field.SystemName == "ProductNumber") 256 { 257 <span class="name">@Translate("Product Number")</span> 258 <span class="value">@value.ToString()</span> 259 } 260 else if (field.Type == "Double") 261 { 262 <span class="name">@field.Name</span> 263 <span class="value">@StringFormatExtensions.FormatDecimal(value.ToString(), Pageview.Area.CultureInfo.ToString())</span> 264 } 265 else 266 { 267 <span class="name">@field.Name</span> 268 <span class="value">@value.ToString()</span> 269 } 270 </div> 271 } 272 } 273 } 274 </div> 275 } 276 </div> 277 </div> 278279 } 280 } 281 </div> 282 </div> 283284 <script type="module"> 285 const swiper = new Swiper('.swiper-@relatedGroup.Id.ToLower()', { 286 slidesPerView: 'auto', 287 spaceBetween: 20, 288 speed: 600, 289 navigation: { 290 nextEl: '.swiper-button-@relatedGroup.Id.ToLower()-next', 291 prevEl: '.swiper-button-@relatedGroup.Id.ToLower()-prev' 292 }, 293 pagination: { 294 el: '.swiper-pagination-@relatedGroup.Id.ToLower()', 295 type: 'progressbar' 296 } 297 }) 298 </script> 299300 groupCount++; 301 } 302 </div> 303 </div> 304305 <script> 306 document.querySelectorAll('.custom-related-products__menu__button-container__button').forEach(button => { 307 button.addEventListener('click', event => { 308 document.querySelector('.custom-related-products__menu__button-container__button--active').classList.remove('custom-related-products__menu__button-container__button--active'); 309 button.classList.add('custom-related-products__menu__button-container__button--active'); 310311 document.querySelector('.swiper.show').classList.remove('show'); 312 document.querySelector(button.getAttribute('data-swiper-target')).classList.add('show'); 313 }) 314 }); 315 </script> 316317 <script> 318 const relatedTabLinks = document.querySelectorAll('.custom-related-products__menu .tabs__tab'); 319 const relatedTabToggle = document.getElementById('related-tabs-toggle'); 320 const relatedDropdown = document.querySelector('.custom-related-products__menu .tabs__dropdown'); 321 const relatedIcon = document.querySelector('.custom-related-products__menu .tabs__tab__toggle__icon'); 322323 function toggleRelatedDropdown() { 324 relatedDropdown.classList.toggle('tabs__dropdown--active'); 325 relatedTabToggle.classList.toggle('tabs__tab__toggle--active'); 326 relatedIcon.classList.toggle('tabs__tab__toggle__icon--active'); 327 } 328329 relatedTabLinks.forEach(link => { 330 link.addEventListener('click', function (e) { 331 const activeTab = document.querySelector('.custom-related-products__menu .tabs__tab--active'); 332 activeTab.classList.remove('tabs__tab--active'); 333 this.classList.add('tabs__tab--active'); 334335 relatedTabToggle.querySelector('.tab-toggle__text').textContent = this.textContent; 336 toggleRelatedDropdown(); 337 }); 338 }); 339340 relatedTabToggle.addEventListener('click', function () { 341 toggleRelatedDropdown(); 342 }); 343344 relatedTabToggle.querySelector('.tab-toggle__text').textContent = document.querySelector('.custom-related-products__menu .tabs__tab--active').textContent; 345 </script> 346347 } 348 } 349 else 350 { 351 <div class="alert alert-dark m-0">@Translate("No products available")</div> 352 } 353

Prisforespørgsel

Udfyld formularen og send dine spørgsmål eller kommentarer til Scantruck.
Herefter vender vi tilbage med pris og svar på dine spørgsmål.