<pre class='dw-error'>Error executing template "/Designs/Swift-v2/Paragraph/Custom_FAStockUnitFeed.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_0d9cf3a21fe046dd85986a64192fe010.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.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.&lt;&gt;c__DisplayClass16_0.&lt;RunCompile&gt;b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String templateSource, 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>     
<span class='line-number'>  7</span>     @functions{
<span class='line-number'>  8</span>         public class StockText{
<span class='line-number'>  9</span>             public string currwarehousestock { get; set; }
<span class='line-number'> 10</span>             public string currtotstock { get; set; }
<span class='line-number'> 11</span>             public string currnotinstock { get; set; }
<span class='line-number'> 12</span>             public bool hidewarehouse { get; set; }
<span class='line-number'> 13</span>             public bool hidestock { get; set; }
<span class='line-number'> 14</span>             public bool hidenotinstock { get; set; }
<span class='line-number'> 15</span>     		public string currWherehouse { get; set; }
<span class='line-number'> 16</span>         }
<span class='line-number'> 17</span>     }
<span class='line-number'> 18</span>     @{
<span class='line-number'> 19</span>         string productId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;ProductId&quot;);
<span class='line-number'> 20</span>         string variantId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;VariantId&quot;);
<span class='line-number'> 21</span>         string qty = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;Qty&quot;);
<span class='line-number'> 22</span>         StockText stockText=new StockText();
<span class='line-number'> 23</span>     
<span class='line-number'> 24</span>         ProductViewModelSettings productSetting = new ProductViewModelSettings
<span class='line-number'> 25</span>         {
<span class='line-number'> 26</span>             LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID,
<span class='line-number'> 27</span>             CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code,
<span class='line-number'> 28</span>             CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2,
<span class='line-number'> 29</span>             ShopId = Pageview.Area.EcomShopId
<span class='line-number'> 30</span>         };
<span class='line-number'> 31</span>         ProductViewModel product = ViewModelFactory.CreateView(productSetting,productId,variantId);
<span class='line-number'> 32</span>         if(product != null){
<span class='line-number'> 33</span>             var stockunits = product.GetStockUnit();
<span class='line-number'> 34</span>     		int stockuitcount=stockunits.Count();
<span class='line-number'> 35</span>             
<span class='line-number'> 36</span>             string custwarehouse = &quot;&quot;;
<span class='line-number'> 37</span>     		string leadTime = product.ProductFields.FirstOrDefault(x =&gt; x.Key == &quot;Lead_Time&quot;).Value?.ToString();
<span class='line-number'> 38</span>     		double cuswarehousestock = 0;
<span class='line-number'> 39</span>     		string imgname = &quot;&quot;;
<span class='line-number'> 40</span>     		if(Pageview.User != null)
<span class='line-number'> 41</span>     		{
<span class='line-number'> 42</span>     			custwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x =&gt; x.CustomField.SystemName == &quot;AccessUser_D365Warehouse&quot;)?.Value?.ToString();
<span class='line-number'> 43</span>     			string lastudwarehouse = Pageview.User.CustomFieldValues.FirstOrDefault(x =&gt; x.CustomField.SystemName == &quot;AccessUser_LastUpdatedWarehouse&quot;)?.Value?.ToString();
<span class='line-number'> 44</span>     			if(!string.IsNullOrEmpty(lastudwarehouse)){
<span class='line-number'> 45</span>     				custwarehouse=lastudwarehouse;
<span class='line-number'> 46</span>     			}
<span class='line-number'> 47</span>     		}
<span class='line-number'> 48</span>     
<span class='line-number'> 49</span>     if(String.IsNullOrEmpty(custwarehouse)){
<span class='line-number'> 50</span>     	custwarehouse=Dynamicweb.Context.Current.Request.GetCookie(&quot;SelectedWarehouse&quot;)?.Value;
<span class='line-number'> 51</span>     }
<span class='line-number'> 52</span>     
<span class='line-number'> 53</span>     		if (stockuitcount &gt; 0)
<span class='line-number'> 54</span>     		{
<span class='line-number'> 55</span>     			if(stockunits.FirstOrDefault(x =&gt; x.StockLocationName == custwarehouse) != null){
<span class='line-number'> 56</span>     				cuswarehousestock = stockunits.FirstOrDefault(x =&gt; x.StockLocationName == custwarehouse).StockLevel;
<span class='line-number'> 57</span>     			}
<span class='line-number'> 58</span>     		}
<span class='line-number'> 59</span>     
<span class='line-number'> 60</span>     
<span class='line-number'> 61</span>     		stockText.currWherehouse=custwarehouse;
<span class='line-number'> 62</span>     		double totalstock = product.StockLevel ?? 0;
<span class='line-number'> 63</span>     
<span class='line-number'> 64</span>     		double qtyInt = !string.IsNullOrEmpty(qty) ? Convert.ToDouble(qty) : 0;
<span class='line-number'> 65</span>     		double cartqty = 0;
<span class='line-number'> 66</span>     		if (Dynamicweb.Ecommerce.Common.Context.Cart != null)
<span class='line-number'> 67</span>     		{
<span class='line-number'> 68</span>     			Order dworder = Dynamicweb.Ecommerce.Common.Context.Cart;
<span class='line-number'> 69</span>     			foreach(OrderLine orderLine in dworder.OrderLines.Where(x=&gt;x.ProductId==productId &amp;&amp; x.ProductVariantId == variantId))
<span class='line-number'> 70</span>     			{
<span class='line-number'> 71</span>     				cartqty = cartqty + orderLine.Quantity;
<span class='line-number'> 72</span>     			}
<span class='line-number'> 73</span>     		}
<span class='line-number'> 74</span>     		double totalqty = qtyInt + cartqty;
<span class='line-number'> 75</span>     
<span class='line-number'> 76</span>     		if (totalstock == 0)
<span class='line-number'> 77</span>     		{
<span class='line-number'> 78</span>     			stockText.hidewarehouse = true;
<span class='line-number'> 79</span>     			stockText.hidestock = true;
<span class='line-number'> 80</span>     			stockText.hidenotinstock = false;
<span class='line-number'> 81</span>     			stockText.currnotinstock=totalqty.ToString();
<span class='line-number'> 82</span>     		}
<span class='line-number'> 83</span>     		else if (totalqty &lt;= cuswarehousestock)
<span class='line-number'> 84</span>     		{
<span class='line-number'> 85</span>     			stockText.hidewarehouse = false;
<span class='line-number'> 86</span>     			stockText.hidestock = true;
<span class='line-number'> 87</span>     			stockText.hidenotinstock = true;
<span class='line-number'> 88</span>     			stockText.currwarehousestock=&quot;&quot;;
<span class='line-number'> 89</span>     		}
<span class='line-number'> 90</span>     		else if (totalqty &gt; cuswarehousestock &amp;&amp; totalqty &lt;= totalstock)
<span class='line-number'> 91</span>     		{
<span class='line-number'> 92</span>     			double pendingstock=totalqty-cuswarehousestock;
<span class='line-number'> 93</span>     			stockText.currwarehousestock=cuswarehousestock.ToString();
<span class='line-number'> 94</span>     			stockText.currtotstock=pendingstock.ToString();
<span class='line-number'> 95</span>     			stockText.hidewarehouse = false;
<span class='line-number'> 96</span>     			stockText.hidestock = false;
<span class='line-number'> 97</span>     			stockText.hidenotinstock = true;
<span class='line-number'> 98</span>     		}
<span class='line-number'> 99</span>     		else if(totalqty &gt; totalstock)
<span class='line-number'>100</span>     		{
<span class='line-number'>101</span>     			double pendingstock=totalstock-cuswarehousestock;
<span class='line-number'>102</span>     			double notinstock=totalqty-totalstock;
<span class='line-number'>103</span>     			stockText.currwarehousestock=cuswarehousestock.ToString();
<span class='line-number'>104</span>     			stockText.currtotstock=pendingstock.ToString();
<span class='line-number'>105</span>     			stockText.currnotinstock = notinstock.ToString();
<span class='line-number'>106</span>     			stockText.hidewarehouse = false;
<span class='line-number'>107</span>     			stockText.hidestock = false;
<span class='line-number'>108</span>     			stockText.hidenotinstock = false;
<span class='line-number'>109</span>     		}
<span class='line-number'>110</span>     
<span class='line-number'>111</span>         }
<span class='line-number'>112</span>         var ret = Newtonsoft.Json.JsonConvert.SerializeObject(stockText);
<span class='line-number'>113</span>     }
<span class='line-number'>114</span>     @ret
</div>
</pre>
