87 lines
4.4 KiB
C#
87 lines
4.4 KiB
C#
namespace ROLAC.API.Services.Disbursement;
|
|
|
|
/// <summary>
|
|
/// Field coordinates (in inches) for printing onto pre-printed three-stub check stock.
|
|
/// Every position is bound from the "CheckPrint:Layout" section of appsettings.json so alignment
|
|
/// can be tuned and reloaded without recompiling. Positions are expressed as an X (absolute from the
|
|
/// page's left edge) plus a Y offset within the field's stub; the per-stub origins below place the
|
|
/// three stacked regions (check + two identical receipt copies) down the 8.5"x11" page.
|
|
/// </summary>
|
|
public sealed class CheckPrintLayoutOptions
|
|
{
|
|
// Calibration nudge (inches): a TextBox renders its text inset down-and-right from the box
|
|
// origin by a fixed internal margin + line leading, so configured X/Y don't match the ink.
|
|
// These values are subtracted from every position so configured X/Y == actual printed position.
|
|
// To recalibrate: set both to 0, print, measure how far the ink sits past a known X/Y, and put
|
|
// those differences here (defaults are the measured inset for this stock).
|
|
public float TextInsetX { get; set; } = 0.13f;
|
|
public float TextInsetY { get; set; } = 0.15f;
|
|
|
|
// Stub origins — top edge of each region, inches from the top of the page.
|
|
public float CheckOriginY { get; set; } = 0f;
|
|
public float Receipt1OriginY { get; set; } = 3.67f;
|
|
public float Receipt2OriginY { get; set; } = 7.33f;
|
|
|
|
// Check stub fields (offset within the check stub).
|
|
public FieldPos Payee { get; set; } = new() { X = 1.25f, OffsetY = 1.75f, FontSize = 11, Bold = true };
|
|
public FieldPos AmountNumeric { get; set; } = new() { X = 6.50f, OffsetY = 1.75f, FontSize = 11, Bold = true };
|
|
public FieldPos AmountWords { get; set; } = new() { X = 0.60f, OffsetY = 2.20f, FontSize = 10 };
|
|
public FieldPos Memo { get; set; } = new() { X = 0.60f, OffsetY = 2.90f, FontSize = 9 };
|
|
public FieldPos CheckDate { get; set; } = new() { X = 6.50f, OffsetY = 1.25f, FontSize = 10 };
|
|
|
|
// Receipt stub fields (offset within a receipt stub — shared by both identical copies).
|
|
public FieldPos ReceiptPayee { get; set; } = new() { X = 1.00f, OffsetY = 0.30f, FontSize = 10, Bold = true };
|
|
public FieldPos ReceiptAmount { get; set; } = new() { X = 6.50f, OffsetY = 0.30f, FontSize = 10, Bold = true };
|
|
public FieldPos ReceiptMemo { get; set; } = new() { X = 1.00f, OffsetY = 0.60f, FontSize = 9 };
|
|
public FieldPos ReceiptDate { get; set; } = new() { X = 6.50f, OffsetY = 0.60f, FontSize = 9 };
|
|
|
|
// Voucher detail grid (offsets within a receipt stub).
|
|
public VoucherGridOptions Grid { get; set; } = new();
|
|
}
|
|
|
|
/// <summary>One printable field: where it sits and how it renders.</summary>
|
|
public sealed class FieldPos
|
|
{
|
|
/// <summary>Absolute X from the page's left edge, in inches.</summary>
|
|
public float X { get; set; }
|
|
|
|
/// <summary>Y offset within the field's stub, in inches (added to the stub origin).</summary>
|
|
public float OffsetY { get; set; }
|
|
|
|
public float FontSize { get; set; } = 10;
|
|
public bool Bold { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Two-column voucher detail grid on each receipt stub: 6 rows per column, 12 expense lines max,
|
|
/// filled column-major (lines 1-6 left, 7-12 right). All offsets are within the receipt stub.
|
|
/// </summary>
|
|
public sealed class VoucherGridOptions
|
|
{
|
|
/// <summary>Left edge of the left column block, in inches from the page's left edge.</summary>
|
|
public float OriginX { get; set; } = 0.60f;
|
|
|
|
/// <summary>Y offset (within the stub) of the first data row.</summary>
|
|
public float OffsetY { get; set; } = 1.10f;
|
|
|
|
public float RowHeight { get; set; } = 0.22f;
|
|
|
|
/// <summary>Horizontal gap between the left and right column blocks, in inches.</summary>
|
|
public float ColumnGap { get; set; } = 0.30f;
|
|
|
|
public float DateWidth { get; set; } = 0.85f;
|
|
public float DescWidth { get; set; } = 2.10f;
|
|
public float AmountWidth { get; set; } = 0.80f;
|
|
|
|
/// <summary>Draw our own Date/Description/Amount headers. Set false if the stock pre-prints them.</summary>
|
|
public bool ShowGridHeaders { get; set; } = true;
|
|
|
|
/// <summary>Y offset (within the stub) of the header row.</summary>
|
|
public float HeaderOffsetY { get; set; } = 0.88f;
|
|
|
|
/// <summary>Y offset (within the stub) of the "...and N more lines" overflow hint.</summary>
|
|
public float OverflowOffsetY { get; set; } = 2.55f;
|
|
|
|
public float FontSize { get; set; } = 8.5f;
|
|
}
|