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