USE FacturacionTelefonicaDB
GO
CREATE PROCEDURE SP_FACTURACION
(@FECHA DATE)
AS
BEGIN
BEGIN TRY
DECLARE @FAC_CUENTAS TABLE(ID INT, ID_CONTRATO INT, MINUTOSNORMALES INT, REDUCIDOS INT, INTERNET INT,
MSN_LOCALES INT, CANT_RECONEXION INT)
DECLARE @FAC_CONTRATO TABLE(ID INT, ID_CUENTA INT, NOMBRE VARCHAR(50), TARIFA MONEY, PRECIO_MIN_NORM MONEY, PRECIO_MIN_REDU MONEY,
MAX_MIN_NORM INT, MAX_MIN_REDU INT, PRECIO_MIN_INTER MONEY, MAX_MIN_INTER INT, PRECIO_MENSAJE MONEY,
CANT_MAX_MENS INT)
DECLARE @FAC_TEMP TABLE(ID_CUENTA INT, FECHA DATE, DESCRIPCION VARCHAR(50), CARGOS_FIJOS MONEY, TARIFA MONEY, EX_MIN_NOR INT,
EX_MIN_REDU INT, EX_MIN_INTER INT, EX_MEN INT, LLAMADAS INT, ESP_MEN INT, RECONEX MONEY, MOROSIDAD MONEY,
MONTO MONEY, ESTADO BIT)
INSERT INTO @FAC_CUENTAS
SELECT M.ID, M.FK_Contrato, M.CantMinutosNormales, M.CantMinutosReducidos, M.CantMinutosInternet, M.CantMensajesLocales, M.CantReconexion
FROM FT_Cuenta AS M
WHERE (M.DiaCorte = @FECHA)
INSERT INTO @FAC_CONTRATO
SELECT M.ID, C.ID, M.Nombre, M.TarifaMinima, M.PrecioMinNormal, M.PrecioMinReducido, M.CantMaxMinNormales, M.CantMaxMinReducidos,
M.PrecioMinInternet, M.CantMaxMinInternet, M.PrecioMensajeLocal, M.CantMaxMensajeLocal
FROM FT_Contrato AS M
INNER JOIN @FAC_CUENTAS AS C ON C.ID_CONTRATO = M.ID
INSERT INTO @FAC_TEMP
SELECT M.ID, @FECHA, 'Facturación de servicio telefónico', 858, C.TARIFA, M.MINUTOSNORMALES, M.REDUCIDOS, M.INTERNET,
M.MSN_LOCALES, 1000, 0, M.CANT_RECONEXION, 0, 0, 0
FROM @FAC_CUENTAS AS M
INNER JOIN @FAC_CONTRATO AS C ON M.ID_CONTRATO = C.ID
BEGIN TRANSACTION
UPDATE @FAC_TEMP
SET EX_MIN_NOR = (EX_MIN_NOR - C.MAX_MIN_NORM) * C.PRECIO_MIN_NORM
FROM @FAC_CONTRATO AS C
UPDATE @FAC_TEMP
SET EX_MIN_REDU = (EX_MIN_REDU - C.MAX_MIN_REDU) * C.PRECIO_MIN_REDU
FROM @FAC_CONTRATO AS C
UPDATE @FAC_TEMP
SET EX_MIN_INTER = (EX_MIN_INTER - C.MAX_MIN_INTER) * C.PRECIO_MIN_INTER
FROM @FAC_CONTRATO AS C
UPDATE @FAC_TEMP
SET EX_MEN = (EX_MEN - C.CANT_MAX_MENS) * C.PRECIO_MENSAJE
FROM @FAC_CONTRATO AS C
UPDATE @FAC_TEMP
SET MONTO = MONTO + EX_MEN + EX_MIN_INTER + EX_MIN_NOR + EX_MIN_REDU + RECONEX + MOROSIDAD
INSERT INTO FT_Factura
SELECT T.ID_CUENTA, T.FECHA, T.DESCRIPCION, T.CARGOS_FIJOS, T.TARIFA, T.EX_MIN_NOR,
T.EX_MIN_REDU, T.EX_MIN_INTER, T.EX_MEN, T.LLAMADAS, T.ESP_MEN, T.RECONEX, T.MOROSIDAD,
T.MONTO, T.ESTADO
FROM @FAC_TEMP AS T
COMMIT TRANSACTION
RETURN 1;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
RETURN @@ERROR*-1;
END CATCH;
END
GO
No hay comentarios:
Publicar un comentario