Mobile footer
/Files/Images/LDIIndustries/Logo/ldi-logo.webp
Error executing template "Designs/Swift-v2/Paragraph/Custom_FAClusterStockUpdateFeed.cshtml"
System.Exception: Product id is required to find a product.
   at Dynamicweb.Core.Ensure.That[TException](Boolean condition, String message)
   at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductViewModelSettings settings, String productId, String variantId, String groupId)
   at Dynamicweb.Ecommerce.ProductCatalog.ViewModelFactory.CreateView(ProductViewModelSettings settings, String productId, String variantId)
   at CompiledRazorTemplates.Dynamic.RazorEngine_73b29c9d90ea4f9fb83984bb76024302.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 3 @using Dynamicweb.Frontend 4 @using Dynamicweb.Ecommerce.ProductCatalog 5 @using Dynamicweb.Ecommerce.Orders 6 @using Dynamicweb.Ecommerce.Stocks 7 8 @functions{ 9 public class StockText{ 10 public string StockStatus { get; set; } 11 public string StockStatusDesc { get; set; } 12 } 13 } 14 @{ 15 string productId = Dynamicweb.Context.Current.Request.QueryString.Get("ProductId"); 16 string variantId = Dynamicweb.Context.Current.Request.QueryString.Get("VariantId"); 17 string qty = Dynamicweb.Context.Current.Request.QueryString.Get("Qty"); 18 StockText stockText=new StockText(); 19 20 ProductViewModelSettings productSetting = new ProductViewModelSettings 21 { 22 LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, 23 CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code, 24 CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2, 25 ShopId = Pageview.Area.EcomShopId 26 }; 27 ProductViewModel product = ViewModelFactory.CreateView(productSetting,productId,variantId); 28 if(product != null){ 29 30 var stockunits = product.GetStockUnit(); 31 int stockuitcount=stockunits.Count(); 32 List<StockLocation> stockloc = Dynamicweb.Ecommerce.Services.StockService.GetStockLocations().Where(x=>x.CategoryId== "STOCKLOCCAT2").ToList(); 33 string langId = Dynamicweb.Ecommerce.Common.Context.LanguageID; 34 string stockduration="6 weeks"; 35 36 string custwarehouse = ""; 37 double cuswarehousestock = 0; 38 if(Pageview.User != null) 39 { 40 custwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x => x.CustomField.SystemName == "AccessUser_D365Warehouse")?.Value?.ToString(); 41 string lastudwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x => x.CustomField.SystemName == "AccessUser_LastUpdatedWarehouse")?.Value?.ToString(); 42 if(!string.IsNullOrEmpty(lastudwarehouse)){ 43 custwarehouse=lastudwarehouse; 44 } 45 } 46 else{ 47 string warehousecookie = Dynamicweb.Context.Current.Request.GetCookie("SelectedWarehouse")?.Value; 48 if(!string.IsNullOrEmpty(warehousecookie)){ 49 custwarehouse=warehousecookie; 50 } 51 } 52 string currwarehousename = stockloc.FirstOrDefault(x=>x.GetName(langId)==custwarehouse)?.GetDescription(langId); 53 54 if (stockuitcount > 0) 55 { 56 stockduration=stockunits.FirstOrDefault().StockStatus; 57 if(stockunits.FirstOrDefault(x => x.StockLocationName == custwarehouse) != null){ 58 cuswarehousestock = stockunits.FirstOrDefault(x => x.StockLocationName == custwarehouse).StockLevel; 59 } 60 } 61 double totalstock = product.StockLevel ?? 0; 62 63 double qtyInt = !string.IsNullOrEmpty(qty) ? Convert.ToDouble(qty) : 0; 64 double cartqty = 0; 65 if (Dynamicweb.Ecommerce.Common.Context.Cart != null) 66 { 67 Order dworder = Dynamicweb.Ecommerce.Common.Context.Cart; 68 foreach(OrderLine orderLine in dworder.OrderLines.Where(x=>x.ProductId==productId && x.ProductVariantId == variantId)) 69 { 70 cartqty = cartqty + orderLine.Quantity; 71 } 72 } 73 double totalqty = qtyInt + cartqty; 74 75 if (totalstock == 0) 76 { 77 stockText.StockStatus= "Out of stock <span class=\"cus-faplist__availdur\">" + stockduration + "</span>"; 78 stockText.StockStatus = stockText.StockStatus + "<span class=\"cus-faplist__availtooltiptxt\">" + totalqty + " will be available in about " + stockduration+"</span>"; 79 } 80 else if (totalqty <= cuswarehousestock) 81 { 82 stockText.StockStatus= "In stock <svg class=\"status-check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 1.5C7.86 1.5 4.5 4.86 4.5 9c0 5.25 7.5 13.5 7.5 13.5s7.5-8.25 7.5-13.5c0-4.14-3.36-7.5-7.5-7.5z\"></path><circle cx=\"12\" cy=\"9\" r=\"2.5\"></circle></svg>"; 83 stockText.StockStatus = stockText.StockStatus +"<span class=\"cus-faplist__availtooltiptxt\">" + "In stock in " + currwarehousename +"</span>"; 84 } 85 else if (totalqty > cuswarehousestock && totalqty <= totalstock) 86 { 87 double pendingstock=totalqty-cuswarehousestock; 88 stockText.StockStatus= "In stock"; 89 stockText.StockStatus = stockText.StockStatus +"<span class=\"cus-faplist__availtooltiptxt\">" + cuswarehousestock + " are in stock in " + currwarehousename + ", and the additional "+ pendingstock + " is available in other FORCE America warehouse(s) in the US."+"</span>"; 90 } 91 else if(totalqty > totalstock) 92 { 93 double pendingstock=totalstock-cuswarehousestock; 94 double notinstock=totalqty-totalstock; 95 stockText.StockStatus= "Out of stock <span class=\"cus-faplist__availdur\">" + stockduration + "</span>"; 96 stockText.StockStatus = stockText.StockStatus +"<span class=\"cus-faplist__availtooltiptxt\">" + cuswarehousestock + " are in stock in " + currwarehousename + ", "+ pendingstock + " are available in other FORCE America warehouse(s) in the US, the " + notinstock + " will be available in about " + stockduration +"</span>"; 97 } 98 99 } 100 var ret = Newtonsoft.Json.JsonConvert.SerializeObject(stockText); 101 } 102 @ret
/Files/Images/LDIIndustries/Logo/force-logo-subsidiary-black_1.webp