using System; namespace GoodBooks.PAY.PAYDAL.DTO.Loyalty { /// /// Maps to TLOYALTYLEDGER — append-only double-entry points ledger. /// No Version/Status/SortOrder: this is a transactional log, not a master entity. /// LOYALTYLEDGERID is app-generated (not IDENTITY) — the caller must supply it /// via AutoNumber or a sequence before inserting. /// To reverse or expire, insert a new compensating row with negative POINTS. /// Never UPDATE or DELETE existing rows. /// PayOrderNo is a joined field from TPAYORDER (read-only). /// public class LoyaltyLedgerDTO { #region PrivateMembers private int loyaltyledgerid; private int enrollmentid; private int loyaltyprogramid; private int customerid; private byte entrytype; private decimal points; private int referenceorderid; private int earncfgid; private DateTime? expirydate; private string remarks; private int createdbyid; private DateTime createdon; private int tenantid; // Joined field private string payorderno; #endregion #region PublicProperties /// /// App-generated PK. Caller must supply a unique value (e.g. from an AutoNumber service) /// before calling InsertLedgerEntry. This is NOT an IDENTITY column. /// public int LoyaltyLedgerId { get { return loyaltyledgerid; } set { loyaltyledgerid = value; } } public int EnrollmentId { get { return enrollmentid; } set { enrollmentid = value; } } public int LoyaltyProgramId { get { return loyaltyprogramid; } set { loyaltyprogramid = value; } } public int CustomerId { get { return customerid; } set { customerid = value; } } /// 1=Earn, 2=Redeem, 3=Expire, 4=Adjust, 5=Reverse public byte EntryType { get { return entrytype; } set { entrytype = value; } } /// /// Points delta for this entry. Positive = credit (earn/adjust-up). /// Negative = debit (redeem/expire/reverse). Never zero. /// public decimal Points { get { return points; } set { points = value; } } /// FK to TPAYORDER. -1 when not linked to an order (e.g. manual adjustment). public int ReferenceOrderId { get { return referenceorderid; } set { referenceorderid = value; } } /// FK to MLOYALTYEARNCFG that triggered this earn. -1 for non-earn rows. public int EarnCfgId { get { return earncfgid; } set { earncfgid = value; } } /// /// Date the points in this row expire. NULL = never expires. /// Populated on Earn rows when PointsExpireDays > 0. /// public DateTime? ExpiryDate { get { return expirydate; } set { expirydate = value; } } public string Remarks { get { return remarks; } set { remarks = value; } } public int CreatedById { get { return createdbyid; } set { createdbyid = value; } } public DateTime CreatedOn { get { return createdon; } set { createdon = value; } } public int TenantId { get { return tenantid; } set { tenantid = value; } } // ── Joined field (read-only from TPAYORDER) ─────────────────────────── public string PayOrderNo { get { return payorderno; } set { payorderno = value; } } #endregion } }