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.

458 lines
26 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_agentLimitMaster] 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].[proc_agentLimitMaster]
  9. @flag VARCHAR(50) = NULL
  10. ,@user VARCHAR(30) = NULL
  11. ,@limitId VARCHAR(30) = NULL
  12. ,@agentId INT = NULL
  13. ,@currency INT = NULL
  14. ,@drBalLim MONEY = NULL
  15. ,@topUpAmt MONEY = NULL
  16. ,@agentName VARCHAR(100) = NULL
  17. ,@agentCountry VARCHAR(100) = NULL
  18. ,@agentGroup INT = NULL
  19. ,@haschanged CHAR(1) = NULL
  20. ,@parentId INT = NULL
  21. ,@sortBy VARCHAR(50) = NULL
  22. ,@sortOrder VARCHAR(5) = NULL
  23. ,@pageSize INT = NULL
  24. ,@pageNumber INT = NULL
  25. AS
  26. SET NOCOUNT ON
  27. SET XACT_ABORT ON
  28. BEGIN TRY
  29. CREATE TABLE #msg(errorCode INT, msg VARCHAR(100), id INT)
  30. DECLARE
  31. @sql VARCHAR(MAX)
  32. ,@oldValue VARCHAR(MAX)
  33. ,@newValue VARCHAR(MAX)
  34. ,@module VARCHAR(10)
  35. ,@tableAlias VARCHAR(100)
  36. ,@logIdentifier VARCHAR(50)
  37. ,@logParamMod VARCHAR(100)
  38. ,@logParamMain VARCHAR(100)
  39. ,@table VARCHAR(MAX)
  40. ,@select_field_list VARCHAR(MAX)
  41. ,@extra_field_list VARCHAR(MAX)
  42. ,@sql_filter VARCHAR(MAX)
  43. ,@id VARCHAR(10)
  44. ,@modType VARCHAR(6)
  45. ,@ApprovedFunctionId INT
  46. SELECT
  47. @ApprovedFunctionId = 20181230
  48. ,@logIdentifier = 'limitId'
  49. ,@logParamMain = 'agentLimitMaster'
  50. ,@logParamMod = 'agentLimitMasterHistory'
  51. ,@module = '20'
  52. ,@tableAlias = 'Agent Credit Limit'
  53. IF @flag IN ('s')
  54. BEGIN
  55. SET @table = '(
  56. SELECT
  57. limitId = ISNULL(mode.limitId, main.limitId)
  58. ,agentId = ISNULL(mode.agentId, main.agentId)
  59. ,currency = ISNULL(mode.currency, main.currency)
  60. ,drBalLim = ISNULL(mode.drBalLim, main.drBalLim)
  61. ,topUpToday = main.topUpToday
  62. ,main.createdBy
  63. ,main.createdDate
  64. ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE ISNULL(mode.createdDate, main.modifiedDate) END
  65. ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE ISNULL(mode.createdBy, main.modifiedBy) END
  66. ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR
  67. (mode.limitId IS NOT NULL)
  68. THEN ''Y'' ELSE ''N'' END
  69. FROM agentLimitMaster main WITH(NOLOCK)
  70. LEFT JOIN agentLimitMasterHistory mode ON main.limitId = mode.limitId AND mode.approvedBy IS NULL
  71. AND (
  72. mode.createdBy = ''' + @user + '''
  73. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  74. )
  75. WHERE ISNULL(main.isDeleted, ''N'') <> ''Y''
  76. AND (
  77. main.approvedBy IS NOT NULL
  78. OR main.createdBy = ''' + @user + '''
  79. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  80. )
  81. --AND NOT(ISNULL(mode.modType, '''') = ''D'' AND mode.createdBy = ''' + @user + ''')
  82. ) '
  83. PRINT (@table)
  84. END
  85. IF @flag = 'i'
  86. BEGIN
  87. --IF (@limitAmt > @maxLimitAmt)
  88. --BEGIN
  89. -- EXEC proc_errorHandler 1, 'Limit Amount defined greater than Max Limit Amt', @limitId
  90. -- RETURN
  91. --END
  92. BEGIN TRANSACTION
  93. INSERT INTO agentLimitMaster (
  94. agentId
  95. ,currency
  96. ,drBalLim
  97. ,createdBy
  98. ,createdDate
  99. )
  100. SELECT
  101. @agentId
  102. ,@currency
  103. ,@drBalLim
  104. ,@user
  105. ,GETDATE()
  106. SET @limitId = SCOPE_IDENTITY()
  107. IF @@TRANCOUNT > 0
  108. COMMIT TRANSACTION
  109. EXEC proc_errorHandler 0, 'Record has been added successfully.', @limitId
  110. END
  111. ELSE IF @flag = 'a'
  112. BEGIN
  113. IF EXISTS (
  114. SELECT 'X' FROM agentLimitMasterHistory WITH(NOLOCK)
  115. WHERE limitId = @limitId AND createdBy = @user AND approvedBy IS NULL
  116. )
  117. BEGIN
  118. SELECT
  119. mode.*
  120. FROM agentLimitMasterHistory mode WITH(NOLOCK)
  121. INNER JOIN agentLimitMaster main WITH(NOLOCK) ON mode.limitId = main.limitId
  122. WHERE mode.limitId= @limitId AND mode.approvedBy IS NULL
  123. END
  124. ELSE
  125. BEGIN
  126. SELECT
  127. *
  128. FROM agentLimitMaster WITH(NOLOCK) WHERE limitId = @limitId
  129. END
  130. END
  131. ELSE IF @flag = 'u'
  132. BEGIN
  133. IF EXISTS (
  134. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  135. WHERE limitId = @limitId AND ( createdBy <> @user AND approvedBy IS NULL)
  136. )
  137. BEGIN
  138. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet1.', @limitId
  139. RETURN
  140. END
  141. IF EXISTS (
  142. SELECT 'X' FROM agentLimitMasterHistory WITH(NOLOCK)
  143. WHERE limitId = @limitId AND (createdBy<> @user AND approvedBy IS NULL)
  144. )
  145. BEGIN
  146. EXEC proc_errorHandler 1, 'You can not modify this record. Previous modification has not been approved yet2.', @limitId
  147. RETURN
  148. END
  149. BEGIN TRANSACTION
  150. IF EXISTS (SELECT 'X' FROM agentLimitMaster WHERE approvedBy IS NULL AND limitId = @limitId)
  151. BEGIN
  152. UPDATE agentLimitMaster SET
  153. agentId = @agentId
  154. ,currency = @currency
  155. ,drBalLim = @drBalLim
  156. ,modifiedBy = @user
  157. ,modifiedDate = GETDATE()
  158. WHERE limitId = @limitId
  159. END
  160. ELSE
  161. BEGIN
  162. DELETE FROM agentLimitMasterHistory WHERE limitId = @limitId AND approvedBy IS NULL
  163. INSERT INTO agentLimitMasterHistory(
  164. limitId
  165. ,agentId
  166. ,currency
  167. ,drBalLim
  168. ,createdBy
  169. ,createdDate
  170. ,modType
  171. )
  172. SELECT
  173. @limitId
  174. ,@agentId
  175. ,@currency
  176. ,@drBalLim
  177. ,@user
  178. ,GETDATE()
  179. ,'U'
  180. END
  181. IF @@TRANCOUNT > 0
  182. COMMIT TRANSACTION
  183. EXEC proc_errorHandler 0, 'Record updated successfully.', @limitId
  184. END
  185. ELSE IF @flag = 'd'
  186. BEGIN
  187. IF EXISTS (
  188. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  189. WHERE limitId = @limitId AND (createdBy <> @user AND approvedBy IS NULL)
  190. )
  191. BEGIN
  192. EXEC proc_errorHandler 1, 'You can not delete this record. Previous modification has not been approved yet.', @limitId
  193. RETURN
  194. END
  195. IF EXISTS (
  196. SELECT 'X' FROM agentLimitMasterHistory WITH(NOLOCK)
  197. WHERE limitId = @limitId AND approvedBy IS NULL
  198. )
  199. BEGIN
  200. EXEC proc_errorHandler 1, 'You can not delete this record. Previous modification has not been approved yet.', @limitId
  201. RETURN
  202. END
  203. SELECT @agentId = agentId FROM agentLimitMaster WHERE limitId = @limitId
  204. IF EXISTS(SELECT 'X' FROM agentLimitMaster WITH(NOLOCK) WHERE limitId = @limitId AND approvedBy IS NULL AND createdBy = @user)
  205. BEGIN
  206. DELETE FROM agentLimitMaster WHERE limitId = @limitId
  207. EXEC proc_errorHandler 0, 'Record deleted successfully.', @agentId
  208. RETURN
  209. END
  210. INSERT INTO agentLimitMasterHistory(
  211. limitId
  212. ,agentId
  213. ,currency
  214. ,drBalLim
  215. ,createdBy
  216. ,createdDate
  217. ,modType
  218. )
  219. SELECT
  220. limitId
  221. ,agentId
  222. ,currency
  223. ,drBalLim
  224. ,@user
  225. ,GETDATE()
  226. ,'D'
  227. FROM agentLimitMaster
  228. WHERE limitId = @limitId
  229. SET @modType = 'delete'
  230. EXEC proc_errorHandler 0, 'Record deleted successfully.', @agentId
  231. END
  232. ELSE IF @flag = 's'
  233. BEGIN
  234. IF @sortBy IS NULL
  235. SET @sortBy = 'agentName'
  236. IF @sortOrder IS NULL
  237. SET @sortOrder = 'ASC'
  238. SET @table = '(
  239. SELECT
  240. main.limitId
  241. ,am.agentId
  242. ,am.agentName
  243. ,am.agentCountry
  244. ,am.agentGrp
  245. ,currency = ISNULL(cm.currencyCode, ''N/A'')
  246. ,drBalLim = ISNULL(CAST(main.drBalLim AS VARCHAR), ''N/A'')
  247. ,main.createdBy
  248. ,main.createdDate
  249. ,main.modifiedBy
  250. ,haschanged
  251. FROM (
  252. SELECT * FROM agentMaster WHERE parentId = ' + CAST(@parentId AS VARCHAR) + '
  253. )am
  254. LEFT JOIN ' + @table + ' main ON am.agentId = main.agentId
  255. LEFT JOIN currencyMaster cm WITH(NOLOCK) ON main.currency = cm.currencyId
  256. ) x
  257. '
  258. SET @sql_filter = ''
  259. IF @haschanged IS NOT NULL
  260. SET @sql_filter = @sql_filter + ' AND haschanged = ''' + CAST(@haschanged AS VARCHAR) + ''''
  261. IF @agentCountry IS NOT NULL
  262. SET @sql_filter = @sql_filter + ' AND ISNULL(agentCountry, '''') = ''' + @agentCountry + ''''
  263. IF @agentGroup IS NOT NULL
  264. SET @sql_filter = @sql_filter + ' AND ISNULL(agentGrp, '''') = ' + CAST(@agentGroup AS VARCHAR)
  265. IF @agentName IS NOT NULL
  266. SET @sql_filter = @sql_filter + ' AND ISNULL(agentName, '''') LIKE ''%' + @agentName + '%'''
  267. SET @select_field_list ='
  268. limitId
  269. ,agentId
  270. ,agentName
  271. ,agentCountry
  272. ,agentGrp
  273. ,currency
  274. ,drBalLim
  275. ,createdBy
  276. ,createdDate
  277. ,modifiedBy
  278. ,haschanged
  279. '
  280. EXEC dbo.proc_paging
  281. @table
  282. ,@sql_filter
  283. ,@select_field_list
  284. ,@extra_field_list
  285. ,@sortBy
  286. ,@sortOrder
  287. ,@pageSize
  288. ,@pageNumber
  289. END
  290. ELSE IF @flag = 'reject'
  291. BEGIN
  292. IF NOT EXISTS (
  293. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  294. WHERE limitId = @limitId
  295. )
  296. AND
  297. NOT EXISTS (
  298. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  299. WHERE limitId = @limitId AND approvedBy IS NULL
  300. )
  301. BEGIN
  302. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @limitId
  303. RETURN
  304. END
  305. IF EXISTS (SELECT 'X' FROM agentLimitMaster WHERE approvedBy IS NULL AND limitId = @limitId)
  306. BEGIN --New record
  307. BEGIN TRANSACTION
  308. SET @modType = 'Reject'
  309. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @limitId, @oldValue OUTPUT
  310. INSERT INTO #msg(errorCode, msg, id)
  311. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @limitId, @user, @oldValue, @newValue
  312. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  313. BEGIN
  314. IF @@TRANCOUNT > 0
  315. ROLLBACK TRANSACTION
  316. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @limitId
  317. RETURN
  318. END
  319. DELETE FROM agentLimitMaster WHERE limitId = @limitId
  320. IF @@TRANCOUNT > 0
  321. COMMIT TRANSACTION
  322. END
  323. ELSE
  324. BEGIN
  325. BEGIN TRANSACTION
  326. SET @modType = 'Reject'
  327. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @limitId, @oldValue OUTPUT
  328. INSERT INTO #msg(errorCode, msg, id)
  329. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @limitId, @user, @oldValue, @newValue
  330. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  331. BEGIN
  332. IF @@TRANCOUNT > 0
  333. ROLLBACK TRANSACTION
  334. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @limitId
  335. RETURN
  336. END
  337. DELETE FROM agentLimitMasterHistory WHERE limitId = @limitId AND approvedBy IS NULL
  338. IF @@TRANCOUNT > 0
  339. COMMIT TRANSACTION
  340. END
  341. EXEC proc_errorHandler 0, 'Changes rejected successfully.', @limitId
  342. END
  343. ELSE IF @flag = 'approve'
  344. BEGIN
  345. IF NOT EXISTS (
  346. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  347. WHERE limitId = @limitId
  348. )
  349. AND
  350. NOT EXISTS (
  351. SELECT 'X' FROM agentLimitMaster WITH(NOLOCK)
  352. WHERE limitId = @limitId AND approvedBy IS NULL
  353. )
  354. BEGIN
  355. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @limitId
  356. RETURN
  357. END
  358. BEGIN TRANSACTION
  359. IF EXISTS (SELECT 'X' FROM agentLimitMaster WHERE approvedBy IS NULL AND limitId = @limitId )
  360. SET @modType = 'I'
  361. ELSE
  362. SELECT @modType = modType FROM agentLimitMasterHistory WHERE limitId = @limitId AND approvedBy IS NULL
  363. IF @modType = 'I'
  364. BEGIN --New record
  365. UPDATE agentLimitMaster SET
  366. isActive = 'Y'
  367. ,approvedBy = @user
  368. ,approvedDate = GETDATE()
  369. WHERE limitId = @limitId
  370. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @limitId, @newValue OUTPUT
  371. --END
  372. END
  373. ELSE IF @modType = 'U'
  374. BEGIN
  375. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @limitId, @oldValue OUTPUT
  376. UPDATE main SET
  377. main.agentId = mode.agentId
  378. ,main.currency = mode.currency
  379. ,main.drBalLim = mode.drBalLim
  380. ,main.modifiedDate = GETDATE()
  381. ,main.modifiedBy = @user
  382. FROM agentLimitMaster main
  383. INNER JOIN agentLimitMasterHistory mode ON mode.limitId = main.limitId
  384. WHERE mode.limitId = @limitId AND mode.approvedBy IS NULL
  385. EXEC [dbo].proc_GetColumnToRow 'agentLimitMaster', 'limitId', @limitId, @newValue OUTPUT
  386. END
  387. ELSE IF @modType = 'D'
  388. BEGIN
  389. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @limitId, @oldValue OUTPUT
  390. UPDATE agentLimitMaster SET
  391. isDeleted = 'Y'
  392. ,modifiedDate = GETDATE()
  393. ,modifiedBy = @user
  394. WHERE limitId = @limitId
  395. END
  396. UPDATE agentLimitMasterHistory SET
  397. approvedBy = @user
  398. ,approvedDate = GETDATE()
  399. WHERE limitId = @limitId AND approvedBy IS NULL
  400. INSERT INTO #msg(errorCode, msg, id)
  401. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @limitId, @user, @oldValue, @newValue
  402. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  403. BEGIN
  404. IF @@TRANCOUNT > 0
  405. ROLLBACK TRANSACTION
  406. EXEC proc_errorHandler 1, 'Could not approve the changes.', @limitId
  407. RETURN
  408. END
  409. IF @@TRANCOUNT > 0
  410. COMMIT TRANSACTION
  411. EXEC proc_errorHandler 0, 'Changes approved successfully.', @limitId
  412. END
  413. END TRY
  414. BEGIN CATCH
  415. IF @@TRANCOUNT > 0
  416. ROLLBACK TRANSACTION
  417. DECLARE @errorMessage VARCHAR(MAX)
  418. SET @errorMessage = ERROR_MESSAGE()
  419. EXEC proc_errorHandler 1, @errorMessage, @limitId
  420. END CATCH
  421. GO