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.

730 lines
28 KiB

1 year ago
  1. ALTER PROC [dbo].[proc_SendTransaction]
  2. @User VARCHAR(100) = NULL,
  3. @SenderId INT = NULL,
  4. @sIpAddress VARCHAR(20) = NULL,
  5. @ReceiverId INT = NULL,
  6. @rFirstName VARCHAR(50) = NULL,
  7. @rMiddleName VARCHAR(50) = NULL,
  8. @rLastName VARCHAR(50) = NULL,
  9. @rIdType VARCHAR(50) = NULL,
  10. @rIdNo VARCHAR(30) = NULL,
  11. @rIdIssue VARCHAR(10) = NULL,
  12. @rIdExpiry VARCHAR(10) = NULL,
  13. @rDob VARCHAR(10) = NULL,
  14. @rMobileNo VARCHAR(20) = NULL,
  15. @rNativeCountry VARCHAR(50) = NULL,
  16. @rStateId INT = NULL,
  17. @rDistrictId INT = NULL,
  18. @rAddress VARCHAR(100) = NULL,
  19. @rCity VARCHAR(50) = NULL,
  20. @rEmail VARCHAR(50) = NULL,
  21. @rAccountNo VARCHAR(50) = NULL,
  22. @sCountryId INT = NULL,
  23. @pCountryId INT = NULL,
  24. @deliveryMethodId INT = NULL,
  25. @pBankId BIGINT = NULL,
  26. @pBranchId BIGINT = NULL,
  27. @collCurr VARCHAR(3) = NULL,
  28. @payoutCurr VARCHAR(3) = NULL,
  29. @collAmt MONEY = NULL,
  30. @payoutAmt MONEY = NULL,
  31. @transferAmt MONEY = NULL,
  32. @exRate MONEY = NULL,
  33. @calBy CHAR(1) = NULL,
  34. @tpExRate DECIMAL(30,12) = NULL,
  35. @payOutPartnerId BIGINT = NULL,
  36. @forexSessionId VARCHAR(40) = NULL,
  37. @kftcLogId BIGINT = NULL,
  38. @paymentType VARCHAR(20) = NULL,
  39. @scDiscount MONEY = NULL,
  40. @PurposeOfRemittance VARCHAR(100) = NULL,
  41. @SourceOfFund VARCHAR(100) = NULL,
  42. @PurposeOfRemittanceOther VARCHAR(100) = NULL,
  43. @SourceOfFundOther VARCHAR(100) = NULL,
  44. @RelWithSender VARCHAR(200) = NULL,
  45. @SourceType CHAR(1) = NULL,
  46. @schemeId BIGINT = NULL,
  47. @processId VARCHAR(40) = NULL,
  48. @flag VARCHAR(100),
  49. @controlNo VARCHAR(20) = NULL,
  50. @PartnerPin VARCHAR(20) = NULL,
  51. @PartnerId VARCHAR(20) = NULL,
  52. @tranId BIGINT = NULL,
  53. @errorCode INT = NULL,
  54. @Message NVARCHAR(500) = NULL,
  55. @sAdd2 NVARCHAR(150) = NULL
  56. AS
  57. -----------------------------------------------------------
  58. -- For Broadcast notification , @flag = 'send'
  59. -----------------------------------------------------------
  60. SET NOCOUNT ON;
  61. SET XACT_ABORT ON;
  62. BEGIN TRY
  63. DECLARE @complianceRuleId INT
  64. ,@cAmtUSD MONEY
  65. ,@complienceMessage VARCHAR(1000) = NULL
  66. ,@shortMsg VARCHAR(100) = NULL
  67. ,@complienceErrorCode TINYINT = NULL
  68. ,@compErrorCode INT
  69. ,@discountType VARCHAR(2) = NULL
  70. ,@discountvalue MONEY = NULL
  71. ,@couponType VARCHAR(3) = NULL
  72. ,@discountPercent MONEY = NULL
  73. ,@couponName VARCHAR(20) = NULL
  74. ,@ServiceCharge_Temp MONEY = NULL
  75. ,@schemePremium MONEY = NULL
  76. ,@customerType INT = NULL
  77. ,@msg VARCHAR(MAX) = NULL
  78. IF EXISTS(SELECT * FROM STATICDATAVALUE(NOLOCK) WHERE VALUEID = @RelWithSender AND TYPEID = 2100)
  79. BEGIN
  80. SELECT @RelWithSender = detailTitle
  81. FROM STATICDATAVALUE(NOLOCK)
  82. WHERE VALUEID = @RelWithSender
  83. AND TYPEID = 2100
  84. END
  85. IF EXISTS(SELECT * FROM STATICDATAVALUE(NOLOCK) WHERE VALUEID = @PurposeOfRemittance AND TYPEID = 3800)
  86. BEGIN
  87. SELECT @PurposeOfRemittance = detailTitle
  88. FROM STATICDATAVALUE(NOLOCK)
  89. WHERE VALUEID = @PurposeOfRemittance
  90. AND TYPEID = 3800
  91. END
  92. IF EXISTS(SELECT * FROM STATICDATAVALUE(NOLOCK) WHERE VALUEID = @sourceOfFund AND TYPEID = 3900)
  93. BEGIN
  94. SELECT @sourceOfFund = detailTitle
  95. FROM STATICDATAVALUE(NOLOCK)
  96. WHERE VALUEID = @sourceOfFund
  97. AND TYPEID = 3900
  98. END
  99. IF EXISTS (SELECT * FROM API_BANK_LIST_MASTER(NOLOCK) WHERE MASTER_BANK_ID = @pBankId AND IS_ACTIVE = '1')
  100. BEGIN
  101. SELECT @pBankId = AB.BANK_ID
  102. FROM API_BANK_LIST AB(NOLOCK) INNER JOIN API_BANK_LIST_MASTER ABM(NOLOCK) ON AB.JME_BANK_CODE = ABM.JME_BANK_CODE
  103. WHERE MASTER_BANK_ID = @pBankId AND ABM.IS_ACTIVE = '1'
  104. END
  105. IF @flag = 'SEND'
  106. BEGIN
  107. IF NOT EXISTS (SELECT TOP 1 'X' FROM dbo.customerMaster(nolock) WHERE username = @user AND approvedDate IS NOT NULL)
  108. BEGIN
  109. EXEC proc_errorHandler 1,'You are not authorized to perform transaction :(', NULL;
  110. RETURN;
  111. END
  112. DECLARE @kycStatus INT
  113. SELECT @kycStatus = kycStatus
  114. FROM TBL_CUSTOMER_KYC (NOLOCK)
  115. WHERE CUSTOMERID = @senderId
  116. AND ISDELETED = 0
  117. --AND kycStatus=11044
  118. ORDER BY KYC_DATE
  119. IF ISNULL(@kycStatus, 0) <> 11044
  120. BEGIN
  121. IF @kycStatus IS NOT NULL
  122. SELECT @MSG = 'KYC for selected customer is not completed, it is in status:' + detailTitle FROM staticDataValue (NOLOCK) WHERE valueId = @kycStatus
  123. ELSE
  124. SELECT @MSG = 'Please complete KYC status first'
  125. EXEC proc_errorHandler 2,@MSG, 'A';
  126. RETURN
  127. END
  128. SELECT @pcountryId = cm.countryId
  129. FROM receiverInformation RI(NOLOCK)
  130. INNER JOIN countryMaster CM(NOLOCK) ON CM.countryName = RI.country
  131. WHERE RI.receiverId = @ReceiverId
  132. IF @paymentType IS NULL
  133. SET @paymentType = 'WALLET'
  134. DECLARE
  135. @sCurrCostRate FLOAT ,
  136. @sCurrHoMargin FLOAT ,
  137. @pCurrCostRate FLOAT ,
  138. @customerRate MONEY ,
  139. @agentCrossSettRate FLOAT,
  140. @iServiceCharge MONEY,
  141. @iTAmt MONEY,
  142. @iPAmt MONEY,
  143. @place INT ,
  144. @currDecimal INT,
  145. @agentAvlLimit MONEY,
  146. @serviceCharge MONEY,
  147. @sCountry VARCHAR(50) = 'Japan',
  148. @sAgent BIGINT,
  149. @sAgentName VARCHAR(100),
  150. @sBranch INT,
  151. @sBranchName VARCHAR(100),
  152. @sSuperAgent INT,
  153. @sSuperAgentName VARCHAR(100),
  154. @senderName VARCHAR(100),
  155. @sIdNo VARCHAR(50),
  156. @sIdType VARCHAR(50),
  157. @sMobile VARCHAR(15),
  158. @pAgent BIGINT,
  159. @pSuperAgent BIGINT,
  160. @pSuperAgentName VARCHAR(100),
  161. @pAgentName VARCHAR(100),
  162. @receiverName VARCHAR(100),
  163. @controlNoEncrypted VARCHAR(30),
  164. @tempCompId BIGINT,
  165. @pBranch INT,
  166. @pBranchName VARCHAR(100),
  167. @pCountry VARCHAR(100)
  168. SELECT @sCountryId = 113,@sBranch = 394395
  169. SELECT @SenderId = customerId FROM customerMaster (NOLOCK) WHERE USERNAME = @User
  170. SELECT @sAgent = sAgent,
  171. @sAgentName = sAgentName,
  172. @sBranch = sBranch,
  173. @sBranchName = sBranchName,
  174. @sSuperAgent = sSuperAgent,
  175. @sSuperAgentName = sSuperAgentName
  176. FROM dbo.FNAGetBranchFullDetails(@sBranch)
  177. SELECT @pCountry = COUNTRYNAME
  178. FROM COUNTRYMASTER (NOLOCK)
  179. WHERE COUNTRYID = @pCountryId
  180. DECLARE @isRealTime BIT = 0
  181. SELECT @payOutPartnerId = AGENTID, @isRealTime = isRealTime
  182. FROM TblPartnerwiseCountry(NOLOCK)
  183. WHERE CountryId = @pCountryId AND IsActive = 1
  184. AND ISNULL(PaymentMethod, @deliveryMethodId) = @deliveryMethodId
  185. IF @payOutPartnerId IS NULL
  186. BEGIN
  187. EXEC proc_errorHandler 3,'Oops, something went wrong.Please perform the transaction again' ,null
  188. RETURN;
  189. END
  190. SELECT TOP 1 @pAgent = AM.agentId
  191. --,@pCountryId = AM.agentCountryId
  192. FROM agentMaster AM(NOLOCK)
  193. WHERE AM.parentId = @payOutPartnerId AND agentType = 2903
  194. AND AM.isSettlingAgent = 'Y' AND AM.isApiPartner = 1
  195. SELECT
  196. @pSuperAgentName = sSuperAgentName,
  197. @pSuperAgent = sSuperAgent,
  198. @pAgent = sAgent,
  199. @pAgentName = sAgentName
  200. FROM dbo.FNAGetBranchFullDetails(@pAgent)
  201. SELECT @pBranch=@pAgent,@pBranchName=@pAgentName
  202. DECLARE @StateId INT, @DistrictId INT
  203. IF @receiverId IS NOT NULL
  204. BEGIN
  205. IF NOT EXISTS(SELECT '1' FROM dbo.receiverInformation(NOLOCK) WHERE receiverId=@ReceiverId)
  206. BEGIN
  207. EXEC proc_errorHandler 4,'Receiver Data Not Match !', NULL;
  208. RETURN;
  209. END
  210. SELECT TOP 1 @receiverName = ISNULL(firstName,'')+ISNULL(' '+middleName,'')+ISNULL(' '+lastName1,'') +ISNULL(' '+lastName2,'')
  211. , @StateId = AI.STATE_ID, @DistrictId = AC.CITY_ID
  212. FROM dbo.receiverInformation RI(NOLOCK)
  213. LEFT JOIN API_STATE_LIST AI(NOLOCK) ON AI.STATE_NAME = RI.state AND AI.API_PARTNER_ID = @payOutPartnerId
  214. LEFT JOIN API_CITY_LIST AC(NOLOCK) ON AC.STATE_ID = AI.STATE_ID AND AC.CITY_NAME = RI.DISTRICT
  215. WHERE receiverId = @receiverId
  216. END
  217. ELSE
  218. SET @receiverName = ISNULL(@rFirstName,'')+ISNULL(' '+@rMiddleName,'')+ISNULL(' '+@rLastName,'')
  219. IF @rFirstName IS NULL AND @receiverId IS NULL
  220. BEGIN
  221. EXEC proc_errorHandler 5,'Receiver name cannot be empty', NULL;
  222. RETURN;
  223. END
  224. IF ISNULL(@exRate,0) = 0
  225. BEGIN
  226. EXEC proc_errorHandler 6, 'Transaction cannot be proceed.Exchange Rate not defined', NULL
  227. RETURN
  228. END
  229. IF @pAgent IS NULL
  230. BEGIN
  231. EXEC proc_errorHandler 3,'Oops, something went wrong.Please perform the transaction again' ,null
  232. RETURN;
  233. END
  234. DECLARE @OccupationId INT, @sNaCountryId INT, @visaStatusId INT
  235. DECLARE @visaStatusText VARCHAR(200)
  236. SELECT TOP 1
  237. @agentAvlLimit = dbo.FNAGetCustomerAvailableBalance(@SenderId),
  238. @senderName = fullName,
  239. @sIdNo = idNumber,
  240. @sIdType = idType,
  241. @sMobile = mobile,
  242. @customerType = customerType,
  243. @OccupationId = OCCUPATION,
  244. @sNaCountryId = NATIVECOUNTRY,
  245. @visaStatusId = VISASTATUS,
  246. @visaStatusText = SV.detailTitle,
  247. @sAdd2 = ISNULL(additionalAddress,'')
  248. FROM customerMaster CM(NOLOCK)
  249. LEFT JOIN STATICDATAVALUE SV(NOLOCK) ON SV.valueId = CM.visaStatus
  250. WHERE username = @User AND customerId = @SenderId
  251. IF ISNULL(@paymentType,'') NOT IN ('wallet')
  252. BEGIN
  253. EXEC proc_errorHandler 7,'Invalid payment method.Please perform the transaction again!', NULL;
  254. RETURN;
  255. END
  256. IF @user in('demo.gme@gmeremit.com')
  257. BEGIN
  258. EXEC proc_errorHandler 8,'You can not send money through test GME acocunt :(', NULL;
  259. RETURN;
  260. END
  261. IF ISNULL(@collAmt, 0) = 0
  262. BEGIN
  263. EXEC proc_errorHandler 9, 'Collection Amount is missing. Cannot send transaction',NULL;
  264. RETURN;
  265. END;
  266. SET @controlNo = '21' + LEFT(CAST(ABS(CHECKSUM(NEWID())) AS VARCHAR(10)) + '0000000000', 7)
  267. SELECT @controlNoEncrypted = dbo.FNAEncryptString(@controlNo);
  268. IF EXISTS (SELECT TOP 1 'X' FROM pinQueueList WITH(NOLOCK) WHERE icn = @controlNoEncrypted)
  269. BEGIN
  270. SET @controlNo = '21' + LEFT(CAST(ABS(CHECKSUM(NEWID())) AS VARCHAR(10)) + '0000000000', 7)
  271. SELECT @controlNoEncrypted = dbo.FNAEncryptString(@controlNo);
  272. IF EXISTS(SELECT TOP 1 'X' FROM pinQueueList WITH(NOLOCK) WHERE icn = @controlNoEncrypted)
  273. BEGIN
  274. EXEC proc_errorHandler 10, 'Technical error occurred. Please try again',NULL;
  275. RETURN;
  276. END
  277. END;
  278. IF @deliveryMethodId = 2 AND @pCountryId<>'151'
  279. BEGIN
  280. IF NOT EXISTS(SELECT TOP 1 'A' FROM api_bank_list(nolock) where BANK_ID = @pBankId and PAYMENT_TYPE_ID in(0,2) and IS_ACTIVE = 1)
  281. BEGIN
  282. EXEC proc_errorHandler 11, 'Invalid bank selected', NULL
  283. return
  284. END
  285. IF @raccountNo IS NULL
  286. BEGIN
  287. EXEC proc_errorHandler 12, 'Account number cannot be blank', NULL
  288. RETURN
  289. END
  290. END;
  291. DECLARE @pAgentCommCurrency VARCHAR(3),@pAgentComm MONEY
  292. SELECT @pAgentCommCurrency = DBO.FNAGetPayCommCurrency(@sSuperAgent,@sAgent,@sBranch,@SCOUNTRYID,@pSuperAgent,@pBranch,@pCountryId)
  293. SELECT @pAgentComm = amount FROM dbo.FNAGetPayComm(@sAgent,@sCountryId,
  294. NULL, null, @pCountryId, null, @pAgent, @pAgentCommCurrency
  295. ,@deliveryMethodId, @collAmt, @payoutAmt, @serviceCharge, @transferAmt, NULL)
  296. --4. Get Exchange Rate Details------------------------------------------------------------------------------------------------------------------
  297. DECLARE @pCurrHoMargin FLOAT
  298. SELECT
  299. @customerRate = customerRate
  300. ,@sCurrCostRate = sCurrCostRate
  301. ,@sCurrHoMargin = sCurrHoMargin
  302. ,@pCurrCostRate = pCurrCostRate
  303. ,@agentCrossSettRate = agentCrossSettRate
  304. ,@serviceCharge = serviceCharge
  305. ,@iPAmt = pAmt
  306. ,@schemeId = schemeId
  307. ,@pCurrHoMargin = pCurrHoMargin
  308. FROM exRateCalcHistory(NOLOCK)
  309. WHERE FOREX_SESSION_ID = @forexSessionId AND [USER_ID] = @user
  310. IF @customerRate IS NULL
  311. BEGIN
  312. EXEC proc_errorHandler 6, 'Transaction cannot be proceed. Exchange Rate not defined', NULL
  313. RETURN
  314. END
  315. --Get Service Charge----------------------------------------------------------------------------------------------------------------------
  316. SELECT @iServiceCharge = ISNULL(amount, -1)
  317. FROM [dbo].FNAGetServiceCharge(
  318. @sCountryId, @sSuperAgent, @sAgent, @sBranch,
  319. @pCountryId, @pSuperAgent, @pAgent, @pBranch,
  320. @deliveryMethodId, @collAmt, @collCurr
  321. )
  322. IF @iServiceCharge = -1
  323. BEGIN
  324. EXEC proc_errorHandler 13, 'Transaction cannot be proceed. Service Charge is not defined', NULL
  325. RETURN
  326. END
  327. IF ISNULL(@iServiceCharge,0) <> ISNULL(@serviceCharge,1)
  328. BEGIN
  329. EXEC proc_errorHandler 14, 'Transaction cannot be proceed. Amount detail not match', NULL
  330. RETURN
  331. END
  332. --End Service Charge-------------------------------------------------------------------------------------------------------------------------------------
  333. --DECLARE @iMsg VARCHAR(MAX)
  334. IF ISNULL(@exRate,0) <> ISNULL(@customerRate,1)
  335. BEGIN
  336. --SET @iMsg = 'Amount detail not match. Please re-calculate the amount again' + CAST(isnull(@exRate,0) AS VARCHAR) + ' : ' + CAST(isnull(@customerRate,1) AS VARCHAR)
  337. EXEC proc_errorHandler 15, 'Amount detail not match. Please re-calculate the amount again', NULL
  338. RETURN
  339. END
  340. SELECT @iTAmt = @collAmt - @iServiceCharge
  341. SELECT TOP 1 @place = place ,@currDecimal = currDecimal
  342. FROM currencyPayoutRound(NOLOCK)
  343. WHERE ISNULL(isDeleted, 'N') = 'N'
  344. AND currency = @payoutCurr AND tranType IS NULL;
  345. SET @currDecimal = ISNULL(@currDecimal, 0)
  346. SET @place = ISNULL(@place, 0)
  347. SET @iPAmt = @iTAmt * @CustomerRate
  348. IF @payoutAmt - @iPAmt <= 1
  349. SET @iPAmt = @payoutAmt
  350. ----## WHILE CALCULATING FROM PAYOUT AMOUNT CONSIDARING 10 VND
  351. IF ISNULL(@iPAmt,0) <> ISNULL(@payoutAmt,1)
  352. BEGIN
  353. --SET @Msg = 'Amount detail not match. Please re-calculate the amount again.' + CAST(@iPAmt AS VARCHAR) + ' - ' + CAST(@payoutAmt AS VARCHAR)
  354. EXEC proc_errorHandler 15, 'Amount detail not match. Please re-calculate the amount again.', NULL
  355. RETURN
  356. END
  357. ----OFAC Checking
  358. DECLARE @receiverOfacRes VARCHAR(MAX), @ofacRes VARCHAR(MAX), @ofacReason VARCHAR(200)
  359. EXEC proc_ofacTracker @flag = 't', @name = @senderName, @Result = @ofacRes OUTPUT
  360. EXEC proc_ofacTracker @flag = 't', @name = @receiverName, @Result = @receiverOfacRes OUTPUT
  361. DECLARE @result VARCHAR(MAX)
  362. IF ISNULL(@ofacRes, '') <> ''
  363. BEGIN
  364. SET @ofacReason = 'Matched by sender name'
  365. END
  366. IF ISNULL(@receiverOfacRes, '') <> ''
  367. BEGIN
  368. SET @ofacRes = ISNULL(@ofacRes + ',' + @receiverOfacRes, '' + @receiverOfacRes)
  369. SET @ofacReason = 'Matched by receiver name'
  370. END
  371. IF ISNULL(@ofacRes, '') <> '' AND ISNULL(@receiverOfacRes, '') <> ''
  372. BEGIN
  373. SET @ofacReason = 'Matched by both sender name and receiver name'
  374. END
  375. --Ofac Checking End
  376. DECLARE @agentRefId VARCHAR(50) = NEWID()
  377. ----Compliance Checking 1-> Block, 2-> Hold, 3-> Questionnaire
  378. CREATE TABLE #TBL_COMPLIANCE_RESULT (ERROR_CODE INT, MSG VARCHAR(500), RULE_ID INT, SHORT_MSG VARCHAR(100), [TYPE] VARCHAR(10)
  379. , IS_D0C_REQUIRED BIT
  380. )
  381. INSERT INTO #TBL_COMPLIANCE_RESULT (ERROR_CODE, MSG, RULE_ID, SHORT_MSG, [TYPE], IS_D0C_REQUIRED)
  382. EXEC [PROC_COMPLIANCE_CHECKING_NEW] @flag = 'core'
  383. ,@user = @user
  384. ,@sIdType = @sIdType
  385. ,@sIdNo = @sIdNo
  386. ,@receiverName = @receiverName
  387. ,@amount = @iTAmt
  388. ,@customerId = @senderId
  389. ,@pCountryId = @pCountryId
  390. ,@deliveryMethod = @deliveryMethodId
  391. ,@professionId = @OccupationId
  392. ,@receiverMobile = @rMobileNo
  393. ,@accountNo = @raccountNo
  394. ,@receiverId = @receiverId
  395. ,@sNaCountryId = @sNaCountryId
  396. ,@visaStatus = @visaStatusId
  397. IF EXISTS(SELECT * FROM #TBL_COMPLIANCE_RESULT WHERE ERROR_CODE <> 0)
  398. BEGIN
  399. IF EXISTS (SELECT * FROM #TBL_COMPLIANCE_RESULT WHERE ERROR_CODE IN (1)) --transaction blocked
  400. BEGIN
  401. INSERT INTO ComplianceLog (senderName,senderCountry,senderIdType,senderIdNumber,senderMobile,receiverName,receiverCountry
  402. ,payOutAmt,complianceId,complianceReason,complainceDetailMessage,createdBy,createdDate,agentRefId,isDocumentRequired
  403. )
  404. SELECT @senderName,@sCountry,@sIdType,@sIdNo,@sMobile,@receiverName,@pCountry,@collAmt,RULE_ID,SHORT_MSG,MSG,@user,GETDATE()
  405. ,@agentRefId,IS_D0C_REQUIRED
  406. FROM #TBL_COMPLIANCE_RESULT
  407. SELECT @MSG = MSG FROM #TBL_COMPLIANCE_RESULT WHERE ERROR_CODE IN (1)
  408. EXEC proc_errorHandler 1, @MSG, NULL
  409. END
  410. IF EXISTS (SELECT * FROM #TBL_COMPLIANCE_RESULT WHERE ERROR_CODE IN (2, 3)) --transaction hold/questionnaire
  411. BEGIN
  412. DELETE FROM remitTranComplianceTemp WHERE agentRefId = @agentRefId
  413. INSERT remitTranComplianceTemp (csDetailTranId, matchTranId, agentRefId)
  414. SELECT RULE_ID, NULL, @agentRefId FROM #TBL_COMPLIANCE_RESULT
  415. WHERE ERROR_CODE IN (2, 3)
  416. ORDER BY ISNULL(IS_D0C_REQUIRED, 0) DESC
  417. END
  418. INSERT INTO ComplianceLog (senderName,senderCountry,senderIdType,senderIdNumber,senderMobile,receiverName,receiverCountry
  419. ,payOutAmt,complianceId,complianceReason,complainceDetailMessage,createdBy,createdDate,agentRefId,isDocumentRequired
  420. )
  421. SELECT @senderName,@sCountry,@sIdType,@sIdNo,@sMobile,@receiverName,@pCountry,@collAmt,RULE_ID,SHORT_MSG,MSG,@user,GETDATE()
  422. ,@agentRefId,IS_D0C_REQUIRED
  423. FROM #TBL_COMPLIANCE_RESULT
  424. END
  425. --checking for visa status questionnaire
  426. IF EXISTS (
  427. SELECT *
  428. FROM VW_VISA_STATUS_QUESTIONNAIRE
  429. WHERE VISA_ID = 11387
  430. )
  431. BEGIN
  432. INSERT INTO ComplianceLog (senderName,senderCountry,senderIdType,senderIdNumber,senderMobile,receiverName,receiverCountry
  433. ,payOutAmt,complianceId,complianceReason,complainceDetailMessage,createdBy,createdDate,agentRefId,isDocumentRequired
  434. )
  435. SELECT @senderName,@sCountry,@sIdType,@sIdNo,@sMobile,@receiverName,@pCountry,@collAmt,0
  436. ,'Compliance Hold/Questionnaire due to Visa Status: ' + @visaStatusText
  437. ,'Compliance Hold/Questionnaire due to Visa Status: ' + @visaStatusText,@user,GETDATE()
  438. ,@agentRefId,0
  439. INSERT remitTranComplianceTemp (
  440. csDetailTranId
  441. ,matchTranId
  442. ,agentRefId
  443. ,reason
  444. )
  445. SELECT 0
  446. ,NULL
  447. ,@agentRefId
  448. ,'Questionnaire require due to Visa Status'
  449. END
  450. --**********Customer Per Day Limit Checking**********
  451. DECLARE @remitTranTemp TABLE (
  452. tranId BIGINT,controlNo VARCHAR(20),cAmt MONEY,receiverName VARCHAR(200) ,
  453. receiverIdType VARCHAR(100),receiverIdNumber VARCHAR(50),dot DATETIME
  454. );
  455. INSERT INTO @remitTranTemp( tranId ,controlNo ,cAmt ,receiverName ,receiverIdType ,receiverIdNumber ,dot )
  456. SELECT TOP 10 rt.id ,rt.controlNo ,rt.cAmt ,rt.receiverName ,rec.idType ,rec.idNumber ,rt.createdDate
  457. FROM vwRemitTran rt WITH(NOLOCK)
  458. INNER JOIN vwTranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
  459. INNER JOIN vwTranReceivers rec WITH(NOLOCK) ON rt.id = rec.tranId
  460. WHERE sen.customerId = @SenderId
  461. AND ( rt.approvedDate BETWEEN CONVERT(VARCHAR,GETDATE(),101) AND CONVERT(VARCHAR,GETDATE(),101)+ ' 23:59:59'
  462. OR ( approvedBy IS NULL AND cancelApprovedBy IS NULL )
  463. )
  464. ORDER BY rt.createdDate DESC
  465. IF EXISTS ( SELECT TOP 1 'X' FROM @remitTranTemp
  466. WHERE cAmt = @collAmt
  467. AND ( receiverName = @receiverName ) AND DATEDIFF(MI, dot, GETDATE()) <= 2
  468. )
  469. BEGIN
  470. EXEC proc_errorHandler 16, 'Similar transaction found. Please perform the transaction after 2 minutes.', NULL;
  471. RETURN;
  472. END;
  473. DECLARE @countryRisk INT,@OccupationRisk INT,@compFinalRes VARCHAR(5)
  474. -- #########country and occupation risk point
  475. DECLARE @deliveryMethod VARCHAR(30),@pBankName VARCHAR(100),@pBankBranchName VARCHAR(100),@pBankRowId bigint
  476. SELECT TOP 1 @pCountry = COUNTRYNAME FROM countryMaster(NOLOCK) WHERE countryId = @pCountryId
  477. SELECT TOP 1 @deliveryMethod = typeTitle FROM serviceTypeMaster(NOLOCK) WHERE serviceTypeId = @deliveryMethodId
  478. SELECT TOP 1 @pBankName = bank_name,@pBankRowId = bank_id
  479. FROM api_bank_list
  480. WHERE bank_id = @pBankId
  481. AND is_Active = 1
  482. SELECT top 1 @pBankBranchName = branch_name from api_bank_branch_list
  483. WHERE bank_id = @pBankRowId
  484. AND branch_id = @pBranchId
  485. AND is_Active = 1
  486. DECLARE @VNo VARCHAR(20);
  487. IF @pCountry = 'Nepal' AND @deliveryMethod = 'CASH PAYMENT'
  488. BEGIN
  489. SELECT @pSuperAgent = NULL, @pSuperAgentName = NULL, @pAgent = NULL, @pAgentName = NULL
  490. SELECT @pBankName = '[ANY WHERE]'
  491. END
  492. DECLARE @PayerId INT = NULL
  493. --GET PAYER DETAILS IN CASE OF TF
  494. IF @payOutPartnerId = 394130 AND @deliveryMethod = 'BANK DEPOSIT'
  495. BEGIN
  496. SELECT @PayerId = PayerId
  497. FROM BankPayerSetup(NOLOCK)
  498. WHERE BankId = @pBankId
  499. AND IsDefault = 1
  500. IF @PayerId IS NULL
  501. BEGIN
  502. EXEC proc_errorHandler 17, 'No default payer mapped for current bank, please contact HQ.', NULL;
  503. RETURN;
  504. END
  505. END
  506. BEGIN TRANSACTION;
  507. INSERT INTO remitTranTemp
  508. (
  509. controlNo ,sCurrCostRate ,sCurrHoMargin ,pCurrCostRate, pCurrHoMargin ,agentCrossSettRate ,customerRate ,
  510. serviceCharge ,handlingFee ,pAgentComm ,pAgentCommCurrency ,
  511. promotionCode ,sSuperAgent ,sSuperAgentName ,sAgent ,sAgentName ,sBranch ,sBranchName ,sCountry ,
  512. pSuperAgent ,pSuperAgentName ,pAgent ,pAgentName ,pCountry ,paymentMethod ,pBank ,pBankName ,pBankBranch ,pBankBranchName ,accountNo ,
  513. collCurr ,tAmt ,cAmt ,pAmt ,payoutCurr ,relWithSender ,purposeOfRemit ,sourceOfFund ,tranStatus ,payStatus ,createdDate ,
  514. createdDateLocal ,createdBy ,tranType ,senderName ,receiverName ,isOnlineTxn ,schemeId,pState,pDistrict,
  515. sRouteId,schemePremium,collMode,PAYERID
  516. )
  517. SELECT TOP 1
  518. @controlNoEncrypted ,@sCurrCostRate ,@sCurrHoMargin ,@pCurrCostRate, @pCurrHoMargin ,@agentCrossSettRate ,@customerRate,
  519. @serviceCharge ,ISNULL(@scDiscount, 0) ,@pAgentComm ,@pAgentCommCurrency ,
  520. null, @sSuperAgent , @sSuperAgentName ,@sAgent ,@sAgentName ,@sBranch ,@sBranchName ,@sCountry ,
  521. @pSuperAgent ,@pSuperAgentName , @pAgent , @pAgentName ,@pCountry ,@deliveryMethod ,@pBankId , @pBankName ,@pBranchId ,@pBankBranchName ,@raccountNo ,
  522. @collCurr ,@iTAmt , @collAmt ,@payoutAmt , @payoutCurr , @RelWithSender , ISNULL(@PurposeOfRemittance, @PurposeOfRemittanceOther) ,ISNULL(@sourceOfFund, @SourceOfFundOther) ,'Hold' ,'Unpaid' ,GETDATE() ,
  523. GETUTCDATE() , @user ,'M' , @senderName , @receiverName, 'Y' ,@schemeId,@StateId,@DistrictId,
  524. 0,ISNULL(@schemePremium, 0),'Bank Deposit',@PayerId
  525. SET @tranId = SCOPE_IDENTITY();
  526. INSERT INTO tranSendersTemp
  527. ( tranId , customerId ,membershipId ,firstName , middleName ,lastName1 ,lastName2 ,
  528. fullName ,country ,[address], state, district ,address2 ,zipCode ,city ,email ,homePhone ,
  529. workPhone ,mobile ,nativeCountry ,dob ,placeOfIssue ,idType ,idNumber ,idPlaceOfIssue ,
  530. issuedDate ,validDate ,occupation ,countryRiskPoint ,customerRiskPoint ,ipAddress
  531. )
  532. SELECT TOP 1
  533. @tranId ,@senderId ,membershipId ,firstName ,middleName ,lastName1 ,lastName2 ,
  534. @senderName ,sc.countryName ,ISNULL(city, '')+ISNULL(', '+streetUnicode, ''), state, streetUnicode ,@sAdd2 ,zipCode ,city ,email ,homePhone ,
  535. workPhone ,LEFT(mobile, 15) ,nativeCountry = nc.countryName ,dob ,c.placeOfIssue ,sdv.detailTitle ,c.idNumber ,c.placeOfIssue ,
  536. c.idIssueDate ,c.idExpiryDate ,c.occupation ,@countryRisk ,( @countryRisk + @OccupationRisk ) ,@sIpAddress
  537. FROM (SELECT TOP 1 * FROM dbo.customerMaster c WITH ( NOLOCK ) WHERE c.customerId = @senderId) C
  538. LEFT JOIN countryMaster sc WITH ( NOLOCK ) ON c.country = sc.countryId
  539. LEFT JOIN countryMaster nc WITH ( NOLOCK ) ON c.nativeCountry = nc.countryId
  540. LEFT JOIN staticDataValue sdv WITH ( NOLOCK ) ON c.idType = sdv.valueId
  541. IF @ReceiverId IS NULL
  542. BEGIN
  543. IF NOT EXISTS ( SELECT TOP 1 'X'
  544. FROM receiverInformation(nolock)
  545. WHERE fullName = @receiverName AND customerId = @senderId )
  546. BEGIN
  547. INSERT INTO receiverInformation
  548. ( customerId ,firstName,middleName,lastName1 ,country ,address ,city ,email
  549. ,homePhone ,mobile ,relationship,state,district,fullName,nativeCountry)
  550. SELECT @senderId ,@rFirstName,@rMiddleName,@rLastName,@pCountry,@rAddress,@rCity,@rEmail
  551. ,@rMobileNo,@rMobileNo,@RelWithSender,@rStateId,@rDistrictId,@receiverName,@rNativeCountry
  552. SET @ReceiverId = SCOPE_IDENTITY()
  553. END;
  554. --ELSE
  555. -- BEGIN
  556. -- SELECT TOP 1 @ReceiverId = receiverId
  557. -- FROM receiverInformation(nolock)
  558. -- WHERE fullName = @receiverName AND customerId = @senderId;
  559. --END;
  560. END;
  561. INSERT INTO tranReceiversTemp( tranId ,customerId ,firstName ,middleName ,lastName1 ,lastName2 ,fullName ,
  562. country ,[address] ,[state] ,district ,zipCode ,city ,email ,homePhone ,workPhone ,mobile ,nativeCountry ,dob ,
  563. placeOfIssue ,idType ,idNumber ,idPlaceOfIssue ,issuedDate ,relationType,validDate ,gender
  564. )
  565. SELECT TOP 1 @tranId,@ReceiverId,firstName,middleName ,lastName1 ,lastName2 ,@receiverName ,
  566. @pCountry ,[address] ,[state] ,district ,zipCode ,city ,email ,homePhone ,workPhone ,mobile ,country ,@rDob ,
  567. null ,ISNULL(@rIdType,idType) ,ISNULL(@rIdNo,idNumber) ,null ,@rIdIssue ,@RelWithSender,@rIdExpiry ,null
  568. FROM receiverInformation(NOLOCK) WHERE receiverId = @ReceiverId
  569. ----IF @paymentType = 'WALLET'
  570. --EXEC proc_UpdateCustomerBalance @controlNo = @controlNoEncrypted, @type = 'DEDUCT'
  571. ----## map locked ex rate with transaction for history
  572. UPDATE exRateCalcHistory set controlNo = @controlNoEncrypted,AGENT_TXN_REF_ID = @tranId,isExpired = 1 where FOREX_SESSION_ID = @forexSessionId
  573. --------------------------#########------------OFAC/COMPLIANCE INSERT (IF EXISTS)---------------########----------------------
  574. IF EXISTS(SELECT TOP 1 'X' FROM remitTranComplianceTemp WITH(NOLOCK) WHERE agentRefId = @agentRefId)
  575. BEGIN
  576. INSERT INTO remitTranCompliance(TranId, csDetailTranId, matchTranId, reason)
  577. SELECT @tranId, csDetailTranId, matchTranId, reason
  578. FROM remitTranComplianceTemp WITH(NOLOCK)
  579. WHERE agentRefId = @agentRefId
  580. SET @compFinalRes = 'C'
  581. END
  582. UPDATE ComplianceLog SET TRANID = @tranId WHERE agentRefId = @agentRefId
  583. IF(ISNULL(@compFinalRes, '') <> '' OR ISNULL(@ofacRes, '') <> '' OR ISNULL(@receiverOfacRes, '') <> '')
  584. BEGIN
  585. IF((ISNULL(@ofacRes, '') <> '' OR ISNULL(@receiverOfacRes, '') <> '') AND ISNULL(@compFinalRes, '') = '')
  586. BEGIN
  587. IF ISNULL(@ofacRes, '') <> ''
  588. INSERT remitTranOfac(TranId, blackListId, reason, flag)
  589. SELECT @tranId, @ofacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@ofacRes)
  590. IF ISNULL(@receiverOfacRes, '') <> ''
  591. INSERT remitTranOfac(TranId, blackListId, reason, flag)
  592. SELECT @tranId, @receiverOfacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@receiverOfacRes)
  593. UPDATE remitTranTemp SET
  594. tranStatus = 'OFAC Hold'
  595. WHERE id = @tranId
  596. END
  597. ELSE IF(@compFinalRes <> '' AND (ISNULL(@ofacRes, '') = '' OR ISNULL(@receiverOfacRes, '') = ''))
  598. BEGIN
  599. UPDATE remitTranTemp SET
  600. tranStatus = 'Compliance Hold'
  601. WHERE id = @tranId
  602. END
  603. ELSE IF(ISNULL(@compFinalRes, '') <> '' AND (ISNULL(@ofacRes, '') <> '' OR ISNULL(@receiverOfacRes, '') <> ''))
  604. BEGIN
  605. IF ISNULL(@ofacRes, '') <> ''
  606. INSERT remitTranOfac(TranId, blackListId, reason, flag)
  607. SELECT @tranId, @ofacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@ofacRes)
  608. IF ISNULL(@receiverOfacRes, '') <> ''
  609. INSERT remitTranOfac(TranId, blackListId, reason, flag)
  610. SELECT @tranId, @receiverOfacRes, @ofacReason, dbo.FNAGetOFAC_Flag(@receiverOfacRes)
  611. UPDATE remitTranTemp SET
  612. tranStatus = 'OFAC/Compliance Hold'
  613. WHERE id = @tranId
  614. END
  615. END
  616. --Compliance checking done
  617. IF @@TRANCOUNT > 0
  618. COMMIT TRANSACTION;
  619. SElect 0 errorCode, 'Transaction has been sent successfully' msg, @tranId id,@controlNo extra, ISNULL(@isRealTime, 0) extra2
  620. RETURN
  621. DECLARE @CustomerId BIGINT , @availableBalance MONEY
  622. SELECT @customerId = (SELECT TST.customerId FROM remitTrantemp RTT WITH(NOLOCK) INNER JOIN dbo.tranSendersTemp TST(NOLOCK) ON TST.TRANID = RTT.ID WHERE controlNo = @controlNo)
  623. -- For BroadCast Notification
  624. EXEC ProcBroadCastMobile @Flag='TRANSACTION_SUCCESS', @RowId=@customerId, @ControlNo=@controlNo, @CustomerId= @customerId
  625. END
  626. END TRY
  627. BEGIN CATCH
  628. IF @@TRANCOUNT <> 0
  629. ROLLBACK TRANSACTION;
  630. DECLARE @errorMessage VARCHAR(MAX);
  631. SET @errorMessage = ERROR_MESSAGE();
  632. EXEC proc_errorHandler 1, @errorMessage, @user;
  633. END CATCH