USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[INBOUND_PROC_COMPLIANCE_RULE_DETAIL] Script Date: 9/27/2019 1:30:13 PM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* declare @complienceMessage varchar(1000) EXEC [INBOUND_PROC_COMPLIANCE_RULE_DETAIL] @flag= 'sender-limit',@IdType= 'Alien Registration Card',@IdNumber= '920412-5280049' ,@UsdAmount= '300.7001',@sCountryId= 151,@deliveryMethod= 1,@message= @complienceMessage OUTPUT select @complienceMessage */ CREATE PROC [dbo].[INBOUND_PROC_COMPLIANCE_RULE_DETAIL] @flag VARCHAR(30) = 'core' ,@sCountryId INT ,@deliveryMethod INT ,@UsdAmount MONEY ,@receiverName VARCHAR(50) = NULL ,@receiverMobile VARCHAR(25) = NULL ,@message VARCHAR(1000) = NULL OUTPUT ,@shortMessage VARCHAR(100) = NULL OUTPUT ,@errCode TINYINT = NULL OUTPUT ,@ruleId INT = NULL OUTPUT ,@IdNumber VARCHAR(50) = NULL ,@IdType VARCHAR(20) = NULL AS SET NOCOUNT ON /* 1> Get the data for per txn, monthly txn and yearly txn limit amount 2> Check for per txn limit, and return with proper error message if limit amount exceeded 3> Check for monthly txn limit, and return with proper error message if limit amount exceeded 4> Check for yearly txn limit, and return with proper error message if limit amount exceeded 5> Return success message and code if no issue with compliance rule */ BEGIN DECLARE @perTxnLimitAmt MONEY DECLARE @limitAmt MONEY DECLARE @comRuleId INT DECLARE @csMasterId INT DECLARE @YearStart DATE, @YearEnd DATE, @MonthStart DATE, @MonthEnd DATE, @ruleType CHAR(1),@pCountryId INT=118 SELECT @YearStart = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) ,@YearEnd = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) ,@MonthStart = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) ,@MonthEnd = DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)) IF @flag = 'core' BEGIN --Checking for per txn limit (if country wise rule is defined the pick country wise) IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND cm.sCountry = @sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 0 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 0 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN PRINT 'core11' SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 0 AND CM.rCountry=@pCountryId AND cm.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END IF @UsdAmount > @limitAmt--@SettlingAmount > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because the transaction amount ('+CAST(@UsdAmount AS VARCHAR)+' USD), is exceeded as per transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD).' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per txn limit exceeded.' RETURN END CREATE TABLE #tempTran(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, sIdType VARCHAR(50),sIdNo VARCHAR(50),approvedDate DATETIME ,createdDate DATETIME,tranStatus VARCHAR(20)) CREATE TABLE #tempTranR(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, approvedDate DATETIME, createdDate DATETIME, tranStatus VARCHAR(20) ,receiverName VARCHAR(50)) DECLARE @sql VARCHAR(MAX) ,@cutOffDate VARCHAR(10) = CONVERT(VARCHAR, DATEADD(Day,-365, GETDATE()), 101) ,@sumTxnAmt MONEY ,@sumTxnAmtUSD MONEY -- Get the record of 365 days into temp table INSERT INTO #tempTran(id,SettlingAmount,UsdAmount,sIdType,sIdNo,approvedDate,createdDate,tranStatus) SELECT r.id,r.SettlementAmt, R.UsdAmount ,s.idType,s.idNumber,r.approvedDate,r.createdDate,r.tranStatus FROM dbo.INBOUND_VIEW_REMIT_TRAN R(nolock) INNER JOIN dbo.INBOUND_VIEW_TRAN_SENDERS S(NOLOCK) ON S.tranId = R.id WHERE r.tranStatus <> 'Cancel' AND S.idNumber = @IdNumber AND R.approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59' --##START#####--Check for DAILY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND cm.sCountry = @sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 1 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTran WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE() IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per day transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' --SELECT @errCode = 1, @message = 'Daily txn limit exceeded.', @ruleId = @comRuleId SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded.'+@ruleType RETURN END --##END#####--Check for DAILY txn limit exceeded or not --##START#####--Check for MONTHLY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND cm.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 30 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTran WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59' IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per month transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Monthly txn limit exceeded.' RETURN END --##END#####--Check for MONTHLY txn limit exceeded or not --##START#####----Check for YEARLY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 365 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTran IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per year transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Yearly txn limit exceeded.' RETURN END --##END#####----Check for YEARLY txn limit exceeded or not IF ISNULL(@receiverName, '') = '' BEGIN SELECT @errCode = 0, @message = 'Success', @ruleId = 0 RETURN END -- ## Start of multiple sender same Reciever txn limit INSERT INTO #tempTranR(id,SettlingAmount, UsdAmount,receiverName,approvedDate,createdDate,tranStatus) SELECT rt.id,rt.SettlementAmt, rt.UsdAmount,rt.receiverName ,approvedDate,createdDate,tranStatus FROM dbo.INBOUND_VIEW_REMIT_TRAN rt WITH(NOLOCK) INNER JOIN dbo.INBOUND_VIEW_TRAN_RECEIVERS tr(NOLOCK) ON rt.id=tr.tranId WHERE rt.receiverName = @receiverName AND rt.tranStatus <> 'CANCEL' --AND TR.mobile LIKE '%' + @receiverMobile AND approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59' -- Per Day Txn limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 1 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTranR WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE() IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is in hold because same reciever per day transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded for same receiver.' RETURN END -- per month Txn Limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 30 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTranR WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59' IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is inhold because same reciever per month transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per month limit exceeded for same receiver.' RETURN END --- per year Txn Limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 365 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTranR IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is inhold because same reciever per year transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per year limit exceeded for same receiver.' RETURN END --Return success message if there is no complaince matched txn SELECT @errCode = 0, @message = 'Success', @ruleId = 0 RETURN END ELSE IF @flag = 'sender-limit' BEGIN --Checking for per txn limit (if country wise rule is defined the pick country wise) IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 0 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 0 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 0 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END IF @UsdAmount > @limitAmt--@SettlingAmount > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because the transaction amount ('+CAST(@UsdAmount AS VARCHAR)+' USD), is exceeded as per transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD).' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per txn limit exceeded.' RETURN END CREATE TABLE #tempTransaction(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, sIdType VARCHAR(50),sIdNo VARCHAR(50),approvedDate DATETIME ,createdDate DATETIME,tranStatus VARCHAR(20)) -- Get the record of 365 days into temp table INSERT INTO #tempTransaction(id,SettlingAmount,UsdAmount,sIdType,sIdNo,approvedDate,createdDate,tranStatus) SELECT r.id,r.SettlementAmt, R.UsdAmount ,s.idType,s.idNumber,r.approvedDate,r.createdDate,r.tranStatus FROM dbo.INBOUND_VIEW_REMIT_TRAN R(nolock) INNER JOIN dbo.INBOUND_VIEW_TRAN_SENDERS S(nolock) ON R.ID = S.tranId WHERE r.tranStatus <> 'Cancel' AND S.idNumber = @IdNumber AND r.approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59' --AND S.idNumber=@sIdNo --AND S.idType = @sIdType --and s.country= @country --##START#####--Check for DAILY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry= @sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 1 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransaction WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE() IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per day transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' --SELECT @errCode = 1, @message = 'Daily txn limit exceeded.', @ruleId = @comRuleId SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded.' RETURN END --##END#####--Check for DAILY txn limit exceeded or not --##START#####--Check for MONTHLY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND cm.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 30 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransaction WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59' IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per month transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Monthly txn limit exceeded.' RETURN END --##END#####--Check for MONTHLY txn limit exceeded or not --##START#####----Check for YEARLY txn limit exceeded or not IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry= @sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 365 AND condition = 4600) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4600 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransaction --SELECT @sumTxnAmtUSD,@UsdAmount,@limitAmt IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is '+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+' because previous transaction sum is ('+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD) and by doing this transaction ('+CAST(@UsdAmount AS VARCHAR)+' USD) per year transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Yearly txn limit exceeded.' RETURN END --##END#####----Check for YEARLY txn limit exceeded or not IF ISNULL(@receiverName, '') = '' BEGIN SELECT @errCode = 0, @message = 'Success', @ruleId = 0 RETURN END END ELSE IF @flag = 'receiver-limit' BEGIN CREATE TABLE #tempTransactionR(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, approvedDate DATETIME, createdDate DATETIME, tranStatus VARCHAR(20) ,receiverName VARCHAR(50)) SET @receiverMobile = '%' + @receiverMobile -- ## Start of multiple sender same Reciever txn limit INSERT INTO #tempTransactionR(id,SettlingAmount, UsdAmount,receiverName,approvedDate,createdDate,tranStatus) SELECT rt.id,rt.SettlementAmt, rt.UsdAmount,tr.firstName,approvedDate,createdDate,tranStatus FROM dbo.INBOUND_VIEW_REMIT_TRAN rt WITH(NOLOCK) INNER JOIN dbo.INBOUND_VIEW_TRAN_RECEIVERS tr WITH(NOLOCK) ON tr.tranId = rt.id WHERE rt.receiverName = @receiverName AND rt.tranStatus <> 'CANCEL' --AND tr.mobile LIKE @receiverMobile AND approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59' -- Per Day Txn limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 1 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 1 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransactionR WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE() IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is in hold because same reciever per day transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded for same receiver.' RETURN END -- per month Txn Limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 30 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 30 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransactionR WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59' IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is inhold because same reciever per month transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per month limit exceeded for same receiver.' RETURN END --- per year Txn Limit check IF EXISTS(SELECT 1 FROM csMaster CM(NOLOCK) INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId WHERE CM.rCountry = @pCountryId AND CM.sCountry=@sCountryId AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' AND ISNULL(CM.isEnable, 'Y') = 'Y' AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND CD.period = 365 AND condition = 4603) BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END ELSE --if not countrywise then then the rule defined for all countries BEGIN SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction FROM ( SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction, hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END FROM dbo.csDetail CD(NOLOCK) INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId WHERE CD.period = 365 AND CM.rCountry = @pCountryId AND CM.sCountry IS NULL AND CD.condition = 4603 AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod AND ISNULL(CD.isActive, 'Y') = 'Y' AND ISNULL(CD.isDeleted, 'N') = 'N' AND ISNULL(CD.isEnable, 'Y') = 'Y' AND ISNULL(CM.isActive, 'Y') = 'Y' AND ISNULL(CM.isDeleted, 'N') = 'N' )X ORDER BY X.hasDeliveryMethod DESC END SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)), @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0)) FROM #tempTransactionR IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt BEGIN SET @message = 'The transaction is inhold because same reciever per year transaction Limit ('+CAST(@limitAmt AS VARCHAR)+' USD) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)' SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per year limit exceeded for same receiver.' RETURN END --Return success message if there is no complaince matched txn SELECT @errCode = 0, @message = 'Success', @ruleId = 0 RETURN END END GO