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.

330 lines
26 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[ws_proc_PayTXNConfirm] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE PROC [dbo].[ws_proc_PayTXNConfirm] (
  9. @ACCESSCODE VARCHAR(50)
  10. ,@USERNAME VARCHAR(50)
  11. ,@PASSWORD VARCHAR(50)
  12. ,@REFNO VARCHAR(20)
  13. ,@AGENT_SESSION_ID VARCHAR(150)
  14. ,@PAY_TOKEN_ID BIGINT = NULL
  15. ,@RECEIVER_ID_TYPE VARCHAR(20) = NULL
  16. ,@RECEIVER_ID_NO VARCHAR(20) = NULL
  17. ,@RECEIVER_ID_ISSUE_PLACE VARCHAR(20) = NULL
  18. ,@RECEIVER_ID_ISSUE_DATE VARCHAR(20) = NULL
  19. ,@RECEIVER_DOB VARCHAR(20) = NULL
  20. ,@REMARKS VARCHAR(20) = ''
  21. ,@RECEIVER_OCCUPATION VARCHAR(20) = NULL
  22. )
  23. AS
  24. SET NOCOUNT ON;
  25. SET XACT_ABORT ON;
  26. BEGIN TRY
  27. DECLARE @apiRequestId BIGINT
  28. INSERT INTO apiRequestLogPay(
  29. ACCESSCODE
  30. ,USERNAME
  31. ,PASSWORD
  32. ,REFNO
  33. ,AGENT_SESSION_ID
  34. ,PAY_TOKEN_ID
  35. ,requestedDate
  36. )
  37. SELECT
  38. @ACCESSCODE
  39. ,@USERNAME
  40. ,@PASSWORD
  41. ,@REFNO
  42. ,@AGENT_SESSION_ID
  43. ,@PAY_TOKEN_ID
  44. ,GETDATE()
  45. SET @apiRequestId = SCOPE_IDENTITY()
  46. DECLARE @errCode INT, @controlNoEnc VARCHAR(50) = dbo.FNAENcryptString(@REFNO)
  47. DECLARE @autMsg VARCHAR(500), @errorCode VARCHAR(10), @errorMsg VARCHAR(MAX)
  48. EXEC ws_proc_checkAuthntication @USERNAME, @PASSWORD, @ACCESSCODE, @errCode OUT, @autMsg OUT
  49. IF @errCode = '1'
  50. BEGIN
  51. SELECT @errorCode = '1002', @errorMsg = ISNULL(@autMsg,'Authentication Fail')
  52. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  53. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  54. RETURN
  55. END
  56. IF EXISTS(SELECT 'X' FROM applicationUsers WITH (NOLOCK) WHERE userName = @USERNAME AND forceChangePwd = 'Y')
  57. BEGIN
  58. SELECT @errorCode = '1002', @errorMsg = 'You are required to change your password'
  59. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  60. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  61. RETURN
  62. END
  63. ------------------VALIDATION-------------------------------
  64. IF @AGENT_SESSION_ID IS NULL
  65. BEGIN
  66. SELECT '1001' CODE,'AGENT SESSION ID Field is Required' MESSAGE
  67. ,@AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  68. RETURN
  69. END
  70. IF @REFNO IS NULL
  71. BEGIN
  72. SELECT @errorCode = '1001', @errorMsg = 'REFNO Field is Required'
  73. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  74. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  75. RETURN
  76. END
  77. IF ISNUMERIC(@REFNO) = 0 AND @REFNO IS NOT NULL
  78. BEGIN
  79. SELECT @errorCode = '2003', @errorMsg = 'Technical Error: REFNO must be numeric'
  80. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  81. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, REFNO = @REFNO
  82. RETURN
  83. END
  84. IF @PAY_TOKEN_ID IS NULL
  85. BEGIN
  86. SELECT @errorCode = '1001', @errorMsg = 'PAY TOKEN ID Field is Required'
  87. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  88. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  89. RETURN;
  90. END
  91. IF @RECEIVER_ID_TYPE IS NULL
  92. BEGIN
  93. SELECT @errorCode = '1005', @errorMsg = 'RECEIVER ID Field is Required'
  94. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  95. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  96. RETURN
  97. END
  98. IF @RECEIVER_ID_NO IS NULL
  99. BEGIN
  100. SELECT @errorCode = '1005', @errorMsg = 'RECEIVER ID NUMBER Field is Required'
  101. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  102. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  103. RETURN
  104. END
  105. IF @RECEIVER_DOB IS NOT NULL AND ISDATE(@RECEIVER_DOB) = 0
  106. BEGIN
  107. SELECT @errorCode = '1005', @errorMsg = 'RECEIVER DOB Field is not a valid date'
  108. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  109. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  110. RETURN
  111. END
  112. DECLARE
  113. @pAgent INT,
  114. @pAgentName VARCHAR(200),
  115. @pSuperAgent INT,
  116. @pSuperAgentName VARCHAR(100),
  117. @tranId BIGINT,
  118. @tranStatus VARCHAR(30),
  119. @tokenId VARCHAR(40),
  120. @paymentMethod VARCHAR(100),
  121. @lock_status VARCHAR(50),
  122. @lock_by VARCHAR(50),
  123. @status VARCHAR(50),
  124. @pAgentComm MONEY
  125. -- PICK AGENTID ,COUNTRY FROM USER
  126. SELECT @pAgent = agentId FROM applicationUsers WITH(NOLOCK)
  127. WHERE userName = @USERNAME
  128. AND ISNULL(isDeleted, 'N') = 'N' AND isActive = 'Y'
  129. SELECT @pAgentName = sAgentName,@pSuperAgent = sSuperAgent,@pSuperAgentName = sSuperAgentName FROM dbo.FNAGetBranchFullDetails(@pAgent)
  130. SELECT
  131. @tranId = rt.id
  132. ,@tranStatus = rt.tranStatus
  133. ,@tokenId = rt.payTokenId
  134. ,@paymentMethod = rt.paymentMethod
  135. ,@lock_status = rt.lockStatus
  136. ,@lock_by = rt.lockedBy
  137. ,@status = rt.payStatus
  138. ,@pAgentComm = rt.pAgentComm
  139. FROM RemitTran rt WITH(NOLOCK)
  140. INNER JOIN TranSenders sen WITH(NOLOCK) ON rt.id = sen.tranId
  141. INNER JOIN TranReceivers rec WITH(NOLOCK) ON rt.id = rec.tranId
  142. WHERE controlNo = @controlNoEnc AND pAgent = @pAgent
  143. AND tranStatus = 'Payment' AND payStatus = 'Unpaid'
  144. AND paymentMethod = 'Cash Payment' AND lockStatus = 'locked'
  145. IF @tranStatus IS NULL
  146. BEGIN
  147. SELECT @errorCode = '2003', @errorMsg = 'Transaction does not exist. Please check your GME No(GME NUMBER).'
  148. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  149. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  150. RETURN
  151. END
  152. IF (@lock_by <> @USERNAME)
  153. BEGIN
  154. SELECT @errorCode = '2003', @errorMsg = 'You are not authorized to pay: ' + @REFNO + ''
  155. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  156. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  157. RETURN
  158. END
  159. IF (@status = 'Paid')
  160. BEGIN
  161. SELECT @errorCode = '2001', @errorMsg = 'Transaction ' + @REFNO + ' is already PAID'
  162. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  163. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  164. RETURN
  165. END
  166. --IF @paymentMethod <> 'Cash Payment'
  167. --BEGIN
  168. -- SELECT @errorCode = '2005', @errorMsg = 'This transaction is not Cash Pay Transaction'
  169. -- EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  170. -- SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  171. -- RETURN;
  172. --END
  173. IF ISNULL(@PAY_TOKEN_ID, 0) <> ISNULL(@tokenId,1)
  174. BEGIN
  175. SELECT @errorCode = '1004', @errorMsg = 'Invalid Token ID'
  176. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  177. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  178. RETURN;
  179. END
  180. --IF (@pAgent IS NOT NULL AND @expected_payoutagentid <> @pAgent)
  181. --BEGIN
  182. -- SELECT @errorCode = '2003', @errorMsg = 'This transaction belongs to : ' + @pAgentName
  183. -- EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  184. -- SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  185. -- RETURN
  186. --END
  187. IF (@tranStatus LIKE '%Hold%')
  188. BEGIN
  189. SELECT @errorCode = '2006', @errorMsg = 'The Transaction is not approved. Kindly contact info@gmeremit.com to approve the transction.'
  190. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  191. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  192. RETURN
  193. END
  194. IF (ISNULL(@tranStatus,'') <> 'Payment')
  195. BEGIN
  196. SELECT @errorCode = '2006', @errorMsg = 'This transaction is not currently available for payment. Kindly contact info@gmeremit.com.np for the details.'
  197. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  198. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  199. RETURN
  200. END
  201. IF (ISNULL(@Status,'') <> 'Unpaid')
  202. BEGIN
  203. SELECT @errorCode = '2006', @errorMsg = 'This transaction is not currently available for payment. Kindly contact info@gmeremit.com.np for the details.'
  204. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  205. SELECT @errorCode CODE, @errorMsg MESSAGE, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, PAYOUT_COMM = NULL, REFNO = @REFNO
  206. RETURN
  207. END
  208. --IF (@lock_status <> 'locked')
  209. --BEGIN
  210. -- SELECT '2004' CODE
  211. -- ,'Transaction ' + @REFNO + ' is not in LOCK Stage' MESSAGE
  212. -- ,@AGENT_SESSION_ID AGENT_SESSION_ID
  213. -- ,Confirm_ID = NULL, REFNO = @REFNO
  214. -- RETURN
  215. --END
  216. DECLARE @Confirm_ID VARCHAR(40)
  217. SET @Confirm_ID = LEFT(CAST(ABS(CHECKSUM(NEWID())) AS VARCHAR(10)) + '0000000', 7)
  218. BEGIN TRANSACTION
  219. UPDATE remitTran SET
  220. pAgent = @pAgent
  221. ,pAgentName = @pAgentName
  222. ,pSuperAgent = @pSuperAgent
  223. ,pSuperAgentName = @pSuperAgentName
  224. ,lockStatus = 'unlocked'
  225. ,tranStatus = 'Paid'
  226. ,payStatus = 'Paid'
  227. ,paidDate = GETDATE()
  228. ,paidDateLocal = GETDATE()
  229. ,paidBy = @USERNAME
  230. ,payTokenId = @Confirm_ID
  231. ,postedBy = @USERNAME
  232. ,postedDate = GETDATE()
  233. WHERE controlNo = @controlNoEnc
  234. UPDATE tranReceivers SET
  235. idType = @RECEIVER_ID_TYPE
  236. ,idNumber = @RECEIVER_ID_NO
  237. ,idPlaceOfIssue = @RECEIVER_ID_ISSUE_PLACE
  238. ,issuedDate = @RECEIVER_ID_ISSUE_DATE
  239. ,occupation = @RECEIVER_OCCUPATION
  240. ,dob = @RECEIVER_DOB
  241. WHERE tranId = @tranId
  242. IF @@TRANCOUNT > 0
  243. COMMIT TRANSACTION
  244. SELECT
  245. CODE = '0'
  246. ,MESSAGE = 'Transaction Paid Successfully Success'
  247. ,AGENT_SESSION_ID = @AGENT_SESSION_ID
  248. ,Confirm_ID = @Confirm_ID
  249. ,REFNO = @REFNO
  250. ,PAYOUT_COMM = @pAgentComm
  251. SELECT @errorCode = '0', @errorMsg = 'Pay Success'
  252. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  253. ---- pay voucher----
  254. EXEC FastMoneyPro_Account.dbo.proc_remittanceVoucher_Paid @controlNo = @REFNO,@pAgent = @pAgent ,@USER = @USERNAME
  255. RETURN
  256. END TRY
  257. BEGIN CATCH
  258. IF @@TRANCOUNT > 0
  259. ROLLBACK TRAN
  260. DECLARE @errorLogId BIGINT
  261. INSERT INTO Logs (errorPage, errorMsg, errorDetails, createdBy, createdDate)
  262. SELECT 'API SP Error',@errorMsg MESSAGE, 'ws_proc_PayTXNConfirm', @USERNAME, GETDATE()
  263. SET @errorLogId = SCOPE_IDENTITY()
  264. SELECT @errorCode = '9001', @errorMsg = 'Technical Error : ' + ERROR_MESSAGE() + ', Error Log Id : ' + CAST(@errorLogId AS VARCHAR)
  265. EXEC ws_proc_responseLog @flag = 'p', @requestId = @apiRequestId, @errorCode = @errorCode, @errorMsg = @errorMsg, @remarks = @remarks
  266. SELECT @errorCode CODE, 'Technical Error occurred, Error Log Id : ' + CAST(@errorLogId AS VARCHAR) MESSAGE, PAYOUT_COMM = NULL, @AGENT_SESSION_ID AGENT_SESSION_ID, Confirm_ID = NULL, REFNO = @REFNO
  267. END CATCH
  268. /*
  269. EXEC ws_proc_PayTXNConfirm @ACCESSCODE='GMKOR1037',
  270. @USERNAME='IMENepal',@PASSWORD='123456',
  271. @AGENT_SESSION_ID='1234567',
  272. @REFNO='80147248605',
  273. @PAY_TOKEN_ID='16829397'
  274. */
  275. GO