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




Duración 1 hora

Comentarios

Entradas más populares de este blog

CargaXML

Crear TH