Proceso masivo de renovacion de TF

 Se dedico una hora de tiempo para crear el proceso masivo


USE [tarjetaCredito]

GO

/****** Object:  StoredProcedure [dbo].[RenovacionMasivaTF]    Script Date: 11/12/2024 5:01:08 PM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER PROCEDURE [dbo].[RenovacionMasivaTF]

    @inIdTF INT            

    , @outResult INT OUTPUT   

AS

BEGIN

    SET NOCOUNT ON;

    BEGIN TRY

-- nuevo numero de tarjeta

DECLARE @numTarjeta VARCHAR(16);


        SET @outResult = 0;

-- num de tarjeta de 16 numeros

SET @numTarjeta = LEFT(ABS(CHECKSUM(NEWID()))

, 8) + LEFT(ABS(CHECKSUM(NEWID()))

, 8);



        BEGIN TRANSACTION RenovacionTF;


        -- inactivar la tarjeta vieja

        UPDATE [dbo].[TF]

        SET esActiva = 0

        WHERE id = @inIdTF;


        -- revisar si se inactivo correctamente

        IF @@ROWCOUNT = 0

        BEGIN

            SET @outResult = 1;  

            ROLLBACK TRANSACTION RenovacionTF;

            RETURN;

        END


        -- insertar la nueva tarjeta

        INSERT INTO [dbo].[TF] (

            numTarjeta

            , fechaVencimiento

            , cvv

            , pin

            , esActiva

        )

        SELECT 

            @numTarjeta,

DATEADD(YEAR

, 3

, GETDATE())  -- fecha de vencimiento a 3 años

            , cvv                    

            , pin                                     

            , 1                         

        FROM [dbo].[TF]

        WHERE id = @inIdTF;


        -- id de la nueva tarjeta insertada

        DECLARE @IdNuevaTF INT = SCOPE_IDENTITY();


        -- insertar el movimiento de pérdida o robo

        DECLARE @referencia VARCHAR(5);

-- numero de referencia de 5 numeros

        SET @referencia = SUBSTRING(REPLACE(NEWID()

, '-'

, '')

, 1

, 5);


        INSERT INTO  [dbo].[Movimiento](

            numTF

            , fechaOperacion

            , fechaMovimiento

            , descripcion

            , referencia

            , monto

            , nuevoSaldo

            , esSospechoso

            , idTF

, idTCM

        )

        SELECT 

            @numTarjeta                

            , GETDATE()                 

            , GETDATE()                 

            , 'Renovación por pérdida o robo'  

            , @referencia              

            , 0                

            , saldoActual             

            , 0                  

            , @IdNuevaTF    

, id

        FROM [dbo].[TCM]

        WHERE idTF = @inIdTF;


        IF @@ROWCOUNT = 0

        BEGIN

            SET @outResult = 1;  

            ROLLBACK TRANSACTION RenovacionTF;

            RETURN;

        END


        COMMIT TRANSACTION RenovacionTF;


    END TRY

    BEGIN CATCH

        IF @@TRANCOUNT > 0

        BEGIN

            ROLLBACK TRANSACTION RenovacionTF;

        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;  

    END CATCH

END;



Comentarios

Entradas más populares de este blog

CargaXML

Crear TH