diff --git a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj index c330ae92..d3c5425a 100644 --- a/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj +++ b/EnvelopeGenerator.ServiceHost/EnvelopeGenerator.ServiceHost.csproj @@ -17,6 +17,7 @@ + diff --git a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocument/rptEnvelopeHistory.cs b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocument/rptEnvelopeHistory.cs index 2a57be60..9387cfde 100644 --- a/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocument/rptEnvelopeHistory.cs +++ b/EnvelopeGenerator.ServiceHost/Jobs/FinalizeDocument/rptEnvelopeHistory.cs @@ -1,9 +1,94 @@ +using DevExpress.XtraReports.UI; +using DevExpress.Drawing; +using System.Drawing; using System.IO; namespace EnvelopeGenerator.ServiceHost.Jobs.FinalizeDocument; -public class rptEnvelopeHistory +public class rptEnvelopeHistory : XtraReport { + public rptEnvelopeHistory() + { + BuildLayout(); + } + + private void BuildLayout() + { + Bands.AddRange( + [ + new TopMarginBand(), + new BottomMarginBand(), + new ReportHeaderBand { HeightF = 40 }, + new PageHeaderBand { HeightF = 24 }, + new DetailBand { HeightF = 22 } + ]); + + var reportHeader = (ReportHeaderBand)Bands[nameof(ReportHeaderBand)]!; + var pageHeader = (PageHeaderBand)Bands[nameof(PageHeaderBand)]!; + var detail = (DetailBand)Bands[nameof(DetailBand)]!; + + var title = new XRLabel + { + BoundsF = new RectangleF(0, 0, 750, 28), + Font = new DXFont("Segoe UI", 14, DXFontStyle.Bold), + Text = "Envelope History" + }; + reportHeader.Controls.Add(title); + + var headerTable = CreateTable(isHeader: true); + pageHeader.Controls.Add(headerTable); + + var detailTable = CreateTable(isHeader: false); + detail.Controls.Add(detailTable); + + Margins = new DXMargins(40, 40, 40, 40); + PaperKind = (DevExpress.Drawing.Printing.DXPaperKind)System.Drawing.Printing.PaperKind.A4; + } + + private static XRTable CreateTable(bool isHeader) + { + var table = new XRTable + { + BoundsF = new RectangleF(0, 0, 750, 22), + Borders = DevExpress.XtraPrinting.BorderSide.All + }; + + var row = new XRTableRow(); + + if (isHeader) + { + row.Font = new DXFont("Segoe UI", 9, DXFontStyle.Bold); + row.BackColor = Color.Gainsboro; + row.Cells.Add(CreateCell("Date")); + row.Cells.Add(CreateCell("Status")); + row.Cells.Add(CreateCell("User")); + row.Cells.Add(CreateCell("Title")); + row.Cells.Add(CreateCell("Subject")); + } + else + { + row.Font = new DXFont("Segoe UI", 9, DXFontStyle.Regular); + row.Cells.Add(CreateCell("[ItemDate]")); + row.Cells.Add(CreateCell("[ItemStatusTranslated]")); + row.Cells.Add(CreateCell("[ItemUserReference]")); + row.Cells.Add(CreateCell("[EnvelopeTitle]")); + row.Cells.Add(CreateCell("[EnvelopeSubject]")); + } + + table.Rows.Add(row); + return table; + } + + private static XRTableCell CreateCell(string textOrExpression) + { + return new XRTableCell + { + Text = textOrExpression, + Padding = new DevExpress.XtraPrinting.PaddingInfo(4, 4, 2, 2), + CanGrow = false + }; + } + public object? DataSource { get; set; } public string? DataMember { get; set; }