You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

983 lines
93 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[INBOUND_PROC_COMPLIANCE_RULE_DETAIL] Script Date: 9/27/2019 1:30:13 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. /*
  9. declare @complienceMessage varchar(1000)
  10. EXEC [INBOUND_PROC_COMPLIANCE_RULE_DETAIL]
  11. @flag= 'sender-limit',@IdType= 'Alien Registration Card',@IdNumber= '920412-5280049'
  12. ,@UsdAmount= '300.7001',@sCountryId= 151,@deliveryMethod= 1,@message= @complienceMessage OUTPUT
  13. select @complienceMessage
  14. */
  15. CREATE PROC [dbo].[INBOUND_PROC_COMPLIANCE_RULE_DETAIL]
  16. @flag VARCHAR(30) = 'core'
  17. ,@sCountryId INT
  18. ,@deliveryMethod INT
  19. ,@UsdAmount MONEY
  20. ,@receiverName VARCHAR(50) = NULL
  21. ,@receiverMobile VARCHAR(25) = NULL
  22. ,@message VARCHAR(1000) = NULL OUTPUT
  23. ,@shortMessage VARCHAR(100) = NULL OUTPUT
  24. ,@errCode TINYINT = NULL OUTPUT
  25. ,@ruleId INT = NULL OUTPUT
  26. ,@IdNumber VARCHAR(50) = NULL
  27. ,@IdType VARCHAR(20) = NULL
  28. AS
  29. SET NOCOUNT ON
  30. /*
  31. 1> Get the data for per txn, monthly txn and yearly txn limit amount
  32. 2> Check for per txn limit, and return with proper error message if limit amount exceeded
  33. 3> Check for monthly txn limit, and return with proper error message if limit amount exceeded
  34. 4> Check for yearly txn limit, and return with proper error message if limit amount exceeded
  35. 5> Return success message and code if no issue with compliance rule
  36. */
  37. BEGIN
  38. DECLARE @perTxnLimitAmt MONEY
  39. DECLARE @limitAmt MONEY
  40. DECLARE @comRuleId INT
  41. DECLARE @csMasterId INT
  42. DECLARE @YearStart DATE, @YearEnd DATE, @MonthStart DATE, @MonthEnd DATE, @ruleType CHAR(1),@pCountryId INT=118
  43. SELECT @YearStart = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0)
  44. ,@YearEnd = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1)
  45. ,@MonthStart = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)
  46. ,@MonthEnd = DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0))
  47. IF @flag = 'core'
  48. BEGIN
  49. --Checking for per txn limit (if country wise rule is defined the pick country wise)
  50. IF EXISTS(SELECT 1
  51. FROM csMaster CM(NOLOCK)
  52. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  53. 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'
  54. 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)
  55. BEGIN
  56. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  57. FROM (
  58. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  59. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  60. FROM dbo.csDetail CD(NOLOCK)
  61. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  62. WHERE CD.period = 0
  63. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  64. AND CD.condition = 4600
  65. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  66. AND ISNULL(CD.isActive, 'Y') = 'Y'
  67. AND ISNULL(CD.isDeleted, 'N') = 'N'
  68. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  69. AND ISNULL(CM.isActive, 'Y') = 'Y'
  70. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  71. ORDER BY X.hasDeliveryMethod DESC
  72. END
  73. ELSE --if not countrywise then then the rule defined for all countries
  74. BEGIN
  75. PRINT 'core11'
  76. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  77. FROM (
  78. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  79. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  80. FROM dbo.csDetail CD(NOLOCK)
  81. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  82. WHERE CD.period = 0
  83. AND CM.rCountry=@pCountryId
  84. AND cm.sCountry IS NULL
  85. AND CD.condition = 4600
  86. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  87. AND ISNULL(CD.isActive, 'Y') = 'Y'
  88. AND ISNULL(CD.isDeleted, 'N') = 'N'
  89. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  90. AND ISNULL(CM.isActive, 'Y') = 'Y'
  91. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  92. ORDER BY X.hasDeliveryMethod DESC
  93. END
  94. IF @UsdAmount > @limitAmt--@SettlingAmount > @limitAmt
  95. BEGIN
  96. SET @message = 'The transaction is
  97. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because the transaction
  98. amount (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>), is exceeded as <b>per transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>).'
  99. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per txn limit exceeded.'
  100. RETURN
  101. END
  102. CREATE TABLE #tempTran(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, sIdType VARCHAR(50),sIdNo VARCHAR(50),approvedDate DATETIME
  103. ,createdDate DATETIME,tranStatus VARCHAR(20))
  104. CREATE TABLE #tempTranR(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, approvedDate DATETIME, createdDate DATETIME, tranStatus VARCHAR(20)
  105. ,receiverName VARCHAR(50))
  106. DECLARE
  107. @sql VARCHAR(MAX)
  108. ,@cutOffDate VARCHAR(10) = CONVERT(VARCHAR, DATEADD(Day,-365, GETDATE()), 101)
  109. ,@sumTxnAmt MONEY
  110. ,@sumTxnAmtUSD MONEY
  111. -- Get the record of 365 days into temp table
  112. INSERT INTO #tempTran(id,SettlingAmount,UsdAmount,sIdType,sIdNo,approvedDate,createdDate,tranStatus)
  113. SELECT r.id,r.SettlementAmt, R.UsdAmount ,s.idType,s.idNumber,r.approvedDate,r.createdDate,r.tranStatus
  114. FROM dbo.INBOUND_VIEW_REMIT_TRAN R(nolock)
  115. INNER JOIN dbo.INBOUND_VIEW_TRAN_SENDERS S(NOLOCK) ON S.tranId = R.id
  116. WHERE r.tranStatus <> 'Cancel'
  117. AND S.idNumber = @IdNumber
  118. AND R.approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59'
  119. --##START#####--Check for DAILY txn limit exceeded or not
  120. IF EXISTS(SELECT 1
  121. FROM csMaster CM(NOLOCK)
  122. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  123. 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'
  124. 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)
  125. BEGIN
  126. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  127. FROM (
  128. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  129. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  130. FROM dbo.csDetail CD(NOLOCK)
  131. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  132. WHERE CD.period = 1
  133. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  134. AND CD.condition = 4600
  135. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  136. AND ISNULL(CD.isActive, 'Y') = 'Y'
  137. AND ISNULL(CD.isDeleted, 'N') = 'N'
  138. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  139. AND ISNULL(CM.isActive, 'Y') = 'Y'
  140. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  141. ORDER BY X.hasDeliveryMethod DESC
  142. END
  143. ELSE --if not countrywise then then the rule defined for all countries
  144. BEGIN
  145. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  146. FROM (
  147. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  148. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  149. FROM dbo.csDetail CD(NOLOCK)
  150. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  151. WHERE CD.period = 1
  152. AND CM.rCountry = @pCountryId
  153. AND CM.sCountry IS NULL
  154. AND CD.condition = 4600
  155. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  156. AND ISNULL(CD.isActive, 'Y') = 'Y'
  157. AND ISNULL(CD.isDeleted, 'N') = 'N'
  158. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  159. AND ISNULL(CM.isActive, 'Y') = 'Y'
  160. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  161. ORDER BY X.hasDeliveryMethod DESC
  162. END
  163. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  164. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  165. FROM #tempTran
  166. WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE()
  167. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  168. BEGIN
  169. SET @message = 'The transaction is
  170. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  171. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  172. <b>per day transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  173. --SELECT @errCode = 1, @message = 'Daily txn limit exceeded.', @ruleId = @comRuleId
  174. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded.'+@ruleType
  175. RETURN
  176. END
  177. --##END#####--Check for DAILY txn limit exceeded or not
  178. --##START#####--Check for MONTHLY txn limit exceeded or not
  179. IF EXISTS(SELECT 1
  180. FROM csMaster CM(NOLOCK)
  181. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  182. 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'
  183. 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)
  184. BEGIN
  185. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  186. FROM (
  187. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  188. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  189. FROM dbo.csDetail CD(NOLOCK)
  190. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  191. WHERE CD.period = 30
  192. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  193. AND CD.condition = 4600
  194. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  195. AND ISNULL(CD.isActive, 'Y') = 'Y'
  196. AND ISNULL(CD.isDeleted, 'N') = 'N'
  197. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  198. AND ISNULL(CM.isActive, 'Y') = 'Y'
  199. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  200. ORDER BY X.hasDeliveryMethod DESC
  201. END
  202. ELSE --if not countrywise then then the rule defined for all countries
  203. BEGIN
  204. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  205. FROM (
  206. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  207. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  208. FROM dbo.csDetail CD(NOLOCK)
  209. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  210. WHERE CD.period = 30
  211. AND CM.rCountry = @pCountryId
  212. AND CM.sCountry IS NULL
  213. AND CD.condition = 4600
  214. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  215. AND ISNULL(CD.isActive, 'Y') = 'Y'
  216. AND ISNULL(CD.isDeleted, 'N') = 'N'
  217. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  218. AND ISNULL(CM.isActive, 'Y') = 'Y'
  219. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  220. ORDER BY X.hasDeliveryMethod DESC
  221. END
  222. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  223. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  224. FROM #tempTran
  225. WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59'
  226. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  227. BEGIN
  228. SET @message = 'The transaction is
  229. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  230. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  231. <b>per month transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  232. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Monthly txn limit exceeded.'
  233. RETURN
  234. END
  235. --##END#####--Check for MONTHLY txn limit exceeded or not
  236. --##START#####----Check for YEARLY txn limit exceeded or not
  237. IF EXISTS(SELECT 1
  238. FROM csMaster CM(NOLOCK)
  239. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  240. 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'
  241. 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)
  242. BEGIN
  243. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  244. FROM (
  245. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  246. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  247. FROM dbo.csDetail CD(NOLOCK)
  248. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  249. WHERE CD.period = 365
  250. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  251. AND CD.condition = 4600
  252. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  253. AND ISNULL(CD.isActive, 'Y') = 'Y'
  254. AND ISNULL(CD.isDeleted, 'N') = 'N'
  255. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  256. AND ISNULL(CM.isActive, 'Y') = 'Y'
  257. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  258. ORDER BY X.hasDeliveryMethod DESC
  259. END
  260. ELSE --if not countrywise then then the rule defined for all countries
  261. BEGIN
  262. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  263. FROM (
  264. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  265. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  266. FROM dbo.csDetail CD(NOLOCK)
  267. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  268. WHERE CD.period = 365
  269. AND CM.rCountry = @pCountryId
  270. AND CM.sCountry IS NULL
  271. AND CD.condition = 4600
  272. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  273. AND ISNULL(CD.isActive, 'Y') = 'Y'
  274. AND ISNULL(CD.isDeleted, 'N') = 'N'
  275. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  276. AND ISNULL(CM.isActive, 'Y') = 'Y'
  277. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  278. ORDER BY X.hasDeliveryMethod DESC
  279. END
  280. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  281. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  282. FROM #tempTran
  283. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  284. BEGIN
  285. SET @message = 'The transaction is
  286. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  287. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  288. <b>per year transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  289. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Yearly txn limit exceeded.'
  290. RETURN
  291. END
  292. --##END#####----Check for YEARLY txn limit exceeded or not
  293. IF ISNULL(@receiverName, '') = ''
  294. BEGIN
  295. SELECT @errCode = 0, @message = 'Success', @ruleId = 0
  296. RETURN
  297. END
  298. -- ## Start of multiple sender same Reciever txn limit
  299. INSERT INTO #tempTranR(id,SettlingAmount, UsdAmount,receiverName,approvedDate,createdDate,tranStatus)
  300. SELECT rt.id,rt.SettlementAmt, rt.UsdAmount,rt.receiverName ,approvedDate,createdDate,tranStatus
  301. FROM dbo.INBOUND_VIEW_REMIT_TRAN rt WITH(NOLOCK)
  302. INNER JOIN dbo.INBOUND_VIEW_TRAN_RECEIVERS tr(NOLOCK) ON rt.id=tr.tranId
  303. WHERE rt.receiverName = @receiverName AND rt.tranStatus <> 'CANCEL'
  304. --AND TR.mobile LIKE '%' + @receiverMobile
  305. AND approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59'
  306. -- Per Day Txn limit check
  307. IF EXISTS(SELECT 1
  308. FROM csMaster CM(NOLOCK)
  309. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  310. 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'
  311. 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)
  312. BEGIN
  313. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  314. FROM (
  315. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  316. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  317. FROM dbo.csDetail CD(NOLOCK)
  318. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  319. WHERE CD.period = 1
  320. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  321. AND CD.condition = 4603
  322. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  323. AND ISNULL(CD.isActive, 'Y') = 'Y'
  324. AND ISNULL(CD.isDeleted, 'N') = 'N'
  325. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  326. AND ISNULL(CM.isActive, 'Y') = 'Y'
  327. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  328. ORDER BY X.hasDeliveryMethod DESC
  329. END
  330. ELSE --if not countrywise then then the rule defined for all countries
  331. BEGIN
  332. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  333. FROM (
  334. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  335. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  336. FROM dbo.csDetail CD(NOLOCK)
  337. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  338. WHERE CD.period = 1
  339. AND CM.rCountry = @pCountryId
  340. AND CM.sCountry IS NULL
  341. AND CD.condition = 4603
  342. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  343. AND ISNULL(CD.isActive, 'Y') = 'Y'
  344. AND ISNULL(CD.isDeleted, 'N') = 'N'
  345. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  346. AND ISNULL(CM.isActive, 'Y') = 'Y'
  347. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  348. ORDER BY X.hasDeliveryMethod DESC
  349. END
  350. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  351. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  352. FROM #tempTranR
  353. WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE()
  354. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  355. BEGIN
  356. SET @message = 'The transaction is in <b style=''background-color:red; color:white;''>hold</b> because same reciever
  357. <b>per day transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  358. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded for same receiver.'
  359. RETURN
  360. END
  361. -- per month Txn Limit check
  362. IF EXISTS(SELECT 1
  363. FROM csMaster CM(NOLOCK)
  364. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  365. 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'
  366. 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)
  367. BEGIN
  368. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  369. FROM (
  370. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  371. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  372. FROM dbo.csDetail CD(NOLOCK)
  373. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  374. WHERE CD.period = 30
  375. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  376. AND CD.condition = 4603
  377. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  378. AND ISNULL(CD.isActive, 'Y') = 'Y'
  379. AND ISNULL(CD.isDeleted, 'N') = 'N'
  380. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  381. AND ISNULL(CM.isActive, 'Y') = 'Y'
  382. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  383. ORDER BY X.hasDeliveryMethod DESC
  384. END
  385. ELSE --if not countrywise then then the rule defined for all countries
  386. BEGIN
  387. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  388. FROM (
  389. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  390. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  391. FROM dbo.csDetail CD(NOLOCK)
  392. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  393. WHERE CD.period = 30
  394. AND CM.rCountry = @pCountryId
  395. AND CM.sCountry IS NULL
  396. AND CD.condition = 4603
  397. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  398. AND ISNULL(CD.isActive, 'Y') = 'Y'
  399. AND ISNULL(CD.isDeleted, 'N') = 'N'
  400. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  401. AND ISNULL(CM.isActive, 'Y') = 'Y'
  402. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  403. ORDER BY X.hasDeliveryMethod DESC
  404. END
  405. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  406. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  407. FROM #tempTranR
  408. WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59'
  409. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  410. BEGIN
  411. SET @message = 'The transaction is in<b style=''background-color:red; color:white;''>hold</b> because same reciever
  412. <b>per month transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  413. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per month limit exceeded for same receiver.'
  414. RETURN
  415. END
  416. --- per year Txn Limit check
  417. IF EXISTS(SELECT 1
  418. FROM csMaster CM(NOLOCK)
  419. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  420. 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'
  421. 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)
  422. BEGIN
  423. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  424. FROM (
  425. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  426. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  427. FROM dbo.csDetail CD(NOLOCK)
  428. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  429. WHERE CD.period = 365
  430. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  431. AND CD.condition = 4603
  432. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  433. AND ISNULL(CD.isActive, 'Y') = 'Y'
  434. AND ISNULL(CD.isDeleted, 'N') = 'N'
  435. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  436. AND ISNULL(CM.isActive, 'Y') = 'Y'
  437. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  438. ORDER BY X.hasDeliveryMethod DESC
  439. END
  440. ELSE --if not countrywise then then the rule defined for all countries
  441. BEGIN
  442. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  443. FROM (
  444. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  445. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  446. FROM dbo.csDetail CD(NOLOCK)
  447. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  448. WHERE CD.period = 365
  449. AND CM.rCountry = @pCountryId
  450. AND CM.sCountry IS NULL
  451. AND CD.condition = 4603
  452. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  453. AND ISNULL(CD.isActive, 'Y') = 'Y'
  454. AND ISNULL(CD.isDeleted, 'N') = 'N'
  455. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  456. AND ISNULL(CM.isActive, 'Y') = 'Y'
  457. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  458. ORDER BY X.hasDeliveryMethod DESC
  459. END
  460. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  461. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  462. FROM #tempTranR
  463. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  464. BEGIN
  465. SET @message = 'The transaction is in<b style=''background-color:red; color:white;''>hold</b> because same reciever
  466. <b>per year transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  467. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per year limit exceeded for same receiver.'
  468. RETURN
  469. END
  470. --Return success message if there is no complaince matched txn
  471. SELECT @errCode = 0, @message = 'Success', @ruleId = 0
  472. RETURN
  473. END
  474. ELSE IF @flag = 'sender-limit'
  475. BEGIN
  476. --Checking for per txn limit (if country wise rule is defined the pick country wise)
  477. IF EXISTS(SELECT 1
  478. FROM csMaster CM(NOLOCK)
  479. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  480. 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'
  481. 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)
  482. BEGIN
  483. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  484. FROM (
  485. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  486. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  487. FROM dbo.csDetail CD(NOLOCK)
  488. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  489. WHERE CD.period = 0
  490. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  491. AND CD.condition = 4600
  492. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  493. AND ISNULL(CD.isActive, 'Y') = 'Y'
  494. AND ISNULL(CD.isDeleted, 'N') = 'N'
  495. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  496. AND ISNULL(CM.isActive, 'Y') = 'Y'
  497. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  498. ORDER BY X.hasDeliveryMethod DESC
  499. END
  500. ELSE --if not countrywise then then the rule defined for all countries
  501. BEGIN
  502. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  503. FROM (
  504. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  505. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  506. FROM dbo.csDetail CD(NOLOCK)
  507. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  508. WHERE CD.period = 0
  509. AND CM.rCountry = @pCountryId
  510. AND CM.sCountry IS NULL
  511. AND CD.condition = 4600
  512. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  513. AND ISNULL(CD.isActive, 'Y') = 'Y'
  514. AND ISNULL(CD.isDeleted, 'N') = 'N'
  515. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  516. AND ISNULL(CM.isActive, 'Y') = 'Y'
  517. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  518. ORDER BY X.hasDeliveryMethod DESC
  519. END
  520. IF @UsdAmount > @limitAmt--@SettlingAmount > @limitAmt
  521. BEGIN
  522. SET @message = 'The transaction is
  523. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because the transaction
  524. amount (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>), is exceeded as <b>per transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>).'
  525. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per txn limit exceeded.'
  526. RETURN
  527. END
  528. CREATE TABLE #tempTransaction(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, sIdType VARCHAR(50),sIdNo VARCHAR(50),approvedDate DATETIME
  529. ,createdDate DATETIME,tranStatus VARCHAR(20))
  530. -- Get the record of 365 days into temp table
  531. INSERT INTO #tempTransaction(id,SettlingAmount,UsdAmount,sIdType,sIdNo,approvedDate,createdDate,tranStatus)
  532. SELECT r.id,r.SettlementAmt, R.UsdAmount ,s.idType,s.idNumber,r.approvedDate,r.createdDate,r.tranStatus
  533. FROM dbo.INBOUND_VIEW_REMIT_TRAN R(nolock)
  534. INNER JOIN dbo.INBOUND_VIEW_TRAN_SENDERS S(nolock) ON R.ID = S.tranId
  535. WHERE r.tranStatus <> 'Cancel'
  536. AND S.idNumber = @IdNumber
  537. AND r.approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59'
  538. --AND S.idNumber=@sIdNo --AND S.idType = @sIdType
  539. --and s.country= @country
  540. --##START#####--Check for DAILY txn limit exceeded or not
  541. IF EXISTS(SELECT 1
  542. FROM csMaster CM(NOLOCK)
  543. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  544. 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'
  545. 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)
  546. BEGIN
  547. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  548. FROM (
  549. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  550. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  551. FROM dbo.csDetail CD(NOLOCK)
  552. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  553. WHERE CD.period = 1
  554. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  555. AND CD.condition = 4600
  556. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  557. AND ISNULL(CD.isActive, 'Y') = 'Y'
  558. AND ISNULL(CD.isDeleted, 'N') = 'N'
  559. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  560. AND ISNULL(CM.isActive, 'Y') = 'Y'
  561. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  562. ORDER BY X.hasDeliveryMethod DESC
  563. END
  564. ELSE --if not countrywise then then the rule defined for all countries
  565. BEGIN
  566. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  567. FROM (
  568. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  569. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  570. FROM dbo.csDetail CD(NOLOCK)
  571. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  572. WHERE CD.period = 1
  573. AND CM.rCountry = @pCountryId
  574. AND CM.sCountry IS NULL
  575. AND CD.condition = 4600
  576. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  577. AND ISNULL(CD.isActive, 'Y') = 'Y'
  578. AND ISNULL(CD.isDeleted, 'N') = 'N'
  579. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  580. AND ISNULL(CM.isActive, 'Y') = 'Y'
  581. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  582. ORDER BY X.hasDeliveryMethod DESC
  583. END
  584. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  585. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  586. FROM #tempTransaction
  587. WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE()
  588. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  589. BEGIN
  590. SET @message = 'The transaction is
  591. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  592. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  593. <b>per day transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  594. --SELECT @errCode = 1, @message = 'Daily txn limit exceeded.', @ruleId = @comRuleId
  595. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded.'
  596. RETURN
  597. END
  598. --##END#####--Check for DAILY txn limit exceeded or not
  599. --##START#####--Check for MONTHLY txn limit exceeded or not
  600. IF EXISTS(SELECT 1
  601. FROM csMaster CM(NOLOCK)
  602. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  603. 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'
  604. 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)
  605. BEGIN
  606. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  607. FROM (
  608. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  609. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  610. FROM dbo.csDetail CD(NOLOCK)
  611. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  612. WHERE CD.period = 30
  613. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  614. AND CD.condition = 4600
  615. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  616. AND ISNULL(CD.isActive, 'Y') = 'Y'
  617. AND ISNULL(CD.isDeleted, 'N') = 'N'
  618. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  619. AND ISNULL(CM.isActive, 'Y') = 'Y'
  620. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  621. ORDER BY X.hasDeliveryMethod DESC
  622. END
  623. ELSE --if not countrywise then then the rule defined for all countries
  624. BEGIN
  625. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  626. FROM (
  627. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  628. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  629. FROM dbo.csDetail CD(NOLOCK)
  630. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  631. WHERE CD.period = 30
  632. AND CM.rCountry = @pCountryId
  633. AND CM.sCountry IS NULL
  634. AND CD.condition = 4600
  635. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  636. AND ISNULL(CD.isActive, 'Y') = 'Y'
  637. AND ISNULL(CD.isDeleted, 'N') = 'N'
  638. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  639. AND ISNULL(CM.isActive, 'Y') = 'Y'
  640. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  641. ORDER BY X.hasDeliveryMethod DESC
  642. END
  643. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  644. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  645. FROM #tempTransaction
  646. WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59'
  647. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  648. BEGIN
  649. SET @message = 'The transaction is
  650. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  651. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  652. <b>per month transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  653. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Monthly txn limit exceeded.'
  654. RETURN
  655. END
  656. --##END#####--Check for MONTHLY txn limit exceeded or not
  657. --##START#####----Check for YEARLY txn limit exceeded or not
  658. IF EXISTS(SELECT 1
  659. FROM csMaster CM(NOLOCK)
  660. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  661. 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'
  662. 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)
  663. BEGIN
  664. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  665. FROM (
  666. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  667. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  668. FROM dbo.csDetail CD(NOLOCK)
  669. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  670. WHERE CD.period = 365
  671. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  672. AND CD.condition = 4600
  673. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  674. AND ISNULL(CD.isActive, 'Y') = 'Y'
  675. AND ISNULL(CD.isDeleted, 'N') = 'N'
  676. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  677. AND ISNULL(CM.isActive, 'Y') = 'Y'
  678. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  679. ORDER BY X.hasDeliveryMethod DESC
  680. END
  681. ELSE --if not countrywise then then the rule defined for all countries
  682. BEGIN
  683. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  684. FROM (
  685. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  686. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  687. FROM dbo.csDetail CD(NOLOCK)
  688. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  689. WHERE CD.period = 365
  690. AND CM.rCountry = @pCountryId
  691. AND CM.sCountry IS NULL
  692. AND CD.condition = 4600
  693. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  694. AND ISNULL(CD.isActive, 'Y') = 'Y'
  695. AND ISNULL(CD.isDeleted, 'N') = 'N'
  696. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  697. AND ISNULL(CM.isActive, 'Y') = 'Y'
  698. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  699. ORDER BY X.hasDeliveryMethod DESC
  700. END
  701. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  702. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  703. FROM #tempTransaction
  704. --SELECT @sumTxnAmtUSD,@UsdAmount,@limitAmt
  705. IF (isnull(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  706. BEGIN
  707. SET @message = 'The transaction is
  708. <b style=''background-color:red; color:white;''>'+CASE WHEN @ruleType = 'B' THEN 'blocked' ELSE 'hold' END+'</b> because previous transaction sum is
  709. (<b>'+CAST(@sumTxnAmtUSD AS VARCHAR)+' USD</b>) and by doing this transaction (<b>'+CAST(@UsdAmount AS VARCHAR)+' USD</b>)
  710. <b>per year transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.'
  711. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Yearly txn limit exceeded.'
  712. RETURN
  713. END
  714. --##END#####----Check for YEARLY txn limit exceeded or not
  715. IF ISNULL(@receiverName, '') = ''
  716. BEGIN
  717. SELECT @errCode = 0, @message = 'Success', @ruleId = 0
  718. RETURN
  719. END
  720. END
  721. ELSE IF @flag = 'receiver-limit'
  722. BEGIN
  723. CREATE TABLE #tempTransactionR(id BIGINT, SettlingAmount MONEY, UsdAmount MONEY, approvedDate DATETIME, createdDate DATETIME, tranStatus VARCHAR(20)
  724. ,receiverName VARCHAR(50))
  725. SET @receiverMobile = '%' + @receiverMobile
  726. -- ## Start of multiple sender same Reciever txn limit
  727. INSERT INTO #tempTransactionR(id,SettlingAmount, UsdAmount,receiverName,approvedDate,createdDate,tranStatus)
  728. SELECT rt.id,rt.SettlementAmt, rt.UsdAmount,tr.firstName,approvedDate,createdDate,tranStatus
  729. FROM dbo.INBOUND_VIEW_REMIT_TRAN rt WITH(NOLOCK)
  730. INNER JOIN dbo.INBOUND_VIEW_TRAN_RECEIVERS tr WITH(NOLOCK) ON tr.tranId = rt.id
  731. WHERE rt.receiverName = @receiverName AND rt.tranStatus <> 'CANCEL'
  732. --AND tr.mobile LIKE @receiverMobile
  733. AND approvedDate BETWEEN @YearStart AND CONVERT(VARCHAR,@YearEnd,101)+' 23:59:59'
  734. -- Per Day Txn limit check
  735. IF EXISTS(SELECT 1
  736. FROM csMaster CM(NOLOCK)
  737. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  738. 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'
  739. 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)
  740. BEGIN
  741. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  742. FROM (
  743. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  744. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  745. FROM dbo.csDetail CD(NOLOCK)
  746. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  747. WHERE CD.period = 1
  748. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  749. AND CD.condition = 4603
  750. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  751. AND ISNULL(CD.isActive, 'Y') = 'Y'
  752. AND ISNULL(CD.isDeleted, 'N') = 'N'
  753. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  754. AND ISNULL(CM.isActive, 'Y') = 'Y'
  755. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  756. ORDER BY X.hasDeliveryMethod DESC
  757. END
  758. ELSE --if not countrywise then then the rule defined for all countries
  759. BEGIN
  760. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  761. FROM (
  762. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  763. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  764. FROM dbo.csDetail CD(NOLOCK)
  765. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  766. WHERE CD.period = 1
  767. AND CM.rCountry = @pCountryId
  768. AND CM.sCountry IS NULL
  769. AND CD.condition = 4603
  770. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  771. AND ISNULL(CD.isActive, 'Y') = 'Y'
  772. AND ISNULL(CD.isDeleted, 'N') = 'N'
  773. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  774. AND ISNULL(CM.isActive, 'Y') = 'Y'
  775. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  776. ORDER BY X.hasDeliveryMethod DESC
  777. END
  778. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  779. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  780. FROM #tempTransactionR
  781. WHERE approvedDate BETWEEN CAST(GETDATE() AS DATE) AND GETDATE()
  782. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  783. BEGIN
  784. SET @message = 'The transaction is in <b style=''background-color:red; color:white;''>hold</b> because same reciever
  785. <b>per day transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  786. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per day limit exceeded for same receiver.'
  787. RETURN
  788. END
  789. -- per month Txn Limit check
  790. IF EXISTS(SELECT 1
  791. FROM csMaster CM(NOLOCK)
  792. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  793. 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'
  794. 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)
  795. BEGIN
  796. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  797. FROM (
  798. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  799. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  800. FROM dbo.csDetail CD(NOLOCK)
  801. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  802. WHERE CD.period = 30
  803. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  804. AND CD.condition = 4603
  805. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  806. AND ISNULL(CD.isActive, 'Y') = 'Y'
  807. AND ISNULL(CD.isDeleted, 'N') = 'N'
  808. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  809. AND ISNULL(CM.isActive, 'Y') = 'Y'
  810. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  811. ORDER BY X.hasDeliveryMethod DESC
  812. END
  813. ELSE --if not countrywise then then the rule defined for all countries
  814. BEGIN
  815. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  816. FROM (
  817. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  818. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  819. FROM dbo.csDetail CD(NOLOCK)
  820. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  821. WHERE CD.period = 30
  822. AND CM.rCountry = @pCountryId
  823. AND CM.sCountry IS NULL
  824. AND CD.condition = 4603
  825. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  826. AND ISNULL(CD.isActive, 'Y') = 'Y'
  827. AND ISNULL(CD.isDeleted, 'N') = 'N'
  828. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  829. AND ISNULL(CM.isActive, 'Y') = 'Y'
  830. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  831. ORDER BY X.hasDeliveryMethod DESC
  832. END
  833. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  834. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  835. FROM #tempTransactionR
  836. WHERE approvedDate BETWEEN @MonthStart AND CONVERT(VARCHAR,@MonthEnd,101)+' 23:59:59'
  837. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  838. BEGIN
  839. SET @message = 'The transaction is in<b style=''background-color:red; color:white;''>hold</b> because same reciever
  840. <b>per month transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  841. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per month limit exceeded for same receiver.'
  842. RETURN
  843. END
  844. --- per year Txn Limit check
  845. IF EXISTS(SELECT 1
  846. FROM csMaster CM(NOLOCK)
  847. INNER JOIN csDetail CD(NOLOCK) ON CD.csMasterId = CM.csMasterId
  848. 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'
  849. 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)
  850. BEGIN
  851. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  852. FROM (
  853. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  854. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  855. FROM dbo.csDetail CD(NOLOCK)
  856. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  857. WHERE CD.period = 365
  858. AND CM.rCountry=@pCountryId AND CM.sCountry = @sCountryId
  859. AND CD.condition = 4603
  860. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  861. AND ISNULL(CD.isActive, 'Y') = 'Y'
  862. AND ISNULL(CD.isDeleted, 'N') = 'N'
  863. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  864. AND ISNULL(CM.isActive, 'Y') = 'Y'
  865. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  866. ORDER BY X.hasDeliveryMethod DESC
  867. END
  868. ELSE --if not countrywise then then the rule defined for all countries
  869. BEGIN
  870. SELECT TOP 1 @comRuleId = comRuleId, @limitAmt = limitAmt, @ruleType = nextAction
  871. FROM (
  872. SELECT comRuleId = csDetailId, limitAmt = amount, CD.nextAction,
  873. hasDeliveryMethod = CASE WHEN CD.paymentMode IS NULL THEN 0 ELSE 1 END
  874. FROM dbo.csDetail CD(NOLOCK)
  875. INNER JOIN csMaster CM(NOLOCK) ON CM.csMasterId = CD.csMasterId
  876. WHERE CD.period = 365
  877. AND CM.rCountry = @pCountryId
  878. AND CM.sCountry IS NULL
  879. AND CD.condition = 4603
  880. AND ISNULL(CD.paymentMode, @deliveryMethod) = @deliveryMethod
  881. AND ISNULL(CD.isActive, 'Y') = 'Y'
  882. AND ISNULL(CD.isDeleted, 'N') = 'N'
  883. AND ISNULL(CD.isEnable, 'Y') = 'Y'
  884. AND ISNULL(CM.isActive, 'Y') = 'Y'
  885. AND ISNULL(CM.isDeleted, 'N') = 'N' )X
  886. ORDER BY X.hasDeliveryMethod DESC
  887. END
  888. SELECT @sumTxnAmt = SUM(ISNULL(SettlingAmount,0)),
  889. @sumTxnAmtUSD = SUM(ISNULL(UsdAmount, 0))
  890. FROM #tempTransactionR
  891. IF (ISNULL(@sumTxnAmtUSD,0) + @UsdAmount) > @limitAmt
  892. BEGIN
  893. SET @message = 'The transaction is in<b style=''background-color:red; color:white;''>hold</b> because same reciever
  894. <b>per year transaction</b> Limit (<b>'+CAST(@limitAmt AS VARCHAR)+' USD</b>) is exceeded.(' + CAST((@sumTxnAmtUSD + @UsdAmount) AS VARCHAR) + ' USD)'
  895. SELECT @errCode = CASE WHEN @ruleType = 'B' THEN 1 ELSE 2 END, @message = @message, @ruleId = @comRuleId, @shortMessage = 'Per year limit exceeded for same receiver.'
  896. RETURN
  897. END
  898. --Return success message if there is no complaince matched txn
  899. SELECT @errCode = 0, @message = 'Success', @ruleId = 0
  900. RETURN
  901. END
  902. END
  903. GO