From e8f2e17820dd815070b3e22fdce16a95922f2d58 Mon Sep 17 00:00:00 2001 From: leandro Date: Thu, 26 Mar 2026 13:26:02 -0300 Subject: [PATCH] =?UTF-8?q?feat(sales):=20descargar=20PDF=20autom=C3=A1tic?= =?UTF-8?q?amente=20al=20emitir=20Delivery=20Note=20y=20boton=20de=20impre?= =?UTF-8?q?sion=20en=20consulta.=20closes=20#43?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DeliveryNotes/DeliveryNoteCreate.razor | 1 + .../Sales/DeliveryNotes/DeliveryNotes.razor | 13 +++++++++ .../DeliveryNotes/DeliveryNoteService.cs | 29 ++++++++++++++++++- .../DeliveryNotes/IDeliveryNoteService.cs | 1 + 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor index 7d4d006..60d5fd1 100644 --- a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor +++ b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNoteCreate.razor @@ -369,6 +369,7 @@ var response = await DeliveryNoteService.CreateAndIssueAsync(request); toastService.ShowSuccess($"Remito {response.DeliveryNoteNumber} emitido correctamente."); + await DeliveryNoteService.ExportPdfAsync(response.Id, response.DeliveryNoteNumber); Navigation.NavigateTo("/deliverynotes"); } catch (Exception ex) diff --git a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor index 31e333e..68f04e0 100644 --- a/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor +++ b/phronCare.UIBlazor/Pages/Sales/DeliveryNotes/DeliveryNotes.razor @@ -93,6 +93,7 @@ @deliveryNote.PrintCount + } @@ -256,6 +257,18 @@ 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 void ExportarExcel() { toastService.ShowInfo("La exportación a Excel se implementará en una próxima story."); diff --git a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs index c3c779f..a18a2e4 100644 --- a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs +++ b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/DeliveryNoteService.cs @@ -1,16 +1,19 @@ using Domain.Dtos.Sales; using Domain.Generics; +using Microsoft.JSInterop; using System.Net.Http.Json; namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes { public class DeliveryNoteService : IDeliveryNoteService { + private readonly IJSRuntime _js; private readonly HttpClient _http; - public DeliveryNoteService(HttpClient http) + public DeliveryNoteService(HttpClient http, IJSRuntime js) { _http = http; + _js = js; } @@ -94,5 +97,29 @@ namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes var result = await response.Content.ReadFromJsonAsync(); return result ?? throw new Exception("Respuesta vacía del servidor."); } + + public async Task ExportPdfAsync(int deliveryNoteId, string deliveryNoteNumber) + { + try + { + var response = await _http.GetAsync($"/api/deliverynote/{deliveryNoteId}/pdf"); + + if (!response.IsSuccessStatusCode) + { + var error = await response.Content.ReadAsStringAsync(); + throw new Exception($"Error al generar PDF: {error}"); + } + + var bytes = await response.Content.ReadAsByteArrayAsync(); + var base64 = Convert.ToBase64String(bytes); + var fileName = $"{deliveryNoteNumber}.pdf"; + + await _js.InvokeVoidAsync("saveAsFile", fileName, base64); + } + catch (Exception ex) + { + throw new Exception($"ExportPdfAsync: {ex.Message}", ex); + } + } } } diff --git a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs index f26b1ca..82737ec 100644 --- a/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs +++ b/phronCare.UIBlazor/Services/Sales/DeliveryNotes/IDeliveryNoteService.cs @@ -10,5 +10,6 @@ namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes Task GetByDeliveryNoteNumberAsync(string deliveryNoteNumber); Task> GetByQuoteIdAsync(int quoteId); Task CreateAndIssueAsync(DeliveryNoteCreateRequest request); + Task ExportPdfAsync(int deliveryNoteId, string deliveryNoteNumber); } }