Files
Plataforma-de-desarrolladores/Visitas_Festivos_Cuestionarios_20260919.sql
Jorge Luis caudillo esparza e8160eefba --documentos
2026-09-27 14:44:12 -07:00

2140 lines
83 KiB
PL/PgSQL

/*
Visitas, días festivos y cuestionarios reutilizables.
Preparado para revisión. Su ejecución requiere autorización separada.
Reutiliza las claves reales de etapas, lotes, supervisores y tipos de pregunta.
La agenda y las fechas de visita usan hora local de Hermosillo.
*/
IF OBJECT_ID(N'dbo.Sis_ConfiguracionVisitas', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Sis_ConfiguracionVisitas
(
CveConfiguracionVisitas int NOT NULL CONSTRAINT PK_Sis_ConfiguracionVisitas PRIMARY KEY,
DuracionPredeterminadaMinutos int NOT NULL CONSTRAINT CK_Sis_ConfiguracionVisitas_Duracion CHECK (DuracionPredeterminadaMinutos > 0),
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Sis_ConfiguracionVisitas_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT CK_Sis_ConfiguracionVisitas_Unica CHECK (CveConfiguracionVisitas = 1)
);
END;
GO
IF OBJECT_ID(N'dbo.Sis_DiasFestivos', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Sis_DiasFestivos
(
CveDiaFestivo int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Sis_DiasFestivos PRIMARY KEY,
Fecha date NOT NULL,
Descripcion varchar(250) NOT NULL,
EsActivo bit NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Sis_DiasFestivos_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT UQ_Sis_DiasFestivos_Fecha UNIQUE (Fecha)
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_PlantillasCuestionario', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_PlantillasCuestionario
(
CvePlantilla int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_PlantillasCuestionario PRIMARY KEY,
Nombre varchar(150) NOT NULL,
EsPorLote bit NOT NULL,
EsActivo bit NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_PlantillasCuestionario_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_PreguntasPlantilla', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_PreguntasPlantilla
(
CvePreguntaPlantilla int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_PreguntasPlantilla PRIMARY KEY,
CvePlantilla int NOT NULL REFERENCES dbo.Vis_PlantillasCuestionario(CvePlantilla),
CveTipoPregunta int NOT NULL REFERENCES dbo.Tra_TiposPregunta(CveTipoPregunta),
Pregunta varchar(500) NOT NULL,
EsRequerida bit NOT NULL,
EsActivo bit NOT NULL,
Orden int NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_PreguntasPlantilla_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_OpcionesPregunta', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_OpcionesPregunta
(
CveOpcionPregunta int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_OpcionesPregunta PRIMARY KEY,
CvePreguntaPlantilla int NOT NULL REFERENCES dbo.Vis_PreguntasPlantilla(CvePreguntaPlantilla),
TextoOpcion varchar(300) NOT NULL,
Orden int NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_OpcionesPregunta_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_Citas', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_Citas
(
CveCita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_Citas PRIMARY KEY,
CveFraccionamientoEtapa int NOT NULL REFERENCES dbo.FraccionamientosEtapas(CveFraccionamientoEtapa),
CveSupervisor int NOT NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaInicio datetime2(0) NOT NULL,
DuracionMinutos int NOT NULL CONSTRAINT CK_Vis_Citas_Duracion CHECK (DuracionMinutos > 0),
FechaFin datetime2(0) NOT NULL,
Cancelada bit NOT NULL CONSTRAINT DF_Vis_Citas_Cancelada DEFAULT (0),
Comentarios varchar(2000) NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_Citas_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT CK_Vis_Citas_Fechas CHECK (FechaFin > FechaInicio AND DATEDIFF_BIG(SECOND, FechaInicio, FechaFin) = CONVERT(bigint, DuracionMinutos) * 60)
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_Visitas', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_Visitas
(
CveVisita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_Visitas PRIMARY KEY,
CveCita int NOT NULL REFERENCES dbo.Vis_Citas(CveCita),
SeRealizo bit NULL,
FechaReal datetime2(0) NULL,
Observaciones varchar(max) NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_Visitas_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT UQ_Vis_Visitas_Cita UNIQUE (CveCita)
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_CuestionariosVisita', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_CuestionariosVisita
(
CveCuestionarioVisita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_CuestionariosVisita PRIMARY KEY,
CveVisita int NOT NULL REFERENCES dbo.Vis_Visitas(CveVisita),
CvePlantilla int NOT NULL REFERENCES dbo.Vis_PlantillasCuestionario(CvePlantilla),
CveFraccionamientoLote int NULL REFERENCES dbo.FraccionamientosLotes(CveFraccionamientoLote),
NombrePlantilla varchar(150) NOT NULL,
DefinicionPlantilla nvarchar(max) NOT NULL,
PasoSupervision bit NULL,
AguaPotableTerminada bit NULL,
DrenajeTerminado bit NULL,
Observaciones varchar(max) NULL,
Finalizado bit NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_CuestionariosVisita_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT CK_Vis_CuestionariosVisita_Definicion CHECK (ISJSON(DefinicionPlantilla) = 1),
CONSTRAINT CK_Vis_CuestionariosVisita_Cierre CHECK (Finalizado = 0 OR (PasoSupervision IS NOT NULL AND AguaPotableTerminada IS NOT NULL AND DrenajeTerminado IS NOT NULL AND NULLIF(LTRIM(RTRIM(Observaciones)), '') IS NOT NULL))
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_RespuestasVisita', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_RespuestasVisita
(
CveRespuestaVisita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_RespuestasVisita PRIMARY KEY,
CveCuestionarioVisita int NOT NULL REFERENCES dbo.Vis_CuestionariosVisita(CveCuestionarioVisita),
CvePreguntaPlantilla int NOT NULL,
Valor nvarchar(max) NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_RespuestasVisita_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CONSTRAINT UQ_Vis_RespuestasVisita_Pregunta UNIQUE (CveCuestionarioVisita, CvePreguntaPlantilla)
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_DocumentosVisita', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_DocumentosVisita
(
CveDocumentoVisita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_DocumentosVisita PRIMARY KEY,
CveVisita int NOT NULL REFERENCES dbo.Vis_Visitas(CveVisita),
CveCuestionarioVisita int NULL REFERENCES dbo.Vis_CuestionariosVisita(CveCuestionarioVisita),
NombreArchivo varchar(255) NOT NULL,
NombreFisico varchar(100) NOT NULL,
TipoContenido varchar(100) NOT NULL,
TamanoBytes bigint NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_DocumentosVisita_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL
);
END;
GO
IF OBJECT_ID(N'dbo.Vis_ComentariosVisita', N'U') IS NULL
BEGIN
CREATE TABLE dbo.Vis_ComentariosVisita
(
CveComentarioVisita int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Vis_ComentariosVisita PRIMARY KEY,
CveVisita int NOT NULL REFERENCES dbo.Vis_Visitas(CveVisita),
Comentario varchar(max) NOT NULL,
CveUsuario int NULL REFERENCES dbo.Sis_Usuarios(CveUsuario),
FechaAlta datetime NOT NULL CONSTRAINT DF_Vis_ComentariosVisita_FechaAlta DEFAULT (GETDATE()),
FechaModificacion datetime NULL
);
END;
GO
IF NOT EXISTS (SELECT 1 FROM dbo.Sis_ConfiguracionVisitas)
BEGIN
INSERT INTO dbo.Sis_ConfiguracionVisitas(CveConfiguracionVisitas, DuracionPredeterminadaMinutos)
VALUES (1, 240);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.Vis_Citas') AND name = 'IX_Vis_Citas_Agenda')
CREATE INDEX IX_Vis_Citas_Agenda ON dbo.Vis_Citas(CveSupervisor, FechaInicio) INCLUDE (FechaFin, Cancelada);
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_ConfiguracionVisitasObtener
@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 CveConfiguracionVisitas, DuracionPredeterminadaMinutos
FROM dbo.Sis_ConfiguracionVisitas
WHERE CveConfiguracionVisitas = 1;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_ConfiguracionVisitasObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_ConfiguracionVisitasGuardar
@DuracionPredeterminadaMinutos 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 @DuracionPredeterminadaMinutos IS NULL OR @DuracionPredeterminadaMinutos <= 0
BEGIN
SET @ErrorMostrar = 'La duración debe ser un número entero de minutos mayor que cero.';
SET @ErrorTipo = 2;
RETURN;
END;
UPDATE dbo.Sis_ConfiguracionVisitas
SET DuracionPredeterminadaMinutos = @DuracionPredeterminadaMinutos,
FechaModificacion = GETDATE(),
CveUsuario = @CveUsuarioEjecuta
WHERE CveConfiguracionVisitas = 1;
SELECT 1 AS CveConfiguracionVisitas;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_ConfiguracionVisitasGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_DiaFestivoListar
@Texto varchar(250) = 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
SELECT CveDiaFestivo, Fecha, Descripcion, EsActivo
FROM dbo.Sis_DiasFestivos
WHERE @Texto IS NULL OR Descripcion LIKE '%' + @Texto + '%'
ORDER BY Fecha, CveDiaFestivo;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_DiaFestivoListar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_DiaFestivoObtener
@CveDiaFestivo 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 CveDiaFestivo, Fecha, Descripcion, EsActivo
FROM dbo.Sis_DiasFestivos
WHERE CveDiaFestivo = @CveDiaFestivo;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_DiaFestivoObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_DiaFestivoGuardar
@CveDiaFestivo int = 0,
@Fecha date,
@Descripcion varchar(250),
@EsActivo 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 @Fecha IS NULL OR NULLIF(LTRIM(RTRIM(@Descripcion)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture fecha y descripción.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS (SELECT 1 FROM dbo.Sis_DiasFestivos WHERE Fecha = @Fecha AND CveDiaFestivo <> @CveDiaFestivo)
BEGIN
SET @ErrorMostrar = 'La fecha ya está registrada.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveDiaFestivo > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Sis_DiasFestivos WHERE CveDiaFestivo = @CveDiaFestivo)
BEGIN
SET @ErrorMostrar = 'El registro ya no existe.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveDiaFestivo <= 0
BEGIN
INSERT INTO dbo.Sis_DiasFestivos
(Fecha, Descripcion, EsActivo, CveUsuario)
VALUES
(@Fecha, @Descripcion, @EsActivo, @CveUsuarioEjecuta);
SET @CveDiaFestivo = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Sis_DiasFestivos
SET Fecha = @Fecha,
Descripcion = @Descripcion,
EsActivo = @EsActivo,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveDiaFestivo = @CveDiaFestivo;
END;
SELECT @CveDiaFestivo AS CveDiaFestivo;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_DiaFestivoGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Sis_DiaFestivoEliminar
@CveDiaFestivo 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
DELETE FROM dbo.Sis_DiasFestivos
WHERE CveDiaFestivo = @CveDiaFestivo;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Sis_DiaFestivoEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PlantillaCuestionarioListar
@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
SELECT CvePlantilla, Nombre, EsPorLote, EsActivo
FROM dbo.Vis_PlantillasCuestionario
WHERE @Texto IS NULL OR Nombre LIKE '%' + @Texto + '%'
ORDER BY Nombre, CvePlantilla;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PlantillaCuestionarioListar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PlantillaCuestionarioObtener
@CvePlantilla 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 CvePlantilla, Nombre, EsPorLote, EsActivo
FROM dbo.Vis_PlantillasCuestionario
WHERE CvePlantilla = @CvePlantilla;
SELECT CvePreguntaPlantilla, CvePlantilla, CveTipoPregunta, Pregunta, EsRequerida, EsActivo, Orden
FROM dbo.Vis_PreguntasPlantilla
WHERE CvePlantilla = @CvePlantilla
ORDER BY Orden, CvePreguntaPlantilla;
SELECT O.CveOpcionPregunta, O.CvePreguntaPlantilla, O.TextoOpcion, O.Orden
FROM dbo.Vis_OpcionesPregunta AS O
INNER JOIN dbo.Vis_PreguntasPlantilla AS P ON P.CvePreguntaPlantilla = O.CvePreguntaPlantilla
WHERE P.CvePlantilla = @CvePlantilla
ORDER BY O.Orden, O.CveOpcionPregunta;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PlantillaCuestionarioObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PlantillaCuestionarioGuardar
@CvePlantilla int = 0,
@Nombre varchar(150),
@EsPorLote bit,
@EsActivo 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 NULLIF(LTRIM(RTRIM(@Nombre)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el nombre de la plantilla.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CvePlantilla > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_PlantillasCuestionario WHERE CvePlantilla = @CvePlantilla)
BEGIN
SET @ErrorMostrar = 'El registro ya no existe.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CvePlantilla <= 0
BEGIN
INSERT INTO dbo.Vis_PlantillasCuestionario
(Nombre, EsPorLote, EsActivo, CveUsuario)
VALUES
(@Nombre, @EsPorLote, @EsActivo, @CveUsuarioEjecuta);
SET @CvePlantilla = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Vis_PlantillasCuestionario
SET Nombre = @Nombre,
EsPorLote = @EsPorLote,
EsActivo = @EsActivo,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CvePlantilla = @CvePlantilla;
END;
SELECT @CvePlantilla AS CvePlantilla;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PlantillaCuestionarioGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PlantillaCuestionarioEliminar
@CvePlantilla 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 EXISTS (SELECT 1 FROM dbo.Vis_CuestionariosVisita WHERE CvePlantilla = @CvePlantilla)
BEGIN
SET @ErrorMostrar = 'La plantilla tiene cuestionarios registrados; puede desactivarla para conservar su historial.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE O
FROM dbo.Vis_OpcionesPregunta AS O
INNER JOIN dbo.Vis_PreguntasPlantilla AS P ON P.CvePreguntaPlantilla = O.CvePreguntaPlantilla
WHERE P.CvePlantilla = @CvePlantilla;
DELETE FROM dbo.Vis_PreguntasPlantilla
WHERE CvePlantilla = @CvePlantilla;
DELETE FROM dbo.Vis_PlantillasCuestionario
WHERE CvePlantilla = @CvePlantilla;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PlantillaCuestionarioEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PreguntaPlantillaGuardar
@CvePreguntaPlantilla int = 0,
@CvePlantilla int,
@CveTipoPregunta int,
@Pregunta varchar(500),
@EsRequerida bit,
@EsActivo bit,
@Orden int = 0,
@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 NULLIF(LTRIM(RTRIM(@Pregunta)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture la pregunta.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS (SELECT 1 FROM dbo.Tra_TiposPregunta WHERE CveTipoPregunta = @CveTipoPregunta AND EsActivo = 1)
BEGIN
SET @ErrorMostrar = 'Seleccione un tipo de pregunta existente y activo.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CvePreguntaPlantilla > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_PreguntasPlantilla WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla AND CvePlantilla = @CvePlantilla)
BEGIN
SET @ErrorMostrar = 'La pregunta no corresponde a la plantilla.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CvePreguntaPlantilla > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_PreguntasPlantilla WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla)
BEGIN
SET @ErrorMostrar = 'El registro ya no existe.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CvePreguntaPlantilla <= 0
BEGIN
SELECT @Orden = ISNULL(MAX(Orden), 0) + 1
FROM dbo.Vis_PreguntasPlantilla WITH (UPDLOCK, HOLDLOCK)
WHERE CvePlantilla = @CvePlantilla;
INSERT INTO dbo.Vis_PreguntasPlantilla
(CvePlantilla, CveTipoPregunta, Pregunta, EsRequerida, EsActivo, Orden, CveUsuario)
VALUES
(@CvePlantilla, @CveTipoPregunta, @Pregunta, @EsRequerida, @EsActivo, @Orden, @CveUsuarioEjecuta);
SET @CvePreguntaPlantilla = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Vis_PreguntasPlantilla
SET CvePlantilla = @CvePlantilla,
CveTipoPregunta = @CveTipoPregunta,
Pregunta = @Pregunta,
EsRequerida = @EsRequerida,
EsActivo = @EsActivo,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla;
END;
SELECT @CvePreguntaPlantilla AS CvePreguntaPlantilla;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PreguntaPlantillaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PreguntaPlantillaEliminar
@CvePreguntaPlantilla 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
DELETE FROM dbo.Vis_OpcionesPregunta
WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla;
DELETE FROM dbo.Vis_PreguntasPlantilla
WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PreguntaPlantillaEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_OpcionPreguntaGuardar
@CveOpcionPregunta int = 0,
@CvePreguntaPlantilla int,
@TextoOpcion varchar(300),
@Orden int = 0,
@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 NULLIF(LTRIM(RTRIM(@TextoOpcion)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture la opción.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS (SELECT 1 FROM dbo.Vis_PreguntasPlantilla WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla AND CveTipoPregunta IN (3,4))
BEGIN
SET @ErrorMostrar = 'Seleccione una pregunta de selección.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveOpcionPregunta > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_OpcionesPregunta WHERE CveOpcionPregunta = @CveOpcionPregunta AND CvePreguntaPlantilla = @CvePreguntaPlantilla)
BEGIN
SET @ErrorMostrar = 'La opción no corresponde a la pregunta.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveOpcionPregunta > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_OpcionesPregunta WHERE CveOpcionPregunta = @CveOpcionPregunta)
BEGIN
SET @ErrorMostrar = 'El registro ya no existe.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveOpcionPregunta <= 0
BEGIN
SELECT @Orden = ISNULL(MAX(Orden), 0) + 1
FROM dbo.Vis_OpcionesPregunta WITH (UPDLOCK, HOLDLOCK)
WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla;
INSERT INTO dbo.Vis_OpcionesPregunta
(CvePreguntaPlantilla, TextoOpcion, Orden, CveUsuario)
VALUES
(@CvePreguntaPlantilla, @TextoOpcion, @Orden, @CveUsuarioEjecuta);
SET @CveOpcionPregunta = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Vis_OpcionesPregunta
SET CvePreguntaPlantilla = @CvePreguntaPlantilla,
TextoOpcion = @TextoOpcion,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveOpcionPregunta = @CveOpcionPregunta;
END;
SELECT @CveOpcionPregunta AS CveOpcionPregunta;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_OpcionPreguntaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_OpcionPreguntaEliminar
@CveOpcionPregunta 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
DELETE FROM dbo.Vis_OpcionesPregunta
WHERE CveOpcionPregunta = @CveOpcionPregunta;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_OpcionPreguntaEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_PreguntaPlantillaActualizarOrden
@CvePreguntaPlantilla int,
@CveReferencia int,
@ColocarDespues 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
DECLARE @Padre int;
DECLARE @OrdenActual int;
DECLARE @OrdenReferencia int;
SELECT @Padre = CvePlantilla, @OrdenActual = Orden
FROM dbo.Vis_PreguntasPlantilla WITH (UPDLOCK, HOLDLOCK)
WHERE CvePreguntaPlantilla = @CvePreguntaPlantilla;
SELECT @OrdenReferencia = Orden
FROM dbo.Vis_PreguntasPlantilla WITH (UPDLOCK, HOLDLOCK)
WHERE CvePreguntaPlantilla = @CveReferencia
AND CvePlantilla = @Padre;
IF @OrdenActual IS NULL OR @OrdenReferencia IS NULL OR @CveReferencia = @CvePreguntaPlantilla
BEGIN
SET @ErrorMostrar = 'Seleccione registros distintos del mismo grupo para reordenar.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Destino int = @OrdenReferencia + CASE WHEN @ColocarDespues = 1 THEN 1 ELSE 0 END;
IF @OrdenActual < @Destino
SET @Destino = @Destino - 1;
UPDATE dbo.Vis_PreguntasPlantilla
SET Orden = CASE
WHEN CvePreguntaPlantilla = @CvePreguntaPlantilla THEN @Destino
WHEN @OrdenActual < @Destino AND Orden > @OrdenActual AND Orden <= @Destino THEN Orden - 1
WHEN @OrdenActual > @Destino AND Orden >= @Destino AND Orden < @OrdenActual THEN Orden + 1
ELSE Orden
END
WHERE CvePlantilla = @Padre;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_PreguntaPlantillaActualizarOrden'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_OpcionPreguntaActualizarOrden
@CveOpcionPregunta int,
@CveReferencia int,
@ColocarDespues 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
DECLARE @Padre int;
DECLARE @OrdenActual int;
DECLARE @OrdenReferencia int;
SELECT @Padre = CvePreguntaPlantilla, @OrdenActual = Orden
FROM dbo.Vis_OpcionesPregunta WITH (UPDLOCK, HOLDLOCK)
WHERE CveOpcionPregunta = @CveOpcionPregunta;
SELECT @OrdenReferencia = Orden
FROM dbo.Vis_OpcionesPregunta WITH (UPDLOCK, HOLDLOCK)
WHERE CveOpcionPregunta = @CveReferencia
AND CvePreguntaPlantilla = @Padre;
IF @OrdenActual IS NULL OR @OrdenReferencia IS NULL OR @CveReferencia = @CveOpcionPregunta
BEGIN
SET @ErrorMostrar = 'Seleccione registros distintos del mismo grupo para reordenar.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Destino int = @OrdenReferencia + CASE WHEN @ColocarDespues = 1 THEN 1 ELSE 0 END;
IF @OrdenActual < @Destino
SET @Destino = @Destino - 1;
UPDATE dbo.Vis_OpcionesPregunta
SET Orden = CASE
WHEN CveOpcionPregunta = @CveOpcionPregunta THEN @Destino
WHEN @OrdenActual < @Destino AND Orden > @OrdenActual AND Orden <= @Destino THEN Orden - 1
WHEN @OrdenActual > @Destino AND Orden >= @Destino AND Orden < @OrdenActual THEN Orden + 1
ELSE Orden
END
WHERE CvePreguntaPlantilla = @Padre;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_OpcionPreguntaActualizarOrden'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CitaListar
@Texto varchar(250) = NULL,
@Desde date = NULL,
@Hasta date = 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
SELECT C.CveCita, V.CveVisita, F.CveCliente, F.CveFraccionamiento,
C.CveFraccionamientoEtapa, F.Fraccionamiento, E.Etapa,
C.CveSupervisor, U.NombreUsuario AS Supervisor, C.FechaInicio,
C.FechaFin, C.DuracionMinutos, C.Cancelada, V.SeRealizo, C.Comentarios
FROM dbo.Vis_Citas AS C
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveSupervisor
LEFT JOIN dbo.Vis_Visitas AS V ON V.CveCita = C.CveCita
WHERE (@Texto IS NULL OR F.Fraccionamiento LIKE '%' + @Texto + '%'
OR E.Etapa LIKE '%' + @Texto + '%' OR U.NombreUsuario LIKE '%' + @Texto + '%')
AND (@Desde IS NULL OR C.FechaInicio >= @Desde)
AND (@Hasta IS NULL OR CONVERT(date, C.FechaInicio) <= @Hasta)
ORDER BY C.FechaInicio DESC, C.CveCita DESC;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CitaListar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CitaObtener
@CveCita 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 C.CveCita, V.CveVisita, F.CveCliente, F.CveFraccionamiento,
C.CveFraccionamientoEtapa, F.Fraccionamiento, E.Etapa,
C.CveSupervisor, U.NombreUsuario AS Supervisor, C.FechaInicio,
C.FechaFin, C.DuracionMinutos, C.Cancelada, V.SeRealizo, C.Comentarios
FROM dbo.Vis_Citas AS C
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveSupervisor
LEFT JOIN dbo.Vis_Visitas AS V ON V.CveCita = C.CveCita
WHERE C.CveCita = @CveCita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CitaObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CitaObtenerDisponibilidad
@FechaDesde datetime2(0),
@DuracionMinutos int,
@CveSupervisor int = NULL,
@CveCitaExcluir int = 0,
@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 @FechaDesde IS NULL OR @DuracionMinutos IS NULL OR @DuracionMinutos <= 0
BEGIN
SET @ErrorMostrar = 'Capture la fecha inicial y una duración positiva en minutos.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Horarios TABLE
(
CveSupervisor int,
Supervisor varchar(100),
DiaSemana int,
InicioMinutos int,
FinMinutos int
);
;WITH Originales AS
(
SELECT U.CveUsuario AS CveSupervisor, U.NombreUsuario AS Supervisor,
(H.DiaSemana - 1) * 1440 + DATEDIFF(MINUTE, CAST('00:00' AS time), H.HoraInicio) AS Inicio,
(H.DiaSemana - 1) * 1440 + DATEDIFF(MINUTE, CAST('00:00' AS time), H.HoraFin)
+ CASE WHEN H.HoraFin < H.HoraInicio THEN 1440 ELSE 0 END AS Fin
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Turnos AS T ON T.CveTurno = U.CveTurno
INNER JOIN dbo.Sis_TurnosHorarios AS H ON H.CveTurno = T.CveTurno
WHERE U.Activo = 1 AND U.EsSupervisor = 1 AND T.EsActivo = 1
AND (@CveSupervisor IS NULL OR U.CveUsuario = @CveSupervisor)
),
Copias AS
(
SELECT O.CveSupervisor, O.Supervisor, O.Inicio + D.Minutos AS Inicio, O.Fin + D.Minutos AS Fin
FROM Originales AS O
CROSS JOIN (VALUES (-10080), (0), (10080)) AS D(Minutos)
),
Limites AS
(
SELECT CveSupervisor, Supervisor, Inicio, Fin,
MAX(Fin) OVER (PARTITION BY CveSupervisor ORDER BY Inicio, Fin
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS FinAnterior
FROM Copias
),
Grupos AS
(
SELECT CveSupervisor, Supervisor, Inicio, Fin,
SUM(CASE WHEN FinAnterior IS NULL OR Inicio > FinAnterior THEN 1 ELSE 0 END)
OVER (PARTITION BY CveSupervisor ORDER BY Inicio, Fin ROWS UNBOUNDED PRECEDING) AS Grupo
FROM Limites
),
Tramos AS
(
SELECT CveSupervisor, Supervisor, MIN(Inicio) AS Inicio, MAX(Fin) AS Fin
FROM Grupos
GROUP BY CveSupervisor, Supervisor, Grupo
)
INSERT INTO @Horarios(CveSupervisor, Supervisor, DiaSemana, InicioMinutos, FinMinutos)
SELECT T.CveSupervisor, T.Supervisor,
CASE WHEN T.Fin - T.Inicio >= 10080 THEN D.Dia + 1 ELSE T.Inicio / 1440 + 1 END,
CASE WHEN T.Fin - T.Inicio >= 10080 THEN 0 ELSE T.Inicio % 1440 END,
CASE WHEN T.Fin - T.Inicio >= 10080 THEN
CASE WHEN @DuracionMinutos > 2147482207 THEN 2147483647 ELSE @DuracionMinutos + 1440 END
ELSE T.Inicio % 1440 + T.Fin - T.Inicio END
FROM Tramos AS T
CROSS JOIN (VALUES (0), (1), (2), (3), (4), (5), (6)) AS D(Dia)
WHERE (T.Inicio >= 0 AND T.Inicio < 10080 AND T.Fin - T.Inicio < 10080 AND D.Dia = 0)
OR T.Fin - T.Inicio >= 10080;
DECLARE @Opciones TABLE
(
CveSupervisor int,
Supervisor varchar(100),
FechaInicio datetime2(0),
FechaFin datetime2(0)
);
-- Se unen intervalos contiguos, incluyendo medianoche y cambio de semana.
IF EXISTS (SELECT 1 FROM @Horarios WHERE FinMinutos - InicioMinutos >= @DuracionMinutos)
BEGIN
-- Un tramo continuo puede haber comenzado hasta una semana antes.
DECLARE @Dia date = DATEADD(DAY, -7, CONVERT(date, @FechaDesde));
DECLARE @UltimoBloqueo date = CONVERT(date, @FechaDesde);
SELECT @UltimoBloqueo = MAX(Fecha)
FROM
(
SELECT @UltimoBloqueo AS Fecha
UNION ALL
SELECT CONVERT(date, C.FechaFin)
FROM dbo.Vis_Citas AS C
WHERE C.Cancelada = 0 AND C.CveCita <> @CveCitaExcluir
AND EXISTS (SELECT 1 FROM @Horarios AS H WHERE H.CveSupervisor = C.CveSupervisor)
UNION ALL
SELECT Fecha
FROM dbo.Sis_DiasFestivos
WHERE EsActivo = 1
) AS Bloqueos;
DECLARE @Limite date = DATEADD(DAY, 8, @UltimoBloqueo);
DECLARE @MejorInicio datetime2(0);
WHILE @Dia <= @Limite AND (@MejorInicio IS NULL OR CONVERT(datetime2(0), @Dia) <= @MejorInicio)
BEGIN
;WITH Intervalos AS
(
SELECT CveSupervisor, Supervisor,
DATEADD(MINUTE, InicioMinutos, CONVERT(datetime2(0), @Dia)) AS Inicio,
DATEADD(MINUTE, FinMinutos, CONVERT(datetime2(0), @Dia)) AS Fin
FROM @Horarios
WHERE DiaSemana = ((DATEDIFF(DAY, '19000101', @Dia) % 7 + 7) % 7) + 1
AND FinMinutos - InicioMinutos >= @DuracionMinutos
),
Candidatos AS
(
SELECT I.CveSupervisor, I.Supervisor, I.Fin,
CASE WHEN I.Inicio < @FechaDesde THEN @FechaDesde ELSE I.Inicio END AS Inicio
FROM Intervalos AS I
UNION
SELECT I.CveSupervisor, I.Supervisor, I.Fin, C.FechaFin
FROM Intervalos AS I
INNER JOIN dbo.Vis_Citas AS C ON C.CveSupervisor = I.CveSupervisor
AND C.FechaFin >= I.Inicio AND C.FechaFin < I.Fin
AND C.Cancelada = 0 AND C.CveCita <> @CveCitaExcluir
UNION
SELECT I.CveSupervisor, I.Supervisor, I.Fin, DATEADD(DAY, 1, CONVERT(datetime2(0), F.Fecha))
FROM Intervalos AS I
INNER JOIN dbo.Sis_DiasFestivos AS F ON F.EsActivo = 1
AND DATEADD(DAY, 1, CONVERT(datetime2(0), F.Fecha)) >= I.Inicio
AND DATEADD(DAY, 1, CONVERT(datetime2(0), F.Fecha)) < I.Fin
)
INSERT INTO @Opciones(CveSupervisor, Supervisor, FechaInicio, FechaFin)
SELECT C.CveSupervisor, C.Supervisor, C.Inicio, DATEADD(MINUTE, @DuracionMinutos, C.Inicio)
FROM Candidatos AS C
WHERE C.Inicio >= @FechaDesde
AND DATEADD(MINUTE, @DuracionMinutos, C.Inicio) <= C.Fin
AND NOT EXISTS
(
SELECT 1
FROM dbo.Vis_Citas AS O
WHERE O.CveSupervisor = C.CveSupervisor
AND O.Cancelada = 0 AND O.CveCita <> @CveCitaExcluir
AND O.FechaInicio < DATEADD(MINUTE, @DuracionMinutos, C.Inicio)
AND O.FechaFin > C.Inicio
)
AND NOT EXISTS
(
SELECT 1
FROM dbo.Sis_DiasFestivos AS F
WHERE F.EsActivo = 1
AND CONVERT(datetime2(0), F.Fecha) < DATEADD(MINUTE, @DuracionMinutos, C.Inicio)
AND DATEADD(DAY, 1, CONVERT(datetime2(0), F.Fecha)) > C.Inicio
);
SELECT @MejorInicio = MIN(FechaInicio)
FROM @Opciones;
SET @Dia = DATEADD(DAY, 1, @Dia);
END;
END;
SELECT TOP (1) CveSupervisor, Supervisor, FechaInicio, FechaFin
FROM @Opciones
ORDER BY FechaInicio, CveSupervisor;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CitaObtenerDisponibilidad'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CitaGuardar
@CveCita int = 0,
@CveFraccionamientoEtapa int,
@CveSupervisor int,
@FechaInicio datetime2(0),
@DuracionMinutos int,
@Comentarios varchar(2000) = 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 @@TRANCOUNT = 0
BEGIN
SET @ErrorMostrar = 'La programación requiere una transacción de aplicación.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Bloqueo int;
EXEC @Bloqueo = sys.sp_getapplock
@Resource = 'Vis_Citas_Agenda',
@LockMode = 'Exclusive',
@LockOwner = 'Transaction',
@LockTimeout = 10000;
IF @Bloqueo < 0
BEGIN
SET @ErrorMostrar = 'La agenda está siendo actualizada. Intente nuevamente.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveCita > 0 AND NOT EXISTS (SELECT 1 FROM dbo.Vis_Citas WHERE CveCita = @CveCita)
BEGIN
SET @ErrorMostrar = 'La cita ya no existe.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS (SELECT 1 FROM dbo.Vis_Citas WHERE CveCita = @CveCita AND CveFraccionamientoEtapa <> @CveFraccionamientoEtapa)
BEGIN
SET @ErrorMostrar = 'La etapa de una cita existente se conserva para proteger su historial.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Disponible TABLE
(
CveSupervisor int,
Supervisor varchar(100),
FechaInicio datetime2(0),
FechaFin datetime2(0)
);
INSERT INTO @Disponible
EXEC dbo.PA_Vis_CitaObtenerDisponibilidad
@FechaDesde = @FechaInicio,
@DuracionMinutos = @DuracionMinutos,
@CveSupervisor = @CveSupervisor,
@CveCitaExcluir = @CveCita,
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
@ErrorMostrar = @ErrorMostrar OUTPUT,
@ErrorTipo = @ErrorTipo OUTPUT,
@Return = @Return OUTPUT;
IF @Return = 0
RETURN;
SET @Return = 0;
IF NOT EXISTS (SELECT 1 FROM @Disponible WHERE FechaInicio = @FechaInicio AND CveSupervisor = @CveSupervisor)
BEGIN
SET @ErrorMostrar = 'El horario ya no está disponible o no cabe en el turno. Consulte otra opción.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveCita = 0
BEGIN
INSERT INTO dbo.Vis_Citas
(CveFraccionamientoEtapa, CveSupervisor, FechaInicio, DuracionMinutos, FechaFin, Comentarios, CveUsuario)
VALUES
(@CveFraccionamientoEtapa, @CveSupervisor, @FechaInicio, @DuracionMinutos,
DATEADD(MINUTE, @DuracionMinutos, @FechaInicio), @Comentarios, @CveUsuarioEjecuta);
SET @CveCita = CONVERT(int, SCOPE_IDENTITY());
INSERT INTO dbo.Vis_Visitas(CveCita, CveUsuario)
VALUES (@CveCita, @CveUsuarioEjecuta);
END
ELSE
BEGIN
UPDATE dbo.Vis_Citas
SET CveSupervisor = @CveSupervisor,
FechaInicio = @FechaInicio,
DuracionMinutos = @DuracionMinutos,
FechaFin = DATEADD(MINUTE, @DuracionMinutos, @FechaInicio),
Comentarios = @Comentarios,
Cancelada = 0,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveCita = @CveCita;
END;
SELECT @CveCita AS CveCita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CitaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CitaCancelar
@CveCita 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
UPDATE dbo.Vis_Citas
SET Cancelada = 1,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveCita = @CveCita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CitaCancelar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_VisitaObtener
@CveVisita 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 V.CveVisita, V.CveCita, F.CveCliente, F.CveFraccionamiento, E.CveFraccionamientoEtapa,
F.Fraccionamiento, E.Etapa, U.NombreUsuario AS Supervisor, C.FechaInicio,
V.SeRealizo, V.FechaReal, V.Observaciones
FROM dbo.Vis_Visitas AS V
INNER JOIN dbo.Vis_Citas AS C ON C.CveCita = V.CveCita
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
INNER JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveSupervisor
WHERE V.CveVisita = @CveVisita;
SELECT Q.*, L.Numero AS Lote
FROM dbo.Vis_CuestionariosVisita AS Q
LEFT JOIN dbo.FraccionamientosLotes AS L ON L.CveFraccionamientoLote = Q.CveFraccionamientoLote
WHERE Q.CveVisita = @CveVisita
ORDER BY Q.CveCuestionarioVisita;
SELECT CveDocumentoVisita, CveVisita, CveCuestionarioVisita, NombreArchivo, TipoContenido, TamanoBytes
FROM dbo.Vis_DocumentosVisita
WHERE CveVisita = @CveVisita
ORDER BY CveDocumentoVisita;
SELECT C.CveComentarioVisita, C.CveVisita, C.Comentario, C.FechaAlta, U.NombreUsuario AS Usuario
FROM dbo.Vis_ComentariosVisita AS C
LEFT JOIN dbo.Sis_Usuarios AS U ON U.CveUsuario = C.CveUsuario
WHERE C.CveVisita = @CveVisita
ORDER BY C.FechaAlta, C.CveComentarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_VisitaObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_VisitaGuardar
@CveVisita int,
@SeRealizo bit = NULL,
@FechaReal datetime2(0) = NULL,
@Observaciones varchar(max) = 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 @SeRealizo = 1 AND @FechaReal IS NULL
BEGIN
SET @ErrorMostrar = 'Indique cuándo se realizó la visita.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @SeRealizo = 1 AND EXISTS (SELECT 1 FROM dbo.Vis_Visitas AS V INNER JOIN dbo.Vis_Citas AS C ON C.CveCita = V.CveCita WHERE V.CveVisita = @CveVisita AND C.Cancelada = 1)
BEGIN
SET @ErrorMostrar = 'La cita está cancelada.';
SET @ErrorTipo = 2;
RETURN;
END;
UPDATE dbo.Vis_Visitas
SET SeRealizo = @SeRealizo,
FechaReal = CASE WHEN @SeRealizo = 1 THEN @FechaReal ELSE NULL END,
Observaciones = @Observaciones,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveVisita = @CveVisita;
SELECT @CveVisita AS CveVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_VisitaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CuestionarioVisitaObtener
@CveCuestionarioVisita 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 Q.*, L.Numero AS Lote
FROM dbo.Vis_CuestionariosVisita AS Q
LEFT JOIN dbo.FraccionamientosLotes AS L ON L.CveFraccionamientoLote = Q.CveFraccionamientoLote
WHERE Q.CveCuestionarioVisita = @CveCuestionarioVisita;
SELECT CveRespuestaVisita, CveCuestionarioVisita, CvePreguntaPlantilla, Valor
FROM dbo.Vis_RespuestasVisita
WHERE CveCuestionarioVisita = @CveCuestionarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CuestionarioVisitaObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CuestionarioVisitaGuardar
@CveCuestionarioVisita int = 0,
@CveVisita int,
@CvePlantilla int,
@CveFraccionamientoLote int = NULL,
@PasoSupervision bit = NULL,
@AguaPotableTerminada bit = NULL,
@DrenajeTerminado bit = NULL,
@Observaciones varchar(max) = NULL,
@Finalizado bit = 0,
@RespuestasJson nvarchar(max),
@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 @Definicion nvarchar(max);
DECLARE @NombrePlantilla varchar(150);
DECLARE @EsPorLote bit;
IF @CveCuestionarioVisita > 0
BEGIN
SELECT @Definicion = DefinicionPlantilla, @NombrePlantilla = NombrePlantilla,
@EsPorLote = CASE WHEN CveFraccionamientoLote IS NULL THEN 0 ELSE 1 END
FROM dbo.Vis_CuestionariosVisita WITH (UPDLOCK, HOLDLOCK)
WHERE CveCuestionarioVisita = @CveCuestionarioVisita
AND CveVisita = @CveVisita
AND CvePlantilla = @CvePlantilla
AND ISNULL(CveFraccionamientoLote, 0) = ISNULL(@CveFraccionamientoLote, 0);
END
ELSE
BEGIN
SELECT @NombrePlantilla = Nombre, @EsPorLote = EsPorLote
FROM dbo.Vis_PlantillasCuestionario
WHERE CvePlantilla = @CvePlantilla AND EsActivo = 1;
SET @Definicion =
(
SELECT P.CvePlantilla, P.Nombre, P.EsPorLote, P.EsActivo,
JSON_QUERY
(
(
SELECT Q.CvePreguntaPlantilla, Q.CvePlantilla, Q.CveTipoPregunta, Q.Pregunta,
Q.EsRequerida, Q.EsActivo, Q.Orden,
JSON_QUERY
(
(
SELECT O.CveOpcionPregunta, O.CvePreguntaPlantilla, O.TextoOpcion, O.Orden
FROM dbo.Vis_OpcionesPregunta AS O
WHERE O.CvePreguntaPlantilla = Q.CvePreguntaPlantilla
ORDER BY O.Orden, O.CveOpcionPregunta
FOR JSON PATH
)
) AS Opciones
FROM dbo.Vis_PreguntasPlantilla AS Q
WHERE Q.CvePlantilla = P.CvePlantilla AND Q.EsActivo = 1
ORDER BY Q.Orden, Q.CvePreguntaPlantilla
FOR JSON PATH
)
) AS Preguntas
FROM dbo.Vis_PlantillasCuestionario AS P
WHERE P.CvePlantilla = @CvePlantilla AND P.EsActivo = 1
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
);
END;
IF @NombrePlantilla IS NULL OR ISJSON(@Definicion) <> 1
BEGIN
SET @ErrorMostrar = 'No se encontró la plantilla o el cuestionario solicitado.';
SET @ErrorTipo = 2;
RETURN;
END;
IF (@EsPorLote = 1 AND @CveFraccionamientoLote IS NULL) OR (@EsPorLote = 0 AND @CveFraccionamientoLote IS NOT NULL)
BEGIN
SET @ErrorMostrar = 'Seleccione el alcance correcto: etapa o lote.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveFraccionamientoLote IS NOT NULL AND NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosLotes AS L
INNER JOIN dbo.Vis_Citas AS C ON C.CveFraccionamientoEtapa = L.CveFraccionamientoEtapa
INNER JOIN dbo.Vis_Visitas AS V ON V.CveCita = C.CveCita
WHERE V.CveVisita = @CveVisita AND L.CveFraccionamientoLote = @CveFraccionamientoLote
)
BEGIN
SET @ErrorMostrar = 'El lote no pertenece a la etapa de esta visita.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @Finalizado = 1 AND (@PasoSupervision IS NULL OR @AguaPotableTerminada IS NULL OR @DrenajeTerminado IS NULL OR NULLIF(LTRIM(RTRIM(@Observaciones)), '') IS NULL)
BEGIN
SET @ErrorMostrar = 'Conteste las tres conclusiones obligatorias y capture observaciones.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @RespuestasJson IS NULL OR ISJSON(@RespuestasJson) <> 1
BEGIN
SET @ErrorMostrar = 'Las respuestas no tienen un formato válido.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @Respuestas TABLE (CvePreguntaPlantilla int, Valor nvarchar(max));
INSERT INTO @Respuestas(CvePreguntaPlantilla, Valor)
SELECT CvePreguntaPlantilla, Valor
FROM OPENJSON(@RespuestasJson)
WITH (CvePreguntaPlantilla int, Valor nvarchar(max));
IF EXISTS
(
SELECT 1
FROM @Respuestas AS R
WHERE NOT EXISTS
(
SELECT 1
FROM OPENJSON(@Definicion, '$.Preguntas')
WITH (CvePreguntaPlantilla int) AS P
WHERE P.CvePreguntaPlantilla = R.CvePreguntaPlantilla
)
) OR EXISTS (SELECT CvePreguntaPlantilla FROM @Respuestas GROUP BY CvePreguntaPlantilla HAVING COUNT(*) > 1)
BEGIN
SET @ErrorMostrar = 'Las respuestas no corresponden al cuestionario.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @Finalizado = 1 AND EXISTS
(
SELECT 1
FROM OPENJSON(@Definicion, '$.Preguntas')
WITH (CvePreguntaPlantilla int, EsRequerida bit) AS P
WHERE P.EsRequerida = 1 AND NOT EXISTS
(
SELECT 1
FROM @Respuestas AS R
WHERE R.CvePreguntaPlantilla = P.CvePreguntaPlantilla
AND NULLIF(LTRIM(RTRIM(R.Valor)), '') IS NOT NULL
AND R.Valor <> '[]'
)
)
BEGIN
SET @ErrorMostrar = 'Conteste las preguntas obligatorias antes de finalizar.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveCuestionarioVisita = 0
BEGIN
INSERT INTO dbo.Vis_CuestionariosVisita
(CveVisita, CvePlantilla, CveFraccionamientoLote, NombrePlantilla, DefinicionPlantilla,
PasoSupervision, AguaPotableTerminada, DrenajeTerminado, Observaciones, Finalizado, CveUsuario)
VALUES
(@CveVisita, @CvePlantilla, @CveFraccionamientoLote, @NombrePlantilla, @Definicion,
@PasoSupervision, @AguaPotableTerminada, @DrenajeTerminado, @Observaciones, @Finalizado, @CveUsuarioEjecuta);
SET @CveCuestionarioVisita = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Vis_CuestionariosVisita
SET PasoSupervision = @PasoSupervision,
AguaPotableTerminada = @AguaPotableTerminada,
DrenajeTerminado = @DrenajeTerminado,
Observaciones = @Observaciones,
Finalizado = @Finalizado,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveCuestionarioVisita = @CveCuestionarioVisita;
END;
DELETE A
FROM dbo.Vis_RespuestasVisita AS A
WHERE A.CveCuestionarioVisita = @CveCuestionarioVisita
AND NOT EXISTS
(
SELECT 1
FROM @Respuestas AS R
WHERE R.CvePreguntaPlantilla = A.CvePreguntaPlantilla
);
UPDATE A
SET Valor = R.Valor,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
FROM dbo.Vis_RespuestasVisita AS A
INNER JOIN @Respuestas AS R ON R.CvePreguntaPlantilla = A.CvePreguntaPlantilla
WHERE A.CveCuestionarioVisita = @CveCuestionarioVisita;
INSERT INTO dbo.Vis_RespuestasVisita(CveCuestionarioVisita, CvePreguntaPlantilla, Valor, CveUsuario)
SELECT @CveCuestionarioVisita, R.CvePreguntaPlantilla, R.Valor, @CveUsuarioEjecuta
FROM @Respuestas AS R
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Vis_RespuestasVisita AS A
WHERE A.CveCuestionarioVisita = @CveCuestionarioVisita
AND A.CvePreguntaPlantilla = R.CvePreguntaPlantilla
);
SELECT @CveCuestionarioVisita AS CveCuestionarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CuestionarioVisitaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_CuestionarioVisitaEliminar
@CveCuestionarioVisita 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 EXISTS (SELECT 1 FROM dbo.Vis_DocumentosVisita WHERE CveCuestionarioVisita = @CveCuestionarioVisita)
BEGIN
SET @ErrorMostrar = 'El cuestionario tiene documentos asociados. Retírelos antes de eliminarlo.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM dbo.Vis_RespuestasVisita
WHERE CveCuestionarioVisita = @CveCuestionarioVisita;
DELETE FROM dbo.Vis_CuestionariosVisita
WHERE CveCuestionarioVisita = @CveCuestionarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_CuestionarioVisitaEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_DocumentoVisitaObtener
@CveDocumentoVisita 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 D.*, F.CveCliente
FROM dbo.Vis_DocumentosVisita AS D
INNER JOIN dbo.Vis_Visitas AS V ON V.CveVisita = D.CveVisita
INNER JOIN dbo.Vis_Citas AS C ON C.CveCita = V.CveCita
INNER JOIN dbo.FraccionamientosEtapas AS E ON E.CveFraccionamientoEtapa = C.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE D.CveDocumentoVisita = @CveDocumentoVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_DocumentoVisitaObtener'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_DocumentoVisitaGuardar
@CveVisita int,
@CveCuestionarioVisita int = NULL,
@NombreArchivo varchar(255),
@NombreFisico varchar(100),
@TipoContenido varchar(100),
@TamanoBytes bigint,
@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 @CveCuestionarioVisita IS NOT NULL AND NOT EXISTS (SELECT 1 FROM dbo.Vis_CuestionariosVisita WHERE CveCuestionarioVisita = @CveCuestionarioVisita AND CveVisita = @CveVisita)
BEGIN
SET @ErrorMostrar = 'El cuestionario no corresponde a esta visita.';
SET @ErrorTipo = 2;
RETURN;
END;
INSERT INTO dbo.Vis_DocumentosVisita
(CveVisita, CveCuestionarioVisita, NombreArchivo, NombreFisico, TipoContenido, TamanoBytes, CveUsuario)
VALUES
(@CveVisita, @CveCuestionarioVisita, @NombreArchivo, @NombreFisico, @TipoContenido, @TamanoBytes, @CveUsuarioEjecuta);
SELECT CONVERT(int, SCOPE_IDENTITY()) AS CveDocumentoVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_DocumentoVisitaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_DocumentoVisitaEliminar
@CveDocumentoVisita 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
DELETE FROM dbo.Vis_DocumentosVisita
WHERE CveDocumentoVisita = @CveDocumentoVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_DocumentoVisitaEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_ComentarioVisitaGuardar
@CveComentarioVisita int = 0,
@CveVisita int,
@Comentario varchar(max),
@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 NULLIF(LTRIM(RTRIM(@Comentario)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el comentario.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveComentarioVisita = 0
BEGIN
INSERT INTO dbo.Vis_ComentariosVisita(CveVisita, Comentario, CveUsuario)
VALUES (@CveVisita, @Comentario, @CveUsuarioEjecuta);
SET @CveComentarioVisita = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Vis_ComentariosVisita
SET Comentario = @Comentario,
CveUsuario = @CveUsuarioEjecuta,
FechaModificacion = GETDATE()
WHERE CveComentarioVisita = @CveComentarioVisita AND CveVisita = @CveVisita;
END;
SELECT @CveComentarioVisita AS CveComentarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_ComentarioVisitaGuardar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vis_ComentarioVisitaEliminar
@CveComentarioVisita 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
DELETE FROM dbo.Vis_ComentariosVisita
WHERE CveComentarioVisita = @CveComentarioVisita;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'No fue posible completar la operación. Contacte a Sistemas.';
SET @ErrorTipo = 1;
SET @Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Vis_ComentarioVisitaEliminar'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
-- Catálogo de bitácora. Se resuelven las claves desde los registros existentes.
DECLARE @Tablas TABLE
(
Tabla varchar(128),
Nombre varchar(150),
Llave varchar(128)
);
INSERT INTO @Tablas(Tabla, Nombre, Llave)
VALUES
('Sis_ConfiguracionVisitas', 'Configuración de visitas', 'CveConfiguracionVisitas'),
('Sis_DiasFestivos', 'Días festivos', 'CveDiaFestivo'),
('Vis_PlantillasCuestionario', 'Plantillas de visita', 'CvePlantilla'),
('Vis_PreguntasPlantilla', 'Preguntas de plantilla', 'CvePreguntaPlantilla'),
('Vis_OpcionesPregunta', 'Opciones de pregunta', 'CveOpcionPregunta'),
('Vis_Citas', 'Citas', 'CveCita'),
('Vis_Visitas', 'Visitas', 'CveVisita'),
('Vis_CuestionariosVisita', 'Cuestionarios de visita', 'CveCuestionarioVisita'),
('Vis_RespuestasVisita', 'Respuestas de visita', 'CveRespuestaVisita'),
('Vis_DocumentosVisita', 'Documentos de visita', 'CveDocumentoVisita'),
('Vis_ComentariosVisita', 'Comentarios de visita', 'CveComentarioVisita');
INSERT INTO dbo.Bit_Tablas(NombreTablaSQL, NombreMostrar, NombreCampoLlaveSQL, Activo, FechaAlta)
SELECT T.Tabla, T.Nombre, T.Llave, 1, GETDATE()
FROM @Tablas AS T
WHERE NOT EXISTS (SELECT 1 FROM dbo.Bit_Tablas AS B WHERE B.NombreTablaSQL = T.Tabla);
UPDATE B
SET Activo = 1,
NombreCampoLlaveSQL = T.Llave,
FechaMod = GETDATE()
FROM dbo.Bit_Tablas AS B
INNER JOIN @Tablas AS T ON T.Tabla = B.NombreTablaSQL
WHERE B.Activo = 0 OR ISNULL(B.NombreCampoLlaveSQL, '') <> T.Llave;
DECLARE @Campos TABLE
(
Tabla varchar(128),
Campo varchar(128),
Tipo varchar(128)
);
INSERT INTO @Campos(Tabla, Campo, Tipo)
VALUES
('Sis_ConfiguracionVisitas', 'CveConfiguracionVisitas', 'int'),
('Sis_ConfiguracionVisitas', 'DuracionPredeterminadaMinutos', 'int'),
('Sis_DiasFestivos', 'CveDiaFestivo', 'int'),
('Sis_DiasFestivos', 'Fecha', 'date'),
('Sis_DiasFestivos', 'Descripcion', 'varchar'),
('Sis_DiasFestivos', 'EsActivo', 'bit'),
('Vis_PlantillasCuestionario', 'CvePlantilla', 'int'),
('Vis_PlantillasCuestionario', 'Nombre', 'varchar'),
('Vis_PlantillasCuestionario', 'EsPorLote', 'bit'),
('Vis_PlantillasCuestionario', 'EsActivo', 'bit'),
('Vis_PreguntasPlantilla', 'CvePreguntaPlantilla', 'int'),
('Vis_PreguntasPlantilla', 'CvePlantilla', 'int'),
('Vis_PreguntasPlantilla', 'CveTipoPregunta', 'int'),
('Vis_PreguntasPlantilla', 'Pregunta', 'varchar'),
('Vis_PreguntasPlantilla', 'EsRequerida', 'bit'),
('Vis_PreguntasPlantilla', 'EsActivo', 'bit'),
('Vis_PreguntasPlantilla', 'Orden', 'int'),
('Vis_OpcionesPregunta', 'CveOpcionPregunta', 'int'),
('Vis_OpcionesPregunta', 'CvePreguntaPlantilla', 'int'),
('Vis_OpcionesPregunta', 'TextoOpcion', 'varchar'),
('Vis_OpcionesPregunta', 'Orden', 'int'),
('Vis_Citas', 'CveCita', 'int'),
('Vis_Citas', 'CveFraccionamientoEtapa', 'int'),
('Vis_Citas', 'CveSupervisor', 'int'),
('Vis_Citas', 'FechaInicio', 'datetime2'),
('Vis_Citas', 'DuracionMinutos', 'int'),
('Vis_Citas', 'FechaFin', 'datetime2'),
('Vis_Citas', 'Cancelada', 'bit'),
('Vis_Citas', 'Comentarios', 'varchar'),
('Vis_Visitas', 'CveVisita', 'int'),
('Vis_Visitas', 'CveCita', 'int'),
('Vis_Visitas', 'SeRealizo', 'bit'),
('Vis_Visitas', 'FechaReal', 'datetime2'),
('Vis_Visitas', 'Observaciones', 'varchar'),
('Vis_CuestionariosVisita', 'CveCuestionarioVisita', 'int'),
('Vis_CuestionariosVisita', 'CveVisita', 'int'),
('Vis_CuestionariosVisita', 'CvePlantilla', 'int'),
('Vis_CuestionariosVisita', 'CveFraccionamientoLote', 'int'),
('Vis_CuestionariosVisita', 'NombrePlantilla', 'varchar'),
('Vis_CuestionariosVisita', 'DefinicionPlantilla', 'nvarchar'),
('Vis_CuestionariosVisita', 'PasoSupervision', 'bit'),
('Vis_CuestionariosVisita', 'AguaPotableTerminada', 'bit'),
('Vis_CuestionariosVisita', 'DrenajeTerminado', 'bit'),
('Vis_CuestionariosVisita', 'Observaciones', 'varchar'),
('Vis_CuestionariosVisita', 'Finalizado', 'bit'),
('Vis_RespuestasVisita', 'CveRespuestaVisita', 'int'),
('Vis_RespuestasVisita', 'CveCuestionarioVisita', 'int'),
('Vis_RespuestasVisita', 'CvePreguntaPlantilla', 'int'),
('Vis_RespuestasVisita', 'Valor', 'nvarchar'),
('Vis_DocumentosVisita', 'CveDocumentoVisita', 'int'),
('Vis_DocumentosVisita', 'CveVisita', 'int'),
('Vis_DocumentosVisita', 'CveCuestionarioVisita', 'int'),
('Vis_DocumentosVisita', 'NombreArchivo', 'varchar'),
('Vis_DocumentosVisita', 'NombreFisico', 'varchar'),
('Vis_DocumentosVisita', 'TipoContenido', 'varchar'),
('Vis_DocumentosVisita', 'TamanoBytes', 'bigint'),
('Vis_ComentariosVisita', 'CveComentarioVisita', 'int'),
('Vis_ComentariosVisita', 'CveVisita', 'int'),
('Vis_ComentariosVisita', 'Comentario', 'varchar');
INSERT INTO dbo.Bit_Campos
(CveTabla, NombreCampoSQL, NombreMostrar, TipoDatoSQL, MostrarEnBitacora, Activo, FechaAlta)
SELECT T.CveTabla, C.Campo, C.Campo, C.Tipo, 1, 1, GETDATE()
FROM @Campos AS C
INNER JOIN dbo.Bit_Tablas AS T ON T.NombreTablaSQL = C.Tabla
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Bit_Campos AS B
WHERE B.CveTabla = T.CveTabla AND B.NombreCampoSQL = C.Campo
);
UPDATE B
SET Activo = 1,
MostrarEnBitacora = 1,
FechaMod = GETDATE()
FROM dbo.Bit_Campos AS B
INNER JOIN dbo.Bit_Tablas AS T ON T.CveTabla = B.CveTabla
INNER JOIN @Campos AS C ON C.Tabla = T.NombreTablaSQL AND C.Campo = B.NombreCampoSQL
WHERE B.Activo = 0 OR B.MostrarEnBitacora = 0;
GO
-- Menús y acceso a las seis pantallas nuevas para los roles internos existentes.
DECLARE @Catalogos int;
DECLARE @Desarrolladores int;
DECLARE @Plataforma int;
IF (SELECT COUNT(*) FROM dbo.Sis_Modulos WHERE NombreModulo = 'Catálogos' AND Activo = 1) <> 1
THROW 51200, 'No se encontró el contenedor único de Catálogos.', 1;
IF (SELECT COUNT(*) FROM dbo.Sis_Modulos WHERE NombreModulo = 'Desarrolladores' AND Activo = 1 AND CveModuloPadre IS NULL) <> 1
THROW 51201, 'No se encontró el contenedor único de Desarrolladores.', 1;
SELECT @Catalogos = CveModulo, @Plataforma = CvePlataforma
FROM dbo.Sis_Modulos
WHERE NombreModulo = 'Catálogos' AND Activo = 1;
SELECT @Desarrolladores = CveModulo
FROM dbo.Sis_Modulos
WHERE NombreModulo = 'Desarrolladores' AND Activo = 1 AND CveModuloPadre IS NULL;
DECLARE @Pantallas TABLE
(
Nombre varchar(150),
Url varchar(500),
Padre int,
Visible bit,
Posicion int
);
INSERT INTO @Pantallas(Nombre, Url, Padre, Visible, Posicion)
VALUES
('Días festivos', '~/Pages/Catalogos/DiasFestivos.aspx', @Catalogos, 1, 1),
('Plantillas de visita', '~/Pages/Catalogos/PlantillasVisita.aspx', @Catalogos, 1, 2),
('Detalle de plantilla de visita', '~/Pages/Catalogos/PlantillaVisitaDetalle.aspx', @Catalogos, 0, 3),
('Citas de supervisión', '~/Pages/Visitas/Citas.aspx', @Desarrolladores, 1, 1),
('Programar cita', '~/Pages/Visitas/CitaDetalle.aspx', @Desarrolladores, 0, 2),
('Detalle de visita', '~/Pages/Visitas/VisitaDetalle.aspx', @Desarrolladores, 0, 3);
DECLARE @OrdenCatalogos int = ISNULL((SELECT MAX(OrdenVisualizacion) FROM dbo.Sis_Modulos WHERE CveModuloPadre = @Catalogos), 0);
DECLARE @OrdenDesarrolladores int = ISNULL((SELECT MAX(OrdenVisualizacion) FROM dbo.Sis_Modulos WHERE CveModuloPadre = @Desarrolladores), 0);
INSERT INTO dbo.Sis_Modulos
(CveModuloPadre, CvePlataforma, NombreModulo, Url, ClaseCssIcono, OrdenVisualizacion, Visible, Activo, FechaCreacion)
SELECT P.Padre, @Plataforma, P.Nombre, P.Url, 'fa fa-calendar',
CASE WHEN P.Padre = @Catalogos THEN @OrdenCatalogos ELSE @OrdenDesarrolladores END + P.Posicion,
P.Visible, 1, GETDATE()
FROM @Pantallas AS P
WHERE NOT EXISTS (SELECT 1 FROM dbo.Sis_Modulos AS M WHERE M.Url = P.Url);
UPDATE D
SET CveModuloPadre = L.CveModulo
FROM dbo.Sis_Modulos AS D
INNER JOIN @Pantallas AS P ON P.Url = D.Url AND P.Visible = 0
INNER JOIN dbo.Sis_Modulos AS L ON L.Url = CASE
WHEN P.Url = '~/Pages/Catalogos/PlantillaVisitaDetalle.aspx' THEN '~/Pages/Catalogos/PlantillasVisita.aspx'
ELSE '~/Pages/Visitas/Citas.aspx'
END
WHERE ISNULL(D.CveModuloPadre, 0) <> L.CveModulo;
INSERT INTO dbo.Sis_RolesModulos
(CveRol, CveModulo, PuedeVer, PuedeCrear, PuedeModificar, PuedeEliminar, PuedeImprimir, PuedeExportar, FechaCreacion)
SELECT R.CveRol, M.CveModulo, 1, 1, 1, 1, 0, 0, GETDATE()
FROM dbo.Sis_Modulos AS M
INNER JOIN @Pantallas AS P ON P.Url = M.Url
CROSS JOIN dbo.Sis_Roles AS R
WHERE R.Activo = 1 AND R.NombreRol IN ('SuperUsuario', 'Administrador')
AND NOT EXISTS
(
SELECT 1
FROM dbo.Sis_RolesModulos AS RM
WHERE RM.CveRol = R.CveRol AND RM.CveModulo = M.CveModulo
);
GO