Files
Plataforma-de-desarrolladores/Migracion_Fraccionamientos_EtapasAvanceGIS_20260814.sql
Jorge Luis caudillo esparza 45ce71c7da BITACORA FEA
2026-08-14 05:43:41 -07:00

1283 lines
39 KiB
Transact-SQL

/*
Avance por etapa y GIS opcional por etapa.
La migración es idempotente y conserva el contrato de errores común.
*/
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF COL_LENGTH(N'dbo.FraccionamientosEtapas', N'Avance') IS NULL
BEGIN
ALTER TABLE dbo.FraccionamientosEtapas
ADD Avance decimal(5,2) NOT NULL
CONSTRAINT DF_FraccionamientosEtapas_Avance DEFAULT (0.00);
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_FraccionamientoDelete]
@CveFraccionamiento 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveFraccionamiento = @CveFraccionamiento
OR EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas AS E
WHERE E.CveFraccionamientoEtapa =
S.CveFraccionamientoEtapa
AND E.CveFraccionamiento = @CveFraccionamiento
)
)
BEGIN
SET @ErrorMostrar = 'El fraccionamiento tiene trámites relacionados y no puede eliminarse.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE G
FROM dbo.FraccionamientosEtapasGIS AS G
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = G.CveFraccionamientoEtapa
WHERE E.CveFraccionamiento = @CveFraccionamiento;
DELETE L
FROM dbo.FraccionamientosLotes AS L
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = L.CveFraccionamientoEtapa
WHERE E.CveFraccionamiento = @CveFraccionamiento;
DELETE FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamiento = @CveFraccionamiento;
DELETE FROM dbo.Fraccionamientos
WHERE CveFraccionamiento = @CveFraccionamiento;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al eliminar el fraccionamiento; 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_Fraccionamientos_FraccionamientoDelete'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_FraccionamientoList]
@Texto varchar(200) = NULL,
@CveCliente int = NULL,
@IncluirInactivos bit = 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
SELECT
F.CveFraccionamiento,
F.CveCliente,
C.Nombre AS Cliente,
F.Fraccionamiento,
F.Hectareas,
F.Ubicacion,
F.CveEstatus,
COALESCE(FE.Estatus, 'Estatus no disponible') AS Estatus,
F.EsActivo,
A.NumeroEtapas,
A.NumeroLotes,
A.AvanceGlobal,
F.FechaAlta
FROM dbo.Fraccionamientos AS F
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = F.CveCliente
LEFT JOIN dbo.Fraccionamientos_Estatus AS FE
ON FE.CveEstatus = F.CveEstatus
OUTER APPLY
(
SELECT
COUNT(E.CveFraccionamientoEtapa) AS NumeroEtapas,
(
SELECT COUNT(L.CveFraccionamientoLote)
FROM dbo.FraccionamientosLotes AS L
INNER JOIN dbo.FraccionamientosEtapas AS EL
ON EL.CveFraccionamientoEtapa =
L.CveFraccionamientoEtapa
WHERE EL.CveFraccionamiento = F.CveFraccionamiento
) AS NumeroLotes,
CONVERT(
decimal(5,2),
COALESCE(
AVG(CONVERT(decimal(9,4), E.Avance)),
0.00)) AS AvanceGlobal
FROM dbo.FraccionamientosEtapas AS E
WHERE E.CveFraccionamiento = F.CveFraccionamiento
) AS A
WHERE (@IncluirInactivos = 1 OR F.EsActivo = 1)
AND (@CveCliente IS NULL OR F.CveCliente = @CveCliente)
AND
(
NULLIF(LTRIM(RTRIM(@Texto)), '') IS NULL
OR F.Fraccionamiento LIKE '%' + LTRIM(RTRIM(@Texto)) + '%'
OR C.Nombre LIKE '%' + LTRIM(RTRIM(@Texto)) + '%'
OR F.Ubicacion LIKE '%' + LTRIM(RTRIM(@Texto)) + '%'
)
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
ORDER BY C.Nombre, F.Fraccionamiento;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar los fraccionamientos; 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_Fraccionamientos_FraccionamientoList'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_FraccionamientoGet]
@CveFraccionamiento 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
F.CveFraccionamiento,
F.CveCliente,
C.Nombre AS Cliente,
F.Fraccionamiento,
F.Hectareas,
F.Ubicacion,
F.CveEstatus,
COALESCE(FE.Estatus, 'Estatus no disponible') AS Estatus,
F.EsActivo,
A.NumeroEtapas,
A.NumeroLotes,
A.AvanceGlobal,
F.FechaAlta
FROM dbo.Fraccionamientos AS F
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = F.CveCliente
LEFT JOIN dbo.Fraccionamientos_Estatus AS FE
ON FE.CveEstatus = F.CveEstatus
OUTER APPLY
(
SELECT
COUNT(E.CveFraccionamientoEtapa) AS NumeroEtapas,
(
SELECT COUNT(L.CveFraccionamientoLote)
FROM dbo.FraccionamientosLotes AS L
INNER JOIN dbo.FraccionamientosEtapas AS EL
ON EL.CveFraccionamientoEtapa =
L.CveFraccionamientoEtapa
WHERE EL.CveFraccionamiento = F.CveFraccionamiento
) AS NumeroLotes,
CONVERT(
decimal(5,2),
COALESCE(
AVG(CONVERT(decimal(9,4), E.Avance)),
0.00)) AS AvanceGlobal
FROM dbo.FraccionamientosEtapas AS E
WHERE E.CveFraccionamiento = F.CveFraccionamiento
) AS A
WHERE F.CveFraccionamiento = @CveFraccionamiento;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar el fraccionamiento; 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_Fraccionamientos_FraccionamientoGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
IF NOT EXISTS
(
SELECT 1
FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID(N'dbo.FraccionamientosEtapas')
AND name = N'CK_FraccionamientosEtapas_Avance'
)
BEGIN
ALTER TABLE dbo.FraccionamientosEtapas WITH CHECK
ADD CONSTRAINT CK_FraccionamientosEtapas_Avance
CHECK (Avance >= 0.00 AND Avance <= 100.00);
ALTER TABLE dbo.FraccionamientosEtapas
CHECK CONSTRAINT CK_FraccionamientosEtapas_Avance;
END;
GO
IF OBJECT_ID(N'dbo.FraccionamientosEtapasGIS', N'U') IS NULL
BEGIN
CREATE TABLE dbo.FraccionamientosEtapasGIS
(
CveFraccionamientoEtapaGIS int IDENTITY(1,1) NOT NULL,
CveFraccionamientoEtapa int NOT NULL,
Nombre varchar(200) COLLATE Modern_Spanish_CS_AS NOT NULL,
UrlVisualizacion varchar(2000) COLLATE Modern_Spanish_CS_AS NOT NULL,
FechaAlta datetime NOT NULL
CONSTRAINT DF_FraccionamientosEtapasGIS_FechaAlta
DEFAULT (GETDATE()),
FechaModificacion datetime NULL,
CveUsuario int NOT NULL,
CONSTRAINT PK_FraccionamientosEtapasGIS
PRIMARY KEY CLUSTERED (CveFraccionamientoEtapaGIS),
CONSTRAINT UQ_FraccionamientosEtapasGIS_Etapa
UNIQUE NONCLUSTERED (CveFraccionamientoEtapa),
CONSTRAINT CK_FraccionamientosEtapasGIS_UrlVisualizacion
CHECK
(
LOWER(UrlVisualizacion) LIKE 'http://%'
OR LOWER(UrlVisualizacion) LIKE 'https://%'
),
CONSTRAINT FK_FraccionamientosEtapasGIS_Etapa
FOREIGN KEY (CveFraccionamientoEtapa)
REFERENCES dbo.FraccionamientosEtapas (CveFraccionamientoEtapa),
CONSTRAINT FK_FraccionamientosEtapasGIS_Usuario
FOREIGN KEY (CveUsuario)
REFERENCES dbo.Sis_Usuarios (CveUsuario)
);
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'TipoDatoSQL') IS NULL
BEGIN
ALTER TABLE dbo.Bit_Campos
ADD TipoDatoSQL varchar(128) COLLATE Modern_Spanish_CS_AS NULL;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveTablaReferencia') IS NULL
BEGIN
ALTER TABLE dbo.Bit_Campos
ADD CveTablaReferencia int NULL;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveCampoMostrarReferencia') IS NULL
BEGIN
ALTER TABLE dbo.Bit_Campos
ADD CveCampoMostrarReferencia int NULL;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveTablaReferencia') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveCampoMostrarReferencia') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID(N'dbo.Bit_Campos')
AND name = N'CK_Bit_Campos_ReferenciaCompleta'
)
BEGIN
ALTER TABLE dbo.Bit_Campos WITH CHECK
ADD CONSTRAINT CK_Bit_Campos_ReferenciaCompleta
CHECK
(
(CveTablaReferencia IS NULL
AND CveCampoMostrarReferencia IS NULL)
OR
(CveTablaReferencia IS NOT NULL
AND CveCampoMostrarReferencia IS NOT NULL)
);
ALTER TABLE dbo.Bit_Campos
CHECK CONSTRAINT CK_Bit_Campos_ReferenciaCompleta;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND OBJECT_ID(N'dbo.Bit_Tablas', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveTablaReferencia') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM sys.foreign_keys
WHERE parent_object_id = OBJECT_ID(N'dbo.Bit_Campos')
AND name = N'FK_Bit_Campos_TablaReferencia'
)
BEGIN
ALTER TABLE dbo.Bit_Campos WITH CHECK
ADD CONSTRAINT FK_Bit_Campos_TablaReferencia
FOREIGN KEY (CveTablaReferencia)
REFERENCES dbo.Bit_Tablas (CveTabla);
ALTER TABLE dbo.Bit_Campos
CHECK CONSTRAINT FK_Bit_Campos_TablaReferencia;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
AND COL_LENGTH(N'dbo.Bit_Campos', N'CveCampoMostrarReferencia') IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM sys.foreign_keys
WHERE parent_object_id = OBJECT_ID(N'dbo.Bit_Campos')
AND name = N'FK_Bit_Campos_CampoMostrarReferencia'
)
BEGIN
ALTER TABLE dbo.Bit_Campos WITH CHECK
ADD CONSTRAINT FK_Bit_Campos_CampoMostrarReferencia
FOREIGN KEY (CveCampoMostrarReferencia)
REFERENCES dbo.Bit_Campos (CveCampo);
ALTER TABLE dbo.Bit_Campos
CHECK CONSTRAINT FK_Bit_Campos_CampoMostrarReferencia;
END;
GO
IF OBJECT_ID(N'dbo.Bit_Tablas', N'U') IS NOT NULL
AND OBJECT_ID(N'dbo.Bit_Campos', N'U') IS NOT NULL
BEGIN
DECLARE @CveTablaGIS int;
SELECT @CveTablaGIS = T.CveTabla
FROM dbo.Bit_Tablas AS T
WHERE T.NombreTablaSQL = 'FraccionamientosEtapasGIS';
IF @CveTablaGIS IS NULL
BEGIN
INSERT INTO dbo.Bit_Tablas
(
NombreTablaSQL,
NombreMostrar,
Descripcion,
NombreCampoLlaveSQL,
Activo
)
VALUES
(
'FraccionamientosEtapasGIS',
'GIS de etapas',
'GIS asociado a las etapas.',
'CveFraccionamientoEtapaGIS',
1
);
SET @CveTablaGIS = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.Bit_Tablas
SET
NombreMostrar = 'GIS de etapas',
Descripcion = 'GIS asociado a las etapas.',
NombreCampoLlaveSQL = 'CveFraccionamientoEtapaGIS',
Activo = 1,
FechaMod = GETDATE()
WHERE CveTabla = @CveTablaGIS;
END;
DECLARE @Campos TABLE
(
NombreTablaSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL,
NombreCampoSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL,
NombreMostrar varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL,
MostrarEnBitacora bit NOT NULL
);
INSERT INTO @Campos
(
NombreTablaSQL,
NombreCampoSQL,
NombreMostrar,
MostrarEnBitacora
)
VALUES
('FraccionamientosEtapas', 'Avance', 'Avance', 1),
('FraccionamientosEtapasGIS', 'CveFraccionamientoEtapaGIS', 'Clave de GIS', 0),
('FraccionamientosEtapasGIS', 'CveFraccionamientoEtapa', 'Etapa', 1),
('FraccionamientosEtapasGIS', 'Nombre', 'GIS', 1),
('FraccionamientosEtapasGIS', 'UrlVisualizacion', 'URL de visualización', 1);
UPDATE C
SET
C.NombreMostrar = S.NombreMostrar,
C.MostrarEnBitacora = S.MostrarEnBitacora,
C.TipoDatoSQL = TY.name COLLATE Modern_Spanish_CS_AS,
C.Activo = 1,
C.FechaMod = GETDATE()
FROM dbo.Bit_Campos AS C
INNER JOIN dbo.Bit_Tablas AS T
ON T.CveTabla = C.CveTabla
INNER JOIN @Campos AS S
ON S.NombreTablaSQL = T.NombreTablaSQL
AND S.NombreCampoSQL = C.NombreCampoSQL
INNER JOIN sys.tables AS ST
ON ST.name COLLATE Modern_Spanish_CS_AS = S.NombreTablaSQL
AND SCHEMA_NAME(ST.schema_id) = 'dbo'
INNER JOIN sys.columns AS CO
ON CO.object_id = ST.object_id
AND CO.name COLLATE Modern_Spanish_CS_AS = S.NombreCampoSQL
INNER JOIN sys.types AS TY
ON TY.user_type_id = CO.user_type_id;
INSERT INTO dbo.Bit_Campos
(
CveTabla,
NombreCampoSQL,
NombreMostrar,
MostrarEnBitacora,
TipoDatoSQL,
Activo
)
SELECT
T.CveTabla,
S.NombreCampoSQL,
S.NombreMostrar,
S.MostrarEnBitacora,
TY.name COLLATE Modern_Spanish_CS_AS,
1
FROM @Campos AS S
INNER JOIN dbo.Bit_Tablas AS T
ON T.NombreTablaSQL = S.NombreTablaSQL
INNER JOIN sys.tables AS ST
ON ST.name COLLATE Modern_Spanish_CS_AS = S.NombreTablaSQL
AND SCHEMA_NAME(ST.schema_id) = 'dbo'
INNER JOIN sys.columns AS CO
ON CO.object_id = ST.object_id
AND CO.name COLLATE Modern_Spanish_CS_AS = S.NombreCampoSQL
INNER JOIN sys.types AS TY
ON TY.user_type_id = CO.user_type_id
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.Bit_Campos AS C
WHERE C.CveTabla = T.CveTabla
AND C.NombreCampoSQL = S.NombreCampoSQL
);
UPDATE CG
SET
CG.CveTablaReferencia = TE.CveTabla,
CG.CveCampoMostrarReferencia = CE.CveCampo,
CG.FechaMod = GETDATE()
FROM dbo.Bit_Campos AS CG
INNER JOIN dbo.Bit_Tablas AS TG
ON TG.CveTabla = CG.CveTabla
AND TG.NombreTablaSQL = 'FraccionamientosEtapasGIS'
INNER JOIN dbo.Bit_Tablas AS TE
ON TE.NombreTablaSQL = 'FraccionamientosEtapas'
AND TE.Activo = 1
INNER JOIN dbo.Bit_Campos AS CE
ON CE.CveTabla = TE.CveTabla
AND CE.NombreCampoSQL = 'Etapa'
AND CE.Activo = 1
WHERE CG.NombreCampoSQL = 'CveFraccionamientoEtapa';
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaList]
@CveFraccionamiento 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Fraccionamientos AS F
WHERE F.CveFraccionamiento = @CveFraccionamiento
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'El fraccionamiento no existe o no está asignado al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
E.CveFraccionamientoEtapa,
E.CveFraccionamiento,
E.Etapa,
E.Hectareas,
E.Orden,
E.Avance,
E.EsActivo
FROM dbo.FraccionamientosEtapas AS E
WHERE E.CveFraccionamiento = @CveFraccionamiento
ORDER BY E.Orden, E.Etapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar las etapas; 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_Fraccionamientos_EtapaList'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaGet]
@CveFraccionamientoEtapa 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
SELECT
E.CveFraccionamientoEtapa,
E.CveFraccionamiento,
F.CveCliente,
E.Etapa,
E.Hectareas,
E.Orden,
E.Avance,
E.EsActivo
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
);
IF @@ROWCOUNT = 0
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar la etapa; 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_Fraccionamientos_EtapaGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaAvanceUpdate]
@CveFraccionamientoEtapa int,
@Avance decimal(5,2),
@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 @Avance IS NULL OR @Avance < 0.00 OR @Avance > 100.00
BEGIN
SET @ErrorMostrar = 'El avance debe estar entre 0.00 y 100.00 por ciento.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
DECLARE @Cambios TABLE
(
AvanceAnterior decimal(5,2) NOT NULL,
Avance decimal(5,2) NOT NULL
);
UPDATE E
SET
E.Avance = @Avance,
E.FechaModificacion = GETDATE(),
E.CveUsuario = @CveUsuarioEjecuta
OUTPUT
DELETED.Avance,
INSERTED.Avance
INTO @Cambios
(
AvanceAnterior,
Avance
)
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND E.Avance <> @Avance
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
);
SELECT
E.CveFraccionamientoEtapa,
E.CveFraccionamiento,
F.CveCliente,
E.Etapa,
COALESCE(C.AvanceAnterior, E.Avance) AS AvanceAnterior,
COALESCE(C.Avance, E.Avance) AS Avance,
CONVERT(
bit,
CASE WHEN C.Avance IS NULL THEN 0 ELSE 1 END
) AS HuboCambio
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
OUTER APPLY
(
SELECT
CA.AvanceAnterior,
CA.Avance
FROM @Cambios AS CA
) AS C
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
);
IF @@ROWCOUNT = 0
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al actualizar el avance de la etapa; 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_Fraccionamientos_EtapaAvanceUpdate'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaGISGet]
@CveFraccionamientoEtapa 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
G.CveFraccionamientoEtapaGIS,
G.CveFraccionamientoEtapa,
E.CveFraccionamiento,
F.CveCliente,
E.Etapa,
G.Nombre,
G.UrlVisualizacion,
G.FechaAlta,
G.FechaModificacion
FROM dbo.FraccionamientosEtapasGIS AS G
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = G.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE G.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar el GIS de la etapa; 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_Fraccionamientos_EtapaGISGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaGISSave]
@CveFraccionamientoEtapa int,
@Nombre varchar(200),
@UrlVisualizacion varchar(2000),
@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 @Nombre = NULLIF(LTRIM(RTRIM(@Nombre)), '');
SET @UrlVisualizacion = NULLIF(
LTRIM(RTRIM(@UrlVisualizacion)),
'');
IF @Nombre IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el nombre del GIS.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @UrlVisualizacion IS NULL OR
(
LOWER(@UrlVisualizacion) NOT LIKE 'http://%'
AND LOWER(@UrlVisualizacion) NOT LIKE 'https://%'
)
BEGIN
SET @ErrorMostrar = 'Capture una URL absoluta http o https válida para el GIS.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @CveFraccionamientoEtapaGIS int;
DECLARE @NombreAnterior varchar(200);
DECLARE @UrlVisualizacionAnterior varchar(2000);
DECLARE @EsNuevo bit = 0;
DECLARE @HuboCambio bit = 0;
SELECT
@CveFraccionamientoEtapaGIS = G.CveFraccionamientoEtapaGIS,
@NombreAnterior = G.Nombre,
@UrlVisualizacionAnterior = G.UrlVisualizacion
FROM dbo.FraccionamientosEtapasGIS AS G WITH (UPDLOCK, HOLDLOCK)
WHERE G.CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
IF @CveFraccionamientoEtapaGIS IS NULL
BEGIN
INSERT INTO dbo.FraccionamientosEtapasGIS
(
CveFraccionamientoEtapa,
Nombre,
UrlVisualizacion,
CveUsuario
)
VALUES
(
@CveFraccionamientoEtapa,
@Nombre,
@UrlVisualizacion,
@CveUsuarioEjecuta
);
SET @CveFraccionamientoEtapaGIS = CONVERT(
int,
SCOPE_IDENTITY());
SET @EsNuevo = 1;
SET @HuboCambio = 1;
END
ELSE IF @NombreAnterior <> @Nombre
OR @UrlVisualizacionAnterior <> @UrlVisualizacion
BEGIN
UPDATE dbo.FraccionamientosEtapasGIS
SET
Nombre = @Nombre,
UrlVisualizacion = @UrlVisualizacion,
FechaModificacion = GETDATE(),
CveUsuario = @CveUsuarioEjecuta
WHERE CveFraccionamientoEtapaGIS =
@CveFraccionamientoEtapaGIS;
SET @HuboCambio = 1;
END;
SELECT
G.CveFraccionamientoEtapaGIS,
G.CveFraccionamientoEtapa,
E.CveFraccionamiento,
F.CveCliente,
E.Etapa,
G.Nombre,
G.UrlVisualizacion,
@NombreAnterior AS NombreAnterior,
@UrlVisualizacionAnterior AS UrlVisualizacionAnterior,
@EsNuevo AS EsNuevo,
@HuboCambio AS HuboCambio,
G.FechaAlta,
G.FechaModificacion
FROM dbo.FraccionamientosEtapasGIS AS G
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = G.CveFraccionamientoEtapa
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE G.CveFraccionamientoEtapaGIS =
@CveFraccionamientoEtapaGIS;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al guardar el GIS de la etapa; 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_Fraccionamientos_EtapaGISSave'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaDelete]
@CveFraccionamientoEtapa 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
DECLARE @EsSuperUsuario bit = 0;
SELECT @EsSuperUsuario = CASE
WHEN R.NombreRol = 'SuperUsuario' THEN 1
ELSE 0
END
FROM dbo.Sis_Usuarios AS U
INNER JOIN dbo.Sis_Roles AS R
ON R.CveRol = U.CveRol
WHERE U.CveUsuario = @CveUsuarioEjecuta
AND U.Activo = 1;
IF NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas AS E
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = E.CveFraccionamiento
WHERE E.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND
(
@EsSuperUsuario = 1
OR EXISTS
(
SELECT 1
FROM dbo.Sis_UsuariosClientes AS UC
WHERE UC.CveUsuario = @CveUsuarioEjecuta
AND UC.CveCliente = F.CveCliente
AND UC.Activo = 1
)
)
)
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no está asignada al usuario.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveFraccionamientoEtapa = @CveFraccionamientoEtapa
)
BEGIN
SET @ErrorMostrar = 'La etapa tiene trámites relacionados y no puede eliminarse.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM dbo.FraccionamientosEtapasGIS
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
DELETE FROM dbo.FraccionamientosLotes
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
DELETE FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al eliminar la etapa; 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_Fraccionamientos_EtapaDelete'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO