add MudDatePicker in to Filtering Invoice List
This commit is contained in:
@@ -22,8 +22,7 @@ public class InvoiceController(BimAIDbContext context) : ControllerBase
|
|||||||
var searchTerm = request.Search.ToLower();
|
var searchTerm = request.Search.ToLower();
|
||||||
query = query.Where(x =>
|
query = query.Where(x =>
|
||||||
x.DocumentNo.ToLower().Contains(searchTerm) ||
|
x.DocumentNo.ToLower().Contains(searchTerm) ||
|
||||||
x.ClientName.ToLower().Contains(searchTerm) ||
|
x.ClientName.ToLower().Contains(searchTerm)
|
||||||
(x.ClientNip != null && x.ClientNip.ToLower().Contains(searchTerm))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,12 +48,26 @@ public class InvoiceController(BimAIDbContext context) : ControllerBase
|
|||||||
|
|
||||||
if (request.RegisterDateFrom.HasValue)
|
if (request.RegisterDateFrom.HasValue)
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.RegisterDate >= request.RegisterDateFrom.Value);
|
var from = request.RegisterDateFrom.Value.Date;
|
||||||
|
query = query.Where(x => x.RegisterDate >= from);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.RegisterDateTo.HasValue)
|
if (request.RegisterDateTo.HasValue)
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.RegisterDate <= request.RegisterDateTo.Value);
|
var toExclusive = request.RegisterDateTo.Value.Date.AddDays(1);
|
||||||
|
query = query.Where(x => x.RegisterDate < toExclusive);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.SellDateFrom.HasValue)
|
||||||
|
{
|
||||||
|
var from = request.SellDateFrom.Value.Date;
|
||||||
|
query = query.Where(x => x.SellDate >= from);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request.SellDateTo.HasValue)
|
||||||
|
{
|
||||||
|
var toExclusive = request.SellDateTo.Value.Date.AddDays(1);
|
||||||
|
query = query.Where(x => x.SellDate < toExclusive);
|
||||||
}
|
}
|
||||||
|
|
||||||
var totalCount = await query.CountAsync();
|
var totalCount = await query.CountAsync();
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ public class InvoiceFilterRequest
|
|||||||
public string? Source { get; set; }
|
public string? Source { get; set; }
|
||||||
public DateTime? RegisterDateFrom { get; set; }
|
public DateTime? RegisterDateFrom { get; set; }
|
||||||
public DateTime? RegisterDateTo { get; set; }
|
public DateTime? RegisterDateTo { get; set; }
|
||||||
|
public DateTime? SellDateFrom { get; set; }
|
||||||
|
public DateTime? SellDateTo { get; set; }
|
||||||
public int Page { get; set; } = 1;
|
public int Page { get; set; } = 1;
|
||||||
public int PageSize { get; set; } = 20;
|
public int PageSize { get; set; } = 20;
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
@using MudBlazor.Internal
|
@using MudBlazor.Internal
|
||||||
|
@using System.Data
|
||||||
<MudText Typo="Typo.h4" Class="mb-4">Lista Faktur</MudText>
|
<MudText Typo="Typo.h4" Class="mb-4">Lista Faktur</MudText>
|
||||||
|
|
||||||
<MudExpansionPanels Class="mb-4">
|
<MudExpansionPanels Class="mb-4">
|
||||||
@@ -25,6 +26,15 @@
|
|||||||
Clearable="true" />
|
Clearable="true" />
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
|
<MudItem xs="12" sm="6" md="4">
|
||||||
|
<MudTextField @bind-Value="filterRequest.Type"
|
||||||
|
Label="Typ dokumentu"
|
||||||
|
Immediate="true"
|
||||||
|
DebounceInterval="500"
|
||||||
|
OnDebounceIntervalElapsed="SearchInvoices"
|
||||||
|
Clearable="true" />
|
||||||
|
</MudItem>
|
||||||
|
|
||||||
<MudItem xs="12" sm="6" md="4">
|
<MudItem xs="12" sm="6" md="4">
|
||||||
<MudTextField @bind-Value="filterRequest.ClientName"
|
<MudTextField @bind-Value="filterRequest.ClientName"
|
||||||
Label="Nazwa klienta"
|
Label="Nazwa klienta"
|
||||||
@@ -35,12 +45,43 @@
|
|||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
<MudItem xs="12" sm="6" md="4">
|
<MudItem xs="12" sm="6" md="4">
|
||||||
<MudTextField @bind-Value="filterRequest.Type"
|
<MudDatePicker @bind-Date="filterRequest.RegisterDateFrom"
|
||||||
Label="Typ dokumentu"
|
Label="Data rejestracji od"
|
||||||
|
DateFormat="dd.MM.yyyy"
|
||||||
|
Editable="true"
|
||||||
|
Clearable="true"
|
||||||
Immediate="true"
|
Immediate="true"
|
||||||
DebounceInterval="500"
|
@bind-Date:after="OnFilterChanged" />
|
||||||
OnDebounceIntervalElapsed="SearchInvoices"
|
</MudItem>
|
||||||
Clearable="true"/>
|
|
||||||
|
<MudItem xs="12" sm="6" md="4">
|
||||||
|
<MudDatePicker @bind-Date="filterRequest.RegisterDateTo"
|
||||||
|
Label="Data rejestracji do"
|
||||||
|
DateFormat="d.MM.yyyy"
|
||||||
|
Editable="true"
|
||||||
|
Clearable="true"
|
||||||
|
Immediate="true"
|
||||||
|
@bind-Date:after="OnFilterChanged" />
|
||||||
|
</MudItem>
|
||||||
|
|
||||||
|
<MudItem xs="12" sm="6" md="4">
|
||||||
|
<MudDatePicker @bind-Date="filterRequest.SellDateFrom"
|
||||||
|
Label="Data sprzedaży od"
|
||||||
|
DateFormat="d.MM.yyyy"
|
||||||
|
Editable="true"
|
||||||
|
Clearable="true"
|
||||||
|
Immediate="true"
|
||||||
|
@bind-Date:after="OnFilterChanged" />
|
||||||
|
</MudItem>
|
||||||
|
|
||||||
|
<MudItem xs="12" sm="6" md="4">
|
||||||
|
<MudDatePicker @bind-Date="filterRequest.SellDateTo"
|
||||||
|
Label="Data sprzedaży do"
|
||||||
|
DateFormat="d.MM.yyyy"
|
||||||
|
Editable="true"
|
||||||
|
Clearable="true"
|
||||||
|
Immediate="true"
|
||||||
|
@bind-Date:after="OnFilterChanged" />
|
||||||
</MudItem>
|
</MudItem>
|
||||||
|
|
||||||
<MudItem xs="12" sm="6" md="4">
|
<MudItem xs="12" sm="6" md="4">
|
||||||
@@ -54,6 +95,7 @@
|
|||||||
</MudExpansionPanel>
|
</MudExpansionPanel>
|
||||||
</MudExpansionPanels>
|
</MudExpansionPanels>
|
||||||
|
|
||||||
|
|
||||||
<MudDivider Class="my-4"></MudDivider>
|
<MudDivider Class="my-4"></MudDivider>
|
||||||
|
|
||||||
<MudTable Items="invoices.Items"
|
<MudTable Items="invoices.Items"
|
||||||
@@ -100,7 +142,7 @@
|
|||||||
|
|
||||||
@if (invoices.TotalCount > 0)
|
@if (invoices.TotalCount > 0)
|
||||||
{
|
{
|
||||||
<MudGrid Class="mt-4" AlignItems="Center.Center">
|
<MudGrid Class="mt-4" AlignItems="Center">
|
||||||
<MudItem xs="12" sm="6">
|
<MudItem xs="12" sm="6">
|
||||||
<MudText Typo="Typo.body2">
|
<MudText Typo="Typo.body2">
|
||||||
Wyniki @((invoices.Page - 1) * invoices.PageSize + 1) - @Math.Min(invoices.Page * invoices.PageSize, invoices.TotalCount)
|
Wyniki @((invoices.Page - 1) * invoices.PageSize + 1) - @Math.Min(invoices.Page * invoices.PageSize, invoices.TotalCount)
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace BimAI.UI.Shared.Components;
|
|||||||
public partial class InvoiceListComponent : ComponentBase
|
public partial class InvoiceListComponent : ComponentBase
|
||||||
{
|
{
|
||||||
[Inject] private InvoiceService InvoiceService { get; set; } = default!;
|
[Inject] private InvoiceService InvoiceService { get; set; } = default!;
|
||||||
|
[Inject] private ISnackbar Snackbar { get; set; } = default!;
|
||||||
|
|
||||||
private PagedResult<InvoiceDto> invoices = new();
|
private PagedResult<InvoiceDto> invoices = new();
|
||||||
private InvoiceFilterRequest filterRequest = new();
|
private InvoiceFilterRequest filterRequest = new();
|
||||||
@@ -16,28 +17,24 @@ public partial class InvoiceListComponent : ComponentBase
|
|||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Console.WriteLine("========== InvoiceListComponent OnInitializedAsync ==========");
|
|
||||||
await LoadInvoices();
|
await LoadInvoices();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task LoadInvoices()
|
private async Task LoadInvoices()
|
||||||
{
|
{
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
Console.WriteLine($"========== LoadInvoices - Starting load with Page: {filterRequest.Page}, PageSize: {filterRequest.PageSize} ==========");
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
invoices = await InvoiceService.GetInvoiceAsync(filterRequest);
|
var result = await InvoiceService.GetInvoiceAsync(filterRequest);
|
||||||
Console.WriteLine($"========== LoadInvoices - Loaded {invoices.Items?.Count ?? 0} invoices, Total: {invoices.TotalCount} ==========");
|
invoices = result ?? new PagedResult<InvoiceDto>();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"========== ERROR Loading invoices failed: {ex.Message} ==========");
|
Console.WriteLine($"Loading invoices failed: {ex.Message}");
|
||||||
Console.WriteLine($"========== ERROR Stack trace: {ex.StackTrace} ==========");
|
Console.WriteLine($"Stack trace: {ex.StackTrace}");
|
||||||
if (ex.InnerException != null)
|
Snackbar.Add($"Błąd podczas ładowania faktur: {ex.Message}", Severity.Error);
|
||||||
{
|
invoices = new PagedResult<InvoiceDto>();
|
||||||
Console.WriteLine($"========== ERROR Inner exception: {ex.InnerException.Message} ==========");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
@@ -56,6 +53,11 @@ public partial class InvoiceListComponent : ComponentBase
|
|||||||
filterRequest.Page = page;
|
filterRequest.Page = page;
|
||||||
await LoadInvoices();
|
await LoadInvoices();
|
||||||
}
|
}
|
||||||
|
private async Task OnFilterChanged()
|
||||||
|
{
|
||||||
|
filterRequest.Page = 1;
|
||||||
|
await SearchInvoices();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task ClearFilters()
|
private async Task ClearFilters()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<MudThemeProvider/>
|
<MudThemeProvider/>
|
||||||
<MudDialogProvider/>
|
<MudDialogProvider/>
|
||||||
<MudSnackbarProvider/>
|
<MudSnackbarProvider/>
|
||||||
|
<MudPopoverProvider />
|
||||||
|
|
||||||
<MudLayout>
|
<MudLayout>
|
||||||
<MudBreakpointProvider OnBreakpointChanged="OnBreakpointChanged"></MudBreakpointProvider>
|
<MudBreakpointProvider OnBreakpointChanged="OnBreakpointChanged"></MudBreakpointProvider>
|
||||||
|
|||||||
@@ -21,44 +21,52 @@ public class InvoiceService(HttpClient httpClient)
|
|||||||
["pageSize"] = request.PageSize.ToString(),
|
["pageSize"] = request.PageSize.ToString(),
|
||||||
};
|
};
|
||||||
|
|
||||||
// if (!string.IsNullOrWhiteSpace(request.Search))
|
if (!string.IsNullOrWhiteSpace(request.Search))
|
||||||
// {
|
{
|
||||||
// queryParams["search"] = request.Search;
|
queryParams["search"] = request.Search;
|
||||||
// }
|
}
|
||||||
// if (!string.IsNullOrWhiteSpace(request.Name))
|
if (!string.IsNullOrWhiteSpace(request.ClientName))
|
||||||
// {
|
{
|
||||||
// queryParams["name"] = request.Name;
|
queryParams["clientName"] = request.ClientName;
|
||||||
// }
|
}
|
||||||
// if (!string.IsNullOrWhiteSpace(request.Code))
|
if (!string.IsNullOrWhiteSpace(request.Type))
|
||||||
// {
|
{
|
||||||
// queryParams["code"] = request.Code;
|
queryParams["type"] = request.Type;
|
||||||
// }
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(request.DocumentNo))
|
||||||
// if (!string.IsNullOrWhiteSpace(request.Ean))
|
{
|
||||||
// {
|
queryParams["documentNo"] = request.DocumentNo;
|
||||||
// queryParams["ean"] = request.Ean;
|
}
|
||||||
// }
|
if (request.RegisterDateFrom.HasValue)
|
||||||
|
{
|
||||||
|
queryParams["registerDateFrom"] = request.RegisterDateFrom.Value.ToString("yyyy-MM-dd");;
|
||||||
|
}
|
||||||
|
if (request.RegisterDateTo.HasValue)
|
||||||
|
{
|
||||||
|
queryParams["registerDateTo"] = request.RegisterDateTo.Value.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
if (request.SellDateFrom.HasValue)
|
||||||
|
{
|
||||||
|
queryParams["sellDateFrom"] = request.SellDateFrom.Value.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
if (request.SellDateTo.HasValue)
|
||||||
|
{
|
||||||
|
queryParams["sellDateTo"] = request.SellDateTo.Value.ToString("yyyy-MM-dd");
|
||||||
|
}
|
||||||
var uri = QueryHelpers.AddQueryString("api/invoice", queryParams);
|
var uri = QueryHelpers.AddQueryString("api/invoice", queryParams);
|
||||||
Console.WriteLine($"========== InvoiceService - Full URL: {_httpClient.BaseAddress}{uri} ==========");
|
|
||||||
|
|
||||||
var response = await _httpClient.GetAsync(uri);
|
var response = await _httpClient.GetAsync(uri);
|
||||||
Console.WriteLine($"========== InvoiceService - Response status: {response.StatusCode} ==========");
|
|
||||||
|
|
||||||
if (!response.IsSuccessStatusCode)
|
if (!response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
var errorContent = await response.Content.ReadAsStringAsync();
|
var errorContent = await response.Content.ReadAsStringAsync();
|
||||||
Console.WriteLine($"========== InvoiceService - Error response: {errorContent} ==========");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
response.EnsureSuccessStatusCode();
|
response.EnsureSuccessStatusCode();
|
||||||
|
|
||||||
var json = await response.Content.ReadAsStringAsync();
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
Console.WriteLine($"========== InvoiceService - Response JSON length: {json.Length} ==========");
|
|
||||||
Console.WriteLine($"========== InvoiceService - Response JSON: {json.Substring(0, Math.Min(500, json.Length))} ==========");
|
|
||||||
|
|
||||||
var result = JsonSerializer.Deserialize<PagedResult<InvoiceDto>>(json, _jsonOptions);
|
var result = JsonSerializer.Deserialize<PagedResult<InvoiceDto>>(json, _jsonOptions);
|
||||||
Console.WriteLine($"========== InvoiceService - Deserialized result - Items count: {result?.Items?.Count ?? 0}, Total: {result?.TotalCount ?? 0} ==========");
|
|
||||||
|
|
||||||
return result ?? new PagedResult<InvoiceDto>();
|
return result ?? new PagedResult<InvoiceDto>();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user