Files
snippets/dotnet/uniconta/CreateCustomReport.cs
2022-02-23 16:14:58 +01:00

60 lines
1.7 KiB
C#

public async Task CreateCustomOfferReport(CrudAPI api, GiftProject giftProject)
{
var reportName = "Offerte 3";
var report = await LoadReport(api, reportName);
var order = ConvertProjectToOrder(giftProject);
report.DataSource = new List()
{
new UnicontaMasterDetail()
{
Master = order,
Details = order.OfferLines.ToArray()
}
};
var stream = new MemoryStream();
var pdfOptions = new PdfExportOptions();
await report.ExportToPdfAsync(stream, pdfOptions);
stream.Position = 0;
var data = stream.ToArray();
var fileName = "Offerte 123";
var attachment = new UserDocsClient()
{
_Data = data,
_Text = fileName,
_DocumentType = FileextensionsTypes.PDF
};
return attachment;
}
private static async Task LoadReport(CrudAPI api, string reportName)
{
var apiWrapper = new ApiWrapper(api);
var reports = await apiWrapper.Filter()
.WhereEqual(x => x.Name, reportName)
.Run();
var reportRow = reports.FirstOrDefault();
if (reportRow == null)
throw new Exception($"Kon rapport '{reportName}' niet vinden!");
// Load Layout bytes in repord
_ = await api.Read(reportRow);
var reportLayout = reportRow.Layout;
if (reportLayout == null)
throw new Exception($"Kon rapport '{reportName}' layout niet laden!");
XtraReport report;
try
{
report = ReportUtil.GetXtraReportFromLayout(reportLayout);
}
catch (Exception)
{
report = null;
}
if (report == null)
throw new Exception($"Kon rapport '{reportName}' niet laden! (error while loading layout)");
return report;
}