feat(sales): descargar PDF automáticamente al emitir Delivery Note y boton de impresion en consulta.
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (pull_request) Successful in 16m10s

closes #43
This commit is contained in:
Leandro Hernan Rojas 2026-03-26 13:26:02 -03:00
parent f403ffa90d
commit e8f2e17820
4 changed files with 43 additions and 1 deletions

View File

@ -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)

View File

@ -93,6 +93,7 @@
<td>@deliveryNote.PrintCount</td>
<td class="text-center align-middle">
<button class="btn btn-link btn-lg p-0 text-primary ms-2" title="Ver detalle" @onclick="() => OpenDetailAsync(deliveryNote)"><i class="fas fa-eye"></i></button>
<button class="btn btn-link btn-lg p-0 text-danger ms-2" title="Imprimir PDF" @onclick="() => PrintPdfAsync(deliveryNote)"><i class="fas fa-print"></i></button>
</td>
</tr>
}
@ -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.");

View File

@ -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<DeliveryNoteCreateResponse>();
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);
}
}
}
}

View File

@ -10,5 +10,6 @@ namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes
Task<DeliveryNoteDto?> GetByDeliveryNoteNumberAsync(string deliveryNoteNumber);
Task<IEnumerable<DeliveryNoteDto>> GetByQuoteIdAsync(int quoteId);
Task<DeliveryNoteCreateResponse> CreateAndIssueAsync(DeliveryNoteCreateRequest request);
Task ExportPdfAsync(int deliveryNoteId, string deliveryNoteNumber);
}
}