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

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[ws_proc_CalcCommission] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. /*
  9. exec [ws_proc_CalcCommission] @AGENT_CODE='GMKOR2080',@USER_ID='OnlineAPI',@PASSWORD='JKLMNO',@AGENT_SESSION_ID='23123',@TRANSFER_AMOUNT=100000
  10. ,@PAYMENT_MODE='C',@CALC_BY='p',@SENDING_COUNTRY='kr',@PAYOUT_COUNTRY='np'
  11. */
  12. CREATE PROC [dbo].[ws_proc_CalcCommission](
  13. @AGENT_CODE VARCHAR(50)
  14. ,@USER_ID VARCHAR(50)
  15. ,@PASSWORD VARCHAR(50)
  16. ,@AGENT_SESSION_ID VARCHAR(50)
  17. ,@TRANSFER_AMOUNT VARCHAR(50)
  18. ,@PAYMENT_MODE VARCHAR(50)
  19. ,@CALC_BY VARCHAR(50)
  20. ,@SENDING_COUNTRY VARCHAR(100)
  21. ,@PAYOUT_COUNTRY VARCHAR(100)
  22. )
  23. AS
  24. SET NOCOUNT ON;
  25. SET XACT_ABORT ON;
  26. DECLARE @EXRATEID VARCHAR(40) = NEWID()
  27. DECLARE @errorTable TABLE
  28. (
  29. AGENT_REFID VARCHAR(150)
  30. ,COLLECT_AMT MONEY
  31. ,COLLECT_CURRENCY VARCHAR(3)
  32. ,SERVICE_CHARGE MONEY
  33. ,EXCHANGE_RATE MONEY
  34. ,PAYOUT_AMT MONEY
  35. ,PAYOUT_CURRENCY VARCHAR(3)
  36. ,SESSION_ID VARCHAR(36)
  37. )
  38. INSERT INTO @errorTable ( AGENT_REFID )
  39. SELECT @AGENT_SESSION_ID
  40. IF @USER_ID IS NULL
  41. BEGIN
  42. SELECT '1001' CODE, 'USER_ID Field is Empty' MESSAGE, * FROM @errorTable
  43. RETURN
  44. END
  45. IF @AGENT_CODE IS NULL
  46. BEGIN
  47. SELECT '1001' CODE, 'AGENT_CODE Field is Empty' MESSAGE, * FROM @errorTable
  48. RETURN
  49. END
  50. IF @PASSWORD IS NULL
  51. BEGIN
  52. SELECT '1001' CODE, 'PASSWORD Field is Empty' MESSAGE, * FROM @errorTable
  53. RETURN
  54. END
  55. IF NOT EXISTS(select 'A' from applicationUsers(nolock) where username=@USER_ID and userType ='i'
  56. AND agentCode = @AGENT_CODE AND pwd = @PASSWORD)
  57. BEGIN
  58. SELECT '1002' CODE,'Authentication Failed' MESSAGE, * FROM @errorTable
  59. RETURN
  60. END
  61. IF @PAYOUT_COUNTRY IS NULL
  62. BEGIN
  63. SELECT '1001' CODE,'PAYOUT COUNTRY Field is Empty' MESSAGE, * FROM @errorTable
  64. RETURN;
  65. END
  66. IF @SENDING_COUNTRY IS NULL
  67. BEGIN
  68. SELECT '1001' CODE,'SENDING COUNTRY Field is Empty' MESSAGE, * FROM @errorTable
  69. RETURN;
  70. END
  71. IF @TRANSFER_AMOUNT IS NULL
  72. BEGIN
  73. SELECT '1001' CODE,'TRANSFER AMOUNT Field is Empty' MESSAGE, * FROM @errorTable
  74. RETURN;
  75. END
  76. IF @TRANSFER_AMOUNT IS NOT NULL AND ISNUMERIC(@TRANSFER_AMOUNT)=0
  77. BEGIN
  78. SELECT '9001' CODE,'TRANSFER AMOUNT must be numeric' MESSAGE, * FROM @errorTable
  79. RETURN;
  80. END
  81. IF @PAYMENT_MODE IS NULL
  82. BEGIN
  83. SELECT '1001' CODE,'PAYMETHOD Field is Empty' MESSAGE, * FROM @errorTable
  84. RETURN;
  85. END
  86. IF @CALC_BY IS NULL
  87. BEGIN
  88. SELECT '1001' CODE,'CALC BY Field is Empty' MESSAGE, * FROM @errorTable
  89. RETURN;
  90. END
  91. IF @AGENT_SESSION_ID IS NULL
  92. BEGIN
  93. SELECT '1001' CODE,'AGENT SESSION ID Field is Empty' MESSAGE, * FROM @errorTable
  94. RETURN;
  95. END
  96. IF @PAYMENT_MODE NOT IN('C','B','D')
  97. BEGIN
  98. SELECT '3001' CODE, 'Invalid Payment Type, Must be C - Cash Pickup B - Account Deposit to Bank' MESSAGE, * FROM @errorTable
  99. RETURN
  100. END
  101. IF @CALC_BY NOT IN('S','P','C')
  102. BEGIN
  103. SELECT '1004' CODE, 'Invalid Parameter CALC BY' MESSAGE, * FROM @errorTable
  104. RETURN
  105. END
  106. DECLARE
  107. @pCountryId INT
  108. ,@pAgent INT
  109. ,@pCurr VARCHAR(3)
  110. ,@deliveryMethod INT
  111. ,@exRate FLOAT
  112. ,@cAmt MONEY
  113. ,@tAmt MONEY
  114. ,@pAmt MONEY
  115. ,@sCountryId INT
  116. ,@sSuperAgent INT
  117. ,@sAgent INT
  118. ,@sBranch INT = NULL
  119. ,@collCurr VARCHAR(3)
  120. ,@serviceCharge MONEY
  121. SELECT @pCountryId = countryId FROM countryMaster WITH(NOLOCK)
  122. WHERE countryCode = @PAYOUT_COUNTRY AND ISNULL(isDeleted,'N')='N'
  123. SELECT @sCountryId = countryId FROM countryMaster WITH(NOLOCK)
  124. WHERE countryCode = @SENDING_COUNTRY AND ISNULL(isDeleted,'N')='N'
  125. SELECT
  126. @deliveryMethod = serviceTypeId
  127. FROM serviceTypeMaster
  128. WHERE ISNULL(isDeleted,'N')='N'
  129. AND typeTitle = CASE WHEN @PAYMENT_MODE = 'C' THEN 'Cash Payment'
  130. WHEN @PAYMENT_MODE = 'B' THEN 'Bank Deposit'
  131. --WHEN @PAYMENT_MODE = 'D' THEN 'Bank Deposit'
  132. END
  133. DECLARE
  134. @rowId INT
  135. ,@place INT
  136. ,@currDecimal INT
  137. -------------------- Find Decimal Mask for payout amount rounding ----------------------------------
  138. SELECT TOP 1
  139. @pCurr = CM.currencyCode
  140. , @currDecimal = CM.countAfterDecimal
  141. FROM currencyMaster CM WITH (NOLOCK)
  142. INNER JOIN countryCurrency CC WITH (NOLOCK) ON CM.currencyId = CC.currencyId
  143. WHERE CC.countryId = @pCountryId
  144. SELECT TOP 1
  145. @collCurr = CM.currencyCode
  146. FROM currencyMaster CM WITH (NOLOCK)
  147. INNER JOIN countryCurrency CC WITH (NOLOCK) ON CM.currencyId = CC.currencyId
  148. WHERE CC.countryId = @sCountryId
  149. SELECT
  150. @place = place
  151. , @currDecimal = currDecimal
  152. FROM currencyPayoutRound
  153. WHERE ISNULL(isDeleted, 'N') = 'N'
  154. AND currency = @pCurr AND tranType IS NULL
  155. ------------- End -----------------------------------------------------
  156. IF @pCurr IS NULL
  157. BEGIN
  158. SELECT '3008' CODE, 'Select Country is not allowed' MESSAGE, * FROM @errorTable
  159. RETURN
  160. END
  161. DECLARE
  162. @customerRate MONEY
  163. ,@sCurrCostRate MONEY
  164. ,@sCurrHoMargin MONEY
  165. ,@sCurrAgentMargin MONEY
  166. ,@pCurrCostRate MONEY
  167. ,@pCurrHoMargin MONEY
  168. ,@pCurrAgentMargin MONEY
  169. ,@agentCrossSettRate MONEY
  170. ,@treasuryTolerance MONEY
  171. ,@sharingValue MONEY
  172. ,@sharingType CHAR(1)
  173. ,@customerPremium MONEY
  174. ,@sAgentComm MONEY
  175. ,@sAgentCommCurrency VARCHAR(3)
  176. ------------------ Setting Default AgentId for Sending Country -------------------------------
  177. --SELECT @sBranch = CASE
  178. -- WHEN @SENDING_COUNTRY = 'JP' THEN 4847
  179. -- WHEN @SENDING_COUNTRY = 'US' THEN 4815
  180. -- END
  181. ------------------ End -------------------------------------
  182. SELECT
  183. @exRate = customerRate
  184. ,@sCurrCostRate = sCurrCostRate
  185. ,@sCurrHoMargin = sCurrHoMargin
  186. ,@sCurrAgentMargin = sCurrAgentMargin
  187. ,@pCurrCostRate = pCurrCostRate
  188. ,@pCurrHoMargin = pCurrHoMargin
  189. ,@pCurrAgentMargin = pCurrAgentMargin
  190. ,@agentCrossSettRate = agentCrossSettRate
  191. ,@treasuryTolerance = treasuryTolerance
  192. ,@customerPremium = customerPremium
  193. ,@sharingValue = sharingValue
  194. ,@sharingType = sharingType
  195. FROM dbo.FNAGetExRate(118,1034,NULL,'KRW',151,null,'NPR',1)
  196. --FROM dbo.FNAGetExRate(@sCountryId,@sAgent,@sBranch,@collCurr,@pCountryId,@pAgent,@pCurr,@deliveryMethod)
  197. IF @exRate IS NULL
  198. BEGIN
  199. SELECT '1001' CODE, 'Ex-Rate Not Defined for Receiving Currency (' + @pCurr + ')' MESSAGE, * FROM @errorTable
  200. RETURN
  201. END
  202. SELECT
  203. @cAmt = CASE WHEN @CALC_BY IN ('S','C') THEN @TRANSFER_AMOUNT ELSE '0' END
  204. ,@pAmt = CASE WHEN @CALC_BY = 'P' THEN @TRANSFER_AMOUNT ELSE '0' END
  205. SELECT @sSuperAgent = parentid FROM agentMaster (NOLOCK) WHERE agentid = @sAgent
  206. IF ISNULL(@cAmt,0.00) <> 0.00 AND (@CALC_BY = 'S' OR @CALC_BY = 'C')
  207. BEGIN
  208. SELECT
  209. @serviceCharge = amount
  210. FROM [dbo].FNAGetServiceCharge(@sCountryId, 1008, 1034,@sBranch ,@pCountryId, NULL, @pAgent, NULL ,@deliveryMethod, @cAmt, @collCurr)
  211. IF @serviceCharge IS NULL
  212. BEGIN
  213. SELECT '1001' CODE, 'Service Charge Not Defined for Receiving Country.' MESSAGE, * FROM @errorTable
  214. RETURN;
  215. END
  216. SET @tAmt = @cAmt - @serviceCharge
  217. IF @currDecimal IS NOT NULL
  218. BEGIN
  219. SET @pAmt = (@cAmt - @serviceCharge ) * (@exRate)
  220. SET @pAmt = ROUND(@pAmt, @currDecimal, 1)
  221. END
  222. ELSE IF @place IS NOT NULL
  223. BEGIN
  224. SET @pAmt = (@cAmt - @serviceCharge ) * (@exRate)
  225. SET @pAmt = ROUND(@pAmt, -@place, 1)
  226. END
  227. END
  228. ELSE
  229. BEGIN
  230. SET @tAmt = @pAmt/@exRate
  231. SET @tAmt = ROUND(@tAmt, 0)
  232. SELECT
  233. @serviceCharge = amount
  234. FROM [dbo].FNAGetServiceCharge(@sCountryId, 1008, 1034, @sBranch, @pCountryId, NULL, @pAgent, NULL, @deliveryMethod, @tAmt, @collCurr )
  235. IF @serviceCharge IS NULL
  236. BEGIN
  237. SELECT '1001' CODE, 'Service Charge Not Defined for Receiving Country..' MESSAGE
  238. ,* FROM @errorTable
  239. RETURN;
  240. END
  241. IF @currDecimal IS NOT NULL
  242. BEGIN
  243. SET @cAmt = (@tAmt + @serviceCharge)
  244. SET @cAmt = ROUND(@cAmt, @currDecimal)
  245. END
  246. ELSE IF @place IS NOT NULL
  247. BEGIN
  248. SET @cAmt = (@tAmt + @serviceCharge)
  249. SET @cAmt = ROUND(@cAmt, -@place)
  250. END
  251. END
  252. IF @serviceCharge > @tAmt
  253. BEGIN
  254. SELECT '3009' CODE, 'Sent Amount must be more than Service Charge' MESSAGE, * FROM @errorTable
  255. RETURN;
  256. END
  257. SELECT
  258. '0' CODE
  259. ,@PAYOUT_COUNTRY MESSAGE
  260. ,@AGENT_SESSION_ID AGENT_REFID
  261. ,@cAmt COLLECT_AMT
  262. ,@collCurr COLLECT_CURRENCY
  263. ,@serviceCharge SERVICE_CHARGE
  264. ,@exRate EXCHANGE_RATE
  265. ,@pAmt PAYOUT_AMT
  266. ,@pCurr PAYOUT_CURRENCY
  267. ,@EXRATEID SESSION_ID
  268. GO