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
}
}