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

USE [FastMoneyPro_Remit]
GO
/****** Object: StoredProcedure [dbo].[proc_complianceReleaseReport] Script Date: 7/4/2019 11:35:48 AM ******/
DROP PROCEDURE [dbo].[proc_complianceReleaseReport]
GO
/****** Object: StoredProcedure [dbo].[proc_complianceReleaseReport] Script Date: 7/4/2019 11:35:48 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procEDURE [dbo].[proc_complianceReleaseReport](
--declare
@flag VARCHAR(50) = NULL
,@user VARCHAR(30) = NULL
,@fromDate VARCHAR(50) = NULL
,@toDate VARCHAR(50) = NULL
,@releasedBy VARCHAR(50) = NULL
,@includesystem CHAR(1) = NULL
,@reportType VARCHAR(20) = NULL
,@idNumber VARCHAR(20) = NULL
,@customerName VARCHAR(100) = NULL
,@holdReason VARCHAR(50) = NULL
)
AS
BEGIN TRY
SET NOCOUNT ON
--SELECT @flag='s',@fromDate='2016-04-21',@toDate='2016-04-26',@releasedBy=null,@includesystem='N',@idNumber=null,@customerName=null,@reportType='Detail-Report',@holdReason=null
IF @flag ='s'
BEGIN
DECLARE @SQL VARCHAR(MAX)
IF OBJECT_ID(N'tempdb..#REASON') IS NOT NULL
DROP TABLE #REASON
SELECT
csDetailRecId
,condition
,[Remarks] = RTRIM(LTRIM(dbo.FNAGetDataValue(condition) + ' ' +
CASE WHEN checkType = 'Sum' THEN 'Transaction Amount'
WHEN checkType = 'Count' THEN 'Transaction Count' END
+ ' exceeds ' + CAST(parameter AS VARCHAR) + ' limit within ' + CAST(period AS VARCHAR)+ ' day(s) ' + dbo.FNAGetDataValue(criteria) ))
INTO #REASON
FROM csDetailRec cdr (NOLOCK)
CREATE NONCLUSTERED INDEX idx_CSDETAILrecID ON #REASON(CSDETAILrecID, [Remarks])
IF OBJECT_ID(N'tempdb..#TEMP') IS NOT NULL
DROP TABLE #TEMP
CREATE TABLE #TEMP
(
TRANID BIGINT,
APPROVEDDATE DATETIME,
APPROVEDBY VARCHAR(200)
)
SET @SQL = 'SELECT
DISTINCT TRANID, APPROVEDDATE, ISNULL(APPROVEDBY,''SYSTEM'') APPROVEDBY
FROM remittrancompliance WITH (NOLOCK)
WHERE APPROVEDDATE BETWEEN '''+ @fromDate+''' AND '''+ @toDate + ' 23:59:59:998'''
IF @includesystem='N'
BEGIN
SET @SQL=@SQL +'AND APPROVEDBY<>''SYSTEM'''
END
INSERT INTO #TEMP(TRANID,APPROVEDDATE,APPROVEDBY)
EXEC (@SQL)
--PRINT @SQL
CREATE NONCLUSTERED INDEX idx_temp ON #TEMP(TRANID, APPROVEDDATE) INCLUDE (APPROVEDBY)
ALTER TABLE #TEMP ADD TRANDATE DATETIME,TAT BIGINT,REASON VARCHAR(MAX), approvedremarks VARCHAR(MAX)
UPDATE t SET
TRANDATE= CREATEDDATELOCAL
FROM #TEMP t
INNER JOIN VWREMITTRANALL VW WITH (NOLOCK) ON T.TRANID = VW.HOLDTRANID
UPDATE t SET
TRANDATE= CREATEDDATELOCAL
FROM #TEMP t
INNER JOIN VWREMITTRANALL VW WITH (NOLOCK) ON T.TRANID = ID
WHERE HOLDTRANID IS NULL
UPDATE #TEMP SET TAT = DATEDIFF(SECOND, TRANDATE, approvedDate)
UPDATE t SET
approvedremarks = rc.approvedremarks
FROM #TEMP t
INNER JOIN remittrancompliance rc WITH (NOLOCK) on t.tranId=rc.tranId
IF @reportType='Summary-Date'
BEGIN
SELECT
[Released Date]= CONVERT(VARCHAR(10),approvedDate, 102)
,[Compliance_Average TAT(Min)]= AVG(TAT)/60
,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
,[Compliance_MIN TAT(Sec)]= MIN(TAT)
,[Compliance_TXN]= COUNT(*)
FROM #TEMP
GROUP BY CONVERT(VARCHAR(10),approvedDate, 102)
UNION ALL
SELECT
[Released Date]= 'Total'
,[Compliance_Average TAT(Min)]= AVG(TAT)/60
,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
,[Compliance_MIN TAT(Sec)]= MIN(TAT)
,[Compliance_TXN]= COUNT(*)
FROM #TEMP
ORDER BY CONVERT(VARCHAR(10),approvedDate, 102)
END
IF @reportType='Summary-User'
BEGIN
SELECT
[Released By],[Compliance_Average TAT(Min)],[Compliance_MAX TAT(Min)],[Compliance_MIN TAT(Sec)],[Compliance_TXN]
FROM (
SELECT
1 SN
,[Released By]= approvedBy
,[Compliance_Average TAT(Min)]= AVG(TAT)/60
,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
,[Compliance_MIN TAT(Sec)]= MIN(TAT)
,[Compliance_TXN]= COUNT(*)
FROM #TEMP
GROUP BY approvedBy
UNION ALL
SELECT
2 SN,
[Released By]= 'Total'
,[Compliance_Average TAT(Min)]= AVG(TAT)/60
,[Compliance_MAX TAT(Min)]= MAX(TAT)/60
,[Compliance_MIN TAT(Sec)]= MIN(TAT)
,[Compliance_TXN]= COUNT(*)
FROM #TEMP
) x
ORDER BY SN, [Released By]
END
IF @reportType='Summary-Reason'
BEGIN
SELECT
R.Remarks Reason,COUNT(*) TXN
FROM remittrancompliance RC WITH (NOLOCK)
INNER JOIN #TEMP T ON RC.TRANID=T.TRANID
INNER JOIN #REASON R ON RC.CSDETAILTRANID=R.csDetailRecId
WHERE RC.REASON IS NULL
GROUP BY Remarks
UNION ALL
SELECT
RC.reason, COUNT(*) TXN
FROM remittrancompliance RC WITH (NOLOCK)
INNER JOIN #TEMP T ON RC.TRANID=T.TRANID
WHERE RC.REASON IS NOT NULL
GROUP BY RC.reason
UNION ALL
SELECT 'Unique Transaction' reason, COUNT(*) FROM #TEMP
END
IF @reportType='Detail-Report'
BEGIN
IF @holdReason is NOT NULL
BEGIN
ALTER TABLE #TEMP ADD FLAG INT
UPDATE #TEMP SET FLAG = 1 FROM #TEMP T
INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
WHERE rc.REASON IS NOT NULL
AND RC.REASON LIKE '%'+@holdReason+'%'
UPDATE #TEMP SET FLAG=1 FROM #TEMP T
INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
INNER JOIN (
SELECT * FROM #REASON WHERE REMARKS LIKE '%'+ @holdReason+'%'
) X ON RC.CSDETAILTRANID=X.CSDETAILRECID
WHERE rc.REASON IS NULL
DELETE FROM #TEMP WHERE FLAG IS NULL
END
;WITH temptable
AS
(
SELECT
t.TRANID,rc.REASON Remarks
FROM #TEMP T
INNER JOIN remittrancompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
WHERE rc.REASON IS NOT NULL
GROUP BY t.TRANID,rc.REASON
UNION ALL
SELECT
t.TRANID,r.Remarks
FROM #TEMP T
INNER JOIN remitTranCompliance RC WITH (NOLOCK) ON T.TRANID=RC.TRANID
INNER JOIN #REASON R WITH (NOLOCK) ON R.CSDETAILrecID=RC.csDetailTranId
WHERE rc.REASON IS NULL
GROUP BY t.TRANID,r.Remarks
)
UPDATE #TEMP SET reason=x.DATASOURCE
FROM #TEMP t
INNER JOIN (
SELECT
ct.tranid,
STUFF
(
(
SELECT
',' + Remarks
FROM (
SELECT
TRANID, Remarks
FROM temptable
) sht
WHERE sht.tranid = ct.tranid
FOR XML PATH('')
,type
).value('.', 'varchar(max)'), 1, 1, ''
) AS DATASOURCE
FROM (
SELECT
TRANID
FROM #TEMP
GROUP BY TRANID
) ct
--INNER JOIN #TEMP cd ON ct.TRANID = cd.TRANID
) x ON t.TRANID=x.TRANID
DECLARE @Filter VARCHAR(MAX) = ''
IF @idNumber IS NOT NULL
SET @Filter= @Filter + ' AND TS.idNumber='''+@idNumber+''''
IF @customerName is NOT NULL
SET @Filter= @Filter + ' AND TS.fullName='''+@customerName+''''
IF @releasedBy is NOT NULL
SET @Filter= @Filter + ' AND t.approvedby='''+@releasedBy+''''
--SET @SQL='
SET @SQL = '
SELECT
[S.N]= ROW_NUMBER() OVER (ORDER BY [TXN No.]),
*
FROM (
SELECT
[TXN Date]= RT.createdDate,
[TXN No.] = RT.id,
[Sender Name]= RT.senderName,
[ID Type]= TS.idType,
[ID Number]= TS.idNumber,
[Receiver Name]= RT.receiverName,
[Sending_Country]= RT.sCountry,
[Sending_Agent]= RT.sAgentName,
[Sending_Branch]= RT.sBranchName,
[Sending_User]= RT.createdBy,
[Collection_Currency]= RT.collCurr,
[Collection_Amount]= RT.cAmt,
[Receiving_Currency]= RT.payoutCurr,
[Receiving_Amount]= RT.pAmt,
[Receiving_Country]= RT.pCountry,
[Hold Reason]= t.reason,
[Approved By]=t.approvedby,
[Approved On]=t.approveddate,
[Approver Remarks]=t.approvedremarks
FROM vwremitTranAll RT WITH (NOLOCK)
INNER JOIN VWtranSendersall TS WITH (NOLOCK) ON RT.id=TS.tranId
INNER JOIN vwtranReceiversALL TR WITH (NOLOCK) ON RT.id=TR.tranId
LEFT JOIN staticDataValue SV WITH (NOLOCK) ON ts.idType = SV.detailtitle
INNER JOIN #TEMP t on RT.holdtranid=t.tranid
WHERE 1=1 ' + @Filter + '
UNION ALL
SELECT
[TXN Date]= RT.createdDate,
[TXN No.] = RT.id,
[Sender Name]= RT.senderName,
[ID Type]= TS.idType,
[ID Number]= TS.idNumber,
[Receiver Name]= RT.receiverName,
[Sending_Country]= RT.sCountry,
[Sending_Agent]= RT.sAgentName,
[Sending_Branch]= RT.sBranchName,
[Sending_User]= RT.createdBy,
[Collection_Currency]= RT.collCurr,
[Collection_Amount]= RT.cAmt,
[Receiving_Currency]= RT.payoutCurr,
[Receiving_Amount]= RT.pAmt,
[Receiving_Country]= RT.pCountry,
[Hold Reason]= t.reason,
[Approved By]=t.approvedby,
[Approved On]=t.approveddate,
[Approver Remarks]=t.approvedremarks
FROM vwremitTranAll RT WITH (NOLOCK)
INNER JOIN VWtranSendersall TS WITH (NOLOCK) ON RT.id=TS.tranId
INNER JOIN vwtranReceiversALL TR WITH (NOLOCK) ON RT.id=TR.tranId
LEFT JOIN staticDataValue SV WITH (NOLOCK) ON ts.idType = SV.detailtitle
INNER JOIN #TEMP t on RT.ID=t.tranid
WHERE RT.holdtranid IS NULL ' + @Filter + '
) x'
EXEC (@SQL)
--PRINT @SQL
END
EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
IF OBJECT_ID(N'tempdb..#filter') IS NOT NULL
DROP TABLE #filter
CREATE TABLE #filter(head varchar(200), value varchar(500))
INSERT INTO #filter(head,value)
SELECT 'From Date' head, value = @fromDate UNION ALL
SELECT 'To Date' head, value = @toDate
IF @releasedBy IS NOT NULL
INSERT INTO #filter(head,value) VALUES('released By', @releasedBy)
INSERT INTO #filter(head,value) VALUES('Include System Release', CASE WHEN @includesystem = 'Y' THEN 'YES' ELSE 'NO' END)
IF @idNumber IS NOT NULL
INSERT INTO #filter(head,value) VALUES('Id Number', @idNumber)
IF @customerName IS NOT NULL
INSERT INTO #filter(head,value) VALUES('Customer Name', @customerName)
IF @reportType IS NOT NULL
INSERT INTO #filter(head,value) VALUES('Report Type', @reportType)
IF @holdReason IS NOT NULL
INSERT INTO #filter(head,value) VALUES('Hold Reason', @holdReason)
SELECT * FROM #filter
SELECT 'Compliance Release Report' title
RETURN
END
ELSE IF @flag = 'ddl'
BEGIN
SELECT 'Transaction Amount' Value, 'Transaction Amount' Reason UNION ALL
SELECT 'Transaction Count' Value, 'Transaction Count' Reason UNION ALL
SELECT 'Multiple POS' Value, 'Multiple POS' Reason UNION ALL
SELECT 'Suspected Duplicate' Value, 'Suspected Duplicate' Reason
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT 1 errorCode, ERROR_MESSAGE() msg, NULL id
END CATCH
GO