109 lines
3.0 KiB
C#
109 lines
3.0 KiB
C#
using MediatR;
|
|
using EnvelopeGenerator.Application.Histories.Commands;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Application.EnvelopeReports;
|
|
using EnvelopeGenerator.Application.Exceptions;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using Microsoft.Extensions.Logging;
|
|
using EnvelopeGenerator.Application.VB;
|
|
|
|
namespace EnvelopeGenerator.Application.Pdf.Behaviors;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class AddReportBehavior : IPipelineBehavior<BurnPdfCommand, byte[]>
|
|
{
|
|
private readonly ISender _sender;
|
|
|
|
private readonly ILogger<AddReportBehavior> _logger;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="logger"></param>
|
|
public AddReportBehavior(ISender sender, ILogger<AddReportBehavior> logger)
|
|
{
|
|
_sender = sender;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <param name="next"></param>
|
|
/// <param name="cancel"></param>
|
|
/// <returns></returns>
|
|
public async Task<byte[]> Handle(BurnPdfCommand request, RequestHandlerDelegate<byte[]> next, CancellationToken cancel)
|
|
{
|
|
var docResult = await next(cancel);
|
|
|
|
if (!request.Debug)
|
|
await _sender.Send(new CreateHistoryCommand()
|
|
{
|
|
EnvelopeId = request.EnvelopeId,
|
|
UserReference = "System",
|
|
Status = EnvelopeStatus.EnvelopeReportCreated,
|
|
}, cancel);
|
|
|
|
docResult = await CreateReport(request.Envelope!, cancel);
|
|
|
|
var base64 = Convert.ToBase64String(docResult);
|
|
|
|
return docResult;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="envelope"></param>
|
|
/// <param name="cancel"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="CreateReportException"></exception>
|
|
public async Task<byte[]> CreateReport(Envelope envelope, CancellationToken cancel)
|
|
{
|
|
var oItems = await _sender.ReadEnvelopeReportAsync(envelope.Id, cancel: cancel);
|
|
|
|
if (!oItems.Any())
|
|
{
|
|
throw new CreateReportException("No report data found!");
|
|
}
|
|
|
|
var oBuffer = AddReportBehavior.DoCreateReport(oItems);
|
|
|
|
return oBuffer;
|
|
}
|
|
|
|
private static byte[] DoCreateReport(IEnumerable<EnvelopeReport> oItems)
|
|
{
|
|
var oSource = new ReportSource { Items = oItems };
|
|
var oReport = new rptEnvelopeHistory
|
|
{
|
|
DataSource = oSource,
|
|
DataMember = "Items"
|
|
};
|
|
|
|
// Creating report in memory
|
|
oReport.CreateDocument();
|
|
|
|
// Exporting report to stream
|
|
using var oStream = new MemoryStream();
|
|
oReport.ExportToPdf(oStream);
|
|
|
|
// Writing report to buffer
|
|
return oStream.ToArray();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class ReportSource
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public required IEnumerable<EnvelopeReport> Items { get; init; }
|
|
}
|
|
} |