952 lines
37 KiB
Transact-SQL
952 lines
37 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
/* ==================== COLUMNAS DE VERIFICACIÓN ==================== */
|
|
|
|
IF COL_LENGTH(N'dbo.Sis_Usuarios', N'CorreoVerificado') IS NULL
|
|
ALTER TABLE [dbo].[Sis_Usuarios]
|
|
ADD [CorreoVerificado] bit NOT NULL
|
|
CONSTRAINT [DF_Sis_Usuarios_CorreoVerificado] DEFAULT ((1)) WITH VALUES;
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.Sis_Usuarios', N'FechaVerificacionCorreo') IS NULL
|
|
ALTER TABLE [dbo].[Sis_Usuarios] ADD [FechaVerificacionCorreo] datetime2(0) NULL;
|
|
GO
|
|
|
|
/* ==================== RELACIÓN USUARIO - CLIENTE ==================== */
|
|
|
|
IF OBJECT_ID(N'dbo.Sis_UsuariosClientes', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Sis_UsuariosClientes]
|
|
(
|
|
[CveUsuarioCliente] int IDENTITY(1,1) NOT NULL,
|
|
[CveUsuario] int NOT NULL,
|
|
[CveCliente] int NOT NULL,
|
|
[Orden] int NOT NULL,
|
|
[EsPrincipal] bit NOT NULL CONSTRAINT [DF_Sis_UsuariosClientes_EsPrincipal] DEFAULT ((0)),
|
|
[Activo] bit NOT NULL CONSTRAINT [DF_Sis_UsuariosClientes_Activo] DEFAULT ((1)),
|
|
[FechaCreacion] datetime2(0) NOT NULL CONSTRAINT [DF_Sis_UsuariosClientes_FechaCreacion] DEFAULT (SYSDATETIME()),
|
|
[FechaActualizacion] datetime2(0) NULL,
|
|
[CveUsuarioRegistro] int NOT NULL,
|
|
[Borrado] bit NOT NULL CONSTRAINT [DF_Sis_UsuariosClientes_Borrado] DEFAULT ((0)),
|
|
[FechaBorrado] datetime2(0) NULL,
|
|
CONSTRAINT [PK_Sis_UsuariosClientes] PRIMARY KEY CLUSTERED ([CveUsuarioCliente]),
|
|
CONSTRAINT [CK_Sis_UsuariosClientes_Orden] CHECK ([Orden] > (0)),
|
|
CONSTRAINT [CK_Sis_UsuariosClientes_Borrado] CHECK
|
|
(([Borrado] = (0) AND [FechaBorrado] IS NULL) OR ([Borrado] = (1) AND [FechaBorrado] IS NOT NULL)),
|
|
CONSTRAINT [FK_Sis_UsuariosClientes_Usuario] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]),
|
|
CONSTRAINT [FK_Sis_UsuariosClientes_Cliente] FOREIGN KEY ([CveCliente]) REFERENCES [dbo].[Clientes] ([CveCliente]),
|
|
CONSTRAINT [FK_Sis_UsuariosClientes_UsuarioRegistro] FOREIGN KEY ([CveUsuarioRegistro]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario])
|
|
);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX [UX_Sis_UsuariosClientes_Usuario_Cliente]
|
|
ON [dbo].[Sis_UsuariosClientes] ([CveUsuario], [CveCliente])
|
|
WHERE [Borrado] = (0);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX [UX_Sis_UsuariosClientes_Usuario_Orden]
|
|
ON [dbo].[Sis_UsuariosClientes] ([CveUsuario], [Orden])
|
|
WHERE [Borrado] = (0) AND [Activo] = (1);
|
|
END;
|
|
GO
|
|
|
|
/* ==================== VERIFICACIÓN DE CORREO ==================== */
|
|
|
|
IF OBJECT_ID(N'dbo.Sis_UsuariosVerificacionesCorreo', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE [dbo].[Sis_UsuariosVerificacionesCorreo]
|
|
(
|
|
[CveUsuarioVerificacionCorreo] int IDENTITY(1,1) NOT NULL,
|
|
[CveUsuario] int NOT NULL,
|
|
[CveClienteRegistro] int NULL,
|
|
[HashToken] char(64) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
[FechaExpiracion] datetime2(0) NOT NULL,
|
|
[FechaVerificacion] datetime2(0) NULL,
|
|
[Utilizado] bit NOT NULL CONSTRAINT [DF_Sis_UsuariosVerificacionesCorreo_Utilizado] DEFAULT ((0)),
|
|
[FechaCreacion] datetime2(0) NOT NULL CONSTRAINT [DF_Sis_UsuariosVerificacionesCorreo_FechaCreacion] DEFAULT (SYSDATETIME()),
|
|
[Borrado] bit NOT NULL CONSTRAINT [DF_Sis_UsuariosVerificacionesCorreo_Borrado] DEFAULT ((0)),
|
|
[FechaBorrado] datetime2(0) NULL,
|
|
CONSTRAINT [PK_Sis_UsuariosVerificacionesCorreo] PRIMARY KEY CLUSTERED ([CveUsuarioVerificacionCorreo]),
|
|
CONSTRAINT [UQ_Sis_UsuariosVerificacionesCorreo_HashToken] UNIQUE NONCLUSTERED ([HashToken]),
|
|
CONSTRAINT [CK_Sis_UsuariosVerificacionesCorreo_Borrado] CHECK
|
|
(([Borrado] = (0) AND [FechaBorrado] IS NULL) OR ([Borrado] = (1) AND [FechaBorrado] IS NOT NULL)),
|
|
CONSTRAINT [FK_Sis_UsuariosVerificacionesCorreo_Usuario] FOREIGN KEY ([CveUsuario]) REFERENCES [dbo].[Sis_Usuarios] ([CveUsuario]),
|
|
CONSTRAINT [FK_Sis_UsuariosVerificacionesCorreo_Cliente] FOREIGN KEY ([CveClienteRegistro]) REFERENCES [dbo].[Clientes] ([CveCliente])
|
|
);
|
|
|
|
CREATE NONCLUSTERED INDEX [IX_Sis_UsuariosVerificacionesCorreo_Pendiente]
|
|
ON [dbo].[Sis_UsuariosVerificacionesCorreo] ([CveUsuario], [Utilizado], [FechaExpiracion])
|
|
WHERE [Borrado] = (0);
|
|
END;
|
|
GO
|
|
|
|
/* ==================== AUTENTICACIÓN CON CORREO VERIFICADO ==================== */
|
|
|
|
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]
|
|
FROM [dbo].[Sis_Usuarios] AS U
|
|
INNER JOIN [dbo].[Sis_Roles] AS R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[NombreUsuario] = @NombreUsuario
|
|
AND U.[Borrado] = (0)
|
|
AND R.[Borrado] = (0);
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
/* ==================== CATÁLOGOS ==================== */
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RolList]
|
|
@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 [CveRol], [NombreRol], [Descripcion]
|
|
FROM [dbo].[Sis_Roles]
|
|
WHERE [Activo] = (1) AND [Borrado] = (0)
|
|
ORDER BY [NombreRol];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar los roles; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Gral_EstadoList]
|
|
@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 [CveEstado], [NombreEstado], [ClaveSATEstado]
|
|
FROM [dbo].[Gral_SAT_Estado]
|
|
WHERE [Borrado] = (0)
|
|
ORDER BY [NombreEstado];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar los estados; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
/* ==================== AUTORREGISTRO ==================== */
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteValidate]
|
|
@NombreUsuario varchar(100),
|
|
@CorreoElectronico varchar(255),
|
|
@RFC varchar(15),
|
|
@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 @CorreoElectronico = LOWER(LTRIM(RTRIM(@CorreoElectronico)));
|
|
SET @RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', ''));
|
|
|
|
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE [NombreUsuario] = @NombreUsuario)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El nombre de usuario ya se encuentra registrado.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE LOWER([CorreoElectronico]) = @CorreoElectronico)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El correo electrónico ya se encuentra registrado. Contacta a Soporte Técnico antes de continuar.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
/* Incluye clientes activos, inactivos y borrados para impedir autorreactivación. */
|
|
IF EXISTS (SELECT 1 FROM [dbo].[Clientes] WHERE UPPER(REPLACE(LTRIM(RTRIM([RFC])), ' ', '')) = @RFC)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El RFC ya se encuentra registrado. Contacta a Soporte Técnico para solicitar acceso.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al validar el registro; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteUsuarioValidate]
|
|
@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
|
|
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
|
|
|
|
IF NULLIF(@NombreUsuario, '') IS NULL
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Captura el nombre de usuario para verificarlo.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_Usuarios]
|
|
WHERE [NombreUsuario] = @NombreUsuario
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El nombre de usuario ya se encuentra registrado. Elige uno diferente.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al validar el nombre de usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteUsuarioValidate'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteCorreoValidate]
|
|
@CorreoElectronico varchar(255),
|
|
@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 @CorreoElectronico = LOWER(LTRIM(RTRIM(@CorreoElectronico)));
|
|
|
|
IF NULLIF(@CorreoElectronico, '') IS NULL
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Captura el correo electrónico para verificarlo.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Sis_Usuarios]
|
|
WHERE LOWER([CorreoElectronico]) = @CorreoElectronico
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El correo electrónico ya se encuentra registrado. Contacta a Soporte Técnico antes de continuar.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al validar el correo; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteCorreoValidate'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteRFCValidate]
|
|
@RFC varchar(15),
|
|
@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 @RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', ''));
|
|
|
|
IF NULLIF(@RFC, '') IS NULL
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Captura el RFC para verificarlo.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM [dbo].[Clientes]
|
|
WHERE UPPER(REPLACE(LTRIM(RTRIM([RFC])), ' ', '')) = @RFC
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El RFC ya se encuentra registrado. Contacta a Soporte Técnico para solicitar acceso.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al validar el RFC; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_RegistroClienteRFCValidate'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE()
|
|
);
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
/* Claves normalizadas utilizadas por el registro. */
|
|
IF OBJECT_ID(N'dbo.Clientes', N'U') IS NULL
|
|
THROW 51026, N'Falta la tabla dbo.Clientes.', 1;
|
|
|
|
IF COL_LENGTH(N'dbo.Clientes', N'CveLocalidad') IS NULL
|
|
ALTER TABLE [dbo].[Clientes] ADD [CveLocalidad] int NULL;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Pais', N'F') IS NULL
|
|
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Pais] P ON P.[CvePais]=C.[CvePais] WHERE C.[CvePais] IS NOT NULL AND P.[CvePais] IS NULL)
|
|
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Pais] FOREIGN KEY ([CvePais]) REFERENCES [dbo].[Gral_SAT_Pais] ([CvePais]);
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Estado_Normalizado', N'F') IS NULL
|
|
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Estado] E ON E.[CveEstado]=C.[CveEstado] WHERE C.[CveEstado] IS NOT NULL AND E.[CveEstado] IS NULL)
|
|
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Estado_Normalizado] FOREIGN KEY ([CveEstado]) REFERENCES [dbo].[Gral_SAT_Estado] ([CveEstado]);
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Municipio', N'F') IS NULL
|
|
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Municipio] M ON M.[CveMunicipio]=C.[CveMunicipio] WHERE C.[CveMunicipio] IS NOT NULL AND M.[CveMunicipio] IS NULL)
|
|
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Municipio] FOREIGN KEY ([CveMunicipio]) REFERENCES [dbo].[Gral_SAT_Municipio] ([CveMunicipio]);
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Localidad', N'F') IS NULL
|
|
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Localidad] FOREIGN KEY ([CveLocalidad]) REFERENCES [dbo].[Gral_SAT_Localidad] ([CveLocalidad]);
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.FK_Clientes_Gral_SAT_Colonia', N'F') IS NULL
|
|
AND NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] C LEFT JOIN [dbo].[Gral_SAT_Colonia] CO ON CO.[CveColonia]=C.[CveColonia] WHERE C.[CveColonia] IS NOT NULL AND CO.[CveColonia] IS NULL)
|
|
ALTER TABLE [dbo].[Clientes] WITH CHECK ADD CONSTRAINT [FK_Clientes_Gral_SAT_Colonia] FOREIGN KEY ([CveColonia]) REFERENCES [dbo].[Gral_SAT_Colonia] ([CveColonia]);
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_RegistroClienteAdd]
|
|
@NombreUsuario varchar(100),
|
|
@HashContrasena varchar(500),
|
|
@CorreoElectronico varchar(255),
|
|
@RFC varchar(15),
|
|
@RazonSocial varchar(200),
|
|
@NombreComercial varchar(200) = NULL,
|
|
@Direccion varchar(90),
|
|
@NoExt varchar(20) = NULL,
|
|
@NoInt varchar(50) = NULL,
|
|
@Colonia varchar(100),
|
|
@Ciudad varchar(100),
|
|
@CveSATEstado int,
|
|
@Pais varchar(100) = 'México',
|
|
@CP varchar(5),
|
|
@Telefono varchar(25) = NULL,
|
|
@CvePais int,
|
|
@CveMunicipio int,
|
|
@CveLocalidad int = NULL,
|
|
@CveColonia int,
|
|
@HashToken char(64),
|
|
@HorasExpiracion int = 24,
|
|
@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
|
|
DECLARE @CveRolEmpresa int, @CveUsuario int, @CveCliente int;
|
|
DECLARE @NombreEstado varchar(50), @PaisCatalogo varchar(100);
|
|
DECLARE @CiudadCatalogo varchar(100), @ColoniaCatalogo varchar(100);
|
|
|
|
SET @NombreUsuario = LTRIM(RTRIM(@NombreUsuario));
|
|
SET @CorreoElectronico = LOWER(LTRIM(RTRIM(@CorreoElectronico)));
|
|
SET @RFC = UPPER(REPLACE(LTRIM(RTRIM(@RFC)), ' ', ''));
|
|
SET @CP = LTRIM(RTRIM(@CP));
|
|
|
|
SELECT @CveRolEmpresa = [CveRol]
|
|
FROM [dbo].[Sis_Roles]
|
|
WHERE [NombreRol] = 'Empresa' AND [Activo] = (1) AND [Borrado] = (0);
|
|
|
|
SELECT TOP (1)
|
|
@NombreEstado = LEFT(E.[NombreEstado], 35),
|
|
@PaisCatalogo = LEFT(P.[Descripcion], 50),
|
|
@CiudadCatalogo = LEFT(COALESCE(NULLIF(L.[NombreLocalidad], ''), M.[Descripcion]), 50),
|
|
@ColoniaCatalogo = LEFT(C.[NombreAsentamiento], 50)
|
|
FROM [dbo].[Gral_SAT_CP] AS CP
|
|
INNER JOIN [dbo].[Gral_SAT_Estado] AS E
|
|
ON E.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
|
AND E.[CveEstado] = @CveSATEstado AND E.[Borrado] = (0)
|
|
INNER JOIN [dbo].[Gral_SAT_Pais] AS P
|
|
ON P.[ClaveSATPais] = E.[ClaveSATPais]
|
|
AND P.[CvePais] = @CvePais AND P.[Borrado] = (0)
|
|
INNER JOIN [dbo].[Gral_SAT_Municipio] AS M
|
|
ON M.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
|
AND M.[ClaveSATMunicipio] = CP.[ClaveSATMunicipio]
|
|
AND M.[CveMunicipio] = @CveMunicipio AND M.[Borrado] = (0)
|
|
LEFT JOIN [dbo].[Gral_SAT_Localidad] AS L
|
|
ON L.[ClaveSATEstado] = CP.[ClaveSATEstado]
|
|
AND L.[ClaveSATLocalidad] = CP.[ClaveSATLocalidad] AND L.[Borrado] = (0)
|
|
INNER JOIN [dbo].[Gral_SAT_Colonia] AS C
|
|
ON C.[CP] = CP.[CP] AND C.[CveColonia] = @CveColonia AND C.[Borrado] = (0)
|
|
WHERE CP.[CP] = @CP AND CP.[Borrado] = (0)
|
|
AND (@CveLocalidad IS NULL OR L.[CveLocalidad] = @CveLocalidad);
|
|
|
|
IF @CveRolEmpresa IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'No fue posible determinar el rol Empresa.', @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @NombreEstado IS NULL OR @PaisCatalogo IS NULL OR @CiudadCatalogo IS NULL OR @ColoniaCatalogo IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'Los datos del código postal no coinciden con los catálogos vigentes. Actualiza el código postal.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT @Pais = @PaisCatalogo, @Ciudad = @CiudadCatalogo, @Colonia = @ColoniaCatalogo;
|
|
|
|
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE [NombreUsuario] = @NombreUsuario)
|
|
OR EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE LOWER([CorreoElectronico]) = @CorreoElectronico)
|
|
OR EXISTS (SELECT 1 FROM [dbo].[Clientes] WHERE UPPER(REPLACE(LTRIM(RTRIM([RFC])), ' ', '')) = @RFC)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'Los datos ya fueron registrados por otra solicitud. Actualiza la página e inténtalo nuevamente.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
|
|
INSERT INTO [dbo].[Sis_Usuarios]
|
|
([NombreUsuario], [HashContrasena], [CorreoElectronico], [CveRol], [Activo], [DebeCambiarContrasena], [CorreoVerificado])
|
|
VALUES (@NombreUsuario, @HashContrasena, @CorreoElectronico, @CveRolEmpresa, (0), (0), (0));
|
|
|
|
SET @CveUsuario = CONVERT(int, SCOPE_IDENTITY());
|
|
|
|
INSERT INTO [dbo].[Clientes]
|
|
([Nombre], [NombreComercial], [Direccion], [NoExt], [NoInt], [Colonia],
|
|
[Ciudad], [Estado], [CveSATEstado], [Pais], [RFC], [CP], [Telefono],
|
|
[Mail], [Estatus], [Fecha], [CveUsuario], [FechaIng],
|
|
[CvePais], [CveEstado], [CveMunicipio], [CveLocalidad], [CveColonia])
|
|
VALUES
|
|
(@RazonSocial, NULLIF(@NombreComercial, ''), @Direccion, NULLIF(@NoExt, ''),
|
|
NULLIF(@NoInt, ''), @Colonia, @Ciudad, @NombreEstado, @CveSATEstado,
|
|
@Pais, @RFC, @CP, NULLIF(@Telefono, ''), @CorreoElectronico, (0),
|
|
CONVERT(date, GETDATE()), @CveUsuario, GETDATE(),
|
|
@CvePais, @CveSATEstado, @CveMunicipio, @CveLocalidad, @CveColonia);
|
|
|
|
SET @CveCliente = CONVERT(int, SCOPE_IDENTITY());
|
|
|
|
INSERT INTO [dbo].[Sis_UsuariosClientes]
|
|
([CveUsuario], [CveCliente], [Orden], [EsPrincipal], [Activo], [CveUsuarioRegistro])
|
|
VALUES (@CveUsuario, @CveCliente, (1), (1), (1), @CveUsuario);
|
|
|
|
INSERT INTO [dbo].[Sis_UsuariosVerificacionesCorreo]
|
|
([CveUsuario], [CveClienteRegistro], [HashToken], [FechaExpiracion])
|
|
VALUES (@CveUsuario, @CveCliente, @HashToken, DATEADD(HOUR, @HorasExpiracion, SYSDATETIME()));
|
|
|
|
|
|
SELECT @CveUsuario AS [CveUsuario], @CveCliente AS [CveCliente];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al crear el registro; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_CorreoVerify]
|
|
@HashToken char(64),
|
|
@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
|
|
DECLARE @CveVerificacion int;
|
|
DECLARE @CveUsuario int;
|
|
DECLARE @CveCliente int;
|
|
|
|
SELECT TOP (1)
|
|
@CveVerificacion = [CveUsuarioVerificacionCorreo],
|
|
@CveUsuario = [CveUsuario],
|
|
@CveCliente = [CveClienteRegistro]
|
|
FROM [dbo].[Sis_UsuariosVerificacionesCorreo]
|
|
WHERE [HashToken] = @HashToken
|
|
AND [Utilizado] = (0)
|
|
AND [Borrado] = (0)
|
|
AND [FechaExpiracion] >= SYSDATETIME();
|
|
|
|
IF @CveVerificacion IS NULL
|
|
BEGIN
|
|
SET @ErrorMostrar = 'La liga de verificación no es válida o ya expiró.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
|
|
UPDATE [dbo].[Sis_UsuariosVerificacionesCorreo]
|
|
SET [Utilizado] = (1), [FechaVerificacion] = SYSDATETIME()
|
|
WHERE [CveUsuarioVerificacionCorreo] = @CveVerificacion AND [Utilizado] = (0);
|
|
|
|
IF @@ROWCOUNT = (0)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'La liga de verificación ya fue utilizada.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE [dbo].[Sis_Usuarios]
|
|
SET [CorreoVerificado] = (1), [FechaVerificacionCorreo] = SYSDATETIME(),
|
|
[Activo] = (1), [FechaActualizacion] = GETDATE()
|
|
WHERE [CveUsuario] = @CveUsuario AND [Borrado] = (0);
|
|
|
|
/* Activación inicial del cliente creado por este mismo token. */
|
|
UPDATE [dbo].[Clientes]
|
|
SET [Estatus] = (1), [CveUsuarioModifico] = @CveUsuario
|
|
WHERE [CveCliente] = @CveCliente AND [CveUsuario] = @CveUsuario AND [Borrado] = (0);
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al verificar el correo; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
SET @Return = 0;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
/* ==================== ADMINISTRACIÓN DE USUARIOS ==================== */
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioList]
|
|
@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
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1 FROM [dbo].[Sis_Usuarios] U
|
|
INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[CveUsuario] = @CveUsuarioEjecuta
|
|
AND R.[NombreRol] IN ('SuperUsuario', 'Administrador')
|
|
AND U.[Activo] = (1) AND U.[Borrado] = (0)
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'No tienes permiso para consultar usuarios.';
|
|
SET @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT U.[CveUsuario], U.[NombreUsuario], U.[CorreoElectronico], U.[CveRol],
|
|
R.[NombreRol], U.[Activo], U.[CorreoVerificado], U.[FechaCreacion]
|
|
FROM [dbo].[Sis_Usuarios] U
|
|
INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[Borrado] = (0)
|
|
AND (@Texto IS NULL OR U.[NombreUsuario] LIKE '%' + @Texto + '%'
|
|
OR U.[CorreoElectronico] LIKE '%' + @Texto + '%')
|
|
ORDER BY U.[NombreUsuario];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar usuarios; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioGet]
|
|
@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
|
|
SELECT U.[CveUsuario], U.[NombreUsuario], U.[CorreoElectronico], U.[CveRol],
|
|
R.[NombreRol], U.[Activo], U.[DebeCambiarContrasena], U.[CorreoVerificado]
|
|
FROM [dbo].[Sis_Usuarios] U
|
|
INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[CveUsuario] = @CveUsuario AND U.[Borrado] = (0);
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar el usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioSave]
|
|
@CveUsuario int = NULL,
|
|
@NombreUsuario varchar(100),
|
|
@CorreoElectronico varchar(255),
|
|
@CveRol int,
|
|
@HashContrasena varchar(500) = NULL,
|
|
@Activo bit,
|
|
@DebeCambiarContrasena bit,
|
|
@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] U
|
|
INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[CveUsuario] = @CveUsuarioEjecuta AND R.[NombreRol] = 'SuperUsuario'
|
|
AND U.[Activo] = (1) AND U.[Borrado] = (0)
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Sólo un SuperUsuario puede crear o modificar usuarios.';
|
|
SET @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE [NombreUsuario] = @NombreUsuario AND [CveUsuario] <> ISNULL(@CveUsuario, (0)))
|
|
OR EXISTS (SELECT 1 FROM [dbo].[Sis_Usuarios] WHERE LOWER([CorreoElectronico]) = LOWER(@CorreoElectronico) AND [CveUsuario] <> ISNULL(@CveUsuario, (0)))
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El usuario o correo electrónico ya está registrado.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveUsuario IS NULL OR @CveUsuario <= (0)
|
|
BEGIN
|
|
IF NULLIF(@HashContrasena, '') IS NULL
|
|
BEGIN
|
|
SET @ErrorMostrar = 'La contraseña es obligatoria para un usuario nuevo.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
INSERT INTO [dbo].[Sis_Usuarios]
|
|
([NombreUsuario], [HashContrasena], [CorreoElectronico], [CveRol], [Activo],
|
|
[DebeCambiarContrasena], [CorreoVerificado], [FechaVerificacionCorreo])
|
|
VALUES
|
|
(@NombreUsuario, @HashContrasena, @CorreoElectronico, @CveRol, @Activo,
|
|
@DebeCambiarContrasena, (1), SYSDATETIME());
|
|
SET @CveUsuario = CONVERT(int, SCOPE_IDENTITY());
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
UPDATE [dbo].[Sis_Usuarios]
|
|
SET [NombreUsuario] = @NombreUsuario, [CorreoElectronico] = @CorreoElectronico,
|
|
[CveRol] = @CveRol, [Activo] = @Activo,
|
|
[DebeCambiarContrasena] = @DebeCambiarContrasena,
|
|
[HashContrasena] = COALESCE(NULLIF(@HashContrasena, ''), [HashContrasena]),
|
|
[FechaActualizacion] = GETDATE()
|
|
WHERE [CveUsuario] = @CveUsuario AND [Borrado] = (0);
|
|
END;
|
|
|
|
SELECT @CveUsuario AS [CveUsuario];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al guardar el usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioDelete]
|
|
@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 @CveUsuario = @CveUsuarioEjecuta
|
|
BEGIN
|
|
SET @ErrorMostrar = 'No puedes borrar tu propio usuario.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
UPDATE [dbo].[Sis_Usuarios]
|
|
SET [Activo] = (0), [Borrado] = (1), [FechaBorrado] = SYSDATETIME(), [FechaActualizacion] = GETDATE()
|
|
WHERE [CveUsuario] = @CveUsuario AND [Borrado] = (0)
|
|
AND EXISTS
|
|
(
|
|
SELECT 1 FROM [dbo].[Sis_Usuarios] E
|
|
INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = E.[CveRol]
|
|
WHERE E.[CveUsuario] = @CveUsuarioEjecuta AND R.[NombreRol] = 'SuperUsuario'
|
|
AND E.[Activo] = (1) AND E.[Borrado] = (0)
|
|
);
|
|
IF @@ROWCOUNT = (0)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'No fue posible borrar el usuario o no tienes autorización.';
|
|
SET @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al borrar el usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioClienteList]
|
|
@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
|
|
SELECT UC.[CveUsuarioCliente], UC.[CveUsuario], UC.[CveCliente], C.[Nombre], C.[RFC],
|
|
UC.[Orden], UC.[EsPrincipal], UC.[Activo], C.[Estatus] AS [ClienteActivo]
|
|
FROM [dbo].[Sis_UsuariosClientes] UC
|
|
INNER JOIN [dbo].[Clientes] C ON C.[CveCliente] = UC.[CveCliente]
|
|
WHERE UC.[CveUsuario] = @CveUsuario AND UC.[Borrado] = (0)
|
|
ORDER BY UC.[Orden];
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al consultar los clientes del usuario; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Sis_UsuarioClienteSave]
|
|
@CveUsuario int,
|
|
@CveCliente int,
|
|
@Orden int,
|
|
@EsPrincipal bit,
|
|
@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] U INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[CveUsuario] = @CveUsuarioEjecuta AND R.[NombreRol] IN ('SuperUsuario', 'Administrador')
|
|
AND U.[Activo] = (1) AND U.[Borrado] = (0)
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'No tienes permiso para asignar clientes.';
|
|
SET @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @Orden <= (0) OR NOT EXISTS (SELECT 1 FROM [dbo].[Clientes] WHERE [CveCliente] = @CveCliente AND [Borrado] = (0))
|
|
BEGIN
|
|
SET @ErrorMostrar = 'El cliente o el orden indicado no es válido.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1 FROM [dbo].[Sis_UsuariosClientes]
|
|
WHERE [CveUsuario] = @CveUsuario AND [Orden] = @Orden AND [Activo] = (1)
|
|
AND [Borrado] = (0) AND [CveCliente] <> @CveCliente
|
|
)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Ya existe otro cliente con el mismo orden para este usuario.';
|
|
SET @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @EsPrincipal = (1)
|
|
UPDATE [dbo].[Sis_UsuariosClientes]
|
|
SET [EsPrincipal] = (0), [FechaActualizacion] = SYSDATETIME()
|
|
WHERE [CveUsuario] = @CveUsuario AND [Borrado] = (0);
|
|
|
|
UPDATE [dbo].[Sis_UsuariosClientes]
|
|
SET [Orden] = @Orden, [EsPrincipal] = @EsPrincipal, [Activo] = (1),
|
|
[FechaActualizacion] = SYSDATETIME(), [Borrado] = (0), [FechaBorrado] = NULL
|
|
WHERE [CveUsuario] = @CveUsuario AND [CveCliente] = @CveCliente;
|
|
|
|
IF @@ROWCOUNT = (0)
|
|
INSERT INTO [dbo].[Sis_UsuariosClientes]
|
|
([CveUsuario], [CveCliente], [Orden], [EsPrincipal], [Activo], [CveUsuarioRegistro])
|
|
VALUES
|
|
(@CveUsuario, @CveCliente, @Orden, @EsPrincipal, (1), @CveUsuarioEjecuta);
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al asignar el cliente; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE [dbo].[PA_Clientes_EstatusUpdate]
|
|
@CveCliente int,
|
|
@Activo bit,
|
|
@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
|
|
UPDATE C
|
|
SET C.[Estatus] = @Activo, C.[CveUsuarioModifico] = @CveUsuarioEjecuta
|
|
FROM [dbo].[Clientes] C
|
|
WHERE C.[CveCliente] = @CveCliente AND C.[Borrado] = (0)
|
|
AND EXISTS
|
|
(
|
|
SELECT 1 FROM [dbo].[Sis_Usuarios] U INNER JOIN [dbo].[Sis_Roles] R ON R.[CveRol] = U.[CveRol]
|
|
WHERE U.[CveUsuario] = @CveUsuarioEjecuta
|
|
AND R.[NombreRol] IN ('SuperUsuario', 'Administrador')
|
|
AND U.[Activo] = (1) AND U.[Borrado] = (0)
|
|
);
|
|
IF @@ROWCOUNT = (0)
|
|
BEGIN
|
|
SET @ErrorMostrar = 'Sólo un Administrador o SuperUsuario puede cambiar el estado del cliente.';
|
|
SET @ErrorTipo = 1;
|
|
RETURN;
|
|
END;
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SET @ErrorMostrar = 'Ocurrió un error al cambiar el estado del cliente; favor de contactar a Sistemas.';
|
|
SET @ErrorTipo = 1;
|
|
DECLARE @E nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', ERROR_PROCEDURE(), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @E);
|
|
END CATCH;
|
|
END;
|
|
GO
|