namespace GoodBooks.PAY.PAYDAL.Query.Loyalty { /// /// SQL for MLOYALTYTIER — child table of MLOYALTYPROGRAM. /// Required indexes: /// MLOYALTYTIER: (LOYALTYPROGRAMID, SLNO) — covers ordered child fetch and tier-upgrade lookup /// public static class LoyaltyTierQB { /// /// Returns all tiers for a program in display order (SLNO ASC). /// Used when loading a program for editing or when building the enrollment response. /// No TENANTID filter on this table — access is always via LOYALTYPROGRAMID which is /// already scoped to a tenant at the program level. /// public const string GET_TIERS_BY_PROGRAM = @" SELECT T.LOYALTYTIERID AS LoyaltyTierId, T.LOYALTYPROGRAMID AS LoyaltyProgramId, T.SLNO AS SlNo, T.TIERCODE AS TierCode, T.TIERNAME AS TierName, T.MINPOINTS AS MinPoints, T.MAXPOINTS AS MaxPoints, T.EARNMULTIPLIER AS EarnMultiplier, T.REMARKS AS Remarks FROM MLOYALTYTIER T WHERE T.LOYALTYPROGRAMID = @LoyaltyProgramId ORDER BY T.SLNO ASC"; /// /// Inserts a single tier row. /// Called in a loop (BLL responsibility) after DELETE_LOYALTY_TIER_BY_PROGRAM on update, /// or after INSERT_LOYALTY_PROGRAM on create. Must run in the same transaction. /// public const string INSERT_LOYALTY_TIER = @" INSERT INTO MLOYALTYTIER ( LOYALTYTIERID, LOYALTYPROGRAMID, SLNO, TIERCODE, TIERNAME, MINPOINTS, MAXPOINTS, EARNMULTIPLIER, REMARKS ) VALUES ( @LoyaltyTierId, @LoyaltyProgramId, @SlNo, @TierCode, @TierName, @MinPoints, @MaxPoints, @EarnMultiplier, @Remarks )"; /// /// Returns the highest tier that a customer qualifies for based on their lifetime points. /// Used in tier-upgrade logic after a new earn entry is posted. /// Returns TOP 1 row ordered by MINPOINTS DESC so the highest matching tier wins. /// public const string GET_TIER_FOR_POINTS = @" SELECT TOP 1 T.LOYALTYTIERID AS LoyaltyTierId, T.LOYALTYPROGRAMID AS LoyaltyProgramId, T.SLNO AS SlNo, T.TIERCODE AS TierCode, T.TIERNAME AS TierName, T.MINPOINTS AS MinPoints, T.MAXPOINTS AS MaxPoints, T.EARNMULTIPLIER AS EarnMultiplier, T.REMARKS AS Remarks FROM MLOYALTYTIER T WHERE T.LOYALTYPROGRAMID = @LoyaltyProgramId AND T.MINPOINTS <= @LifetimePoints ORDER BY T.MINPOINTS DESC"; } }