@page "/deliverynotes" @using Domain.Dtos @using Domain.Dtos.Sales @using Domain.Generics @using phronCare.UIBlazor.Services.Sales.DeliveryNotes @inject NavigationManager Navigation @inject IDeliveryNoteService deliveryNoteService @inject IToastService toastService

Consulta de Remitos

@if (PagedDeliveryNotes?.Items?.Any() == true) { @foreach (var deliveryNote in PagedDeliveryNotes.Items) { } } else if (IsLoading) { } else { }
Remito Emisión Presupuesto Cliente Estado Observaciones Reimpresiones Acciones
@deliveryNote.DeliveryNoteNumber @deliveryNote.IssueDate.ToString("dd/MM/yyyy") @(string.IsNullOrWhiteSpace(deliveryNote.QuoteNumber) ? "—" : deliveryNote.QuoteNumber) @deliveryNote.CustomerName @deliveryNote.Status @(string.IsNullOrWhiteSpace(deliveryNote.Observations) ? "—" : deliveryNote.Observations) @deliveryNote.PrintCount
Cargando...
Sin resultados
Página @Filters.Page de @TotalPaginas
@code { private DeliveryNoteSearchParams Filters = new() { PageSize = 10 }; private PagedResult? PagedDeliveryNotes; private DeliveryNoteSummaryDto? SelectedSummary; private DeliveryNoteDto? SelectedDeliveryNote; private bool IsDrawerOpen; private bool IsDetailLoading; private bool IsLoading; private int PaginaDeseada = 1; private async Task Search() { try { IsLoading = true; PagedDeliveryNotes = await deliveryNoteService.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 => PagedDeliveryNotes != null && Filters.Page > 1; private bool PuedeAvanzar => PagedDeliveryNotes != null && Filters.Page < TotalPaginas; private int TotalPaginas => PagedDeliveryNotes is null ? 1 : (int)Math.Ceiling((double)(PagedDeliveryNotes.TotalItems) / Filters.PageSize); private void Create() { Navigation.NavigateTo("/deliverynotes/create"); } private void OnClear() { Filters = new DeliveryNoteSearchParams { PageSize = 10 }; PagedDeliveryNotes = null; PaginaDeseada = 1; } private string GetStatusBadge(string status) => status switch { "Anulado" => "bg-danger text-white", "Emitido" => "bg-primary text-white", "Aprobado" => "bg-success", "Cerrado" => "bg-dark text-white", _ => "bg-light text-dark" }; private async Task OpenDetailAsync(DeliveryNoteSummaryDto summary) { SelectedSummary = summary; SelectedDeliveryNote = null; IsDrawerOpen = true; IsDetailLoading = true; StateHasChanged(); try { var detail = await deliveryNoteService.GetByIdAsync(summary.Id); if (detail is not null) { SelectedDeliveryNote = detail; } else { toastService.ShowError("No se pudo cargar el detalle del remito."); } } catch (Exception ex) { toastService.ShowError(ex.Message); } finally { IsDetailLoading = false; } } private Task OnDrawerVisibleChanged(bool visible) { IsDrawerOpen = visible; return Task.CompletedTask; } private async Task PrintPdfAsync(DeliveryNoteSummaryDto deliveryNote) { try { await deliveryNoteService.ExportPdfAsync(deliveryNote.Id, deliveryNote.DeliveryNoteNumber); } catch (Exception ex) { toastService.ShowError(ex.Message); } } private async Task ExportarExcel() { Filters.Page = 1; Filters.PageSize = int.MaxValue; // Exportar todos los resultados try { await deliveryNoteService.ExportFilteredAsync(Filters); toastService.ShowSuccess("Exportación completada."); } catch (Exception ex) { toastService.ShowError($"Error: {ex.Message}"); } } }