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.
 
 
 

1566 lines
50 KiB

USE [FastMoneyPro_Remit]
GO
/****** Object: StoredProcedure [dbo].[proc_sendTranDomesticHo] Script Date: 7/4/2019 11:35:48 AM ******/
DROP PROCEDURE [dbo].[proc_sendTranDomesticHo]
GO
/****** Object: StoredProcedure [dbo].[proc_sendTranDomesticHo] Script Date: 7/4/2019 11:35:48 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[proc_sendTranDomesticHo] (
@flag VARCHAR(50)
,@user VARCHAR(30)
,@id BIGINT = NULL
,@membershipId VARCHAR(20) = NULL
,@agentUniqueRefId VARCHAR(30) = NULL
,@senderId BIGINT = NULL
,@sMemId VARCHAR(20) = NULL
,@sFirstName VARCHAR(50) = NULL
,@sMiddleName VARCHAR(50) = NULL
,@sLastName1 VARCHAR(50) = NULL
,@sLastName2 VARCHAR(50) = NULL
,@sAddress VARCHAR(200)= NULL
,@sContactNo VARCHAR(20) = NULL
,@sIdType VARCHAR(50) = NULL
,@sIdNo VARCHAR(30) = NULL
,@sEmail VARCHAR(50) = NULL
,@receiverId BIGINT = NULL
,@rMemId VARCHAR(20) = NULL
,@rFirstName VARCHAR(50) = NULL
,@rMiddleName VARCHAR(50) = NULL
,@rLastName1 VARCHAR(50) = NULL
,@rLastName2 VARCHAR(50) = NULL
,@rAddress VARCHAR(200)= NULL
,@rContactNo VARCHAR(20) = NULL
,@rIdType VARCHAR(50) = NULL
,@rIdNo VARCHAR(30) = NULL
,@remarks VARCHAR(200)= NULL
,@sBranch INT = NULL
,@pBranch INT = NULL
,@pBank INT = NULL
,@pBankBranch INT = NULL
,@accountNo VARCHAR(30) = NULL
,@pCountry VARCHAR(100)= NULL --payout Country
,@pState VARCHAR(100)= NULL --payout State
,@pDistrict VARCHAR(100)= NULL --payout District
,@pLocation INT = NULL --payout Location
,@collMode VARCHAR(50) = NULL
,@collCurr VARCHAR(3) = NULL
,@transferAmt MONEY = NULL
,@serviceCharge MONEY = NULL
,@handlingFee MONEY = NULL
,@cAmt MONEY = NULL
,@exRate MONEY = NULL
,@pAmt MONEY = NULL
,@payoutCurr VARCHAR(3) = NULL
,@deliveryMethod VARCHAR(50) = NULL
,@purpose VARCHAR(100)= NULL
,@sourceOfFund VARCHAR(100)= NULL
,@Occupation VARCHAR(200)= NULL
,@relationship VARCHAR(100)= NULL
,@controlNo VARCHAR(20) = NULL
,@txnId INT = NULL
,@enableApi CHAR(1) = NULL
,@sDcInfo VARCHAR(50) = NULL
,@sIpAddress VARCHAR(50) = NULL
,@complianceAction CHAR(1) = NULL
,@compApproveRemark VARCHAR(200) = NULL
,@markSuspicious CHAR(1) = NULL
,@txnbatchId VARCHAR(50) = NULL
,@txnDocFolder VARCHAR(50) = NULL
,@sDOB VARCHAR(25) = NULL
,@sIdIssuedDate VARCHAR(25) = NULL
,@sIdValidDate VARCHAR(25) = NULL
,@sDOBBs VARCHAR(25) = NULL
,@sIdIssuedDateBs VARCHAR(25) = NULL
,@sIdValidDateBs VARCHAR(25) = NULL
,@sIdIssuedPlace VARCHAR(50) = NULL
,@sCustCardId VARCHAR(25) = NULL
,@sGender VARCHAR(25) = NULL
,@sMotherFatherName VARCHAR(25) = NULL
,@sAmountThreshold MONEY = NULL
)
AS
SET XACT_ABORT ON
BEGIN TRY
DECLARE
@sCurrCostRate DECIMAL(15, 9)
,@sCurrHoMargin DECIMAL(15, 9)
,@pCurrCostRate DECIMAL(15, 9)
,@pCurrHoMargin DECIMAL(15, 9)
,@sCurrAgentMargin DECIMAL(15, 9)
,@pCurrAgentMargin DECIMAL(15, 9)
,@sCurrSuperAgentMargin DECIMAL(15, 9)
,@pCurrSuperAgentMargin DECIMAL(15, 9)
,@customerRate DECIMAL(15, 9)
,@sAgentSettRate DECIMAL(15, 9)
,@pDateCostRate DECIMAL(15, 9)
,@sAgentComm MONEY
,@sAgentCommCurrency VARCHAR(3)
,@sSuperAgentComm MONEY
,@sSuperAgentCommCurrency VARCHAR(3)
,@sHubComm MONEY
,@sHubCommCurrency VARCHAR(3)
,@pAgentComm MONEY
,@pAgentCommCurrency VARCHAR(3)
,@pSuperAgentComm MONEY
,@pSuperAgentCommCurrency VARCHAR(3)
,@pHubComm MONEY
,@pHubCommCurrency VARCHAR(3)
,@pBankName VARCHAR(100)
,@pBankBranchName VARCHAR(100)
,@promotionCode INT
,@promotionType INT
,@sSuperAgent INT
,@sSuperAgentName VARCHAR(100)
,@sAgent INT
,@sAgentName VARCHAR(100)
,@sBranchName VARCHAR(100)
,@sCountry VARCHAR(100)
,@pSuperAgent INT
,@pSuperAgentName VARCHAR(100)
,@pAgent INT
,@pAgentName VARCHAR(100)
,@pBranchName VARCHAR(100)
,@settlingAgent INT = NULL
,@code VARCHAR(50)
,@userName VARCHAR(50)
,@password VARCHAR(50)
,@sCountryId VARCHAR(30)
,@msg VARCHAR(200)
,@senderName VARCHAR(100)
,@receiverName VARCHAR(100)
DECLARE
@limitBal MONEY
,@sendingCustType INT
,@sendingCurrency VARCHAR(3)
,@receivingCurrency VARCHAR(3)
,@receivingCustType INT
DECLARE
@sendingCount INT
,@sendingAmount MONEY
,@receivingCount INT
,@receivingAmount MONEY
,@tranCount INT
,@tranAmount MONEY
,@period INT
,@nextAction INT
DECLARE
@pCountryId INT
,@deliveryMethodId INT
,@agentType INT
,@actAsBranchFlag CHAR(1)
,@approveFlag CHAR(1)
,@currentDate DATETIME
,@sFullName VARCHAR(200)
,@rFullName VARCHAR(200)
DECLARE @controlNoEncrypted VARCHAR(20)
DECLARE @csMasterId INT, @complianceRes VARCHAR(20), @totalRows INT, @count INT, @compFinalRes VARCHAR(20), @result VARCHAR(MAX)
DECLARE @csMasterRec TABLE (rowId INT IDENTITY(1,1), masterId INT)
SET @senderName = @sFirstName + ISNULL(' ' + @sMiddleName, '') + ISNULL(' ' + @sLastName1, '') + ISNULL(' ' + @sLastName2, '')
SET @receiverName = @rFirstName + ISNULL(' ' + @rMiddleName, '') + ISNULL(' ' + @rLastName1, '') + ISNULL(' ' + @rLastName2, '')
IF @flag = 'm'
BEGIN
IF NOT EXISTS(SELECT 'X' FROM customers WITH(NOLOCK) WHERE membershipId = @membershipId AND ISNULL(isDeleted, 'N') <> 'Y')
BEGIN
EXEC proc_errorHandler 1, 'Customer with this Membership Id not found', NULL
END
ELSE IF EXISTS(SELECT 'X' FROM customers WITH(NOLOCK)
WHERE membershipId = @membershipId
AND ISNULL(isDeleted, 'N') <> 'Y'
AND ISNULL(isBlackListed, 'N') = 'Y')
BEGIN
EXEC proc_errorHandler 1, 'This customer is blacklisted. Cannot proceed for transaction.', NULL
END
ELSE
BEGIN
EXEC proc_errorHandler 0, 'Customer Found', NULL
END
SELECT
cust.*
,ci.idType
,ci.idNumber
FROM customers cust WITH(NOLOCK)
LEFT JOIN customerIdentity ci WITH(NOLOCK) ON cust.customerId = ci.customerId AND ci.isPrimary = 'Y' AND ISNULL(ci.isDeleted, 'N') <> 'Y' AND ISNULL(ci.isActive, 'Y') = 'Y'
WHERE cust.membershipId = @membershipId AND ISNULL(cust.isDeleted, 'N') <> 'Y'
RETURN
END
ELSE IF @flag = 'u'
BEGIN
UPDATE remitTran SET
modifiedDate = GETDATE()
,modifiedDateLocal = DBO.FNADateFormatTZ(GETDATE(), @user)
,modifiedBy = @user
WHERE id = @id
END
ELSE IF @flag = 'a'
BEGIN
SELECT * FROM remitTran WITH(NOLOCK) WHERE id = @id
END
ELSE IF @flag = 'v'
BEGIN
--1. Find Sender Information
IF (@sBranch IS NULL)
SELECT @sBranch = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @user
SELECT @agentType = agentType, @sAgent = parentId, @sBranchName = agentName, @sCountry = agentCountry FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch
--Check for Branch or Agent Acting as Branch
IF @agentType = 2903
BEGIN
SET @sAgent = @sBranch
END
SELECT DISTINCT @sSuperAgent = parentId, @sAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sAgent
SELECT DISTINCT @sSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sSuperAgent
--2. Find Settling Agent
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sBranch AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sAgent AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sSuperAgent AND isSettlingAgent = 'Y'
--3. Check Limit starts
SET @limitBal = [dbo].FNAGetLimitBal(@settlingAgent)
IF @transferAmt > @limitBal
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit. Please, Check your available limit.', NULL
RETURN
END
EXEC proc_errorHandler 0, 'Verification Successful', NULL
END
/*
IF @flag='validate'
BEGIN
SELECT @pCountry = 'Nepal'
SELECT @sCountry = 'Nepal'
SELECT @pCountryId = '151'
SELECT @sCountryId = '151'
DECLARE @cisMasterId INT, @validationRes VARCHAR(50), @validationFinalRes VARCHAR(100)
DECLARE @cisMasterRec TABLE (rowId INT IDENTITY(1,1), masterId INT)
DECLARE @requiredField TABLE (rowId INT IDENTITY(1,1), criteriaId INT,controlId VARCHAR(50),errorMsg VARCHAR(200))
DECLARE @cisValidationResult TABLE (rowId INT IDENTITY(1,1), cisDetailId VARCHAR(20))
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
-------Required Validation Check Begin----------
INSERT @cisMasterRec(masterId)
SELECT masterId FROM dbo.FNAGetIdRuleMaster(@sBranch, @pCountryId, NULL, @pBranch, NULL, @senderId, @receiverId)
SELECT @totalRows = COUNT(*) FROM @cisMasterRec
IF EXISTS(SELECT 'X' FROM @cisMasterRec)
BEGIN
SET @count = 1
WHILE(@count <= @totalRows)
BEGIN
SELECT @cisMasterId = masterId FROM @cisMasterRec WHERE rowId = @count
--PRINT CAST (@count AS VARCHAR)+' count'
--PRINT CAST (@cisMasterId AS VARCHAR)+' cisMasterId'
EXEC proc_idRuleDetail
@user = @user
,@tranId = @id
,@tAmt = @transferAmt
,@senId = @senderId
,@masterId = @cisMasterId
,@paymentMethod = @deliveryMethodId
,@checkingFor = 'v'
,@senderId = @sIdNo
,@senderName = @senderName
,@senderMobile = @sContactNo
,@result = @validationRes OUTPUT
SET @count = @count + 1
IF @validationRes IS NOT NULL
INSERT INTO @cisValidationResult
SELECT DISTINCT VALUE from dbo.udf_Split(@validationRes,',')
END
END
--SELECT * FROM @cisValidationResult
IF EXISTS (SELECT 'X' FROM @cisValidationResult)
BEGIN
SET @msg = 'Field validation failed.'
SELECT 101 errorCode, @msg msg, NULL id
SELECT
criteriaId
,controlId
,errorMsg
FROM cisFieldMapping WITH(NOLOCK) where criteriaId in(
SELECT DISTINCT criteriaId FROM cisCriteria c WITH(NOLOCK) INNER JOIN @cisValidationResult tmpc
ON c.cisDetailId = tmpc.cisDetailId)
AND ISNULL(scope,'D')='D' AND ISNULL(IsActive,'Y')='Y'
ORDER BY ISNULL(controlRankID,0)
--SELECT DISTINCT * FROM @requiredField
RETURN
END
-------Required Validation Check End----------
EXEC [proc_errorHandler] 0, 'Compliance Validation Successful.', NULL
END
ELSE IF @flag = 'vt' --Verify Transaction
BEGIN
IF @user IS NULL
BEGIN
EXEC proc_errorHandler 1, 'Your session has expired. Cannot send transaction', NULL
RETURN
END
IF (@pBranch IS NOT NULL)
BEGIN
SELECT @pAgent = parentId, @pBranchName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBranch
SELECT @pSuperAgent = parentId, @pAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pAgent
SELECT @pSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pSuperAgent
END
SELECT @pCountry = 'Nepal'
SELECT @sCountry = 'Nepal'
SELECT @pCountryId = '151'
SELECT @sCountryId = '151'
--3. Check Limit starts
SELECT @collCurr = 'NPR', @payoutCurr = 'NPR'
SELECT @sendingCurrency = @collCurr
SELECT @receivingCurrency = @payoutCurr
SET @limitBal = [dbo].FNAGetLimitBal(@settlingAgent)
SET @currentDate = dbo.FNAGetDateInNepalTz()
IF EXISTS(SELECT 'X' FROM remitTran trn WITH(NOLOCK)
LEFT JOIN tranSenders sen WITH(NOLOCK) ON trn.id = sen.tranId
LEFT JOIN tranReceivers rec WITH(NOLOCK) ON trn.id = rec.tranId
WHERE
sen.firstName = @sFirstName
AND ISNULL(sen.middleName, '') = ISNULL(@sMiddleName, '')
AND ISNULL(sen.lastName1, '') = ISNULL(@sLastName1, '')
AND ISNULL(sen.lastName2, '') = ISNULL(@sLastName2, '')
AND rec.firstName = @rFirstName
AND ISNULL(rec.middleName, '') = ISNULL(@rMiddleName, '')
AND ISNULL(rec.lastName1, '') = ISNULL(@rLastName1, '')
AND ISNULL(rec.lastName2, '') = ISNULL(@rLastName2, '')
AND trn.tAmt = @transferAmt
AND trn.pLocation = @pLocation
AND trn.serviceCharge = @serviceCharge
AND trn.cAmt = @cAmt
AND DATEDIFF(MI, trn.createdDate, @currentDate) <= 5)
BEGIN
EXEC proc_errorHandler 1, 'Similar Transaction Found', NULL
RETURN
END
IF @transferAmt > @limitBal
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit. Please, Check your available limit.', NULL
RETURN
END
IF NOT EXISTS (
SELECT
'X'
FROM sendTranLimit
WHERE countryId = @sCountryId
AND (tranType = @collMode OR tranType IS NULL)
AND (paymentType = @deliveryMethod OR paymentType IS NULL)
AND (customerType = @sendingCustType OR customerType IS NULL)
AND currency = @sendingCurrency
AND (receivingCountry = @pCountryId OR receivingCountry IS NULL)
AND ISNULL(minLimitAmt, 0) <= @transferAmt
AND ISNULL(maxLimitAmt, 0) >= @transferAmt
AND ISNULL(isActive, 'N') = 'Y'
)
BEGIN
EXEC [proc_errorHandler] 3, 'Country Sending limit is not defined or exceeds.', NULL
RETURN
END
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
-------Compliance Check Begin----------
--DECLARE @result VARCHAR(MAX)
INSERT @csMasterRec(masterId)
SELECT masterId FROM dbo.FNAGetComplianceRuleMaster(@sBranch, @pCountryId, NULL, @pBranch, NULL, @senderId, @receiverId)
SELECT @totalRows = COUNT(*) FROM @csMasterRec
DECLARE @denyTxn CHAR(1) = 'N'
IF EXISTS(SELECT 'X' FROM @csMasterRec)
BEGIN
DELETE FROM remitTranComplianceTemp WHERE agentRefId = @agentUniqueRefId
SET @count = 1
WHILE(@count <= @totalRows)
BEGIN
SELECT @csMasterId = masterId FROM @csMasterRec WHERE rowId = @count
EXEC proc_complianceRuleDetail
@user = @user
,@tranId = @id
,@tAmt = @transferAmt
,@senId = @senderId
,@benId = @receiverId
,@beneficiaryName = @receiverName
,@beneficiaryMobile = @rContactNo
,@benAccountNo = @accountNo
,@masterId = @csMasterId
,@paymentMethod = @deliveryMethodId
,@checkingFor = 'v'
,@agentRefId = @agentUniqueRefId
,@result = @complianceRes OUTPUT
,@senderId = @sIdNo
,@senderName = @senderName
,@senderMobile = @sContactNo
SET @compFinalRes = ISNULL(@compFinalRes, '') + ISNULL(@complianceRes, '')
IF @complianceRes = 'M' AND ISNULL(@complianceAction, '') <> 'B' AND ISNULL(@complianceAction, '') <> 'C'
SET @complianceAction = 'M'
IF @complianceRes = 'C' AND ISNULL(@complianceAction, '') <> 'B'
SET @complianceAction = 'C'
IF @complianceRes = 'B'
SET @complianceAction = 'B'
SET @count = @count + 1
END
END
IF(ISNULL(@compFinalRes, '') <> '')
BEGIN
IF(@compFinalRes <> '')
BEGIN
IF @complianceAction = 'B'
SET @msg = 'WARNING!!! This customer is under compliance'
ELSE IF @complianceAction = 'M'
BEGIN
SET @compApproveRemark = ISNULL(@compApproveRemark, 'Marked for Compliance')
SET @msg = 'WARNING!!! This customer is under compliance'
END
ELSE
SET @msg = 'WARNING!!! This customer is under compliance'
SELECT 101 errorCode, @msg msg, @complianceAction id, @compApproveRemark compApproveRemark
--SELECT 101 errorCode, @msg msg, 'B' id, @compApproveRemark compApproveRemark
--EXEC proc_sendPageLoadData @flag = 'compliance', @user = @user, @agentRefId = @agentUniqueRefId
END
RETURN
END
-------Compliance Check End----------
EXEC [proc_errorHandler] 0, 'Transaction verification Successful', NULL
--*****Check For Same Name*****
SELECT tranId = rt.id, senderName, sIdType = ISNULL(sdv.detailTitle,sen.IdType), sIdNo = sen.idNumber, pAmt, pCountry
FROM vwRemitTran rt WITH(NOLOCK)
INNER JOIN vwTranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
LEFT JOIN staticDataValue sdv WITH(NOLOCK) ON sen.idType=CAST(sdv.valueId AS VARCHAR)
WHERE senderName = @senderName AND rt.createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
--*****Check For Same Id*****
SELECT tranId = rt.id, senderName, sIdType = ISNULL(sdv.detailTitle,sen.IdType), sIdNo = sen.idNumber, pAmt, pCountry
FROM vwRemitTran rt WITH(NOLOCK)
INNER JOIN vwTranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
LEFT JOIN staticDataValue sdv WITH(NOLOCK) ON sen.idType=CAST(sdv.valueId AS VARCHAR)
WHERE idType = @sIdType AND idNumber = @sIdNo AND rt.createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
END
*/
IF @flag = 'vt'
BEGIN
IF EXISTS(SELECT 'X' FROM customerMaster WITH(NOLOCK)
WHERE membershipId = @sMemId
AND ISNULL(isDeleted, 'N') <> 'Y' AND approvedDate IS NULL)
BEGIN
IF ISNULL(@sAmountThreshold,0) <> 0 AND ISNULL(@transferAmt,0)<>0
BEGIN
IF @transferAmt >= @sAmountThreshold
BEGIN
SELECT 1 errorCode,'Customer with this membership ID is not approved yet. Unapproved customer cannot send money greater than or equals to threshold amount using customer card. Please contact head office.' msg,NULL id,'custenroll' vtype
RETURN;
END
END
END
IF @sIdNo IS NULL AND @sContactNo IS NULL
BEGIN
SELECT 0 errorCode,'Transaction verification Successful.' msg,NULL id,'compliance' vtype
RETURN
END
SELECT @pCountry = 'Nepal'
SELECT @sCountry = 'Nepal'
SELECT @pCountryId = '151'
SELECT @sCountryId = '151'
DECLARE @cisMasterId INT, @validationRes VARCHAR(50), @validationFinalRes VARCHAR(100)
DECLARE @cisMasterRec TABLE (rowId INT IDENTITY(1,1), masterId INT)
DECLARE @requiredField TABLE (rowId INT IDENTITY(1,1), criteriaId INT,controlId VARCHAR(50),errorMsg VARCHAR(200))
DECLARE @cisValidationResult TABLE (rowId INT IDENTITY(1,1), cisDetailId VARCHAR(20))
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
-------Required Validation Check Begin----------
INSERT @cisMasterRec(masterId)
SELECT masterId FROM dbo.FNAGetIdRuleMaster(@sBranch, @pCountryId, NULL, @pBranch, NULL, @senderId, @receiverId)
SELECT @totalRows = COUNT(*) FROM @cisMasterRec
IF EXISTS(SELECT 'X' FROM @cisMasterRec)
BEGIN
SET @count = 1
WHILE(@count <= @totalRows)
BEGIN
SELECT @cisMasterId = masterId FROM @cisMasterRec WHERE rowId = @count
EXEC proc_idRuleDetail
@user = @user
,@tranId = @id
,@tAmt = @transferAmt
,@senId = @senderId
,@masterId = @cisMasterId
,@paymentMethod = @deliveryMethodId
,@checkingFor = 'v'
,@senderId = @sIdNo
,@senderName = @senderName
,@senderMobile = @sContactNo
,@result = @validationRes OUTPUT
SET @count = @count + 1
IF @validationRes IS NOT NULL
INSERT INTO @cisValidationResult
SELECT DISTINCT VALUE from dbo.udf_Split(@validationRes,',')
END
END
IF EXISTS (SELECT 'X' FROM @cisValidationResult)
BEGIN
DECLARE @FieldValue TABLE (controlId VARCHAR(50) UNIQUE, value VARCHAR(200))
INSERT @FieldValue
SELECT 'sof', @sourceOfFund UNION ALL
SELECT 'por', @purpose UNION ALL
SELECT 'relWithSender', @relationship UNION ALL
SELECT 'sIdType', @sIdType UNION ALL
SELECT 'sIdNo', @sIdNo UNION ALL
SELECT 'txtSendIdValidDate', @sIdValidDate UNION ALL
SELECT 'txtSendDOB', @sDOB UNION ALL
SELECT 'occupation', @Occupation UNION ALL
SELECT 'sIdIssuedPlace', @sIdIssuedPlace
DELETE FROM @FieldValue WHERE NULLIF(LTRIM(value), '') IS NULL
OR (value = 'select' AND controlId IN ('sof', 'por', 'relWithSender' , 'occupation','sIdIssuedPlace'))
--@sIdType
IF '1301' = @sIdType
DELETE FROM @FieldValue WHERE controlId = 'txtSendIdValidDate'
SELECT
cm.criteriaId
,cm.controlId
,errorMsg
INTO #final
FROM cisFieldMapping cm WITH(NOLOCK)
INNER JOIN cisCriteria c WITH(NOLOCK) ON cm.criteriaId = c.criteriaId
INNER JOIN @cisValidationResult tmpc ON c.cisDetailId = tmpc.cisDetailId
LEFT JOIN @FieldValue fv ON cm.controlId = fv.controlId
WHERE ISNULL(cm.scope,'B')='B' AND ISNULL(cm.IsActive,'Y')='Y'
AND fv.controlId IS NULL AND cm.controlId IS NOT NULL
ORDER BY ISNULL(controlRankID,0)
IF '1301' = @sIdType
DELETE FROM #final WHERE controlId = 'txtSendIdValidDate'
IF EXISTS(SELECT 'X' FROM #final)
BEGIN
SET @msg = 'Field validation failed.'
SELECT 101 errorCode, @msg msg, NULL id,'idrule' vtype
SELECT DISTINCT * FROM #final
RETURN
END
END
IF @user IS NULL
BEGIN
SELECT 1 errorCode,'Your session has expired. Cannot send transaction.' msg,NULL id,'compliance' vtype
RETURN
END
IF (@pBranch IS NOT NULL)
BEGIN
SELECT @pAgent = parentId, @pBranchName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBranch
SELECT @pSuperAgent = parentId, @pAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pAgent
SELECT @pSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pSuperAgent
END
--3. Check Limit starts
SELECT @collCurr = 'NPR', @payoutCurr = 'NPR'
SELECT @sendingCurrency = @collCurr
SELECT @receivingCurrency = @payoutCurr
SET @limitBal = [dbo].FNAGetLimitBal(@settlingAgent)
SET @currentDate = dbo.FNAGetDateInNepalTz()
IF EXISTS(SELECT 'X' FROM remitTran trn WITH(NOLOCK)
LEFT JOIN tranSenders sen WITH(NOLOCK) ON trn.id = sen.tranId
LEFT JOIN tranReceivers rec WITH(NOLOCK) ON trn.id = rec.tranId
WHERE
sen.firstName = @sFirstName
AND ISNULL(sen.middleName, '') = ISNULL(@sMiddleName, '')
AND ISNULL(sen.lastName1, '') = ISNULL(@sLastName1, '')
AND ISNULL(sen.lastName2, '') = ISNULL(@sLastName2, '')
AND rec.firstName = @rFirstName
AND ISNULL(rec.middleName, '') = ISNULL(@rMiddleName, '')
AND ISNULL(rec.lastName1, '') = ISNULL(@rLastName1, '')
AND ISNULL(rec.lastName2, '') = ISNULL(@rLastName2, '')
AND trn.tAmt = @transferAmt
AND trn.pLocation = @pLocation
AND trn.serviceCharge = @serviceCharge
AND trn.cAmt = @cAmt
AND DATEDIFF(MI, trn.createdDate, @currentDate) <= 5)
BEGIN
SELECT 1 errorCode,'Similar Transaction Found.' msg,NULL id,'compliance' vtype
RETURN
END
IF @transferAmt > @limitBal
BEGIN
SELECT 1 errorCode,'Transfer amount exceeds Limit. Please, Check your available limit.' msg,NULL id,'compliance' vtype
RETURN
END
IF NOT EXISTS (
SELECT
'X'
FROM sendTranLimit
WHERE countryId = @sCountryId
AND (tranType = @collMode OR tranType IS NULL)
AND (paymentType = @deliveryMethod OR paymentType IS NULL)
AND (customerType = @sendingCustType OR customerType IS NULL)
AND currency = @sendingCurrency
AND (receivingCountry = @pCountryId OR receivingCountry IS NULL)
AND ISNULL(minLimitAmt, 0) <= @transferAmt
AND ISNULL(maxLimitAmt, 0) >= @transferAmt
AND ISNULL(isActive, 'N') = 'Y'
)
BEGIN
SELECT 3 errorCode,'Country Sending limit is not defined or exceeds.' msg,NULL id,'compliance' vtype
RETURN
END
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
-------Compliance Check Begin----------
INSERT @csMasterRec(masterId)
SELECT masterId FROM dbo.FNAGetComplianceRuleMaster(@sBranch, @pCountryId, NULL, @pBranch, NULL, @senderId, @receiverId)
SELECT @totalRows = COUNT(*) FROM @csMasterRec
DECLARE @denyTxn CHAR(1) = 'N'
IF EXISTS(SELECT 'X' FROM @csMasterRec)
BEGIN
DELETE FROM remitTranComplianceTemp WHERE agentRefId = @agentUniqueRefId
SET @count = 1
WHILE(@count <= @totalRows)
BEGIN
SELECT @csMasterId = masterId FROM @csMasterRec WHERE rowId = @count
EXEC proc_complianceRuleDetail
@user = @user
,@tranId = @id
,@tAmt = @transferAmt
,@senId = @senderId
,@benId = @receiverId
,@beneficiaryName = @receiverName
,@beneficiaryMobile = @rContactNo
,@benAccountNo = @accountNo
,@masterId = @csMasterId
,@paymentMethod = @deliveryMethodId
,@checkingFor = 'v'
,@agentRefId = @agentUniqueRefId
,@result = @complianceRes OUTPUT
,@senderId = @sIdNo
,@senderName = @senderName
,@senderMobile = @sContactNo
SET @compFinalRes = ISNULL(@compFinalRes, '') + ISNULL(@complianceRes, '')
IF @complianceRes = 'M' AND ISNULL(@complianceAction, '') <> 'B' AND ISNULL(@complianceAction, '') <> 'C'
SET @complianceAction = 'M'
IF @complianceRes = 'C' AND ISNULL(@complianceAction, '') <> 'B'
SET @complianceAction = 'C'
IF @complianceRes = 'B'
SET @complianceAction = 'B'
SET @count = @count + 1
END
END
IF(ISNULL(@compFinalRes, '') <> '')
BEGIN
IF(@compFinalRes <> '')
BEGIN
IF @complianceAction = 'B'
SET @msg = 'WARNING!!! This customer is under compliance'
ELSE IF @complianceAction = 'M'
BEGIN
SET @compApproveRemark = ISNULL(@compApproveRemark, 'Marked for Compliance')
SET @msg = 'WARNING!!! This customer is under compliance'
END
ELSE
SET @msg = 'WARNING!!! This customer is under compliance'
--SELECT 101 errorCode, @msg msg, @complianceAction id, @compApproveRemark compApproveRemark
SELECT 101 errorCode,@msg msg, @complianceAction id, @compApproveRemark compApproveRemark,'compliance' vtype
END
RETURN
END
-------Compliance Check End----------
--EXEC [proc_errorHandler] 0, 'Transaction verification Successful', NULL
SELECT 0 errorCode,'Transaction verification Successful.' msg,NULL id,'compliance' vtype
--*****Check For Same Name*****
SELECT tranId = rt.id, senderName, sIdType = ISNULL(sdv.detailTitle,sen.IdType), sIdNo = sen.idNumber, pAmt, pCountry
FROM vwRemitTran rt WITH(NOLOCK)
INNER JOIN vwTranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
LEFT JOIN staticDataValue sdv WITH(NOLOCK) ON sen.idType=CAST(sdv.valueId AS VARCHAR)
WHERE senderName = @senderName AND sBranch = @sBranch AND rt.createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
--*****Check For Same Id*****
SELECT tranId = rt.id, senderName, sIdType = ISNULL(sdv.detailTitle,sen.IdType), sIdNo = sen.idNumber, pAmt, pCountry
FROM vwRemitTran rt WITH(NOLOCK)
INNER JOIN vwTranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
LEFT JOIN staticDataValue sdv WITH(NOLOCK) ON sen.idType=CAST(sdv.valueId AS VARCHAR)
WHERE idType = @sIdType AND idNumber = @sIdNo AND sBranch = @sBranch AND rt.createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
END
ELSE IF @flag = 'i' --Local DB Insert
BEGIN
--Field Validation
IF @user IS NULL
BEGIN
EXEC proc_errorHandler 1, 'Your session has expired. Cannot send transaction', NULL
RETURN
END
IF (
(ISNULL(@pLocation, 0) = 0 and ISNULL(@deliveryMethod, '')='Cash Payment')
OR ISNULL(@deliveryMethod, '') = ''
OR ISNULL(@transferAmt,0) = 0
OR @sFirstName IS NULL
OR @rFirstName IS NULL
)
BEGIN
EXEC proc_errorHandler 1, 'Mandatory Field(s) missing', NULL
RETURN
END
--End Field Validation
SET @controlNo = '777' + LEFT(CAST(ABS(CHECKSUM(NEWID())) AS VARCHAR(10)) + '00000000', 8) + 'B'
SELECT @controlNoEncrypted = dbo.FNAEncryptString(@controlNo)
IF EXISTS(SELECT 'X' FROM dbo.controlNoListDomestic WITH(NOLOCK) WHERE controlNo = @controlNo)
BEGIN
EXEC proc_errorHandler 1, 'Technical error occured. Please try again.', NULL
RETURN
END
--Payout
IF (@pBranch IS NOT NULL)
BEGIN
SELECT @pAgent = parentId, @pBranchName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBranch
SELECT @pSuperAgent = parentId, @pAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pAgent
SELECT @pSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pSuperAgent
END
IF (@pBankBranch IS NOT NULL)
BEGIN
SELECT @pBank = parentId, @pBankBranchName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBankBranch
SELECT @pBankName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBank
END
SET @sCountry = 'Nepal'
SET @sCountryId = '151'
SET @pCountry = 'Nepal'
SET @pCountryId = '151'
--Sender
IF (@sBranch IS NULL)
SELECT @sBranch = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @user
IF (@sBranch IS NULL)
BEGIN
EXEC proc_errorHandler 1, 'Mandatory Field(s) missing', NULL
RETURN
END
SELECT @agentType = agentType, @sAgent = parentId, @sBranchName = agentName, @sCountry = agentCountry FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch
--Check for Branch or Agent Acting as Branch
IF @agentType = 2903
BEGIN
SET @sAgent = @sBranch
END
SELECT DISTINCT @sSuperAgent = parentId, @sAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sAgent
SELECT DISTINCT @sSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sSuperAgent
--2. Find Settling Agent
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sBranch AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sAgent AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sSuperAgent AND isSettlingAgent = 'Y'
--Validation Start
IF EXISTS(SELECT 'X' FROM customers WHERE mobile = @sContactNo AND ISNULL(isDeleted, 'N') <> 'Y' AND isBlackListed = 'Y')
BEGIN
EXEC proc_errorHandler 1, 'Sending Customer is blacklisted. Cannot proceed transaction', NULL
RETURN
END
IF EXISTS(SELECT 'X' FROM customers WHERE mobile = @rContactNo AND ISNULL(isDeleted, 'N') <> 'Y' AND isBlackListed = 'Y')
BEGIN
EXEC proc_errorHandler 1, 'Receiving Customer is blacklisted. Cannot proceed transaction', NULL
RETURN
END
--3. Check Limit starts
SELECT @collCurr = 'NPR', @payoutCurr = 'NPR'
SELECT @sendingCurrency = @collCurr
SELECT @receivingCurrency = @payoutCurr
SET @limitBal = [dbo].FNAGetLimitBal(@settlingAgent)
SET @currentDate = dbo.FNAGetDateInNepalTz()
IF EXISTS(SELECT 'X' FROM remitTran trn WITH(NOLOCK)
LEFT JOIN tranSenders sen WITH(NOLOCK) ON trn.id = sen.tranId
LEFT JOIN tranReceivers rec WITH(NOLOCK) ON trn.id = rec.tranId
WHERE
sen.firstName = @sFirstName
AND ISNULL(sen.middleName, '') = ISNULL(@sMiddleName, '')
AND ISNULL(sen.lastName1, '') = ISNULL(@sLastName1, '')
AND ISNULL(sen.lastName2, '') = ISNULL(@sLastName2, '')
AND rec.firstName = @rFirstName
AND ISNULL(rec.middleName, '') = ISNULL(@rMiddleName, '')
AND ISNULL(rec.lastName1, '') = ISNULL(@rLastName1, '')
AND ISNULL(rec.lastName2, '') = ISNULL(@rLastName2, '')
AND trn.tAmt = @transferAmt
AND trn.pLocation = @pLocation
AND DATEDIFF(MI, trn.createdDate, @currentDate) <= 5
)
BEGIN
EXEC proc_errorHandler 1, 'Similar Transaction Found', NULL
RETURN
END
IF @transferAmt > @limitBal
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit. Please, Check your available limit.', NULL
RETURN
END
IF EXISTS (
SELECT
'X'
FROM sendTranLimit
WHERE agentId = @settlingAgent
AND (tranType = @collMode OR tranType IS NULL)
AND (paymentType = @deliveryMethod OR paymentType IS NULL)
AND (customerType = @sendingCustType OR customerType IS NULL)
AND currency = @sendingCurrency
AND (receivingCountry = @pCountry OR receivingCountry IS NULL)
AND ISNULL(minLimitAmt, 0) > @transferAmt
AND ISNULL(maxLimitAmt, 0) < @transferAmt
AND ISNULL(isActive, 'N') = 'Y'
)
BEGIN
EXEC [proc_errorHandler] 2, 'Agent Sending limit is exceeded.', NULL
RETURN
END
IF NOT EXISTS (
SELECT
'X'
FROM sendTranLimit
WHERE countryId = @sCountryId
AND (tranType = @collMode OR tranType IS NULL)
AND (paymentType = @deliveryMethod OR paymentType IS NULL)
AND (customerType = @sendingCustType OR customerType IS NULL)
AND currency = @sendingCurrency
AND (receivingCountry = @pCountryId OR receivingCountry IS NULL)
AND ISNULL(minLimitAmt, 0) <= @transferAmt
AND ISNULL(maxLimitAmt, 0) >= @transferAmt
AND ISNULL(isActive, 'N') = 'Y'
)
BEGIN
EXEC [proc_errorHandler] 3, 'Country Sending limit is not defined or exceeds.', NULL
RETURN
END
--5.Txn Amount and Service Charge Validation
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
IF @deliveryMethod = 'Bank Deposit'
BEGIN
SELECT @pLocation = agentLocation FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBankBranch
SET @pAgentComm = 0
SET @pSuperAgentComm = 0
END
ELSE
BEGIN
SELECT
@pAgentComm = ISNULL(pAgentComm, 0)
,@pSuperAgentComm = ISNULL(psAgentComm, 0)
FROM dbo.FNAGetDomesticPayCommForCancel(@sBranch, @pLocation, @deliveryMethodId, @transferAmt)
END
--6.Domestic Service Charge and Commission Calculation
SELECT
@serviceCharge = ISNULL(serviceCharge, 0)
,@sAgentComm = ISNULL(sAgentComm, 0)
,@sSuperAgentComm = ISNULL(ssAgentComm, 0)
FROM dbo.FNAGetDomesticSendComm(@sBranch, NULL, @pLocation, @deliveryMethodId, @transferAmt)
SELECT @sSuperAgentCommCurrency = 'NPR', @sAgentCommCurrency = 'NPR', @pAgentCommCurrency = 'NPR', @pSuperAgentCommCurrency = 'NPR'
IF (@cAmt IS NULL)
BEGIN
SET @cAmt = @transferAmt + @serviceCharge
END
DECLARE @iCollectAmount MONEY
SET @iCollectAmount = @transferAmt + @serviceCharge
IF(@cAmt <> @iCollectAmount)
BEGIN
EXEC proc_errorHandler 1, 'Collection Amount not match', NULL
RETURN
END
IF @transferAmt > @limitBal
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit. Please, Check your available limit.', NULL
RETURN
END
--End of Txn Amount and Service Charge Validation
SET @sFullName = @sFirstName + ISNULL( ' ' + @sMiddleName, '') + ISNULL( ' ' + @sLastName1, '') + ISNULL( ' ' + @sLastName2, '')
SET @rFullName = @rFirstName + ISNULL( ' ' + @rMiddleName, '') + ISNULL( ' ' + @rLastName1, '') + ISNULL( ' ' + @rLastName2, '')
--7.Transaction Insert
BEGIN TRANSACTION
--8.Update A/C Balance
UPDATE creditLimit SET
todaysSent = ISNULL(todaysSent, 0) + ISNULL(@cAmt, 0)
WHERE agentId = @settlingAgent
-- ## customer bonus point
IF (ISNULL(@senderId, 0) <> 0)
BEGIN
DECLARE @maxPointsPerTxn INT, @bonusSchemeId INT, @bonusUnit INT, @bonusPoint INT
SELECT @bonusSchemeId = bonusId
,@maxPointsPerTxn = maxPointsPerTxn
FROM dbo.FNAGetBonusSetupDetail(@sCountryId, @sAgent, @sBranch, @pCountryId, @pAgent)
SELECT @bonusUnit = unit, @bonusPoint = points FROM bonusOperationSetup WITH(NOLOCK) WHERE bonusSchemeId = @bonusSchemeId
IF @bonusSchemeId IS NOT NULL
BEGIN
DECLARE @txnBonusPoint FLOAT
SET @txnBonusPoint = @pAmt * (CAST(@bonusPoint AS FLOAT)/CAST(@bonusUnit AS FLOAT))
SET @txnBonusPoint = CASE WHEN @txnBonusPoint > ISNULL(@maxPointsPerTxn, 0) THEN ISNULL(@maxPointsPerTxn, 0) ELSE ISNULL(@txnBonusPoint, 0) END
UPDATE customerMaster SET
bonusPointPending = ISNULL(bonusPointPending, 0) + @txnBonusPoint
,bonusTxnCount = ISNULL(bonusTxnCount, 0) + 1
,bonusTxnAmount = ISNULL(bonusTxnAmount, 0) + @pAmt
WHERE customerId = @senderId
END
-- ## update total send & activate txn date
UPDATE customerMaster SET
sendTxn = ISNULL(sendTxn,0)+1,
firstTxnDate = ISNULL(firstTxnDate,GETDATE())
WHERE customerId = @senderId
END
--## Start OFAC / Compliance
DECLARE @receiverOfacRes VARCHAR(MAX),
@ofacRes VARCHAR(MAX),
@ofacReason VARCHAR(MAX)
EXEC proc_ofacTrackerDomestic @flag = 't', @name = @sFullName, @Result = @ofacRes OUTPUT
EXEC proc_ofacTrackerDomestic @flag = 't', @name = @rFullName, @Result = @receiverOfacRes OUTPUT
IF ISNULL(@ofacRes, '') <> ''
BEGIN
SET @ofacReason = 'Matched by sender name'
END
IF ISNULL(@receiverOfacRes, '') <> ''
BEGIN
SET @ofacRes = ISNULL(@ofacRes + ',' + @receiverOfacRes, '' + @receiverOfacRes)
SET @ofacReason = 'Matched by receiver name'
END
IF ISNULL(@ofacRes, '') <> '' AND ISNULL(@receiverOfacRes, '') <> ''
BEGIN
SET @ofacReason = 'Matched by both sender name and receiver name'
END
INSERT INTO remitTran(
controlNo
,sCurrCostRate
,sCurrHoMargin
,pCurrCostRate
,pCurrHoMargin
,sCurrAgentMargin
,pCurrAgentMargin
,sCurrSuperAgentMargin
,pCurrSuperAgentMargin
,customerRate
,sAgentSettRate
,pDateCostRate
,serviceCharge
,handlingFee
,sAgentComm
,sAgentCommCurrency
,sSuperAgentComm
,sSuperAgentCommCurrency
,sHubComm
,sHubCommCurrency
,pAgentComm
,pAgentCommCurrency
,pSuperAgentComm
,pSuperAgentCommCurrency
,pHubComm
,pHubCommCurrency
,promotionCode
,promotionType
,pMessage
,sSuperAgent
,sSuperAgentName
,sAgent
,sAgentName
,sBranch
,sBranchName
,sCountry
,pSuperAgent
,pSuperAgentName
,pAgent
,pAgentName
,pBranch
,pBranchName
,pCountry
,pState
,pDistrict
,pLocation
,paymentMethod
,pBank
,pBankName
,pBankBranch
,pBankBranchName
,accountNo
,collMode
,collCurr
,tAmt
,cAmt
,pAmt
,payoutCurr
,relWithSender
,purposeOfRemit
,sourceOfFund
,tranStatus
,payStatus
,createdDate
,createdDateLocal
,createdBy
,tranType
,senderName
,receiverName
,bonusPoint
)
SELECT
@controlNoEncrypted
,@sCurrCostRate
,@sCurrHoMargin
,@pCurrCostRate
,@pCurrHoMargin
,@sCurrAgentMargin
,@pCurrAgentMargin
,@sCurrSuperAgentMargin
,@pCurrSuperAgentMargin
,@customerRate
,@sAgentSettRate
,@pDateCostRate
,@serviceCharge
,@handlingFee
,@sAgentComm
,@sAgentCommCurrency
,@sSuperAgentComm
,@sSuperAgentCommCurrency
,@sHubComm
,@sHubCommCurrency
,@pAgentComm
,@pAgentCommCurrency
,@pSuperAgentComm
,@pSuperAgentCommCurrency
,@pHubComm
,@pHubCommCurrency
,@promotionCode
,@promotionType
,@remarks
,@sSuperAgent
,@sSuperAgentName
,@sAgent
,@sAgentName
,@sBranch
,@sBranchName
,@sCountry
,@pSuperAgent
,@pSuperAgentName
,@pAgent
,@pAgentName
,@pBranch
,@pBranchName
,@pCountry
,@pState
,@pDistrict
,@pLocation
,@deliveryMethod
,@pBank
,@pBankName
,@pBankBranch
,@pBankBranchName
,@accountNo
,@collMode
,@collCurr
,@transferAmt
,@cAmt
,@pAmt
,@payoutCurr
,@relationship
,@purpose
,@sourceOfFund
,'Hold'
,'Unpaid'
,dbo.FNAGetDateInNepalTZ()
,dbo.FNAGetDateInNepalTZ()
,@user
,'D'
,@sFullName
,@rFullName
,@txnBonusPoint
SET @id = SCOPE_IDENTITY()
---End of Transaction Insert
---9.Customer Insert
IF (ISNULL(@senderId, 0) <> 0)
BEGIN
INSERT INTO tranSenders(
tranId,customerId,membershipId,firstName,middleName,lastName1,lastName2
,country,[address],[state],district,email,mobile
,dob,idPlaceOfIssue,idType,idNumber,dcInfo,ipAddress,occupation
)
SELECT top 1
@id,@senderId,membershipId,@sFirstName,@sMiddleName,@sLastName1,@sLastName2
,pCountry,@sAddress,pZone,pDistrict,@sEmail,@sContactNo
,dobEng,placeOfIssue,@sIdType,@sIdNo,@sDcInfo,@sIpAddress,@Occupation
FROM customerMaster c WITH(NOLOCK)
WHERE c.customerId = @senderId
END
ELSE
BEGIN
INSERT INTO tranSenders(
tranId,membershipId,firstName,middleName,lastName1,lastName2
,country,[address],[state],zipCode,city,email,homePhone,workPhone,mobile,nativeCountry
,dob,placeOfIssue,idType,idNumber,idPlaceOfIssue,issuedDate,validDate,dcInfo,ipAddress,occupation
)
SELECT
@id,@sMemId,@sFirstName,@sMiddleName,@sLastName1,@sLastName2
,'Nepal',@sAddress,NULL,NULL,NULL,@sEmail,NULL,NULL,@sContactNo,NULL
,@sDOB,@sIdIssuedPlace,@sIdType,@sIdNo,NULL,NULL,NULL,@sDcInfo,@sIpAddress,@Occupation
END
IF (ISNULL(@receiverId, 0) <> 0)
BEGIN
INSERT INTO tranReceivers(
tranId,customerId,membershipId,firstName,middleName,lastName1,lastName2
,country,[address],[state],district,email,mobile
,dob,idPlaceOfIssue,idType,idNumber
)
SELECT top 1
@id,@receiverId,membershipId,@rFirstName,@rMiddleName,@rLastName1,@rLastName2
,pCountry,@rAddress,pZone,pDistrict,email,@rContactNo
,dobEng,c.placeOfIssue,@rIdType,@rIdNo
FROM customerMaster c WITH(NOLOCK)
WHERE c.customerId = @receiverId
END
ELSE
BEGIN
INSERT INTO tranReceivers(
tranId,membershipId,firstName,middleName,lastName1,lastName2
,country,[address],[state],zipCode,city,email,homePhone,workPhone,mobile,nativeCountry
,dob,placeOfIssue,idType,idNumber,idPlaceOfIssue,issuedDate,validDate
)
SELECT
@id,@rMemId,@rFirstName,@rMiddleName,@rLastName1,@rLastName2
,'Nepal',@rAddress,NULL,NULL,NULL,NULL,NULL,NULL,@rContactNo,NULL
,NULL,NULL,@rIdType,@rIdNo,NULL,NULL,NULL
END
--End of Customer Insert
-- Move Txn Document
IF EXISTS(SELECT 'x' FROM dbo.txnDocUploadTEMP WITH(NOLOCK) WHERE batchId = @txnbatchId)
BEGIN
INSERT INTO txnDocUpload (
tranId
,[fileName]
,fileType
,fileDescription
,txnDocFolder
,createdBy
,createdDate
)
SELECT
@id
,[fileName]
,fileType
,fileDescription
,@txnDocFolder
,createdBy
,createdDate FROM dbo.txnDocUploadTEMP WITH(NOLOCK) WHERE batchId = @txnbatchId
DELETE FROM dbo.txnDocUploadTEMP WHERE batchId = @txnbatchId
END
-------Compliance Check Begin----------
IF EXISTS(SELECT 'X' FROM remitTranComplianceTemp WITH(NOLOCK) WHERE agentRefId = @agentUniqueRefId)
BEGIN
INSERT INTO remitTranCompliance(TranId, csDetailTranId, matchTranId)
SELECT @id, csDetailTranId, matchTranId FROM remitTranComplianceTemp WITH(NOLOCK) WHERE agentRefId = @agentUniqueRefId
DELETE FROM dbo.remitTranComplianceTemp WHERE agentRefId = @agentUniqueRefId
SET @compFinalRes = 'C'
END
---------------------------------
IF(ISNULL(@compFinalRes, '') <> '' OR ISNULL(@ofacRes, '') <> '')
BEGIN
IF(ISNULL(@ofacRes, '') <> '' AND ISNULL(@compFinalRes, '') = '')
BEGIN
INSERT remitTranOfac(TranId, blackListId, reason, flag)
SELECT @id, @ofacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@ofacRes)
UPDATE remitTran SET
tranStatus = 'OFAC Hold'
WHERE id = @id
END
ELSE IF(@compFinalRes <> '' AND ISNULL(@ofacRes, '') = '')
BEGIN
IF ISNULL(@complianceAction, '') = 'M'
BEGIN
UPDATE remitTran SET
tranStatus = 'Hold'
WHERE id = @id
UPDATE remitTranCompliance SET
approvedRemarks = @compApproveRemark
,approvedBy = 'system'
,approvedDate = GETDATE()
WHERE tranId = @id
END
ELSE
BEGIN
UPDATE remitTran SET
tranStatus = 'Compliance Hold'
WHERE id = @id
END
END
ELSE IF(ISNULL(@compFinalRes, '') <> '' AND ISNULL(@ofacRes, '') <> '')
BEGIN
INSERT remitTranOfac(TranId, blackListId, reason, flag)
SELECT @id, @ofacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@ofacRes)
IF ISNULL(@complianceAction, '') = 'M'
BEGIN
UPDATE remitTran SET
tranStatus = 'OFAC Hold'
WHERE id = @id
UPDATE remitTranCompliance SET
approvedRemarks = @compApproveRemark
,approvedBy = 'system'
,approvedDate = GETDATE()
WHERE tranId = @id
END
ELSE
BEGIN
UPDATE remitTran SET
tranStatus = 'OFAC/Compliance Hold'
WHERE id = @id
END
END
END
-------Compliance Check End----------
INSERT INTO controlNoListDomestic(controlNo)
SELECT @controlNo
DECLARE @mapCodeDom VARCHAR(20)
SELECT @mapCodeDom = mapCodeDom FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch
IF NOT EXISTS(SELECT 'X' FROM FastMoneyPro_account.dbo.REMIT_TRN_LOCAL WITH(NOLOCK) WHERE TRN_REF_NO = dbo.encryptDbLocal(@controlNo))
BEGIN
EXEC FastMoneyPro_account.dbo.[PROC_REMIT_DATA_UPDATE]
@flag = 's'
,@controlNo = @controlNo
,@mapCode = @mapCodeDom
,@sFirstName = @sFirstName
,@sMiddleName = @sMiddleName
,@sLastName1 = @sLastName1
,@sLastName2 = @sLastName2
,@rFirstName = @rFirstName
,@rMiddleName = @rMiddleName
,@rLastName1 = @rLastName1
,@rLastName2 = @rLastName2
,@cAmt = @cAmt
,@pAmt = @pAmt
,@serviceCharge = @serviceCharge
,@sAgentComm = @sAgentComm
,@pAgentComm = @pAgentComm
,@pBank = @pBank
,@pBankName = @pBankName
,@pBankBranch = @pBankBranch
,@deliveryMethod = @deliveryMethod
,@user = @user
,@tranId = @id
END
EXEC Proc_AgentBalanceUpdate @flag = 's',@tAmt = @cAmt ,@settlingAgent = @settlingAgent
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
EXEC [proc_errorHandler] 0, 'Transaction sent successfully and is waiting for approval', @controlNo
IF @remarks IS NOT NULL
BEGIN
INSERT INTO tranModifyLog(tranId,[message],createdBy,createdDate,MsgType,[status])
SELECT @id,@remarks,@user,dbo.FNAGetDateInNepalTZ(),'','Not Resolved'
END
/*Topup Information Send SMS*/
IF @sMemId IS NOT NULL
BEGIN
EXEC proc_topupQueue
@flag = 'a'
,@user = @user
,@tranId = @id
,@tranType = 'D'
,@mode = 's'
END
END
ELSE IF @flag = 'scTBL'
BEGIN
DECLARE @masterId INT
IF @sBranch IS NULL
SELECT @sBranch = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @user
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
IF @deliveryMethod = 'Bank Deposit'
BEGIN
SELECT @pLocation = agentLocation FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBankBranch
END
SELECT
@masterId = masterId
FROM dbo.FNAGetDomesticSendComm(@sBranch, NULL, @pLocation, @deliveryMethodId, @transferAmt)
SELECT
fromAmt = fromAmt
,toAmt = toAmt
,pcnt = serviceChargePcnt
,maxAmt = serviceChargeMaxAmt
,minAmt = serviceChargeMinAmt
FROM scDetail WHERE scMasterId = @masterId
ORDER BY fromAmt
END
ELSE IF @flag = 'sc'
BEGIN
IF @sBranch IS NULL
SELECT @sBranch = agentId FROM applicationUsers WITH(NOLOCK) WHERE userName = @user
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
IF @deliveryMethod = 'Bank Deposit'
BEGIN
SELECT @pLocation = agentLocation FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBankBranch
END
ELSE IF @deliveryMethod = 'Cash Payment' AND @transferAmt > dbo.FNAGetDomesticSendLimit() --AND @transferAmt > 100000
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit.', NULL
RETURN
END
SELECT sc = ISNULL(serviceCharge, -1) FROM dbo.FNAGetDomesticSendComm(@sBranch, NULL, @pLocation, @deliveryMethodId, @transferAmt)
END
ELSE IF @flag = 'acBal'
BEGIN
SELECT @sAgent = parentId, @agentType = agentType FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch
IF @agentType = 2903
SET @sAgent = @sBranch
SELECT @sSuperAgent = parentId FROM agentMaster WITH(NOLOCK) WHERE agentId = @sAgent
SELECT @settlingAgent = agentId FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WITH(NOLOCK) WHERE agentId = @sAgent AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WITH(NOLOCK) WHERE agentId = @sSuperAgent AND isSettlingAgent = 'Y'
SELECT
availableBal = ISNULL(dbo.FNAGetLimitBal(@settlingAgent), 0)
,balCurrency = cm.currencyCode
,limExpiry = ISNULL(CONVERT(VARCHAR, expiryDate, 101), 'N/A')
FROM creditLimit cl
LEFT JOIN currencyMaster cm WITH(NOLOCK) ON cl.currency = cm.currencyId
WHERE agentId = @settlingAgent
END
ELSE IF @flag = 'sc-v2'
BEGIN
IF @user IS NULL
BEGIN
EXEC proc_errorHandler 1, 'Your session has expired. Cannot send transaction', NULL
RETURN
END
IF @sBranch IS NULL
BEGIN
EXEC proc_errorHandler 1, 'Sending Branch is missing. Cannot send transaction', NULL
RETURN
END
IF @deliveryMethod = 'Cash Payment' AND @transferAmt > dbo.FNAGetDomesticSendLimit() --AND @transferAmt > 100000
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit.', NULL
RETURN
END
--PRINT @deliveryMethod
--PRINT @transferAmt
--PRINT dbo.FNAGetDomesticSendLimit()
DECLARE @agentLocation INT, @agentGrp INT
SELECT
@agentType = agentType,
@sAgent = parentId,
@sBranchName = agentName,
@sCountry = agentCountry,
@agentLocation = agentLocation,
@agentGrp = agentGrp
FROM agentMaster WITH(NOLOCK) WHERE agentId = @sBranch
IF @agentType = 2903
BEGIN
SET @sAgent = @sBranch
END
SELECT DISTINCT @sSuperAgent = parentId, @sAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sAgent
SELECT DISTINCT @sSuperAgentName = agentName FROM agentMaster WITH(NOLOCK) WHERE agentId = @sSuperAgent
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sBranch AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sAgent AND isSettlingAgent = 'Y'
IF @settlingAgent IS NULL
SELECT @settlingAgent = agentId FROM agentMaster WHERE agentId = @sSuperAgent AND isSettlingAgent = 'Y'
SET @limitBal = [dbo].FNAGetLimitBal(@settlingAgent)
IF @transferAmt > @limitBal
BEGIN
EXEC [proc_errorHandler] 1, 'Transfer amount exceeds Limit. Please, Check your available limit.', NULL
RETURN
END
SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N'
IF @deliveryMethod = 'Bank Deposit'
BEGIN
SELECT @pLocation = agentLocation FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBankBranch
END
SELECT @serviceCharge = ISNULL(serviceCharge, 0)
FROM dbo.FNAGetDomesticSendComm(@sBranch, NULL, @pLocation, @deliveryMethodId, @transferAmt)
if @serviceCharge = 0
BEGIN
EXEC [proc_errorHandler] 1, 'Service Charge not defined.', NULL
RETURN
END
SET @cAmt = @transferAmt + @serviceCharge
SELECT
errorCode = 0,
serviceCharge = dbo.ShowDecimal(@serviceCharge),
cAmt = dbo.ShowDecimal(@cAmt),
agentLocation = @agentLocation,
agentGrp = @agentGrp
RETURN
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION
SELECT 1 errorCode, ERROR_MESSAGE() msg, null id
END CATCH
GO