Error executing template "/Designs/JVD_generated/Paragraph/JVD_Invoices.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at JVD.Tools.Invoices.GetOutstandingBalance() in C:\vso\JVD\BluedeskBaseSolution\JVD\JVD.Tools\Invoices.cs:line 95
   at CompiledRazorTemplates.Dynamic.RazorEngine_a25ec98cc31445babfd56ca60bdfb98f.Execute() in D:\dynamicweb.net\Solutions\JVDgroup\Productie\files\Templates\Designs\JVD_generated\Paragraph\JVD_Invoices.cshtml:line 17
   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; 3 @using Dynamicweb.Ecommerce.Prices; 4 @using Dynamicweb.Ecommerce.International; 5 @using Dynamicweb.Ecommerce.Common; 6 @using Dynamicweb.Security.UserManagement; 7 @using JVD.Tools; 8 @using JVD.Tools.Models; 9 10 @{ 11 string activeSortBy = Dynamicweb.Context.Current.Request.QueryString.Get("sortByField"); 12 string activeSortDirection = Dynamicweb.Context.Current.Request.QueryString.Get("sortDirection"); 13 string invoiceSearchParam = Dynamicweb.Context.Current.Request.QueryString.Get("InvoiceSearchParam"); 14 15 List<Invoice> openInvoies = Invoices.GetOpenInvoices(activeSortBy, activeSortDirection, invoiceSearchParam); 16 List<Invoice> closedInvoies = Invoices.GetClosedInvoices(invoiceSearchParam); 17 PriceCalculated outstandingBalance = Invoices.GetOutstandingBalance(); 18 } 19 20 <div class="invoices"> 21 22 <div class="invoices__header"> 23 <h2 class="invoices__title">@Translate("Invoices.Title", "Invoices")</h2> 24 <section class="dashboard-table__search"> 25 <form id="searchForm" class="default-contact-form" method="get"> 26 <input type="hidden" name="ID" value="@Pageview.ID"> 27 28 <section class="form__item"> 29 <div class="input__group form-item__input form-group"> 30 <input name="InvoiceSearchParam" 31 type="search" 32 class="form__input input input--text" 33 id="InvoiceSearchParam" 34 placeholder="@Translate("InvoiceList.SearchPlaceholder", "Search in invoices")" 35 value="@invoiceSearchParam" /> 36 </div> 37 </section> 38 <button type="submit" class="dashboard-table__search-submit"> 39 <i class="fas fa-search"></i> 40 </button> 41 </form> 42 </section> 43 </div> 44 45 <div class="invoices__table"> 46 <h3>@string.Format(Translate("InvoiceList.OpenInvoices.Title", "Your Outstanding Balance: {0}"), outstandingBalance.PriceWithoutVATFormatted)</h3> 47 48 @if(openInvoies.Any()) 49 { 50 <div class="dashboard-table"> 51 <div class="dashboard-table__head dashboard-table__head--accent"> 52 <div class="dashboard-table__row"> 53 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Number", "Number")</p></div> 54 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Date", "Date")</p></div> 55 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Status", "Status")</p></div> 56 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Amount", "Amount")</p></div> 57 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Balance", "Balance")</p></div> 58 <div class="dashboard-table__col dashboard-table__col--sortable"> 59 <a href="Default.aspx?ID=@Pageview.ID@getSortUrlParams("dueDate", activeSortBy, activeSortDirection)" class="dashboard-table__column-filterlink"> 60 <p>@Translate("InvoiceList.ExpiresOn", "Expires on")</p> 61 @getSortingIcon("dueDate", activeSortBy, activeSortDirection) 62 </a> 63 </div> 64 <div class="dashboard-table__col dashboard-table__col--align-end"><p>@Translate("InvoiceList.Download", "Download")</p></div> 65 </div> 66 </div> 67 68 <div class="dashboard-table__body"> 69 @foreach(var i in openInvoies) 70 { 71 string invoiceNumber = i.salesInvoiceCode; 72 string accountNumber = User.GetCurrentFrontendUser().CustomerNumber; 73 DateTime invoiceDateValue = i.invoiceDate; 74 string invoiceDate = invoiceDateValue.ToString("dd-MM-yyyy"); 75 string invoiceStateCode = i.invoiceStatus; 76 string invoiceState = i.invoiceStatusDescription; 77 string invoiceAmountFormatted = i.amountInvoicePrice.PriceWithoutVATFormatted; 78 string invoiceBalanceFormatted = i.amountInvoiceBalancePrice.PriceWithoutVATFormatted; 79 DateTime invoiceExpireDateValue = i.dueDate; 80 string invoiceExpireDate = invoiceExpireDateValue.ToString("dd-MM-yyyy"); 81 string invoiceExpireDateClass = ""; 82 if (invoiceExpireDateValue.Date <= DateTime.Today) 83 { 84 invoiceExpireDateClass = "invoices--danger"; 85 } 86 else if (invoiceExpireDateValue.Date <= DateTime.Today.AddDays(3)) 87 { 88 invoiceExpireDateClass = "invoices--warning"; 89 } 90 string invoiceDownloadUrl = i.invoiceURL; 91 92 <div class="dashboard-table__row"> 93 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Number", "Number")"> 94 <p>@invoiceNumber</p> 95 </div> 96 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Date", "Date")"> 97 <p>@invoiceDate</p> 98 </div> 99 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Status", "Status")"> 100 <p>@Translate($"InvoiceList.State.{invoiceStateCode}", invoiceState)</p> 101 </div> 102 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Amount", "Amount")"> 103 <p>@invoiceAmountFormatted</p> 104 </div> 105 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Balance", "Balance")"> 106 <p>@invoiceBalanceFormatted</p> 107 </div> 108 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.ExpiresOn", "Expires on")"> 109 <p class="@invoiceExpireDateClass"> 110 @invoiceExpireDate 111 @if(!string.IsNullOrWhiteSpace(invoiceExpireDateClass)) 112 { 113 <i class="fas fa-exclamation-triangle"></i> 114 } 115 </p> 116 </div> 117 <div class="dashboard-table__col dashboard-table__col--clickable dashboard-table__col--align-end"> 118 @if(!string.IsNullOrWhiteSpace(invoiceNumber) && !string.IsNullOrWhiteSpace(accountNumber)) 119 { 120 <a target ="_blank" href="/api/InvoiceDownload/invoice/@accountNumber/@invoiceNumber/file" data-tippy-content="@Translate("InvoiceList.DownloadPdf", "Download PDF")" class="dashboard-table__order-link"> 121 <i class="fas fa-file-pdf"></i> 122 </a> 123 } 124 </div> 125 </div> 126 } 127 </div> 128 </div> 129 } 130 else 131 { 132 <p>@Translate("InvoiceList.OpenInvoices.NotFound", "No open invoices found")</p> 133 } 134 </div> 135 136 <div class="invoices__table"> 137 <h3>@Translate("InvoiceList.ClosedInvoices.Title", "Invoice history")</h3> 138 139 @if(closedInvoies.Any()) 140 { 141 <div class="dashboard-table"> 142 <div class="dashboard-table__head dashboard-table__head--accent"> 143 <div class="dashboard-table__row"> 144 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Number", "Number")</p></div> 145 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Date", "Date")</p></div> 146 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Status", "Status")</p></div> 147 <div class="dashboard-table__col"><p>@Translate("InvoiceList.Amount", "Amount")</p></div> 148 <div class="dashboard-table__col"><p></p></div> 149 <div class="dashboard-table__col"><p></p></div> 150 <div class="dashboard-table__col dashboard-table__col--align-end"><p>@Translate("InvoiceList.Download", "Download")</p></div> 151 </div> 152 </div> 153 154 <div class="dashboard-table__body"> 155 @foreach(var i in closedInvoies) 156 { 157 string invoiceNumber = i.salesInvoiceCode; 158 string accountNumber = User.GetCurrentFrontendUser().CustomerNumber; 159 DateTime invoiceDateValue = i.invoiceDate; 160 string invoiceDate = invoiceDateValue.ToString("dd-MM-yyyy"); 161 string invoiceStateCode = i.invoiceStatus; 162 string invoiceState = i.invoiceStatusDescription; 163 string invoiceAmountFormatted = i.amountInvoicePrice.PriceWithoutVATFormatted; 164 string invoiceDownloadUrl = i.invoiceURL; 165 166 <div class="dashboard-table__row"> 167 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Number", "Number")"> 168 <p>@invoiceNumber</p> 169 </div> 170 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Date", "Date")"> 171 <p>@invoiceDate</p> 172 </div> 173 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Status", "Status")"> 174 <p>@Translate($"InvoiceList.State.{invoiceStateCode}", invoiceState)</p> 175 </div> 176 <div class="dashboard-table__col" data-title="@Translate("InvoiceList.Amount", "Amount")"> 177 <p>@invoiceAmountFormatted</p> 178 </div> 179 <div class="dashboard-table__col" data-title=""> 180 </div> 181 <div class="dashboard-table__col" data-title=""> 182 </div> 183 <div class="dashboard-table__col dashboard-table__col--clickable dashboard-table__col--align-end"> 184 @if(!string.IsNullOrWhiteSpace(invoiceNumber) && !string.IsNullOrWhiteSpace(accountNumber)) 185 { 186 <a target ="_blank" href="/api/InvoiceDownload/invoice/@accountNumber/@invoiceNumber/file" data-tippy-content="@Translate("InvoiceList.DownloadPdf", "Download PDF")" class="dashboard-table__order-link"> 187 <i class="fas fa-file-pdf"></i> 188 </a> 189 } 190 </div> 191 </div> 192 } 193 </div> 194 </div> 195 } 196 else 197 { 198 <p>@Translate("InvoiceList.ClosedInvoices.NotFound", "No closed invoices found")</p> 199 } 200 </div> 201 202 </div> 203 204 @functions { 205 string getSortingIcon(string sortBy, string activeSortBy, string activeSortDirection) 206 { 207 if(string.IsNullOrWhiteSpace(activeSortBy)) 208 { 209 return $"<i class=\"fas fa-sort dashboard-table__sort-icon \"></i>"; 210 } 211 if(sortBy == activeSortBy) { 212 string sortIcon = activeSortDirection == "ASC" ? "fa-sort-up" : "fa-sort-down"; 213 return $"<i class=\"fas {sortIcon} dashboard-table__sort-icon dashboard-table__sort-icon--active \"></i>"; 214 } else { 215 return $"<i class=\"fas fa-sort-down dashboard-table__sort-icon \"></i>"; 216 } 217 } 218 219 string getSortUrlParams(string sortBy, string activeSortBy, string activeSortDirection) 220 { 221 string newSortDirection = sortBy == activeSortBy && activeSortDirection == "DESC" ? "&sortDirection=ASC" : "&sortDirection=DESC"; 222 if(sortBy == activeSortBy && activeSortDirection == "ASC") { 223 return ""; 224 } 225 return $"&sortByField={sortBy}{newSortDirection}"; 226 } 227 } 228
Nach Oben