Error executing template "/Designs/JVD_generated/Paragraph/JVD_Backorders.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at JVD.Tools.CreditSpace.GetCreditSpace() in C:\vso\JVD\BluedeskBaseSolution\JVD\JVD.Tools\CreditSpace.cs:line 20
   at CompiledRazorTemplates.Dynamic.RazorEngine_8eef48f5d6284adb807391a92e3f0bfc.Execute() in D:\dynamicweb.net\Solutions\JVDgroup\Productie\files\Templates\Designs\JVD_generated\Paragraph\JVD_Backorders.cshtml:line 15
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   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.Ecommerce.Orders; 3 @using Dynamicweb.Ecommerce.Products; 4 @using Dynamicweb.Ecommerce.Prices; 5 @using JVD.Tools; 6 @using JVD.Tools.Models; 7 8 @{ 9 string activeSortBy = Dynamicweb.Context.Current.Request.QueryString.Get("sortByField"); 10 string activeSortDirection = Dynamicweb.Context.Current.Request.QueryString.Get("sortDirection"); 11 12 List<Backorder> openBackorders = Backorders.GetAvailableBackorders(activeSortBy, activeSortDirection); 13 List<Backorder> closedBackorders = Backorders.GetClosedBackorders(activeSortBy, activeSortDirection); 14 15 CreditSpaceModel creditSpace = CreditSpace.GetCreditSpace(); 16 17 double backordersAvailable = creditSpace.BackordersAvailable; 18 double backordersNotReady = creditSpace.BackordersNotReady; 19 } 20 21 <style> 22 @@media screen and (min-width: 768px) { 23 .dashboard-table__col--sm { 24 flex-basis: 75px !important; 25 } 26 } 27 </style> 28 29 <div class="backorders"> 30 31 <div class="backorders__header"> 32 <div> 33 <h2 class="backorders__title">@Translate("Backorders.OpenBackorders.Title", "Available backorders")</h2> 34 <p class="backorders__total">@Translate("CreditSpace.AvailableForShipment", "Available for shipment") <span>@DoubleToPrice(backordersAvailable).PriceWithoutVATFormatted</span></p> 35 <p class="backorders__description">@Translate("Backorders.OpenBackorders.Description", "Duis id odio eu felis euismod aliquam vel vitae leo. In at ante lectus. Quisque ut rutrum nisl, sed varius turpis. Sed sit amet pulvinar ipsum. Etiam odio nunc, bibendum vel sodales eu, vehicula sed urna. Donec dictum faucibus mattis. Sed eros arcu, ultrices ut lectus ut, ultricies aliquet diam.")</p> 36 </div> 37 </div> 38 39 <div class="backorders__table"> 40 41 @if(openBackorders.Any()) 42 { 43 <div class="dashboard-table"> 44 <div class="dashboard-table__head dashboard-table__head--accent"> 45 <div class="dashboard-table__row"> 46 <div class="dashboard-table__col"> 47 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineProductNumber", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 48 <p>@Translate("Backorders.ArticleNr", "Article nr")</p> 49 @getSortingIcon("OrderLineProductNumber", activeSortBy, activeSortDirection) 50 </a> 51 </div> 52 <div class="dashboard-table__col dashboard-table__col--md"> 53 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineProductName", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 54 <p>@Translate("Backorders.Description", "Description")</p> 55 @getSortingIcon("OrderLineProductName", activeSortBy, activeSortDirection) 56 </a> 57 </div> 58 <div class="dashboard-table__col dashboard-table__col--sm"> 59 <p>@Translate("Backorders.Unit", "Unit")</p> 60 </div> 61 <div class="dashboard-table__col dashboard-table__col--sm"> 62 <p>@Translate("Backorders.Price", "Price")</p> 63 </div> 64 <div class="dashboard-table__col dashboard-table__col--sm"> 65 <p>@Translate("Backorders.Amount", "Amount")</p> 66 </div> 67 <div class="dashboard-table__col dashboard-table__col--sm"> 68 <p>@Translate("Backorders.Total", "Total")</p> 69 </div> 70 <div class="dashboard-table__col dashboard-table__col--md"> 71 <p>@Translate("Backorders.Status", "Status")</p> 72 </div> 73 <div class="dashboard-table__col"> 74 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderIntegrationOrderID", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 75 <p>@Translate("Backorders.OrderNr", "Order nr")</p> 76 @getSortingIcon("OrderIntegrationOrderID", activeSortBy, activeSortDirection) 77 </a> 78 </div> 79 <div class="dashboard-table__col"> 80 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineDate", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 81 <p>@Translate("Backorders.Date", "Date")</p> 82 @getSortingIcon("OrderLineDate", activeSortBy, activeSortDirection) 83 </a> 84 </div> 85 </div> 86 </div> 87 88 <div class="dashboard-table__body"> 89 @foreach(var i in openBackorders) 90 { 91 string articleNumber = i.OrderLineProductNumber; 92 string articleDescription = i.OrderLineProductName; 93 int articleUnit = i.OrderLineProductUnit; 94 double articleAmount = i.OrderLineQuantity; 95 string articleOrderNr = i.OrderIntegrationOrderID; 96 DateTime articleOrderDateValue = i.OrderLineDate; 97 string articleOrderDate = articleOrderDateValue.ToString("dd-MM-yyyy"); 98 var articleStatusText = i.visibleStatusText; 99 var articleStatusDescription = i.visibleStatusDescription; 100 var articleDeliveryStatus = i.visibleDeliveryStatus; 101 string articleUnitPrice = i.OrderLineUnitPriceWithoutVatInfo.PriceWithoutVATFormatted; 102 string articlePriceTotal = i.OrderLinePriceWithoutVatInfo.PriceWithoutVATFormatted; 103 var articleComment = i.OrderLineComment; 104 105 106 107 var productService = new ProductService(); 108 Product p = productService.GetProductByNumber(articleNumber, true); 109 string stockType = ""; 110 if(p != null) 111 { 112 stockType = productService.GetProductFieldValue(p, "ProductStockType").ToString(); 113 } 114 115 <div class="dashboard-table__row"> 116 <div class="dashboard-table__col" data-title="@Translate("Backorders.ArticleNr", "Article nr")"> 117 <p> 118 @articleNumber 119 @if (stockType == "Non-Stock") 120 { 121 <span data-tippy-content='@Translate("Backorders.SpecialOrderToolTip", "This Product is a Special Order. This order cannot be cancelled.")'> 122 <i class="fal fa-info-circle"></i> 123 </span> 124 } 125 </p> 126 </div> 127 <div class="dashboard-table__col dashboard-table__col--md" data-title="@Translate("Backorders.Description", "Description")"> 128 <p>@articleDescription</p> 129 </div> 130 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Unit", "Unit")"> 131 <p>@articleUnit</p> 132 </div> 133 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Price", "Price")"> 134 <p>@articleUnitPrice</p> 135 </div> 136 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Amount", "Amount")"> 137 <p>@articleAmount</p> 138 </div> 139 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Total", "Total")"> 140 <p>@articlePriceTotal</p> 141 </div> 142 <div class="dashboard-table__col dashboard-table__col--md" data-title="@Translate("Backorders.Status", "Status")"> 143 <span> 144 @if (!string.IsNullOrWhiteSpace(articleDeliveryStatus.value)) 145 { 146 <span> 147 @string.Format(Translate(articleStatusText.key, articleStatusText.value), 148 string.Format(Translate(articleDeliveryStatus.key, articleDeliveryStatus.value), articleDeliveryStatus.date) 149 ) 150 </span> 151 } 152 else 153 { 154 <span> 155 @Translate(articleStatusText.key, articleStatusText.value); 156 </span> 157 } 158 159 <i class="fal fa-info-circle" data-tippy-content="@Translate(articleStatusDescription.key, articleStatusDescription.value)"> 160 </i> 161 </span> 162 </div> 163 <div class="dashboard-table__col" data-title="@Translate("Backorders.OrderNr", "Order nr")"> 164 <p>@articleOrderNr</p> 165 </div> 166 <div class="dashboard-table__col" data-title="@Translate("Backorders.Date", "Date")"> 167 <p>@articleOrderDate</p> 168 </div> 169 @if (!string.IsNullOrWhiteSpace(articleComment)) 170 { 171 <div class="dashboard-table__col dashboard-table__col--comment"> 172 <p><strong>@Translate("Backorders.Comment", "Comment")</strong></p> 173 <p>@(articleComment.Length > 255 ? articleComment.Substring(0, 255) : articleComment)</p> 174 </div> 175 } 176 </div> 177 } 178 </div> 179 </div> 180 } 181 else 182 { 183 <p>@Translate("Backorders.OpenBackorders.NotFound", "No open backorder found")</p> 184 } 185 </div> 186 187 <div class="backorders__header"> 188 <div> 189 <h2>@Translate("Backorders.ClosedBackorders.Title", "Closed backorders")</h2> 190 <p class="backorders__total">@Translate("CreditSpace.NotReadyForShipment", "Not ready for shipment") <span>@DoubleToPrice(backordersNotReady).PriceWithoutVATFormatted</span></p> 191 </div> 192 </div> 193 194 <div class="backorders__table"> 195 @if(closedBackorders.Any()) 196 { 197 <div class="dashboard-table"> 198 <div class="dashboard-table__head dashboard-table__head--accent"> 199 <div class="dashboard-table__row"> 200 <div class="dashboard-table__col"> 201 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineProductNumber", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 202 <p>@Translate("Backorders.ArticleNr", "Article nr")</p> 203 @getSortingIcon("OrderLineProductNumber", activeSortBy, activeSortDirection) 204 </a> 205 </div> 206 <div class="dashboard-table__col dashboard-table__col--md"> 207 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineProductName", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 208 <p>@Translate("Backorders.Description", "Description")</p> 209 @getSortingIcon("OrderLineProductName", activeSortBy, activeSortDirection) 210 </a> 211 </div> 212 <div class="dashboard-table__col dashboard-table__col--sm"> 213 <p>@Translate("Backorders.Unit", "Unit")</p> 214 </div> 215 <div class="dashboard-table__col dashboard-table__col--sm"> 216 <p>@Translate("Backorders.Price", "Price")</p> 217 </div> 218 <div class="dashboard-table__col dashboard-table__col--sm"> 219 <p>@Translate("Backorders.Amount", "Amount")</p> 220 </div> 221 <div class="dashboard-table__col dashboard-table__col--sm"> 222 <p>@Translate("Backorders.Total", "Total")</p> 223 </div> 224 <div class="dashboard-table__col dashboard-table__col--md"> 225 <p>@Translate("Backorders.Status", "Status")</p> 226 </div> 227 <div class="dashboard-table__col"> 228 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderIntegrationOrderID", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 229 <p>@Translate("Backorders.OrderNr", "Order nr")</p> 230 @getSortingIcon("OrderIntegrationOrderID", activeSortBy, activeSortDirection) 231 </a> 232 </div> 233 <div class="dashboard-table__col"> 234 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("OrderLineDate", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 235 <p>@Translate("Backorders.Date", "Date")</p> 236 @getSortingIcon("OrderLineDate", activeSortBy, activeSortDirection) 237 </a> 238 </div> 239 </div> 240 </div> 241 242 <div class="dashboard-table__body"> 243 @foreach(var i in closedBackorders) 244 { 245 string articleNumber = i.OrderLineProductNumber; 246 string articleDescription = i.OrderLineProductName; 247 var productObj = Dynamicweb.Ecommerce.Services.Products.GetProductById(i.OrderLineProductId, i.OrderLineProductVariantId, Pageview.Area.EcomLanguageId); 248 int articleUnit = i.OrderLineProductUnit; 249 double articleAmount = i.OrderLineQuantity; 250 string articleOrderNr = i.OrderIntegrationOrderID; 251 DateTime articleOrderDateValue = i.OrderLineDate; 252 string articleOrderDate = articleOrderDateValue.ToString("dd-MM-yyyy"); 253 string expectedDeliveryDate = i.ExpectedDelivery; 254 var articleStatusText = i.visibleStatusText; 255 var articleStatusDescription = i.visibleStatusDescription; 256 var articleDeliveryStatus = i.visibleDeliveryStatus; 257 string articleUnitPrice = i.OrderLineUnitPriceWithoutVatInfo.PriceWithoutVATFormatted; 258 string articlePriceTotal = i.OrderLinePriceWithoutVatInfo.PriceWithoutVATFormatted; 259 var articleComment = i.OrderLineComment; 260 261 var productService = new ProductService(); 262 Product p = productService.GetProductByNumber(articleNumber, true); 263 string stockType = ""; 264 if(p != null) 265 { 266 stockType = productService.GetProductFieldValue(p, "ProductStockType").ToString(); 267 } 268 269 <div class="dashboard-table__row"> 270 <div class="dashboard-table__col" data-title="@Translate("Backorders.ArticleNr", "Article nr")"> 271 <p> 272 @articleNumber 273 @if (stockType == "Non-Stock") 274 { 275 <span data-tippy-content='@Translate("Backorders.SpecialOrderToolTip", "This Product is a Special Order. This order cannot be cancelled.")'> 276 <i class="fal fa-info-circle"></i> 277 </span> 278 } 279 </p> 280 </div> 281 <div class="dashboard-table__col dashboard-table__col--md" data-title="@Translate("Backorders.Description", "Description")"> 282 <p>@articleDescription</p> 283 </div> 284 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Unit", "Unit")"> 285 <p>@articleUnit</p> 286 </div> 287 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Unit", "Unit")"> 288 <p>@articleUnitPrice</p> 289 </div> 290 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Amount", "Amount")"> 291 <p>@articleAmount</p> 292 </div> 293 <div class="dashboard-table__col dashboard-table__col--sm" data-title="@Translate("Backorders.Unit", "Unit")"> 294 <p>@articlePriceTotal</p> 295 </div> 296 <div class="dashboard-table__col dashboard-table__col--md" data-title="@Translate("Backorders.Status", "Status")"> 297 <span> 298 @if (!string.IsNullOrWhiteSpace(articleDeliveryStatus.value)) 299 { 300 <span> 301 @string.Format(Translate(articleStatusText.key, articleStatusText.value), 302 string.Format(Translate(articleDeliveryStatus.key, articleDeliveryStatus.value), articleDeliveryStatus.date) 303 ) 304 </span> 305 } 306 else 307 { 308 <span> 309 @Translate(articleStatusText.key, articleStatusText.value); 310 </span> 311 } 312 313 <i class="fal fa-info-circle" data-tippy-content="@Translate(articleStatusDescription.key, articleStatusDescription.value)"> 314 </i> 315 </span> 316 </div> 317 <div class="dashboard-table__col" data-title="@Translate("Backorders.OrderNr", "Order nr")"> 318 <p>@articleOrderNr</p> 319 </div> 320 <div class="dashboard-table__col" data-title="@Translate("Backorders.Date", "Date")"> 321 <p>@articleOrderDate</p> 322 </div> 323 @if (!string.IsNullOrWhiteSpace(articleComment)) 324 { 325 <div class="dashboard-table__col dashboard-table__col--comment"> 326 <p><strong>@Translate("Backorders.Comment", "Comment")</strong></p> 327 <p>@(articleComment.Length > 255 ? articleComment.Substring(0, 255) : articleComment)</p> 328 </div> 329 } 330 </div> 331 } 332 </div> 333 </div> 334 } 335 else 336 { 337 <p>@Translate("Backorders.ClosedBackorders.NotFound", "No closed backorder found")</p> 338 } 339 </div> 340 341 </div> 342 343 344 @functions { 345 string getSortingIcon(string sortBy, string activeSortBy, string activeSortDirection) 346 { 347 // return $"{@sortBy} | {activeSortBy} | {sortBy == activeSortBy}"; 348 if(sortBy != activeSortBy) 349 { 350 return $"<i class=\"fas fa-sort dashboard-table__sort-icon \"></i>"; 351 } 352 if(!string.IsNullOrWhiteSpace(activeSortDirection)) { 353 string sortIcon = activeSortDirection == "ASC" ? "fa-sort-up" : "fa-sort-down"; 354 return $"<i class=\"fas {sortIcon} dashboard-table__sort-icon dashboard-table__sort-icon--active \"></i>"; 355 } else { 356 return $"<i class=\"fas fa-sort-down dashboard-table__sort-icon \"></i>"; 357 } 358 } 359 360 string getSortUrlParams(string sortBy, string activeSortBy, string activeSortDirection) 361 { 362 string newSortDirection = sortBy == activeSortBy && activeSortDirection == "DESC" ? "&sortDirection=ASC" : "&sortDirection=DESC"; 363 if(sortBy == activeSortBy && activeSortDirection == "ASC") { 364 return ""; 365 } 366 return $"&sortByField={sortBy}{newSortDirection}"; 367 } 368 369 private PriceCalculated DoubleToPrice(double value) 370 { 371 var currency = Dynamicweb.Ecommerce.Services.Currencies.GetCurrency(Pageview.User.Currency) ?? Dynamicweb.Ecommerce.Common.Context.Currency; 372 PriceRaw raw = new PriceRaw(value, currency); 373 PriceCalculated calculated = PriceCalculated.Create(currency, Dynamicweb.Ecommerce.Common.Context.Country, raw); 374 calculated.Calculate(); 375 376 return calculated; 377 } 378 } 379
Nach Oben