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.

386 lines
10 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_MatrixReport] Script Date: 7/4/2019 11:35:48 AM ******/
  4. DROP PROCEDURE [dbo].[proc_MatrixReport]
  5. GO
  6. /****** Object: StoredProcedure [dbo].[proc_MatrixReport] Script Date: 7/4/2019 11:35:48 AM ******/
  7. SET ANSI_NULLS ON
  8. GO
  9. SET QUOTED_IDENTIFIER ON
  10. GO
  11. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  12. CREATE PROCEDURE [dbo].[proc_MatrixReport](
  13. --DECLARE
  14. @flag VARCHAR(20)
  15. ,@user VARCHAR(30)
  16. ,@userName VARCHAR(30) = NULL
  17. ,@roleId INT = NULL
  18. ,@functionId VARCHAR(50) = NULL
  19. )
  20. AS
  21. SET NOCOUNT ON
  22. BEGIN TRY
  23. IF @flag = 'udt'
  24. BEGIN
  25. SELECT [dbo].[FNADateFormatTZ](GETDATE(), @user) dt
  26. END
  27. ELSE IF @flag = 'nrl'
  28. BEGIN
  29. SELECT roleId, roleName FROM applicationRoles ORDER BY roleName
  30. RETURN
  31. END
  32. ELSE IF @flag = 'nrlReport'
  33. BEGIN
  34. SELECT
  35. [AGENT NAME] = AM1.agentName+' ('+am.agentName+')',
  36. [USER NAME] = au.firstName + ISNULL(' ' + au.middleName, '') + ISNULL(' ' + au.lastName, '') + '(' + au.userName + ')'
  37. FROM applicationUsers au WITH(NOLOCK)
  38. INNER JOIN applicationUserRoles aur WITH(NOLOCK) ON au.userId = aur.userId
  39. INNER join dbo.agentMaster am WITH(NOLOCK) ON am.agentid = au.agentId
  40. INNER JOIN AGENTMASTER AM1 WITH(NOLOCK) ON AM1.agentId = am.parentId
  41. WHERE aur.roleId = @roleId
  42. and isnull(au.isDeleted,'N') ='N'
  43. and isnull(au.isActive,'Y') = 'Y'
  44. EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
  45. DECLARE @roleName VARCHAR(100)
  46. SELECT
  47. @roleName = ar.roleName
  48. FROM applicationRoles ar WITH(NOLOCK)
  49. WHERE ar.roleId = @roleId
  50. SELECT
  51. 'Role Name' head
  52. ,@roleName value
  53. SELECT 'User Matrix Report (Role � User)' title
  54. END
  55. ELSE IF @flag = 'nrlReport2'
  56. BEGIN
  57. SELECT
  58. Name = am.menuGroup + '' + am.menuName + '' + af.functionName
  59. FROM applicationMenus am WITH(NOLOCK)
  60. INNER JOIN applicationFunctions af WITH(NOLOCK) ON am.functionId = af.parentFunctionId
  61. INNER JOIN applicationRoleFunctions arf WITH(NOLOCK) ON af.functionId = arf.functionId
  62. WHERE arf.roleId = @roleId
  63. ORDER BY am.menuGroup , am.menuName, af.functionName
  64. EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
  65. SELECT
  66. @roleName = ar.roleName
  67. FROM applicationRoles ar WITH(NOLOCK)
  68. WHERE ar.roleId = @roleId
  69. SELECT
  70. 'Role Name' head
  71. ,@roleName value
  72. SELECT 'User Matrix Report (Role � Function)' title
  73. END
  74. ELSE IF @flag = 'nfl'
  75. BEGIN
  76. SELECT
  77. af.functionId
  78. ,functionName = am.menuGroup + '' + am.menuName + '' + af.functionName
  79. FROM applicationMenus am WITH(NOLOCK)
  80. INNER JOIN applicationFunctions af WITH(NOLOCK) ON am.functionId = af.parentFunctionId
  81. ORDER BY am.menuGroup , am.menuName, af.functionName
  82. RETURN
  83. END
  84. ELSE IF @flag = 'nflReport'
  85. BEGIN
  86. SELECT
  87. Name = au.firstName + ISNULL(' ' + au.middleName, '') + ISNULL(' ' + au.lastName, '') + '(' + au.userName + ')'
  88. ,Type = 'USER '
  89. INTO #rTmp
  90. FROM applicationUsers au
  91. INNER JOIN (
  92. SELECT
  93. arf.functionId functionId
  94. ,aur.userId
  95. FROM applicationRoleFunctions arf WITH(NOLOCK)
  96. INNER JOIN applicationUserRoles aur WITH(NOLOCK) ON arf.roleId = aur.roleId
  97. WHERE arf.roleId IN (SELECT roleId FROM applicationUserRoles)
  98. UNION
  99. SELECT
  100. auf.functionId functionId
  101. ,auf.userId
  102. FROM applicationUserFunctions auf WITH(NOLOCK)
  103. ) x ON au.userId = x.userId
  104. WHERE x.functionId = @functionId
  105. ORDER BY au.firstName
  106. INSERT INTO #rTmp
  107. SELECT
  108. Name = ar.roleName
  109. ,Type = '[ROLE]'
  110. FROM applicationRoleFunctions arf WITH(NOLOCK)
  111. INNER JOIN applicationRoles ar WITH(NOLOCK) ON arf.roleId = ar.roleId
  112. WHERE functionId = @functionId
  113. ORDER BY ar.roleName
  114. SELECT * FROM #rTmp
  115. EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
  116. DECLARE @functionName VARCHAR(500)
  117. SELECT
  118. @functionName = am.menuGroup + '' + am.menuName + '' + af.functionName
  119. FROM applicationMenus am WITH(NOLOCK)
  120. INNER JOIN applicationFunctions af WITH(NOLOCK) ON am.functionId = af.parentFunctionId
  121. WHERE af.functionId = @functionId
  122. SELECT
  123. 'Function Name' head
  124. ,@functionName value
  125. SELECT 'User Matrix Report (Function)' title
  126. END
  127. ELSE IF @flag = 'report'
  128. BEGIN
  129. IF @userName IS NOT NULL
  130. BEGIN
  131. IF NOT EXISTS(SELECT 'x' FROM applicationUsers au WITH(NOLOCK) WHERE au.userName = @userName)
  132. BEGIN
  133. EXEC proc_errorHandler '1', 'User Does not exists.', NULL
  134. EXEC proc_errorHandler '1', 'User Does not exists.', NULL
  135. RETURN
  136. END
  137. END
  138. IF OBJECT_ID('tempdb..#userList') IS NOT NULL
  139. DROP TABLE #userList
  140. CREATE TABLE #userList(
  141. rowId INT IDENTITY(1, 1)
  142. ,userName VARCHAR(30)
  143. ,Name VARCHAR(50)
  144. ,department VARCHAR(50)
  145. ,branch VARCHAR(50)
  146. ,supervisor VARCHAR(50)
  147. )
  148. INSERT INTO #userList(userName, Name, department, branch, supervisor)
  149. SELECT
  150. au.userName
  151. ,au.userName + ' (' + ISNULL(au.firstName, '') + ISNULL(' ' + au.middleName, '') + ISNULL(' ' + au.lastName, '')+')' fullName
  152. ,''
  153. ,am.agentName
  154. ,''
  155. FROM applicationUsers au WITH(NOLOCK)
  156. LEFT JOIN agentMaster am WITH(NOLOCK) ON au.agentId = am.agentId
  157. WHERE au.userName = ISNULL(@userName, au.userName)
  158. AND ISNULL(au.isActive, 'N') = 'Y'
  159. --ORDER BY ISNULL(au1.firstName, '') asc
  160. SELECT * FROM #userList
  161. IF OBJECT_ID('tempdb..#report') IS NOT NULL
  162. DROP TABLE #report
  163. CREATE TABLE #report(
  164. module VARCHAR(50)
  165. ,modulePostion INT
  166. ,[group] VARCHAR(50)
  167. ,groupPostion INT
  168. ,[menu] VARCHAR(50)
  169. ,menuPostion INT
  170. ,id INT
  171. )
  172. DECLARE
  173. @sql VARCHAR(MAX)
  174. ,@fieldList VARCHAR(MAX)
  175. ,@fieldListAdd VARCHAR(MAX)
  176. ,@fieldListSelect VARCHAR(MAX)
  177. ,@fieldCond VARCHAR(MAX)
  178. SELECT
  179. @fieldList = ISNULL(@fieldList + ',' , '') + '[' + functionName + ']'
  180. ,@fieldCond = ISNULL(@fieldCond + ' OR ' , '') + '[' + functionName + '] IS NOT NULL '
  181. ,@fieldListAdd = ISNULL(@fieldListAdd + ',' , '') + '[' + functionName + '] VARCHAR(100)'
  182. ,@fieldListSelect = ISNULL(@fieldListSelect + ',' , '')
  183. + '[' + functionName + '] ['
  184. +
  185. CASE functionName
  186. WHEN 'Assign Functions' THEN 'Assign<br />Functions'
  187. WHEN 'Assign Roles' THEN 'Assign<br />Roles'
  188. WHEN 'View History' THEN 'View<br />History'
  189. WHEN 'Approve/Reject' THEN 'Approve<br />Reject'
  190. WHEN 'Add/Edit' THEN 'Add<br />Edit'
  191. ELSE functionName
  192. END
  193. + ']'
  194. FROM (
  195. --------SELECT DISTINCT
  196. -------- functionName
  197. --------FROM applicationFunctions
  198. SELECT DISTINCT functionName
  199. FROM applicationFunctions aF WITH (NOLOCK)
  200. INNER JOIN (
  201. select DISTINCT functionId from applicationRoleFunctions ARF
  202. INNER JOIN applicationUserRoles AUR ON ARF.roleId = AUR.roleId
  203. INNER JOIN applicationUserS AU ON AU.userId = AUR.userId
  204. WHERE AU.userName = @userName
  205. ) X ON aF.functionId = X.functionId
  206. INNER JOIN applicationMenus AM ON AM.functionId = aF.parentFunctionId
  207. ) x
  208. SET @sql = 'ALTER TABLE #report ADD ' + @fieldListAdd
  209. EXEC (@sql)
  210. --SELECT * FROM staticDataValue where typeID = 1400
  211. WHILE EXISTS(SELECT 'X' FROM #userList)
  212. BEGIN
  213. SELECT TOP 1 @userName = userName FROM #userList
  214. DECLARE @userId VARCHAR(20)
  215. SELECT @userId = userId FROM applicationUsers WITH(NOLOCK) WHERE userName = @userName
  216. SET @sql = '
  217. SELECT
  218. sdv.detailDesc [Module]
  219. ,CASE am.Module
  220. WHEN ''10'' THEN 10
  221. WHEN ''20'' THEN 20
  222. WHEN ''30'' THEN 30
  223. ELSE 100
  224. END [modulePostion]
  225. ,am.menuGroup [Group]
  226. ,am.groupPosition
  227. ,x.menuName [Menu]
  228. ,am.position
  229. ,ROW_NUMBER() OVER(ORDER BY
  230. CASE am.Module
  231. WHEN ''10'' THEN 10
  232. WHEN ''20'' THEN 20
  233. WHEN ''30'' THEN 30
  234. ELSE 100
  235. END ASC
  236. ,am.groupPosition ASC, am.position) Id
  237. ,' + @fieldList + '
  238. FROM (
  239. SELECT
  240. menuName
  241. ,' + @fieldList + '
  242. FROM (
  243. SELECT
  244. am.menuName
  245. ,af.functionName
  246. ,CASE WHEN x.functionId IS NOT NULL THEN ''x'' ELSE NULL END hasAccess
  247. FROM applicationMenus am
  248. INNER JOIN applicationFunctions af ON am.functionId = af.parentFunctionId
  249. LEFT JOIN(
  250. SELECT
  251. userId = ''' + @userId + '''
  252. ,arf.functionId functionId
  253. FROM applicationRoleFunctions arf WITH(NOLOCK)
  254. WHERE roleId IN (SELECT roleId FROM applicationUserRoles WHERE userId =''' + @userId + ''')
  255. UNION
  256. SELECT
  257. userId = ''' + @userId + '''
  258. ,auf.functionId functionId
  259. FROM applicationUserFunctions auf WITH(NOLOCK)
  260. WHERE userId = ''' + @userId + '''
  261. ) x ON af.functionId = x.functionId
  262. ) x
  263. PIVOT
  264. (
  265. MAX (hasAccess)
  266. FOR functionName IN
  267. (
  268. ' + @fieldList + '
  269. )
  270. ) AS pvt
  271. )x
  272. INNER JOIN applicationMenus am ON am.menuName = x.menuName
  273. INNER JOIN staticDataValue sdv ON am.module = sdv.valueId
  274. '
  275. TRUNCATE TABLE #report
  276. INSERT INTO #report
  277. EXEC(@sql)
  278. SET @sql = '
  279. SELECT
  280. [Module] = CASE WHEN [Module] = ISNULL((SELECT TOP 1 [Module] FROM #report WHERE id = r.id - 1), '''') THEN NULL ELSE ''<span class="moduleGroup">'' + [Module] + ''</span>'' END
  281. ,[Group] = CASE
  282. WHEN (
  283. [Group] = ISNULL((SELECT TOP 1 [Group] FROM #report WHERE id = r.id - 1), '''') AND
  284. [Module] = ISNULL((SELECT TOP 1 [Module] FROM #report WHERE id = r.id - 1), '''')
  285. ) THEN NULL
  286. ELSE ''<span class="menu">'' + [Group] + ''</span>''
  287. END
  288. ,[Menu] = ''<span class="subMenu">'' + [Menu] + ''</span>''
  289. ,' + @fieldListSelect + '
  290. FROM #report r
  291. WHERE ('+@fieldCond +')'
  292. PRINT @sql
  293. EXEC(@sql)
  294. DELETE FROM #userList WHERE userName = @userName
  295. --select * FROM #report
  296. END
  297. EXEC proc_errorHandler '0', 'Report has been prepared successfully.', NULL
  298. SELECT
  299. 'User Name' head
  300. ,@userName value
  301. UNION ALL
  302. SELECT
  303. 'Full Name' head
  304. ,ISNULL(au.firstName, '') + ISNULL(' ' + au.middleName, '') + ISNULL(' ' + au.lastName, '') Value
  305. FROM applicationUsers au WITH(NOLOCK) WHERE au.userName = @userName
  306. SELECT 'User Matrix Report' title
  307. RETURN
  308. END
  309. ELSE
  310. BEGIN
  311. EXEC proc_errorHandler '1', 'Error', NULL
  312. EXEC proc_errorHandler '1', 'Error', NULL
  313. END
  314. END TRY
  315. BEGIN CATCH
  316. DECLARE @msg VARCHAR(100)
  317. SET @msg = ERROR_MESSAGE()
  318. EXEC proc_errorHandler '1', @msg, NULL
  319. EXEC proc_errorHandler '1', @msg, NULL
  320. END CATCH
  321. GO