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.

370 lines
12 KiB

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