@page "/sales/customers" @using phronCare.UIBlazor.Services.Sales @using phronCare.UIBlazor.Data @using Domain.Entities @using Domain.Generics @inject IToastService toastService @inject NavigationManager Navigation @inject CustomerService customerService

Búsqueda de clientes

@* wtf? *@

@if (TablaClientes != null && TablaClientes.Any()) { } else {

No hay resultados.

}
@code { protected override void OnInitialized() { botones = new List { new PhTable.ButtonOptions { Caption = "Editar", ElementClass = "btn btn-primary btn-sm", UrlAction = "/sales/customers/edit/", OnClickAction = async (id) => { if (int.TryParse(id, out var customerId)) { Navigation.NavigateTo($"/sales/customerform/{customerId}"); } } } }; } private CustomerSearchParams SearchParams = new(); private PagedResult? PagedResult; private List> TablaClientes = new(); private List TableColumns = new() { "Id", "Nombre", "Activo", "Crédito", "Límite", "Email", "Teléfono", "Dirección", "Documento" }; private int PaginaDeseada = 1; private async Task PrimeraPagina() { SearchParams.Page = 1; await BuscarClientes(); } private async Task UltimaPagina() { SearchParams.Page = TotalPaginas; await BuscarClientes(); } private async Task IrAPagina() { if (PaginaDeseada >= 1 && PaginaDeseada <= TotalPaginas) { SearchParams.Page = PaginaDeseada; await BuscarClientes(); } else { toastService.ShowWarning("Número de página fuera de rango."); } } private async Task BuscarClientes() { await CargarClientes(); } private async Task CargarClientes() { PagedResult = await customerService.SearchCustomersAsync(SearchParams); if (PagedResult?.Items is not null) { TablaClientes = PagedResult.Items.Select(c => { var addr = c.PhSCustomerAddresses.FirstOrDefault(); var doc = c.PhSCustomerDocuments.FirstOrDefault(); return new Dictionary { { "Id", c.Id }, { "Nombre", c.Name ?? string.Empty }, { "Activo", c.Active ? "Sí" : "No" }, { "Crédito", c.HasCreditAccount ? "Sí" : "No" }, { "Límite", c.CreditLimit }, { "Email", addr?.Email ?? string.Empty }, { "Teléfono", addr?.Phonenumber ?? string.Empty }, { "Dirección", addr is not null ? $"{addr.Streetaddress1}, {addr.City}, {addr.Postalcode}" : string.Empty }, { "Documento", doc?.DocumentNumber ?? string.Empty } }; }).ToList(); } } private async Task SiguientePagina() => await CambiarPagina(1); private async Task AnteriorPagina() => await CambiarPagina(-1); private async Task CambiarPagina(int delta) { var nuevaPagina = SearchParams.Page + delta; if (nuevaPagina >= 1 && nuevaPagina <= TotalPaginas) { SearchParams.Page = nuevaPagina; await CargarClientes(); } } private async Task ExportarExcel() { // Crea el objeto de parámetros para la búsqueda var searchParams = new CustomerSearchParams { Name = SearchParams.Name, // Aquí podés obtener los filtros de los campos en el formulario Email = SearchParams.Email, Document = SearchParams.Document, Page = 1, PageSize = int.MaxValue // Puedes ajustar el tamaño de la página para exportar todos los registros }; try { await customerService.ExportFilteredAsync(searchParams); toastService.ShowSuccess("Exportación completada exitosamente."); } catch (Exception ex) { toastService.ShowError($"{ex.Message}"); } } private bool PuedeRetroceder => PagedResult != null && SearchParams.Page > 1; private bool PuedeAvanzar => PagedResult != null && SearchParams.Page < TotalPaginas; private int TotalPaginas => PagedResult is null ? 1 : (int)Math.Ceiling((double)(PagedResult.TotalItems) / SearchParams.PageSize); private void NuevoCliente() { Navigation.NavigateTo("/sales/customerform/"); } public void Cancel() { Navigation.NavigateTo("/DashboardPanel"); } List botones = new(); }