Komatsu WA320-7

Modal iconShow more photos
    • Price inquiry

Info about the machine

    • Specifications

Number

000123116

Model year

2017

Model year

2017

Number of hours

9554

Weight (kg)

16,035

Classification

C

Construction height (mm)

3,200

Length (mm)

7,880

Width (mm)

2,950

Steering

Articulated

Cabin

Drivers cab with heating
Joystick
Climate control
Air suspension seat with heating
Radio

Boom / loading arm

ECSS boom suspension

Attached equipment, loading/telescopic arm

Hydraulic locking of attachment
Loader bucket

Electric equipment

Reverse camera
Battery main switch

Engine / transmission

Diesel particulate filter (DPF)
Turbo II pre-filter
Reversible fan

Light equipment

Working light rear on cab roof
Working light front on cab roof
Road lights
Rotating beacon

Other equipment

Automatic greasing system
Komtrax monitoring

Gearbox

Hydrostatic 40 km/h

Engine brand

Komatsu

Engine type

SAA6D107E-2 Stage IIIB

Engine fuel type

6 cyl. diesel

Engine (hk)

170

Wheel front brand

Michelin

Wheel front type

Tractor patern

Wheel front size

750/65R26

Wheel rear brand

Michelin

Wheel rear type

Tractor patern

Wheel rear size

750/65R26

Battery (V)

24

Placement

Denmark

Location

Skive

Error executing template "Designs/Swift/Paragraph/Custom_RelatedProducts.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_e4a4383b245b4e828dc8cf9c19485829.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.Ecommerce.Products 6 @using Dynamicweb.Environment 7 @using Application.Extensions 8 @using Scantruck.Website.Custom.ViewModels 9 10 @if (!Pageview.IsVisualEditorMode) 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 ProductService productService = new ProductService(); 40 41 string title = Model?.Item?.GetRawValueString("Title", Translate("Products")); 42 43 if (product?.RelatedGroups?.Count > 0) 44 { 45 <div class="custom-related-products"> 46 @if (!string.IsNullOrWhiteSpace(title)) 47 { 48 <h2 class="custom-related-products__title">@title</h2> 49 } 50 @if (product.RelatedGroups.Count > 1) 51 { 52 <ul class="custom-related-products__menu tabs tabs--related"> 53 <li id="related-tabs-toggle" class="tabs__tab__toggle"> 54 <span class="tab-toggle__text"></span> 55 <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"> 56 <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" /> 57 </svg> 58 </li> 59 <li> 60 <ul class="tabs__dropdown custom-related-products__menu__button-container"> 61 @{ 62 int buttonCount = 0; 63 } 64 @foreach (var relatedGroup in product.RelatedGroups.OrderBy(x => x.Id)) 65 { 66 <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> 67 68 buttonCount++; 69 } 70 </ul> 71 </li> 72 </ul> 73 } 74 <div class="custom-product-slider" id="related-product-sliders"> 75 @{ 76 int groupCount = 0; 77 } 78 79 @foreach (var relatedGroup in product.RelatedGroups.OrderBy(x => x.Id)) 80 { 81 <div id="swiper-@relatedGroup.Id.ToLower()" class="swiper swiper-@relatedGroup.Id.ToLower() swiper-container @(groupCount > 0 ? "collapse" : "collapse show")"> 82 <div class="swiper-controls-container container-xl"> 83 <div class="swiper-pagination swiper-pagination-@relatedGroup.Id.ToLower() swiper-controls-container__custom-slider"></div> 84 <div class="swiper-controls-container__button-container"> 85 <div class="swiper-button-next swiper-button-@relatedGroup.Id.ToLower()-next button-box "> 86 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> 87 <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" /> 88 </svg> 89 </div> 90 <div class="swiper-button-prev swiper-button-@relatedGroup.Id.ToLower()-prev button-box "> 91 <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none"> 92 <path d="M16 7H3.83L9.42 1.41L8 0L0 8L8 16L9.41 14.59L3.83 9H16V7Z" fill="black" /> 93 </svg> 94 </div> 95 </div> 96 </div> 97 <div class="swiper-wrapper"> 98 99 @{ 100 var reletedProductsFromService = productService.GetByProductIDs(relatedGroup.Products.Select(p => p.ProductId).ToArray(), false, Dynamicweb.Ecommerce.Common.Context.LanguageID, true, false) 101 .OrderByDescending(p => p.ManufacturerId == product.Manufacturer.Id) 102 .Take(10); 103 } 104105106 @foreach (var relatedProduct in reletedProductsFromService) 107 { 108 var productInfo = ViewModelFactory.CreateView(productSetting, relatedProduct.Id) as CustomProductViewModel; 109 if (productInfo == null) continue; 110111 var imagePath = productInfo.HasImages ? productInfo.DefaultImage.Value : productInfo.GetCustomDefaultImage(Pageview.AreaID); 112113 // Cache product fields 114 var productFields = productInfo.ProductFields; 115116 // Extract CustomProductType 117 int customProductType = 0; 118 if (productFields.TryGetValue("CustomProductType", out var typeField) 119 && typeField is Dynamicweb.Ecommerce.ProductCatalog.FieldValueViewModel typeValue 120 && typeValue.Value is List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel> typeList 121 && typeList.Any()) 122 { 123 customProductType = Convert.ToInt32(typeList.First().Value); 124 } 125126 // Extract CustomProductCondition 127 int customProductCondition = 0; 128 if (productFields.TryGetValue("CustomProductCondition", out var conditionField) 129 && conditionField is Dynamicweb.Ecommerce.ProductCatalog.FieldValueViewModel conditionValue 130 && conditionValue.Value is List<Dynamicweb.Ecommerce.ProductCatalog.FieldOptionValueViewModel> condList 131 && condList.Any()) 132 { 133 customProductCondition = Convert.ToInt32(condList.First().Value); 134 } 135136137 // Determine classification and premium status 138 bool hasClassification = false, isPremium = false; 139 string classification = ""; 140141 if (productInfo.ProductCategories?.TryGetValue("specifications_bc", out var categoryFields) == true && categoryFields.Fields != null) 142 { 143 var bcFields = categoryFields.Fields; 144 classification = bcFields.TryGetValue("M_0010500", out var classField) && classField?.Value != null ? classField.Value.ToString() : ""; 145 hasClassification = !string.IsNullOrWhiteSpace(classification); 146147 isPremium = bcFields.TryGetValue("M_0090530", out var premiumField) && bool.TryParse(premiumField?.Value?.ToString(), out var premium) && premium; 148 } 149150 if (Pageview.AreaID == 6) hasClassification = false; 151152 // Navigation Tag and Spec Fallback 153 string navigationTag = "ShopNewMachines"; 154 string specFallbackGroup = "AllSpecs"; 155156 if (customProductType != 2) // 2 == maskiner 157 { 158 navigationTag = customProductCondition == 2 ? "ShopNewEquipment" : "ShopOldEquipment"; 159 } 160 else 161 { 162 navigationTag = customProductCondition == 2 ? "ShopNewMachines" : "ShopUsedMachines"; 163 specFallbackGroup = customProductCondition == 2 ? "NewMachinesDefaultListSpecs" : "UsedMachinesDefaultListSpecs"; 164 } 165166 var link = productInfo.GetProductLink(GetPageIdByNavigationTag(navigationTag), false); 167168 string manufacturerNameFromViewmodel = productInfo.GetManufacturerName(Pageview.Area.Item); 169 string manufacturerNameToDisplay = !string.IsNullOrEmpty(manufacturerNameFromViewmodel) ? $"{manufacturerNameFromViewmodel} " : ""; 170171 @if (!string.IsNullOrWhiteSpace(productInfo.PrimaryOrDefaultGroup?.Id)) 172 { 173 <div class="swiper-slide custom-product-slider__item"> 174 <div class="custom-product-slider__item-iner"> 175 <a href="@link" class="custom-product-slider__item-name"> 176 @manufacturerNameToDisplay 177 @productInfo.Name 178 @if (hasClassification) 179 { 180 <span class="classification-badge classification-badge--@classification.Replace("+", "_plus")"></span> 181 } 182 </a> 183184 <a href="@link" class="custom-product-slider__item-media"> 185 <picture> 186 @if (productInfo.HasDiscount && productInfo.RelevantDiscountCampaign != null) 187 { 188 bool useCampaignImage = !string.IsNullOrEmpty(productInfo.RelevantDiscountCampaign.CampaignImage.Value); 189 if (useCampaignImage) 190 { 191 <span class="custom-product-slider__item-media-campaign-container"> 192 @{ 193 string imageUrlUnformatted = "/Admin/Public/GetImage.ashx?width={0}&image={1}&format=webp&quality=99"; 194 var campaignImage = string.Format(imageUrlUnformatted, 600, Uri.EscapeDataString(productInfo.RelevantDiscountCampaign.CampaignImage.Value)); 195 } 196 <img class="custom-product-slider__item-media-campaign-container--image" src="@campaignImage" /> 197 </span> 198 } 199 } 200 <img src="@imagePath" alt="@productInfo.Name"> 201 </picture> 202 <div class="custom-product-slider__item-media-overlay"></div> 203 <div class="custom-product-slider__item-tags"> 204 <div class="custom-product-slider__item-link"> 205 <span class="text">@Translate("Se produkt")</span> 206 <span class="icon"> 207 <svg viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> 208 <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" /> 209 </svg> 210 </span> 211 </div> 212 </div> 213214 @if (isPremium) 215 { 216 <div class="product-badge product-badge--premium">@Translate("ProductBadge:Premium")</div> 217 } 218 </a> 219220 @if (productInfo.Price?.Price > 0) 221 { 222 <div class="custom-product-slider__item-price"> 223 <span class="custom-product-slider__item-price-text">@Translate("excl. VAT")</span> 224225 <span class="custom-product-slider__item-price-wrapper"> 226 @if (productInfo.HasDiscount) 227 { 228 <span class="custom-product-slider__item-price-wrapper-discount"> 229 @productInfo.PriceBeforeDiscount.PriceWithoutVat.ToString("N2") 230 </span> 231 } 232 <span class="custom-product-slider__item-price-wrapper-value"> 233 @productInfo.Price.PriceWithoutVat.ToString("N2") @productInfo.Price.CurrencyCode @*ATTENTION: Shows the Price in whole numbers with commas*@ 234 </span> 235236 @if (productInfo.HasDiscount && productInfo.RelevantDiscountCampaign != null && !string.IsNullOrEmpty(productInfo.RelevantDiscountCampaign.CampaignColor) && !string.IsNullOrEmpty(productInfo.RelevantDiscountCampaign.CampaignName)) 237 { 238 <span class="custom-product-slider__item-price-wrapper-campaign" style="background-color: @productInfo.RelevantDiscountCampaign.CampaignColor;"> 239 @productInfo.RelevantDiscountCampaign.CampaignName 240 </span> 241 } 242 </span> 243 </div> 244 } 245246 @{ 247 var productGroup = productInfo.Groups?.FirstOrDefault(); 248 var specGroup = productGroup != null ? productInfo.FieldDisplayGroups?.Values?.FirstOrDefault(group => group.Id.Contains(productGroup.Id)) : null; 249 var defaultGroup = productInfo.FieldDisplayGroups?.Values?.FirstOrDefault(group => group.Id == specFallbackGroup); 250 var groupToUse = specGroup != null && specGroup.Fields.Count > 0 ? specGroup : defaultGroup; 251 } 252253 @if (groupToUse != null && groupToUse.Fields.Count > 0) 254 { 255 <div class="custom-product-slider__item-specs"> 256 @foreach (var fieldViewModel in groupToUse.Fields.Take(5)) 257 { 258 var field = fieldViewModel.Value; 259 var value = field.Value?.ToString(); 260 if (!string.IsNullOrWhiteSpace(value) && value != "0") 261 { 262 value = value == "False" ? Translate("No") : value == "True" ? Translate("Yes") : value; 263264 <div class="custom-product-slider__item-specs-line"> 265 <span class="name">@Translate(field.SystemName == "ProductNumber" ? "Product Number" : field.Name)</span> 266 <span class="value"> 267 @(field.Type == "Double" ? StringFormatExtensions.FormatDecimal(value, Pageview.Area.CultureInfo.ToString()) : value) 268 </span> 269 </div> 270 } 271 } 272 </div> 273 } 274 </div> 275 </div> 276 } 277 } 278279 </div> 280 </div> 281282 <script type="module"> 283 const swiper = new Swiper('.swiper-@relatedGroup.Id.ToLower()', { 284 slidesPerView: 'auto', 285 spaceBetween: 20, 286 speed: 600, 287 navigation: { 288 nextEl: '.swiper-button-@relatedGroup.Id.ToLower()-next', 289 prevEl: '.swiper-button-@relatedGroup.Id.ToLower()-prev' 290 }, 291 pagination: { 292 el: '.swiper-pagination-@relatedGroup.Id.ToLower()', 293 type: 'progressbar' 294 } 295 }) 296 </script> 297298 groupCount++; 299 } 300 </div> 301 </div> 302303 <script> 304 document.querySelectorAll('.custom-related-products__menu__button-container__button').forEach(button => { 305 button.addEventListener('click', event => { 306 document.querySelector('.custom-related-products__menu__button-container__button--active').classList.remove('custom-related-products__menu__button-container__button--active'); 307 button.classList.add('custom-related-products__menu__button-container__button--active'); 308309 document.querySelector('.swiper.show').classList.remove('show'); 310 document.querySelector(button.getAttribute('data-swiper-target')).classList.add('show'); 311 }) 312 }); 313 </script> 314315 <script> 316 const relatedTabLinks = document.querySelectorAll('.custom-related-products__menu .tabs__tab'); 317 const relatedTabToggle = document.getElementById('related-tabs-toggle'); 318 const relatedDropdown = document.querySelector('.custom-related-products__menu .tabs__dropdown'); 319 const relatedIcon = document.querySelector('.custom-related-products__menu .tabs__tab__toggle__icon'); 320321 function toggleRelatedDropdown() { 322 relatedDropdown.classList.toggle('tabs__dropdown--active'); 323 relatedTabToggle.classList.toggle('tabs__tab__toggle--active'); 324 relatedIcon.classList.toggle('tabs__tab__toggle__icon--active'); 325 } 326327 relatedTabLinks.forEach(link => { 328 link.addEventListener('click', function (e) { 329 const activeTab = document.querySelector('.custom-related-products__menu .tabs__tab--active'); 330 activeTab.classList.remove('tabs__tab--active'); 331 this.classList.add('tabs__tab--active'); 332333 relatedTabToggle.querySelector('.tab-toggle__text').textContent = this.textContent; 334 toggleRelatedDropdown(); 335 }); 336 }); 337338 relatedTabToggle.addEventListener('click', function () { 339 toggleRelatedDropdown(); 340 }); 341342 relatedTabToggle.querySelector('.tab-toggle__text').textContent = document.querySelector('.custom-related-products__menu .tabs__tab--active').textContent; 343 </script> 344345 } 346 } 347 else 348 { 349 <div class="alert alert-dark m-0">@Translate("No products available")</div> 350 } 351

For more information
Contact sales export

Price inquiry

Fill in the form and send your questions or comments to Scantruck.
We will get back to you with a price and answers to your questions.