From 49f5a259a04f221713172c0cc69abf650bbf4160 Mon Sep 17 00:00:00 2001 From: leandro Date: Fri, 27 Mar 2026 20:57:08 -0300 Subject: [PATCH] feat(sales): enable excel export button in DeliveryNotes UI Closes #48 --- .../Sales/DeliveryNotes/DeliveryNotes.razor | 15 +++++++++++-- .../DeliveryNotes/DeliveryNoteService.cs | 22 +++++++++++++++++++ .../DeliveryNotes/IDeliveryNoteService.cs | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor index 68f04e0..ddda6db 100644 --- a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor +++ b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor @@ -269,8 +269,19 @@ } } - private void ExportarExcel() + private async Task ExportarExcel() { - toastService.ShowInfo("La exportación a Excel se implementará en una próxima story."); + 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}"); + } } } diff --git a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs index a18a2e4..5251f01 100644 --- a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs +++ b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs @@ -2,6 +2,8 @@ using Domain.Dtos.Sales; using Domain.Generics; using Microsoft.JSInterop; using System.Net.Http.Json; +using System.Text; +using System.Text.Json; namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes { @@ -121,5 +123,25 @@ namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes throw new Exception($"ExportPdfAsync: {ex.Message}", ex); } } + + public async Task ExportFilteredAsync(DeliveryNoteSearchParams searchParams) + { + var content = new StringContent(JsonSerializer.Serialize(searchParams), Encoding.UTF8, "application/json"); + var response = await _http.PostAsync("/api/deliverynote/exportfiltered", content); + + if (!response.IsSuccessStatusCode) + { + var serverMessage = await response.Content.ReadAsStringAsync(); + throw new Exception(string.IsNullOrWhiteSpace(serverMessage) + ? "No se pudo exportar el Excel de remitos." + : serverMessage); + } + + var bytes = await response.Content.ReadAsByteArrayAsync(); + var base64 = Convert.ToBase64String(bytes); + var fileName = $"{DateTime.Now:yyyyMMddHHmm}_deliverynotes.xlsx"; + + await _js.InvokeVoidAsync("saveAsFile", fileName, base64); + } } } diff --git a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs index 82737ec..f227d0b 100644 --- a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs +++ b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs @@ -11,5 +11,6 @@ namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes Task> GetByQuoteIdAsync(int quoteId); Task CreateAndIssueAsync(DeliveryNoteCreateRequest request); Task ExportPdfAsync(int deliveryNoteId, string deliveryNoteNumber); + Task ExportFilteredAsync(DeliveryNoteSearchParams searchParams); } } -- 2.47.1