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.

917 lines
22 KiB

  1. ALTER PROC [dbo].[proc_get_exRate_master] (
  2. @flag VARCHAR(20)
  3. ,@user VARCHAR(100) = NULL
  4. ,@sCountryId INT = NULL
  5. ,@sAgent INT = NULL
  6. ,@sSuperAgent INT = NULL
  7. ,@sBranch INT = NULL
  8. ,@senderId BIGINT = NULL
  9. ,@collCurr VARCHAR(5) = NULL
  10. ,@pCountryId INT = NULL
  11. ,@pCountry VARCHAR(50) = NULL
  12. ,@pAgent INT = NULL
  13. ,@pCurr VARCHAR(5) = NULL
  14. ,@deliveryMethodId INT = NULL
  15. ,@cAmt MONEY = NULL
  16. ,@pAmt MONEY = NULL
  17. ,@calBy CHAR(1) = NULL
  18. ,@couponCode VARCHAR(30) = NULL
  19. ,@schemeId INT = NULL
  20. ,@payOutPartner INT = NULL
  21. ,@paymentType VARCHAR(50) = NULL
  22. ,@cardOnline VARCHAR(10) = NULL
  23. ,@tpExRate FLOAT = NULL
  24. ,@isManualSc CHAR(1) = NULL
  25. ,@manualSc MONEY = NULL
  26. ,@ProcessFor VARCHAR(20) = NULL
  27. ,@discountedFee MONEY = NULL
  28. )
  29. AS
  30. SET NOCOUNT ON;
  31. SET XACT_ABORT ON;
  32. -----------------------------------------
  33. --Sep 22 -> #109 ->Change the logic to choose highest Rate in case of Nepal
  34. -- #101 , #361 - Mobile Changes for Multi-Lingual
  35. -- #1526 - Post production fixes for Redeem & Earn
  36. -- #1590 - Customer Loyalty
  37. -- #5968 - sc revised
  38. --------------------------------------------
  39. BEGIN
  40. DECLARE @scValue MONEY
  41. ,@scAction CHAR(2)
  42. ,@scOffer MONEY
  43. ,@exRateOffer FLOAT
  44. ,@scDiscount MONEY
  45. DECLARE @place INT
  46. ,@currDecimal INT
  47. ,@collMode VARCHAR(30)
  48. ,@sendingCustType VARCHAR(30)
  49. ,@msg VARCHAR(150)
  50. ,@errorCode INT
  51. DECLARE @exRateCalByPartner BIT
  52. ,@pSuperAgent INT
  53. ,@serviceCharge MONEY
  54. ,@serviceChargetmp MONEY
  55. ,@tAmt MONEY
  56. ,@pSuperAgentName VARCHAR(100)
  57. ,@pBranch INT
  58. DECLARE @pAgentName VARCHAR(100)
  59. ,@pBranchName VARCHAR(100)
  60. ,@exRate FLOAT
  61. ,@pCurrHoMargin FLOAT
  62. ,@FOREX_SESSION_ID VARCHAR(40)
  63. DECLARE @tranCount INT = 0
  64. ,@schemeCount INT = 0
  65. ,@schemeAppliedMsg VARCHAR(100) = ''
  66. ,@isFirstTran CHAR(1) = 'N'
  67. ,@createdFrom CHAR(1) = NULL
  68. ,@isEligible CHAR(1) = NULL
  69. ,@introducer VARCHAR(25) = NULL
  70. --IF @ProcessFor IN ('send')
  71. --BEGIN
  72. IF ISNULL(@user, 'onlinedefault') <> 'onlinedefault' --OR @user is not null
  73. BEGIN
  74. SET @senderId = (
  75. SELECT customerId
  76. FROM mobile_userRegistration(NOLOCK)
  77. WHERE username = @user
  78. )
  79. EXEC PROC_Customer_LoyaltyV2 @flag = 'check-eligible-v2'
  80. ,@isEligible = @isEligible OUT
  81. ,@referralCode = @introducer
  82. ,@tranCount = @trancount OUT
  83. ,@schemeCount = @schemeCount OUT
  84. ,@customerId = @senderId
  85. ,@createdFrom = 'M'
  86. IF NOT EXISTS (
  87. SELECT 1
  88. FROM (
  89. SELECT TOP 1 customerId
  90. FROM TRANSENDERS TS(NOLOCK)
  91. INNER JOIN remittran(NOLOCK) rt ON rt.id = ts.tranId
  92. WHERE customerId = @SenderId
  93. AND rt.tranStatus <> 'CANCEL' AND rt.tranType='M'
  94. UNION ALL
  95. SELECT TOP 1 customerId
  96. FROM TRANSENDERSTEMP TT(NOLOCK)
  97. INNER JOIN remittrantemp(NOLOCK) rt ON rt.id = tt.tranId
  98. WHERE customerId = @SenderId
  99. AND rt.tranStatus <> 'CANCEL' AND rt.tranType='M'
  100. ) a
  101. WHERE customerId = @SenderId
  102. )
  103. BEGIN
  104. SET @isFirstTran = 'Y'
  105. END
  106. END
  107. print '@isFirstTran' + '-> ' + @isFirstTran
  108. SELECT @createdFrom = serviceUsedFor
  109. FROM customerMaster(NOLOCK)
  110. WHERE customerId = @senderId
  111. SET @sCountryId = 233
  112. IF ISNULL(@pCountryId, 0) = 0
  113. SELECT @pCountryId = countryId
  114. FROM countryMaster(NOLOCK)
  115. WHERE COUNTRYNAME = @pCountry
  116. --IF (@ProcessFor = 'send')
  117. --BEGIN
  118. --IF NOT EXISTS (
  119. -- SELECT 1
  120. -- FROM (
  121. -- SELECT TOP 1 customerId
  122. -- FROM TRANSENDERS TS(NOLOCK)
  123. -- INNER JOIN remittran(NOLOCK) rt ON rt.id = ts.tranId
  124. -- WHERE customerId = @SenderId
  125. -- AND rt.tranStatus <> 'CANCEL' AND rt.tranType='M'
  126. -- UNION ALL
  127. -- SELECT TOP 1 customerId
  128. -- FROM TRANSENDERSTEMP TT(NOLOCK)
  129. -- INNER JOIN remittrantemp(NOLOCK) rt ON rt.id = tt.tranId
  130. -- WHERE customerId = @SenderId
  131. -- AND rt.tranStatus <> 'CANCEL' AND rt.tranType='M'
  132. -- ) a
  133. -- WHERE customerId = @SenderId
  134. -- )
  135. --BEGIN
  136. -- SET @isFirstTran = 'Y'
  137. --END
  138. -- END
  139. IF dbo.FNA_GET_AVAILABLE_BALANCE_POINTS(@senderId) < ISNULL(@discountedFee, 0)
  140. BEGIN
  141. SELECT '1' ErrorCode
  142. ,'You do not have sufficient points for redeem!' Msg
  143. ,NULL id
  144. RETURN
  145. END
  146. IF @flag = 'False'
  147. AND @ProcessFor IN ('dashboard')
  148. BEGIN
  149. SELECT @payoutPartner = AGENTID
  150. ,@exRateCalByPartner = ISNULL(exRateCalByPartner, 0)
  151. FROM TblPartnerwiseCountry(NOLOCK)
  152. WHERE CountryId = @pCountryId
  153. AND IsActive = 1
  154. AND ISNULL(IsMobileEnabled, 0) = 1
  155. AND ISNULL(PaymentMethod, @deliveryMethodId) = @deliveryMethodId
  156. END
  157. ELSE
  158. BEGIN
  159. SELECT @payoutPartner = AGENTID
  160. ,@exRateCalByPartner = ISNULL(exRateCalByPartner, 0)
  161. FROM TblPartnerwiseCountry(NOLOCK)
  162. WHERE CountryId = @pCountryId
  163. AND IsActive = 1
  164. AND ISNULL(PaymentMethod, @deliveryMethodId) = @deliveryMethodId
  165. END
  166. PRINT '@payoutPartner'
  167. PRINT @payoutPartner;
  168. IF @payoutPartner IS NOT NULL
  169. BEGIN
  170. --GET PAYOUT AGENT DETAILS
  171. SELECT @PAGENT = AGENTID
  172. FROM AGENTMASTER(NOLOCK)
  173. WHERE PARENTID = @payoutPartner
  174. AND ISNULL(ISSETTLINGAGENT, 'N') = 'Y';
  175. SELECT @pSuperAgent = sSuperAgent
  176. ,@pSuperAgentName = sSuperAgentName
  177. ,@pAgent = sAgent
  178. ,@pAgentName = sAgentName
  179. ,@pBranch = sBranch
  180. ,@pBranchName = sBranchName
  181. FROM dbo.FNAGetBranchFullDetails(@PAGENT)
  182. END
  183. ELSE
  184. BEGIN
  185. SELECT '1' ErrorCode
  186. ,'Partner not yet mapped for the selected country!' Msg
  187. ,NULL id
  188. RETURN
  189. END
  190. DECLARE @rowId INT
  191. SELECT @scValue = 0
  192. ,@scOffer = 0
  193. ,@exRateOffer = 0
  194. ,@scDiscount = 0
  195. SELECT @place = place
  196. ,@currDecimal = currDecimal
  197. FROM currencyPayoutRound WITH (NOLOCK)
  198. WHERE ISNULL(isDeleted, 'N') = 'N'
  199. AND currency = @pCurr
  200. AND ISNULL(tranType, @deliveryMethodId) = @deliveryMethodId
  201. SET @currDecimal = ISNULL(@currDecimal, 0)
  202. IF @pCurr IS NULL
  203. BEGIN
  204. SELECT '2' ErrorCode
  205. ,'Currency not been defined yet for receiving country' Msg
  206. ,NULL id
  207. RETURN
  208. END
  209. IF (ISNULL(@discountedFee, 0) <> FLOOR(ISNULL(@discountedFee, 0)))
  210. BEGIN
  211. SELECT '9' ErrorCode
  212. ,'Discount Fee cannot be in decimal points.' Msg
  213. ,NULL id
  214. RETURN
  215. END
  216. pRINT '@pAgent';
  217. --pRINT @pAgent;
  218. IF @flag = 'false'
  219. BEGIN
  220. IF @pCountryId = 151
  221. AND @deliveryMethodId = 1
  222. BEGIN
  223. SELECT AgentId
  224. INTO #AgentList
  225. FROM agentMaster(NOLOCK)
  226. WHERE extCode = 'NP ANYWHERE'
  227. PRINT @sCountryId;
  228. PRINT @sAgent;
  229. PRINT @sBranch;
  230. PRINT @collCurr;
  231. PRINT @pCountryId;
  232. PRINT @pCurr;
  233. PRINT @deliveryMethodId;
  234. SELECT @exRate = customerRate
  235. ,@pCurrHoMargin = pCurrHoMargin
  236. FROM (
  237. SELECT ROW_NUMBER() OVER (
  238. ORDER BY CUSTOMERRATE DESC
  239. ) ROW_NUM
  240. ,CUSTOMERRATE
  241. ,pCurrHoMargin
  242. FROM #AgentList A
  243. CROSS APPLY dbo.FNAGetExRate(@sCountryId, @sAgent, @sBranch, @collCurr, @pCountryId, AgentId, @pCurr, @deliveryMethodId) FN
  244. ) X
  245. WHERE X.ROW_NUM = 1
  246. END
  247. ELSE
  248. BEGIN
  249. SELECT @exRate = customerRate
  250. ,@pCurrHoMargin = pCurrHoMargin
  251. FROM dbo.FNAGetExRate(@sCountryId, @sAgent, @sBranch, @collCurr, @pCountryId, @pAgent, @pCurr, @deliveryMethodId)
  252. END
  253. IF ISNULL(@exRate, 0) = 0
  254. BEGIN
  255. SELECT '3' ErrorCode
  256. ,'Exchange rate not defined yet for receiving currency (' + @pCurr + ')' Msg
  257. ,NULL id
  258. RETURN
  259. END
  260. PRINT '@isFirstTran:' + CAST( @isFirstTran AS VARCHAR);
  261. PRINT '@isEligible:' + CAST( @isEligible AS VARCHAR);
  262. PRINT '@tranCount:' + CAST( @tranCount AS VARCHAR);
  263. PRINT '@@schemeCount:' + CAST( @schemeCount AS VARCHAR);
  264. IF @calBy = 'C'
  265. BEGIN
  266. IF ( @tranCount >= @schemeCount
  267. AND ISNULL(@user, 'onlinedefault') <> 'onlinedefault'
  268. --AND ISNULL(@ProcessFor, '') = 'send'
  269. AND @isEligible = 'Y'
  270. )
  271. OR (@isFirstTran = 'Y')
  272. BEGIN
  273. SET @serviceCharge = 0
  274. IF @isFirstTran = 'Y'
  275. BEGIN
  276. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to First Transaction!';
  277. END
  278. ELSE
  279. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to Loyalty Scheme!';
  280. END
  281. ELSE
  282. BEGIN
  283. IF ISNULL(@isManualSc, 'N') = 'N'
  284. BEGIN
  285. SELECT @serviceChargetmp = isnull(amount, 0)
  286. FROM [dbo].FNAGetServiceCharge(@sCountryId, @sSuperAgent, @sAgent, @sBranch, @pCountryId, @pSuperAgent, @pAgent, @pBranch, @deliveryMethodId, @cAmt, @collCurr)
  287. --IF (@discountedFee > '0.00')
  288. -- AND (@serviceChargetmp < @discountedFee)
  289. --BEGIN
  290. -- SELECT '8' ErrorCode
  291. -- ,'Redeem point can not be more than service charge' Msg
  292. -- ,NULL id
  293. -- RETURN;
  294. --END
  295. --ELSE
  296. --BEGIN
  297. -- SELECT @serviceCharge = @serviceChargetmp - ISNULL(@discountedFee, 0)
  298. --END
  299. END
  300. ELSE
  301. BEGIN
  302. SET @serviceCharge = ISNULL(@manualSc, 0)
  303. END
  304. IF @serviceCharge IS NULL
  305. AND ISNULL(@isManualSc, 'N') = 'N'
  306. BEGIN
  307. SELECT '4' ErrorCode
  308. ,'Service charge not defined yet for receiving country' Msg
  309. ,NULL id
  310. RETURN;
  311. END
  312. END
  313. IF @scAction = 'PD' -- Percent Discount
  314. BEGIN
  315. SET @scOffer = (@scValue / 100) * @serviceCharge
  316. SET @scDiscount = (@scValue / 100) * @serviceCharge
  317. END
  318. ELSE IF @scAction = 'FD' -- Flat Discount
  319. BEGIN
  320. SET @scDiscount = @scValue
  321. END
  322. ELSE IF @scAction = 'FV' -- Fixed Value
  323. BEGIN
  324. SET @scOffer = @scValue
  325. SET @scDiscount = @serviceCharge - @scValue
  326. END
  327. SET @tAmt = @cAmt - @serviceCharge + @scDiscount + ISNULL(@discountedFee, 0)
  328. SET @pAmt = @tAmt * (@exRate + @exRateOffer)
  329. SET @pAmt = FLOOR(@pAmt)
  330. END
  331. ELSE
  332. BEGIN
  333. --SET @tAmt = CEILING(@pAmt/(@exRate + @exRateOffer), 0)
  334. SET @tAmt = CEILING(@pAmt / (@exRate + @exRateOffer))
  335. IF (
  336. @tranCount >= @schemeCount
  337. AND ISNULL(@user, 'onlinedefault') <> 'onlinedefault'
  338. --AND ISNULL(@ProcessFor, '') = 'send'
  339. AND @isEligible = 'Y'
  340. )
  341. OR (@isFirstTran = 'Y')
  342. BEGIN
  343. SET @serviceCharge = 0
  344. IF @isFirstTran = 'Y'
  345. BEGIN
  346. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to First Transaction!';
  347. END
  348. ELSE
  349. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to Loyalty Scheme!';
  350. END
  351. ELSE
  352. BEGIN
  353. IF ISNULL(@isManualSc, 'N') = 'N'
  354. BEGIN
  355. SELECT @serviceChargetmp = isnull(amount, 0)
  356. FROM [dbo].FNAGetServiceCharge(@sCountryId, @sSuperAgent, @sAgent, @sBranch, @pCountryId, @pSuperAgent, @pAgent, @pBranch, @deliveryMethodId, @tAmt, @collCurr)
  357. --IF (@discountedFee > '0.00')
  358. -- AND (@serviceChargetmp < @discountedFee)
  359. --BEGIN
  360. -- SELECT '8' ErrorCode
  361. -- ,'Redeem point can not be more than service charge' Msg
  362. -- ,NULL id
  363. -- RETURN;
  364. --END
  365. --ELSE
  366. --BEGIN
  367. -- SELECT @serviceCharge = @serviceChargetmp - ISNULL(@discountedFee, 0)
  368. --END
  369. END
  370. ELSE
  371. BEGIN
  372. SET @serviceCharge = ISNULL(@manualSc, 0)
  373. END
  374. IF @serviceCharge IS NULL
  375. BEGIN
  376. SELECT '4' ErrorCode
  377. ,'Service charge not defined yet for receiving country' Msg
  378. ,NULL id
  379. RETURN;
  380. END
  381. END
  382. IF @scAction = 'PD'
  383. BEGIN
  384. SET @scOffer = (@scValue / 100) * @serviceCharge
  385. SET @scDiscount = (@scValue / 100) * @serviceCharge
  386. END
  387. ELSE IF @scAction = 'FD'
  388. BEGIN
  389. SET @scDiscount = @scValue
  390. END
  391. ELSE IF @scAction = 'FV'
  392. BEGIN
  393. SET @scOffer = @scValue
  394. SET @scDiscount = @serviceCharge - @scValue
  395. END
  396. SET @cAmt = (@tAmt + @serviceCharge - @scDiscount) - ISNULL(@discountedFee, 0)
  397. SET @cAmt = CEILING(@cAmt)
  398. END
  399. --4. Validate Country Sending Limit
  400. EXEC PROC_CHECKCOUNTRYLIMIT @flag = 's-limit'
  401. ,@cAmt = @cAmt
  402. ,@pAmt = @pAmt
  403. ,@sCountryId = @sCountryId
  404. ,@collMode = @collMode
  405. ,@deliveryMethod = @deliveryMethodId
  406. ,@sendingCustType = @sendingCustType
  407. ,@pCountryId = @pCountryId
  408. ,@pCurr = @pCurr
  409. ,@collCurr = @collCurr
  410. ,@pAgent = @pAgent
  411. ,@sAgent = @sAgent
  412. ,@sBranch = @sBranch
  413. ,@msg = @msg OUT
  414. ,@errorCode = @errorCode OUT
  415. IF @errorCode <> '0'
  416. BEGIN
  417. SELECT @errorCode ErrorCode
  418. ,@msg Msg
  419. RETURN;
  420. END
  421. --Validate Country Sending Limit END
  422. --5. Validate Country Receiving Limit
  423. EXEC PROC_CHECKCOUNTRYLIMIT @flag = 'r-limit'
  424. ,@cAmt = @cAmt
  425. ,@pAmt = @pAmt
  426. ,@sCountryId = @sCountryId
  427. ,@collMode = @collMode
  428. ,@deliveryMethod = @deliveryMethodId
  429. ,@sendingCustType = @sendingCustType
  430. ,@pCountryId = @pCountryId
  431. ,@pCurr = @pCurr
  432. ,@collCurr = @collCurr
  433. ,@pAgent = @pAgent
  434. ,@sAgent = @sAgent
  435. ,@sBranch = @sBranch
  436. ,@msg = @msg OUT
  437. ,@errorCode = @errorCode OUT
  438. IF @errorCode <> '0'
  439. BEGIN
  440. SELECT @errorCode ErrorCode
  441. ,@msg Msg
  442. RETURN;
  443. END
  444. IF ISNULL(@ProcessFor, '') = 'send'
  445. BEGIN
  446. SET @FOREX_SESSION_ID = NEWID()
  447. ----## lock ex rate for individual txn
  448. UPDATE exRateCalcHistory
  449. SET isExpired = 1
  450. WHERE CUSTOMER_ID = @senderId
  451. AND isExpired = 0
  452. PRINT @serviceCharge;
  453. INSERT INTO exRateCalcHistory (
  454. CUSTOMER_ID
  455. ,[USER_ID]
  456. ,FOREX_SESSION_ID
  457. ,serviceCharge
  458. ,pAmt
  459. ,customerRate
  460. ,sCurrCostRate
  461. ,sCurrHoMargin
  462. ,sCurrAgentMargin
  463. ,pCurrCostRate
  464. ,pCurrHoMargin
  465. ,pCurrAgentMargin
  466. ,agentCrossSettRate
  467. ,createdDate
  468. ,isExpired
  469. ,tAmt
  470. ,schemeId
  471. ,discountedFee
  472. ,sharingValue
  473. )
  474. SELECT @senderId
  475. ,@user
  476. ,@FOREX_SESSION_ID
  477. ,@serviceCharge
  478. ,@pAmt
  479. ,@exRate
  480. ,1
  481. ,0
  482. ,0
  483. ,@pCurrHoMargin + @exRate
  484. ,@pCurrHoMargin
  485. ,0
  486. ,@exRate
  487. ,GETDATE()
  488. ,0
  489. ,@tAmt
  490. ,@schemeId
  491. ,ISNULL(@discountedFee, 0)
  492. ,@schemeCount
  493. END
  494. SET @msg = 'Success'
  495. SELECT @errorCode ErrorCode
  496. ,@msg Msg
  497. ,scCharge = @serviceCharge
  498. ,exRate = @exRate
  499. ,place = @place
  500. ,pCurr = @pCurr
  501. ,currDecimal = @currDecimal
  502. ,pAmt = @pAmt
  503. ,sAmt = @tAmt
  504. ,place = @place
  505. ,disc = 0.00
  506. ,collAmt = @cAmt
  507. ,exRateOffer = @exRateOffer
  508. ,scOffer = @scDiscount
  509. ,scAction = @scAction
  510. ,scValue = @scValue
  511. ,scDiscount = @scDiscount
  512. ,tpExRate = 0
  513. ,amountLimitPerDay = 0
  514. ,amountLimitPerTran = 0
  515. ,customerTotalSentAmt = 0
  516. ,exRateDisplay = @exRate
  517. ,EXRATEID = @FOREX_SESSION_ID
  518. ,maxAmountLimitPerTran = 0
  519. ,minAmountLimitPerTran = 0
  520. ,PerTxnMinimumAmt = 0
  521. ,schemeAppliedMsg = @schemeAppliedMsg
  522. ,schemeId = @schemeId
  523. ,tpPCurr = @pCurr
  524. ,collCurr = @collCurr
  525. ,ForexSessionId = @FOREX_SESSION_ID
  526. ,discountedFee = ISNULL(@discountedFee, 0)
  527. END
  528. ELSE IF @FLAG = 'true'
  529. BEGIN
  530. IF ISNULL(@tpExRate, 0) = 0
  531. BEGIN
  532. SELECT '5' ErrorCode
  533. ,'Third Party Exchange rate fetching error for currency (' + @pCurr + ')' Msg
  534. RETURN
  535. END
  536. DECLARE @exRateDonga FLOAT, @exRateBRAC FLOAT
  537. PRINT @sCountryId;
  538. PRINT @sCountryId;
  539. PRINT @sAgent;
  540. PRINT @sBranch;
  541. PRINT @collCurr;
  542. PRINT @pCountryId;
  543. PRINT @pAgent;
  544. PRINT @pCurr;
  545. PRINT @deliveryMethodId;
  546. SELECT @pCurrHoMargin = pCurrHoMargin
  547. FROM dbo.FNAGetExRate(@sCountryId, @sAgent, @sBranch, @collCurr, @pCountryId, @pAgent, @pCurr, @deliveryMethodId)
  548. SELECT @exRate = @tpExRate - ISNULL(@pCurrHoMargin, 0)
  549. IF ISNULL(@exRate, 0) = 0
  550. BEGIN
  551. SELECT '3' ErrorCode
  552. ,'Exchange rate not defined yet for receiving currency (' + @pCurr + ')' Msg
  553. ,NULL id
  554. RETURN
  555. END
  556. IF @user = 'onlinedefault'
  557. AND @pCountryId = 203
  558. BEGIN
  559. SELECT @exRateDonga = dbo.FNAGetCustomerRate(113, 0, 394395, 'JPY', 203, 394133, 'VND', 1)
  560. IF @exRateDonga > @exRate
  561. SET @exRate = @exRateDonga
  562. END
  563. IF @user = 'onlinedefault'
  564. AND @pCountryId = 16
  565. BEGIN
  566. SELECT @exRateBRAC = dbo.FNAGetCustomerRate(113, 0, 394395, 'JPY', 16, 394414, 'BDT', 1)
  567. IF @exRateBRAC > @exRate
  568. SET @exRate = @exRateBRAC
  569. END
  570. IF @calBy = 'C'
  571. BEGIN
  572. IF (
  573. @tranCount = @schemeCount
  574. AND ISNULL(@user, 'onlinedefault') <> 'onlinedefault'
  575. -- AND ISNULL(@ProcessFor, '') = 'send'
  576. AND @isEligible = 'Y'
  577. )
  578. OR (@isFirstTran = 'Y')
  579. BEGIN
  580. SET @serviceCharge = 0
  581. IF @isFirstTran = 'Y'
  582. BEGIN
  583. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to First Transaction!';
  584. END
  585. ELSE
  586. SET @schemeAppliedMsg = 'Enjoy zero (0) service charge due to Loyalty Scheme!';
  587. END
  588. ELSE
  589. BEGIN
  590. IF ISNULL(@isManualSc, 'N') = 'N'
  591. BEGIN
  592. SELECT @serviceChargetmp = ISNULL(amount, 0)
  593. FROM [dbo].FNAGetServiceCharge(@sCountryId, @sSuperAgent, @sAgent, @sBranch, @pCountryId, @pSuperAgent, @pAgent, @pBranch, @deliveryMethodId, @cAmt, @collCurr)
  594. --IF (@discountedFee > '0.00')
  595. -- AND (@serviceChargetmp < @discountedFee)
  596. --BEGIN
  597. -- SELECT '8' ErrorCode
  598. -- ,'Redeem points can not be more than service charge' Msg
  599. -- ,NULL id
  600. -- RETURN;
  601. --END
  602. --ELSE
  603. --BEGIN
  604. -- SELECT @serviceCharge = ISNULL(@serviceChargetmp, 0) - ISNULL(@discountedFee, 0)
  605. --END
  606. END
  607. ELSE
  608. BEGIN
  609. SET @serviceCharge = ISNULL(@manualSc, 0)
  610. END
  611. IF @serviceCharge IS NULL
  612. AND ISNULL(@isManualSc, 'N') = 'N'
  613. BEGIN
  614. SELECT '4' ErrorCode
  615. ,'Service charge not defined yet for receiving country' Msg
  616. ,NULL id
  617. RETURN;
  618. END
  619. END
  620. IF @scAction = 'PD' -- Percent Discount
  621. BEGIN
  622. SET @scOffer = (@scValue / 100) * @serviceCharge
  623. SET @scDiscount = (@scValue / 100) * @serviceCharge
  624. END
  625. ELSE IF @scAction = 'FD' -- Flat Discount
  626. BEGIN
  627. SET @scDiscount = @scValue
  628. END
  629. ELSE IF @scAction = 'FV' -- Fixed Value
  630. BEGIN
  631. SET @scOffer = @scValue
  632. SET @scDiscount = @serviceCharge - @scValue
  633. END
  634. SET @tAmt = @cAmt - @serviceCharge + @scDiscount + ISNULL(@discountedFee, 0)
  635. SET @pAmt = @tAmt * (@exRate + @exRateOffer)
  636. SET @pAmt = FLOOR(@pAmt)
  637. END
  638. ELSE
  639. BEGIN
  640. SET @tAmt = CEILING(@pAmt / (@exRate + @exRateOffer))
  641. IF ISNULL(@isManualSc, 'N') = 'N'
  642. BEGIN
  643. SELECT @serviceChargetmp = isnull(amount, 0)
  644. FROM [dbo].FNAGetServiceCharge(@sCountryId, @sSuperAgent, @sAgent, @sBranch, @pCountryId, @pSuperAgent, @pAgent, @pBranch, @deliveryMethodId, @tAmt, @collCurr)
  645. --IF (@discountedFee > '0.00')
  646. -- AND (@serviceCharge < @discountedFee)
  647. --BEGIN
  648. -- SELECT '8' ErrorCode
  649. -- ,'Redeem points can not be more than service charge' Msg
  650. -- ,NULL id
  651. -- RETURN;
  652. --END
  653. --ELSE
  654. --BEGIN
  655. -- SELECT @serviceCharge = ISNULL(@serviceChargetmp, 0) - ISNULL(@discountedFee, 0)
  656. --END
  657. END
  658. ELSE
  659. BEGIN
  660. SET @serviceCharge = ISNULL(@manualSc, 0)
  661. END
  662. IF @serviceCharge IS NULL
  663. BEGIN
  664. SELECT '4' ErrorCode
  665. ,'Service charge not defined yet for receiving country' Msg
  666. ,NULL id
  667. RETURN;
  668. END
  669. IF @scAction = 'PD'
  670. BEGIN
  671. SET @scOffer = (@scValue / 100) * @serviceCharge
  672. SET @scDiscount = (@scValue / 100) * @serviceCharge
  673. END
  674. ELSE IF @scAction = 'FD'
  675. BEGIN
  676. SET @scDiscount = @scValue
  677. END
  678. ELSE IF @scAction = 'FV'
  679. BEGIN
  680. SET @scOffer = @scValue
  681. SET @scDiscount = @serviceCharge - @scValue
  682. END
  683. SET @cAmt = (@tAmt + @serviceCharge - @scDiscount)-- - ISNULL(@discountedFee, 0)
  684. SET @cAmt = ROUND(@cAmt, @currDecimal)
  685. --New logic for calculating new tAmt and pAmt after adding discount fee
  686. SET @tAmt = @tAmt + ISNULL(@discountedFee, 0)
  687. SET @pAmt = @tAmt * (@exRate + @exRateOffer)
  688. SET @pAmt = FLOOR(@pAmt)
  689. END
  690. --4. Validate Country Sending Limit
  691. EXEC PROC_CHECKCOUNTRYLIMIT @flag = 's-limit'
  692. ,@cAmt = @cAmt
  693. ,@pAmt = @pAmt
  694. ,@sCountryId = @sCountryId
  695. ,@collMode = @collMode
  696. ,@deliveryMethod = @deliveryMethodId
  697. ,@sendingCustType = @sendingCustType
  698. ,@pCountryId = @pCountryId
  699. ,@pCurr = @pCurr
  700. ,@collCurr = @collCurr
  701. ,@pAgent = @pAgent
  702. ,@sAgent = @sAgent
  703. ,@sBranch = @sBranch
  704. ,@msg = @msg OUT
  705. ,@errorCode = @errorCode OUT
  706. IF @errorCode <> '0'
  707. BEGIN
  708. SELECT @errorCode ErrorCode
  709. ,@msg Msg
  710. RETURN;
  711. END
  712. --Validate Country Sending Limit END
  713. --5. Validate Country Receiving Limit
  714. EXEC PROC_CHECKCOUNTRYLIMIT @flag = 'r-limit'
  715. ,@cAmt = @cAmt
  716. ,@pAmt = @pAmt
  717. ,@sCountryId = @sCountryId
  718. ,@collMode = @collMode
  719. ,@deliveryMethod = @deliveryMethodId
  720. ,@sendingCustType = @sendingCustType
  721. ,@pCountryId = @pCountryId
  722. ,@pCurr = @pCurr
  723. ,@collCurr = @collCurr
  724. ,@pAgent = @pAgent
  725. ,@sAgent = @sAgent
  726. ,@sBranch = @sBranch
  727. ,@msg = @msg OUT
  728. ,@errorCode = @errorCode OUT
  729. IF @errorCode <> '0'
  730. BEGIN
  731. SELECT @errorCode ErrorCode
  732. ,@msg Msg
  733. RETURN;
  734. END
  735. --Validate Country Receiving Limit
  736. IF ISNULL(@ProcessFor, '') = 'send'
  737. BEGIN
  738. SET @FOREX_SESSION_ID = NEWID()
  739. ----## lock ex rate for individual txn
  740. UPDATE exRateCalcHistory
  741. SET isExpired = 1
  742. WHERE CUSTOMER_ID = @senderId
  743. AND isExpired = 0
  744. INSERT INTO exRateCalcHistory (
  745. CUSTOMER_ID
  746. ,[USER_ID]
  747. ,FOREX_SESSION_ID
  748. ,serviceCharge
  749. ,pAmt
  750. ,customerRate
  751. ,sCurrCostRate
  752. ,sCurrHoMargin
  753. ,sCurrAgentMargin
  754. ,pCurrCostRate
  755. ,pCurrHoMargin
  756. ,pCurrAgentMargin
  757. ,agentCrossSettRate
  758. ,createdDate
  759. ,isExpired
  760. ,tAmt
  761. ,schemeId
  762. ,discountedFee
  763. ,sharingValue
  764. )
  765. SELECT @senderId
  766. ,@user
  767. ,@FOREX_SESSION_ID
  768. ,@serviceCharge
  769. ,@pAmt
  770. ,@exRate
  771. ,1
  772. ,0
  773. ,0
  774. ,@pCurrHoMargin + @exRate
  775. ,@pCurrHoMargin
  776. ,0
  777. ,@exRate
  778. ,GETDATE()
  779. ,0
  780. ,@tAmt
  781. ,@schemeId
  782. ,ISNULL(@discountedFee, 0)
  783. ,@schemeCount
  784. END
  785. SET @msg = 'Success'
  786. SELECT @errorCode ErrorCode
  787. ,@msg Msg
  788. ,scCharge = @serviceCharge
  789. ,exRate = @exRate
  790. ,place = @place
  791. ,pCurr = @pCurr
  792. ,currDecimal = @currDecimal
  793. ,pAmt = @pAmt
  794. ,sAmt = @tAmt
  795. ,place = @place
  796. ,disc = 0.00
  797. ,collAmt = @cAmt
  798. ,exRateOffer = @exRateOffer
  799. ,scOffer = @scDiscount
  800. ,scAction = @scAction
  801. ,scValue = @scValue
  802. ,scDiscount = @scDiscount
  803. ,tpExRate = @tpExRate
  804. ,amountLimitPerDay = 0
  805. ,amountLimitPerTran = 0
  806. ,customerTotalSentAmt = 0
  807. ,exRateDisplay = @exRate
  808. ,EXRATEID = @FOREX_SESSION_ID
  809. ,maxAmountLimitPerTran = 0
  810. ,minAmountLimitPerTran = 0
  811. ,PerTxnMinimumAmt = 0
  812. ,schemeAppliedMsg = @schemeAppliedMsg
  813. ,schemeId = @schemeId
  814. ,tpPCurr = @pCurr
  815. ,collCurr = @collCurr
  816. ,ForexSessionId = @FOREX_SESSION_ID
  817. ,discountedFee = ISNULL(@discountedFee, 0)
  818. END
  819. END