SET ANSI_NULLS ON; SET QUOTED_IDENTIFIER ON; SET NOCOUNT ON; GO UPDATE dbo.Vta_TipoDocumentos SET TipoDocumento = N'Remisión' WHERE CveTipoDocumento = 'Rem' AND TipoDocumento <> N'Remisión'; GO DECLARE @CveUsuarioSistema int = ( SELECT TOP (1) CveUsuario FROM dbo.Sis_Usuarios WHERE Activo = 1 ORDER BY CveUsuario ); IF NOT EXISTS ( SELECT 1 FROM dbo.Vta_FormaPago WHERE CveFormaPago = 99 ) BEGIN INSERT INTO dbo.Vta_FormaPago ( CveFormaPago, FormaPago, ClaveFormaPagoSAT, CveUsuario, FechaIng ) VALUES ( 99, 'Por definir', '99', @CveUsuarioSistema, CONVERT(date, GETDATE()) ); END; IF NOT EXISTS ( SELECT 1 FROM dbo.Vta_MetodoPago WHERE CveMetodoPago = 2 ) BEGIN INSERT INTO dbo.Vta_MetodoPago ( CveMetodoPago, MetodoPago, ClaveMetodoPagoSAT, CveUsuario, FechaIng ) VALUES ( 2, 'Pago en parcialidades o diferido', 'PPD', @CveUsuarioSistema, CONVERT(date, GETDATE()) ); END; GO IF NOT EXISTS ( SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID('dbo.Vta_Pagos') AND name = 'UX_Vta_Pagos_SolicitudTramitePagoActivo' ) BEGIN CREATE UNIQUE NONCLUSTERED INDEX UX_Vta_Pagos_SolicitudTramitePagoActivo ON dbo.Vta_Pagos ( CveSolicitud, CveTramitePago ) WHERE EsActivo = 1 AND CveSolicitud IS NOT NULL; 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 GROUP BY S.CveSolicitud, P.CveTramitePago ) SELECT S.CveSolicitud, P.CveTramitePago, SP.CveVenta, CONVERT( bit, CASE WHEN SP.CveSolicitudPago IS NOT NULL AND V.CveVenta IS NOT NULL THEN 1 ELSE 0 END ) AS VentaGenerada, S.Folio AS FolioSolicitud, E.Etapa, TT.TipoTramite, P.Nombre AS NombrePago, CONVERT(int, C.NumeroConceptos) AS NumeroConceptos, CONVERT( decimal(18, 2), CASE WHEN V.CveVenta IS NULL THEN C.SubTotal ELSE V.SubTotal END ) AS SubTotal, CONVERT( decimal(18, 2), CASE WHEN V.CveVenta IS NULL THEN C.IVA ELSE V.IVA END ) AS IVA, CONVERT( decimal(18, 2), CASE WHEN V.CveVenta IS NULL THEN C.SubTotal + C.IVA ELSE V.Total END ) 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 LEFT JOIN dbo.Tra_SolicitudesPagos AS SP ON SP.CveSolicitud = S.CveSolicitud AND SP.CveTramitePago = P.CveTramitePago LEFT JOIN dbo.Ventas AS V ON V.CveVenta = SP.CveVenta WHERE NOT EXISTS ( SELECT 1 FROM dbo.Vta_Pagos AS VP WHERE VP.CveSolicitud = S.CveSolicitud AND VP.CveTramitePago = P.CveTramitePago AND VP.CveVenta = SP.CveVenta AND VP.EsActivo = 1 ) 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, VP.CvePago, V.SerieFolio, V.Fecha, VP.FechaPago, VP.Referencia, 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), VP.Importe) 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 INNER JOIN dbo.Vta_Pagos AS VP ON VP.CveVenta = V.CveVenta AND VP.CveSolicitud = SP.CveSolicitud AND VP.CveTramitePago = SP.CveTramitePago AND VP.EsActivo = 1 WHERE S.CveFraccionamiento = @CveFraccionamiento ORDER BY VP.FechaPago DESC, VP.CvePago 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 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, SP.CveVenta, VP.CvePago, CONVERT( bit, CASE WHEN SP.CveSolicitudPago IS NOT NULL AND V.CveVenta IS NOT NULL THEN 1 ELSE 0 END ) AS VentaGenerada, CONVERT( bit, CASE WHEN VP.Autorizado = 1 THEN 1 ELSE 0 END ) AS VentaPagada, CONVERT( bit, CASE WHEN VP.CvePago IS NOT NULL AND VP.Autorizado = 0 THEN 1 ELSE 0 END ) AS PagoPendienteAutorizacion, VP.Referencia AS ReferenciaPago, 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, N'Remisión' AS TipoDocumento, ISNULL(V.Serie, 'TRA') AS Serie, ISNULL( V.Folio, ISNULL( ( SELECT MAX(Venta.Folio) + 1 FROM dbo.Ventas AS Venta WHERE Venta.TipoDocto = 'Rem' AND Venta.Serie = 'TRA' AND Venta.CveSubProyecto = @CveSubProyecto ), 1 ) ) AS Folio, ISNULL(V.Fecha, GETDATE()) AS Fecha, ISNULL(V.CveMetodoPago33, ISNULL(V.CveMetodoPago, 2)) AS CveMetodoPago, ISNULL(V.CveFormaPago33, ISNULL(V.FormaPago, 99)) AS CveFormaPago, V.FechaVencimiento2 AS FechaVencimiento 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 LEFT JOIN dbo.Tra_SolicitudesPagos AS SP ON SP.CveSolicitud = S.CveSolicitud AND SP.CveTramitePago = P.CveTramitePago LEFT JOIN dbo.Ventas AS V ON V.CveVenta = SP.CveVenta OUTER APPLY ( SELECT TOP (1) Pago.CvePago, Pago.Autorizado, Pago.Referencia FROM dbo.Vta_Pagos AS Pago WHERE Pago.CveVenta = V.CveVenta AND Pago.CveSolicitud = S.CveSolicitud AND Pago.CveTramitePago = P.CveTramitePago AND Pago.EsActivo = 1 ORDER BY Pago.CvePago DESC ) AS VP 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_TramitePagoSave @CveSolicitud int, @CveTramitePago int, @Referencia varchar(200) = 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 @CveVenta int, @CveCliente int, @Importe decimal(18, 2), @CvePago int, @FechaPago datetime = GETDATE(); SELECT @CveVenta = V.CveVenta, @CveCliente = V.CveCliente, @Importe = CONVERT(decimal(18, 2), V.Total) FROM dbo.Tra_SolicitudesPagos AS SP INNER JOIN dbo.Ventas AS V ON V.CveVenta = SP.CveVenta WHERE SP.CveSolicitud = @CveSolicitud AND SP.CveTramitePago = @CveTramitePago; IF @CveVenta IS NULL BEGIN SELECT @ErrorMostrar = 'Primero debe generar la venta del trámite.', @ErrorTipo = 2; RETURN; END; IF EXISTS ( SELECT 1 FROM dbo.Vta_Pagos WITH (UPDLOCK, HOLDLOCK) WHERE CveSolicitud = @CveSolicitud AND CveTramitePago = @CveTramitePago AND CveVenta = @CveVenta AND EsActivo = 1 ) BEGIN SELECT @ErrorMostrar = 'La venta del trámite ya se encuentra pagada.', @ErrorTipo = 2; RETURN; END; IF NOT EXISTS ( SELECT 1 FROM dbo.Vta_FormaPago WHERE CveFormaPago = 99 ) BEGIN SELECT @ErrorMostrar = 'La forma de pago por definir no está configurada; favor de contactar a Sistemas.', @ErrorTipo = 2; RETURN; END; INSERT INTO dbo.Vta_Pagos ( CveCliente, CveVenta, CveSolicitud, CveFormaPago, CveMoneda, CvePrePoliza, FechaPago, Importe, Referencia, EsSaldoFavor, EsActivo, FechaAlta, CveUsuario, CveTramitePago ) VALUES ( @CveCliente, @CveVenta, @CveSolicitud, 99, 1, NULL, @FechaPago, @Importe, NULLIF(LTRIM(RTRIM(@Referencia)), ''), 0, 1, @FechaPago, @CveUsuarioEjecuta, @CveTramitePago ); SET @CvePago = CONVERT(int, SCOPE_IDENTITY()); UPDATE dbo.Ventas SET CveMetodoPago = 2, FormaPago = 99, CveFormaPago33 = 99, CveMetodoPago33 = 2, FechaCobranza = @FechaPago, CveUsuarioCobranza = @CveUsuarioEjecuta WHERE CveVenta = @CveVenta; SELECT @CvePago AS CvePago; SET @Return = 1; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al registrar el pago 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_TramitePagoSave' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaGenerar @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 IF EXISTS ( SELECT 1 FROM dbo.Tra_SolicitudesPagos AS SP INNER JOIN dbo.Ventas AS V ON V.CveVenta = SP.CveVenta WHERE SP.CveSolicitud = @CveSolicitud AND SP.CveTramitePago = @CveTramitePago ) BEGIN SELECT @ErrorMostrar = 'La venta del trámite ya fue generada.', @ErrorTipo = 2; RETURN; END; EXEC dbo.PA_Vta_TramiteVentaSave @CveSolicitud = @CveSolicitud, @CveTramitePago = @CveTramitePago, @Observaciones = @Observaciones, @CveUsuarioEjecuta = @CveUsuarioEjecuta, @ErrorMostrar = @ErrorMostrar OUTPUT, @ErrorTipo = @ErrorTipo OUTPUT, @Return = @Return OUTPUT; END TRY BEGIN CATCH SELECT @ErrorMostrar = 'Ocurrió un error al generar 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_TramiteVentaGenerar' ), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE() ); RAISERROR(N'%s', 10, 1, @ErrorTecnico); END CATCH; END; GO