En la migración de los movimientos se realiza por fechas de la mas antigua a la mas reciente.
De una forma que por lo general inserta el nuevo movimiento y hace un cambio en el saldo de la cuenta.
Dentro de los errores encontrados están que habían saldos que quedaban negativos perjudicando los datos.
También se encontró problemas de incompatibilidad de datos. Esto se soluciono haciendo unos cast y convert.
-----------------------------------------------------------------------------------------------------------------------
-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_MOVIMIENTOS', N'P' ) IS NOT NULL
DROP PROCEDURE MG_SP_MIGRAR_DATOS_MOVIMIENTOS;
GO
-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_MOVIMIENTOS]
AS
BEGIN
BEGIN TRY
-- Declaracion de variables del procedure
DECLARE @counter int,@max int; -- Contador del while y max
DECLARE @TipoOperacion nvarchar(255);
-----------------------------------------------------------------------------------------
-- INICIO DATOS MOVIMIENTOS
-- Set de datos
DECLARE @FK_Movimiento INT;
DECLARE @FK_Banco INT;
DECLARE @FK_TipoGestion INT;
DECLARE @FK_TipoMovimiento int
DECLARE @Nombre varchar(50)
SET @counter = 1;
SET @max = (SELECT COUNT(*) FROM dbo.FileMovimientos fm)+1;
BEGIN TRANSACTION
--Inicio del ciclo de while
WHILE @counter < @max
BEGIN
-- Busca el tipo de operacion a ejecutar
SET @TipoOperacion = (SELECT d.TipoOperacion FROM dbo.FileMovimientos d WHERE d.ID = @counter);
-- Inicio del IF
IF @TipoOperacion = 'MovimientoInteres' -- Movimiento Interes
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoInteres.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento Intereses
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientosIntereses]
(FK_Cuenta,FK_TipoMovimientoInteres, Fecha, Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoIntereses = SaldoIntereses+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Interes(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoInteres.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento Intereses
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientosIntereses]
(FK_Cuenta,FK_TipoMovimientoInteres, Fecha, Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoIntereses = SaldoIntereses+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Interes(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoPendiente' -- Movimiento Pendiente
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoPendiente.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientoPendiente]
(FK_Cuenta, FK_TipoMovimientoPendiente, Monto, FechaHora)
SELECT FK_Cuenta, FK_TipoMovimiento,Monto,Fecha
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoPendiente = SaldoPendiente+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Pendiente(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimientoPendiente.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovimientoPendiente]
(FK_Cuenta, FK_TipoMovimientoPendiente, Monto, FechaHora)
SELECT FK_Cuenta, FK_TipoMovimiento, Monto, Fecha
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoPendiente = SaldoPendiente-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Pendiente(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoEntreBancos' -- Movimiento Entre Bancos
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_Banco = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_Banco = (SELECT FK_Banco FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert MovimientoXBanco
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovCajeroAut]
( FK_Banco, FK_Movimiento)
VALUES
(@FK_Banco,@FK_Movimiento)
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Entre Bancos(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_Banco = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_Banco = (SELECT FK_Banco FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert MovimientoXBanco
INSERT INTO [CuentasAhorroDB].[dbo].[CA_MovCajeroAut]
( FK_Banco, FK_Movimiento)
VALUES
(@FK_Banco,@FK_Movimiento)
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Entre Bancos(Debito).'
END
END
ELSE IF @TipoOperacion = 'MovimientoGestion' -- Movimiento Gestion
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_TipoGestion = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_TipoGestion = (SELECT FK_TipoGestion FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert Gestion
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Gestion]
(FK_Movimiento,FK_TipoGestion,Descripcion)
VALUES
(@FK_Movimiento,@FK_TipoGestion,'Movimiento Gestion')
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Gestion(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
SET @FK_Movimiento = 0;
SET @FK_TipoGestion = 0;
SET @FK_Movimiento = (SELECT TOP 1 Id FROM [CuentasAhorroDB].[dbo].[CA_Movimiento] C ORDER BY Id DESC);
SET @FK_TipoGestion = (SELECT FK_TipoGestion FROM dbo.FileMovimientos fm WHERE ID = @counter)
-- Insert Gestion
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Gestion]
(FK_Movimiento,FK_TipoGestion,Descripcion)
VALUES
(@FK_Movimiento,@FK_TipoGestion,'Movimiento Gestion')
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento Gestion(Debito).'
END
END
ELSE IF @TipoOperacion = 'Movimiento' -- Movimiento
BEGIN
-- Declaracion de tipos
SET @FK_TipoMovimiento = 0
SET @FK_TipoMovimiento = (SELECT FK_TipoMovimiento FROM dbo.FileMovimientos fm WHERE ID = @counter);
IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Credito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal+fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento(Credito).'
END
ELSE IF((SELECT ID FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
WHERE CuentasAhorroDB.dbo.CA_TipoMovimiento.Nombre = 'Debito') = @FK_TipoMovimiento)
BEGIN
-- Insert New Movimiento
INSERT INTO [CuentasAhorroDB].[dbo].[CA_Movimiento]
(FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, FechaHora,Monto)
SELECT FK_Cuenta, FK_TipoMovimiento, FK_TipoMedio, Fecha, Monto
FROM dbo.FileMovimientos fm
WHERE ID = @counter
-- Actualizar cuenta
UPDATE [CuentasAhorroDB].[dbo].[CA_Cuenta]
SET
SaldoReal = SaldoReal-fm.Monto
FROM dbo.FileMovimientos fm
WHERE fm.ID = @counter
PRINT 'Insert Movimiento(Debito).'
END
END
PRINT @counter
SET @counter = @counter + 1;
END
IF @@TRANCOUNT > 0
COMMIT TRANSACTION; -- Commit transaction
PRINT 'Commit transaction.';
RETURN 1;
END TRY
BEGIN CATCH --ERROR in the transaction
EXEC MG_SP_GetErrorInfo;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION; -- ROLLBACK of trasaction
PRINT 'Error: Rolling back transaction.';
RETURN @@ERROR*-1;
END CATCH;
END
GO
Horas Trabajadas: 3.5 hora
Autor: Edward Ovares Villegas
No hay comentarios:
Publicar un comentario