Cierres de cuenta
Se hizo el script para el cierre de estados de cuenta implementando los movimientos por cargos y multas correspondientes.
USE [tarjetaCredito]
GO
CREATE PROCEDURE [dbo].[ProcesoCierreEstadoCuenta]
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
DECLARE @FechaCierre DATE = GETDATE();
DECLARE @LimiteOperacionesATM INT;
DECLARE @LimiteOperacionesVentanilla INT;
DECLARE @outResult INT;
-- Obtener los valores de los límites
SELECT @LimiteOperacionesATM = monto
FROM [dbo].[Reglas]
WHERE nombre = 'LimiteOperacionesATM';
SELECT @LimiteOperacionesVentanilla = monto
FROM [dbo].[Reglas]
WHERE nombre = 'LimiteOperacionesVentanilla';
BEGIN TRANSACTION cierre;
-- Cargos por servicio mensual para TCM
UPDATE TCM
SET saldoActual = saldoActual - r.monto
FROM [dbo].[TCM] t
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Cargos por servicio mensual para TCM';
INSERT INTO Movimiento (numTF
, fechaOperacion
, monto
, descripcion
, idTF
, idTCM)
SELECT
t.id AS numTF
, @FechaCierre AS fechaOperacion
, r.monto AS monto
, 'Cargo por Servicio Mensual TCM' AS descripcion
, t.idTipo AS idTF
, t.id AS idTCM
FROM [dbo].[TCM] t
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Cargos por servicio mensual para TCM';
-- Cargo mensual por Seguro Contra Fraudes
UPDATE TCM
SET saldoActual = saldoActual - r.monto
FROM [dbo].[TCM] t
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Cargo Mensual por Seguro Contra Fraudes';
INSERT INTO Movimiento (numTF
, fechaOperacion
, monto
, descripcion
, idTF
, idTCM)
SELECT
t.id AS numTF
, @FechaCierre AS fechaOperacion
, r.monto AS monto
, 'Cargo Mensual por Seguro Contra Fraudes' AS descripcion
, t.idTipo AS idTF
, t.id AS idTCM
FROM [dbo].[TCM] t
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Cargo Mensual por Seguro Contra Fraudes';
-- Multas por exceso de operaciones en ATM
UPDATE TCM
SET saldoActual = t.saldoActual -
(r.monto * (e.qOperacionesAtm - @LimiteOperacionesATM))
FROM [dbo].[TCM] t
JOIN [dbo].[EC] e ON t.idEC = e.id
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Multa por exceso de operaciones en ATM'
AND e.qOperacionesAtm > @LimiteOperacionesATM;
INSERT INTO Movimiento (numTF
, fechaOperacion
, monto
, descripcion
, idTF
, idTCM)
SELECT
t.id AS numTF
, @FechaCierre AS fechaOperacion
, r.monto *
(e.qOperacionesAtm - @LimiteOperacionesATM) AS monto
, 'Multa por Exceso de Operaciones en ATM' AS descripcion
, t.idTipo AS idTF
, t.id AS idTCM
FROM [dbo].[TCM] t
JOIN [dbo].[EC] e ON t.idEC = e.id
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Multa por exceso de operaciones en ATM'
AND e.qOperacionesAtm > @LimiteOperacionesATM;
-- Multas por exceso de operaciones en ventanilla
UPDATE TCM
SET saldoActual = t.saldoActual -
(r.monto * (e.qOperacionesVentanilla - @LimiteOperacionesVentanilla))
FROM [dbo].[TCM] t
JOIN [dbo].[EC] e ON t.idEC = e.id
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Multa por exceso de operaciones en Ventanilla'
AND e.qOperacionesVentanilla > @LimiteOperacionesVentanilla;
INSERT INTO Movimiento (numTF
, fechaOperacion
, monto
, descripcion
, idTF
, idTCM)
SELECT
t.id AS numTF
, @FechaCierre AS fechaOperacion
, r.monto *
(e.qOperacionesVentanilla - @LimiteOperacionesVentanilla) AS monto
, 'Multa por Exceso de Operaciones en Ventanilla' AS descripcion
, t.idTipo AS idTF
, t.id AS idTCM
FROM [dbo].[TCM] t
JOIN [dbo].[EC] e ON t.idEC = e.id
JOIN [dbo].[Reglas] r ON r.idTipo = t.idTipo
WHERE r.nombre = 'Multa por exceso de operaciones en Ventanilla'
AND e.qOperacionesVentanilla > @LimiteOperacionesVentanilla;
COMMIT TRANSACTION cierre;
END TRY
BEGIN CATCH
-- Revertir transacción en caso de error
ROLLBACK TRANSACTION cierre;
-- Registrar el error
INSERT INTO [dbo].[DBError] VALUES (
SUSER_SNAME(),
ERROR_NUMBER(),
ERROR_STATE(),
ERROR_SEVERITY(),
ERROR_LINE(),
ERROR_PROCEDURE(),
ERROR_MESSAGE(),
GETDATE()
);
SET @outResult = 50005; -- Error en la base de datos
END CATCH;
END;
GO
Comentarios
Publicar un comentario