229 lines
14 KiB
Plaintext
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>
|
|
|
|
|
|
|
|
|