@page "/salesdocuments" @using Domain.Constants @using Domain.Dtos.Sales @using Domain.Generics @using phronCare.UIBlazor.Services.Sales.SalesDocuments @inject NavigationManager Navigation @inject ISalesDocumentService SalesDocumentService @inject IToastService toastService

Consulta de Sales Documents

@if (PagedSalesDocuments?.Items?.Any() == true) { @foreach (var document in PagedSalesDocuments.Items) { } } else if (IsLoading) { } else { }
Documento Emisión Cliente Facturar a Presupuesto Tipo Estado Moneda Total Acciones
@(string.IsNullOrWhiteSpace(document.InternalDocumentNumber) ? $"#{document.Id}" : document.InternalDocumentNumber) @FormatDate(document.IssueDate) @document.CustomerName @document.BillToCustomerName @(document.QuoteId?.ToString() ?? "—") @GetDocumentTypeLabel(document.DocumentType) @GetStatusLabel(document.Status) @document.Currency @document.TotalAmount.ToString("N2")
Cargando...
Sin resultados
Página @Filters.Page de @TotalPaginas
@code { private SalesDocumentSearchParams Filters = new() { PageSize = 10 }; private PagedResult? PagedSalesDocuments; private bool IsLoading; private int PaginaDeseada = 1; private static readonly List DocumentTypeOptions = Enum.GetValues() .Select(x => new SelectOption((int)x, GetDocumentTypeLabel((int)x))) .ToList(); private static readonly List StatusOptions = Enum.GetValues() .Select(x => new SelectOption((int)x, GetStatusLabel((int)x))) .ToList(); protected override async Task OnInitializedAsync() { await Search(); } private async Task Search() { try { IsLoading = true; PagedSalesDocuments = await SalesDocumentService.SearchAsync(Filters); PaginaDeseada = Filters.Page; } catch (Exception ex) { toastService.ShowError(ex.Message); } finally { IsLoading = false; } } private async Task PrimeraPagina() { Filters.Page = 1; await Search(); } private async Task UltimaPagina() { Filters.Page = TotalPaginas; await Search(); } private async Task SiguientePagina() => await CambiarPagina(1); private async Task AnteriorPagina() => await CambiarPagina(-1); private async Task CambiarPagina(int delta) { var nuevaPagina = Filters.Page + delta; if (nuevaPagina >= 1 && nuevaPagina <= TotalPaginas) { Filters.Page = nuevaPagina; await Search(); } } private async Task IrAPagina() { if (PaginaDeseada >= 1 && PaginaDeseada <= TotalPaginas) { Filters.Page = PaginaDeseada; await Search(); } else { toastService.ShowWarning("Número de página fuera de rango."); } } private bool PuedeRetroceder => PagedSalesDocuments != null && Filters.Page > 1; private bool PuedeAvanzar => PagedSalesDocuments != null && Filters.Page < TotalPaginas; private int TotalPaginas => PagedSalesDocuments is null ? 1 : Math.Max(1, PagedSalesDocuments.TotalPages); private void Create() => Navigation.NavigateTo("/salesdocuments/create"); private void Detail(int id) => Navigation.NavigateTo($"/salesdocuments/{id}"); private void OnClear() { Filters = new SalesDocumentSearchParams { PageSize = 10 }; PagedSalesDocuments = null; PaginaDeseada = 1; } private static string FormatDate(DateTime? value) => value.HasValue ? value.Value.ToString("dd/MM/yyyy") : "—"; private static string GetDocumentTypeLabel(int value) => Enum.IsDefined(typeof(SalesDocumentType), value) ? ((SalesDocumentType)value) switch { SalesDocumentType.Invoice => "Factura", SalesDocumentType.DebitNote => "Nota de débito", SalesDocumentType.CreditNote => "Nota de crédito", SalesDocumentType.CreditInvoice => "Factura crédito", SalesDocumentType.CreditDebitNote => "N/D crédito", SalesDocumentType.CreditCreditNote => "N/C crédito", _ => value.ToString() } : value.ToString(); private static string GetStatusLabel(int value) => Enum.IsDefined(typeof(SalesDocumentStatus), value) ? ((SalesDocumentStatus)value) switch { SalesDocumentStatus.Draft => "Borrador", SalesDocumentStatus.Validated => "Validado", SalesDocumentStatus.Issued => "Emitido", SalesDocumentStatus.Cancelled => "Anulado", _ => value.ToString() } : value.ToString(); private static string GetStatusBadge(int value) => value switch { (int)SalesDocumentStatus.Draft => "bg-secondary text-white", (int)SalesDocumentStatus.Validated => "bg-info text-dark", (int)SalesDocumentStatus.Issued => "bg-primary text-white", (int)SalesDocumentStatus.Cancelled => "bg-danger text-white", _ => "bg-light text-dark" }; private sealed record SelectOption(int Value, string Label); }