Files
Plataforma-de-desarrolladores/Perfil_Usuario_Cambio_Contexto_20260828.sql
Jorge Luis caudillo esparza c6cb8d5cce --
2026-08-28 06:36:39 -07:00

595 lines
18 KiB
Transact-SQL

CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioGetByName
@NombreUsuario varchar(100),
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
SELECT TOP (1)
U.CveUsuario,
U.NombreUsuario,
U.HashContrasena,
U.CorreoElectronico,
U.CveRol,
R.NombreRol,
U.Activo,
U.DebeCambiarContrasena,
U.IntentosFallidosInicioSesion,
U.BloqueadoHasta,
U.FechaUltimoInicioSesion,
U.FechaUltimaConexion,
U.CorreoVerificado,
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
OUTER APPLY
(
SELECT TOP (1) UC.CveCliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = UC.CveCliente
AND C.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
WHERE U.NombreUsuario = @NombreUsuario;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar el usuario; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioGetByName'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_PerfilGet
@CveUsuario int,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
IF NOT EXISTS
(
SELECT 1
FROM dbo.Sis_Usuarios
WHERE CveUsuario = @CveUsuario
AND Activo = 1
)
BEGIN
SELECT
@ErrorMostrar = 'No se encontró el usuario activo de la sesión.',
@ErrorTipo = 2;
RETURN;
END;
SELECT
U.CveUsuario,
U.NombreUsuario,
U.CorreoElectronico,
U.CveRol,
R.NombreRol,
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
CONVERT(bit, CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END) AS EsDesarrollador
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
OUTER APPLY
(
SELECT TOP (1) UC.CveCliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = UC.CveCliente
AND C.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
WHERE U.CveUsuario = @CveUsuario;
SELECT
C.CveCliente,
C.Nombre,
C.NombreComercial,
C.Direccion,
C.NoExt,
C.NoInt,
C.Colonia,
C.Ciudad,
C.Estado,
C.Pais,
C.RFC,
C.CP,
C.Telefono,
C.Mail,
C.CveRegimenFiscal,
RF.CodigoRegimenFiscal,
RF.RegimenFiscal,
C.CveUsoCFDI,
UCFDI.UsoCFDI,
UCFDI.Descripcion AS DescripcionUsoCFDI
FROM dbo.Sis_Usuarios AS U
CROSS APPLY
(
SELECT TOP (1) UC.CveCliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS ClienteActivo
ON ClienteActivo.CveCliente = UC.CveCliente
AND ClienteActivo.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = ClientePrincipal.CveCliente
LEFT JOIN dbo.Gral_RegimenesFiscales AS RF
ON RF.CveRegimenFiscal = C.CveRegimenFiscal
LEFT JOIN dbo.Gral_SAT_UsosCFDI AS UCFDI
ON UCFDI.CveUsoCFDI = C.CveUsoCFDI
WHERE U.CveUsuario = @CveUsuario
AND U.CveRol = 3;
SELECT
CveRegimenFiscal,
CodigoRegimenFiscal,
RegimenFiscal
FROM dbo.Gral_RegimenesFiscales
ORDER BY CodigoRegimenFiscal;
SELECT
CveUsoCFDI,
UsoCFDI,
Descripcion
FROM dbo.Gral_SAT_UsosCFDI
ORDER BY UsoCFDI;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar el perfil; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PerfilGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_PerfilSesionUpdate
@CveUsuario int,
@NombreUsuario varchar(100),
@HashContrasena varchar(500) = NULL,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
SET @HashContrasena = NULLIF(LTRIM(RTRIM(@HashContrasena)), '');
IF NOT EXISTS
(
SELECT 1
FROM dbo.Sis_Usuarios
WHERE CveUsuario = @CveUsuario
AND Activo = 1
)
BEGIN
SELECT
@ErrorMostrar = 'No se encontró el usuario activo de la sesión.',
@ErrorTipo = 2;
RETURN;
END;
IF NULLIF(@NombreUsuario, '') IS NULL
OR LEN(@NombreUsuario) < 3
BEGIN
SELECT
@ErrorMostrar = 'El nombre de usuario debe contener al menos tres caracteres.',
@ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Sis_Usuarios
WHERE NombreUsuario = @NombreUsuario
AND CveUsuario <> @CveUsuario
)
BEGIN
SELECT
@ErrorMostrar = 'El nombre de usuario ya está registrado.',
@ErrorTipo = 2;
RETURN;
END;
UPDATE dbo.Sis_Usuarios
SET NombreUsuario = @NombreUsuario,
HashContrasena = COALESCE(@HashContrasena, HashContrasena),
DebeCambiarContrasena =
CASE
WHEN @HashContrasena IS NULL
THEN DebeCambiarContrasena
ELSE 0
END,
FechaActualizacion = GETDATE()
WHERE CveUsuario = @CveUsuario;
SELECT
U.CveUsuario,
U.NombreUsuario,
U.CorreoElectronico,
U.CveRol,
R.NombreRol,
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
CONVERT(bit, CASE WHEN U.CveRol = 3 THEN 1 ELSE 0 END) AS EsDesarrollador
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
OUTER APPLY
(
SELECT TOP (1) UC.CveCliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = UC.CveCliente
AND C.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
WHERE U.CveUsuario = @CveUsuario;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al actualizar los datos de sesión; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_PerfilSesionUpdate'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Clientes_PerfilUpdate
@CveCliente int,
@Nombre varchar(200),
@NombreComercial varchar(200) = NULL,
@Direccion varchar(90),
@NoExt varchar(20) = NULL,
@NoInt varchar(50) = NULL,
@Colonia varchar(50),
@Ciudad varchar(50),
@Estado varchar(35),
@Pais varchar(50),
@RFC varchar(15),
@CP varchar(10),
@Telefono varchar(25) = NULL,
@Mail varchar(500) = NULL,
@CveRegimenFiscal tinyint,
@CveUsoCFDI tinyint,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
SELECT
@Nombre = LTRIM(RTRIM(@Nombre)),
@NombreComercial = NULLIF(LTRIM(RTRIM(@NombreComercial)), ''),
@Direccion = LTRIM(RTRIM(@Direccion)),
@NoExt = NULLIF(LTRIM(RTRIM(@NoExt)), ''),
@NoInt = NULLIF(LTRIM(RTRIM(@NoInt)), ''),
@Colonia = LTRIM(RTRIM(@Colonia)),
@Ciudad = LTRIM(RTRIM(@Ciudad)),
@Estado = LTRIM(RTRIM(@Estado)),
@Pais = LTRIM(RTRIM(@Pais)),
@RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', '')),
@CP = LTRIM(RTRIM(@CP)),
@Telefono = NULLIF(LTRIM(RTRIM(@Telefono)), ''),
@Mail = NULLIF(LTRIM(RTRIM(@Mail)), '');
IF NOT EXISTS
(
SELECT 1
FROM dbo.Clientes
WHERE CveCliente = @CveCliente
AND Estatus = 1
)
BEGIN
SELECT
@ErrorMostrar = 'No se encontró el cliente activo del perfil.',
@ErrorTipo = 2;
RETURN;
END;
IF NULLIF(@Nombre, '') IS NULL
OR NULLIF(@Direccion, '') IS NULL
OR NULLIF(@Colonia, '') IS NULL
OR NULLIF(@Ciudad, '') IS NULL
OR NULLIF(@Estado, '') IS NULL
OR NULLIF(@Pais, '') IS NULL
OR LEN(@RFC) NOT IN (12, 13)
OR LEN(@CP) <> 5
BEGIN
SELECT
@ErrorMostrar = 'Capture nombre fiscal, domicilio, RFC y código postal válidos.',
@ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Gral_RegimenesFiscales
WHERE CveRegimenFiscal = @CveRegimenFiscal
)
BEGIN
SELECT
@ErrorMostrar = 'Seleccione un régimen fiscal válido.',
@ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Gral_SAT_UsosCFDI
WHERE CveUsoCFDI = @CveUsoCFDI
)
BEGIN
SELECT
@ErrorMostrar = 'Seleccione un uso de CFDI válido.',
@ErrorTipo = 2;
RETURN;
END;
UPDATE dbo.Clientes
SET Nombre = @Nombre,
NombreComercial = @NombreComercial,
Direccion = @Direccion,
NoExt = @NoExt,
NoInt = @NoInt,
Colonia = @Colonia,
Ciudad = @Ciudad,
Estado = @Estado,
Pais = @Pais,
RFC = @RFC,
CP = @CP,
Telefono = @Telefono,
Mail = @Mail,
CveRegimenFiscal = @CveRegimenFiscal,
CveUsoCFDI = @CveUsoCFDI,
CveUsuarioModifico = @CveUsuarioEjecuta
WHERE CveCliente = @CveCliente;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al actualizar los datos del cliente; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Clientes_PerfilUpdate'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioContextoList
@Texto varchar(150) = NULL,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
SET @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
SELECT
U.CveUsuario,
U.NombreUsuario,
U.CorreoElectronico,
U.CveRol,
R.NombreRol,
U.DebeCambiarContrasena,
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
ClientePrincipal.Cliente
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
OUTER APPLY
(
SELECT TOP (1)
UC.CveCliente,
C.Nombre AS Cliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = UC.CveCliente
AND C.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
WHERE U.Activo = 1
AND
(
@Texto IS NULL
OR U.NombreUsuario LIKE '%' + @Texto + '%'
OR U.CorreoElectronico LIKE '%' + @Texto + '%'
OR ClientePrincipal.Cliente LIKE '%' + @Texto + '%'
)
ORDER BY U.NombreUsuario;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar los usuarios disponibles; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioContextoList'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_UsuarioContextoGet
@CveUsuario int,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @ErrorMostrar = NULL, @ErrorTipo = 0, @Return = 0;
BEGIN TRY
IF NOT EXISTS
(
SELECT 1
FROM dbo.Sis_Usuarios
WHERE CveUsuario = @CveUsuario
AND Activo = 1
)
BEGIN
SELECT
@ErrorMostrar = 'El usuario seleccionado ya no está disponible.',
@ErrorTipo = 2;
RETURN;
END;
SELECT
U.CveUsuario,
U.NombreUsuario,
U.CorreoElectronico,
U.CveRol,
R.NombreRol,
U.DebeCambiarContrasena,
ISNULL(ClientePrincipal.CveCliente, 0) AS CveCliente,
ClientePrincipal.Cliente
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
OUTER APPLY
(
SELECT TOP (1)
UC.CveCliente,
C.Nombre AS Cliente
FROM dbo.Sis_UsuariosClientes AS UC
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = UC.CveCliente
AND C.Estatus = 1
WHERE UC.CveUsuario = U.CveUsuario
AND UC.Activo = 1
ORDER BY
UC.EsPrincipal DESC,
UC.Orden,
UC.CveUsuarioCliente
) AS ClientePrincipal
WHERE U.CveUsuario = @CveUsuario;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al obtener el usuario seleccionado; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) =
CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_UsuarioContextoGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE());
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO