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.
433 lines
30 KiB
433 lines
30 KiB
USE [FastMoneyPro_Remit]
|
|
GO
|
|
|
|
ALTER PROCEDURE [dbo].[proc_ExchangeRate]
|
|
@User VARCHAR(100),
|
|
@senderId BIGINT,
|
|
@pCountryId INT,
|
|
@deliveryMethodId INT,
|
|
@pBankId BIGINT = NULL,
|
|
@pBranchId BIGINT = NULL,
|
|
@collCurr VARCHAR(3),
|
|
@payoutCurr VARCHAR(3),
|
|
@collAmt MONEY,
|
|
@payoutAmt MONEY,
|
|
@calBy CHAR(1),
|
|
@tpExRate DECIMAL(30,12),
|
|
@payOutPartnerId BIGINT,
|
|
@paymentType VARCHAR(20),
|
|
@processId VARCHAR(40)
|
|
|
|
AS
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
BEGIN TRY
|
|
|
|
DECLARE @complianceRuleId INT
|
|
,@cAmtUSD MONEY
|
|
,@complienceMessage VARCHAR(1000) = NULL
|
|
,@shortMsg VARCHAR(100) = NULL
|
|
,@complienceErrorCode TINYINT = NULL
|
|
,@compErrorCode INT
|
|
,@FOREX_SESSION_ID VARCHAR(40)
|
|
,@schemeId VARCHAR(10) = NULL
|
|
,@discountType VARCHAR(2) = null
|
|
,@discountvalue MONEY =NULL
|
|
,@couponType VARCHAR(3) = NULL
|
|
,@discountPercent MONEY = NULL
|
|
,@couponName VARCHAR(20) = NULL
|
|
,@customerType INT
|
|
|
|
IF @paymentType IS NULL
|
|
SET @paymentType = 'WALLET'
|
|
|
|
DECLARE @sCurrCostRate FLOAT ,@sCurrHoMargin FLOAT ,@pCurrCostRate FLOAT ,@customerRate FLOAT ,@sAgentSettRate FLOAT,@exRate DECIMAL(12,9),@sCountryId INT
|
|
|
|
DECLARE @iServiceCharge MONEY ,@iTAmt MONEY ,@iPAmt MONEY ,@iCAmt MONEY ,@iCustomerRate FLOAT
|
|
DECLARE @place INT ,@currDecimal INT
|
|
|
|
DECLARE @agentAvlLimit MONEY
|
|
DECLARE @msg VARCHAR(MAX)
|
|
|
|
DECLARE @sAgent BIGINT,@sAgentName VARCHAR(100),@sBranch INT,@sBranchName VARCHAR(100),@sSuperAgent INT,@sSuperAgentName VARCHAR(100)
|
|
DECLARE @serviceCharge MONEY,@tAmt MONEY,@scDiscount MONEY = 0
|
|
|
|
DECLARE @Status VARCHAR(10),@sBirthDate DATE,@sIdIssueDate DATE,@sIdExpiryDate DATE,@senderName VARCHAR(100),@sIdNo VARCHAR(50),@sIdType VARCHAR(50)
|
|
,@sMobile VARCHAR(15),@sOccupation VARCHAR(50)
|
|
|
|
DECLARE @pBranch BIGINT,@pAgent BIGINT,@pSuperAgent BIGINT,@pAgentName VARCHAR(100),@receiverName VARCHAR(100)
|
|
|
|
SELECT @sCountryId = 118,@sBranch = 2080
|
|
|
|
SELECT @sAgent = sAgent, @sAgentName = sAgentName, @sBranch = sBranch, @sBranchName = sBranchName,
|
|
@sSuperAgent = sSuperAgent, @sSuperAgentName = sSuperAgentName
|
|
FROM dbo.FNAGetBranchFullDetails(@sBranch)
|
|
|
|
----SELECT @pCountry = COUNTRYNAME FROM COUNTRYMASTER (NOLOCK) WHERE COUNTRYID = @pCountryId
|
|
|
|
SELECT TOP 1 @pAgent = AM.agentId
|
|
FROM agentMaster AM(NOLOCK)
|
|
WHERE AM.parentId = @payOutPartnerId AND agentType = 2903
|
|
AND AM.isSettlingAgent = 'Y' AND AM.isApiPartner = 1
|
|
|
|
IF EXISTS( SELECT TOP 1 'x'
|
|
FROM dbo.TblPartnerwiseCountry(NOLOCK)
|
|
WHERE IsActive = 1
|
|
AND AgentId=@payOutPartnerId
|
|
AND CountryId=@pCountryId
|
|
AND PaymentMethod = @deliveryMethodId
|
|
AND PartnerRate = 1)
|
|
BEGIN
|
|
IF ISNULL(@tpExRate,0) = 0
|
|
BEGIN
|
|
EXEC proc_errorHandler 5,'Fetch rate from partner side',NULL
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
SELECT @pSuperAgent = sSuperAgent,@pAgent = sAgent,@pAgentName = sAgentName FROM dbo.FNAGetBranchFullDetails(@pAgent)
|
|
|
|
BEGIN
|
|
SELECT TOP 1
|
|
@senderId = customerId ,
|
|
@sIdNo = idNumber,
|
|
@sIdType = idType,
|
|
@agentAvlLimit = dbo.FNAGetCustomerACBal(email),
|
|
@Status = CASE WHEN approvedDate IS NULL THEN 'pending' ELSE 'verified' END,
|
|
@customerType = customerType
|
|
FROM customerMaster WITH ( NOLOCK )
|
|
WHERE email = @User AND approvedDate IS NOT NULL
|
|
|
|
IF ISNULL(@Status,'pending') = 'pending'
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'Your account is not yet verified,Call:15886864 for verification.',NULL
|
|
RETURN
|
|
END
|
|
|
|
IF @paymentType='autodebit'
|
|
BEGIN
|
|
DECLARE @DATE DATETIME, @NextDate datetime
|
|
select @DATE = CAST(GETDATE() AS DATE)
|
|
SELECT @NextDate = DATEADD(DAY,1,@DATE)
|
|
|
|
SELECT @DATE = @DATE+' 23:20:00',@NextDate = @NextDate+' 00:40:00'
|
|
|
|
IF GETDATE() BETWEEN @DATE AND @NextDate
|
|
BEGIN
|
|
SELECT '1' ErrorCode ,'KFTC service is not available between 11:30 PM to 12:30 AM' Msg ,NULL ID
|
|
RETURN
|
|
END
|
|
END
|
|
SELECT TOP 1 @sIdType = detailTitle FROM staticDataValue(NOLOCK) WHERE valueId = @sIdType
|
|
|
|
SELECT TOP 1 @place = place ,
|
|
@currDecimal = currDecimal
|
|
FROM currencyPayoutRound(NOLOCK)
|
|
WHERE ISNULL(isDeleted, 'N') = 'N'
|
|
AND currency = @payoutCurr AND tranType IS NULL;
|
|
|
|
SET @currDecimal = ISNULL(@currDecimal,0)
|
|
|
|
IF @payoutCurr IS NULL
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'Currency not been defined yet for receiving country.',NULL
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT
|
|
@sCurrCostRate = sCurrCostRate
|
|
,@sCurrHoMargin = sCurrHoMargin
|
|
,@sAgentSettRate = sAgentSettRate
|
|
,@customerRate = customerRate
|
|
,@pCurrCostRate = pCurrCostRate
|
|
FROM dbo.FNAGetExRate(@sCountryId, @sAgent, @sBranch, @collCurr, @pCountryId, @pAgent, @payoutCurr, @deliveryMethodId)
|
|
|
|
IF ISNULL(@sAgentSettRate, 0) = 0
|
|
BEGIN
|
|
SET @msg = 'Exchange rate not defined yet for sending currency (' + @payoutCurr + ')'
|
|
EXEC proc_errorHandler 1,@msg,NULL
|
|
RETURN
|
|
END
|
|
|
|
----## FOR RIA AND CONTACT "LOG" GET ONE TIME RATE FROM PARTNER AND STORE IN TABLE ,"SYSTEM" IS FOR GME RATE,"PARTNER" GET RATE FROM PARTNER END REALTIME
|
|
IF EXISTS(SELECT TOP 1 'X' FROM TblPartnerwiseCountry(NOLOCK) WHERE AgentId = @payOutPartnerId AND PaymentMethod = @deliveryMethodId AND IsActive = 1 AND GetRateFrom='Log')
|
|
BEGIN
|
|
SELECT TOP 1 @tpExRate = CurrCostRate FROM TBL_PARTNER_COST_RATE(NOLOCK)
|
|
WHERE ProviderId = @payOutPartnerId AND GETDATE() BETWEEN EffectiveFrom AND EffectiveTo
|
|
AND ToCurr = @payoutCurr AND FromCurr = 'USD' ORDER BY CreatedDate desc
|
|
|
|
IF ISNULL(@tpExRate, 0) = 0
|
|
BEGIN
|
|
SET @msg = 'Exchange rate not defined yet for currency (' + @payoutCurr + ')'
|
|
EXEC proc_errorHandler 5,@msg,NULL
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
IF @tpExRate IS NOT NULL
|
|
BEGIN
|
|
SELECT @exRate = ROUND(ISNULL(@tpExRate,0)/@sAgentSettRate, 8),@pCurrCostRate = @tpExRate
|
|
END
|
|
ELSE
|
|
SELECT @exRate = @customerRate
|
|
|
|
IF @exRate IS NULL
|
|
BEGIN
|
|
SET @msg = 'Exchange rate not defined yet for sending currency (' + @payoutCurr + ')'
|
|
EXEC proc_errorHandler 1,@msg,NULL
|
|
RETURN
|
|
END;
|
|
|
|
|
|
----- Calculation service charge using coupon
|
|
-- IF EXISTS ( SELECT '1'
|
|
-- FROM CouponIssue(NOLOCK) AS CI
|
|
-- INNER JOIN CouponSetup(NOLOCK) AS CS
|
|
-- ON CI.couponId = CS.rowId
|
|
-- WHERE CI.customerId = @senderId
|
|
-- AND CI.endDate >= GETDATE()
|
|
-- AND CI.isActive = 'Y'
|
|
-- AND CS.endDate >= GETDATE()
|
|
-- AND CS.isActive = 'Y'
|
|
-- AND CS.couponType = '1'
|
|
-- AND CS.couponType = '1'
|
|
-- AND (ISNULL(CS.usageLimit,0) = 0
|
|
-- OR ISNULL(CS.usageLimit,0) > ISNULL(CI.usedCount,0))
|
|
-- )
|
|
--BEGIN
|
|
SELECT TOP(1) @discountType = CS.discountType,
|
|
@couponName = CS.couponName,
|
|
@discountvalue = CS.discountValue,
|
|
@schemeId = CI.rowId, -- ADD coponIssue ID
|
|
@couponType = CS.couponType
|
|
FROM CouponIssue(NOLOCK) CI
|
|
INNER JOIN CouponSetup(NOLOCK) CS ON CI.couponId = CS.rowId
|
|
AND CI.isActive = 'Y'
|
|
AND CI.endDate >= GETDATE()
|
|
AND CS.endDate >= GETDATE()
|
|
AND CS.isActive = 'Y'
|
|
AND CS.couponType = '1'
|
|
AND customerId = @senderId
|
|
AND CS.couponType = '1'
|
|
AND (ISNULL(CS.usageLimit,0) = 0
|
|
OR CS.usageLimit > CI.usedCount)
|
|
ORDER BY CI.rowId ASC
|
|
|
|
IF @discountType ='2'
|
|
BEGIN
|
|
SET @scDiscount = @discountvalue
|
|
END
|
|
--END
|
|
|
|
IF @calBy = 'C'
|
|
BEGIN
|
|
SELECT @serviceCharge = amount
|
|
FROM [dbo].FNAGetServiceCharge(@sCountryId,@sSuperAgent,@sAgent,@sBranch,
|
|
@pCountryId,@pSuperAgent,@pAgent,@pBranch,@deliveryMethodId,@collAmt,@collCurr);
|
|
|
|
IF @serviceCharge IS NULL
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'Service charge not defined yet for receiving country',NULL
|
|
RETURN
|
|
END
|
|
|
|
IF @discountType = '1'
|
|
BEGIN
|
|
SET @discountPercent = @discountvalue
|
|
SET @discountvalue = @serviceCharge * (@discountvalue/100)
|
|
SET @scDiscount = @discountvalue
|
|
END
|
|
|
|
SET @tAmt = @collAmt - @serviceCharge;
|
|
|
|
SET @payoutAmt = ( @collAmt - @serviceCharge ) * @exRate
|
|
IF @payoutCurr = 'USD'
|
|
SET @payoutAmt = ROUND(@payoutAmt,2)
|
|
ELSE
|
|
SET @payoutAmt = ROUND(@payoutAmt,0)
|
|
END
|
|
ELSE IF @calBy = 'P'
|
|
BEGIN
|
|
SET @tAmt = @payoutAmt / @exRate
|
|
SELECT @serviceCharge = amount
|
|
FROM [dbo].FNAGetServiceCharge(@sCountryId,@sSuperAgent,@sAgent,@sBranch,
|
|
@pCountryId,@pSuperAgent,@pAgent,@pBranch,@deliveryMethodId,@tAmt, @collCurr);
|
|
|
|
IF @serviceCharge IS NULL
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'Service charge not defined yet for receiving country',NULL
|
|
RETURN
|
|
END
|
|
|
|
|
|
IF @discountType = '1'
|
|
BEGIN
|
|
SET @discountPercent = @discountvalue
|
|
SET @discountvalue = @serviceCharge * (@discountvalue/100)
|
|
SET @scDiscount = @discountvalue
|
|
END
|
|
|
|
|
|
SET @tAmt = ROUND(@tAmt, 2);
|
|
SET @collAmt = ( @tAmt + @serviceCharge )
|
|
|
|
SET @collAmt = ROUND(@collAmt, 0)
|
|
|
|
END
|
|
|
|
IF @serviceCharge > @collAmt
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'COLLECTION AMOUNT SHOULD BE MORE THAN SERVICE CHARGE',NULL
|
|
RETURN
|
|
END
|
|
|
|
/* Easy Remit limit check */
|
|
IF @customerType = '11048'
|
|
BEGIN
|
|
IF ISNULL(@collAmt, 0) > 1000000
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'You cannot remit more than one million(KRW)', NULL
|
|
RETURN
|
|
END
|
|
END
|
|
|
|
IF ISNULL(@paymentType,'wallet') = 'wallet'
|
|
BEGIN
|
|
IF ISNULL(@agentAvlLimit, 1) < ISNULL(@collAmt, 0)
|
|
BEGIN
|
|
EXEC proc_errorHandler 1,'You donot have sufficient balance to do the transaction',NULL
|
|
RETURN;
|
|
END
|
|
END
|
|
DECLARE @errorCode VARCHAR(5) ='0',@trantype VARCHAR(30)
|
|
SET @trantype = CAST(@deliveryMethodId AS VARCHAR(30))
|
|
|
|
--select flag = 's-limit', cAmt = @collAmt, pAmt = @payoutAmt, sCountryId = @sCountryId
|
|
-- ,deliveryMethod = @trantype,pCountryId = @pCountryId,pCurr = @payoutCurr, collCurr = @collCurr
|
|
-- ,pAgent = @pAgent, sAgent = @sAgent, sBranch = @sBranch
|
|
|
|
--4. Validate Country Sending Limit
|
|
EXEC PROC_CHECKCOUNTRYLIMIT @flag = 's-limit', @cAmt = @tAmt, @pAmt = @payoutAmt, @sCountryId = @sCountryId
|
|
,@deliveryMethod = @trantype,@pCountryId = @pCountryId,@pCurr = @payoutCurr, @collCurr = @collCurr
|
|
,@pAgent = @pAgent, @sAgent = @sAgent, @sBranch = @sBranch
|
|
,@msg = @msg OUT, @errorCode = @errorCode OUT
|
|
|
|
IF @errorCode <> '0'
|
|
BEGIN
|
|
EXEC proc_errorHandler @errorCode,@msg,NULL
|
|
RETURN
|
|
END
|
|
----Validate Country Sending Limit END
|
|
|
|
----5. Validate Country Receiving Limit
|
|
EXEC PROC_CHECKCOUNTRYLIMIT @flag = 'r-limit', @cAmt = @tAmt, @pAmt = @payoutAmt, @sCountryId = @sCountryId, @collMode = NULL
|
|
,@deliveryMethod = @deliveryMethodId,@sendingCustType = NULL,@pCountryId = @pCountryId,@pCurr = @payoutCurr, @collCurr = @collCurr
|
|
,@pAgent = @pAgent, @sAgent = @sAgent, @sBranch = @sBranch
|
|
,@msg = @msg OUT, @errorCode = @errorCode OUT
|
|
|
|
IF @errorCode <> '0'
|
|
BEGIN
|
|
SELECT @errorCode ErrorCode, @msg Msg,null Id
|
|
RETURN
|
|
END
|
|
----Validate Country Receiving Limit
|
|
|
|
SET @cAmtUSD = @tAmt / (@sCurrCostRate + ISNULL(@sCurrHoMargin, 0))
|
|
|
|
EXEC [proc_complianceRuleDetail]
|
|
@flag = 'sender-limit'
|
|
,@user = @user
|
|
,@sIdType = @sIdType
|
|
,@sIdNo = @sIdNo
|
|
,@receiverName = null
|
|
,@cAmt = @tAmt
|
|
,@cAmtUSD = @cAmtUSD
|
|
,@customerId = @senderId
|
|
,@pCountryId = @pCountryId
|
|
,@deliveryMethod= @deliveryMethodId
|
|
,@message = @complienceMessage OUTPUT
|
|
,@shortMessage = @shortMsg OUTPUT
|
|
,@errCode = @complienceErrorCode OUTPUT
|
|
,@ruleId = @complianceRuleId OUTPUT
|
|
|
|
IF(@complienceErrorCode <> 0)
|
|
BEGIN
|
|
IF(@complienceErrorCode = 1)
|
|
BEGIN
|
|
SET @compErrorCode = 101
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @compErrorCode = 101
|
|
INSERT remitTranComplianceTemp(csDetailTranId, matchTranId, agentRefId)
|
|
SELECT @complianceRuleId, NULL, @processId
|
|
--SELECT 102 errorCode,@msg msg, @complienceErrorCode id, @complienceMessage compApproveRemark,'compliance' vtype
|
|
END
|
|
|
|
INSERT INTO ComplianceLog(senderName, senderCountry, senderIdType, senderIdNumber, senderMobile, receiverName
|
|
, receiverCountry,payOutAmt,complianceId,complianceReason,complainceDetailMessage,createdBy,createdDate,logType)
|
|
|
|
SELECT @senderName, '118', @sIdType, @sIdNo, @sMobile, @receiverName
|
|
, @pCountryId, @collAmt, @complianceRuleId, @shortMsg, @complienceMessage, @user, GETDATE(),'online'
|
|
END
|
|
|
|
------------Validation End---------------------------------
|
|
IF @complienceErrorCode = '1'
|
|
BEGIN
|
|
EXEC proc_errorHandler @compErrorCode,@shortMsg,@complienceErrorCode
|
|
RETURN;
|
|
END;
|
|
|
|
SET @FOREX_SESSION_ID = NEWID()
|
|
|
|
DECLARE @id BIGINT
|
|
|
|
----## lock ex rate for individual txn
|
|
UPDATE exRateCalcHistory SET isExpired = 1 WHERE CUSTOMER_ID = @senderId AND isExpired = 0
|
|
|
|
INSERT INTO exRateCalcHistory (
|
|
CUSTOMER_ID,[USER_ID],FOREX_SESSION_ID,serviceCharge,pAmt,customerRate,sCurrCostRate,sCurrHoMargin
|
|
,sCurrAgentMargin,pCurrCostRate,pCurrHoMargin,pCurrAgentMargin,agentCrossSettRate,createdDate,isExpired,tAmt,schemeId
|
|
)
|
|
SELECT @senderId,@user,@FOREX_SESSION_ID,@serviceCharge,@payoutAmt,@exRate,@sCurrCostRate,@sCurrHoMargin
|
|
,0,@pCurrCostRate,0,0,@exRate,GETDATE(),0,@tAmt,@schemeId
|
|
|
|
SET @id = @@IDENTITY
|
|
|
|
SELECT ErrorCode = @errorCode ,
|
|
Msg = 'Message' ,
|
|
Id = @id,
|
|
scCharge = @serviceCharge ,
|
|
exRateDisplay = ROUND(@exRate , 6, -1),
|
|
exRate = @exRate,
|
|
pCurr = @payoutCurr ,
|
|
collAmt = @collAmt ,
|
|
pAmt = @payoutAmt ,
|
|
sAmt = ROUND(@tAmt, 0) ,
|
|
collCurr = @collCurr,
|
|
scDiscount = @scDiscount ,
|
|
tpExRate = @pCurrCostRate,
|
|
EXRATEID = @FOREX_SESSION_ID,
|
|
payOutPartnerId = @payOutPartnerId,
|
|
schemeId = ISNULL(@schemeId,''),
|
|
couponType = ISNULL(@couponType,''),
|
|
discountType = ISNULL(@discountType,''),
|
|
discountvalue = ISNULL(@scDiscount,''),
|
|
discountPercent = ISNULL(@discountPercent,''),
|
|
couponName = ISNULL(@couponName,'')
|
|
END
|
|
|
|
END TRY
|
|
BEGIN CATCH
|
|
IF @@TRANCOUNT<>0
|
|
ROLLBACK TRANSACTION
|
|
DECLARE @errorMessage VARCHAR(MAX)
|
|
SET @errorMessage = ERROR_MESSAGE()
|
|
|
|
EXEC proc_errorHandler 1, @errorMessage, @user
|
|
END CATCH
|
|
|
|
|
|
|
|
GO
|