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.
315 lines
17 KiB
315 lines
17 KiB
USE [FastMoneyPro_Remit]
|
|
GO
|
|
/****** Object: StoredProcedure [dbo].[ws_proc_CalcCommission] Script Date: 9/27/2019 1:30:14 PM ******/
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
/*
|
|
exec [ws_proc_CalcCommission] @AGENT_CODE='GMKOR2080',@USER_ID='OnlineAPI',@PASSWORD='JKLMNO',@AGENT_SESSION_ID='23123',@TRANSFER_AMOUNT=100000
|
|
,@PAYMENT_MODE='C',@CALC_BY='p',@SENDING_COUNTRY='kr',@PAYOUT_COUNTRY='np'
|
|
|
|
*/
|
|
CREATE PROC [dbo].[ws_proc_CalcCommission](
|
|
@AGENT_CODE VARCHAR(50)
|
|
,@USER_ID VARCHAR(50)
|
|
,@PASSWORD VARCHAR(50)
|
|
,@AGENT_SESSION_ID VARCHAR(50)
|
|
,@TRANSFER_AMOUNT VARCHAR(50)
|
|
,@PAYMENT_MODE VARCHAR(50)
|
|
,@CALC_BY VARCHAR(50)
|
|
,@SENDING_COUNTRY VARCHAR(100)
|
|
,@PAYOUT_COUNTRY VARCHAR(100)
|
|
)
|
|
AS
|
|
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
DECLARE @EXRATEID VARCHAR(40) = NEWID()
|
|
DECLARE @errorTable TABLE
|
|
(
|
|
AGENT_REFID VARCHAR(150)
|
|
,COLLECT_AMT MONEY
|
|
,COLLECT_CURRENCY VARCHAR(3)
|
|
,SERVICE_CHARGE MONEY
|
|
,EXCHANGE_RATE MONEY
|
|
,PAYOUT_AMT MONEY
|
|
,PAYOUT_CURRENCY VARCHAR(3)
|
|
,SESSION_ID VARCHAR(36)
|
|
)
|
|
|
|
INSERT INTO @errorTable ( AGENT_REFID )
|
|
SELECT @AGENT_SESSION_ID
|
|
|
|
IF @USER_ID IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'USER_ID Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
IF @AGENT_CODE IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'AGENT_CODE Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
IF @PASSWORD IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'PASSWORD Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
IF NOT EXISTS(select 'A' from applicationUsers(nolock) where username=@USER_ID and userType ='i'
|
|
AND agentCode = @AGENT_CODE AND pwd = @PASSWORD)
|
|
BEGIN
|
|
SELECT '1002' CODE,'Authentication Failed' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
IF @PAYOUT_COUNTRY IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'PAYOUT COUNTRY Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @SENDING_COUNTRY IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'SENDING COUNTRY Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @TRANSFER_AMOUNT IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'TRANSFER AMOUNT Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @TRANSFER_AMOUNT IS NOT NULL AND ISNUMERIC(@TRANSFER_AMOUNT)=0
|
|
BEGIN
|
|
SELECT '9001' CODE,'TRANSFER AMOUNT must be numeric' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @PAYMENT_MODE IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'PAYMETHOD Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @CALC_BY IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'CALC BY Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @AGENT_SESSION_ID IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE,'AGENT SESSION ID Field is Empty' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
IF @PAYMENT_MODE NOT IN('C','B','D')
|
|
BEGIN
|
|
SELECT '3001' CODE, 'Invalid Payment Type, Must be C - Cash Pickup B - Account Deposit to Bank' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
IF @CALC_BY NOT IN('S','P','C')
|
|
BEGIN
|
|
SELECT '1004' CODE, 'Invalid Parameter CALC BY' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
DECLARE
|
|
@pCountryId INT
|
|
,@pAgent INT
|
|
,@pCurr VARCHAR(3)
|
|
,@deliveryMethod INT
|
|
,@exRate FLOAT
|
|
,@cAmt MONEY
|
|
,@tAmt MONEY
|
|
,@pAmt MONEY
|
|
,@sCountryId INT
|
|
,@sSuperAgent INT
|
|
,@sAgent INT
|
|
,@sBranch INT = NULL
|
|
,@collCurr VARCHAR(3)
|
|
,@serviceCharge MONEY
|
|
|
|
SELECT @pCountryId = countryId FROM countryMaster WITH(NOLOCK)
|
|
WHERE countryCode = @PAYOUT_COUNTRY AND ISNULL(isDeleted,'N')='N'
|
|
SELECT @sCountryId = countryId FROM countryMaster WITH(NOLOCK)
|
|
WHERE countryCode = @SENDING_COUNTRY AND ISNULL(isDeleted,'N')='N'
|
|
|
|
SELECT
|
|
@deliveryMethod = serviceTypeId
|
|
FROM serviceTypeMaster
|
|
WHERE ISNULL(isDeleted,'N')='N'
|
|
AND typeTitle = CASE WHEN @PAYMENT_MODE = 'C' THEN 'Cash Payment'
|
|
WHEN @PAYMENT_MODE = 'B' THEN 'Bank Deposit'
|
|
--WHEN @PAYMENT_MODE = 'D' THEN 'Bank Deposit'
|
|
END
|
|
|
|
DECLARE
|
|
@rowId INT
|
|
,@place INT
|
|
,@currDecimal INT
|
|
|
|
-------------------- Find Decimal Mask for payout amount rounding ----------------------------------
|
|
SELECT TOP 1
|
|
@pCurr = CM.currencyCode
|
|
, @currDecimal = CM.countAfterDecimal
|
|
FROM currencyMaster CM WITH (NOLOCK)
|
|
INNER JOIN countryCurrency CC WITH (NOLOCK) ON CM.currencyId = CC.currencyId
|
|
WHERE CC.countryId = @pCountryId
|
|
|
|
SELECT TOP 1
|
|
@collCurr = CM.currencyCode
|
|
FROM currencyMaster CM WITH (NOLOCK)
|
|
INNER JOIN countryCurrency CC WITH (NOLOCK) ON CM.currencyId = CC.currencyId
|
|
WHERE CC.countryId = @sCountryId
|
|
|
|
SELECT
|
|
@place = place
|
|
, @currDecimal = currDecimal
|
|
FROM currencyPayoutRound
|
|
WHERE ISNULL(isDeleted, 'N') = 'N'
|
|
AND currency = @pCurr AND tranType IS NULL
|
|
------------- End -----------------------------------------------------
|
|
|
|
IF @pCurr IS NULL
|
|
BEGIN
|
|
SELECT '3008' CODE, 'Select Country is not allowed' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
DECLARE
|
|
@customerRate MONEY
|
|
,@sCurrCostRate MONEY
|
|
,@sCurrHoMargin MONEY
|
|
,@sCurrAgentMargin MONEY
|
|
,@pCurrCostRate MONEY
|
|
,@pCurrHoMargin MONEY
|
|
,@pCurrAgentMargin MONEY
|
|
,@agentCrossSettRate MONEY
|
|
,@treasuryTolerance MONEY
|
|
,@sharingValue MONEY
|
|
,@sharingType CHAR(1)
|
|
,@customerPremium MONEY
|
|
,@sAgentComm MONEY
|
|
,@sAgentCommCurrency VARCHAR(3)
|
|
|
|
------------------ Setting Default AgentId for Sending Country -------------------------------
|
|
|
|
--SELECT @sBranch = CASE
|
|
-- WHEN @SENDING_COUNTRY = 'JP' THEN 4847
|
|
-- WHEN @SENDING_COUNTRY = 'US' THEN 4815
|
|
-- END
|
|
|
|
------------------ End -------------------------------------
|
|
SELECT
|
|
@exRate = customerRate
|
|
,@sCurrCostRate = sCurrCostRate
|
|
,@sCurrHoMargin = sCurrHoMargin
|
|
,@sCurrAgentMargin = sCurrAgentMargin
|
|
,@pCurrCostRate = pCurrCostRate
|
|
,@pCurrHoMargin = pCurrHoMargin
|
|
,@pCurrAgentMargin = pCurrAgentMargin
|
|
,@agentCrossSettRate = agentCrossSettRate
|
|
,@treasuryTolerance = treasuryTolerance
|
|
,@customerPremium = customerPremium
|
|
,@sharingValue = sharingValue
|
|
,@sharingType = sharingType
|
|
FROM dbo.FNAGetExRate(118,1034,NULL,'KRW',151,null,'NPR',1)
|
|
--FROM dbo.FNAGetExRate(@sCountryId,@sAgent,@sBranch,@collCurr,@pCountryId,@pAgent,@pCurr,@deliveryMethod)
|
|
|
|
IF @exRate IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'Ex-Rate Not Defined for Receiving Currency (' + @pCurr + ')' MESSAGE, * FROM @errorTable
|
|
RETURN
|
|
END
|
|
|
|
SELECT
|
|
@cAmt = CASE WHEN @CALC_BY IN ('S','C') THEN @TRANSFER_AMOUNT ELSE '0' END
|
|
,@pAmt = CASE WHEN @CALC_BY = 'P' THEN @TRANSFER_AMOUNT ELSE '0' END
|
|
|
|
SELECT @sSuperAgent = parentid FROM agentMaster (NOLOCK) WHERE agentid = @sAgent
|
|
|
|
IF ISNULL(@cAmt,0.00) <> 0.00 AND (@CALC_BY = 'S' OR @CALC_BY = 'C')
|
|
BEGIN
|
|
SELECT
|
|
@serviceCharge = amount
|
|
FROM [dbo].FNAGetServiceCharge(@sCountryId, 1008, 1034,@sBranch ,@pCountryId, NULL, @pAgent, NULL ,@deliveryMethod, @cAmt, @collCurr)
|
|
IF @serviceCharge IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'Service Charge Not Defined for Receiving Country.' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
SET @tAmt = @cAmt - @serviceCharge
|
|
|
|
IF @currDecimal IS NOT NULL
|
|
BEGIN
|
|
SET @pAmt = (@cAmt - @serviceCharge ) * (@exRate)
|
|
SET @pAmt = ROUND(@pAmt, @currDecimal, 1)
|
|
END
|
|
|
|
ELSE IF @place IS NOT NULL
|
|
BEGIN
|
|
SET @pAmt = (@cAmt - @serviceCharge ) * (@exRate)
|
|
SET @pAmt = ROUND(@pAmt, -@place, 1)
|
|
END
|
|
END
|
|
|
|
ELSE
|
|
BEGIN
|
|
SET @tAmt = @pAmt/@exRate
|
|
SET @tAmt = ROUND(@tAmt, 0)
|
|
|
|
SELECT
|
|
@serviceCharge = amount
|
|
FROM [dbo].FNAGetServiceCharge(@sCountryId, 1008, 1034, @sBranch, @pCountryId, NULL, @pAgent, NULL, @deliveryMethod, @tAmt, @collCurr )
|
|
|
|
IF @serviceCharge IS NULL
|
|
BEGIN
|
|
SELECT '1001' CODE, 'Service Charge Not Defined for Receiving Country..' MESSAGE
|
|
,* FROM @errorTable
|
|
|
|
RETURN;
|
|
END
|
|
|
|
IF @currDecimal IS NOT NULL
|
|
BEGIN
|
|
SET @cAmt = (@tAmt + @serviceCharge)
|
|
SET @cAmt = ROUND(@cAmt, @currDecimal)
|
|
END
|
|
|
|
ELSE IF @place IS NOT NULL
|
|
BEGIN
|
|
SET @cAmt = (@tAmt + @serviceCharge)
|
|
SET @cAmt = ROUND(@cAmt, -@place)
|
|
END
|
|
END
|
|
|
|
IF @serviceCharge > @tAmt
|
|
BEGIN
|
|
SELECT '3009' CODE, 'Sent Amount must be more than Service Charge' MESSAGE, * FROM @errorTable
|
|
RETURN;
|
|
END
|
|
|
|
SELECT
|
|
'0' CODE
|
|
,@PAYOUT_COUNTRY MESSAGE
|
|
,@AGENT_SESSION_ID AGENT_REFID
|
|
,@cAmt COLLECT_AMT
|
|
,@collCurr COLLECT_CURRENCY
|
|
,@serviceCharge SERVICE_CHARGE
|
|
,@exRate EXCHANGE_RATE
|
|
,@pAmt PAYOUT_AMT
|
|
,@pCurr PAYOUT_CURRENCY
|
|
,@EXRATEID SESSION_ID
|
|
|
|
|
|
|
|
|
|
GO
|