<pre class='dw-error'>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.&lt;&gt;c__DisplayClass23_0.&lt;Run&gt;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()
<hr/>
<div class='template-code'>
<span class='line-number'>  1</span>     @inherits Dynamicweb.Rendering.ViewModelTemplate&lt;Dynamicweb.Frontend.ParagraphViewModel&gt;
<span class='line-number'>  2</span>     @using Dynamicweb
<span class='line-number'>  3</span>     @using Dynamicweb.Frontend
<span class='line-number'>  4</span>     @using Dynamicweb.Ecommerce.ProductCatalog
<span class='line-number'>  5</span>     @using Dynamicweb.Ecommerce.Orders
<span class='line-number'>  6</span>     @using Dynamicweb.Ecommerce.Stocks 
<span class='line-number'>  7</span>     
<span class='line-number'>  8</span>     @functions{
<span class='line-number'>  9</span>         public class StockText{
<span class='line-number'> 10</span>             public string StockStatus { get; set; }
<span class='line-number'> 11</span>             public string StockStatusDesc { get; set; }
<span class='line-number'> 12</span>         }
<span class='line-number'> 13</span>     }
<span class='line-number'> 14</span>     @{
<span class='line-number'> 15</span>         string productId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;ProductId&quot;);
<span class='line-number'> 16</span>         string variantId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;VariantId&quot;);
<span class='line-number'> 17</span>         string qty = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;Qty&quot;);
<span class='line-number'> 18</span>         StockText stockText=new StockText();
<span class='line-number'> 19</span>     
<span class='line-number'> 20</span>         ProductViewModelSettings productSetting = new ProductViewModelSettings
<span class='line-number'> 21</span>         {
<span class='line-number'> 22</span>             LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID,
<span class='line-number'> 23</span>             CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code,
<span class='line-number'> 24</span>             CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2,
<span class='line-number'> 25</span>             ShopId = Pageview.Area.EcomShopId
<span class='line-number'> 26</span>         };
<span class='line-number'> 27</span>         ProductViewModel product = ViewModelFactory.CreateView(productSetting,productId,variantId);
<span class='line-number'> 28</span>         if(product != null){
<span class='line-number'> 29</span>     
<span class='line-number'> 30</span>             var stockunits = product.GetStockUnit();
<span class='line-number'> 31</span>     		int stockuitcount=stockunits.Count();
<span class='line-number'> 32</span>     		List&lt;StockLocation&gt; stockloc = Dynamicweb.Ecommerce.Services.StockService.GetStockLocations().Where(x=&gt;x.CategoryId== &quot;STOCKLOCCAT2&quot;).ToList();
<span class='line-number'> 33</span>     		string langId = Dynamicweb.Ecommerce.Common.Context.LanguageID;
<span class='line-number'> 34</span>     		string stockduration=&quot;6 weeks&quot;;
<span class='line-number'> 35</span>             
<span class='line-number'> 36</span>             string custwarehouse = &quot;&quot;;
<span class='line-number'> 37</span>     		double cuswarehousestock = 0;
<span class='line-number'> 38</span>     		if(Pageview.User != null)
<span class='line-number'> 39</span>     		{
<span class='line-number'> 40</span>     			custwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x =&gt; x.CustomField.SystemName == &quot;AccessUser_D365Warehouse&quot;)?.Value?.ToString();
<span class='line-number'> 41</span>     			string lastudwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x =&gt; x.CustomField.SystemName == &quot;AccessUser_LastUpdatedWarehouse&quot;)?.Value?.ToString();
<span class='line-number'> 42</span>     			if(!string.IsNullOrEmpty(lastudwarehouse)){
<span class='line-number'> 43</span>     				custwarehouse=lastudwarehouse;
<span class='line-number'> 44</span>     			}
<span class='line-number'> 45</span>     		}
<span class='line-number'> 46</span>     		else{
<span class='line-number'> 47</span>     			string warehousecookie = Dynamicweb.Context.Current.Request.GetCookie(&quot;SelectedWarehouse&quot;)?.Value;
<span class='line-number'> 48</span>     			if(!string.IsNullOrEmpty(warehousecookie)){
<span class='line-number'> 49</span>     				custwarehouse=warehousecookie;
<span class='line-number'> 50</span>     			}
<span class='line-number'> 51</span>     		}
<span class='line-number'> 52</span>     		string currwarehousename = stockloc.FirstOrDefault(x=&gt;x.GetName(langId)==custwarehouse)?.GetDescription(langId);
<span class='line-number'> 53</span>     
<span class='line-number'> 54</span>     		if (stockuitcount &gt; 0)
<span class='line-number'> 55</span>     		{
<span class='line-number'> 56</span>     			stockduration=stockunits.FirstOrDefault().StockStatus;
<span class='line-number'> 57</span>     			if(stockunits.FirstOrDefault(x =&gt; x.StockLocationName == custwarehouse) != null){
<span class='line-number'> 58</span>     				cuswarehousestock = stockunits.FirstOrDefault(x =&gt; x.StockLocationName == custwarehouse).StockLevel;
<span class='line-number'> 59</span>     			}
<span class='line-number'> 60</span>     		}
<span class='line-number'> 61</span>     		double totalstock = product.StockLevel ?? 0;
<span class='line-number'> 62</span>     
<span class='line-number'> 63</span>     		double qtyInt = !string.IsNullOrEmpty(qty) ? Convert.ToDouble(qty) : 0;
<span class='line-number'> 64</span>     		double cartqty = 0;
<span class='line-number'> 65</span>     		if (Dynamicweb.Ecommerce.Common.Context.Cart != null)
<span class='line-number'> 66</span>     		{
<span class='line-number'> 67</span>     			Order dworder = Dynamicweb.Ecommerce.Common.Context.Cart;
<span class='line-number'> 68</span>     			foreach(OrderLine orderLine in dworder.OrderLines.Where(x=&gt;x.ProductId==productId &amp;&amp; x.ProductVariantId == variantId))
<span class='line-number'> 69</span>     			{
<span class='line-number'> 70</span>     				cartqty = cartqty + orderLine.Quantity;
<span class='line-number'> 71</span>     			}
<span class='line-number'> 72</span>     		}
<span class='line-number'> 73</span>     		double totalqty = qtyInt + cartqty;
<span class='line-number'> 74</span>     
<span class='line-number'> 75</span>     		if (totalstock == 0)
<span class='line-number'> 76</span>     		{
<span class='line-number'> 77</span>     			stockText.StockStatus= &quot;Out of stock &lt;span class=\&quot;cus-faplist__availdur\&quot;&gt;&quot; + stockduration + &quot;&lt;/span&gt;&quot;;
<span class='line-number'> 78</span>     			stockText.StockStatus = stockText.StockStatus + &quot;&lt;span class=\&quot;cus-faplist__availtooltiptxt\&quot;&gt;&quot; + totalqty + &quot; will be available in about &quot; + stockduration+&quot;&lt;/span&gt;&quot;; 
<span class='line-number'> 79</span>     		}
<span class='line-number'> 80</span>     		else if (totalqty &lt;= cuswarehousestock)
<span class='line-number'> 81</span>     		{
<span class='line-number'> 82</span>     			stockText.StockStatus= &quot;In stock &lt;svg class=\&quot;status-check\&quot; viewBox=\&quot;0 0 24 24\&quot; aria-hidden=\&quot;true\&quot;&gt;&lt;path d=\&quot;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\&quot;&gt;&lt;/path&gt;&lt;circle cx=\&quot;12\&quot; cy=\&quot;9\&quot; r=\&quot;2.5\&quot;&gt;&lt;/circle&gt;&lt;/svg&gt;&quot;;
<span class='line-number'> 83</span>     			stockText.StockStatus = stockText.StockStatus +&quot;&lt;span class=\&quot;cus-faplist__availtooltiptxt\&quot;&gt;&quot; + &quot;In stock in &quot; + currwarehousename +&quot;&lt;/span&gt;&quot;; 
<span class='line-number'> 84</span>     		}
<span class='line-number'> 85</span>     		else if (totalqty &gt; cuswarehousestock &amp;&amp; totalqty &lt;= totalstock)
<span class='line-number'> 86</span>     		{
<span class='line-number'> 87</span>     			double pendingstock=totalqty-cuswarehousestock;
<span class='line-number'> 88</span>     			stockText.StockStatus= &quot;In stock&quot;;
<span class='line-number'> 89</span>     			stockText.StockStatus = stockText.StockStatus +&quot;&lt;span class=\&quot;cus-faplist__availtooltiptxt\&quot;&gt;&quot; + cuswarehousestock + &quot; are in stock in &quot; + currwarehousename + &quot;, and the additional &quot;+ pendingstock + &quot; is available in other FORCE America warehouse(s) in the US.&quot;+&quot;&lt;/span&gt;&quot;;
<span class='line-number'> 90</span>     		}
<span class='line-number'> 91</span>     		else if(totalqty &gt; totalstock)
<span class='line-number'> 92</span>     		{
<span class='line-number'> 93</span>     			double pendingstock=totalstock-cuswarehousestock;
<span class='line-number'> 94</span>     			double notinstock=totalqty-totalstock;
<span class='line-number'> 95</span>     			stockText.StockStatus= &quot;Out of stock &lt;span class=\&quot;cus-faplist__availdur\&quot;&gt;&quot; + stockduration + &quot;&lt;/span&gt;&quot;;
<span class='line-number'> 96</span>     			stockText.StockStatus = stockText.StockStatus +&quot;&lt;span class=\&quot;cus-faplist__availtooltiptxt\&quot;&gt;&quot; + cuswarehousestock + &quot; are in stock in &quot; + currwarehousename + &quot;, &quot;+ pendingstock + &quot; are available in other FORCE America warehouse(s) in the US, the &quot; + notinstock + &quot; will be available in about &quot; + stockduration +&quot;&lt;/span&gt;&quot;;
<span class='line-number'> 97</span>     		}
<span class='line-number'> 98</span>     
<span class='line-number'> 99</span>         }
<span class='line-number'>100</span>         var ret = Newtonsoft.Json.JsonConvert.SerializeObject(stockText);
<span class='line-number'>101</span>     }
<span class='line-number'>102</span>     @ret
</div>
</pre>
