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.

361 lines
10 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_complianceReleaseReport] Script Date: 7/4/2019 11:35:48 AM ******/
  4. DROP PROCEDURE [dbo].[proc_complianceReleaseReport]
  5. GO
  6. /****** Object: StoredProcedure [dbo].[proc_complianceReleaseReport] 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 procEDURE [dbo].[proc_complianceReleaseReport](
  12. --declare
  13. @flag VARCHAR(50) = NULL
  14. ,@user VARCHAR(30) = NULL
  15. ,@fromDate VARCHAR(50) = NULL
  16. ,@toDate VARCHAR(50) = NULL
  17. ,@releasedBy VARCHAR(50) = NULL
  18. ,@includesystem CHAR(1) = NULL
  19. ,@reportType VARCHAR(20) = NULL
  20. ,@idNumber VARCHAR(20) = NULL
  21. ,@customerName VARCHAR(100) = NULL
  22. ,@holdReason VARCHAR(50) = NULL
  23. )
  24. AS
  25. BEGIN TRY
  26. SET NOCOUNT ON
  27. --SELECT @flag='s',@fromDate='2016-04-21',@toDate='2016-04-26',@releasedBy=null,@includesystem='N',@idNumber=null,@customerName=null,@reportType='Detail-Report',@holdReason=null
  28. IF @flag ='s'
  29. BEGIN
  30. DECLARE @SQL VARCHAR(MAX)
  31. IF OBJECT_ID(N'tempdb..#REASON') IS NOT NULL
  32. DROP TABLE #REASON
  33. SELECT
  34. csDetailRecId
  35. ,condition
  36. ,[Remarks] = RTRIM(LTRIM(dbo.FNAGetDataValue(condition) + ' ' +
  37. CASE WHEN checkType = 'Sum' THEN 'Transaction Amount'
  38. WHEN checkType = 'Count' THEN 'Transaction Count' END
  39. + ' exceeds ' + CAST(parameter AS VARCHAR) + ' limit within ' + CAST(period AS VARCHAR)+ ' day(s) ' + dbo.FNAGetDataValue(criteria) ))
  40. INTO #REASON
  41. FROM csDetailRec cdr (NOLOCK)
  42. CREATE NONCLUSTERED INDEX idx_CSDETAILrecID ON #REASON(CSDETAILrecID, [Remarks])
  43. IF OBJECT_ID(N'tempdb..#TEMP') IS NOT NULL
  44. DROP TABLE #TEMP
  45. CREATE TABLE #TEMP
  46. (
  47. TRANID BIGINT,
  48. APPROVEDDATE DATETIME,
  49. APPROVEDBY VARCHAR(200)
  50. )
  51. SET @SQL = 'SELECT
  52. DISTINCT TRANID, APPROVEDDATE, ISNULL(APPROVEDBY,''SYSTEM'') APPROVEDBY
  53. FROM remittrancompliance WITH (NOLOCK)
  54. WHERE APPROVEDDATE BETWEEN '''+ @fromDate+''' AND '''+ @toDate + ' 23:59:59:998'''
  55. IF @includesystem='N'
  56. BEGIN
  57. SET @SQL=@SQL +'AND APPROVEDBY<>''SYSTEM'''
  58. END
  59. INSERT INTO #TEMP(TRANID,APPROVEDDATE,APPROVEDBY)
  60. EXEC (@SQL)
  61. --PRINT @SQL
  62. CREATE NONCLUSTERED INDEX idx_temp ON #TEMP(TRANID, APPROVEDDATE) INCLUDE (APPROVEDBY)
  63. ALTER TABLE #TEMP ADD TRANDATE DATETIME,TAT BIGINT,REASON VARCHAR(MAX), approvedremarks VARCHAR(MAX)
  64. UPDATE t SET
  65. TRANDATE= CREATEDDATELOCAL
  66. FROM #TEMP t
  67. INNER JOIN VWREMITTRANALL VW WITH (NOLOCK) ON T.TRANID = VW.HOLDTRANID
  68. UPDATE t SET
  69. TRANDATE= CREATEDDATELOCAL
  70. FROM #TEMP t
  71. INNER JOIN VWREMITTRANALL VW WITH (NOLOCK) ON T.TRANID = ID
  72. WHERE HOLDTRANID IS NULL
  73. UPDATE #TEMP SET TAT = DATEDIFF(SECOND, TRANDATE, approvedDate)
  74. UPDATE t SET
  75. approvedremarks = rc.approvedremarks
  76. FROM #TEMP t
  77. INNER JOIN remittrancompliance rc WITH (NOLOCK) on t.tranId=rc.tranId
  78. IF @reportType='Summary-Date'
  79. BEGIN
  80. SELECT
  81. [Released Date]= CONVERT(VARCHAR(10),approvedDate, 102)
  82. ,[Compliance_Average TAT(Min)]= AVG(TAT)/60
  83. ,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
  84. ,[Compliance_MIN TAT(Sec)]= MIN(TAT)
  85. ,[Compliance_TXN]= COUNT(*)
  86. FROM #TEMP
  87. GROUP BY CONVERT(VARCHAR(10),approvedDate, 102)
  88. UNION ALL
  89. SELECT
  90. [Released Date]= 'Total'
  91. ,[Compliance_Average TAT(Min)]= AVG(TAT)/60
  92. ,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
  93. ,[Compliance_MIN TAT(Sec)]= MIN(TAT)
  94. ,[Compliance_TXN]= COUNT(*)
  95. FROM #TEMP
  96. ORDER BY CONVERT(VARCHAR(10),approvedDate, 102)
  97. END
  98. IF @reportType='Summary-User'
  99. BEGIN
  100. SELECT
  101. [Released By],[Compliance_Average TAT(Min)],[Compliance_MAX TAT(Min)],[Compliance_MIN TAT(Sec)],[Compliance_TXN]
  102. FROM (
  103. SELECT
  104. 1 SN
  105. ,[Released By]= approvedBy
  106. ,[Compliance_Average TAT(Min)]= AVG(TAT)/60
  107. ,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
  108. ,[Compliance_MIN TAT(Sec)]= MIN(TAT)
  109. ,[Compliance_TXN]= COUNT(*)
  110. FROM #TEMP
  111. GROUP BY approvedBy
  112. UNION ALL
  113. SELECT
  114. 2 SN,
  115. [Released By]= 'Total'
  116. ,[Compliance_Average TAT(Min)]= AVG(TAT)/60
  117. ,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
  118. ,[Compliance_MIN TAT(Sec)]= MIN(TAT)
  119. ,[Compliance_TXN]= COUNT(*)
  120. FROM #TEMP
  121. ) x
  122. ORDER BY SN, [Released By]
  123. END
  124. IF @reportType='Summary-Reason'
  125. BEGIN
  126. SELECT
  127. R.Remarks Reason,COUNT(*) TXN
  128. FROM remittrancompliance RC WITH (NOLOCK)
  129. INNER JOIN #TEMP T ON RC.TRANID=T.TRANID
  130. INNER JOIN #REASON R ON RC.CSDETAILTRANID=R.csDetailRecId
  131. WHERE RC.REASON IS NULL
  132. GROUP BY Remarks
  133. UNION ALL
  134. SELECT
  135. RC.reason, COUNT(*) TXN
  136. FROM remittrancompliance RC WITH (NOLOCK)
  137. INNER JOIN #TEMP T ON RC.TRANID=T.TRANID
  138. WHERE RC.REASON IS NOT NULL
  139. GROUP BY RC.reason
  140. UNION ALL
  141. SELECT 'Unique Transaction' reason, COUNT(*) FROM #TEMP
  142. END
  143. IF @reportType='Detail-Report'
  144. BEGIN
  145. IF @holdReason is NOT NULL
  146. BEGIN
  147. ALTER TABLE #TEMP ADD FLAG INT
  148. UPDATE #TEMP SET FLAG = 1 FROM #TEMP T
  149. INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
  150. WHERE rc.REASON IS NOT NULL
  151. AND RC.REASON LIKE '%'+@holdReason+'%'
  152. UPDATE #TEMP SET FLAG=1 FROM #TEMP T
  153. INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
  154. INNER JOIN (
  155. SELECT * FROM #REASON WHERE REMARKS LIKE '%'+ @holdReason+'%'
  156. ) X ON RC.CSDETAILTRANID=X.CSDETAILRECID
  157. WHERE rc.REASON IS NULL
  158. DELETE FROM #TEMP WHERE FLAG IS NULL
  159. END
  160. ;WITH temptable
  161. AS
  162. (
  163. SELECT
  164. t.TRANID,rc.REASON Remarks
  165. FROM #TEMP T
  166. INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
  167. WHERE rc.REASON IS NOT NULL
  168. GROUP BY t.TRANID,rc.REASON
  169. UNION ALL
  170. SELECT
  171. t.TRANID,r.Remarks
  172. FROM #TEMP T
  173. INNER JOIN remitTranCompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
  174. INNER JOIN #REASON R WITH (NOLOCK) ON R.CSDETAILrecID=RC.csDetailTranId
  175. WHERE rc.REASON IS NULL
  176. GROUP BY t.TRANID,r.Remarks
  177. )
  178. UPDATE #TEMP SET reason=x.DATASOURCE
  179. FROM #TEMP t
  180. INNER JOIN (
  181. SELECT
  182. ct.tranid,
  183. STUFF
  184. (
  185. (
  186. SELECT
  187. ',' + Remarks
  188. FROM (
  189. SELECT
  190. TRANID, Remarks
  191. FROM temptable
  192. ) sht
  193. WHERE sht.tranid = ct.tranid
  194. FOR XML PATH('')
  195. ,type
  196. ).value('.', 'varchar(max)'), 1, 1, ''
  197. ) AS DATASOURCE
  198. FROM (
  199. SELECT
  200. TRANID
  201. FROM #TEMP
  202. GROUP BY TRANID
  203. ) ct
  204. --INNER JOIN #TEMP cd ON ct.TRANID = cd.TRANID
  205. ) x ON t.TRANID=x.TRANID
  206. DECLARE @Filter VARCHAR(MAX) = ''
  207. IF @idNumber IS NOT NULL
  208. SET @Filter= @Filter + ' AND TS.idNumber='''+@idNumber+''''
  209. IF @customerName is NOT NULL
  210. SET @Filter= @Filter + ' AND TS.fullName='''+@customerName+''''
  211. IF @releasedBy is NOT NULL
  212. SET @Filter= @Filter + ' AND t.approvedby='''+@releasedBy+''''
  213. --SET @SQL='
  214. SET @SQL = '
  215. SELECT
  216. [S.N]= ROW_NUMBER() OVER (ORDER BY [TXN No.]),
  217. *
  218. FROM (
  219. SELECT
  220. [TXN Date]= RT.createdDate,
  221. [TXN No.] = RT.id,
  222. [Sender Name]= RT.senderName,
  223. [ID Type]= TS.idType,
  224. [ID Number]= TS.idNumber,
  225. [Receiver Name]= RT.receiverName,
  226. [Sending_Country]= RT.sCountry,
  227. [Sending_Agent]= RT.sAgentName,
  228. [Sending_Branch]= RT.sBranchName,
  229. [Sending_User]= RT.createdBy,
  230. [Collection_Currency]= RT.collCurr,
  231. [Collection_Amount]= RT.cAmt,
  232. [Receiving_Currency]= RT.payoutCurr,
  233. [Receiving_Amount]= RT.pAmt,
  234. [Receiving_Country]= RT.pCountry,
  235. [Hold Reason]= t.reason,
  236. [Approved By]=t.approvedby,
  237. [Approved On]=t.approveddate,
  238. [Approver Remarks]=t.approvedremarks
  239. FROM vwremitTranAll RT WITH (NOLOCK)
  240. INNER JOIN VWtranSendersall TS WITH (NOLOCK) ON RT.id=TS.tranId
  241. INNER JOIN vwtranReceiversALL TR WITH (NOLOCK) ON RT.id=TR.tranId
  242. LEFT JOIN staticDataValue SV WITH (NOLOCK) ON ts.idType = SV.detailtitle
  243. INNER JOIN #TEMP t on RT.holdtranid=t.tranid
  244. WHERE 1=1 ' + @Filter + '
  245. UNION ALL
  246. SELECT
  247. [TXN Date]= RT.createdDate,
  248. [TXN No.] = RT.id,
  249. [Sender Name]= RT.senderName,
  250. [ID Type]= TS.idType,
  251. [ID Number]= TS.idNumber,
  252. [Receiver Name]= RT.receiverName,
  253. [Sending_Country]= RT.sCountry,
  254. [Sending_Agent]= RT.sAgentName,
  255. [Sending_Branch]= RT.sBranchName,
  256. [Sending_User]= RT.createdBy,
  257. [Collection_Currency]= RT.collCurr,
  258. [Collection_Amount]= RT.cAmt,
  259. [Receiving_Currency]= RT.payoutCurr,
  260. [Receiving_Amount]= RT.pAmt,
  261. [Receiving_Country]= RT.pCountry,
  262. [Hold Reason]= t.reason,
  263. [Approved By]=t.approvedby,
  264. [Approved On]=t.approveddate,
  265. [Approver Remarks]=t.approvedremarks
  266. FROM vwremitTranAll RT WITH (NOLOCK)
  267. INNER JOIN VWtranSendersall TS WITH (NOLOCK) ON RT.id=TS.tranId
  268. INNER JOIN vwtranReceiversALL TR WITH (NOLOCK) ON RT.id=TR.tranId
  269. LEFT JOIN staticDataValue SV WITH (NOLOCK) ON ts.idType = SV.detailtitle
  270. INNER JOIN #TEMP t on RT.ID=t.tranid
  271. WHERE RT.holdtranid IS NULL ' + @Filter + '
  272. ) x'
  273. EXEC (@SQL)
  274. --PRINT @SQL
  275. END
  276. EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
  277. IF OBJECT_ID(N'tempdb..#filter') IS NOT NULL
  278. DROP TABLE #filter
  279. CREATE TABLE #filter(head varchar(200), value varchar(500))
  280. INSERT INTO #filter(head,value)
  281. SELECT 'From Date' head, value = @fromDate UNION ALL
  282. SELECT 'To Date' head, value = @toDate
  283. IF @releasedBy IS NOT NULL
  284. INSERT INTO #filter(head,value) VALUES('released By', @releasedBy)
  285. INSERT INTO #filter(head,value) VALUES('Include System Release', CASE WHEN @includesystem = 'Y' THEN 'YES' ELSE 'NO' END)
  286. IF @idNumber IS NOT NULL
  287. INSERT INTO #filter(head,value) VALUES('Id Number', @idNumber)
  288. IF @customerName IS NOT NULL
  289. INSERT INTO #filter(head,value) VALUES('Customer Name', @customerName)
  290. IF @reportType IS NOT NULL
  291. INSERT INTO #filter(head,value) VALUES('Report Type', @reportType)
  292. IF @holdReason IS NOT NULL
  293. INSERT INTO #filter(head,value) VALUES('Hold Reason', @holdReason)
  294. SELECT * FROM #filter
  295. SELECT 'Compliance Release Report' title
  296. RETURN
  297. END
  298. ELSE IF @flag = 'ddl'
  299. BEGIN
  300. SELECT 'Transaction Amount' Value, 'Transaction Amount' Reason UNION ALL
  301. SELECT 'Transaction Count' Value, 'Transaction Count' Reason UNION ALL
  302. SELECT 'Multiple POS' Value, 'Multiple POS' Reason UNION ALL
  303. SELECT 'Suspected Duplicate' Value, 'Suspected Duplicate' Reason
  304. END
  305. END TRY
  306. BEGIN CATCH
  307. IF @@TRANCOUNT > 0
  308. ROLLBACK TRANSACTION
  309. SELECT 1 errorCode, ERROR_MESSAGE() msg, NULL id
  310. END CATCH
  311. GO