<pre class='dw-error'>Error executing template "/Designs/Swift/Paragraph/Custom_GetAvailableStock.cshtml"
System.Exception: Product id is required to find a product.
   at Dynamicweb.Core.Ensure.That[TException](Boolean condition, String message)
   at Dynamicweb.Core.Ensure.That(Boolean condition, String message)
   at Dynamicweb.Core.Ensure.NotNullOrEmpty(String value, 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_a72a4228dd104a27b58a286b7563b62b.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.Ecommerce.ProductCatalog
<span class='line-number'>  3</span>     @using Dynamicweb.Ecommerce.Orders
<span class='line-number'>  4</span>     
<span class='line-number'>  5</span>     @functions{
<span class='line-number'>  6</span>         public class AvailStock
<span class='line-number'>  7</span>         {
<span class='line-number'>  8</span>             public double MaxQty { get; set; }
<span class='line-number'>  9</span>         }
<span class='line-number'> 10</span>     }
<span class='line-number'> 11</span>     
<span class='line-number'> 12</span>     @{
<span class='line-number'> 13</span>         string productId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;ProductId&quot;);
<span class='line-number'> 14</span>         string variantId = Dynamicweb.Context.Current.Request.QueryString.Get(&quot;VariantId&quot;);
<span class='line-number'> 15</span>         AvailStock availStock = new AvailStock();
<span class='line-number'> 16</span>     
<span class='line-number'> 17</span>         ProductViewModelSettings productSetting = new ProductViewModelSettings
<span class='line-number'> 18</span>         {
<span class='line-number'> 19</span>             LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID,
<span class='line-number'> 20</span>             CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code,
<span class='line-number'> 21</span>             CountryCode = Dynamicweb.Ecommerce.Common.Context.Country.Code2,
<span class='line-number'> 22</span>             ShopId = Pageview.Area.EcomShopId
<span class='line-number'> 23</span>         };
<span class='line-number'> 24</span>         ProductViewModel product = ViewModelFactory.CreateView(productSetting,productId,variantId);
<span class='line-number'> 25</span>         if(product != null){
<span class='line-number'> 26</span>             double totalstock = 0;
<span class='line-number'> 27</span>             if (product.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock &amp;&amp; !product.NeverOutOfstock){
<span class='line-number'> 28</span>                 totalstock = product.StockLevel ?? 0;
<span class='line-number'> 29</span>             }
<span class='line-number'> 30</span>             if(product.NeverOutOfstock){
<span class='line-number'> 31</span>                 totalstock= 999999;
<span class='line-number'> 32</span>             }
<span class='line-number'> 33</span>             double cartqty = 0;
<span class='line-number'> 34</span>     		if (Dynamicweb.Ecommerce.Common.Context.Cart != null)
<span class='line-number'> 35</span>     		{
<span class='line-number'> 36</span>     			Order dworder = Dynamicweb.Ecommerce.Common.Context.Cart;
<span class='line-number'> 37</span>     			foreach(OrderLine orderLine in dworder.OrderLines.Where(x=&gt;x.ProductId==productId))
<span class='line-number'> 38</span>     			{
<span class='line-number'> 39</span>     				cartqty = cartqty + orderLine.Quantity;
<span class='line-number'> 40</span>     			}
<span class='line-number'> 41</span>     		}
<span class='line-number'> 42</span>             totalstock=totalstock-cartqty;
<span class='line-number'> 43</span>             if(totalstock &gt; 0){
<span class='line-number'> 44</span>                 availStock.MaxQty=totalstock;
<span class='line-number'> 45</span>             }
<span class='line-number'> 46</span>             else{
<span class='line-number'> 47</span>                 availStock.MaxQty=0;
<span class='line-number'> 48</span>             }
<span class='line-number'> 49</span>         }
<span class='line-number'> 50</span>         
<span class='line-number'> 51</span>         var ret = Newtonsoft.Json.JsonConvert.SerializeObject(availStock);
<span class='line-number'> 52</span>     }
<span class='line-number'> 53</span>     @ret
</div>
</pre>
