USE [FastMoneyPro_Remit] GO /****** Object: StoredProcedure [dbo].[proc_payDomTransaction] Script Date: 7/4/2019 11:35:48 AM ******/ DROP PROCEDURE [dbo].[proc_payDomTransaction] GO /****** Object: StoredProcedure [dbo].[proc_payDomTransaction] Script Date: 7/4/2019 11:35:48 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROC [dbo].[proc_payDomTransaction]( @flag VARCHAR(50) ,@user VARCHAR(30) = NULL ,@controlNo VARCHAR(20) = NULL ,@agentRefId VARCHAR(20) = NULL ,@rIdType VARCHAR(30) = NULL ,@rIdNumber VARCHAR(30) = NULL ,@rPlaceOfIssue VARCHAR(50) = NULL ,@rMobile VARCHAR(50) = NULL ,@rRelationType VARCHAR(50) = NULL ,@rRelativeName VARCHAR(100) = NULL ,@pBranch INT = NULL ,@pBranchName VARCHAR(100) = NULL ,@pAgent INT = NULL ,@pAgentName VARCHAR(100) = NULL ,@pSuperAgent INT = NULL ,@pSuperAgentName VARCHAR(100) = NULL ,@settlingAgent INT = NULL ,@mapCodeInt VARCHAR(8) = NULL ,@mapCodeDom VARCHAR(8) = NULL ,@customerId VARCHAR(50) = NULL ,@membershipId VARCHAR(50) = NULL ,@fromPayTrnTime VARCHAR(20) = NULL ,@toPayTrnTime VARCHAR(20) = NULL ,@rbankName VARCHAR(50) = NULL ,@rbankBranch VARCHAR(100) = NULL ,@rcheque VARCHAR(50) = NULL ,@rAccountNo VARCHAR(50) = NULL ,@TopupMobileNo VARCHAR(50) = NULL ,@relationship VARCHAR(100) = NULL ,@purpose VARCHAR(100) = NULL ,@dob DATETIME = NULL ,@rIssuedDate DATETIME = NULL ,@rValidDate DATETIME = NULL ) AS SET NOCOUNT ON SET XACT_ABORT ON DECLARE @sBranch INT ,@pCountry VARCHAR(100) ,@pState VARCHAR(100) ,@pDistrict VARCHAR(100) ,@pLocationBranch INT ,@deliveryMethod VARCHAR(100) ,@pAmt MONEY ,@pAgentComm MONEY ,@pAgentCommCurrency VARCHAR(3) ,@pSuperAgentComm MONEY ,@pSuperAgentCommCurrency VARCHAR(3) ,@pHubComm MONEY ,@pHubCommCurrency VARCHAR(3) ,@sendingCustType INT ,@receivingCurrency INT ,@agentType INT ,@tokenId BIGINT ,@controlNoEncrypted VARCHAR(20) ,@commCheck MONEY ,@tranType CHAR(1) ,@pCountryId INT = NULL ,@deliveryMethodId INT = NULL ,@sCountryId INT = NULL ,@tranStatus VARCHAR(20) = NULL ,@pDistrictApi INT ,@pDistrictBranch INT ,@lockedBy VARCHAR(50) ,@tranId INT ,@sCountry VARCHAR(200) ,@pLocation INT ,@payTokenId VARCHAR(50) ,@payStatus VARCHAR(50) ,@receiverName VARCHAR(100) ,@complianceAction CHAR(1) ,@compApproveRemark VARCHAR(200) ,@msg VARCHAR(200) ,@IsSettlingAgent CHAR(1) SELECT @controlNo = UPPER(LTRIM(RTRIM(@controlNo))) SELECT @controlNoEncrypted = dbo.FNAEncryptString(@controlNo) IF @flag = 'payTran' BEGIN IF @user IS NULL BEGIN EXEC proc_errorHandler 1, 'Your session has expired. Please relogin to the system.', @controlNo RETURN END SELECT @tranId = id ,@deliveryMethod = paymentMethod ,@sCountry = sCountry ,@sBranch = sBranch ,@pAmt = pAmt ,@pLocation = pLocation ,@tranStatus = tranStatus ,@lockedBy = lockedBy ,@payStatus = payStatus ,@receiverName = receiverName FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted SELECT @pLocationBranch = agentLocation ,@pState = agentState ,@pDistrict = agentDistrict ,@IsSettlingAgent = isSettlingAgent FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBranch SET @mapCodeDom = @pAgent IF @IsSettlingAgent = 'Y' SET @mapCodeDom = @pBranch IF @tranStatus IS NULL BEGIN EXEC proc_errorHandler 1, 'Cannot post transaction for invalid transaction number', NULL RETURN END IF EXISTS(SELECT 'X' FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted AND sBranch = @pBranch) BEGIN EXEC proc_errorHandler 1, 'Cannot process for same POS', @controlNoEncrypted RETURN END IF (@tranStatus = 'CancelRequest') BEGIN EXEC proc_errorHandler 1, 'Transaction has been requested for cancel', @controlNoEncrypted RETURN END IF (@tranStatus = 'Block') BEGIN EXEC proc_errorHandler 1, 'Transaction is blocked. Please Contact HO', @controlNoEncrypted RETURN END IF (@tranStatus = 'Paid') BEGIN EXEC proc_errorHandler 1, 'Transaction has already been paid', @controlNoEncrypted RETURN END IF (@payStatus = 'Paid') BEGIN EXEC proc_errorHandler 1, 'Transaction has already been paid', @controlNoEncrypted RETURN END IF (@tranStatus = 'Hold') BEGIN EXEC proc_errorHandler 1, 'Transaction is hold', @controlNoEncrypted RETURN END IF (@tranStatus = 'Cancel') BEGIN EXEC proc_errorHandler 1, 'Transaction is cancelled', @controlNoEncrypted RETURN END IF @tranStatus <> 'Lock' BEGIN EXEC proc_errorHandler 1, 'Your time for paying this transaction has expired. Please try again after a while.', @controlNoEncrypted RETURN END IF @lockedBy <> @user BEGIN EXEC proc_errorHandler 1, 'You are not authorised to pay this transaction at this time. Please try again after a while', @controlNoEncrypted RETURN END IF @rValidDate IS NOT NULL AND @rIdType <> 'Citizenship' BEGIN IF @rValidDate < CAST(CONVERT(VARCHAR,GETDATE(),101) AS DATETIME) BEGIN EXEC proc_errorHandler 1, 'Cannot process transaction, as Id is going to expire soon.', @customerId RETURN END END --Location Verfication SELECT @pDistrictApi = districtId FROM apiLocationMapping WITH(NOLOCK) WHERE apiDistrictCode = @pLocation SELECT @pDistrictBranch = districtId FROM apiLocationMapping WITH(NOLOCK) WHERE apiDistrictCode = @pLocationBranch IF @pDistrictApi IS NULL BEGIN EXEC proc_errorHandler 1, 'Location not found. Please Contact HO', @controlNo RETURN END IF @pDistrictBranch IS NULL BEGIN EXEC proc_errorHandler 1, 'Location not found. Please Contact HO', @controlNo RETURN END IF @pDistrictApi <> @pDistrictBranch BEGIN EXEC proc_errorHandler 1, 'You are not allowed to pay this TXN. It is not within your district.', @controlNo RETURN END --End of Location Verification --Commission Calculation Start SELECT @deliveryMethodId = serviceTypeId FROM serviceTypeMaster WITH(NOLOCK) WHERE typeTitle = @deliveryMethod AND ISNULL(isDeleted, 'N') = 'N' SELECT @pCountryId = 151 SELECT @sCountryId = 151 SELECT @pAgentComm = ISNULL(pAgentComm, 0) ,@pSuperAgentComm = ISNULL(psAgentComm, 0) ,@commCheck = pAgentComm FROM dbo.FNAGetDomesticPayComm(@sBranch, @pBranch, @deliveryMethodId, @pAmt) SELECT @pAgentCommCurrency = 'NPR', @pSuperAgentCommCurrency = 'NPR' IF @commCheck IS NULL BEGIN EXEC proc_errorHandler 1, 'Commission not defined. Please contact HO', @controlNo RETURN END -------Compliance Check Begin---------- IF NOT EXISTS(SELECT 'X' FROM remitTranCompliancePay WITH(NOLOCK) WHERE tranId = @tranId AND approvedDate IS NOT NULL) BEGIN 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) INSERT @csMasterRec(masterId) SELECT masterId FROM dbo.FNAGetComplianceRuleMaster_Pay(@pBranch, @pCountryId, NULL, @pBranch, NULL, NULL, @customerId) SELECT @totalRows = COUNT(*) FROM @csMasterRec DECLARE @denyTxn CHAR(1) = 'N' IF EXISTS(SELECT 'X' FROM @csMasterRec) BEGIN DELETE FROM remitTranCompliancePayTemp WHERE tranId = @tranId SET @count = 1 WHILE(@count <= @totalRows) BEGIN SELECT @csMasterId = masterId FROM @csMasterRec WHERE rowId = @count EXEC proc_complianceRuleDetail_Pay @user = @user ,@tranId = @tranId ,@tAmt = @pAmt ,@customerId = @customerId ,@receiverId = @rIdNumber ,@receiverMemId = @membershipId ,@receiverName = @receiverName ,@receiverMobile = @rMobile ,@receiverAcNo = @rAccountNo ,@masterId = @csMasterId ,@paymentMethod = @deliveryMethodId ,@checkingFor = 'v' ,@result = @complianceRes OUTPUT SET @compFinalRes = ISNULL(@compFinalRes, '') + ISNULL(@complianceRes, '') IF @complianceRes = 'M' AND ISNULL(@complianceAction, '') <> 'C' SET @complianceAction = 'M' IF @complianceRes = 'C' SET @complianceAction = 'C' SET @count = @count + 1 END END IF(ISNULL(@compFinalRes, '') <> '') BEGIN IF(@compFinalRes <> '') BEGIN IF EXISTS(SELECT 'X' FROM remitTranCompliancePayTemp WITH(NOLOCK) WHERE tranId = @tranId) BEGIN INSERT INTO remitTranCompliancePay(tranId, csDetailTranId, matchTranId) SELECT @tranId, csDetailTranId, matchTranId FROM remitTranCompliancePayTemp WITH(NOLOCK) WHERE tranId = @tranId INSERT tranPayCompliance(tranId,provider,controlNo,pBranch,receiverName,rMemId,dob, rIdType,rIdNumber,rPlaceOfIssue,rContactNo,rRelationType,rRelativeName,relWithSender,purposeOfRemit,createdBy,createdDate,bankName,branchName,chequeNo,accountNo,alternateMobileNo,IdIssuedDate,IdExpiryDate) SELECT @tranId, '1002' , @controlNoEncrypted,@pBranch,@receiverName,@membershipId,@dob, @rIdType,@rIdNumber,@rPlaceOfIssue,@rMobile,@rRelationType,@rRelativeName,@relationship,@purpose,@user,GETDATE(),@rbankName,@rbankBranch,@rcheque,@raccountNo,@TopupMobileNo,@rIssuedDate,@rValidDate DELETE FROM dbo.remitTranCompliancePayTemp WHERE tranId = @tranId END IF ISNULL(@complianceAction, '') = 'M' BEGIN UPDATE remitTran SET tranStatus = 'Hold' WHERE id = @tranId UPDATE remitTranCompliancePay SET approvedRemarks = 'Marked for Compliance' ,approvedBy = 'system' ,approvedDate = GETDATE() WHERE tranId = @tranId UPDATE tranPayCompliance SET approvedRemarks = 'Marked for Compliance' ,approvedBy = 'system' ,approvedDate = GETDATE() WHERE tranId = @tranId END ELSE BEGIN UPDATE remitTran SET tranStatus = 'Compliance Hold Pay' WHERE id = @tranId END END IF ISNULL(@complianceAction, '') = 'C' BEGIN SET @msg = 'Sorry, This transaction is in compliance hold and cannot processed further. Please contact HO.' END SELECT 101 errorCode,@msg msg, NULL id RETURN END END -------Compliance Check End---------- BEGIN TRANSACTION UPDATE remitTran SET pAgentComm = @pAgentComm ,pAgentCommCurrency = @pAgentCommCurrency ,pSuperAgentComm = @pSuperAgentComm ,pSuperAgentCommCurrency = @pSuperAgentCommCurrency ,pHubComm = @pHubComm ,pHubCommCurrency = @pHubCommCurrency ,pBranch = @pBranch ,pBranchName = @pBranchName ,pAgent = @pAgent ,pAgentName = @pAgentName ,pSuperAgent = @pSuperAgent ,pSuperAgentName = @pSuperAgentName ,pState = @pState ,pLocation = @pLocation ,pDistrict = @pDistrict ,tranStatus = 'Paid' ,payStatus = 'Paid' ,paidDate = dbo.FNAGetDateInNepalTZ() ,paidDateLocal = GETDATE() ,paidBy = @user WHERE controlNo = @controlNoEncrypted UPDATE tranReceivers SET idType2 = @rIdType ,idNumber2 = @rIdNumber ,idPlaceOfIssue2 = @rPlaceOfIssue ,mobile = @rMobile ,homePhone = @rMobile ,relationType = @rRelationType ,relativeName = @rRelativeName ,customerId = @customerId ,membershipId = @membershipId ,bankName = @rbankName ,branchName = @rbankBranch ,chequeNo = @rcheque ,accountNo = @raccountNo ,relWithSender = @relationship ,purposeOfRemit = @purpose ,dob = @dob ,issuedDate2 = @rIssuedDate ,validDate2 = @rValidDate WHERE tranId = @tranId IF @membershipId IS NOT NULL BEGIN UPDATE dbo.customerMaster SET paidTxn = ISNULL(paidTxn,0)+1, firstTxnDate = ISNULL(firstTxnDate,GETDATE()) WHERE membershipId = @membershipId END EXEC FastMoneyPro_Account.dbo.PROC_REMIT_DATA_UPDATE @flag = 'p' ,@mapCode = @mapCodeDom ,@user = @user ,@pAgentComm = @pAgentComm ,@controlNo = @controlNo -- ## Limit Update EXEC Proc_AgentBalanceUpdate @flag = 'p',@tAmt = @pAmt ,@settlingAgent = @pBranch IF @@TRANCOUNT > 0 COMMIT TRANSACTION EXEC [proc_errorHandler] 0, 'Transaction has been paid successfully', @controlNo END IF @flag = 'paySearch' BEGIN IF(DATEDIFF(MI,CAST(dbo.FNAGetDateInNepalTZ() AS TIME), CAST(@fromPayTrnTime AS TIME))) > 0 BEGIN EXEC proc_errorHandler 1, 'You are not authorized to pay at this time', NULL RETURN END IF(DATEDIFF(MI,CAST(dbo.FNAGetDateInNepalTZ() AS TIME), CAST(@toPayTrnTime AS TIME))) < 0 BEGIN EXEC proc_errorHandler 1, 'You are not authorized to pay at this time', NULL RETURN END DECLARE @hasRight CHAR(1), @payDomesticFunctionId VARCHAR(50) SET @payDomesticFunctionId = '40101311,40101520' SELECT @hasRight = dbo.FNAHasRight(@user, @payDomesticFunctionId) IF(@hasRight = 'N') BEGIN EXEC proc_errorHandler 1, 'You are not authorized to pay domestic transaction.', NULL RETURN END IF @user IS NULL BEGIN EXEC proc_errorHandler 1, 'Your session has expired. Please relogin to the system.', @controlNo RETURN END SELECT @mapCodeDom = mapCodeDom ,@agentType = agentType ,@pLocation = agentLocation FROM agentMaster WITH(NOLOCK) WHERE agentId = @pBranch IF (@mapCodeDom IS NULL OR @mapCodeDom = '' OR @mapCodeDom = 0) BEGIN EXEC proc_errorHandler 1, 'Invalid Map Code', NULL RETURN END SELECT @tranStatus = tranStatus, @tranId = id, @payStatus = payStatus FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted IF @tranStatus IS NULL BEGIN EXEC proc_errorHandler 1000, 'Transaction not found', NULL RETURN END IF @agentType = 2903 BEGIN SET @pAgent = @pBranch END IF @tranStatus IS NOT NULL BEGIN INSERT INTO tranViewHistory( controlNumber ,tranViewType ,agentId ,createdBy ,createdDate ,tranId ) SELECT @controlNoEncrypted ,'PAY' ,@pBranch ,@user ,GETDATE() ,@tranId SET @payTokenId = SCOPE_IDENTITY() IF EXISTS(SELECT 'X' FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted AND paymentMethod = 'Bank Deposit') BEGIN EXEC proc_errorHandler 1, 'Cannot process payment for Payment Type Bank Deposit', NULL RETURN END IF EXISTS(SELECT 'X' FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted AND sBranch = @pBranch) BEGIN EXEC proc_errorHandler 1, 'Cannot process payment for same POS', @tranId RETURN END IF (@tranStatus = 'CancelRequest') BEGIN EXEC proc_errorHandler 1, 'Transaction has been requested for cancel', @controlNoEncrypted RETURN END IF (@tranStatus = 'Lock' ) BEGIN EXEC proc_errorHandler 1, 'Transaction is locked', @controlNoEncrypted RETURN END IF (@tranStatus = 'Block') BEGIN EXEC proc_errorHandler 1, 'Transaction is blocked. Please Contact HO', @controlNoEncrypted RETURN END IF (@tranStatus = 'Paid') BEGIN EXEC proc_errorHandler 1, 'Transaction has already been paid', @controlNoEncrypted RETURN END IF (@payStatus = 'Paid') BEGIN EXEC proc_errorHandler 1, 'Transaction has already been paid', @controlNoEncrypted RETURN END IF (@tranStatus = 'Hold') BEGIN EXEC proc_errorHandler 1, 'Transaction is hold', @controlNoEncrypted RETURN END IF (@tranStatus = 'Cancel') BEGIN EXEC proc_errorHandler 1, 'Transaction is cancelled', @controlNoEncrypted RETURN END IF (@tranStatus <> 'Payment') BEGIN EXEC proc_errorHandler 1, 'Transaction is not in authorized mode', @controlNoEncrypted RETURN END DECLARE @tranDistrictId INT, @payAgentDistrictId INT --Checking payout location for domestic txn SELECT @payAgentDistrictId = districtId FROM apiLocationMapping WHERE apiDistrictCode = @pLocation SELECT @tranDistrictId = districtId FROM apiLocationMapping WHERE apiDistrictCode = (SELECT pLocation FROM remitTran WITH(NOLOCK) WHERE controlNo = @controlNoEncrypted) IF @payAgentDistrictId IS NULL BEGIN EXEC proc_errorHandler 1, 'Location not found. Please Contact HO', @controlNo RETURN END IF @tranDistrictId IS NULL BEGIN EXEC proc_errorHandler 1, 'Location not found. Please Contact HO', @controlNo RETURN END IF(@tranDistrictId <> @payAgentDistrictId) BEGIN EXEC proc_errorHandler 1, 'You are not allowed to pay this TXN. It is not within your district.', @controlNoEncrypted RETURN END EXEC proc_errorHandler 0, 'Transaction Verification Successful', @tranId -->>Start:Checking pay tran for 30 days expiry days & more than 3,00,000 transaction DECLARE @checkPayTran TABLE(tSetFlag VARCHAR(10), eSetFlag VARCHAR(10)) DECLARE @tSetFlag VARCHAR(10), @eSetFlag VARCHAR(10) --INSERT INTO @checkPayTran(tSetFlag, eSetFlag) --EXEC proc_checkPayLock @user ='admin', @controlNo = @controlNoEncrypted, @agentId = @pBranch SELECT @tSetFlag = tSetFlag, @eSetFlag = eSetFlag FROM @checkPayTran --<