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

160 lines
5.2 KiB
Transact-SQL

-- Ejecutar en la base de datos de la plataforma.
-- Respeta el fideicomiso capturado; hereda la última etapa sólo cuando se omite.
-- Actualiza únicamente el procedimiento, sin modificar datos existentes.
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_EtapaSave]
@CveFraccionamientoEtapa int = NULL,
@CveFraccionamiento int,
@Etapa varchar(150),
@Hectareas decimal(18,4) = NULL,
@Orden int = 0,
@EsActivo bit = 1,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT,
@Fideicomiso bit = NULL
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 NULLIF(LTRIM(RTRIM(@Etapa)), '') IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el nombre de la etapa.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @Hectareas IS NOT NULL AND @Hectareas < 0
BEGIN
SET @ErrorMostrar = 'Las hectáreas de la etapa no pueden ser negativas.';
SET @ErrorTipo = 2;
RETURN;
END;
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 @CveFraccionamientoEtapa IS NOT NULL
AND NOT EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa
AND CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La etapa no existe o no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.FraccionamientosEtapas
WHERE CveFraccionamiento = @CveFraccionamiento
AND Etapa = LTRIM(RTRIM(@Etapa))
AND
(
@CveFraccionamientoEtapa IS NULL
OR CveFraccionamientoEtapa <> @CveFraccionamientoEtapa
)
)
BEGIN
SET @ErrorMostrar = 'Ya existe una etapa con ese nombre en el fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @CveFraccionamientoEtapa IS NULL
BEGIN
DECLARE @OrdenNuevo int;
SELECT @OrdenNuevo = ISNULL(MAX(Orden), 0) + 1
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
WHERE CveFraccionamiento = @CveFraccionamiento;
IF @Fideicomiso IS NULL
BEGIN
SET @Fideicomiso = 0;
SELECT TOP (1) @Fideicomiso = Fideicomiso
FROM dbo.FraccionamientosEtapas WITH (UPDLOCK, HOLDLOCK)
WHERE CveFraccionamiento = @CveFraccionamiento
ORDER BY CveFraccionamientoEtapa DESC;
END;
INSERT INTO dbo.FraccionamientosEtapas
(CveFraccionamiento, Etapa, Hectareas, Orden, EsActivo, CveUsuario, Fideicomiso)
VALUES
(@CveFraccionamiento, LTRIM(RTRIM(@Etapa)), @Hectareas, @OrdenNuevo, @EsActivo, @CveUsuarioEjecuta, ISNULL(@Fideicomiso, 0));
SET @CveFraccionamientoEtapa = CONVERT(int, SCOPE_IDENTITY());
END
ELSE
BEGIN
UPDATE dbo.FraccionamientosEtapas
SET Etapa = LTRIM(RTRIM(@Etapa)),
Hectareas = @Hectareas,
EsActivo = @EsActivo,
Fideicomiso = ISNULL(@Fideicomiso, Fideicomiso),
FechaModificacion = GETDATE(),
CveUsuario = @CveUsuarioEjecuta
WHERE CveFraccionamientoEtapa = @CveFraccionamientoEtapa;
END;
SELECT @CveFraccionamientoEtapa AS CveFraccionamientoEtapa;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al guardar 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_EtapaSave'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO