From 4782bd3a89814e2c82a9aa6705f28f6eb51df257 Mon Sep 17 00:00:00 2001 From: zzdrojewskipaw Date: Sat, 29 Nov 2025 17:02:20 +0100 Subject: [PATCH] add MudDatePicker in to Filtering Invoice List --- BimAI.API/Controllers/InvoiceController.cs | 33 +++-- BimAI.Application/DTOModels/InvoiceDto.cs | 2 + .../Components/InvoiceListComponent.razor | 138 ++++++++++++------ .../Components/InvoiceListComponent.razor.cs | 22 +-- BimAI.UI.Shared/MainLayout.razor | 3 +- BimAI.UI.Shared/Services/InvoiceService.cs | 58 ++++---- 6 files changed, 162 insertions(+), 94 deletions(-) diff --git a/BimAI.API/Controllers/InvoiceController.cs b/BimAI.API/Controllers/InvoiceController.cs index 4893547..b040e33 100644 --- a/BimAI.API/Controllers/InvoiceController.cs +++ b/BimAI.API/Controllers/InvoiceController.cs @@ -22,8 +22,7 @@ public class InvoiceController(BimAIDbContext context) : ControllerBase var searchTerm = request.Search.ToLower(); query = query.Where(x => x.DocumentNo.ToLower().Contains(searchTerm) || - x.ClientName.ToLower().Contains(searchTerm) || - (x.ClientNip != null && x.ClientNip.ToLower().Contains(searchTerm)) + x.ClientName.ToLower().Contains(searchTerm) ); } @@ -47,15 +46,29 @@ public class InvoiceController(BimAIDbContext context) : ControllerBase query = query.Where(x => x.Source.ToLower().Contains(request.Source.ToLower())); } - if (request.RegisterDateFrom.HasValue) - { - query = query.Where(x => x.RegisterDate >= request.RegisterDateFrom.Value); - } + if (request.RegisterDateFrom.HasValue) + { + var from = request.RegisterDateFrom.Value.Date; + query = query.Where(x => x.RegisterDate >= from); + } - if (request.RegisterDateTo.HasValue) - { - query = query.Where(x => x.RegisterDate <= request.RegisterDateTo.Value); - } + if (request.RegisterDateTo.HasValue) + { + 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(); diff --git a/BimAI.Application/DTOModels/InvoiceDto.cs b/BimAI.Application/DTOModels/InvoiceDto.cs index 35a4d6d..2701218 100644 --- a/BimAI.Application/DTOModels/InvoiceDto.cs +++ b/BimAI.Application/DTOModels/InvoiceDto.cs @@ -30,6 +30,8 @@ public class InvoiceFilterRequest public string? Source { get; set; } public DateTime? RegisterDateFrom { 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 PageSize { get; set; } = 20; } \ No newline at end of file diff --git a/BimAI.UI.Shared/Components/InvoiceListComponent.razor b/BimAI.UI.Shared/Components/InvoiceListComponent.razor index fe32673..c4c31e7 100644 --- a/BimAI.UI.Shared/Components/InvoiceListComponent.razor +++ b/BimAI.UI.Shared/Components/InvoiceListComponent.razor @@ -1,58 +1,100 @@ @using MudBlazor.Internal +@using System.Data Lista Faktur - - - - - + + + + + - - - + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + Wyczyść filtry + + + + + - - - Wyczyść filtry - - - - - @@ -100,7 +142,7 @@ @if (invoices.TotalCount > 0) { - + Wyniki @((invoices.Page - 1) * invoices.PageSize + 1) - @Math.Min(invoices.Page * invoices.PageSize, invoices.TotalCount) diff --git a/BimAI.UI.Shared/Components/InvoiceListComponent.razor.cs b/BimAI.UI.Shared/Components/InvoiceListComponent.razor.cs index 072939c..6cccfc4 100644 --- a/BimAI.UI.Shared/Components/InvoiceListComponent.razor.cs +++ b/BimAI.UI.Shared/Components/InvoiceListComponent.razor.cs @@ -9,6 +9,7 @@ namespace BimAI.UI.Shared.Components; public partial class InvoiceListComponent : ComponentBase { [Inject] private InvoiceService InvoiceService { get; set; } = default!; + [Inject] private ISnackbar Snackbar { get; set; } = default!; private PagedResult invoices = new(); private InvoiceFilterRequest filterRequest = new(); @@ -16,28 +17,24 @@ public partial class InvoiceListComponent : ComponentBase protected override async Task OnInitializedAsync() { - Console.WriteLine("========== InvoiceListComponent OnInitializedAsync =========="); await LoadInvoices(); } private async Task LoadInvoices() { isLoading = true; - Console.WriteLine($"========== LoadInvoices - Starting load with Page: {filterRequest.Page}, PageSize: {filterRequest.PageSize} =========="); try { - invoices = await InvoiceService.GetInvoiceAsync(filterRequest); - Console.WriteLine($"========== LoadInvoices - Loaded {invoices.Items?.Count ?? 0} invoices, Total: {invoices.TotalCount} =========="); + var result = await InvoiceService.GetInvoiceAsync(filterRequest); + invoices = result ?? new PagedResult(); } catch (Exception ex) { - Console.WriteLine($"========== ERROR Loading invoices failed: {ex.Message} =========="); - Console.WriteLine($"========== ERROR Stack trace: {ex.StackTrace} =========="); - if (ex.InnerException != null) - { - Console.WriteLine($"========== ERROR Inner exception: {ex.InnerException.Message} =========="); - } + Console.WriteLine($"Loading invoices failed: {ex.Message}"); + Console.WriteLine($"Stack trace: {ex.StackTrace}"); + Snackbar.Add($"Błąd podczas ładowania faktur: {ex.Message}", Severity.Error); + invoices = new PagedResult(); } finally { @@ -56,6 +53,11 @@ public partial class InvoiceListComponent : ComponentBase filterRequest.Page = page; await LoadInvoices(); } + private async Task OnFilterChanged() + { + filterRequest.Page = 1; + await SearchInvoices(); + } private async Task ClearFilters() { diff --git a/BimAI.UI.Shared/MainLayout.razor b/BimAI.UI.Shared/MainLayout.razor index 2140dd2..d5fbd69 100644 --- a/BimAI.UI.Shared/MainLayout.razor +++ b/BimAI.UI.Shared/MainLayout.razor @@ -5,7 +5,8 @@ - + + diff --git a/BimAI.UI.Shared/Services/InvoiceService.cs b/BimAI.UI.Shared/Services/InvoiceService.cs index 615e088..4be2fb9 100644 --- a/BimAI.UI.Shared/Services/InvoiceService.cs +++ b/BimAI.UI.Shared/Services/InvoiceService.cs @@ -21,45 +21,53 @@ public class InvoiceService(HttpClient httpClient) ["pageSize"] = request.PageSize.ToString(), }; - // if (!string.IsNullOrWhiteSpace(request.Search)) - // { - // queryParams["search"] = request.Search; - // } - // if (!string.IsNullOrWhiteSpace(request.Name)) - // { - // queryParams["name"] = request.Name; - // } - // if (!string.IsNullOrWhiteSpace(request.Code)) - // { - // queryParams["code"] = request.Code; - // } - - // if (!string.IsNullOrWhiteSpace(request.Ean)) - // { - // queryParams["ean"] = request.Ean; - // } - + if (!string.IsNullOrWhiteSpace(request.Search)) + { + queryParams["search"] = request.Search; + } + if (!string.IsNullOrWhiteSpace(request.ClientName)) + { + queryParams["clientName"] = request.ClientName; + } + if (!string.IsNullOrWhiteSpace(request.Type)) + { + queryParams["type"] = request.Type; + } + if (!string.IsNullOrWhiteSpace(request.DocumentNo)) + { + queryParams["documentNo"] = request.DocumentNo; + } + 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); - Console.WriteLine($"========== InvoiceService - Full URL: {_httpClient.BaseAddress}{uri} =========="); var response = await _httpClient.GetAsync(uri); - Console.WriteLine($"========== InvoiceService - Response status: {response.StatusCode} =========="); if (!response.IsSuccessStatusCode) { var errorContent = await response.Content.ReadAsStringAsync(); - Console.WriteLine($"========== InvoiceService - Error response: {errorContent} =========="); } response.EnsureSuccessStatusCode(); 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>(json, _jsonOptions); - Console.WriteLine($"========== InvoiceService - Deserialized result - Items count: {result?.Items?.Count ?? 0}, Total: {result?.TotalCount ?? 0} =========="); - + return result ?? new PagedResult(); } } \ No newline at end of file