Files
Plataforma-de-desarrolladores/Fraccionamientos_Ventas_Tramites_20260827.sql
Jorge Luis caudillo esparza c4f958e688 --
2026-09-02 01:08:02 -07:00

1148 lines
32 KiB
Transact-SQL

SET NOCOUNT ON;
GO
DECLARE @CveUsuarioSistema int =
(
SELECT TOP (1)
CveUsuario
FROM dbo.Sis_Usuarios
WHERE Activo = 1
ORDER BY CveUsuario
);
IF @CveUsuarioSistema IS NULL
BEGIN
RAISERROR(
'No existe un usuario activo para inicializar los catálogos de ventas.',
16,
1
);
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Vta_TipoDocumentos
WHERE CveTipoDocumento = 'Rem'
)
BEGIN
INSERT INTO dbo.Vta_TipoDocumentos
(
CveTipoDocumento,
TipoDocumento,
Estatus,
FechaIng,
Multiplicador,
Contable
)
VALUES
(
'Rem',
'Remisión',
1,
CONVERT(date, GETDATE()),
1,
0
);
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.EstatusFactura
WHERE TipoDocto = 'Rem'
AND Estado = 1
)
BEGIN
DECLARE @CveEstatusFacturaInicial int =
CASE
WHEN NOT EXISTS
(
SELECT 1
FROM dbo.EstatusFactura
WHERE CveEstatusFactura = 2
) THEN 2
ELSE ISNULL(
(
SELECT MAX(CveEstatusFactura) + 1
FROM dbo.EstatusFactura
),
1
)
END;
INSERT INTO dbo.EstatusFactura
(
CveEstatusFactura,
EstatusFactura,
Estado,
Fecha,
CveUsuario,
TipoDocto,
TipoEstatus,
Origen,
EnProcesoCancelacion
)
VALUES
(
@CveEstatusFacturaInicial,
'Pendiente',
1,
CONVERT(date, GETDATE()),
@CveUsuarioSistema,
'Rem',
1,
1,
0
);
END;
DECLARE @CveProyectoVentas int;
SELECT
@CveProyectoVentas = CveProyecto
FROM dbo.Proyectos
WHERE Proyecto = 'Plataforma de Desarrolladores';
IF @CveProyectoVentas IS NULL
BEGIN
INSERT INTO dbo.Proyectos
(
Proyecto,
Estatus,
FechaIng,
CveUsuario,
CveTipoNomina
)
VALUES
(
'Plataforma de Desarrolladores',
1,
CONVERT(date, GETDATE()),
@CveUsuarioSistema,
0
);
SET @CveProyectoVentas = CONVERT(int, SCOPE_IDENTITY());
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.SubProyectos
WHERE CveProyecto = @CveProyectoVentas
AND SubProyecto = 'Matriz'
)
BEGIN
INSERT INTO dbo.SubProyectos
(
CveProyecto,
ClaveSubProyecto,
SubProyecto,
Estatus,
FechaIng,
CveUsuario,
Serie,
EsSucursal
)
VALUES
(
@CveProyectoVentas,
'MAT',
'Matriz',
1,
CONVERT(date, GETDATE()),
@CveUsuarioSistema,
'TRA',
1
);
END;
GO
IF OBJECT_ID('dbo.Tra_SolicitudesPagos', 'U') IS NULL
BEGIN
CREATE TABLE dbo.Tra_SolicitudesPagos
(
CveSolicitudPago int IDENTITY(1, 1) NOT NULL,
CveSolicitud int NOT NULL,
CveTramitePago int NOT NULL,
CveVenta int NOT NULL,
FechaAlta datetime NOT NULL
CONSTRAINT DF_Tra_SolicitudesPagos_FechaAlta
DEFAULT (GETDATE()),
CveUsuario int NOT NULL,
CONSTRAINT PK_Tra_SolicitudesPagos
PRIMARY KEY CLUSTERED (CveSolicitudPago),
CONSTRAINT UQ_Tra_SolicitudesPagos_SolicitudPago
UNIQUE (CveSolicitud, CveTramitePago),
CONSTRAINT UQ_Tra_SolicitudesPagos_Venta
UNIQUE (CveVenta),
CONSTRAINT FK_Tra_SolicitudesPagos_Tra_Solicitudes
FOREIGN KEY (CveSolicitud)
REFERENCES dbo.Tra_Solicitudes (CveSolicitud),
CONSTRAINT FK_Tra_SolicitudesPagos_Tra_Pagos
FOREIGN KEY (CveTramitePago)
REFERENCES dbo.Tra_Pagos (CveTramitePago),
CONSTRAINT FK_Tra_SolicitudesPagos_Ventas
FOREIGN KEY (CveVenta)
REFERENCES dbo.Ventas (CveVenta),
CONSTRAINT FK_Tra_SolicitudesPagos_Sis_Usuarios
FOREIGN KEY (CveUsuario)
REFERENCES dbo.Sis_Usuarios (CveUsuario)
);
CREATE NONCLUSTERED INDEX IX_Tra_SolicitudesPagos_Solicitud
ON dbo.Tra_SolicitudesPagos (CveSolicitud)
INCLUDE (CveTramitePago, CveVenta, FechaAlta);
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoPendienteList
@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 @PorcentajeIVA decimal(9, 6) = 0.16;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Fraccionamientos
WHERE CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SELECT
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
@ErrorTipo = 2;
RETURN;
END;
;WITH Conceptos AS
(
SELECT
S.CveSolicitud,
P.CveTramitePago,
COUNT_BIG(*) AS NumeroConceptos,
SUM(
ROUND(
CONVERT(decimal(18, 4), Costo.Importe),
2
)
) AS SubTotal,
SUM(
ROUND(
CONVERT(decimal(18, 4), Costo.Importe) *
@PorcentajeIVA,
2
)
) AS IVA
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTipoTramite = S.CveTipoTramite
AND P.EsActivo = 1
INNER JOIN dbo.Tra_PagosDetalle AS D
ON D.CveTramitePago = P.CveTramitePago
INNER JOIN dbo.ProductosServicios AS PS
ON PS.CvePS = D.CvePS
OUTER APPLY
(
SELECT TOP (1)
CT.Importe
FROM dbo.Tra_CostosTramite AS CT
WHERE CT.CveTipoTramite = S.CveTipoTramite
AND CT.CvePS = D.CvePS
AND CT.EsActivo = 1
AND
(
CT.FechaInicioVigencia IS NULL
OR CT.FechaInicioVigencia <= CONVERT(date, GETDATE())
)
AND
(
CT.FechaFinVigencia IS NULL
OR CT.FechaFinVigencia >= CONVERT(date, GETDATE())
)
ORDER BY
ISNULL(
CT.FechaInicioVigencia,
CONVERT(date, '19000101')) DESC,
CT.CveCostoTramite DESC
) AS Costo
WHERE S.CveFraccionamiento = @CveFraccionamiento
AND NOT EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudesPagos AS SP
WHERE SP.CveSolicitud = S.CveSolicitud
AND SP.CveTramitePago = P.CveTramitePago
)
GROUP BY
S.CveSolicitud,
P.CveTramitePago
)
SELECT
S.CveSolicitud,
P.CveTramitePago,
S.Folio AS FolioSolicitud,
E.Etapa,
TT.TipoTramite,
P.Nombre AS NombrePago,
CONVERT(int, C.NumeroConceptos) AS NumeroConceptos,
CONVERT(decimal(18, 2), C.SubTotal) AS SubTotal,
CONVERT(decimal(18, 2), C.IVA) AS IVA,
CONVERT(decimal(18, 2), C.SubTotal + C.IVA) AS Total
FROM Conceptos AS C
INNER JOIN dbo.Tra_Solicitudes AS S
ON S.CveSolicitud = C.CveSolicitud
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposTramite AS TT
ON TT.CveTipoTramite = S.CveTipoTramite
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = C.CveTramitePago
ORDER BY
E.Orden,
S.CveSolicitud,
P.Orden,
P.CveTramitePago;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar los pagos pendientes; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Vta_FraccionamientoPagoPendienteList'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vta_FraccionamientoPagoRealizadoList
@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
IF NOT EXISTS
(
SELECT 1
FROM dbo.Fraccionamientos
WHERE CveFraccionamiento = @CveFraccionamiento
)
BEGIN
SELECT
@ErrorMostrar = 'El fraccionamiento solicitado no existe.',
@ErrorTipo = 2;
RETURN;
END;
SELECT
SP.CveSolicitudPago,
SP.CveSolicitud,
SP.CveTramitePago,
V.CveVenta,
V.SerieFolio,
V.Fecha,
S.Folio AS FolioSolicitud,
E.Etapa,
TT.TipoTramite,
P.Nombre AS NombrePago,
CONVERT(decimal(18, 2), V.SubTotal) AS SubTotal,
CONVERT(decimal(18, 2), V.IVA) AS IVA,
CONVERT(decimal(18, 2), V.Total) AS Total
FROM dbo.Tra_SolicitudesPagos AS SP
INNER JOIN dbo.Tra_Solicitudes AS S
ON S.CveSolicitud = SP.CveSolicitud
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposTramite AS TT
ON TT.CveTipoTramite = S.CveTipoTramite
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = SP.CveTramitePago
INNER JOIN dbo.Ventas AS V
ON V.CveVenta = SP.CveVenta
WHERE S.CveFraccionamiento = @CveFraccionamiento
ORDER BY
V.Fecha DESC,
V.CveVenta DESC;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar los pagos realizados; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Vta_FraccionamientoPagoRealizadoList'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteContextoGet
@CveSolicitud int,
@CveTramitePago 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 @CveSubProyecto int =
(
SELECT TOP (1)
CveSubProyecto
FROM dbo.SubProyectos
WHERE Estatus = 1
ORDER BY
CASE WHEN Serie = 'TRA' THEN 0 ELSE 1 END,
CveSubProyecto
);
IF EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudesPagos
WHERE CveSolicitud = @CveSolicitud
AND CveTramitePago = @CveTramitePago
)
BEGIN
SELECT
@ErrorMostrar = 'El pago seleccionado ya fue realizado.',
@ErrorTipo = 2;
RETURN;
END;
IF NOT EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = @CveTramitePago
AND P.CveTipoTramite = S.CveTipoTramite
AND P.EsActivo = 1
INNER JOIN dbo.Tra_PagosDetalle AS D
ON D.CveTramitePago = P.CveTramitePago
WHERE S.CveSolicitud = @CveSolicitud
)
BEGIN
SELECT
@ErrorMostrar = 'El pago seleccionado no corresponde al trámite o no tiene conceptos activos.',
@ErrorTipo = 2;
RETURN;
END;
SELECT
S.CveSolicitud,
P.CveTramitePago,
S.CveFraccionamiento,
F.Fraccionamiento,
F.CveCliente,
C.Nombre AS Cliente,
C.RFC,
CONCAT(
C.Direccion,
CASE
WHEN NULLIF(LTRIM(RTRIM(C.NoExt)), '') IS NULL THEN ''
ELSE CONCAT(' ', C.NoExt)
END,
CASE
WHEN NULLIF(LTRIM(RTRIM(C.NoInt)), '') IS NULL THEN ''
ELSE CONCAT(' Int. ', C.NoInt)
END
) AS Direccion,
C.Colonia,
CONCAT(C.Ciudad, ', ', C.Estado) AS CiudadEstado,
C.CP,
C.Telefono,
C.Mail,
S.Folio AS FolioSolicitud,
E.Etapa,
TT.TipoTramite,
P.Nombre AS NombrePago,
'Remisión' AS TipoDocumento,
'TRA' AS Serie,
ISNULL(
(
SELECT MAX(V.Folio) + 1
FROM dbo.Ventas AS V
WHERE V.TipoDocto = 'Rem'
AND V.Serie = 'TRA'
AND V.CveSubProyecto = @CveSubProyecto
),
1
) AS Folio,
GETDATE() AS Fecha
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = S.CveFraccionamiento
INNER JOIN dbo.FraccionamientosEtapas AS E
ON E.CveFraccionamientoEtapa = S.CveFraccionamientoEtapa
INNER JOIN dbo.Tra_TiposTramite AS TT
ON TT.CveTipoTramite = S.CveTipoTramite
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = @CveTramitePago
AND P.CveTipoTramite = S.CveTipoTramite
INNER JOIN dbo.Clientes AS C
ON C.CveCliente = F.CveCliente
WHERE S.CveSolicitud = @CveSolicitud;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar la venta del trámite; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Vta_TramiteContextoGet'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteConceptoList
@CveSolicitud int,
@CveTramitePago 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 @PorcentajeIVA decimal(9, 6) = 0.16;
SELECT
D.CveTramitePagoDetalle,
D.CvePS,
D.CveUM,
CASE
WHEN NULLIF(LTRIM(RTRIM(UM.Abreviatura)), '') IS NULL
THEN UM.UnidadMedida COLLATE DATABASE_DEFAULT
ELSE
UM.UnidadMedida COLLATE DATABASE_DEFAULT +
' (' +
UM.Abreviatura COLLATE DATABASE_DEFAULT +
')'
END AS UnidadMedida,
C.CveClasificacion,
CASE
WHEN NULLIF(LTRIM(RTRIM(C.Codigo)), '') IS NULL
THEN C.Clasificacion COLLATE DATABASE_DEFAULT
ELSE
C.Codigo COLLATE DATABASE_DEFAULT +
' - ' +
C.Clasificacion COLLATE DATABASE_DEFAULT
END AS Clasificacion,
CASE
WHEN NULLIF(LTRIM(RTRIM(PS.Codigo)), '') IS NULL
THEN PS.PS COLLATE DATABASE_DEFAULT
ELSE
PS.Codigo COLLATE DATABASE_DEFAULT +
' - ' +
PS.PS COLLATE DATABASE_DEFAULT
END AS ProductoServicio,
CONVERT(decimal(18, 4), 1) AS Cantidad,
CONVERT(decimal(18, 2), Costo.Importe) AS PrecioUnitario,
CONVERT(decimal(18, 2), 0) AS Descuento,
CONVERT(
decimal(18, 2),
ROUND(
CONVERT(decimal(18, 4), Costo.Importe) *
@PorcentajeIVA,
2
)
) AS IVA,
CONVERT(
decimal(18, 2),
ROUND(
CONVERT(decimal(18, 4), Costo.Importe),
2
)
) AS Importe
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = @CveTramitePago
AND P.CveTipoTramite = S.CveTipoTramite
AND P.EsActivo = 1
INNER JOIN dbo.Tra_PagosDetalle AS D
ON D.CveTramitePago = P.CveTramitePago
INNER JOIN dbo.ProductosServicios AS PS
ON PS.CvePS = D.CvePS
CROSS APPLY
(
SELECT TOP (1)
CT.Importe
FROM dbo.Tra_CostosTramite AS CT
WHERE CT.CveTipoTramite =
(
SELECT S.CveTipoTramite
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud
)
AND CT.CvePS = D.CvePS
AND CT.EsActivo = 1
AND
(
CT.FechaInicioVigencia IS NULL
OR CT.FechaInicioVigencia <= CONVERT(date, GETDATE())
)
AND
(
CT.FechaFinVigencia IS NULL
OR CT.FechaFinVigencia >= CONVERT(date, GETDATE())
)
ORDER BY
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
CT.CveCostoTramite DESC
) AS Costo
INNER JOIN dbo.UnidadesMedida AS UM
ON UM.CveUnidadMedida = D.CveUM
INNER JOIN dbo.Clasificaciones AS C
ON C.CveClasificacion = PS.CveClasificacion
WHERE S.CveSolicitud = @CveSolicitud
ORDER BY D.CveTramitePagoDetalle;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al consultar los conceptos de la venta; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Vta_TramiteConceptoList'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaSave
@CveSolicitud int,
@CveTramitePago int,
@Observaciones 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
DECLARE
@PorcentajeIVA decimal(9, 6) = 0.16,
@CveVendedor int = 1,
@CveCliente int,
@CveSubProyecto int,
@CveEstatusFactura int,
@CveVenta int,
@Folio int,
@SubTotal decimal(18, 2),
@Descuento decimal(18, 2) = 0,
@IVA decimal(18, 2),
@Total decimal(18, 2),
@Fecha datetime = GETDATE();
SELECT
@CveCliente = F.CveCliente
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Fraccionamientos AS F
ON F.CveFraccionamiento = S.CveFraccionamiento
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = @CveTramitePago
AND P.CveTipoTramite = S.CveTipoTramite
AND P.EsActivo = 1
WHERE S.CveSolicitud = @CveSolicitud;
IF @CveCliente IS NULL
BEGIN
SELECT
@ErrorMostrar = 'El pago seleccionado no corresponde al trámite.',
@ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_Solicitudes AS S
INNER JOIN dbo.Tra_Pagos AS P
ON P.CveTramitePago = @CveTramitePago
AND P.CveTipoTramite = S.CveTipoTramite
AND P.EsActivo = 1
INNER JOIN dbo.Tra_PagosDetalle AS D
ON D.CveTramitePago = P.CveTramitePago
WHERE S.CveSolicitud = @CveSolicitud
AND NOT EXISTS
(
SELECT 1
FROM dbo.Tra_CostosTramite AS CT
WHERE CT.CveTipoTramite = S.CveTipoTramite
AND CT.CvePS = D.CvePS
AND CT.EsActivo = 1
AND
(
CT.FechaInicioVigencia IS NULL
OR CT.FechaInicioVigencia <= CONVERT(date, @Fecha)
)
AND
(
CT.FechaFinVigencia IS NULL
OR CT.FechaFinVigencia >= CONVERT(date, @Fecha)
)
)
)
BEGIN
SELECT
@ErrorMostrar = 'Uno o más conceptos no tienen un costo vigente configurado.',
@ErrorTipo = 2;
RETURN;
END;
IF EXISTS
(
SELECT 1
FROM dbo.Tra_SolicitudesPagos WITH (UPDLOCK, HOLDLOCK)
WHERE CveSolicitud = @CveSolicitud
AND CveTramitePago = @CveTramitePago
)
BEGIN
SELECT
@ErrorMostrar = 'El pago seleccionado ya fue realizado.',
@ErrorTipo = 2;
RETURN;
END;
SELECT TOP (1)
@CveSubProyecto = CveSubProyecto
FROM dbo.SubProyectos
WHERE Estatus = 1
ORDER BY
CASE WHEN Serie = 'TRA' THEN 0 ELSE 1 END,
CveSubProyecto;
SELECT TOP (1)
@CveEstatusFactura = CveEstatusFactura
FROM dbo.EstatusFactura
WHERE TipoDocto = 'Rem'
AND Estado = 1
ORDER BY CveEstatusFactura;
IF @CveSubProyecto IS NULL OR @CveEstatusFactura IS NULL
BEGIN
SELECT
@ErrorMostrar = 'La configuración mínima de ventas no está disponible; favor de contactar a Sistemas.',
@ErrorTipo = 2;
RETURN;
END;
SELECT
@SubTotal = CONVERT(
decimal(18, 2),
SUM(
ROUND(
CONVERT(decimal(18, 4), Costo.Importe),
2
)
)
),
@IVA = CONVERT(
decimal(18, 2),
SUM(
ROUND(
CONVERT(decimal(18, 4), Costo.Importe) *
@PorcentajeIVA,
2
)
)
)
FROM dbo.Tra_PagosDetalle AS D
INNER JOIN dbo.ProductosServicios AS PS
ON PS.CvePS = D.CvePS
CROSS APPLY
(
SELECT TOP (1)
CT.Importe
FROM dbo.Tra_CostosTramite AS CT
WHERE CT.CveTipoTramite =
(
SELECT S.CveTipoTramite
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud
)
AND CT.CvePS = D.CvePS
AND CT.EsActivo = 1
AND
(
CT.FechaInicioVigencia IS NULL
OR CT.FechaInicioVigencia <= CONVERT(date, @Fecha)
)
AND
(
CT.FechaFinVigencia IS NULL
OR CT.FechaFinVigencia >= CONVERT(date, @Fecha)
)
ORDER BY
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
CT.CveCostoTramite DESC
) AS Costo
WHERE D.CveTramitePago = @CveTramitePago;
IF @SubTotal IS NULL
BEGIN
SELECT
@ErrorMostrar = 'El pago seleccionado no tiene conceptos para vender.',
@ErrorTipo = 2;
RETURN;
END;
SET @IVA = ISNULL(@IVA, 0);
SET @Total = @SubTotal - @Descuento + @IVA;
SELECT
@Folio = ISNULL(MAX(Folio), 0) + 1
FROM dbo.Ventas WITH (UPDLOCK, HOLDLOCK)
WHERE CveSubProyecto = @CveSubProyecto
AND TipoDocto = 'Rem'
AND Serie = 'TRA';
INSERT INTO dbo.Ventas
(
TipoDocto,
Serie,
Folio,
Fecha,
CveCliente,
CveVendedor,
CveMetodoPago,
CondicionesPago,
FormaPago,
SubTotal,
Descuento,
IVA,
Total,
Observaciones,
CveEstatusFactura,
FechaEjecucion,
CveSubProyecto,
CveUsuario,
CveFormaPago33,
CveMetodoPago33,
FechaIng,
FechaVencimiento2,
Ref,
DescripcionVenta,
FechaParaSurtir
)
VALUES
(
'Rem',
'TRA',
@Folio,
@Fecha,
@CveCliente,
@CveVendedor,
2,
0,
99,
@SubTotal,
@Descuento,
@IVA,
@Total,
ISNULL(@Observaciones, ''),
@CveEstatusFactura,
@Fecha,
@CveSubProyecto,
@CveUsuarioEjecuta,
99,
2,
@Fecha,
CONVERT(date, @Fecha),
CONVERT(varchar(50), @CveSolicitud),
'Pago de trámite',
@Fecha
);
SET @CveVenta = CONVERT(int, SCOPE_IDENTITY());
INSERT INTO dbo.VentasDetalle
(
CveVenta,
CvePS,
CveSolicitud,
CveCostoTramite,
Cantidad,
PrecioUnitario,
Descuento,
IVA,
Importe,
EsFondoInicial,
FechaAlta,
CveUsuario
)
SELECT
@CveVenta,
D.CvePS,
@CveSolicitud,
Costo.CveCostoTramite,
CONVERT(decimal(18, 4), 1),
CONVERT(decimal(18, 2), Costo.Importe),
CONVERT(decimal(18, 2), 0),
CONVERT(
decimal(18, 2),
ROUND(
CONVERT(decimal(18, 4), Costo.Importe) *
@PorcentajeIVA,
2
)
),
CONVERT(
decimal(18, 2),
ROUND(
CONVERT(decimal(18, 4), Costo.Importe),
2
)
),
0,
@Fecha,
@CveUsuarioEjecuta
FROM dbo.Tra_PagosDetalle AS D
INNER JOIN dbo.ProductosServicios AS PS
ON PS.CvePS = D.CvePS
CROSS APPLY
(
SELECT TOP (1)
CT.CveCostoTramite,
CT.Importe
FROM dbo.Tra_CostosTramite AS CT
WHERE CT.CveTipoTramite =
(
SELECT S.CveTipoTramite
FROM dbo.Tra_Solicitudes AS S
WHERE S.CveSolicitud = @CveSolicitud
)
AND CT.CvePS = D.CvePS
AND CT.EsActivo = 1
AND
(
CT.FechaInicioVigencia IS NULL
OR CT.FechaInicioVigencia <= CONVERT(date, @Fecha)
)
AND
(
CT.FechaFinVigencia IS NULL
OR CT.FechaFinVigencia >= CONVERT(date, @Fecha)
)
ORDER BY
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
CT.CveCostoTramite DESC
) AS Costo
WHERE D.CveTramitePago = @CveTramitePago;
INSERT INTO dbo.Tra_SolicitudesPagos
(
CveSolicitud,
CveTramitePago,
CveVenta,
FechaAlta,
CveUsuario
)
VALUES
(
@CveSolicitud,
@CveTramitePago,
@CveVenta,
@Fecha,
@CveUsuarioEjecuta
);
SELECT @CveVenta AS CveVenta;
SET @Return = 1;
END TRY
BEGIN CATCH
SELECT
@ErrorMostrar = 'Ocurrió un error al registrar la venta del trámite; favor de contactar a Sistemas.',
@ErrorTipo = 1,
@Return = 0;
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
'Número: ', ERROR_NUMBER(),
'; Procedimiento: ', COALESCE(
ERROR_PROCEDURE(),
'PA_Vta_TramiteVentaSave'
),
'; Línea: ', ERROR_LINE(),
'; Detalle: ', ERROR_MESSAGE()
);
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
END CATCH;
END;
GO
DECLARE @CveModuloFraccionamientoDetalle int =
(
SELECT CveModulo
FROM dbo.Sis_Modulos
WHERE Url = '~/Pages/Fraccionamientos/FraccionamientoDetalle.aspx'
);
DECLARE @CveModuloVentaTramite int =
(
SELECT CveModulo
FROM dbo.Sis_Modulos
WHERE Url = '~/Pages/Ventas/VentaTramite.aspx'
);
IF @CveModuloVentaTramite IS NULL
BEGIN
INSERT INTO dbo.Sis_Modulos
(
CveModuloPadre,
CvePlataforma,
NombreModulo,
Descripcion,
Url,
ClaseCssIcono,
OrdenVisualizacion,
Visible,
Activo,
FechaCreacion
)
VALUES
(
@CveModuloFraccionamientoDetalle,
1,
'Venta de trámite',
'Registro del pago de un trámite',
'~/Pages/Ventas/VentaTramite.aspx',
'fa fa-credit-card',
10,
0,
1,
GETDATE()
);
SET @CveModuloVentaTramite = CONVERT(int, SCOPE_IDENTITY());
END;
IF @CveModuloFraccionamientoDetalle IS NOT NULL
BEGIN
INSERT INTO dbo.Sis_RolesModulos
(
CveRol,
CveModulo,
PuedeVer,
PuedeCrear,
PuedeModificar,
PuedeEliminar,
PuedeImprimir,
PuedeExportar,
FechaCreacion
)
SELECT
RM.CveRol,
@CveModuloVentaTramite,
RM.PuedeVer,
RM.PuedeCrear,
RM.PuedeModificar,
RM.PuedeEliminar,
RM.PuedeImprimir,
RM.PuedeExportar,
GETDATE()
FROM dbo.Sis_RolesModulos AS RM
WHERE RM.CveModulo = @CveModuloFraccionamientoDetalle
AND NOT EXISTS
(
SELECT 1
FROM dbo.Sis_RolesModulos AS Existente
WHERE Existente.CveRol = RM.CveRol
AND Existente.CveModulo = @CveModuloVentaTramite
);
END;
GO