Files
2026-03-17 08:54:34 -05:00

229 lines
14 KiB
Plaintext

@page "/Loans/{ImportId:int}"
@page "/Loans/"
@using ReserveManagementSystemUI.Shared.Components.Table;
@using ReserveManagementSystemUI.Model;
@using ReserveManagementSystemLib.Models;
@attribute [Authorize(Policy = "IsRMSAssociate")]
<h1>Loans</h1>
<TabControl>
<TabTextTemplate Context="TheTab">
@TheTab.Text
</TabTextTemplate>
<ChildContent>
<TabPage Text="Loan Summary">
<h5>This is a summary view list from the Loan table, please click Select to view loan details.</h5>
<div id="" class="alert alert-primary">We found <b>@pagedResponse.TotalItems</b> loan(s)</div>
<div class="row filterBuffer">
<div class="input-group">
<div class="col-lg-3 col-lg-offset-3">
<label for="@currentLoanFilter.MemberNumberText" class="col-form-label">Member Number</label>
<BlazoredTypeahead SearchMethod="GetMemberNumbersAsync"
TValue="string"
TItem="string"
Value="@currentLoanFilter.MemberNumberText"
ValueChanged="SelectedMemberNumberResultChangedAsync"
ValueExpression="@(() => currentLoanFilter.MemberNumberText)"
MaximumSuggestions="10"
placeholder="Search by member number...">
<SelectedTemplate>
@context
</SelectedTemplate>
<ResultTemplate>
@context
</ResultTemplate>
</BlazoredTypeahead>
</div>
<div class="col-lg-3 col-lg-offset-3">
<label for="MemberNameText" class="col-form-label">Member Name</label>
<input type="search" id="MemberNameText" class="form-control" placeholder="Search by member name..."
spellcheck="false" autocomplete="false"
@onchange="OnMemberNameTextChangeAsync" />
</div>
<div class="col-lg-3 col-lg-offset-3">
<label for="@currentLoanFilter.LoanNumberText" class="col-form-label">Loan Number</label>
<BlazoredTypeahead SearchMethod="GetLoanNumbersAsync"
TValue="string"
TItem="string"
Value="@currentLoanFilter.LoanNumberText"
ValueChanged="SelectedLoanNumberResultChangedAsync"
ValueExpression="@(() => currentLoanFilter.LoanNumberText)"
MaximumSuggestions="10"
placeholder="Search by loan number...">
<SelectedTemplate>
@context
</SelectedTemplate>
<ResultTemplate>
@context
</ResultTemplate>
</BlazoredTypeahead>
</div>
<div class="col-lg-3 col-lg-offset-3">
<label for="@currentLoanFilter.ApplicationIdText" class="col-form-label">Application Id</label>
<BlazoredTypeahead SearchMethod="GetApplicationIdsAsync"
TValue="string"
TItem="string"
Value="@currentLoanFilter.ApplicationIdText"
ValueChanged="SelectedApplicationIdResultChangedAsync"
ValueExpression="@(() => currentLoanFilter.ApplicationIdText)"
MaximumSuggestions="10"
placeholder="Search by application id...">
<SelectedTemplate>
@context
</SelectedTemplate>
<ResultTemplate>
@context
</ResultTemplate>
</BlazoredTypeahead>
</div>
</div>
</div>
<div class="row filterBuffer">
<div class="input-group">
<div class="col-lg-3 col-lg-offset-3">
<label for="@SelectedDealer" class="col-form-label">Dealer</label>
<BlazoredTypeahead SearchMethod="GetDealersAsync"
TValue="Dealer"
TItem="Dealer"
Value="SelectedDealer"
ValueChanged="SelectedDealerResultChangedAsync"
ValueExpression="@(() => SelectedDealer)"
MaximumSuggestions="10"
MinimumLength="1"
placeholder="Search by dealer code or name...">
<SelectedTemplate Context="dealer">
@dealer.DealerCode - @dealer.Name
</SelectedTemplate>
<ResultTemplate Context="dealer">
@dealer.DealerCode - @dealer.Name
</ResultTemplate>
</BlazoredTypeahead>
</div>
<div class="col-lg-2 col-lg-offset-2">
<label for="@currentLoanFilter.ActionRequired" class="col-form-label">Action Required</label>
<BlazoredTypeahead SearchMethod="GetActionRequiredLoansAsync"
TValue="bool?"
TItem="bool?"
Value="@currentLoanFilter.ActionRequired"
ValueChanged="SelectedActionResultChangedAsync"
ValueExpression="@(() => @currentLoanFilter.ActionRequired)"
EnableDropDown="true"
placeholder="Search by action required...">
<SelectedTemplate Context="action">
@action
</SelectedTemplate>
<ResultTemplate Context="action">
@action
</ResultTemplate>
</BlazoredTypeahead>
</div>
<div class="col-lg-2 col-lg-offset-2">
<label for="LoanDateStart" class="col-form-label">Origination Date Start</label>
<input type="search" id="LoanDateStart" class="form-control" placeholder="Enter date..."
spellcheck="false" autocomplete="false"
@onchange="OnLoanDateStartChangeAsync" />
</div>
<div class="col-lg-2 col-lg-offset-2">
<label for="LoanDateEnd" class="col-form-label">Origination Date End</label>
<input type="search" id="LoanDateEnd" class="form-control" placeholder="Enter date..."
spellcheck="false" autocomplete="false"
@onchange="OnLoanDateEndChangeAsync" />
</div>
<div class="col-lg-3 col-lg-offset-3">
<label for="@SelectedImport" class="col-form-label">Import</label>
<BlazoredTypeahead SearchMethod="GetImportsAsync"
TValue="Import"
TItem="Import"
Value="SelectedImport"
ValueChanged="SelectedImportResultChangedAsync"
ValueExpression="@(() => SelectedImport)"
EnableDropDown="true"
MaximumSuggestions="5"
MinimumLength="3"
placeholder="Search by import...">
<SelectedTemplate Context="import">
@import?.ImportType @import?.StartDate.ToString("M/d/yyyy h:mm:ss tt")
</SelectedTemplate>
<ResultTemplate Context="import">
@import?.ImportType @import?.StartDate.ToString("M/d/yyyy h:mm:ss tt")
</ResultTemplate>
</BlazoredTypeahead>
</div>
</div>
</div>
<h6 style="text-align: right">Page @(pagedResponse.TotalPages < pagedResponse.PageIndex ? 0 : pagedResponse.PageIndex) of @pagedResponse.TotalPages</h6>
<div style="text-align: right;">
<div id="allButtons" class="pagination2 margin">
<button type="button" class="btn btn-primary" disabled="@(!pagedResponse.HasPreviousPage)" @onclick="@(() => LoadLoanDataAsync(1))"><i class="fa fa-angle-double-left" aria-hidden="true"></i></button>
<button type="button" class="btn btn-primary" disabled="@(!pagedResponse.HasPreviousPage)" @onclick="@(() => LoadLoanDataAsync(pagedResponse.PageIndex - 1))"><i class="fa fa-angle-left" aria-hidden="true"></i></button>
@for (int i = pagedResponse.FirstPage; i <= pagedResponse.LastPage; i++)
{
var currentPage = i;
<button type="button" class="@GetPageButtonClass(currentPage)" @onclick="@(() => LoadLoanDataAsync(currentPage))">@i</button>
}
<button type="button" class="btn btn-primary" disabled="@(!pagedResponse.HasNextPage)" @onclick="@(() => LoadLoanDataAsync(pagedResponse.PageIndex + 1))"><i class="fa fa-angle-right" aria-hidden="true"></i></button>
<button type="button" class="btn btn-primary" disabled="@(!pagedResponse.HasNextPage)" @onclick="@(() => LoadLoanDataAsync(pagedResponse.TotalPages))"><i class="fa fa-angle-double-right" aria-hidden="true"></i></button>
</div>
</div>
<table class="table table-striped table-hover">
<thead>
<tr>
<TableHeader TableHeaderValue="Dealer Code" OnClick="OnSortClickAsync" HeaderName="Dealer.DealerCode" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Dealer Name" OnClick="OnSortClickAsync" HeaderName="Dealer.Name" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Member Number" OnClick="OnSortClickAsync" HeaderName="MemberNumber" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Loan Number" OnClick="OnSortClickAsync" HeaderName="LoanNumber" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Application Id" OnClick="OnSortClickAsync" HeaderName="ApplicationId" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Last Name" OnClick="OnSortClickAsync" HeaderName="MemberLastName" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="First Name" OnClick="OnSortClickAsync" HeaderName="MemberFirstName" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Origination Date" OnClick="OnSortClickAsync" HeaderName="LoanDate" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableHeader TableHeaderValue="Action Required" OnClick="OnSortClickAsync" HeaderName="ActionRequired" SelectedHeader="@currentLoanFilter.SortField" Ascending="@ascending" />
<TableData TableDataValue="" />
</tr>
</thead>
<tbody>
@foreach (var loan in pagedResponse.LoanList)
{
<tr>
<TableData TableDataValue="@loan.Dealer?.DealerCode" />
<TableData TableDataValue="@loan.Dealer?.Name" />
<TableData TableDataValue="@loan.MemberNumber" />
<TableData TableDataValue="@loan.LoanNumber" />
<TableData TableDataValue="@loan.ApplicationId" />
<TableData TableDataValue="@loan.MemberLastName" />
<TableData TableDataValue="@loan.MemberFirstName" />
<TableData TableDataValue="@(loan.LoanDate.ToString("M/d/yyyy"))" />
<td>
<div style="text-align: center;padding: 5px;">
@if (loan.ActionRequired)
{
<i class="fa fa-times-circle text-danger" aria-hidden="true" data-test="icon"></i>
}
</div>
</td>
<td>
<div style="text-align: center;padding: 5px;width: 115px;">
<button type="button" class="btn btn-primary" @onclick="@(() => GoToLoan(loan.LoanId))">Select</button>
</div>
</td>
</tr>
}
</tbody>
</table>
</TabPage>
</ChildContent>
</TabControl>