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); } }