Proceso masivo perdida/robo de una TF

Se dedicó una hora creando el sp masivo para reportar la perdida o robo de una tf


USE [tarjetaCredito]

GO

/****** Object:  StoredProcedure [dbo].[ReportarPerdidaRoboTF]    Script Date: 11/12/2024 10:53:29 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[ReportarPerdidaRoboTF]

    @inIdTF INT           -- ID de la TF a reportar como perdida/robada

    , @outResult INT

AS

BEGIN

    SET NOCOUNT ON;


    BEGIN TRY

        DECLARE 

            @IdUltimaTF INT

            , @idTCM INT

            , @FechaProceso DATE = GETDATE()

, @referencia VARCHAR(8);


SET @referencia = SUBSTRING(REPLACE(NEWID()

, '-'

, '')

, 1

, 5);

SET @outResult = 0;



        -- verificar que la TF existe y está activa

        IF NOT EXISTS (SELECT 1 FROM [dbo].[TF] WHERE id = @inIdTF AND esActiva = 1)

        BEGIN

            SET @outResult = 1; 

            RETURN;

        END;


        -- obtener el idTCM asociado a la TF

        SELECT @idTCM = id FROM [dbo].[TCM] WHERE idTF = @inIdTF;



        BEGIN TRANSACTION tPerdidaRobo;


        -- invalida la TF

        UPDATE [dbo].[TF]

        SET esActiva = 0

        WHERE id = @inIdTF;


        -- inserta una nueva TF como reemplazo de la antigua

        INSERT INTO [dbo].[TF] (numTarjeta

, fechaVencimiento

, cvv

, pin

, esActiva)

        SELECT numTarjeta

, fechaVencimiento

, cvv

, pin

, 1

        FROM [dbo].[TF]

        WHERE id = @inIdTF;


        -- Obtener el último idTF insertado

        SET @IdUltimaTF = SCOPE_IDENTITY();


        -- actualizar el idTF en la tabla TCM

        UPDATE [dbo].[TCM]

        SET idTF = @IdUltimaTF

        WHERE id = @idTCM;


        -- inserta un movimiento por la pérdida/robo

        INSERT INTO [dbo].[Movimiento] (numTF

, fechaOperacion

, fechaMovimiento

, descripcion

, referencia

, monto

, nuevoSaldo

, esSospechoso

, idTF

, idTCM)

        VALUES (

            @inIdTF,                   

            @FechaProceso,            

            @FechaProceso,             

            'Pérdida o robo de tarjeta', 

            @referencia,                      

            0,                         

            0,                         

            1,                        

            @inIdTF,                  

            @idTCM                     

        );


        COMMIT TRANSACTION tPerdidaRobo;


    END TRY

    BEGIN CATCH

        IF @@TRANCOUNT > 0 

        BEGIN

            ROLLBACK TRANSACTION tPerdidaRobo;

        END;

        

        -- Inserta en la tabla de errores

        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


    SET NOCOUNT OFF;

END;


Comentarios

Entradas más populares de este blog

CargaXML

Crear TH