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
Publicar un comentario