160 lines
5.2 KiB
Transact-SQL
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
|