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.

365 lines
24 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[ws_int_proc_complianceRuleDetail] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. /*
  9. IF EXISTS (SELECT 'x' FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[proc_complianceRuleDetail]') AND TYPE IN (N'P', N'PC'))
  10. DROP PROCEDURE [dbo].proc_complianceRuleDetail
  11. GO
  12. */
  13. /*
  14. DECLARE @result1 VARCHAR(MAX)
  15. EXEC proc_complianceRuleDetail 'rajiv', '297493', 1200, 45, 22, NULL, 2, @result = @result1 OUTPUT
  16. PRINT @result1
  17. */
  18. CREATE proc [dbo].[ws_int_proc_complianceRuleDetail]
  19. @user VARCHAR(50) = NULL
  20. ,@tranId BIGINT = NULL
  21. ,@tAmt MONEY = NULL
  22. ,@senId INT = NULL
  23. ,@benId INT = NULL
  24. ,@beneficiaryName VARCHAR(200) = NULL
  25. ,@beneficiaryMobile VARCHAR(50) = NULL
  26. ,@benAccountNo VARCHAR(50) = NULL
  27. ,@masterId INT = NULL
  28. ,@paymentMethod INT = NULL
  29. ,@checkingFor CHAR(1) = NULL
  30. ,@agentRefId VARCHAR(20) = NULL
  31. ,@result VARCHAR(MAX) = NULL OUTPUT
  32. ,@senderId VARCHAR(30) = NULL
  33. ,@senderMemId VARCHAR(20) = NULL
  34. ,@senderName VARCHAR(100) = NULL
  35. ,@senderMobile VARCHAR(30) = NULL
  36. AS
  37. SET NOCOUNT ON
  38. /*
  39. 1> Get the data in temp table
  40. 2> Create the temp for condition
  41. 3> Dynamic query create for checking TRN TEMP Vs Condition Temp (Loop may required)
  42. 4> Data need to shift into main table so that each tran compain histry will be maintain
  43. 5>
  44. 6> Compose the message with matched criteria
  45. 7>
  46. */
  47. BEGIN
  48. DECLARE
  49. @sHub INT
  50. ,@sCountry INT
  51. ,@sAgent INT
  52. ,@sZip INT
  53. ,@sCustType INT
  54. ,@sState INT
  55. ,@sGroup INT
  56. ,@rHub INT
  57. ,@rAgent INT
  58. ,@rZip INT
  59. ,@rCustType INT
  60. ,@rGroup INT
  61. SET @result = ''
  62. IF ISNULL(@masterId, 0) = 0
  63. RETURN
  64. CREATE TABLE #tempTran(id BIGINT, sBranch INT, tAmt MONEY, sIdNumber VARCHAR(50), senderName VARCHAR(200), sMobile VARCHAR(50),
  65. rIdNumber VARCHAR(50), receiverName VARCHAR(100), rMobile VARCHAR(50), rMembershipId VARCHAR(50), accountNo VARCHAR(100),
  66. approvedDate DATETIME, createdDate DATETIME, tranStatus VARCHAR(20))
  67. IF @senId IS NOT NULL
  68. SELECT @sCustType = customerType FROM customers WITH(NOLOCK) WHERE customerId = @senId
  69. IF @benId IS NOT NULL
  70. SELECT @rCustType = customerType FROM customers WITH(NOLOCK) WHERE customerId = @benId
  71. DECLARE
  72. @beneficiaryId VARCHAR(30)
  73. ,@beneficiaryMemId VARCHAR(20)
  74. ,@beneficiaryAcNo VARCHAR(50)
  75. ,@amount MONEY
  76. ,@tranCount INT
  77. ,@period INT
  78. -->>Get Sender and Receiver Detail
  79. IF @senId IS NOT NULL
  80. BEGIN
  81. SELECT
  82. @senderId = cust.idNumber
  83. ,@senderMemId = membershipId
  84. ,@senderName = cust.fullName
  85. ,@senderMobile = mobile
  86. FROM customers cust WITH(NOLOCK)
  87. WHERE cust.customerId = @senId
  88. END
  89. IF @tranId IS NOT NULL
  90. BEGIN
  91. SELECT
  92. @beneficiaryId = TR.idNumber
  93. ,@beneficiaryMemId = membershipId
  94. ,@beneficiaryName = trn.receiverName
  95. ,@beneficiaryMobile = mobile
  96. ,@beneficiaryAcNo = trn.accountNo
  97. FROM remitTran trn WITH(NOLOCK)
  98. INNER JOIN tranReceivers TR WITH(NOLOCK) ON trn.id = TR.tranId
  99. WHERE trn.id = @tranId
  100. END
  101. SELECT @beneficiaryAcNo = @benAccountNo
  102. DECLARE
  103. @sql VARCHAR(MAX)
  104. ,@sqlSen VARCHAR(MAX) = ''
  105. ,@sqlRec VARCHAR(MAX) = ''
  106. ,@sqlTrn VARCHAR(MAX) = ''
  107. CREATE TABLE #tempCriteria(rowId INT IDENTITY(1,1), criteria INT)
  108. INSERT #tempCriteria(criteria)
  109. SELECT DISTINCT criteria FROM csDetailRec cdr WHERE cdr.csMasterId = @masterId AND (paymentMode = @paymentMethod OR paymentMode IS NULL)
  110. --3. Construct String Query
  111. DECLARE @totalRows INT, @count INT, @criteria INT
  112. SET @count = 1
  113. SELECT @totalRows = COUNT(*) FROM #tempCriteria
  114. SET @sqlSen = ' AND ('
  115. SET @sqlRec = ' AND ('
  116. WHILE(@count <= @totalRows)
  117. BEGIN
  118. SELECT @criteria = criteria FROM #tempCriteria WHERE rowId = @count
  119. IF((@criteria = 5000) AND ISNULL(@senderId, '') <> '')
  120. SET @sqlSen = @sqlSen + ' idNumber = ''' + @senderId + ''' OR'
  121. ELSE IF((@criteria = 5001) AND ISNULL(@senderName, '') <> '')
  122. SET @sqlTrn = @sqlTrn + ' OR trn.senderName = ''' + ISNULL(@senderName, '') + ''''
  123. ELSE IF((@criteria = 5002) AND ISNULL(@senderMobile, '') <> '')
  124. SET @sqlSen = @sqlSen + ' mobile = ''' + ISNULL(@senderMobile, '') + ''' OR'
  125. ELSE IF((@criteria = 5005) AND ISNULL(@beneficiaryName, '') <> '')
  126. SET @sqlTrn = @sqlTrn + ' OR trn.receiverName = ''' + ISNULL(@beneficiaryName, '') + ''''
  127. ELSE IF((@criteria = 5006) AND ISNULL(@beneficiaryMobile, '') <> '')
  128. SET @sqlRec = @sqlRec + ' mobile = ''' + ISNULL(@beneficiaryMobile, '') + ''' OR'
  129. ELSE IF((@criteria = 5007) AND ISNULL(@beneficiaryAcNo, '') <> '')
  130. SET @sqlTrn = @sqlTrn + ' OR trn.accountNo = ''' + ISNULL(@beneficiaryAcNo, '') + ''''
  131. SET @sqlRec = @sqlRec + ' 1 = 1 OR'
  132. SET @count = @count + 1
  133. END
  134. SET @sqlSen = LEFT(@sqlSen, LEN(@sqlSen) - 2) + ')'
  135. SET @sqlRec = LEFT(@sqlRec, LEN(@sqlRec) - 2) + ')'
  136. IF OBJECT_ID(N'tempdb..##tempTran') IS NOT NULL
  137. BEGIN
  138. DROP TABLE ##tempTran
  139. END
  140. SET @sql = '
  141. SELECT
  142. trn.id
  143. ,trn.sBranch
  144. ,trn.tAmt
  145. ,T.sIdNumber
  146. ,trn.senderName
  147. ,T.sMobile
  148. ,T.rIdNumber
  149. ,trn.receiverName
  150. ,T.rMobile
  151. ,T.rMembershipId
  152. ,trn.accountNo
  153. ,trn.approvedDate
  154. ,trn.createdDate
  155. ,trn.tranStatus
  156. FROM vwRemitTran trn WITH(NOLOCK)
  157. INNER JOIN
  158. (
  159. SELECT tranId = ISNULL(sen.tranId, rec.tranId), sen.sIdNumber, sen.sMobile, rec.rIdNumber, rec.rMobile, rec.rMembershipId FROM
  160. (
  161. SELECT
  162. tranId
  163. ,sIdNumber = idNumber
  164. ,sMobile = mobile
  165. FROM vwTranSenders WITH(NOLOCK)
  166. WHERE 1=1 '
  167. + @sqlSen +
  168. '
  169. )sen
  170. JOIN
  171. (
  172. SELECT
  173. tranId
  174. ,rIdNumber = idNumber
  175. ,rMobile = mobile
  176. ,rMembershipId = membershipId
  177. FROM vwTranReceivers WITH(NOLOCK)
  178. WHERE 1=1 '
  179. + @sqlRec +
  180. '
  181. )rec ON sen.tranId = rec.tranId
  182. )T ON trn.id = T.tranId
  183. WHERE 1=1 ' + @sqlTrn + '
  184. '
  185. PRINT @sql
  186. INSERT INTO #tempTran
  187. EXEC (@sql)
  188. SET @sql = ''
  189. IF @checkingFor = 'v'
  190. BEGIN
  191. DECLARE @sBranch INT
  192. SELECT @sBranch = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @user
  193. INSERT INTO #tempTran(id, sBranch, tAmt, sIdNumber, senderName, sMobile, rIdNumber, receiverName, rMobile, rMembershipId, accountNo, createdDate, tranStatus)
  194. SELECT NULL, @sBranch, @tAmt, @senderId, @senderName, @senderMobile, @beneficiaryId, @beneficiaryName, @beneficiaryMobile, @beneficiaryMemId, @beneficiaryAcNo, dbo.FNADateFormatTZ(GETDATE(), @user), 'Payment'
  195. END
  196. CREATE TABLE #tempQuery(rowId INT IDENTITY(1,1), csDetailRecId INT, query VARCHAR(MAX))
  197. INSERT #tempQuery(csDetailRecId, query)
  198. SELECT
  199. csDetailRecId
  200. ,query = 'SELECT ' + CAST(csDetailRecId AS VARCHAR)+ ', '+
  201. CASE
  202. WHEN checkType = 'SUM' THEN '(ISNULL(SUM(tAmt), 0) + ' + CAST(@tAmt AS VARCHAR) + ') '
  203. WHEN checkType = 'COUNT' THEN
  204. CASE
  205. WHEN condition = 4600 THEN ' COUNT(trn.id)' --4600 - Aggregate Rule
  206. WHEN condition = 4601 THEN ' COUNT(DISTINCT trn.sBranch)' --4601 - Multiple POS
  207. WHEN condition = 4602 THEN ' COUNT(DISTINCT trn.sIdNumber)' --4602 - Multiple Beneficiary(Same Sender)
  208. WHEN condition = 4603 THEN ' COUNT(DISTINCT trn.rIdNumber)' --4603 - Multiple Sender(Same Beneficiary)
  209. END
  210. END
  211. +
  212. ' FROM #tempTran trn WITH(NOLOCK)
  213. WHERE tranStatus NOT LIKE ''%Cancel%'' AND ISNULL(approvedDate, createdDate) BETWEEN
  214. '''
  215. +
  216. CASE WHEN period = 0 THEN '1900-01-01' ELSE CONVERT(VARCHAR,DATEADD(D,-PERIOD,GETDATE()),101) END
  217. + ''' AND '''
  218. + CASE WHEN period = 0 THEN '2100-12-31' ELSE CONVERT(VARCHAR,GETDATE(),101) + ' 23:59:59' END
  219. + ''''
  220. +
  221. CASE
  222. WHEN criteria = 5000 THEN ' AND trn.sIdNumber = ''' + ISNULL(@senderId, '') + ''' GROUP BY trn.sIdNumber'
  223. WHEN criteria = 5001 THEN ' AND trn.senderName = ''' + ISNULL(@senderName, '') + ''' GROUP BY trn.senderName'
  224. WHEN criteria = 5002 THEN ' AND trn.sMobile = ''' + ISNULL(@senderMobile, '') + ''' GROUP BY trn.sMobile'
  225. WHEN criteria = 5003 THEN ' AND trn.rIdNumber = ''' + ISNULL(@beneficiaryId, '') + ''' GROUP BY trn.rIdNumber'
  226. WHEN criteria = 5004 THEN ' AND trn.rMembershipId = ''' + ISNULL(@beneficiaryMemId, '') + ''' GROUP BY trn.rMembershipId'
  227. WHEN criteria = 5005 THEN ' AND trn.receiverName = ''' + ISNULL(@beneficiaryName, '') + ''' GROUP BY trn.receiverName'
  228. WHEN criteria = 5006 THEN ' AND trn.rMobile = ''' + ISNULL(@beneficiaryMobile, '') + ''' GROUP BY trn.rMobile'
  229. WHEN criteria = 5007 THEN ' AND trn.accountNo = ''' + ISNULL(@beneficiaryAcNo, '') + ''' GROUP BY trn.accountNo'
  230. END
  231. +
  232. ' HAVING '
  233. +
  234. CASE
  235. WHEN checkType = 'SUM' THEN
  236. '(ISNULL(SUM(tAmt), 0)) '
  237. WHEN checkType = 'COUNT' THEN
  238. CASE
  239. WHEN condition = 4600 THEN ' COUNT(trn.id)'
  240. WHEN condition = 4601 THEN ' COUNT(DISTINCT trn.sBranch)'
  241. WHEN condition = 4602 THEN ' COUNT(DISTINCT trn.sIdNumber)'
  242. WHEN condition = 4603 THEN ' COUNT(DISTINCT trn.rIdNumber)'
  243. END
  244. END
  245. +
  246. '>='
  247. +
  248. CAST(PARAMETER AS VARCHAR)
  249. +
  250. ' UNION ALL'
  251. FROM
  252. (
  253. SELECT
  254. csDetailRecId
  255. ,csMasterId
  256. ,condition
  257. ,collMode
  258. ,paymentMode
  259. ,checkType
  260. ,PARAMETER
  261. ,period
  262. ,criteria
  263. FROM csDetailRec
  264. WHERE csMasterId = @masterId
  265. AND (paymentMode = @paymentMethod OR paymentMode IS NULL)
  266. ) X
  267. SELECT @totalRows = COUNT(*) FROM #tempQuery
  268. UPDATE #tempQuery
  269. SET query = LEFT(query, LEN(query) - 9)
  270. WHERE rowId = @totalRows
  271. SELECT @sql = COALESCE(@sql + ' ', '') + query FROM #tempQuery
  272. --SELECT @sql
  273. --RETURN
  274. --End of Contruct string Query--------------------------------------------------------------------------------------------------
  275. --4. String Query Execution-----------------------------------------------------------------------------------------------------
  276. CREATE TABLE #tempResult(rowId INT IDENTITY(1,1), csDetailRecId INT, PARAMETER INT, matchTranId VARCHAR(MAX))
  277. INSERT #tempResult(csDetailRecId, PARAMETER)
  278. EXEC (@sql)
  279. --------------------------------------------------------------------------------------------------------------------------------
  280. --5. Select compliance Detail ID and Matched TXN Id and insert into remitTranCompliance Table------------------------------------
  281. DELETE FROM remitTranComplianceTemp WHERE agentRefId = @agentRefId
  282. DELETE FROM #tempTran WHERE id IS NULL
  283. --SELECT * FROM ##tempTran
  284. IF EXISTS(SELECT 'X' FROM #tempResult)
  285. BEGIN
  286. DECLARE @csDetailRecId INT, @tranIds VARCHAR(MAX)
  287. SELECT @totalRows = COUNT(*) FROM #tempResult
  288. /*
  289. UPDATE #tempResult SET
  290. matchTranId = (SELECT COALESCE(ISNULL(matchTranId + ', ', ''), '') + CAST(id AS VARCHAR) FROM ##tempTran tt WHERE tt.createdDate BETWEEN DATEADD(D, -c.period, GETDATE()) AND GETDATE() + '23:59:59')
  291. FROM #tempResult t
  292. INNER JOIN csDetailRec c ON t.csDetailRecId = c.csDetailRecId
  293. IF @checkingFor = 'i'
  294. BEGIN
  295. INSERT remitTranCompliance(TranId, csDetailTranId, matchTranId)
  296. SELECT @tranId, csDetailRecId, matchTranId FROM #tempResult
  297. END
  298. ELSE IF @checkingFor = 'v'
  299. BEGIN
  300. INSERT remitTranComplianceTemp(csDetailTranId, matchTranId, agentRefId)
  301. SELECT csDetailRecId, matchTranId, @agentRefId FROM #tempResult
  302. END
  303. */
  304. SET @count = 1
  305. WHILE(@count <= @totalRows)
  306. BEGIN
  307. SELECT @csDetailRecId = csDetailRecId FROM #tempResult WHERE rowId = @count
  308. SELECT @period = period FROM csDetailRec WITH(NOLOCK) WHERE csDetailRecId = @csDetailRecId
  309. SELECT @tranIds = COALESCE(ISNULL(@tranIds + ',', ''), '') + CAST(id AS VARCHAR) FROM #tempTran WHERE createdDate BETWEEN DATEADD(D,-@period,GETDATE()) AND GETDATE() + '23:59:59'
  310. IF @checkingFor = 'i'
  311. BEGIN
  312. INSERT remitTranCompliance(TranId, csDetailTranId, matchTranId)
  313. SELECT @tranId, @csDetailRecId, @tranIds
  314. END
  315. ELSE IF @checkingFor = 'v'
  316. BEGIN
  317. INSERT remitTranComplianceTemp(csDetailTranId, matchTranId, agentRefId)
  318. SELECT @csDetailRecId, @tranIds, @agentRefId
  319. END
  320. SET @tranIds = NULL
  321. SET @count = @count + 1
  322. END
  323. SET @result = 'C'
  324. END
  325. END
  326. --ALTER TABLE remitTranComplianceTemp ALTER COLUMN matchTranId VARCHAR(MAX)
  327. GO