1171 lines
40 KiB
Transact-SQL
1171 lines
40 KiB
Transact-SQL
SET ANSI_NULLS ON;
|
|
SET QUOTED_IDENTIFIER ON;
|
|
GO
|
|
|
|
DECLARE @Permisos TABLE
|
|
(
|
|
CodigoPermiso varchar(100) COLLATE Modern_Spanish_CI_AS NOT NULL,
|
|
NombrePermiso varchar(150) NOT NULL,
|
|
Descripcion varchar(300) NOT NULL
|
|
);
|
|
|
|
INSERT INTO @Permisos
|
|
(CodigoPermiso, NombrePermiso, Descripcion)
|
|
VALUES
|
|
('Ventas.Tramites.AgregarConceptos', 'Agregar conceptos a ventas de trámites', 'Permite agregar productos o servicios a una venta de trámite antes de timbrarla.'),
|
|
('Ventas.Tramites.ModificarConceptos', 'Modificar conceptos de ventas de trámites', 'Permite modificar la cantidad y el precio unitario de los conceptos antes de timbrar la venta.'),
|
|
('Ventas.Tramites.EliminarConceptos', 'Eliminar conceptos de ventas de trámites', 'Permite quitar productos o servicios de una venta de trámite antes de timbrarla.'),
|
|
('Ventas.Tramites.Timbrar', 'Timbrar ventas de trámites', 'Permite timbrar una venta de trámite pagada.'),
|
|
('Ventas.Tramites.CancelarTimbre', 'Cancelar timbres de ventas de trámites', 'Permite solicitar al PAC la cancelación del timbre vigente de una venta de trámite.');
|
|
|
|
INSERT INTO dbo.Sis_Permisos
|
|
(
|
|
CodigoPermiso,
|
|
NombrePermiso,
|
|
Descripcion,
|
|
Activo,
|
|
FechaCreacion
|
|
)
|
|
SELECT
|
|
P.CodigoPermiso,
|
|
P.NombrePermiso,
|
|
P.Descripcion,
|
|
1,
|
|
GETDATE()
|
|
FROM @Permisos AS P
|
|
WHERE NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Sis_Permisos AS Existente
|
|
WHERE Existente.CodigoPermiso = P.CodigoPermiso
|
|
);
|
|
|
|
UPDATE Existente
|
|
SET
|
|
NombrePermiso = P.NombrePermiso,
|
|
Descripcion = P.Descripcion,
|
|
Activo = 1,
|
|
FechaActualizacion = GETDATE()
|
|
FROM dbo.Sis_Permisos AS Existente
|
|
INNER JOIN @Permisos AS P
|
|
ON P.CodigoPermiso = Existente.CodigoPermiso;
|
|
|
|
INSERT INTO dbo.Sis_RolesPermisos
|
|
(
|
|
CveRol,
|
|
CvePermiso,
|
|
Permitido,
|
|
FechaCreacion
|
|
)
|
|
SELECT
|
|
R.CveRol,
|
|
P.CvePermiso,
|
|
1,
|
|
GETDATE()
|
|
FROM dbo.Sis_Roles AS R
|
|
CROSS JOIN dbo.Sis_Permisos AS P
|
|
WHERE R.CveRol IN (1, 2)
|
|
AND P.CodigoPermiso IN
|
|
(
|
|
'Ventas.Tramites.ModificarConceptos',
|
|
'Ventas.Tramites.AgregarConceptos',
|
|
'Ventas.Tramites.EliminarConceptos',
|
|
'Ventas.Tramites.Timbrar',
|
|
'Ventas.Tramites.CancelarTimbre'
|
|
)
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Sis_RolesPermisos AS RP
|
|
WHERE RP.CveRol = R.CveRol
|
|
AND RP.CvePermiso = P.CvePermiso
|
|
);
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.Fac_CfdiCancelaciones', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.Fac_CfdiCancelaciones
|
|
(
|
|
CveCfdiCancelacion bigint IDENTITY(1, 1) NOT NULL,
|
|
CveCfdiDocumento bigint NOT NULL,
|
|
CveCfdiTimbrado bigint NOT NULL,
|
|
IdSolicitud uniqueidentifier NOT NULL,
|
|
ProveedorPac varchar(50) NOT NULL,
|
|
Ambiente varchar(20) NOT NULL,
|
|
Motivo varchar(2) NOT NULL,
|
|
UuidSustitucion varchar(36) NULL,
|
|
Estado varchar(20) NOT NULL,
|
|
Exitoso bit NOT NULL,
|
|
CodigoRespuesta varchar(100) NULL,
|
|
MensajeRespuesta varchar(2000) NULL,
|
|
TipoExcepcion varchar(300) NULL,
|
|
FechaSolicitud datetime2(0) NOT NULL,
|
|
FechaRespuesta datetime2(0) NULL,
|
|
CveUsuario int NOT NULL,
|
|
CONSTRAINT PK_Fac_CfdiCancelaciones
|
|
PRIMARY KEY CLUSTERED (CveCfdiCancelacion),
|
|
CONSTRAINT UQ_Fac_CfdiCancelaciones_IdSolicitud
|
|
UNIQUE NONCLUSTERED (IdSolicitud),
|
|
CONSTRAINT FK_Fac_CfdiCancelaciones_Documentos
|
|
FOREIGN KEY (CveCfdiDocumento)
|
|
REFERENCES dbo.Fac_CfdiDocumentos (CveCfdiDocumento),
|
|
CONSTRAINT FK_Fac_CfdiCancelaciones_Timbrados
|
|
FOREIGN KEY (CveCfdiTimbrado)
|
|
REFERENCES dbo.Fac_CfdiTimbrados (CveCfdiTimbrado),
|
|
CONSTRAINT FK_Fac_CfdiCancelaciones_Usuarios
|
|
FOREIGN KEY (CveUsuario)
|
|
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
|
CONSTRAINT CK_Fac_CfdiCancelaciones_Motivo
|
|
CHECK (Motivo IN ('01', '02', '03', '04'))
|
|
);
|
|
|
|
CREATE NONCLUSTERED INDEX IX_Fac_CfdiCancelaciones_Documento_Fecha
|
|
ON dbo.Fac_CfdiCancelaciones
|
|
(
|
|
CveCfdiDocumento,
|
|
FechaSolicitud DESC,
|
|
CveCfdiCancelacion DESC
|
|
);
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Fac_CfdiCancelacionAttemptStart
|
|
@CveCfdiDocumento bigint,
|
|
@IdSolicitud uniqueidentifier,
|
|
@ProveedorPac varchar(50),
|
|
@Ambiente varchar(20),
|
|
@Motivo varchar(2),
|
|
@UuidSustitucion varchar(36) = 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 @CveCfdiTimbrado bigint;
|
|
DECLARE @RfcEmisor varchar(13);
|
|
DECLARE @Uuid varchar(36);
|
|
DECLARE @CveCfdiCancelacion bigint;
|
|
|
|
IF @Motivo NOT IN ('01', '02', '03', '04')
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'Seleccione un motivo de cancelación válido.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @Motivo = '01' AND NULLIF(LTRIM(RTRIM(@UuidSustitucion)), '') IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'Capture el UUID que sustituirá al timbre cancelado.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT
|
|
@CveCfdiTimbrado = D.CveCfdiTimbradoVigente,
|
|
@RfcEmisor = D.RfcEmisor,
|
|
@Uuid = T.Uuid
|
|
FROM dbo.Fac_CfdiDocumentos AS D WITH (UPDLOCK, HOLDLOCK)
|
|
INNER JOIN dbo.Fac_CfdiTimbrados AS T
|
|
ON T.CveCfdiTimbrado = D.CveCfdiTimbradoVigente
|
|
WHERE D.CveCfdiDocumento = @CveCfdiDocumento
|
|
AND D.Estado = 'TIMBRADO'
|
|
AND T.Exitoso = 1;
|
|
|
|
IF @CveCfdiTimbrado IS NULL OR NULLIF(@Uuid, '') IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El CFDI no tiene un timbre vigente para cancelar.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Fac_CfdiCancelaciones
|
|
WHERE CveCfdiDocumento = @CveCfdiDocumento
|
|
AND Exitoso = 1
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El timbre ya fue cancelado.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT @CveCfdiCancelacion = CveCfdiCancelacion
|
|
FROM dbo.Fac_CfdiCancelaciones
|
|
WHERE IdSolicitud = @IdSolicitud;
|
|
|
|
IF @CveCfdiCancelacion IS NULL
|
|
BEGIN
|
|
INSERT INTO dbo.Fac_CfdiCancelaciones
|
|
(
|
|
CveCfdiDocumento,
|
|
CveCfdiTimbrado,
|
|
IdSolicitud,
|
|
ProveedorPac,
|
|
Ambiente,
|
|
Motivo,
|
|
UuidSustitucion,
|
|
Estado,
|
|
Exitoso,
|
|
FechaSolicitud,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveCfdiDocumento,
|
|
@CveCfdiTimbrado,
|
|
@IdSolicitud,
|
|
@ProveedorPac,
|
|
@Ambiente,
|
|
@Motivo,
|
|
NULLIF(LTRIM(RTRIM(@UuidSustitucion)), ''),
|
|
'PENDIENTE',
|
|
0,
|
|
SYSDATETIME(),
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
SET @CveCfdiCancelacion = CONVERT(bigint, SCOPE_IDENTITY());
|
|
END;
|
|
|
|
SELECT
|
|
@CveCfdiCancelacion AS CveCfdiCancelacion,
|
|
@CveCfdiDocumento AS CveCfdiDocumento,
|
|
@CveCfdiTimbrado AS CveCfdiTimbrado,
|
|
@IdSolicitud AS IdSolicitud,
|
|
@RfcEmisor AS RfcEmisor,
|
|
@Uuid AS Uuid,
|
|
@Motivo AS Motivo,
|
|
NULLIF(LTRIM(RTRIM(@UuidSustitucion)), '') AS UuidSustitucion,
|
|
CONVERT(bit, 1) AS PuedeEnviar;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al iniciar la cancelación del CFDI; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fac_CfdiCancelacionAttemptStart'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Fac_CfdiCancelacionAttemptComplete
|
|
@CveCfdiCancelacion bigint,
|
|
@Exitoso bit,
|
|
@ResultadoIndeterminado bit,
|
|
@CodigoRespuesta varchar(100) = NULL,
|
|
@MensajeRespuesta varchar(2000) = NULL,
|
|
@TipoExcepcion varchar(300) = 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 @CveCfdiDocumento bigint;
|
|
DECLARE @Estado varchar(20) =
|
|
CASE
|
|
WHEN @Exitoso = 1 THEN 'EXITOSO'
|
|
WHEN @ResultadoIndeterminado = 1 THEN 'INDETERMINADO'
|
|
ELSE 'FALLIDO'
|
|
END;
|
|
|
|
SELECT @CveCfdiDocumento = CveCfdiDocumento
|
|
FROM dbo.Fac_CfdiCancelaciones WITH (UPDLOCK, HOLDLOCK)
|
|
WHERE CveCfdiCancelacion = @CveCfdiCancelacion
|
|
AND Estado = 'PENDIENTE';
|
|
|
|
IF @CveCfdiDocumento IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El intento de cancelación no existe o ya fue finalizado.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.Fac_CfdiCancelaciones
|
|
SET
|
|
Estado = @Estado,
|
|
Exitoso = @Exitoso,
|
|
CodigoRespuesta = NULLIF(LTRIM(RTRIM(@CodigoRespuesta)), ''),
|
|
MensajeRespuesta = NULLIF(LTRIM(RTRIM(@MensajeRespuesta)), ''),
|
|
TipoExcepcion = NULLIF(LTRIM(RTRIM(@TipoExcepcion)), ''),
|
|
FechaRespuesta = SYSDATETIME(),
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveCfdiCancelacion = @CveCfdiCancelacion;
|
|
|
|
IF @Exitoso = 1
|
|
BEGIN
|
|
UPDATE dbo.Fac_CfdiDocumentos
|
|
SET
|
|
Estado = 'CANCELADO',
|
|
FechaModificacion = SYSDATETIME(),
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveCfdiDocumento = @CveCfdiDocumento;
|
|
END;
|
|
|
|
SELECT
|
|
@CveCfdiDocumento AS CveCfdiDocumento,
|
|
@CveCfdiCancelacion AS CveCfdiCancelacion,
|
|
@Exitoso AS CancelacionExitosa,
|
|
@Estado AS Estado,
|
|
@CodigoRespuesta AS CodigoRespuesta,
|
|
@MensajeRespuesta AS Mensaje;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'El PAC respondió, pero no fue posible guardar la cancelación; favor de contactar a Sistemas.', @ErrorTipo = 1, @Return = 0;
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT('Número: ', ERROR_NUMBER(), '; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Fac_CfdiCancelacionAttemptComplete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaTimbreCanceladoUpdate
|
|
@CveVenta int,
|
|
@CveCfdiDocumento bigint,
|
|
@Motivo varchar(2),
|
|
@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.Fac_CfdiDocumentos
|
|
WHERE CveCfdiDocumento = @CveCfdiDocumento
|
|
AND TipoOrigen = 'VENTA'
|
|
AND CveOrigen = @CveVenta
|
|
AND Estado = 'CANCELADO'
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'La cancelación del CFDI no corresponde a la venta.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.Ventas
|
|
SET
|
|
SeTimbro = 0,
|
|
MotivoCancelacion = @Motivo,
|
|
FechaCancelacion = GETDATE(),
|
|
EstadoCancelacion = 'CANCELADO',
|
|
CveUsuarioModifico = @CveUsuarioEjecuta
|
|
WHERE CveVenta = @CveVenta;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'El timbre fue cancelado, pero no fue posible actualizar 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_TramiteVentaTimbreCanceladoUpdate'), '; 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.CvePago IS NOT NULL THEN 1 ELSE 0 END) AS VentaPagada,
|
|
Documento.CveCfdiDocumento,
|
|
CONVERT(bit, CASE WHEN V.SeTimbro = 1 OR Documento.Estado = 'TIMBRADO' THEN 1 ELSE 0 END) AS VentaTimbrada,
|
|
CONVERT(bit, CASE WHEN Documento.Estado = 'CANCELADO' THEN 1 ELSE 0 END) AS TimbreCancelado,
|
|
Documento.Uuid AS UuidTimbre,
|
|
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
|
|
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
|
|
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
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1)
|
|
D.CveCfdiDocumento,
|
|
D.Estado,
|
|
T.Uuid
|
|
FROM dbo.Fac_CfdiDocumentos AS D
|
|
LEFT JOIN dbo.Fac_CfdiTimbrados AS T
|
|
ON T.CveCfdiTimbrado = D.CveCfdiTimbradoVigente
|
|
WHERE D.TipoOrigen = 'VENTA'
|
|
AND D.CveOrigen = V.CveVenta
|
|
AND D.Estado IN ('TIMBRADO', 'CANCELADO')
|
|
ORDER BY D.CveCfdiDocumento DESC
|
|
) AS Documento
|
|
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_TramiteVentaTimbradaUpdate
|
|
@CveVenta int,
|
|
@CveCfdiDocumento bigint,
|
|
@Uuid varchar(36),
|
|
@FechaTimbrado datetime = 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.Fac_CfdiDocumentos
|
|
WHERE CveCfdiDocumento = @CveCfdiDocumento
|
|
AND TipoOrigen = 'VENTA'
|
|
AND CveOrigen = @CveVenta
|
|
AND Estado = 'TIMBRADO'
|
|
AND CveCfdiTimbradoVigente IS NOT NULL
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El CFDI timbrado no corresponde a la venta.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.Ventas
|
|
SET
|
|
SeTimbro = 1,
|
|
FolioFiscal = @Uuid,
|
|
FechaTimbrado = ISNULL(@FechaTimbrado, GETDATE()),
|
|
MotivoCancelacion = NULL,
|
|
FechaCancelacion = NULL,
|
|
EstadoCancelacion = NULL,
|
|
CveUsuarioModifico = @CveUsuarioEjecuta
|
|
WHERE CveVenta = @CveVenta;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'El timbre fue emitido, pero no fue posible actualizar 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_TramiteVentaTimbradaUpdate'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaTotalesUpdate
|
|
@CveVenta 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 @SubTotal decimal(18, 2);
|
|
DECLARE @Descuento decimal(18, 2);
|
|
DECLARE @IVA decimal(18, 2);
|
|
DECLARE @Total decimal(18, 2);
|
|
|
|
SELECT
|
|
@SubTotal = CONVERT(decimal(18, 2), SUM(Importe)),
|
|
@Descuento = CONVERT(decimal(18, 2), SUM(Descuento)),
|
|
@IVA = CONVERT(decimal(18, 2), SUM(IVA))
|
|
FROM dbo.VentasDetalle
|
|
WHERE CveVenta = @CveVenta;
|
|
|
|
IF @SubTotal IS NULL
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'La venta debe conservar al menos un concepto.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Descuento = ISNULL(@Descuento, 0);
|
|
SET @IVA = ISNULL(@IVA, 0);
|
|
SET @Total = CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(@SubTotal - @Descuento + @IVA, 2));
|
|
|
|
UPDATE dbo.Ventas
|
|
SET
|
|
SubTotal = @SubTotal,
|
|
Descuento = @Descuento,
|
|
IVA = @IVA,
|
|
Total = @Total,
|
|
CveUsuarioModifico = @CveUsuarioEjecuta
|
|
WHERE CveVenta = @CveVenta;
|
|
|
|
UPDATE dbo.Vta_Pagos
|
|
SET Importe = @Total
|
|
WHERE CveVenta = @CveVenta
|
|
AND EsActivo = 1;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al actualizar los totales 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_TramiteVentaTotalesUpdate'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteConceptoDelete
|
|
@CveSolicitud int,
|
|
@CveTramitePago int,
|
|
@CveVentaDetalle 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 @CveVenta int;
|
|
|
|
SELECT @CveVenta = V.CveVenta
|
|
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.Ventas AS V
|
|
WHERE V.CveVenta = @CveVenta
|
|
AND
|
|
(
|
|
V.SeTimbro = 1
|
|
OR EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Fac_CfdiDocumentos AS D
|
|
WHERE D.TipoOrigen = 'VENTA'
|
|
AND D.CveOrigen = V.CveVenta
|
|
AND D.Estado = 'TIMBRADO'
|
|
AND D.CveCfdiTimbradoVigente IS NOT NULL
|
|
)
|
|
)
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'No se pueden eliminar conceptos de una venta timbrada.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = @CveVentaDetalle
|
|
AND CveVenta = @CveVenta
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El concepto seleccionado no pertenece a la venta.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF (SELECT COUNT(*) FROM dbo.VentasDetalle WHERE CveVenta = @CveVenta) <= 1
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'La venta debe conservar al menos un concepto.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
DELETE FROM dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = @CveVentaDetalle;
|
|
|
|
EXEC dbo.PA_Vta_TramiteVentaTotalesUpdate
|
|
@CveVenta = @CveVenta,
|
|
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
|
|
@ErrorMostrar = @ErrorMostrar OUTPUT,
|
|
@ErrorTipo = @ErrorTipo OUTPUT,
|
|
@Return = @Return OUTPUT;
|
|
|
|
IF @Return = 0
|
|
RETURN;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al eliminar el concepto 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_TramiteConceptoDelete'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Vta_TramiteVentaDatosCfdiGet
|
|
@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 @CveVenta int;
|
|
|
|
SELECT @CveVenta = V.CveVenta
|
|
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.Ventas
|
|
WHERE CveVenta = @CveVenta
|
|
AND SeTimbro = 1
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'La venta ya se encuentra timbrada.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Fac_CfdiDocumentos
|
|
WHERE TipoOrigen = 'VENTA'
|
|
AND CveOrigen = @CveVenta
|
|
AND Estado = 'REVISAR'
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Existe un intento de timbrado con resultado indeterminado; debe revisarse antes de volver a timbrar.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SELECT
|
|
V.CveVenta,
|
|
Borrador.CveCfdiDocumento,
|
|
V.CveCliente,
|
|
V.Serie,
|
|
V.Folio,
|
|
V.Fecha,
|
|
FP.ClaveFormaPagoSAT AS FormaPago,
|
|
MP.ClaveMetodoPagoSAT AS MetodoPago,
|
|
M.AbreviaturaSAT AS Moneda,
|
|
CONVERT(decimal(19, 6), V.TipoCambio) AS TipoCambio
|
|
FROM dbo.Ventas AS V
|
|
LEFT JOIN dbo.Vta_FormaPago AS FP
|
|
ON FP.CveFormaPago = V.FormaPago
|
|
LEFT JOIN dbo.Vta_MetodoPago AS MP
|
|
ON MP.CveMetodoPago = V.CveMetodoPago
|
|
INNER JOIN dbo.Gral_Monedas AS M
|
|
ON M.CveMoneda = V.CveMoneda
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1) D.CveCfdiDocumento
|
|
FROM dbo.Fac_CfdiDocumentos AS D
|
|
WHERE D.TipoOrigen = 'VENTA'
|
|
AND D.CveOrigen = V.CveVenta
|
|
AND D.CveCfdiTimbradoVigente IS NULL
|
|
AND D.Estado IN ('BORRADOR', 'LISTO', 'ERROR')
|
|
ORDER BY D.CveCfdiDocumento DESC
|
|
) AS Borrador
|
|
WHERE V.CveVenta = @CveVenta;
|
|
|
|
SELECT
|
|
SATPS.SATClavePS AS ClaveProductoServicio,
|
|
PS.Codigo AS NumeroIdentificacion,
|
|
VD.Cantidad,
|
|
SATUM.SATClaveUnidadMedida AS ClaveUnidad,
|
|
UM.UnidadMedida AS Unidad,
|
|
PS.PS AS Descripcion,
|
|
VD.PrecioUnitario AS ValorUnitario,
|
|
VD.PrecioUnitario AS PU,
|
|
VD.Importe AS Total,
|
|
VD.Descuento,
|
|
OI.CodigoObjetoImpuesto AS ObjetoImpuesto,
|
|
CONVERT(
|
|
decimal(19, 6),
|
|
VD.Importe - VD.Descuento
|
|
) AS BaseIVA,
|
|
CONVERT(decimal(19, 6), 0.16) AS TasaIVA,
|
|
CONVERT(decimal(19, 6), VD.IVA) AS ImporteIVA,
|
|
CONVERT(decimal(19, 6), 0.16) AS PorcentajeIVA
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = VD.CvePS
|
|
INNER JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
LEFT JOIN dbo.Gral_SAT_ProductosServicios AS SATPS
|
|
ON SATPS.CveSATPS = PS.CveSATPS
|
|
LEFT JOIN dbo.Gral_SAT_UnidadesMedida AS SATUM
|
|
ON SATUM.CveSATUnidadMedida = UM.CveSATUnidadMedida
|
|
LEFT JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
|
WHERE VD.CveVenta = @CveVenta
|
|
ORDER BY VD.CveVentaDetalle;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al preparar los datos fiscales 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_TramiteVentaDatosCfdiGet'), '; 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 @CveVenta int;
|
|
DECLARE @PorcentajeIVA decimal(9, 6) = 0.16;
|
|
|
|
SELECT @CveVenta = SP.CveVenta
|
|
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 NOT NULL
|
|
BEGIN
|
|
SELECT
|
|
VD.CveVentaDetalle,
|
|
CONVERT(int, 0) AS CveTramitePagoDetalle,
|
|
VD.CvePS,
|
|
UM.CveUnidadMedida AS 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,
|
|
VD.Cantidad,
|
|
VD.PrecioUnitario,
|
|
VD.Descuento,
|
|
VD.IVA,
|
|
VD.Importe
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = VD.CvePS
|
|
INNER JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
INNER JOIN dbo.Clasificaciones AS C
|
|
ON C.CveClasificacion = PS.CveClasificacion
|
|
WHERE VD.CveVenta = @CveVenta
|
|
ORDER BY VD.CveVentaDetalle;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SELECT
|
|
CONVERT(int, 0) AS CveVentaDetalle,
|
|
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(Costo.Importe * @PorcentajeIVA, 2)
|
|
) AS IVA,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(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 = 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
|
|
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;
|
|
END;
|
|
|
|
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_TramiteConceptoSave
|
|
@CveSolicitud int,
|
|
@CveTramitePago int,
|
|
@CveVentaDetalle int = NULL,
|
|
@CvePS int,
|
|
@Cantidad decimal(18, 4),
|
|
@PrecioUnitario decimal(18, 2),
|
|
@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;
|
|
DECLARE @PorcentajeIVA decimal(9, 6) = 0.16;
|
|
DECLARE @Descuento decimal(18, 2) = 0;
|
|
DECLARE @IVA decimal(18, 2);
|
|
DECLARE @Importe decimal(18, 2);
|
|
|
|
SELECT @CveVenta = V.CveVenta
|
|
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.Ventas AS V
|
|
WHERE V.CveVenta = @CveVenta
|
|
AND V.SeTimbro = 1
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'No se pueden modificar los conceptos de una venta timbrada.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.ProductosServicios
|
|
WHERE CvePS = @CvePS
|
|
AND Estado = 1
|
|
)
|
|
OR @Cantidad <= 0
|
|
OR @PrecioUnitario < 0
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'Capture un producto activo, cantidad y precio unitario válidos.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveVentaDetalle IS NOT NULL
|
|
BEGIN
|
|
SELECT @Descuento = Descuento
|
|
FROM dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = @CveVentaDetalle
|
|
AND CveVenta = @CveVenta;
|
|
END;
|
|
|
|
SET @Importe = CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(@Cantidad * @PrecioUnitario, 2));
|
|
|
|
IF @Descuento > @Importe
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El descuento del concepto no puede ser mayor que su importe.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @IVA = CONVERT(
|
|
decimal(18, 2),
|
|
ROUND((@Importe - @Descuento) * @PorcentajeIVA, 2));
|
|
|
|
IF @CveVentaDetalle IS NULL
|
|
BEGIN
|
|
INSERT INTO dbo.VentasDetalle
|
|
(
|
|
CveVenta,
|
|
CvePS,
|
|
CveSolicitud,
|
|
CveCostoTramite,
|
|
Cantidad,
|
|
PrecioUnitario,
|
|
Descuento,
|
|
IVA,
|
|
Importe,
|
|
EsFondoInicial,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveVenta,
|
|
@CvePS,
|
|
@CveSolicitud,
|
|
NULL,
|
|
@Cantidad,
|
|
@PrecioUnitario,
|
|
0,
|
|
@IVA,
|
|
@Importe,
|
|
0,
|
|
GETDATE(),
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
SET @CveVentaDetalle = CONVERT(int, SCOPE_IDENTITY());
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = @CveVentaDetalle
|
|
AND CveVenta = @CveVenta
|
|
)
|
|
BEGIN
|
|
SELECT @ErrorMostrar = 'El concepto seleccionado no pertenece a la venta.', @ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.VentasDetalle
|
|
SET
|
|
CvePS = @CvePS,
|
|
Cantidad = @Cantidad,
|
|
PrecioUnitario = @PrecioUnitario,
|
|
IVA = @IVA,
|
|
Importe = @Importe,
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveVentaDetalle = @CveVentaDetalle;
|
|
END;
|
|
|
|
EXEC dbo.PA_Vta_TramiteVentaTotalesUpdate
|
|
@CveVenta = @CveVenta,
|
|
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
|
|
@ErrorMostrar = @ErrorMostrar OUTPUT,
|
|
@ErrorTipo = @ErrorTipo OUTPUT,
|
|
@Return = @Return OUTPUT;
|
|
|
|
IF @Return = 0
|
|
RETURN;
|
|
|
|
SELECT @CveVentaDetalle AS CveVentaDetalle;
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT @ErrorMostrar = 'Ocurrió un error al guardar el concepto 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_TramiteConceptoSave'), '; Línea: ', ERROR_LINE(), '; Detalle: ', ERROR_MESSAGE());
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|