Files
Plataforma-de-desarrolladores/Fraccionamientos_Lotes.sql
Jorge Luis caudillo esparza 8f33c860ec Ajustes
2026-08-13 19:46:33 -07:00

653 lines
19 KiB
Transact-SQL

/* Catálogo de lotes con borrado físico. Las definiciones se sincronizaron desde la base local. */
IF NOT EXISTS
(
SELECT 1
FROM sys.indexes
WHERE [object_id] = OBJECT_ID(N'dbo.FraccionamientosLotes')
AND [name] = N'IX_FraccionamientosLotes_Etapa'
)
BEGIN
CREATE NONCLUSTERED INDEX [IX_FraccionamientosLotes_Etapa]
ON [dbo].[FraccionamientosLotes] ([CveFraccionamientoEtapa])
INCLUDE
(
[Numero],
[Tipo],
[Calle],
[Catastro],
[MetrosCuadrados],
[Duplicador],
[EsActivo]
);
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteList]
@CveFraccionamiento int,
@CveFraccionamientoEtapa int = NULL,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@ErrorMostrar = NULL,
@ErrorTipo = 0,
@Return = 0;
BEGIN TRY
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[Fraccionamientos]
WHERE [CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'El fraccionamiento seleccionado no existe.';
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 seleccionada no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
L.[CveFraccionamientoLote] AS [CveFraccionamientoLote],
E.[CveFraccionamientoEtapa] AS [CveFraccionamientoEtapa],
E.[Etapa] AS [Etapa],
L.[Numero] AS [Nombre],
L.[Tipo] AS [Tipo],
L.[Calle] AS [Calle],
L.[Catastro] AS [Catastro],
L.[MetrosCuadrados] AS [MetrosCuadrados],
L.[Duplicador] AS [Duplicador],
L.[EsActivo] AS [EsActivo]
FROM [dbo].[FraccionamientosLotes] AS L
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
WHERE E.[CveFraccionamiento] = @CveFraccionamiento
AND (@CveFraccionamientoEtapa IS NULL
OR E.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa)
ORDER BY
E.[Orden],
E.[Etapa],
L.[Numero],
L.[CveFraccionamientoLote];
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar los lotes; 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_LoteList'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteBatchSave]
@CveFraccionamiento int,
@CveFraccionamientoEtapa int,
@LotesXml xml,
@CveUsuarioEjecuta int,
@ErrorMostrar varchar(max) OUTPUT,
@ErrorTipo int OUTPUT,
@Return bit OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
@ErrorMostrar = NULL,
@ErrorTipo = 0,
@Return = 0;
BEGIN TRY
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosEtapas]
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
AND [CveFraccionamiento] = @CveFraccionamiento
AND [EsActivo] = (1)
)
BEGIN
SET @ErrorMostrar = 'La etapa seleccionada no existe, está inactiva o no pertenece al fraccionamiento.';
SET @ErrorTipo = 1;
RETURN;
END;
DECLARE @Lotes TABLE
(
[Nombre] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
[Tipo] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
[Calle] varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
[Catastro] varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
[MetrosCuadrados] decimal(18,4) NULL,
[Duplicador] varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
[EsActivo] bit NOT NULL
);
INSERT INTO @Lotes
(
[Nombre],
[Tipo],
[Calle],
[Catastro],
[MetrosCuadrados],
[Duplicador],
[EsActivo]
)
SELECT
NULLIF(LTRIM(RTRIM(N.value('@Nombre', 'varchar(50)'))), ''),
NULLIF(LTRIM(RTRIM(N.value('@Tipo', 'varchar(100)'))), ''),
NULLIF(LTRIM(RTRIM(N.value('@Calle', 'varchar(200)'))), ''),
NULLIF(LTRIM(RTRIM(N.value('@Catastro', 'varchar(100)'))), ''),
TRY_CONVERT(
decimal(18,4),
NULLIF(N.value('@MetrosCuadrados', 'varchar(50)'), '')
),
NULLIF(LTRIM(RTRIM(N.value('@Duplicador', 'varchar(50)'))), ''),
N.value('@EsActivo', 'bit')
FROM @LotesXml.nodes('/Lotes/Lote') AS X(N);
DECLARE @Cantidad int = (SELECT COUNT(1) FROM @Lotes);
IF @Cantidad = (0)
BEGIN
SET @ErrorMostrar = 'No se recibieron lotes para guardar.';
SET @ErrorTipo = 1;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM @Lotes
WHERE [Nombre] IS NULL
)
BEGIN
SET @ErrorMostrar = 'Todos los lotes deben tener un nombre.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT [Nombre]
FROM @Lotes
GROUP BY [Nombre]
HAVING COUNT(1) > (1)
)
BEGIN
SET @ErrorMostrar = 'La captura contiene nombres de lote repetidos.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM @Lotes AS N
INNER JOIN [dbo].[FraccionamientosLotes] AS L
ON L.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
AND L.[Numero] = N.[Nombre]
)
BEGIN
SET @ErrorMostrar = 'Uno o más nombres de lote ya existen en la etapa seleccionada.';
SET @ErrorTipo = 2;
RETURN;
END;
DECLARE @LotesGuardados TABLE
(
CveFraccionamientoLote int NOT NULL,
CveFraccionamientoEtapa int NOT NULL,
Nombre varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
Tipo varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
Calle varchar(200) COLLATE Modern_Spanish_CS_AS NULL,
Catastro varchar(100) COLLATE Modern_Spanish_CS_AS NULL,
MetrosCuadrados decimal(18,4) NULL,
Duplicador varchar(50) COLLATE Modern_Spanish_CS_AS NULL,
EsActivo bit NOT NULL
);
INSERT INTO [dbo].[FraccionamientosLotes]
(
[CveFraccionamientoEtapa],
[Tipo],
[Calle],
[Catastro],
[MetrosCuadrados],
[Numero],
[Duplicador],
[EsActivo],
[CveUsuario]
)
OUTPUT
INSERTED.[CveFraccionamientoLote],
INSERTED.[CveFraccionamientoEtapa],
INSERTED.[Numero],
INSERTED.[Tipo],
INSERTED.[Calle],
INSERTED.[Catastro],
INSERTED.[MetrosCuadrados],
INSERTED.[Duplicador],
INSERTED.[EsActivo]
INTO @LotesGuardados
SELECT
@CveFraccionamientoEtapa,
[Tipo],
[Calle],
[Catastro],
[MetrosCuadrados],
[Nombre],
[Duplicador],
[EsActivo],
@CveUsuarioEjecuta
FROM @Lotes;
SELECT
G.CveFraccionamientoLote,
G.CveFraccionamientoEtapa,
@CveFraccionamiento AS CveFraccionamiento,
F.CveCliente,
G.Nombre,
G.Tipo,
G.Calle,
G.Catastro,
G.MetrosCuadrados,
G.Duplicador,
G.EsActivo
FROM @LotesGuardados AS G
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = @CveFraccionamiento
ORDER BY G.CveFraccionamientoLote;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al guardar los lotes; 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_LoteBatchSave'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteGet]
@CveFraccionamiento int,
@CveFraccionamientoLote 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 NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosLotes] AS L
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
AND E.[CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT
L.[CveFraccionamientoLote] AS [CveFraccionamientoLote],
L.[CveFraccionamientoEtapa] AS [CveFraccionamientoEtapa],
E.[CveFraccionamiento] AS [CveFraccionamiento],
F.[CveCliente] AS [CveCliente],
E.[Etapa] AS [Etapa],
L.[Numero] AS [Nombre],
L.[Tipo] AS [Tipo],
L.[Calle] AS [Calle],
L.[Catastro] AS [Catastro],
L.[MetrosCuadrados] AS [MetrosCuadrados],
L.[Duplicador] AS [Duplicador],
L.[EsActivo] AS [EsActivo]
FROM [dbo].[FraccionamientosLotes] AS L
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
INNER JOIN [dbo].[Fraccionamientos] AS F
ON F.[CveFraccionamiento] = E.[CveFraccionamiento]
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
AND E.[CveFraccionamiento] = @CveFraccionamiento
;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al consultar el lote; 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_LoteGet'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteUpdate]
@CveFraccionamiento int,
@CveFraccionamientoLote int,
@CveFraccionamientoEtapa int,
@Nombre varchar(50),
@Tipo varchar(100) = NULL,
@Calle varchar(200) = NULL,
@Catastro varchar(100) = NULL,
@MetrosCuadrados decimal(18,4) = NULL,
@Duplicador varchar(50) = NULL,
@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
SET @Nombre = NULLIF(LTRIM(RTRIM(@Nombre)), '');
SET @Tipo = NULLIF(LTRIM(RTRIM(@Tipo)), '');
SET @Calle = NULLIF(LTRIM(RTRIM(@Calle)), '');
SET @Catastro = NULLIF(LTRIM(RTRIM(@Catastro)), '');
SET @Duplicador = NULLIF(LTRIM(RTRIM(@Duplicador)), '');
IF @Nombre IS NULL
BEGIN
SET @ErrorMostrar = 'Capture el nombre del lote.';
SET @ErrorTipo = 2;
RETURN;
END;
IF @MetrosCuadrados IS NOT NULL
AND @MetrosCuadrados < (0)
BEGIN
SET @ErrorMostrar = 'Los metros cuadrados no pueden ser negativos.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosEtapas]
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
AND [CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La etapa del lote no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosLotes] AS L
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
AND E.[CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosLotes] AS L
WHERE L.[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
AND L.[CveFraccionamientoLote] <> @CveFraccionamientoLote
AND L.[Numero] = @Nombre COLLATE Modern_Spanish_CS_AS
)
BEGIN
SET @ErrorMostrar = 'Ya existe otro lote con ese nombre en la etapa.';
SET @ErrorTipo = 2;
RETURN;
END;
UPDATE [dbo].[FraccionamientosLotes]
SET
[CveFraccionamientoEtapa] = @CveFraccionamientoEtapa,
[Numero] = @Nombre,
[Tipo] = @Tipo,
[Calle] = @Calle,
[Catastro] = @Catastro,
[MetrosCuadrados] = @MetrosCuadrados,
[Duplicador] = @Duplicador,
[EsActivo] = @EsActivo,
[FechaModificacion] = SYSDATETIME(),
[CveUsuario] = @CveUsuarioEjecuta
WHERE [CveFraccionamientoLote] = @CveFraccionamientoLote
;
SELECT @CveFraccionamientoLote AS [CveFraccionamientoLote];
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al actualizar el lote; 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_LoteUpdate'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteDelete]
@CveFraccionamiento int,
@CveFraccionamientoLote 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 NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosLotes] AS L
INNER JOIN [dbo].[FraccionamientosEtapas] AS E
ON E.[CveFraccionamientoEtapa] = L.[CveFraccionamientoEtapa]
WHERE L.[CveFraccionamientoLote] = @CveFraccionamientoLote
AND E.[CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'El lote seleccionado no existe o no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM [dbo].[FraccionamientosLotes]
WHERE [CveFraccionamientoLote] = @CveFraccionamientoLote;
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al eliminar el lote; 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_LoteDelete'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE [dbo].[PA_Fraccionamientos_LoteStageClear]
@CveFraccionamiento int,
@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
IF NOT EXISTS
(
SELECT 1
FROM [dbo].[FraccionamientosEtapas]
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa
AND [CveFraccionamiento] = @CveFraccionamiento
)
BEGIN
SET @ErrorMostrar = 'La etapa seleccionada no pertenece al fraccionamiento.';
SET @ErrorTipo = 2;
RETURN;
END;
DELETE FROM [dbo].[FraccionamientosLotes]
WHERE [CveFraccionamientoEtapa] = @CveFraccionamientoEtapa;
DECLARE @Cantidad int = @@ROWCOUNT;
IF @Cantidad = (0)
BEGIN
SET @ErrorMostrar = 'La etapa seleccionada no tiene lotes para eliminar.';
SET @ErrorTipo = 2;
RETURN;
END;
SELECT @Cantidad AS [LotesEliminados];
SET @Return = 1;
END TRY
BEGIN CATCH
SET @ErrorMostrar = 'Ocurrió un error al eliminar los lotes 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_LoteStageClear'),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO