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.

538 lines
17 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_agentUserLimit] Script Date: 7/4/2019 11:35:48 AM ******/
  4. DROP PROCEDURE [dbo].[proc_agentUserLimit]
  5. GO
  6. /****** Object: StoredProcedure [dbo].[proc_agentUserLimit] 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_agentUserLimit]
  12. @flag VARCHAR(50) = NULL
  13. ,@user VARCHAR(30) = NULL
  14. ,@userLimitId INT = NULL
  15. ,@agentId INT = NULL
  16. ,@userId INT = NULL
  17. ,@currencyId INT = NULL
  18. ,@payLimit MONEY = NULL
  19. ,@sendLimit MONEY = NULL
  20. ,@isEnable CHAR(1) = 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. ,@modType VARCHAR(6)
  44. ,@oldAgent INT
  45. ,@ApprovedFunctionId VARCHAR(8)
  46. SELECT
  47. @logIdentifier = 'userLimitId'
  48. ,@logParamMain = 'userLimit'
  49. ,@logParamMod = 'userLimitMod'
  50. ,@module = '20'
  51. ,@tableAlias = 'User Limit Setup'
  52. ,@ApprovedFunctionId = '10101130'
  53. IF @flag IN ('s')
  54. BEGIN
  55. --SELECT * FROM userLimit
  56. SET @table = '(
  57. SELECT
  58. userLimitId = ISNULL(mode.userLimitId, main.userLimitId)
  59. ,currencyId = ISNULL(mode.currencyId, main.currencyId)
  60. ,userId = ISNULL(mode.userId, main.userId)
  61. ,payLimit = ISNULL(mode.payLimit,main.payLimit)
  62. ,sendLimit = ISNULL(mode.sendLimit,main.sendLimit)
  63. ,isEnable = ISNULL(mode.isEnable,main.isEnable)
  64. ,main.createdBy
  65. ,main.createdDate
  66. ,modifiedDate = CASE WHEN main.approvedBy IS NULL THEN main.createdDate ELSE mode.createdDate END
  67. ,modifiedBy = CASE WHEN main.approvedBy IS NULL THEN main.createdBy ELSE mode.createdBy END
  68. ,hasChanged = CASE WHEN (main.approvedBy IS NULL) OR
  69. (mode.userLimitId IS NOT NULL)
  70. THEN ''Y'' ELSE ''N'' END
  71. FROM userLimit main WITH(NOLOCK)
  72. LEFT JOIN userLimitMod mode ON main.userLimitId = mode.userLimitId
  73. AND (
  74. mode.createdBy = ''' + @user + '''
  75. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  76. )
  77. WHERE ISNULL(main.isDeleted, ''N'') <> ''Y''
  78. AND (
  79. main.approvedBy IS NOT NULL
  80. OR main.createdBy = ''' + @user + '''
  81. OR ''Y'' = dbo.FNAHasRight(''' + @user + ''',' + CAST(@ApprovedFunctionId AS VARCHAR) + ')
  82. )
  83. --AND NOT(ISNULL(mode.modType, '''') = ''D'' AND mode.createdBy = ''' + @user + ''')
  84. ) '
  85. END
  86. IF @flag = 'i'
  87. BEGIN
  88. --select * from userLimit
  89. IF EXISTS(SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE currencyId = @currencyId AND userId=@userId AND ISNULL(isDeleted,'N')<>'y')
  90. BEGIN
  91. EXEC proc_errorHandler 1, 'Record already exists!',@currencyId
  92. RETURN
  93. END
  94. BEGIN TRANSACTION
  95. INSERT INTO userLimit (
  96. currencyId
  97. ,userId
  98. ,payLimit
  99. ,sendLimit
  100. ,isEnable
  101. ,createdBy
  102. ,createdDate
  103. )
  104. SELECT
  105. @currencyId
  106. ,@userId
  107. ,@payLimit
  108. ,@sendLimit
  109. ,@isEnable
  110. ,@user
  111. ,GETDATE()
  112. SET @modType = 'Insert'
  113. COMMIT TRANSACTION
  114. EXEC proc_errorHandler 0, 'Record has been added successfully.', @userLimitId
  115. END
  116. ELSE IF @flag = 'u'
  117. BEGIN
  118. --select * from userLimit
  119. IF EXISTS(SELECT 'X' FROM userLimit WHERE currencyId = @currencyId AND userId = @userId and userLimitId <> @userLimitId
  120. AND ISNULL(isDeleted, 'N') <> 'Y')
  121. BEGIN
  122. EXEC proc_errorHandler 1, 'Record already exists!', @userLimitId
  123. RETURN
  124. END
  125. BEGIN TRANSACTION
  126. IF EXISTS (SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE userLimitId = @userLimitId AND approvedBy IS NULL AND createdBy = @user)
  127. BEGIN
  128. UPDATE userLimit SET
  129. currencyId = @currencyId
  130. ,userId = @userId
  131. ,payLimit = @payLimit
  132. ,sendLimit = @sendLimit
  133. ,isEnable = @isEnable
  134. ,modifiedBy = @user
  135. ,modifiedDate = GETDATE()
  136. WHERE userLimitId = @userLimitId
  137. END
  138. ELSE
  139. BEGIN
  140. DELETE FROM userLimitMod WHERE userLimitId = @userLimitId
  141. INSERT INTO userLimitMod (
  142. userLimitId
  143. ,currencyId
  144. ,userId
  145. ,payLimit
  146. ,sendLimit
  147. ,isEnable
  148. ,createdDate
  149. ,createdBy
  150. ,modType
  151. )
  152. SELECT
  153. @userLimitId
  154. ,@currencyId
  155. ,@userId
  156. ,@payLimit
  157. ,@sendLimit
  158. ,@isEnable
  159. ,GETDATE()
  160. ,@user
  161. ,'U'
  162. END
  163. COMMIT TRANSACTION
  164. EXEC proc_errorHandler 0, 'Record updated successfully', @userLimitId
  165. END
  166. ELSE IF @flag = 'a'
  167. BEGIN
  168. IF EXISTS (SELECT 'X' FROM userLimitMod WITH(NOLOCK) WHERE userLimitId = @userLimitId AND createdBy = @user)
  169. BEGIN
  170. SELECT
  171. userLimitId, currencyId, userId
  172. ,payLimit = dbo.[ShowDecimalExceptComma](payLimit)
  173. ,sendLimit = dbo.[ShowDecimalExceptComma](sendLimit)
  174. ,isEnable = ISNULL(isEnable, 'N')
  175. FROM userLimitMod WITH(NOLOCK)
  176. WHERE userLimitId = @userLimitId
  177. END
  178. ELSE
  179. BEGIN
  180. SELECT
  181. userLimitId, currencyId, userId
  182. ,payLimit = dbo.[ShowDecimalExceptComma](payLimit)
  183. ,sendLimit = dbo.[ShowDecimalExceptComma](sendLimit)
  184. ,isEnable = ISNULL(isEnable, 'N')
  185. FROM userLimit WITH(NOLOCK)
  186. WHERE userLimitId = @userLimitId
  187. END
  188. END
  189. ELSE IF @flag='d'--- deleting agent user limit
  190. BEGIN
  191. IF EXISTS (SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE userLimitId = @userLimitId AND approvedBy IS NULL AND createdBy <> @user)
  192. BEGIN
  193. EXEC proc_errorHandler 1, 'You can not delete this record. Previous Modification has not been approved yet.', @userLimitId
  194. RETURN
  195. END
  196. IF EXISTS (SELECT 'X' FROM userLimitMod WITH(NOLOCK) WHERE userLimitId = @userLimitId AND createdBy <> @user)
  197. BEGIN
  198. EXEC proc_errorHandler 1, 'You can not delete this record. Previous Modification has not been approved yet.', @userLimitId
  199. RETURN
  200. END
  201. BEGIN TRANSACTION
  202. IF EXISTS (SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE userLimitId = @userLimitId AND approvedBy IS NULL AND createdBy = @user)
  203. BEGIN
  204. DELETE FROM userLimit WHERE userLimitId = @userLimitId
  205. END
  206. ELSE
  207. BEGIN
  208. INSERT INTO userLimitMod (
  209. userLimitId
  210. ,currencyId
  211. ,userId
  212. ,payLimit
  213. ,sendLimit
  214. ,isEnable
  215. ,createdDate
  216. ,createdBy
  217. ,modType
  218. )
  219. SELECT
  220. userLimitId
  221. ,currencyId
  222. ,userId
  223. ,payLimit
  224. ,sendLimit
  225. ,isEnable
  226. ,GETDATE()
  227. ,@user
  228. ,'D'
  229. FROM userLimit WHERE userLimitId = @userLimitId
  230. END
  231. COMMIT TRANSACTION
  232. EXEC proc_errorHandler 0, 'Record deleted successfully', @userLimitId
  233. END
  234. ELSE IF @flag IN ('s')
  235. BEGIN
  236. IF @sortBy IS NULL
  237. SET @sortBy = 'userLimitId'
  238. IF @sortOrder IS NULL
  239. SET @sortOrder = 'ASC'
  240. SET @table = '(
  241. SELECT
  242. main.userLimitId
  243. ,cm.currencyCode
  244. ,au.userName
  245. ,main.payLimit
  246. ,main.sendLimit
  247. ,main.createdBy
  248. ,createdDate = convert(varchar,main.createdDate,107)
  249. ,main.modifiedBy
  250. ,main.haschanged
  251. FROM ' + @table + ' main
  252. INNER JOIN currencyMaster cm WITH(NOLOCK) ON main.currencyId = cm.currencyId
  253. INNER JOIN applicationUsers au WITH(NOLOCK) ON au.userId = main.userId
  254. WHERE main.userId = ' + CAST(@userId AS VARCHAR) + '
  255. ) x'
  256. PRINT @table
  257. SET @sql_filter = ''
  258. SET @sql_filter = @sql_filter
  259. SET @select_field_list ='
  260. userLimitId
  261. ,currencyCode
  262. ,userName
  263. ,payLimit
  264. ,sendLimit
  265. ,createdBy
  266. ,createdDate
  267. ,modifiedBy
  268. ,haschanged
  269. '
  270. EXEC dbo.proc_paging
  271. @table
  272. ,@sql_filter
  273. ,@select_field_list
  274. ,@extra_field_list
  275. ,@sortBy
  276. ,@sortOrder
  277. ,@pageSize
  278. ,@pageNumber
  279. END
  280. ELSE IF @flag='s1'-- populating agent label
  281. begin
  282. SELECT agentName,b.userName FROM agentMaster a inner join applicationUsers b on a.agentId=b.agentId
  283. where b.userId=@userId
  284. end
  285. ELSE IF @flag='s2'-- populating agent currency type
  286. begin
  287. --Exec proc_agentUserLimit @flag='s2',@agentId='3859',@currencyId='4'
  288. --select * from agentCurrency
  289. DECLARE @countryId INT
  290. SELECT @countryId = agentCountryId FROM agentMaster WITH(NOLOCK) WHERE agentId = @agentId
  291. IF EXISTS(SELECT 'X' FROM countryCurrency WHERE countryId = @countryId AND currencyId = @currencyId AND ISNULL(isDeleted, 'N') = 'N' AND applyToAgent = 'Y')
  292. BEGIN
  293. SELECT spFlag FROM countryCurrency WITH(NOLOCK) WHERE countryId = @countryId AND currencyId = @currencyId AND ISNULL(isDeleted, 'N') = 'N' AND applyToAgent = 'Y'
  294. END
  295. ELSE
  296. BEGIN
  297. IF EXISTS(SELECT 'X' FROM agentCurrency WHERE currencyId = @currencyId AND agentId = @agentId AND ISNULL(isDeleted, 'N') = 'N')
  298. BEGIN
  299. SELECT spFlag FROM agentCurrency WHERE currencyId = @currencyId AND agentId = @agentId AND ISNULL(isDeleted, 'N') = 'N'
  300. RETURN
  301. END
  302. SET @oldAgent=@agentId
  303. SELECT @agentId = parentId FROM agentMaster WHERE agentId = @oldAgent
  304. IF EXISTS(SELECT 'X' FROM agentCurrency WHERE currencyId = @currencyId AND agentId = @agentId AND ISNULL(isDeleted, 'N') = 'N')
  305. BEGIN
  306. SELECT spFlag FROM agentCurrency WHERE currencyId = @currencyId AND agentId = @agentId AND ISNULL(isDeleted, 'N') = 'N'
  307. RETURN
  308. END
  309. SET @oldAgent=@agentId
  310. SELECT @agentId = parentId FROM agentMaster WHERE agentId=@oldAgent
  311. IF EXISTS(SELECT 'X' FROM agentCurrency WHERE currencyId = @currencyId AND agentId=@agentId AND ISNULL(isDeleted, 'N') = 'N')
  312. BEGIN
  313. SELECT spFlag FROM agentCurrency WHERE currencyId = @currencyId AND agentId = @agentId AND ISNULL(isDeleted, 'N') = 'N'
  314. RETURN
  315. END
  316. IF EXISTS(SELECT TOP 1 * FROM agentCurrency WHERE currencyId = @currencyId AND agentId = (SELECT dbo.FNAGetSuperAgent(@agentId)))
  317. BEGIN
  318. SELECT spFlag FROM agentCurrency WHERE currencyId = @currencyId AND agentId = (SELECT dbo.FNAGetSuperAgent(@agentId))
  319. RETURN
  320. END
  321. SELECT '' AS spFlag
  322. END
  323. end
  324. else if @flag='dl'---populating currency for agent
  325. begin
  326. declare @agentType as int,@superAgentId as int,@originalAgentId as int
  327. select @agentId=agentId from applicationUsers where userId=@userId
  328. select @agentType=agentType from agentMaster where agentId=@agentId
  329. set @originalAgentId=@agentId
  330. if exists(select 'X' from agentCurrency where agentId=@agentId)
  331. begin
  332. select b.currencyId,b.currencyCode
  333. from agentCurrency a inner join currencyMaster b on a.currencyId=b.currencyId
  334. where agentId=@agentId
  335. return;
  336. end
  337. set @oldAgent=@agentId
  338. select @agentId=parentId from agentMaster where agentId=@oldAgent
  339. if exists(select 'X' from agentCurrency where agentId=@agentId)
  340. begin
  341. select b.currencyId,b.currencyCode
  342. from agentCurrency a inner join currencyMaster b on a.currencyId=b.currencyId
  343. where agentId=@agentId
  344. return;
  345. end
  346. set @oldAgent=@agentId
  347. select @agentId=parentId from agentMaster where agentId=@oldAgent
  348. if exists(select 'X' from agentCurrency where agentId=@agentId)
  349. begin
  350. select b.currencyId,b.currencyCode
  351. from agentCurrency a inner join currencyMaster b on a.currencyId=b.currencyId
  352. where agentId=@agentId
  353. return;
  354. end
  355. select @superAgentId =dbo.FNAGetSuperAgent(@originalAgentId)
  356. -- exec [proc_agentUserLimit] @flag='dl',@agentId='7'
  357. if exists(select top 1 * from countryCurrency where countryId =(select agentCountryId from agentMaster where agentId= @superAgentId ))
  358. begin
  359. select b.currencyId,b.currencyCode from countryCurrency a inner join currencyMaster b on a.currencyId=b.currencyId
  360. where countryId =(select agentCountryId from agentMaster where agentId= @superAgentId)
  361. return;
  362. end
  363. select b.currencyId,b.currencyCode
  364. from agentCurrency a inner join currencyMaster b on a.currencyId=b.currencyId
  365. where 1=2
  366. end
  367. ELSE IF @flag = 'reject'
  368. BEGIN
  369. IF NOT EXISTS (SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE userLimitId = @userLimitId AND approvedBy IS NULL)
  370. AND
  371. NOT EXISTS(SELECT 'X' FROM userLimitMod WITH(NOLOCK) WHERE userLimitId = @userLimitId )
  372. BEGIN
  373. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @userLimitId
  374. RETURN
  375. END
  376. IF EXISTS (SELECT 'X' FROM userLimit WHERE userLimitId = @userLimitId AND approvedBy IS NULL)
  377. BEGIN --New record
  378. BEGIN TRANSACTION
  379. SET @modType = 'Reject'
  380. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @oldValue OUTPUT
  381. INSERT INTO #msg(errorCode, msg, id)
  382. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @userLimitId, @user, @oldValue, @newValue
  383. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  384. BEGIN
  385. IF @@TRANCOUNT > 0
  386. ROLLBACK TRANSACTION
  387. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @userLimitId
  388. RETURN
  389. END
  390. DELETE FROM userLimit WHERE userLimitId = @userLimitId
  391. IF @@TRANCOUNT > 0
  392. COMMIT TRANSACTION
  393. END
  394. ELSE
  395. BEGIN
  396. BEGIN TRANSACTION
  397. SET @modType = 'Reject'
  398. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @oldValue OUTPUT
  399. INSERT INTO #msg(errorCode, msg, id)
  400. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @userLimitId, @user, @oldValue, @newValue
  401. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  402. BEGIN
  403. IF @@TRANCOUNT > 0
  404. ROLLBACK TRANSACTION
  405. EXEC proc_errorHandler 1, 'Failed to reject the transaction.', @userLimitId
  406. RETURN
  407. END
  408. DELETE FROM userLimitMod WHERE @userLimitId = @userLimitId
  409. IF @@TRANCOUNT > 0
  410. COMMIT TRANSACTION
  411. END
  412. EXEC proc_errorHandler 0, 'Changes rejected successfully.', @userLimitId
  413. END
  414. ELSE IF @flag = 'approve'
  415. BEGIN
  416. IF NOT EXISTS (SELECT 'X' FROM userLimit WITH(NOLOCK) WHERE userLimitId = @userLimitId AND approvedBy IS NULL)
  417. AND
  418. NOT EXISTS(SELECT 'X' FROM userLimitMod WITH(NOLOCK) WHERE userLimitId = @userLimitId )
  419. BEGIN
  420. EXEC proc_errorHandler 1, '<center>Modification approval is not pending.</center>', @userLimitId
  421. RETURN
  422. END
  423. BEGIN TRANSACTION
  424. IF EXISTS (SELECT 'X' FROM userLimit WHERE approvedBy IS NULL AND userLimitId = @userLimitId)
  425. SET @modType = 'I'
  426. ELSE
  427. SELECT @modType = modType FROM userLimitMod WHERE userLimitId = @userLimitId
  428. IF @modType = 'I'
  429. BEGIN --New record
  430. UPDATE userLimit SET
  431. isActive = 'Y'
  432. ,approvedBy = @user
  433. ,approvedDate= GETDATE()
  434. WHERE userLimitId = @userLimitId
  435. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @newValue OUTPUT
  436. END
  437. ELSE IF @modType = 'U'
  438. BEGIN
  439. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @oldValue OUTPUT
  440. UPDATE main SET
  441. main.userId = mode.userId
  442. ,main.currencyId = mode.currencyId
  443. ,main.payLimit = mode.payLimit
  444. ,main.sendLimit = mode.sendLimit
  445. ,main.isEnable = mode.isEnable
  446. ,main.modifiedDate = GETDATE()
  447. ,main.modifiedBy = @user
  448. FROM userLimit main
  449. INNER JOIN userLimitMod mode ON mode.userLimitId= main.userLimitId
  450. WHERE mode.userLimitId = @userLimitId
  451. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @newValue OUTPUT
  452. END
  453. ELSE IF @modType = 'D'
  454. BEGIN
  455. EXEC [dbo].proc_GetColumnToRow @logParamMain, @logIdentifier, @userLimitId, @oldValue OUTPUT
  456. UPDATE userLimit SET
  457. isDeleted = 'Y'
  458. ,isActive = 'N'
  459. ,modifiedDate = GETDATE()
  460. ,modifiedBy = @user
  461. WHERE userLimitId = @userLimitId
  462. END
  463. DELETE FROM userLimitMod WHERE userLimitId = @userLimitId
  464. INSERT INTO #msg(errorCode, msg, id)
  465. EXEC proc_applicationLogs 'i', NULL, @modType, @tableAlias, @userLimitId, @user, @oldValue, @newValue
  466. IF EXISTS (SELECT 'x' FROM #msg WHERE errorCode <> '0')
  467. BEGIN
  468. IF @@TRANCOUNT > 0
  469. ROLLBACK TRANSACTION
  470. EXEC proc_errorHandler 1, 'Could not approve the changes.', @userLimitId
  471. RETURN
  472. END
  473. IF @@TRANCOUNT > 0
  474. COMMIT TRANSACTION
  475. EXEC proc_errorHandler 0, 'Changes approved successfully.', @userLimitId
  476. END
  477. END TRY
  478. BEGIN CATCH
  479. IF @@TRANCOUNT > 0
  480. ROLLBACK TRANSACTION
  481. DECLARE @errorMessage VARCHAR(MAX)
  482. SET @errorMessage = ERROR_MESSAGE()
  483. EXEC proc_errorHandler 1, @errorMessage, @userLimitId
  484. END CATCH
  485. GO