/****** vwPNetAdminUsuarios_Empresa ******/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'vwPNetAdminUsuarios_Empresa' AND TYPE = 'V') DROP VIEW dbo.vwPNetAdminUsuarios_Empresa
GO  
CREATE VIEW dbo.vwPNetAdminUsuarios_Empresa
-- WITH ENCRYPTION  
AS
	SELECT E.Empresa, E.Nombre, LTRIM(RTRIM(E.Estatus)) Estatus, SUM(G.Usuario) Usuarios
	  FROM Empresa E
	  JOIN (
		SELECT E.Empresa, E.Nombre, COUNT(U.Usuario) Usuario
		  FROM Empresa E LEFT JOIN UsuarioD D on E.Empresa = D.Empresa JOIN Usuario U ON D.Usuario = U.Usuario
		 GROUP BY E.Empresa, E.Nombre
		UNION
		SELECT E.Empresa, E.Nombre, COUNT(U.Usuario) Usuario
		  FROM Empresa E LEFT JOIN Usuario U on E.Empresa = U.DefEmpresa
		 GROUP BY E.Empresa, E.Nombre
	  ) AS G ON E.Empresa = G.Empresa
	 GROUP BY E.Empresa, E.Nombre, E.Estatus
GO

/****** vwPNetAdminUsuarios_Sucursal ******/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'vwPNetAdminUsuarios_Sucursal' AND TYPE = 'V') DROP VIEW dbo.vwPNetAdminUsuarios_Sucursal
GO  
CREATE VIEW dbo.vwPNetAdminUsuarios_Sucursal
-- WITH ENCRYPTION  
AS
	SELECT S.Sucursal, S.Nombre, LTRIM(RTRIM(S.Estatus)) Estatus, MAX(G.Usuario) Usuarios
	  FROM Sucursal S
	  JOIN (
		SELECT S.Sucursal, S.Nombre, COUNT(U.Usuario) Usuario
		  FROM Sucursal S LEFT JOIN UsuarioSucursalAcceso A on S.Sucursal = A.Sucursal JOIN Usuario U ON A.Usuario = U.Usuario
		 GROUP BY S.Sucursal, S.Nombre
		UNION
		SELECT S.Sucursal, S.Nombre, COUNT(U.Usuario) Usuario
		  FROM Sucursal S LEFT JOIN Usuario U on S.Sucursal = U.Sucursal
		 GROUP BY S.Sucursal, S.Nombre
	  ) AS G ON S.Sucursal = G.Sucursal
	 GROUP BY S.Sucursal, S.Nombre, S.Estatus
GO

/****** vwPNetAdminUsuarios_Usuario ******/
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'vwPNetAdminUsuarios_Usuario' AND TYPE = 'V') DROP VIEW dbo.vwPNetAdminUsuarios_Usuario
GO  
CREATE VIEW dbo.vwPNetAdminUsuarios_Usuario
-- WITH ENCRYPTION  
AS
	SELECT	U.Usuario, U.Nombre, ISNULL(U.Telefono, '') Telefono, ISNULL(U.Email, '') Email, ISNULL(RP.IDRole, '') IDRole, ISNULL(R.Descripcion, '') DescripcionRole, 
			ISNULL(U.DefEmpresa, '') DefEmpresa, ISNULL(CAST(U.Sucursal AS VARCHAR(10)), '') DefSucursal, LTRIM(RTRIM(U.Estatus)) Estatus, 
			CASE WHEN CHARINDEX(U.DefEmpresa, D.Empresas) = 1 THEN ISNULL(D.Empresas, '') ELSE CONCAT(ISNULL(U.DefEmpresa, ''), 
				(CASE WHEN (U.DefEmpresa IS NOT NULL AND D.Empresas IS NOT NULL) THEN ',' ELSE '' END), D.Empresas) END Empresas, 
			CASE WHEN CHARINDEX(CAST(U.Sucursal AS VARCHAR(MAX)), SA.Sucursales) = 1 THEN ISNULL(SA.Sucursales, '') ELSE CONCAT(CAST(U.Sucursal as varchar(10)),  
				(CASE WHEN (U.Sucursal IS NOT NULL AND SA.Sucursales IS NOT NULL) THEN ',' ELSE '' END), ISNULL(SA.Sucursales, '')) END Sucursales, 
			ISNULL(U.DefAlmacen, '') Almacen, ISNULL(Alm.Nombre, '') NombreAlmacen, ISNULL(U.DefAgente, '') Agente, ISNULL(A.Nombre, '') NombreAgente,
			ISNULL(U.Personal, '') Personal, ISNULL(U.GrupoTrabajo, '') GrupoTrabajo, ISNULL(U.Departamento, '') Departamento, ISNULL(U.Observaciones, '') Observaciones
	  FROM	Usuario U
	  LEFT	JOIN Agente A ON U.DefAgente = A.Agente
	  LEFT	JOIN Alm Alm ON U.DefAlmacen = Alm.Almacen
	  LEFT	JOIN pNetRoleUsuario RP ON U.Usuario = RP.Usuario
	  LEFT	JOIN pNetRole R ON RP.IDRole = R.IDRole
	  LEFT	JOIN (SELECT Usuario, STRING_AGG(Empresa, ',') AS Empresas FROM UsuarioD GROUP BY Usuario) D ON U.Usuario = D.Usuario
	  LEFT	JOIN (SELECT Usuario, STRING_AGG(Sucursal, ',') AS Sucursales FROM UsuarioSucursalAcceso GROUP BY Usuario) SA ON U.Usuario = SA.Usuario
GO

--SELECT * FROM vwPNetAdminUsuarios_Empresa
SELECT * FROM vwPNetAdminUsuarios_Sucursal
--SELECT Almacen, Nombre, Estatus FROM Alm
--SELECT Agente, Nombre, Estatus FROM Agente
--SELECT Usuario, Nombre, Telefono, Email, DescripcionRole, DefEmpresa, Empresas, DefSucursal, Sucursales, Estatus FROM vwPNetAdminUsuarios_Usuario
--SELECT * FROM vwPNetAdminUsuarios_Usuario WHERE Usuario = 'ADMIN'
