|
<< Click to Display Table of Contents >> Navigation: iVend Database Database > User Defined Functions > fn_Loy_SlabWiseRedeamlePointAndAmount User Defined Function |
Navigation: iVend Database Database > User Defined Functions >
iVend 6.6 Database Help
fn_Loy_SlabWiseRedeamlePointAndAmount User Defined Function
Collapse All Expand All
iVend Database Database : fn_Loy_SlabWiseRedeamlePointAndAmount User Defined Function |
Properties
Creation Date |
4/13/2015 12:00 PM |
Encrypted |
|
Ansi Nulls |
|
Parameters
Parameter |
Direction |
Description |
Data Type |
Size |
@CardId |
In |
|
BigInt |
8 |
@AmountToBeRedeem |
In |
|
Numeric |
9 |
@MembershipSlabId |
In |
|
BigInt |
8 |
@TABLE_RETURN_VALUE |
Return Value |
Result table returned by table valued function |
Empty |
0 |
Procedure Source Code
-- ============================================= -- Author: <Munish Kumar> -- Create date: <20th June 2008> -- Description: <Get the redemable points detail slab wise from amount that is to be redeem.> -- ============================================= Create FUNCTION [dbo].[fn_Loy_SlabWiseRedeamlePointAndAmount] ( -- Add the parameters for the function here @CardId BIGINT, @AmountToBeRedeem DECIMAL(18,2), @MembershipSlabId BIGINT ) RETURNS @RedemablePointsAndAmount TABLE ( MembershipSlabId BIGINT, RedemablePoints BIGINT, RedemableAmount DECIMAL(18,2) ) AS BEGIN DECLARE @RedemptionMethodCode BIGINT DECLARE @RedemableAmountFromExitingPoint DECIMAL(18, 2) DECLARE @ActualRedemableAmount DECIMAL(18, 2) DECLARE @PointsConversionFactor FLOAT DECLARE @LocalCurrencyConversion FLOAT DECLARE @RedemptionPercent FLOAT DECLARE @RedeemablePoint BIGINT DECLARE @ExistingRedeemablePoint BIGINT DECLARE @SlabMinimumPoint BIGINT DECLARE @LoyaltyslabId BIGINT SELECT @RedemptionMethodCode = PointsRedemptionMethodId FROM LoyLoyaltyConfiguration SELECT @ExistingRedeemablePoint = AvailablePoints FROM LoyLoyaltyCard WHERE LoyLoyaltyCard.CardId = @CardId IF @RedemptionMethodCode = 1 ---Current Slab Only BEGIN /* Get all the calculat1on factor of exiting membership slab */ SELECT @PointsConversionFactor = PointsConversionFactor, @LocalCurrencyConversion = LocalCurrencyConversion, @RedemptionPercent = RedemptionPercent FROM LoyMembershipSlabDetails WHERE LoyMembershipSlabDetails.MembershipSlabId = @MembershipSlabId SET @RedemableAmountFromExitingPoint = (@LocalCurrencyConversion/@PointsConversionFactor) * @ExistingRedeemablePoint IF @RedemableAmountFromExitingPoint < @AmountToBeRedeem BEGIN SET @RedeemablePoint = NULL END ELSE BEGIN SET @RedeemablePoint = CONVERT(BIGINT, (@PointsConversionFactor/@LocalCurrencyConversion) * @ActualRedemableAmount) END INSERT INTO @RedemablePointsAndAmount VALUES (@MembershipSlabId, @RedeemablePoint, @ActualRedemableAmount) END ELSE IF @RedemptionMethodCode = 2 ---Slab Fall Back BEGIN /* *************************************Declare Varibales*************************************************** */ DECLARE @DataFromExitingPoints TABLE(LoyaltySlabId BIGINT, RedemablePoints BIGINT, RedemableAmount DECIMAL(18,2), PointsConversionFactor FLOAT, LocalCurrencyConversion FLOAT, MinimumPoints DECIMAL(18, 2)) DECLARE @DataFromAmountToBeRedeem TABLE(LoyaltySlabId BIGINT, RedemablePoints BIGINT, RedemableAmount DECIMAL(18,2)) DECLARE @CurrentMembershipMasterId BIGINT DECLARE @CurrentMembershipMinimumPoints BIGINT DECLARE @PointsTobeCalcualted BIGINT DECLARE @AmountAfterCalculation DECIMAL (18,2) /* ******************************************************************************************************** */ /*Get all slabs those fall in same membership slab of card's current slab*/ SELECT @RedemptionPercent = RedemptionPercent FROM LoyMembershipSlabDetails WHERE MembershipSlabid = @MembershipSlabId SELECT @CurrentMembershipMasterId = MembershipMasterId, @CurrentMembershipMinimumPoints = LoyMembershipSlabDetails.MinimumPoints FROM LoyMembershipSlabDetails WHERE MembershipSlabid = @MembershipSlabId DECLARE CalculatePoint CURSOR FOR SELECT LoyMembershipSlabDetails.LoyaltySlabId, LoyMembershipSlabDetails.MinimumPoints, LoyMembershipSlabDetails.PointsConversionFactor, LoyMembershipSlabDetails.LocalCurrencyConversion FROM LoyMembershipSlabDetails WHERE LoyMembershipSlabDetails.MembershipMasterId = @CurrentMembershipMasterId AND LoyMembershipSlabDetails.MinimumPoints <= @CurrentMembershipMinimumPoints ORDER BY MinimumPoints DESC OPEN CalculatePoint FETCH NEXT FROM CalculatePoint INTO @LoyaltyslabId, @SlabMinimumPoint, @PointsConversionFactor, @LocalCurrencyConversion WHILE @@FETCH_STATUS = 0 BEGIN SET @PointsTobeCalcualted = 0 IF @SlabMinimumPoint < @ExistingRedeemablePoint BEGIN SET @PointsTobeCalcualted = @ExistingRedeemablePoint - @SlabMinimumPoint SET @AmountAfterCalculation = (@LocalCurrencyConversion / @PointsConversionFactor) * @PointsTobeCalcualted INSERT INTO @DataFromExitingPoints VALUES(@LoyaltyslabId, @PointsTobeCalcualted, @AmountAfterCalculation, @PointsConversionFactor , @LocalCurrencyConversion, @SlabMinimumPoint) SET @ExistingRedeemablePoint = @ExistingRedeemablePoint - @PointsTobeCalcualted END FETCH NEXT FROM CalculatePoint INTO @LoyaltyslabId, @SlabMinimumPoint, @PointsConversionFactor, @LocalCurrencyConversion, @RedemptionPercent END CLOSE CalculatePoint DEALLOCATE CalcualtePoint SELECT @ActualRedemableAmount = SUM(RedemableAmount) FROM @DataFromExitingPoints IF @ActualRedemableAmount < @AmountToBeRedeem BEGIN INSERT INTO @RedemablePointsAndAmount VALUES (NULL, NULL, @AmountToBeRedeem) END ELSE IF @ActualRedemableAmount = @AmountToBeRedeem BEGIN INSERT INTO @RedemablePointsAndAmount SELECT LoyaltySlabId, RedemablePoints , RedemableAmount FROM @DataFromExitingPoints END ELSE BEGIN DECLARE @PayableAmountPoitnsPerSlab BIGINT DECLARE @PayableAmountPerSlab DECIMAL(18, 2) DECLARE @RestAmountToBeCalculated DECIMAL(18, 2) DECLARE @PointAfterCalculation BIGINT DECLARE CalculateAmount CURSOR FOR SELECT LoyaltySlabId, RedemablePoints, RedemableAmount, PointsConversionFactor , LocalCurrencyConversion FROM @DataFromExitingPoints ORDER BY MinimumPoints DESC OPEN CalculateAmount FETCH NEXT FROM CalculateAmount INTO @LoyaltyslabId, @PayableAmountPoitnsPerSlab, @PayableAmountPerSlab, @PointsConversionFactor, @LocalCurrencyConversion WHILE @@FETCH_STATUS = 0 BEGIN SET @RestAmountToBeCalculated = @AmountToBeRedeem - @PayableAmountPerSlab IF @RestAmountToBeCalculated <= 0 BEGIN SET @PointAfterCalculation = (@PointsConversionFactor/@LocalCurrencyConversion) * @AmountToBeRedeem INSERT INTO @DataFromAmountToBeRedeem VALUES(@LoyaltyslabId, @PointAfterCalculation, @AmountToBeRedeem) END ELSE BEGIN INSERT INTO @RedemablePointsAndAmount VALUES(@LoyaltyslabId, @PayableAmountPoitnsPerSlab, @PayableAmountPerSlab) SET @AmountToBeRedeem = @AmountToBeRedeem - @PayableAmountPerSlab FETCH NEXT FROM CalculateAmount INTO @LoyaltyslabId, @PayableAmountPoitnsPerSlab, @PayableAmountPerSlab, @PointsConversionFactor, @LocalCurrencyConversion END END CLOSE CalculatePoint DEALLOCATE CalcualtePoint END END RETURN END |
See Also
© 2019 All Rights Reserved.
Send comments on this topic.