2825 lines
84 KiB
Transact-SQL
2825 lines
84 KiB
Transact-SQL
SET NOCOUNT ON;
|
|
GO
|
|
|
|
UPDATE dbo.ProductosServicios
|
|
SET CveObjetoImpuesto = 2,
|
|
IVA = NULL
|
|
WHERE CvePS = 9;
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.Tra_CostosTramite', N'CveObjetoImpuesto') IS NULL
|
|
BEGIN
|
|
EXEC sys.sp_executesql N'
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ADD CveObjetoImpuesto tinyint NULL;';
|
|
END;
|
|
GO
|
|
|
|
UPDATE CT
|
|
SET CveObjetoImpuesto = ISNULL(PS.CveObjetoImpuesto, 1)
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = CT.CvePS
|
|
WHERE CT.CveObjetoImpuesto IS NULL;
|
|
GO
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.columns
|
|
WHERE object_id = OBJECT_ID(N'dbo.Tra_CostosTramite')
|
|
AND name = N'CveObjetoImpuesto'
|
|
AND is_nullable = 1
|
|
)
|
|
BEGIN
|
|
UPDATE dbo.Tra_CostosTramite
|
|
SET CveObjetoImpuesto = 1
|
|
WHERE CveObjetoImpuesto IS NULL;
|
|
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ALTER COLUMN CveObjetoImpuesto tinyint NOT NULL;
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.default_constraints
|
|
WHERE parent_object_id = OBJECT_ID(N'dbo.Tra_CostosTramite')
|
|
AND name = N'DF_Tra_CostosTramite_CveObjetoImpuesto'
|
|
)
|
|
BEGIN
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ADD CONSTRAINT DF_Tra_CostosTramite_CveObjetoImpuesto
|
|
DEFAULT (1) FOR CveObjetoImpuesto;
|
|
END;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.Tra_CostosTramiteImpuestos', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramiteImpuesto int IDENTITY(1, 1) NOT NULL,
|
|
CveCostoTramite int NOT NULL,
|
|
EsRetencion bit CONSTRAINT DF_Tra_CostosTramiteImpuestos_EsRetencion
|
|
DEFAULT (0) NOT NULL,
|
|
Impuesto varchar(3) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TipoFactor varchar(6) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TasaOCuota decimal(19, 6) NULL,
|
|
FechaAlta datetime CONSTRAINT DF_Tra_CostosTramiteImpuestos_FechaAlta
|
|
DEFAULT (GETDATE()) NOT NULL,
|
|
CveUsuario int NOT NULL,
|
|
CONSTRAINT PK_Tra_CostosTramiteImpuestos
|
|
PRIMARY KEY CLUSTERED (CveCostoTramiteImpuesto),
|
|
CONSTRAINT FK_Tra_CostosTramiteImpuestos_Costo
|
|
FOREIGN KEY (CveCostoTramite)
|
|
REFERENCES dbo.Tra_CostosTramite (CveCostoTramite),
|
|
CONSTRAINT FK_Tra_CostosTramiteImpuestos_Usuario
|
|
FOREIGN KEY (CveUsuario)
|
|
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
|
CONSTRAINT CK_Tra_CostosTramiteImpuestos_TipoFactor
|
|
CHECK (TipoFactor IN ('Tasa', 'Cuota', 'Exento')),
|
|
CONSTRAINT CK_Tra_CostosTramiteImpuestos_Tasa
|
|
CHECK
|
|
(
|
|
(TipoFactor = 'Exento' AND TasaOCuota IS NULL)
|
|
OR
|
|
(TipoFactor <> 'Exento' AND TasaOCuota >= 0)
|
|
)
|
|
);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX
|
|
UX_Tra_CostosTramiteImpuestos_Configuracion
|
|
ON dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramite,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota
|
|
);
|
|
END;
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.VentasDetalle', N'CveObjetoImpuesto') IS NULL
|
|
BEGIN
|
|
EXEC sys.sp_executesql N'
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ADD CveObjetoImpuesto tinyint NULL;';
|
|
END;
|
|
GO
|
|
|
|
UPDATE VD
|
|
SET CveObjetoImpuesto = COALESCE(
|
|
CT.CveObjetoImpuesto,
|
|
PS.CveObjetoImpuesto,
|
|
1)
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = VD.CvePS
|
|
LEFT JOIN dbo.Tra_CostosTramite AS CT
|
|
ON CT.CveCostoTramite = VD.CveCostoTramite
|
|
WHERE VD.CveObjetoImpuesto IS NULL;
|
|
GO
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.columns
|
|
WHERE object_id = OBJECT_ID(N'dbo.VentasDetalle')
|
|
AND name = N'CveObjetoImpuesto'
|
|
AND is_nullable = 1
|
|
)
|
|
BEGIN
|
|
UPDATE dbo.VentasDetalle
|
|
SET CveObjetoImpuesto = 1
|
|
WHERE CveObjetoImpuesto IS NULL;
|
|
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ALTER COLUMN CveObjetoImpuesto tinyint NOT NULL;
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.default_constraints
|
|
WHERE parent_object_id = OBJECT_ID(N'dbo.VentasDetalle')
|
|
AND name = N'DF_VentasDetalle_CveObjetoImpuesto'
|
|
)
|
|
BEGIN
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ADD CONSTRAINT DF_VentasDetalle_CveObjetoImpuesto
|
|
DEFAULT (1) FOR CveObjetoImpuesto;
|
|
END;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.VentasDetalleImpuestos', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalleImpuesto int IDENTITY(1, 1) NOT NULL,
|
|
CveVentaDetalle int NOT NULL,
|
|
EsRetencion bit CONSTRAINT DF_VentasDetalleImpuestos_EsRetencion
|
|
DEFAULT (0) NOT NULL,
|
|
Base decimal(19, 6) NOT NULL,
|
|
Impuesto varchar(3) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TipoFactor varchar(6) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TasaOCuota decimal(19, 6) NULL,
|
|
Importe decimal(18, 2) CONSTRAINT DF_VentasDetalleImpuestos_Importe
|
|
DEFAULT (0) NOT NULL,
|
|
FechaAlta datetime CONSTRAINT DF_VentasDetalleImpuestos_FechaAlta
|
|
DEFAULT (GETDATE()) NOT NULL,
|
|
CveUsuario int NOT NULL,
|
|
CONSTRAINT PK_VentasDetalleImpuestos
|
|
PRIMARY KEY CLUSTERED (CveVentaDetalleImpuesto),
|
|
CONSTRAINT FK_VentasDetalleImpuestos_VentaDetalle
|
|
FOREIGN KEY (CveVentaDetalle)
|
|
REFERENCES dbo.VentasDetalle (CveVentaDetalle),
|
|
CONSTRAINT FK_VentasDetalleImpuestos_Usuario
|
|
FOREIGN KEY (CveUsuario)
|
|
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_Importes
|
|
CHECK (Base >= 0 AND Importe >= 0),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_TipoFactor
|
|
CHECK (TipoFactor IN ('Tasa', 'Cuota', 'Exento')),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_Tasa
|
|
CHECK
|
|
(
|
|
(TipoFactor = 'Exento' AND TasaOCuota IS NULL)
|
|
OR
|
|
(TipoFactor <> 'Exento' AND TasaOCuota >= 0)
|
|
)
|
|
);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX
|
|
UX_VentasDetalleImpuestos_Configuracion
|
|
ON dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalle,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota
|
|
);
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ProductoServicioList
|
|
@Texto varchar(200) = NULL,
|
|
@IncluirInactivos bit = 1,
|
|
@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 @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
|
|
|
SELECT
|
|
PS.CvePS,
|
|
PS.CveUnidadMedida,
|
|
UM.UnidadMedida,
|
|
UM.Abreviatura,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
|
PS.CveObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
CONVERT(
|
|
decimal(9, 6),
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 0
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END) AS PorcentajeIVA,
|
|
PS.Estado AS EsActivo
|
|
FROM dbo.ProductosServicios AS PS
|
|
LEFT JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
|
WHERE (@IncluirInactivos = 1 OR PS.Estado = 1)
|
|
AND
|
|
(
|
|
@Texto IS NULL
|
|
OR PS.Codigo LIKE '%' + @Texto + '%'
|
|
OR PS.PS LIKE '%' + @Texto + '%'
|
|
)
|
|
ORDER BY PS.PS, PS.Codigo;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar productos y servicios; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_ProductoServicioList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_ProductoServicioGet
|
|
@CvePS 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
|
|
SELECT
|
|
PS.CvePS,
|
|
PS.CveUnidadMedida,
|
|
UM.UnidadMedida,
|
|
UM.Abreviatura,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
|
PS.CveObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
CONVERT(
|
|
decimal(9, 6),
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 0
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END) AS PorcentajeIVA,
|
|
PS.Estado AS EsActivo
|
|
FROM dbo.ProductosServicios AS PS
|
|
LEFT JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
|
WHERE PS.CvePS = @CvePS;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar el producto o servicio; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_ProductoServicioGet'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_PagoDetalleList
|
|
@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
|
|
SELECT
|
|
D.CveTramitePagoDetalle,
|
|
D.CveTramitePago,
|
|
P.Nombre AS Pago,
|
|
D.CvePS,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
D.CveUM,
|
|
UM.UnidadMedida,
|
|
UM.Abreviatura,
|
|
D.Cantidad,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS PrecioProducto,
|
|
CONVERT(decimal(18, 2), COALESCE(Costo.Importe, PS.Precio)) AS Importe,
|
|
COALESCE(Costo.CveObjetoImpuesto, PS.CveObjetoImpuesto) AS CveObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto COLLATE Modern_Spanish_CS_AS + ' - ' + OI.ObjetoImpuesto AS ObjetoImpuesto,
|
|
CONVERT(
|
|
decimal(9, 6),
|
|
COALESCE(
|
|
ImpuestoIVA.TasaOCuota,
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 0
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END)) AS PorcentajeIVA,
|
|
Costo.FechaInicioVigencia,
|
|
Costo.FechaFinVigencia,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(
|
|
D.Cantidad
|
|
* COALESCE(Costo.Importe, PS.Precio)
|
|
* COALESCE(ImpuestoIVA.TasaOCuota, 0),
|
|
2)) AS ImporteIVA,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(
|
|
D.Cantidad
|
|
* COALESCE(Costo.Importe, PS.Precio),
|
|
2)
|
|
+ ROUND(
|
|
D.Cantidad
|
|
* COALESCE(Costo.Importe, PS.Precio)
|
|
* COALESCE(ImpuestoIVA.TasaOCuota, 0),
|
|
2)) AS Total
|
|
FROM dbo.Tra_PagosDetalle AS D
|
|
INNER JOIN dbo.Tra_Pagos AS P
|
|
ON P.CveTramitePago = D.CveTramitePago
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = D.CvePS
|
|
LEFT JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = D.CveUM
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1)
|
|
CT.CveCostoTramite,
|
|
CT.Importe,
|
|
CT.CveObjetoImpuesto,
|
|
CT.FechaInicioVigencia,
|
|
CT.FechaFinVigencia
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = P.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
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1) CTI.TasaOCuota
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = Costo.CveCostoTramite
|
|
AND CTI.EsRetencion = 0
|
|
AND CTI.Impuesto = '002'
|
|
AND CTI.TipoFactor = 'Tasa'
|
|
) AS ImpuestoIVA
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto =
|
|
COALESCE(Costo.CveObjetoImpuesto, PS.CveObjetoImpuesto)
|
|
WHERE D.CveTramitePago = @CveTramitePago
|
|
ORDER BY D.CveTramitePagoDetalle;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar los conceptos del pago; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_PagoDetalleList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_PagoDetalleGet
|
|
@CveTramitePagoDetalle 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
|
|
SELECT
|
|
D.CveTramitePagoDetalle,
|
|
D.CveTramitePago,
|
|
P.Nombre AS Pago,
|
|
D.CvePS,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
D.CveUM,
|
|
UM.UnidadMedida,
|
|
UM.Abreviatura,
|
|
D.Cantidad,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS PrecioProducto,
|
|
CONVERT(decimal(18, 2), COALESCE(Costo.Importe, PS.Precio)) AS Importe,
|
|
COALESCE(Costo.CveObjetoImpuesto, PS.CveObjetoImpuesto) AS CveObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto COLLATE Modern_Spanish_CS_AS + ' - ' + OI.ObjetoImpuesto AS ObjetoImpuesto,
|
|
CONVERT(
|
|
decimal(9, 6),
|
|
COALESCE(
|
|
ImpuestoIVA.TasaOCuota,
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 0
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END)) AS PorcentajeIVA,
|
|
Costo.FechaInicioVigencia,
|
|
Costo.FechaFinVigencia,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(
|
|
D.Cantidad
|
|
* COALESCE(Costo.Importe, PS.Precio)
|
|
* COALESCE(ImpuestoIVA.TasaOCuota, 0),
|
|
2)) AS ImporteIVA,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(D.Cantidad * COALESCE(Costo.Importe, PS.Precio), 2)
|
|
+ ROUND(
|
|
D.Cantidad
|
|
* COALESCE(Costo.Importe, PS.Precio)
|
|
* COALESCE(ImpuestoIVA.TasaOCuota, 0),
|
|
2)) AS Total
|
|
FROM dbo.Tra_PagosDetalle AS D
|
|
INNER JOIN dbo.Tra_Pagos AS P
|
|
ON P.CveTramitePago = D.CveTramitePago
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = D.CvePS
|
|
LEFT JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = D.CveUM
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1)
|
|
CT.CveCostoTramite,
|
|
CT.Importe,
|
|
CT.CveObjetoImpuesto,
|
|
CT.FechaInicioVigencia,
|
|
CT.FechaFinVigencia
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = P.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
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1) CTI.TasaOCuota
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = Costo.CveCostoTramite
|
|
AND CTI.EsRetencion = 0
|
|
AND CTI.Impuesto = '002'
|
|
AND CTI.TipoFactor = 'Tasa'
|
|
) AS ImpuestoIVA
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto =
|
|
COALESCE(Costo.CveObjetoImpuesto, PS.CveObjetoImpuesto)
|
|
WHERE D.CveTramitePagoDetalle = @CveTramitePagoDetalle;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar el concepto del pago; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_PagoDetalleGet'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
|
|
/*
|
|
Configuración fiscal versionada para costos de trámites y fotografía de
|
|
impuestos por concepto de venta.
|
|
|
|
Este script no administra transacciones. La transacción de las operaciones
|
|
de la aplicación permanece en los servicios C#.
|
|
*/
|
|
|
|
UPDATE dbo.ProductosServicios
|
|
SET CveObjetoImpuesto = 2,
|
|
IVA = NULL
|
|
WHERE CvePS = 9;
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.Tra_CostosTramite', N'CveObjetoImpuesto') IS NULL
|
|
BEGIN
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ADD CveObjetoImpuesto tinyint NULL;
|
|
|
|
UPDATE CT
|
|
SET CveObjetoImpuesto = ISNULL(PS.CveObjetoImpuesto, 1)
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = CT.CvePS;
|
|
|
|
UPDATE dbo.Tra_CostosTramite
|
|
SET CveObjetoImpuesto = 1
|
|
WHERE CveObjetoImpuesto IS NULL;
|
|
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ALTER COLUMN CveObjetoImpuesto tinyint NOT NULL;
|
|
|
|
ALTER TABLE dbo.Tra_CostosTramite
|
|
ADD CONSTRAINT DF_Tra_CostosTramite_CveObjetoImpuesto
|
|
DEFAULT (1) FOR CveObjetoImpuesto;
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.foreign_keys
|
|
WHERE parent_object_id = OBJECT_ID(N'dbo.Tra_CostosTramite')
|
|
AND name = N'FK_Tra_CostosTramite_Gral_ObjetoImpuesto'
|
|
)
|
|
BEGIN
|
|
ALTER TABLE dbo.Tra_CostosTramite WITH CHECK
|
|
ADD CONSTRAINT FK_Tra_CostosTramite_Gral_ObjetoImpuesto
|
|
FOREIGN KEY (CveObjetoImpuesto)
|
|
REFERENCES dbo.Gral_SAT_ObjetoImpuesto (CveObjetoImpuesto);
|
|
END;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.Tra_CostosTramiteImpuestos', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramiteImpuesto int IDENTITY(1, 1) NOT NULL,
|
|
CveCostoTramite int NOT NULL,
|
|
EsRetencion bit CONSTRAINT DF_Tra_CostosTramiteImpuestos_EsRetencion
|
|
DEFAULT (0) NOT NULL,
|
|
Impuesto varchar(3) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TipoFactor varchar(6) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TasaOCuota decimal(19, 6) NULL,
|
|
FechaAlta datetime CONSTRAINT DF_Tra_CostosTramiteImpuestos_FechaAlta
|
|
DEFAULT (GETDATE()) NOT NULL,
|
|
CveUsuario int NOT NULL,
|
|
CONSTRAINT PK_Tra_CostosTramiteImpuestos
|
|
PRIMARY KEY CLUSTERED (CveCostoTramiteImpuesto),
|
|
CONSTRAINT FK_Tra_CostosTramiteImpuestos_Costo
|
|
FOREIGN KEY (CveCostoTramite)
|
|
REFERENCES dbo.Tra_CostosTramite (CveCostoTramite),
|
|
CONSTRAINT FK_Tra_CostosTramiteImpuestos_Usuario
|
|
FOREIGN KEY (CveUsuario)
|
|
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
|
CONSTRAINT CK_Tra_CostosTramiteImpuestos_TipoFactor
|
|
CHECK (TipoFactor IN ('Tasa', 'Cuota', 'Exento')),
|
|
CONSTRAINT CK_Tra_CostosTramiteImpuestos_Tasa
|
|
CHECK
|
|
(
|
|
(TipoFactor = 'Exento' AND TasaOCuota IS NULL)
|
|
OR
|
|
(TipoFactor <> 'Exento' AND TasaOCuota >= 0)
|
|
)
|
|
);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX
|
|
UX_Tra_CostosTramiteImpuestos_Configuracion
|
|
ON dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramite,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota
|
|
);
|
|
END;
|
|
GO
|
|
|
|
IF COL_LENGTH(N'dbo.VentasDetalle', N'CveObjetoImpuesto') IS NULL
|
|
BEGIN
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ADD CveObjetoImpuesto tinyint NULL;
|
|
|
|
UPDATE VD
|
|
SET CveObjetoImpuesto = COALESCE(
|
|
CT.CveObjetoImpuesto,
|
|
PS.CveObjetoImpuesto,
|
|
1)
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = VD.CvePS
|
|
LEFT JOIN dbo.Tra_CostosTramite AS CT
|
|
ON CT.CveCostoTramite = VD.CveCostoTramite;
|
|
|
|
UPDATE dbo.VentasDetalle
|
|
SET CveObjetoImpuesto = 1
|
|
WHERE CveObjetoImpuesto IS NULL;
|
|
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ALTER COLUMN CveObjetoImpuesto tinyint NOT NULL;
|
|
|
|
ALTER TABLE dbo.VentasDetalle
|
|
ADD CONSTRAINT DF_VentasDetalle_CveObjetoImpuesto
|
|
DEFAULT (1) FOR CveObjetoImpuesto;
|
|
END;
|
|
GO
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM sys.foreign_keys
|
|
WHERE parent_object_id = OBJECT_ID(N'dbo.VentasDetalle')
|
|
AND name = N'FK_VentasDetalle_Gral_ObjetoImpuesto'
|
|
)
|
|
BEGIN
|
|
ALTER TABLE dbo.VentasDetalle WITH CHECK
|
|
ADD CONSTRAINT FK_VentasDetalle_Gral_ObjetoImpuesto
|
|
FOREIGN KEY (CveObjetoImpuesto)
|
|
REFERENCES dbo.Gral_SAT_ObjetoImpuesto (CveObjetoImpuesto);
|
|
END;
|
|
GO
|
|
|
|
IF OBJECT_ID(N'dbo.VentasDetalleImpuestos', N'U') IS NULL
|
|
BEGIN
|
|
CREATE TABLE dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalleImpuesto int IDENTITY(1, 1) NOT NULL,
|
|
CveVentaDetalle int NOT NULL,
|
|
EsRetencion bit CONSTRAINT DF_VentasDetalleImpuestos_EsRetencion
|
|
DEFAULT (0) NOT NULL,
|
|
Base decimal(19, 6) NOT NULL,
|
|
Impuesto varchar(3) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TipoFactor varchar(6) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
TasaOCuota decimal(19, 6) NULL,
|
|
Importe decimal(18, 2) CONSTRAINT DF_VentasDetalleImpuestos_Importe
|
|
DEFAULT (0) NOT NULL,
|
|
FechaAlta datetime CONSTRAINT DF_VentasDetalleImpuestos_FechaAlta
|
|
DEFAULT (GETDATE()) NOT NULL,
|
|
CveUsuario int NOT NULL,
|
|
CONSTRAINT PK_VentasDetalleImpuestos
|
|
PRIMARY KEY CLUSTERED (CveVentaDetalleImpuesto),
|
|
CONSTRAINT FK_VentasDetalleImpuestos_VentaDetalle
|
|
FOREIGN KEY (CveVentaDetalle)
|
|
REFERENCES dbo.VentasDetalle (CveVentaDetalle),
|
|
CONSTRAINT FK_VentasDetalleImpuestos_Usuario
|
|
FOREIGN KEY (CveUsuario)
|
|
REFERENCES dbo.Sis_Usuarios (CveUsuario),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_Importes
|
|
CHECK (Base >= 0 AND Importe >= 0),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_TipoFactor
|
|
CHECK (TipoFactor IN ('Tasa', 'Cuota', 'Exento')),
|
|
CONSTRAINT CK_VentasDetalleImpuestos_Tasa
|
|
CHECK
|
|
(
|
|
(TipoFactor = 'Exento' AND TasaOCuota IS NULL)
|
|
OR
|
|
(TipoFactor <> 'Exento' AND TasaOCuota >= 0)
|
|
)
|
|
);
|
|
|
|
CREATE UNIQUE NONCLUSTERED INDEX
|
|
UX_VentasDetalleImpuestos_Configuracion
|
|
ON dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalle,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota
|
|
);
|
|
END;
|
|
GO
|
|
|
|
UPDATE CT
|
|
SET CveObjetoImpuesto = 2
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveCostoTramite = 11;
|
|
GO
|
|
|
|
INSERT dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramite,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
CT.CveCostoTramite,
|
|
0,
|
|
'002',
|
|
'Tasa',
|
|
CONVERT(
|
|
decimal(19, 6),
|
|
CASE
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END),
|
|
GETDATE(),
|
|
CT.CveUsuario
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
INNER JOIN dbo.ProductosServicios AS PS
|
|
ON PS.CvePS = CT.CvePS
|
|
WHERE CT.CveObjetoImpuesto <> 1
|
|
AND CASE
|
|
WHEN PS.IVA IS NULL OR PS.IVA = -1 THEN 0.16
|
|
ELSE PS.IVA
|
|
END > 0
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = CT.CveCostoTramite
|
|
AND CTI.EsRetencion = 0
|
|
AND CTI.Impuesto = '002'
|
|
);
|
|
GO
|
|
|
|
DELETE dbo.VentasDetalleImpuestos
|
|
WHERE CveVentaDetalle = 6;
|
|
GO
|
|
|
|
UPDATE dbo.VentasDetalle
|
|
SET CveObjetoImpuesto = 2,
|
|
IVA = 320.00
|
|
WHERE CveVentaDetalle = 6
|
|
AND CveVenta = 1019;
|
|
GO
|
|
|
|
INSERT dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalle,
|
|
EsRetencion,
|
|
Base,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
Importe,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
VD.CveVentaDetalle,
|
|
0,
|
|
CONVERT(decimal(19, 6), VD.Importe - VD.Descuento),
|
|
'002',
|
|
'Tasa',
|
|
CONVERT(
|
|
decimal(19, 6),
|
|
CASE
|
|
WHEN VD.Importe - VD.Descuento = 0 THEN 0
|
|
ELSE VD.IVA / (VD.Importe - VD.Descuento)
|
|
END),
|
|
VD.IVA,
|
|
GETDATE(),
|
|
VD.CveUsuario
|
|
FROM dbo.VentasDetalle AS VD
|
|
WHERE VD.CveVentaDetalle = 6
|
|
AND VD.CveVenta = 1019;
|
|
GO
|
|
|
|
UPDATE dbo.Ventas
|
|
SET SubTotal = 2000.00,
|
|
Descuento = 0.00,
|
|
IVA = 320.00,
|
|
Total = 2320.00
|
|
WHERE CveVenta = 1019
|
|
AND EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = 6
|
|
AND CveVenta = 1019
|
|
);
|
|
GO
|
|
|
|
DECLARE @CveTablaProductoServicio int;
|
|
|
|
SELECT @CveTablaProductoServicio = CveTabla
|
|
FROM dbo.Bit_Tablas
|
|
WHERE NombreTablaSQL = 'ProductosServicios'
|
|
COLLATE Modern_Spanish_CS_AS;
|
|
|
|
IF @CveTablaProductoServicio IS NOT NULL
|
|
BEGIN
|
|
DECLARE @CamposFiscalesProducto TABLE
|
|
(
|
|
NombreCampoSQL varchar(128) COLLATE Modern_Spanish_CS_AS NOT NULL,
|
|
NombreMostrar varchar(150) COLLATE Modern_Spanish_CS_AS NOT NULL
|
|
);
|
|
|
|
INSERT @CamposFiscalesProducto
|
|
(
|
|
NombreCampoSQL,
|
|
NombreMostrar
|
|
)
|
|
VALUES
|
|
('CveObjetoImpuesto', 'Objeto de impuesto'),
|
|
('IVA', 'Tratamiento de IVA');
|
|
|
|
UPDATE BC
|
|
SET NombreMostrar = C.NombreMostrar,
|
|
MostrarEnBitacora = 1,
|
|
TipoDatoSQL = TY.name COLLATE Modern_Spanish_CS_AS,
|
|
Activo = 1,
|
|
FechaMod = GETDATE()
|
|
FROM dbo.Bit_Campos AS BC
|
|
INNER JOIN @CamposFiscalesProducto AS C
|
|
ON C.NombreCampoSQL = BC.NombreCampoSQL
|
|
INNER JOIN sys.columns AS SC
|
|
ON SC.object_id = OBJECT_ID(N'dbo.ProductosServicios')
|
|
AND SC.name COLLATE Modern_Spanish_CS_AS = C.NombreCampoSQL
|
|
INNER JOIN sys.types AS TY
|
|
ON TY.user_type_id = SC.user_type_id
|
|
WHERE BC.CveTabla = @CveTablaProductoServicio;
|
|
|
|
INSERT dbo.Bit_Campos
|
|
(
|
|
CveTabla,
|
|
NombreCampoSQL,
|
|
NombreMostrar,
|
|
MostrarEnBitacora,
|
|
TipoDatoSQL,
|
|
Activo
|
|
)
|
|
SELECT
|
|
@CveTablaProductoServicio,
|
|
C.NombreCampoSQL,
|
|
C.NombreMostrar,
|
|
1,
|
|
TY.name COLLATE Modern_Spanish_CS_AS,
|
|
1
|
|
FROM @CamposFiscalesProducto AS C
|
|
INNER JOIN sys.columns AS SC
|
|
ON SC.object_id = OBJECT_ID(N'dbo.ProductosServicios')
|
|
AND SC.name COLLATE Modern_Spanish_CS_AS = C.NombreCampoSQL
|
|
INNER JOIN sys.types AS TY
|
|
ON TY.user_type_id = SC.user_type_id
|
|
WHERE NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Bit_Campos AS BC
|
|
WHERE BC.CveTabla = @CveTablaProductoServicio
|
|
AND BC.NombreCampoSQL = C.NombreCampoSQL
|
|
);
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioList
|
|
@Texto varchar(200) = NULL,
|
|
@IncluirInactivos bit = 0,
|
|
@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 @Texto = NULLIF(LTRIM(RTRIM(@Texto)), '');
|
|
|
|
SELECT
|
|
PS.CvePS,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
PS.CveTipoPS,
|
|
CASE PS.CveTipoPS
|
|
WHEN 2 THEN 'Producto'
|
|
ELSE 'Servicio'
|
|
END AS TipoPS,
|
|
PS.CveClasificacion,
|
|
C.Clasificacion,
|
|
PS.CveUnidadMedida,
|
|
UM.UnidadMedida,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
|
PS.CveObjetoImpuesto,
|
|
OI.ObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
CONVERT(decimal(9, 6), PS.IVA) AS IVA,
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 'Sin IVA'
|
|
WHEN PS.IVA = 0 THEN 'Sin IVA'
|
|
ELSE 'IVA general'
|
|
END AS TratamientoIVA,
|
|
PS.Estado AS EsActivo
|
|
FROM dbo.ProductosServicios AS PS
|
|
INNER JOIN dbo.Clasificaciones AS C
|
|
ON C.CveClasificacion = PS.CveClasificacion
|
|
INNER JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
|
WHERE (@IncluirInactivos = 1 OR PS.Estado = 1)
|
|
AND
|
|
(
|
|
@Texto IS NULL
|
|
OR PS.Codigo LIKE '%' + @Texto + '%'
|
|
OR PS.PS LIKE '%' + @Texto + '%'
|
|
OR C.Clasificacion LIKE '%' + @Texto + '%'
|
|
OR UM.UnidadMedida LIKE '%' + @Texto + '%'
|
|
)
|
|
ORDER BY PS.PS, PS.CvePS;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar los productos y servicios; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioGet
|
|
@CvePS 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
|
|
SELECT
|
|
PS.CvePS,
|
|
PS.Codigo,
|
|
PS.PS,
|
|
PS.CveTipoPS,
|
|
CASE PS.CveTipoPS
|
|
WHEN 2 THEN 'Producto'
|
|
ELSE 'Servicio'
|
|
END AS TipoPS,
|
|
PS.CveClasificacion,
|
|
C.Clasificacion,
|
|
PS.CveUnidadMedida,
|
|
UM.UnidadMedida,
|
|
CONVERT(decimal(18, 2), PS.Precio) AS Precio,
|
|
PS.CveObjetoImpuesto,
|
|
OI.ObjetoImpuesto,
|
|
OI.CodigoObjetoImpuesto,
|
|
CONVERT(decimal(9, 6), PS.IVA) AS IVA,
|
|
CASE
|
|
WHEN PS.CveObjetoImpuesto = 1 THEN 'Sin IVA'
|
|
WHEN PS.IVA = 0 THEN 'Sin IVA'
|
|
ELSE 'IVA general'
|
|
END AS TratamientoIVA,
|
|
PS.Estado AS EsActivo
|
|
FROM dbo.ProductosServicios AS PS
|
|
INNER JOIN dbo.Clasificaciones AS C
|
|
ON C.CveClasificacion = PS.CveClasificacion
|
|
INNER JOIN dbo.UnidadesMedida AS UM
|
|
ON UM.CveUnidadMedida = PS.CveUnidadMedida
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = PS.CveObjetoImpuesto
|
|
WHERE PS.CvePS = @CvePS;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar el producto o servicio; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioGet'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioOpcionesList
|
|
@CveClasificacionActual int = NULL,
|
|
@CveUnidadMedidaActual 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
|
|
SELECT
|
|
CveClasificacion,
|
|
CASE
|
|
WHEN NULLIF(LTRIM(RTRIM(Codigo)), '') IS NULL
|
|
THEN Clasificacion COLLATE Modern_Spanish_CS_AS
|
|
ELSE Codigo COLLATE Modern_Spanish_CS_AS
|
|
+ ' - '
|
|
+ Clasificacion COLLATE Modern_Spanish_CS_AS
|
|
END AS Clasificacion
|
|
FROM dbo.Clasificaciones
|
|
WHERE (Estado = 1 AND Afectable = 1)
|
|
OR CveClasificacion = @CveClasificacionActual
|
|
ORDER BY Clasificacion, Codigo, CveClasificacion;
|
|
|
|
SELECT
|
|
CveUnidadMedida,
|
|
CASE
|
|
WHEN NULLIF(LTRIM(RTRIM(Abreviatura)), '') IS NULL
|
|
THEN UnidadMedida COLLATE Modern_Spanish_CS_AS
|
|
ELSE UnidadMedida COLLATE Modern_Spanish_CS_AS
|
|
+ ' ('
|
|
+ Abreviatura COLLATE Modern_Spanish_CS_AS
|
|
+ ')'
|
|
END AS UnidadMedida
|
|
FROM dbo.UnidadesMedida
|
|
WHERE Estado = 1
|
|
OR CveUnidadMedida = @CveUnidadMedidaActual
|
|
ORDER BY UnidadMedida, CveUnidadMedida;
|
|
|
|
SELECT
|
|
CveObjetoImpuesto,
|
|
CodigoObjetoImpuesto COLLATE Modern_Spanish_CS_AS + ' - ' + ObjetoImpuesto AS ObjetoImpuesto
|
|
FROM dbo.Gral_SAT_ObjetoImpuesto
|
|
ORDER BY CodigoObjetoImpuesto;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al consultar las opciones del catálogo; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioOpcionesList'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Gral_ProductoServicioSave
|
|
@CvePS int = NULL,
|
|
@Codigo varchar(50) = NULL,
|
|
@PS varchar(846),
|
|
@CveTipoPS int,
|
|
@CveClasificacion int,
|
|
@CveUnidadMedida int,
|
|
@Precio decimal(18, 2),
|
|
@CveObjetoImpuesto tinyint,
|
|
@IVA decimal(9, 6) = 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
|
|
SELECT
|
|
@CvePS = NULLIF(@CvePS, 0),
|
|
@Codigo = NULLIF(LTRIM(RTRIM(@Codigo)), ''),
|
|
@PS = LTRIM(RTRIM(@PS));
|
|
|
|
IF NULLIF(@PS, '') IS NULL
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Capture la descripción del producto o servicio.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveTipoPS NOT IN (1, 2)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione si el registro es producto o servicio.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @Precio < 0
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El precio no puede ser negativo.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Gral_SAT_ObjetoImpuesto
|
|
WHERE CveObjetoImpuesto = @CveObjetoImpuesto
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione un objeto de impuesto válido.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @IVA NOT IN (-1, 0) AND @IVA IS NOT NULL
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione IVA general o sin IVA.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveObjetoImpuesto = 1
|
|
SET @IVA = 0;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Clasificaciones
|
|
WHERE CveClasificacion = @CveClasificacion
|
|
AND
|
|
(
|
|
Estado = 1
|
|
OR CveClasificacion =
|
|
(
|
|
SELECT CveClasificacion
|
|
FROM dbo.ProductosServicios
|
|
WHERE CvePS = @CvePS
|
|
)
|
|
)
|
|
)
|
|
OR NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.UnidadesMedida
|
|
WHERE CveUnidadMedida = @CveUnidadMedida
|
|
AND
|
|
(
|
|
Estado = 1
|
|
OR CveUnidadMedida =
|
|
(
|
|
SELECT CveUnidadMedida
|
|
FROM dbo.ProductosServicios
|
|
WHERE CvePS = @CvePS
|
|
)
|
|
)
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione una clasificación y una unidad de medida vigentes.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @Codigo IS NOT NULL
|
|
AND EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.ProductosServicios
|
|
WHERE Codigo = @Codigo
|
|
AND CvePS <> ISNULL(@CvePS, 0)
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El código ya está asignado a otro producto o servicio.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CvePS IS NULL
|
|
BEGIN
|
|
INSERT dbo.ProductosServicios
|
|
(
|
|
CveClasificacion,
|
|
CveUnidadMedida,
|
|
Codigo,
|
|
PS,
|
|
Precio,
|
|
Estado,
|
|
Fecha,
|
|
CveTipoPS,
|
|
CveObjetoImpuesto,
|
|
IVA,
|
|
CveUsuario,
|
|
CveUsuarioModifico,
|
|
FechaUltimaModificacion
|
|
)
|
|
VALUES
|
|
(
|
|
@CveClasificacion,
|
|
@CveUnidadMedida,
|
|
@Codigo,
|
|
@PS,
|
|
CONVERT(float, @Precio),
|
|
@EsActivo,
|
|
GETDATE(),
|
|
@CveTipoPS,
|
|
@CveObjetoImpuesto,
|
|
@IVA,
|
|
@CveUsuarioEjecuta,
|
|
@CveUsuarioEjecuta,
|
|
GETDATE()
|
|
);
|
|
|
|
SET @CvePS = CONVERT(int, SCOPE_IDENTITY());
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.ProductosServicios
|
|
WHERE CvePS = @CvePS
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El producto o servicio seleccionado no existe.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.ProductosServicios
|
|
SET CveClasificacion = @CveClasificacion,
|
|
CveUnidadMedida = @CveUnidadMedida,
|
|
Codigo = @Codigo,
|
|
PS = @PS,
|
|
Precio = CONVERT(float, @Precio),
|
|
Estado = @EsActivo,
|
|
CveTipoPS = @CveTipoPS,
|
|
CveObjetoImpuesto = @CveObjetoImpuesto,
|
|
IVA = @IVA,
|
|
CveUsuarioModifico = @CveUsuarioEjecuta,
|
|
FechaUltimaModificacion = GETDATE()
|
|
WHERE CvePS = @CvePS;
|
|
END;
|
|
|
|
SELECT @CvePS AS CvePS;
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al guardar el producto o servicio; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Gral_ProductoServicioSave'),
|
|
'; Línea: ', ERROR_LINE(),
|
|
'; Detalle: ', ERROR_MESSAGE());
|
|
|
|
RAISERROR(N'%s', 10, 1, @ErrorTecnico);
|
|
END CATCH;
|
|
END;
|
|
GO
|
|
|
|
CREATE OR ALTER PROCEDURE dbo.PA_Tra_PagoDetalleSave
|
|
@CveTramitePagoDetalle int = NULL,
|
|
@CveTramitePago int,
|
|
@CvePS int,
|
|
@CveUM int,
|
|
@Cantidad decimal(18, 4),
|
|
@Importe decimal(18, 2) = NULL,
|
|
@CveObjetoImpuesto tinyint,
|
|
@PorcentajeIVA decimal(9, 6),
|
|
@FechaInicioVigencia date = 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
|
|
@CveTipoTramite int,
|
|
@CveMoneda int,
|
|
@Descripcion varchar(300),
|
|
@PrecioProducto decimal(18, 2),
|
|
@CveCostoVigente int,
|
|
@CveCostoObjetivo int,
|
|
@FechaInicioVigente date,
|
|
@ImporteVigente decimal(18, 2),
|
|
@CveObjetoImpuestoVigente tinyint,
|
|
@PorcentajeIVAVigente decimal(9, 6);
|
|
|
|
SELECT
|
|
@CveTipoTramite = P.CveTipoTramite
|
|
FROM dbo.Tra_Pagos AS P
|
|
WHERE P.CveTramitePago = @CveTramitePago;
|
|
|
|
SELECT
|
|
@PrecioProducto = CONVERT(decimal(18, 2), PS.Precio),
|
|
@Descripcion = LEFT(PS.PS, 300)
|
|
FROM dbo.ProductosServicios AS PS
|
|
WHERE PS.CvePS = @CvePS
|
|
AND PS.Estado = 1;
|
|
|
|
SELECT TOP (1)
|
|
@CveMoneda = M.CveMoneda
|
|
FROM dbo.Gral_Monedas AS M
|
|
WHERE M.AbreviaturaSAT = 'MXN'
|
|
ORDER BY M.CveMoneda;
|
|
|
|
SET @Importe = ISNULL(@Importe, @PrecioProducto);
|
|
SET @FechaInicioVigencia =
|
|
ISNULL(@FechaInicioVigencia, CONVERT(date, GETDATE()));
|
|
|
|
IF @CveTipoTramite IS NULL
|
|
OR @PrecioProducto IS NULL
|
|
OR @CveMoneda IS NULL
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El pago, producto o moneda seleccionados no están disponibles.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.UnidadesMedida
|
|
WHERE CveUnidadMedida = @CveUM
|
|
AND Estado = 1
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione una unidad de medida vigente.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Gral_SAT_ObjetoImpuesto
|
|
WHERE CveObjetoImpuesto = @CveObjetoImpuesto
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Seleccione un objeto de impuesto válido.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @Cantidad <= 0
|
|
OR @Importe < 0
|
|
OR @PorcentajeIVA < 0
|
|
OR @PorcentajeIVA > 1
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Capture cantidad, importe y porcentaje de IVA válidos.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF @CveObjetoImpuesto = 1
|
|
SET @PorcentajeIVA = 0;
|
|
|
|
SET @CveTramitePagoDetalle = NULLIF(@CveTramitePagoDetalle, 0);
|
|
|
|
IF @CveTramitePagoDetalle IS NULL
|
|
BEGIN
|
|
INSERT dbo.Tra_PagosDetalle
|
|
(
|
|
CveTramitePago,
|
|
CvePS,
|
|
CveUM,
|
|
Cantidad,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveTramitePago,
|
|
@CvePS,
|
|
@CveUM,
|
|
@Cantidad,
|
|
GETDATE(),
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
SET @CveTramitePagoDetalle = CONVERT(int, SCOPE_IDENTITY());
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_PagosDetalle
|
|
WHERE CveTramitePagoDetalle = @CveTramitePagoDetalle
|
|
AND CveTramitePago = @CveTramitePago
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El concepto de pago seleccionado no existe.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
UPDATE dbo.Tra_PagosDetalle
|
|
SET CvePS = @CvePS,
|
|
CveUM = @CveUM,
|
|
Cantidad = @Cantidad,
|
|
FechaModificacion = GETDATE(),
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveTramitePagoDetalle = @CveTramitePagoDetalle;
|
|
END;
|
|
|
|
SELECT TOP (1)
|
|
@CveCostoVigente = CT.CveCostoTramite,
|
|
@FechaInicioVigente = CT.FechaInicioVigencia,
|
|
@ImporteVigente = CT.Importe,
|
|
@CveObjetoImpuestoVigente = CT.CveObjetoImpuesto,
|
|
@PorcentajeIVAVigente = IVA.TasaOCuota
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
OUTER APPLY
|
|
(
|
|
SELECT TOP (1) CTI.TasaOCuota
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = CT.CveCostoTramite
|
|
AND CTI.EsRetencion = 0
|
|
AND CTI.Impuesto = '002'
|
|
AND CTI.TipoFactor = 'Tasa'
|
|
) AS IVA
|
|
WHERE CT.CveTipoTramite = @CveTipoTramite
|
|
AND CT.CvePS = @CvePS
|
|
AND CT.EsActivo = 1
|
|
AND CT.FechaFinVigencia IS NULL
|
|
ORDER BY
|
|
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
|
|
CT.CveCostoTramite DESC;
|
|
|
|
IF @CveCostoVigente IS NULL
|
|
BEGIN
|
|
INSERT dbo.Tra_CostosTramite
|
|
(
|
|
CveTipoTramite,
|
|
CvePS,
|
|
CveMoneda,
|
|
Descripcion,
|
|
Importe,
|
|
CveObjetoImpuesto,
|
|
FechaInicioVigencia,
|
|
FechaFinVigencia,
|
|
EsActivo,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveTipoTramite,
|
|
@CvePS,
|
|
@CveMoneda,
|
|
@Descripcion,
|
|
@Importe,
|
|
@CveObjetoImpuesto,
|
|
@FechaInicioVigencia,
|
|
NULL,
|
|
1,
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
SET @CveCostoObjetivo = CONVERT(int, SCOPE_IDENTITY());
|
|
END
|
|
ELSE IF @FechaInicioVigente IS NOT NULL
|
|
AND @FechaInicioVigencia < @FechaInicioVigente
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'La nueva vigencia no puede iniciar antes de la vigencia actual.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END
|
|
ELSE IF @FechaInicioVigente = @FechaInicioVigencia
|
|
BEGIN
|
|
UPDATE dbo.Tra_CostosTramite
|
|
SET CveMoneda = @CveMoneda,
|
|
Descripcion = @Descripcion,
|
|
Importe = @Importe,
|
|
CveObjetoImpuesto = @CveObjetoImpuesto,
|
|
FechaInicioVigencia = @FechaInicioVigencia,
|
|
FechaModificacion = GETDATE(),
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveCostoTramite = @CveCostoVigente;
|
|
|
|
SET @CveCostoObjetivo = @CveCostoVigente;
|
|
END
|
|
ELSE IF @ImporteVigente <> @Importe
|
|
OR @CveObjetoImpuestoVigente <> @CveObjetoImpuesto
|
|
OR ISNULL(@PorcentajeIVAVigente, 0) <> @PorcentajeIVA
|
|
BEGIN
|
|
UPDATE dbo.Tra_CostosTramite
|
|
SET FechaFinVigencia = DATEADD(day, -1, @FechaInicioVigencia),
|
|
FechaModificacion = GETDATE(),
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveCostoTramite = @CveCostoVigente;
|
|
|
|
INSERT dbo.Tra_CostosTramite
|
|
(
|
|
CveTipoTramite,
|
|
CvePS,
|
|
CveMoneda,
|
|
Descripcion,
|
|
Importe,
|
|
CveObjetoImpuesto,
|
|
FechaInicioVigencia,
|
|
FechaFinVigencia,
|
|
EsActivo,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveTipoTramite,
|
|
@CvePS,
|
|
@CveMoneda,
|
|
@Descripcion,
|
|
@Importe,
|
|
@CveObjetoImpuesto,
|
|
@FechaInicioVigencia,
|
|
NULL,
|
|
1,
|
|
@CveUsuarioEjecuta
|
|
);
|
|
|
|
SET @CveCostoObjetivo = CONVERT(int, SCOPE_IDENTITY());
|
|
|
|
INSERT dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramite,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
@CveCostoObjetivo,
|
|
CTI.EsRetencion,
|
|
CTI.Impuesto,
|
|
CTI.TipoFactor,
|
|
CTI.TasaOCuota,
|
|
GETDATE(),
|
|
@CveUsuarioEjecuta
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = @CveCostoVigente
|
|
AND NOT
|
|
(
|
|
CTI.EsRetencion = 0
|
|
AND CTI.Impuesto = '002'
|
|
);
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
SET @CveCostoObjetivo = @CveCostoVigente;
|
|
END;
|
|
|
|
DELETE dbo.Tra_CostosTramiteImpuestos
|
|
WHERE CveCostoTramite = @CveCostoObjetivo
|
|
AND EsRetencion = 0
|
|
AND Impuesto = '002';
|
|
|
|
IF @CveObjetoImpuesto <> 1 AND @PorcentajeIVA > 0
|
|
BEGIN
|
|
INSERT dbo.Tra_CostosTramiteImpuestos
|
|
(
|
|
CveCostoTramite,
|
|
EsRetencion,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveCostoObjetivo,
|
|
0,
|
|
'002',
|
|
'Tasa',
|
|
@PorcentajeIVA,
|
|
GETDATE(),
|
|
@CveUsuarioEjecuta
|
|
);
|
|
END;
|
|
|
|
SELECT @CveTramitePagoDetalle AS CveTramitePagoDetalle;
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al guardar el concepto del pago; favor de contactar a Sistemas.',
|
|
@ErrorTipo = 1,
|
|
@Return = 0;
|
|
|
|
DECLARE @ErrorTecnico nvarchar(2048) = CONCAT(
|
|
'Número: ', ERROR_NUMBER(),
|
|
'; Procedimiento: ', COALESCE(ERROR_PROCEDURE(), 'PA_Tra_PagoDetalleSave'),
|
|
'; 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),
|
|
@Descuento decimal(18, 2),
|
|
@IVA decimal(18, 2),
|
|
@IEPS decimal(18, 2),
|
|
@RetIVA decimal(18, 2),
|
|
@RetISR decimal(18, 2),
|
|
@Traslados decimal(18, 2),
|
|
@Retenciones decimal(18, 2),
|
|
@Total decimal(18, 2);
|
|
|
|
SELECT
|
|
@SubTotal = ISNULL(SUM(VD.Importe), 0),
|
|
@Descuento = ISNULL(SUM(VD.Descuento), 0)
|
|
FROM dbo.VentasDetalle AS VD
|
|
WHERE VD.CveVenta = @CveVenta;
|
|
|
|
SELECT
|
|
@IVA = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 0 AND VDI.Impuesto = '002'
|
|
THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0),
|
|
@IEPS = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 0 AND VDI.Impuesto = '003'
|
|
THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0),
|
|
@RetIVA = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 1 AND VDI.Impuesto = '002'
|
|
THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0),
|
|
@RetISR = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 1 AND VDI.Impuesto = '001'
|
|
THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0),
|
|
@Traslados = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 0 THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0),
|
|
@Retenciones = ISNULL(SUM(
|
|
CASE
|
|
WHEN VDI.EsRetencion = 1 THEN VDI.Importe
|
|
ELSE 0
|
|
END), 0)
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.VentasDetalleImpuestos AS VDI
|
|
ON VDI.CveVentaDetalle = VD.CveVentaDetalle
|
|
WHERE VD.CveVenta = @CveVenta;
|
|
|
|
SET @Total = ROUND(
|
|
@SubTotal
|
|
- @Descuento
|
|
+ @Traslados
|
|
- @Retenciones,
|
|
2);
|
|
|
|
UPDATE dbo.Ventas
|
|
SET SubTotal = @SubTotal,
|
|
Descuento = @Descuento,
|
|
IVA = @IVA,
|
|
IEPS = @IEPS,
|
|
RetIVA = @RetIVA,
|
|
RetISR = @RetISR,
|
|
Total = @Total,
|
|
CveUsuarioModifico = @CveUsuarioEjecuta
|
|
WHERE CveVenta = @CveVenta;
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'La venta seleccionada no existe.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
SET @Return = 1;
|
|
END TRY
|
|
BEGIN CATCH
|
|
SELECT
|
|
@ErrorMostrar = 'Ocurrió un error al recalcular 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_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
|
|
@CveVendedor int = 1,
|
|
@CveCliente int,
|
|
@CveTipoTramite int,
|
|
@CveSubProyecto int,
|
|
@CveEstatusFactura int,
|
|
@CveVenta int,
|
|
@Folio int,
|
|
@Fecha datetime = GETDATE();
|
|
|
|
SELECT
|
|
@CveCliente = F.CveCliente,
|
|
@CveTipoTramite = S.CveTipoTramite
|
|
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 NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Vta_Vendedores
|
|
WHERE CveVendedor = @CveVendedor
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'No se encuentra configurado el vendedor predeterminado 1.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_PagosDetalle
|
|
WHERE CveTramitePago = @CveTramitePago
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El pago seleccionado no tiene conceptos para vender.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_PagosDetalle AS D
|
|
WHERE D.CveTramitePago = @CveTramitePago
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = @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_PagosDetalle AS D
|
|
CROSS APPLY
|
|
(
|
|
SELECT TOP (1)
|
|
CT.CveCostoTramite,
|
|
CT.CveObjetoImpuesto
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = @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)
|
|
)
|
|
ORDER BY
|
|
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
|
|
CT.CveCostoTramite DESC
|
|
) AS Costo
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = Costo.CveObjetoImpuesto
|
|
WHERE D.CveTramitePago = @CveTramitePago
|
|
AND OI.CodigoObjetoImpuesto = '02'
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = Costo.CveCostoTramite
|
|
)
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Uno o más costos son objeto de impuesto y no tienen impuestos configurados.',
|
|
@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
|
|
@Folio = ISNULL(MAX(Folio), 0) + 1
|
|
FROM dbo.Ventas WITH (UPDLOCK, HOLDLOCK)
|
|
WHERE CveSubProyecto = @CveSubProyecto
|
|
AND TipoDocto = 'Rem'
|
|
AND Serie = 'TRA';
|
|
|
|
INSERT dbo.Ventas
|
|
(
|
|
TipoDocto,
|
|
Serie,
|
|
Folio,
|
|
Fecha,
|
|
CveCliente,
|
|
CveVendedor,
|
|
CveMetodoPago,
|
|
CondicionesPago,
|
|
FormaPago,
|
|
SubTotal,
|
|
Descuento,
|
|
IVA,
|
|
IEPS,
|
|
RetIVA,
|
|
RetISR,
|
|
Total,
|
|
Observaciones,
|
|
CveEstatusFactura,
|
|
FechaEjecucion,
|
|
CveSubProyecto,
|
|
CveUsuario,
|
|
CveFormaPago33,
|
|
CveMetodoPago33,
|
|
FechaIng,
|
|
FechaVencimiento2,
|
|
Ref,
|
|
DescripcionVenta,
|
|
FechaParaSurtir
|
|
)
|
|
VALUES
|
|
(
|
|
'Rem',
|
|
'TRA',
|
|
@Folio,
|
|
@Fecha,
|
|
@CveCliente,
|
|
@CveVendedor,
|
|
2,
|
|
0,
|
|
99,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
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 dbo.VentasDetalle
|
|
(
|
|
CveVenta,
|
|
CvePS,
|
|
CveSolicitud,
|
|
CveCostoTramite,
|
|
Cantidad,
|
|
PrecioUnitario,
|
|
Descuento,
|
|
IVA,
|
|
Importe,
|
|
CveObjetoImpuesto,
|
|
EsFondoInicial,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
@CveVenta,
|
|
D.CvePS,
|
|
@CveSolicitud,
|
|
Costo.CveCostoTramite,
|
|
D.Cantidad,
|
|
CONVERT(decimal(18, 2), Costo.Importe),
|
|
CONVERT(decimal(18, 2), 0),
|
|
CONVERT(decimal(18, 2), 0),
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
ROUND(D.Cantidad * Costo.Importe, 2)),
|
|
Costo.CveObjetoImpuesto,
|
|
0,
|
|
@Fecha,
|
|
@CveUsuarioEjecuta
|
|
FROM dbo.Tra_PagosDetalle AS D
|
|
CROSS APPLY
|
|
(
|
|
SELECT TOP (1)
|
|
CT.CveCostoTramite,
|
|
CT.Importe,
|
|
CT.CveObjetoImpuesto
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = @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)
|
|
)
|
|
ORDER BY
|
|
ISNULL(CT.FechaInicioVigencia, CONVERT(date, '19000101')) DESC,
|
|
CT.CveCostoTramite DESC
|
|
) AS Costo
|
|
WHERE D.CveTramitePago = @CveTramitePago;
|
|
|
|
INSERT dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalle,
|
|
EsRetencion,
|
|
Base,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
Importe,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
VD.CveVentaDetalle,
|
|
CTI.EsRetencion,
|
|
CONVERT(decimal(19, 6), VD.Importe - VD.Descuento),
|
|
CTI.Impuesto,
|
|
CTI.TipoFactor,
|
|
CTI.TasaOCuota,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
CASE
|
|
WHEN CTI.TipoFactor = 'Exento' THEN 0
|
|
WHEN CTI.TipoFactor = 'Cuota'
|
|
THEN ROUND(VD.Cantidad * CTI.TasaOCuota, 2)
|
|
ELSE ROUND(
|
|
(VD.Importe - VD.Descuento) * CTI.TasaOCuota,
|
|
2)
|
|
END),
|
|
@Fecha,
|
|
@CveUsuarioEjecuta
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
ON CTI.CveCostoTramite = VD.CveCostoTramite
|
|
WHERE VD.CveVenta = @CveVenta;
|
|
|
|
UPDATE VD
|
|
SET IVA = ISNULL(ImpuestoIVA.Importe, 0)
|
|
FROM dbo.VentasDetalle AS VD
|
|
OUTER APPLY
|
|
(
|
|
SELECT SUM(VDI.Importe) AS Importe
|
|
FROM dbo.VentasDetalleImpuestos AS VDI
|
|
WHERE VDI.CveVentaDetalle = VD.CveVentaDetalle
|
|
AND VDI.EsRetencion = 0
|
|
AND VDI.Impuesto = '002'
|
|
) AS ImpuestoIVA
|
|
WHERE VD.CveVenta = @CveVenta;
|
|
|
|
EXEC dbo.PA_Vta_TramiteVentaTotalesUpdate
|
|
@CveVenta = @CveVenta,
|
|
@CveUsuarioEjecuta = @CveUsuarioEjecuta,
|
|
@ErrorMostrar = @ErrorMostrar OUTPUT,
|
|
@ErrorTipo = @ErrorTipo OUTPUT,
|
|
@Return = @Return OUTPUT;
|
|
|
|
IF @Return = 0
|
|
RETURN;
|
|
|
|
INSERT 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
|
|
|
|
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
|
|
WHERE CveVenta = @CveVenta
|
|
AND 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.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 dbo.VentasDetalleImpuestos
|
|
WHERE CveVentaDetalle = @CveVentaDetalle;
|
|
|
|
DELETE dbo.VentasDetalle
|
|
WHERE CveVentaDetalle = @CveVentaDetalle
|
|
AND CveVenta = @CveVenta;
|
|
|
|
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_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,
|
|
@CveTipoTramite int,
|
|
@CveCostoTramite int,
|
|
@CveObjetoImpuesto tinyint,
|
|
@Descuento decimal(18, 2) = 0,
|
|
@IVA decimal(18, 2),
|
|
@Importe decimal(18, 2),
|
|
@Fecha datetime = GETDATE();
|
|
|
|
SELECT
|
|
@CveVenta = V.CveVenta,
|
|
@CveTipoTramite = S.CveTipoTramite
|
|
FROM dbo.Tra_SolicitudesPagos AS SP
|
|
INNER JOIN dbo.Ventas AS V
|
|
ON V.CveVenta = SP.CveVenta
|
|
INNER JOIN dbo.Tra_Solicitudes AS S
|
|
ON S.CveSolicitud = SP.CveSolicitud
|
|
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 = '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;
|
|
|
|
SELECT TOP (1)
|
|
@CveCostoTramite = CT.CveCostoTramite,
|
|
@CveObjetoImpuesto = CT.CveObjetoImpuesto
|
|
FROM dbo.Tra_CostosTramite AS CT
|
|
WHERE CT.CveTipoTramite = @CveTipoTramite
|
|
AND CT.CvePS = @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;
|
|
|
|
IF @CveCostoTramite IS NULL
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El producto seleccionado no tiene un costo vigente para este trámite.',
|
|
@ErrorTipo = 2;
|
|
RETURN;
|
|
END;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Gral_SAT_ObjetoImpuesto
|
|
WHERE CveObjetoImpuesto = @CveObjetoImpuesto
|
|
AND CodigoObjetoImpuesto = '02'
|
|
)
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.Tra_CostosTramiteImpuestos
|
|
WHERE CveCostoTramite = @CveCostoTramite
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'El costo es objeto de impuesto y no tiene impuestos configurados.',
|
|
@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;
|
|
|
|
IF @CveVentaDetalle IS NULL
|
|
BEGIN
|
|
INSERT dbo.VentasDetalle
|
|
(
|
|
CveVenta,
|
|
CvePS,
|
|
CveSolicitud,
|
|
CveCostoTramite,
|
|
Cantidad,
|
|
PrecioUnitario,
|
|
Descuento,
|
|
IVA,
|
|
Importe,
|
|
CveObjetoImpuesto,
|
|
EsFondoInicial,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
VALUES
|
|
(
|
|
@CveVenta,
|
|
@CvePS,
|
|
@CveSolicitud,
|
|
@CveCostoTramite,
|
|
@Cantidad,
|
|
@PrecioUnitario,
|
|
0,
|
|
0,
|
|
@Importe,
|
|
@CveObjetoImpuesto,
|
|
0,
|
|
@Fecha,
|
|
@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;
|
|
|
|
DELETE dbo.VentasDetalleImpuestos
|
|
WHERE CveVentaDetalle = @CveVentaDetalle;
|
|
|
|
UPDATE dbo.VentasDetalle
|
|
SET CvePS = @CvePS,
|
|
CveCostoTramite = @CveCostoTramite,
|
|
Cantidad = @Cantidad,
|
|
PrecioUnitario = @PrecioUnitario,
|
|
IVA = 0,
|
|
Importe = @Importe,
|
|
CveObjetoImpuesto = @CveObjetoImpuesto,
|
|
CveUsuario = @CveUsuarioEjecuta
|
|
WHERE CveVentaDetalle = @CveVentaDetalle;
|
|
END;
|
|
|
|
INSERT dbo.VentasDetalleImpuestos
|
|
(
|
|
CveVentaDetalle,
|
|
EsRetencion,
|
|
Base,
|
|
Impuesto,
|
|
TipoFactor,
|
|
TasaOCuota,
|
|
Importe,
|
|
FechaAlta,
|
|
CveUsuario
|
|
)
|
|
SELECT
|
|
@CveVentaDetalle,
|
|
CTI.EsRetencion,
|
|
CONVERT(decimal(19, 6), @Importe - @Descuento),
|
|
CTI.Impuesto,
|
|
CTI.TipoFactor,
|
|
CTI.TasaOCuota,
|
|
CONVERT(
|
|
decimal(18, 2),
|
|
CASE
|
|
WHEN CTI.TipoFactor = 'Exento' THEN 0
|
|
WHEN CTI.TipoFactor = 'Cuota'
|
|
THEN ROUND(@Cantidad * CTI.TasaOCuota, 2)
|
|
ELSE ROUND(
|
|
(@Importe - @Descuento) * CTI.TasaOCuota,
|
|
2)
|
|
END),
|
|
@Fecha,
|
|
@CveUsuarioEjecuta
|
|
FROM dbo.Tra_CostosTramiteImpuestos AS CTI
|
|
WHERE CTI.CveCostoTramite = @CveCostoTramite;
|
|
|
|
SELECT
|
|
@IVA = ISNULL(SUM(VDI.Importe), 0)
|
|
FROM dbo.VentasDetalleImpuestos AS VDI
|
|
WHERE VDI.CveVentaDetalle = @CveVentaDetalle
|
|
AND VDI.EsRetencion = 0
|
|
AND VDI.Impuesto = '002';
|
|
|
|
UPDATE dbo.VentasDetalle
|
|
SET IVA = @IVA
|
|
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;
|
|
|
|
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
|
|
|
|
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 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 = '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;
|
|
|
|
IF EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.VentasDetalle AS VD
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = VD.CveObjetoImpuesto
|
|
WHERE VD.CveVenta = @CveVenta
|
|
AND OI.CodigoObjetoImpuesto = '02'
|
|
AND NOT EXISTS
|
|
(
|
|
SELECT 1
|
|
FROM dbo.VentasDetalleImpuestos AS VDI
|
|
WHERE VDI.CveVentaDetalle = VD.CveVentaDetalle
|
|
)
|
|
)
|
|
BEGIN
|
|
SELECT
|
|
@ErrorMostrar = 'Uno o más conceptos son objeto de impuesto y no tienen impuestos registrados.',
|
|
@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
|
|
VD.CveVentaDetalle,
|
|
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
|
|
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
|
|
INNER JOIN dbo.Gral_SAT_ObjetoImpuesto AS OI
|
|
ON OI.CveObjetoImpuesto = VD.CveObjetoImpuesto
|
|
WHERE VD.CveVenta = @CveVenta
|
|
ORDER BY VD.CveVentaDetalle;
|
|
|
|
SELECT
|
|
VDI.CveVentaDetalle,
|
|
VDI.EsRetencion,
|
|
VDI.Base,
|
|
VDI.Impuesto,
|
|
VDI.TipoFactor,
|
|
VDI.TasaOCuota,
|
|
VDI.Importe
|
|
FROM dbo.VentasDetalleImpuestos AS VDI
|
|
INNER JOIN dbo.VentasDetalle AS VD
|
|
ON VD.CveVentaDetalle = VDI.CveVentaDetalle
|
|
WHERE VD.CveVenta = @CveVenta
|
|
ORDER BY
|
|
VDI.CveVentaDetalle,
|
|
VDI.EsRetencion,
|
|
VDI.Impuesto,
|
|
VDI.CveVentaDetalleImpuesto;
|
|
|
|
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
|