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.

788 lines
27 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_balanceTopUp] Script Date: 7/4/2019 11:35:48 AM ******/
  4. DROP PROCEDURE [dbo].[proc_balanceTopUp]
  5. GO
  6. /****** Object: StoredProcedure [dbo].[proc_balanceTopUp] Script Date: 7/4/2019 11:35:48 AM ******/
  7. SET ANSI_NULLS ON
  8. GO
  9. SET QUOTED_IDENTIFIER ON
  10. GO
  11. CREATE PROC [dbo].[proc_balanceTopUp]
  12. @flag VARCHAR(50) = NULL
  13. ,@user VARCHAR(30) = NULL
  14. ,@btId VARCHAR(30) = NULL
  15. ,@agentId INT = NULL
  16. ,@amount MONEY = NULL
  17. ,@topUpExpiryDate DATETIME = NULL
  18. ,@remarks VARCHAR(MAX) = NULL
  19. ,@hasChanged CHAR(1) = NULL
  20. ,@agentCountry VARCHAR(200) = NULL
  21. ,@agentDistrict VARCHAR(200) = NULL
  22. ,@agentLocation VARCHAR(200) = NULL
  23. ,@agentName VARCHAR(200) = NULL
  24. ,@createdBy VARCHAR(50) = NULL
  25. ,@approvedBy VARCHAR(50) = NULL
  26. ,@approvedDate VARCHAR(50) = NULL
  27. ,@createdDate VARCHAR(50) = NULL
  28. ,@approvedFromDate DATETIME = NULL
  29. ,@approvedToDate DATETIME = NULL
  30. ,@riskyAgent CHAR(1) = NULL
  31. ,@sortBy VARCHAR(50) = NULL
  32. ,@sortOrder VARCHAR(5) = NULL
  33. ,@pageSize INT = NULL
  34. ,@pageNumber INT = NULL
  35. AS
  36. SET NOCOUNT ON
  37. SET XACT_ABORT ON
  38. BEGIN TRY
  39. CREATE TABLE #msg(errorCode INT, msg VARCHAR(100), id INT)
  40. DECLARE
  41. @sql VARCHAR(MAX)
  42. ,@oldValue VARCHAR(MAX)
  43. ,@newValue VARCHAR(MAX)
  44. ,@module VARCHAR(10)
  45. ,@tableAlias VARCHAR(100)
  46. ,@logIdentifier VARCHAR(50)
  47. ,@logParamMod VARCHAR(100)
  48. ,@logParamMain VARCHAR(100)
  49. ,@table VARCHAR(MAX)
  50. ,@select_field_list VARCHAR(MAX)
  51. ,@extra_field_list VARCHAR(MAX)
  52. ,@sql_filter VARCHAR(MAX)
  53. ,@modType VARCHAR(6)
  54. ,@userId INT
  55. ,@today DATETIME = DATEADD(DAY,7,CONVERT(VARCHAR, GETDATE(), 101))
  56. ,@lastBgId INT
  57. SELECT
  58. @logIdentifier = 'btId'
  59. ,@logParamMain = 'balanceTopUp'
  60. ,@logParamMod = 'balanceTopUpMod'
  61. ,@module = '20'
  62. ,@tableAlias = 'Balance Top Up'
  63. IF @flag = 'i'
  64. BEGIN
  65. SELECT @userId = userId FROM applicationUsers WHERE userName = @user
  66. IF NOT EXISTS(SELECT 'X' FROM creditLimit WHERE agentId = @agentId AND ISNULL(isActive, 'N') = 'Y')
  67. BEGIN
  68. EXEC proc_errorHandler 1, 'Sorry, Ledger not found', @user
  69. RETURN
  70. END
  71. IF NOT EXISTS(SELECT 'X' FROM topUpLimit WHERE userId = @userId)
  72. BEGIN
  73. EXEC proc_errorHandler 1, 'Operation Unsuccessful, You do not have permission.', @user
  74. RETURN
  75. END
  76. IF @amount IS NULL
  77. BEGIN
  78. EXEC proc_errorHandler 1, 'Please enter the amount', @user
  79. RETURN
  80. END
  81. SELECT
  82. @lastBgId = MAX(bgId)
  83. FROM bankGuarantee WITH(NOLOCK)
  84. WHERE agentId = @agentId
  85. AND ISNULL(isDeleted,'N') <> 'Y'
  86. AND ISNULL(isActive,'Y') <>'N'
  87. IF EXISTS(SELECT 'x' FROM bankGuarantee WITH(NOLOCK)
  88. WHERE bgId = @lastBgId AND expiryDate < @today)
  89. BEGIN
  90. UPDATE dbo.creditLimit SET
  91. limitAmt = 0,
  92. topUpToday = 0,
  93. modifiedBy = @user,
  94. modifiedDate = GETDATE()
  95. WHERE agentId = @agentId
  96. SELECT '1','Bank Guarantee for this agent has been expired or going to expire. Please contact agent.',NULL
  97. RETURN
  98. END
  99. IF @amount > 0
  100. BEGIN
  101. IF NOT EXISTS(SELECT 'X' FROM topUpLimit WHERE userId = @userId AND limitPerDay > (
  102. SELECT ISNULL(SUM(ISNULL(amount, 0)),0) FROM balanceTopUp
  103. WHERE createdDate BETWEEN CONVERT(VARCHAR, GETDATE(), 101) AND CONVERT(VARCHAR, GETDATE(), 101) + ' 23:59:59'
  104. AND agentId = @agentId
  105. AND createdBy = @user
  106. ))
  107. BEGIN
  108. EXEC proc_errorHandler 1, 'Sorry, Your top up limit authority for today for this agent has exceeded.', @user
  109. RETURN
  110. END
  111. END
  112. IF(@amount > ISNULL((SELECT balance FROM applicationUsers WITH(NOLOCK) WHERE userName = @user), 0))
  113. BEGIN
  114. EXEC proc_errorHandler 1, 'Sorry, You do not have sufficient balance for the operation', @user
  115. RETURN
  116. END
  117. IF(ISNULL((SELECT perTopUpLimit FROM topUpLimit WHERE userId = @userId AND approvedBy IS NOT NULL), 0) < @amount)
  118. BEGIN
  119. EXEC proc_errorHandler 1, 'Sorry, Top-up amount exceeded the User Per Top Up Limit', @user
  120. RETURN
  121. END
  122. IF(ISNULL((SELECT SUM(perTopUpAmt) FROM creditLimit WHERE agentId = @agentId AND approvedBy IS NOT NULL), 0) < @amount) --changed due to multi pule result
  123. BEGIN
  124. EXEC proc_errorHandler 1, 'Sorry, Top-up amount exceeded the Agent Per Top Up Limit', @user
  125. RETURN
  126. END
  127. DECLARE @basicLimit MONEY, @topUpT MONEY, @topUpY MONEY, @topUpYCalc MONEY, @maxLimitAmt MONEY, @todaysAddedMaxLimit MONEY
  128. SELECT
  129. @basicLimit = ISNULL(cl.limitAmt, 0)
  130. ,@topUpT = ISNULL(cl.topUpToday, 0)
  131. ,@topUpY = ISNULL(cl.topUpTillYesterday, 0)
  132. ,@maxLimitAmt = ISNULL(cl.maxLimitAmt, 0)
  133. ,@todaysAddedMaxLimit = ISNULL(cl.todaysAddedMaxLimit, 0)
  134. ,@topUpYCalc = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0 THEN 0
  135. ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI END
  136. FROM creditLimit cl WITH(NOLOCK)
  137. INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
  138. INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
  139. IF((@amount + @basicLimit + @topUpT + @topUpYCalc) > @maxLimitAmt + @todaysAddedMaxLimit)
  140. BEGIN
  141. EXEC proc_errorHandler 1, 'Sorry, Agent Max Limit Amount exceeded', @user
  142. RETURN
  143. END
  144. BEGIN TRANSACTION
  145. INSERT INTO balanceTopUp (
  146. agentId
  147. ,amount
  148. ,topUpExpiryDate
  149. ,createdBy
  150. ,createdDate
  151. )
  152. SELECT
  153. @agentId
  154. ,@amount
  155. ,@topUpExpiryDate
  156. ,@user
  157. ,dbo.FNAGetDateInNepalTZ()
  158. SET @modType = 'Insert'
  159. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId , @newValue OUTPUT
  160. INSERT INTO #msg(errorCode, msg, id)
  161. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
  162. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  163. BEGIN
  164. IF @@TRANCOUNT > 0
  165. ROLLBACK TRANSACTION
  166. EXEC proc_errorHandler 1, 'Failed to add new record.', @btId
  167. RETURN
  168. END
  169. IF @@TRANCOUNT > 0
  170. COMMIT TRANSACTION
  171. DECLARE @message AS VARCHAR(MAX)
  172. SET @message='Top Up Limit Amount '+ CAST(@amount AS VARCHAR) +' has been requested successfully.'
  173. EXEC proc_errorHandler 0, @message, @btId
  174. END
  175. ELSE IF @flag = 'ld' --Other Limit Detail
  176. BEGIN
  177. SELECT
  178. am.agentName,
  179. cl.maxLimitAmt,
  180. cl.perTopUpAmt,
  181. topUpTillYesterday = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE
  182. (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0
  183. THEN 0 ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0
  184. ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysCancelled - cl.todaysPOI END,
  185. cl.topUpToday,
  186. todaysCancel = cl.todaysCancelled,
  187. cl.todaysEPI,
  188. cl.todaysPOI,
  189. todaysFundDeposit = (V.clr_bal_amt - cl.yesterdaysBalance)
  190. FROM creditLimit cl WITH(NOLOCK)
  191. INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
  192. INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
  193. END
  194. ELSE IF @flag = 'a'
  195. BEGIN
  196. SELECT
  197. am.agentId
  198. ,am.agentName
  199. ,availableAmt = ISNULL(dbo.FNAGetLimitBal(@agentId), 0)
  200. ,limit = ISNULL(main.dr_bal_lim, 0)
  201. ,maxLimitAmt = ISNULL(cr.maxLimitAmt, 0)
  202. ,currency = ISNULL(cm.currencyCode, 'N/A')
  203. FROM agentMaster am
  204. LEFT JOIN ac_master main ON am.agentId = main.agent_id
  205. LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.ac_currency = cm.currencyId
  206. LEFT JOIN creditLimit cr WITH(NOLOCK) ON am.agentId = cr.agentId
  207. WHERE am.agentType = 2903 AND am.agentId = @agentId
  208. END
  209. ELSE IF @flag = 'u'
  210. BEGIN
  211. BEGIN TRANSACTION
  212. UPDATE balanceTopUp SET
  213. agentId = @agentId
  214. ,amount = @amount
  215. ,topUpExpiryDate = @topUpExpiryDate
  216. ,modifiedBy = @user
  217. ,modifiedDate = GETDATE()
  218. WHERE btId = @btId
  219. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @newValue OUTPUT
  220. INSERT INTO #msg(errorCode, msg, id)
  221. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
  222. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  223. BEGIN
  224. IF @@TRANCOUNT > 0
  225. ROLLBACK TRANSACTION
  226. EXEC proc_errorHandler 1, 'Failed to update record.', @btId
  227. RETURN
  228. END
  229. IF @@TRANCOUNT > 0
  230. COMMIT TRANSACTION
  231. DECLARE @msg AS VARCHAR(MAX)
  232. SET @msg='Top Up Amount '+ CAST(@amount AS VARCHAR) +' has been updated successfully.'
  233. EXEC proc_errorHandler 0, @msg, @btId
  234. END
  235. ELSE IF @flag = 'd'
  236. BEGIN
  237. BEGIN TRANSACTION
  238. UPDATE balanceTopUp SET
  239. btStatus='Deleted'
  240. ,modifiedDate = GETDATE()
  241. ,modifiedBy = @user
  242. WHERE btId = @btId
  243. SET @modType = 'Delete'
  244. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @oldValue OUTPUT
  245. INSERT INTO #msg(errorCode, msg, id)
  246. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
  247. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  248. BEGIN
  249. IF @@TRANCOUNT > 0
  250. ROLLBACK TRANSACTION
  251. EXEC proc_errorHandler 1, 'Failed to delete record.', @btId
  252. RETURN
  253. END
  254. IF @@TRANCOUNT > 0
  255. COMMIT TRANSACTION
  256. EXEC proc_errorHandler 0, 'Record deleted successfully.', @btId
  257. END
  258. ELSE IF @flag = 'al' --Approval List
  259. BEGIN
  260. IF @sortBy IS NULL
  261. SET @sortBy = 'agentName'
  262. IF @sortOrder IS NULL
  263. SET @sortOrder = 'ASC'
  264. SET @table = '(
  265. SELECT
  266. bal.btId
  267. ,agentName = am.agentName+'' <b>(''+bal.createdBy+'')</b>''
  268. ,bal.amount
  269. ,bal.createdBy
  270. ,bal.createdDate
  271. ,availableBal = dbo.FNAGetLimitBalWithNegValue(am.agentId)
  272. ,currBal = V.clr_bal_amt - cl.todaysSent + cl.todaysPaid + cl.todaysCancelled - cl.todaysEPI + cl.todaysPOI
  273. ,appAmt = ''<input id="topUp_'' + CAST(bal.btId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;" value="'' + CAST(bal.amount AS VARCHAR) + ''"/>''
  274. ,securityType = CASE WHEN bg.agentId IS NOT NULL THEN ''Bank :''+dbo.ShowDecimal(bg.amount)+''</br>[Exp. Date :''+convert(varchar,bg.expiryDate,101)+'']''
  275. WHEN cs.agentId IS NOT NULL THEN ''Cash :''+dbo.ShowDecimal(cs.cashDeposit) ELSE ''-'' END
  276. FROM balanceTopUp bal WITH(NOLOCK)
  277. inner join creditLimit cl with(nolock) on cl.agentId = bal.agentId
  278. INNER JOIN agentMaster am WITH(NOLOCK) ON bal.agentId = am.agentId
  279. INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
  280. LEFT JOIN dbo.cashSecurity cs WITH(NOLOCK) ON cs.agentId = bal.agentId AND ISNULL(cs.isDeleted,''N'') <>''Y''
  281. LEFT JOIN dbo.bankGuarantee bg WITH(NOLOCK) ON bg.agentId = bal.agentId AND ISNULL(bg.isDeleted,''N'') <>''Y''
  282. WHERE bal.approvedBy IS NULL
  283. ) x
  284. '
  285. SET @sql_filter = ''
  286. IF @agentName IS NOT NULL
  287. SET @sql_filter = @sql_filter + ' AND ISNULL(agentName, '''') LIKE ''%' + @agentName + '%'''
  288. SET @select_field_list ='
  289. btId
  290. ,agentName
  291. ,amount
  292. ,createdBy
  293. ,createdDate
  294. ,availableBal
  295. ,currBal
  296. ,appAmt
  297. ,securityType
  298. '
  299. EXEC dbo.proc_paging
  300. @table
  301. ,@sql_filter
  302. ,@select_field_list
  303. ,@extra_field_list
  304. ,@sortBy
  305. ,@sortOrder
  306. ,@pageSize
  307. ,@pageNumber
  308. END
  309. ELSE IF @flag = 's'
  310. BEGIN
  311. IF @sortBy IS NULL
  312. SET @sortBy = 'agentName'
  313. IF @sortOrder IS NULL
  314. SET @sortOrder = 'ASC'
  315. IF @user IN ('admin', 'admin1')
  316. BEGIN
  317. SET @table = '(
  318. SELECT
  319. main.crLimitId
  320. ,am.agentId
  321. ,am.agentName
  322. ,am.agentCountry
  323. ,am.agentDistrict
  324. ,loc.districtName agentLocation
  325. ,currency = ISNULL(cm.currencyCode, ''N/A'')
  326. ,limitAmt = ISNULL(main.limitAmt, 0)
  327. ,maxLimitAmt = ISNULL(main.maxLimitAmt, 0)
  328. ,perTopUpAmt = ISNULL(main.perTopUpAmt, 0)
  329. ,currentBalance = ABS(V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI)
  330. ,availableLimit =
  331. main.limitAmt - V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
  332. ,expiryDate = ISNULL(CAST(main.expiryDate AS VARCHAR), ''N/A'')
  333. ,limitToppedUp = CASE WHEN main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
  334. - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
  335. main.topUpToday ELSE main.topUpToday + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
  336. - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI) END
  337. ,topUp = ''<input id="topUp_'' + CAST(am.agentId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;"/>''
  338. ,todaysSent = main.todaysSent
  339. ,todaysPaid = main.todaysPaid
  340. ,todaysCancelled = main.todaysCancelled
  341. ,main.createdBy
  342. ,main.createdDate
  343. ,main.modifiedBy
  344. FROM agentMaster am
  345. INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
  346. INNER JOIN creditLimit main ON am.agentId = main.agentId
  347. LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.currency = cm.currencyId
  348. LEFT JOIN api_districtList loc with(nolock) ON loc.districtCode=am.agentLocation
  349. WHERE am.isSettlingAgent = ''Y''
  350. )
  351. '
  352. END
  353. ELSE
  354. BEGIN
  355. IF OBJECT_ID('tempdb..#agentId') IS NOT NULL
  356. DROP TABLE #agentId
  357. CREATE TABLE #agentId(agentId INT)
  358. INSERT INTO #agentId
  359. SELECT agentId FROM agentMaster WHERE ISNULL(isDeleted, 'N') = 'N'
  360. DELETE FROM #agentId
  361. FROM #agentId ag
  362. INNER JOIN
  363. agentGroupMaping agm ON agm.agentId = ag.agentId
  364. WHERE agm.groupCat = '6900' AND ISNULL(agm.isDeleted, 'N') = 'N'
  365. INSERT INTO #agentId
  366. SELECT DISTINCT agm.agentId FROM userGroupMapping ugm
  367. INNER JOIN agentGroupMaping agm ON agm.groupDetail = ugm.groupDetail AND ISNULL(agm.isDeleted, 'N') = 'N' AND ISNULL(ugm.isDeleted, 'N') = 'N'
  368. WHERE ugm.userName = @user
  369. SET @table = '(
  370. SELECT
  371. main.crLimitId
  372. ,am.agentId
  373. ,am.agentName
  374. ,am.agentCountry
  375. ,am.agentDistrict
  376. ,loc.districtName agentLocation
  377. ,currency = ISNULL(cm.currencyCode, ''N/A'')
  378. ,limitAmt = ISNULL(main.limitAmt, 0)
  379. ,maxLimitAmt = ISNULL(main.maxLimitAmt, 0)
  380. ,perTopUpAmt = ISNULL(main.perTopUpAmt, 0)
  381. ,currentBalance = V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
  382. ,availableLimit =
  383. CASE WHEN
  384. main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END)
  385. - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
  386. main.limitAmt + main.topUpToday + V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
  387. ELSE
  388. main.limitAmt + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0
  389. THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI) +
  390. main.topUpToday + V.clr_bal_amt - main.todaysSent + main.todaysPaid + main.todaysCancelled - main.todaysEPI + main.todaysPOI
  391. END
  392. ,expiryDate = ISNULL(CAST(main.expiryDate AS VARCHAR), ''N/A'')
  393. ,limitToppedUp = CASE WHEN main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main.todaysPOI <= 0 THEN
  394. main.topUpToday ELSE main.topUpToday + (main.topUpTillYesterday - (CASE WHEN (V.clr_bal_amt - main.yesterdaysBalance) < 0 THEN 0 ELSE (V.clr_bal_amt - main.yesterdaysBalance) END) - main.todaysPaid - main.todaysCancelled + main.todaysEPI - main
  395. .todaysPOI) END
  396. ,topUp = ''<input id="topUp_'' + CAST(am.agentId AS VARCHAR) + ''" type="text" style="width: 75px; text-align: right;" />''
  397. ,todaysSent = main.todaysSent
  398. ,todaysPaid = main.todaysPaid
  399. ,todaysCancelled = main.todaysCancelled
  400. ,main.createdBy
  401. ,main.createdDate
  402. ,main.modifiedBy
  403. FROM agentMaster am
  404. INNER JOIN
  405. (
  406. SELECT DISTINCT agentId FROM #agentId
  407. )ag ON am.agentId = ag.agentId
  408. INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
  409. INNER JOIN creditLimit main ON am.agentId = main.agentId
  410. LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.currency = cm.currencyId
  411. LEFT JOIN api_districtList loc WITH(NOLOCK) ON loc.districtCode=am.agentLocation
  412. WHERE am.isSettlingAgent = ''Y''
  413. )
  414. '
  415. END
  416. SET @table = '(
  417. SELECT
  418. main.crLimitId
  419. ,main.agentId
  420. ,main.agentName
  421. ,main.agentCountry
  422. ,main.agentDistrict
  423. ,main.agentLocation
  424. ,main.currency
  425. ,main.limitAmt
  426. ,main.perTopUpAmt
  427. ,main.limitToppedUp
  428. ,main.maxLimitAmt
  429. ,main.currentBalance
  430. ,main.availableLimit
  431. ,main.expiryDate
  432. ,main.topUp
  433. ,main.todaysSent
  434. ,main.todaysPaid
  435. ,main.todaysCancelled
  436. ,main.createdBy
  437. ,main.createdDate
  438. ,modifiedBy = main.createdBy
  439. ,haschanged = ''N''
  440. FROM ' + @table + ' main
  441. ) x
  442. '
  443. SET @sql_filter = ''
  444. IF @haschanged IS NOT NULL
  445. SET @sql_filter = @sql_filter + ' AND haschanged = ''' + @haschanged + ''''
  446. IF @agentCountry IS NOT NULL
  447. SET @sql_filter = @sql_filter + ' AND ISNULL(agentCountry, '''') LIKE ''%' + @agentCountry + '%'''
  448. IF @agentDistrict IS NOT NULL
  449. SET @sql_filter = @sql_filter + ' AND ISNULL(agentDistrict, '''') LIKE ''%' + @agentDistrict + '%'''
  450. IF @agentName IS NOT NULL
  451. SET @sql_filter = @sql_filter + ' AND ISNULL(agentName, '''') LIKE ''%' + @agentName + '%'''
  452. IF @agentLocation IS NOT NULL
  453. SET @sql_filter = @sql_filter + ' AND ISNULL(agentLocation, '''') LIKE ''%' + @agentLocation + '%'''
  454. IF @riskyAgent IS NOT NULL
  455. BEGIN
  456. IF @riskyAgent = 'Y'
  457. BEGIN
  458. SET @sql_filter = @sql_filter + ' AND ((limitToppedUp >= (maxLimitAmt - limitAmt - (0.10 * maxLimitAmt)) AND maxLimitAmt <> limitAmt) OR availableLimit < 0)'
  459. END
  460. END
  461. SET @select_field_list ='
  462. crLimitId
  463. ,agentId
  464. ,agentName
  465. ,agentCountry
  466. ,agentDistrict
  467. ,agentLocation
  468. ,currency
  469. ,limitAmt
  470. ,perTopUpAmt
  471. ,limitToppedUp
  472. ,maxLimitAmt
  473. ,currentBalance
  474. ,availableLimit
  475. ,expiryDate
  476. ,topUp
  477. ,todaysSent
  478. ,todaysPaid
  479. ,todaysCancelled
  480. ,createdBy
  481. ,createdDate
  482. ,modifiedBy
  483. ,hasChanged
  484. '
  485. EXEC dbo.proc_paging
  486. @table
  487. ,@sql_filter
  488. ,@select_field_list
  489. ,@extra_field_list
  490. ,@sortBy
  491. ,@sortOrder
  492. ,@pageSize
  493. ,@pageNumber
  494. END
  495. ELSE IF @flag = 'reject'
  496. BEGIN
  497. SELECT
  498. @amount=amount,
  499. @agentId=agentId,
  500. @createdBy = createdBy
  501. FROM balanceTopUp WHERE btId=@btId
  502. BEGIN TRANSACTION
  503. SET @modType = 'Reject'
  504. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @btId, @oldValue OUTPUT
  505. INSERT INTO #msg(errorCode, msg, id)
  506. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
  507. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  508. BEGIN
  509. IF @@TRANCOUNT > 0
  510. ROLLBACK TRANSACTION
  511. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @btId
  512. RETURN
  513. END
  514. UPDATE balanceTopUp SET
  515. btStatus = 'Rejected'
  516. ,approvedBy = @user
  517. ,approvedDate = dbo.FNAGetDateInNepalTZ()
  518. ,remarks = @remarks
  519. ,reqAmt= @amount
  520. ,amount = 0
  521. WHERE btId=@btId
  522. IF @@TRANCOUNT > 0
  523. COMMIT TRANSACTION
  524. EXEC proc_errorHandler 0, 'Changes rejected successfully.', @btId
  525. END
  526. ELSE IF @flag = 'approve'
  527. BEGIN
  528. DECLARE @maxCreditLimitForAgent MONEY,
  529. @availableBal MONEY,
  530. @currBal MONEY,
  531. @reqAmt MONEY
  532. SELECT @reqAmt = amount,
  533. @agentId = agentId,
  534. @createdBy = createdBy
  535. FROM balanceTopUp WITH(NOLOCK) WHERE btId=@btId
  536. SELECT
  537. @lastBgId = MAX(bgId)
  538. FROM bankGuarantee WITH(NOLOCK)
  539. WHERE agentId = @agentId
  540. AND ISNULL(isDeleted,'N') <> 'Y'
  541. AND ISNULL(isActive,'Y') <>'N'
  542. IF EXISTS(SELECT 'x' FROM bankGuarantee WITH(NOLOCK)
  543. WHERE bgId = @lastBgId AND expiryDate < @today)
  544. BEGIN
  545. UPDATE dbo.creditLimit SET
  546. limitAmt = 0,
  547. topUpToday = 0,
  548. modifiedBy = @user,
  549. modifiedDate = GETDATE()
  550. WHERE agentId = @agentId
  551. SELECT '1','Bank Guarantee for this agent has been expired or going to expire. Please contact agent.',NULL
  552. RETURN
  553. END
  554. IF NOT EXISTS(SELECT 'x' FROM balanceTopUp WITH(NOLOCK) WHERE btId = @btId AND approvedDate IS NULL)
  555. BEGIN
  556. EXEC proc_errorHandler 1, 'Sorry, Record has been approved already. Please CHECK.', @btId
  557. RETURN
  558. END
  559. IF (@amount IS NULL OR @amount = '')
  560. BEGIN
  561. EXEC proc_errorHandler 1, 'Amount should not be blank.', @btId
  562. RETURN
  563. END
  564. IF(@createdBy = @user)
  565. BEGIN
  566. EXEC proc_errorHandler 1, 'You are not authorised to approve this record.', @btId
  567. RETURN
  568. END
  569. SELECT
  570. @basicLimit = ISNULL(cl.limitAmt, 0)
  571. ,@topUpT = ISNULL(cl.topUpToday, 0)
  572. ,@topUpY = ISNULL(cl.topUpTillYesterday, 0)
  573. ,@maxLimitAmt = ISNULL(cl.maxLimitAmt, 0)
  574. ,@todaysAddedMaxLimit = ISNULL(cl.todaysAddedMaxLimit, 0)
  575. ,@topUpYCalc = CASE WHEN cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI <= 0 THEN 0
  576. ELSE cl.topUpTillYesterday - (CASE WHEN (v.clr_bal_amt - cl.yesterdaysBalance) < 0 THEN 0 ELSE (v.clr_bal_amt - cl.yesterdaysBalance) END) - cl.todaysPaid - cl.todaysCancelled + cl.todaysEPI - cl.todaysPOI END
  577. ,@currBal = V.clr_bal_amt - cl.todaysSent + cl.todaysPaid + cl.todaysCancelled - cl.todaysEPI + cl.todaysPOI
  578. FROM creditLimit cl WITH(NOLOCK)
  579. INNER JOIN agentMaster am WITH(NOLOCK) ON cl.agentId = am.agentId
  580. INNER JOIN dbo.vWAgentClrBal v ON v.map_code = am.mapCodeInt WHERE cl.agentId = @agentId
  581. IF((@amount + @basicLimit + @topUpT + @topUpYCalc) > @maxLimitAmt + @todaysAddedMaxLimit)
  582. BEGIN
  583. EXEC proc_errorHandler 1, 'Cannot approve record. Agent MAX Limit Amount exceeded', @user
  584. RETURN
  585. END
  586. SELECT @maxCreditLimitForAgent = maxCreditLimitForAgent
  587. FROM topuplimit tl WITH(NOLOCK) INNER JOIN applicationUsers au WITH(NOLOCK) ON tl.userId = au.userId
  588. WHERE au.userName = @user
  589. IF @maxCreditLimitForAgent IS NULL OR @maxCreditLimitForAgent = 0
  590. BEGIN
  591. EXEC proc_errorHandler 1, 'Cannot approve record. User wise agent max credit limit amount has not been set yet.', @user
  592. RETURN
  593. END
  594. SET @availableBal = dbo.FNAGetLimitBalWithNegValue(@agentId)
  595. IF(@maxCreditLimitForAgent + (@currBal - @amount - @availableBal) < 0)
  596. BEGIN
  597. SET @msg = 'You can not approve this record. Your max credit limit for agent has been exceeded. Your Limit: '+ dbo.ShowDecimal(@maxCreditLimitForAgent) +'.'
  598. EXEC proc_errorHandler 1, @msg, @user
  599. RETURN
  600. END
  601. BEGIN TRANSACTION
  602. UPDATE creditLimit SET
  603. topUpToday = ISNULL(topUpToday, 0) + @amount
  604. WHERE agentId = @agentId
  605. UPDATE balanceTopUp SET
  606. btStatus = 'Approved'
  607. ,approvedBy = @user
  608. ,approvedDate = dbo.FNAGetDateInNepalTZ()
  609. ,remarks = @remarks
  610. ,amount = @amount
  611. ,reqAmt = @reqAmt
  612. WHERE btId = @btId
  613. INSERT INTO #msg(errorCode, msg, id)
  614. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @btId, @user, @oldValue, @newValue
  615. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  616. BEGIN
  617. IF @@TRANCOUNT > 0
  618. ROLLBACK TRANSACTION
  619. EXEC proc_errorHandler 1, 'Could not approve the changes.', @btId
  620. RETURN
  621. END
  622. IF @@TRANCOUNT > 0
  623. COMMIT TRANSACTION
  624. EXEC proc_errorHandler 0, 'Balance topup request approved successfully.', @btId
  625. END
  626. ELSE IF @flag='history'
  627. BEGIN
  628. SET @sortBy = 'approvedDate'
  629. SET @sortOrder = 'DESC'
  630. SET @table = '(
  631. select
  632. amount,
  633. isnull(btStatus,''Requested'')btStatus,
  634. createdBy,
  635. createdDate,
  636. approvedBy,
  637. approvedDate
  638. from balanceTopUp
  639. where agentId=''' + CAST(@agentId AS VARCHAR) + '''
  640. ) x
  641. '
  642. SET @sql_filter = ''
  643. IF @approvedBy IS NOT NULL
  644. SET @sql_filter = @sql_filter + ' AND ISNULL(approvedBy, '''') LIKE ''%' + @approvedBy + '%'''
  645. IF @createdBy IS NOT NULL
  646. SET @sql_filter = @sql_filter + ' AND ISNULL(createdBy, '''') LIKE ''%' + @createdBy + '%'''
  647. IF @approvedFromDate IS NOT NULL AND @approvedToDate IS NOT NULL
  648. SET @sql_filter = @sql_filter + ' AND approvedDate BETWEEN ''' + CONVERT(VARCHAR,@approvedFromDate, 101) + ''' AND ''' + CONVERT(VARCHAR,@approvedToDate, 101) + ' 23:59:59'''
  649. SET @select_field_list ='
  650. amount
  651. ,btStatus
  652. ,createdBy
  653. ,createdDate
  654. ,approvedBy
  655. ,approvedDate
  656. '
  657. EXEC dbo.proc_paging
  658. @table
  659. ,@sql_filter
  660. ,@select_field_list
  661. ,@extra_field_list
  662. ,@sortBy
  663. ,@sortOrder
  664. ,@pageSize
  665. ,@pageNumber
  666. END
  667. ELSE IF @flag='aa'
  668. BEGIN
  669. SELECT
  670. am.agentId
  671. ,am.agentName
  672. ,securityType =
  673. CASE WHEN cs.cashDeposit IS NULL AND bg.amount IS NULL THEN 'Security Type'
  674. WHEN cs.cashDeposit IS NULL AND bg.amount IS NOT NULL THEN 'Bank Guarantee'
  675. WHEN cs.cashDeposit IS NOT NULL AND bg.amount IS NULL THEN 'Cash Security'
  676. ELSE 'Security Type' END
  677. ,securityValue =
  678. CASE WHEN cs.cashDeposit IS NULL AND bg.amount IS NULL THEN 0
  679. WHEN cs.cashDeposit IS NULL AND bg.amount IS NOT NULL THEN bg.amount
  680. WHEN cs.cashDeposit IS NOT NULL AND bg.amount IS NULL THEN cs.cashDeposit
  681. ELSE 0 END
  682. ,baseLimit = ISNULL(cr.limitAmt, 0)
  683. ,maxLimit = ISNULL(cr.maxLimitAmt, 0)
  684. ,TodaysTopup = ISNULL(cr.topUpToday,0)
  685. ,availableBal = ISNULL(dbo.FNAGetLimitBalWithNegValue(bt.agentId), 0)
  686. ,currBal = V.clr_bal_amt - cr.todaysSent + cr.todaysPaid + cr.todaysCancelled - cr.todaysEPI + cr.todaysPOI
  687. ,ReqLimit = bt.amount
  688. FROM dbo.balanceTopUp bt WITH(NOLOCK)
  689. INNER JOIN agentMaster am ON bt.agentId = am.agentId
  690. LEFT JOIN creditLimit cr WITH(NOLOCK) ON am.agentId = cr.agentId
  691. INNER JOIN dbo.vWAgentClrBal V ON V.map_code = am.mapCodeInt
  692. LEFT JOIN dbo.cashSecurity cs WITH(NOLOCK) ON bt.agentId = cs.agentId
  693. LEFT JOIN dbo.bankGuarantee bg WITH(NOLOCK) ON bt.agentId = bg.agentId
  694. WHERE bt.btId = @btId
  695. END
  696. END TRY
  697. BEGIN CATCH
  698. IF @@TRANCOUNT > 0
  699. ROLLBACK TRANSACTION
  700. DECLARE @errorMessage VARCHAR(MAX)
  701. SET @errorMessage = ERROR_MESSAGE()
  702. EXEC proc_errorHandler 1, @errorMessage, @btId
  703. END CATCH
  704. GO