miércoles, 5 de noviembre de 2014

Experiencias

Dentro de las experiencias esta trabajar con un patrón para el diseño.

Total Horas Trabajadas:

20 Luis Diego
22.5 Edward Ovares

42.5 Horas

lunes, 3 de noviembre de 2014

Creación de método Transferencia


Creación de método Transferencia
9 Horas

Éste método fue el más difícil por ser el más enredado y el más extenso, la dificultad residía en ser un movimiento de una cuenta a otra, visto en tablas, una referencia entre la misma tabla. Ademas de guardar el movimiento se tuvo que tomar en cuenta los bancos desde los que se hacía el movimiento y también se tuvo que modificar los saldos de las respectivas cuentas. El problema, que no se pudo solucionar, fue optimizar el procedure de manera que se automatizara para evitar depender de tantos parámetros en el procedure. Otro problema fue acomodar bien las validaciones de manera que el procedure diera los resultados esperados (usualmente retornaba tablas vacías o sin alterar).

-- ########################################################################################################################
-- Stored Procedure of Transferencia
-- ########################################################################################################################

-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Transferencia', N'P') IS NOT NULL
    DROP PROCEDURE CA_SP_Transferencia;
GO

CREATE PROCEDURE [dbo].[CA_SP_Transferencia]
    @CuentaDepositante INT ,
    @CuentaDepositada INT ,
    @Monto MONEY ,
    @TipoMovimiento1 INT ,
    @TipoMovimiento2 INT ,
    @TipoMedio1 INT ,
    @TipoMedio2 INT ,
    @Fecha DATETIME ,
    @IdBanco INT ,
    @Banco1 INT ,
    @Banco2 INT ,
    @ReturnValue INT OUTPUT
AS
BEGIN TRY
    IF (( EXISTS( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @CuentaDepositante)))--existen ambas cuentas
            AND (EXISTS(SELECT * FROM [dbo].[CA_Cuenta] WHERE   ( Id = @CuentaDepositada))))
        BEGIN
            IF((SELECT SaldoReal FROM dbo.CA_Cuenta WHERE @CuentaDepositante = Id) > @Monto )--monto suficiente
                BEGIN
                    IF (EXISTS(SELECT * FROM dbo.CA_Banco WHERE Id = @Banco1 )AND EXISTS (SELECT * FROM dbo.CA_Banco WHERE Id = @Banco2))-- Existen los bancos
                        BEGIN
DECLARE @recargo int
SET @recargo = 0
IF (@Banco1 != @Banco2)
SET @recargo = 265
                        BEGIN TRANSACTION
--Movimiento a cuenta depositante
INSERT  INTO dbo.CA_Movimiento ( FK_Cuenta ,FK_TipoMovimiento ,FK_TipoMedio ,FechaHora ,Monto)
                            VALUES  ( @CuentaDepositante ,@TipoMovimiento1 ,@TipoMedio1 ,@Fecha ,@Monto)
                            UPDATE  dbo.CA_Cuenta
                            SET     SaldoReal = SaldoReal - (@Monto+@recargo)
                            WHERE   Id = @CuentaDepositante
--Movimiento a cuenta depositada
                            INSERT  INTO dbo.CA_Movimiento( FK_Cuenta ,FK_TipoMovimiento ,FK_TipoMedio ,FechaHora ,Monto)
                            VALUES  ( @CuentaDepositada ,@TipoMovimiento2 ,@TipoMedio2 ,@Fecha ,@Monto)
                            UPDATE  dbo.CA_Cuenta
                            SET     SaldoReal = SaldoReal + @Monto
                            WHERE   Id = @CuentaDepositada
                            COMMIT
                        END
                    ELSE
                        BEGIN
                            PRINT 'No existe el banco'
                        END
                END
            ELSE
                BEGIN
                    PRINT 'Monto insuficiente'
                END
        END
    ELSE
        BEGIN
            PRINT 'Cuenta inexistente'
        END
END TRY
BEGIN CATCH
    PRINT 'Error de transaction'
END CATCH

viernes, 31 de octubre de 2014

Creación de Procedure Estado Cuenta


Creación de Procedure Estado Cuenta

6 Horas

En éste procedure sin lugar a dudas fue la comprobación de su funcionalidad. Se tuvo que cambiar el método una gran cantidad de veces antes de que comenzara a retornar datos acertados.
Así mismo la comprobación en sí de éste método, al ser tantos datos y al ser la mayoría de éstos números se tornó sumamente tediosa y engorrosa.
Otra dificultad que vale la pena mencionar fue el hecho de validar que el límite de fecha sea de 12 meses con respecto a la fecha actual, ya que tanto en la tabla de estado de cuentas y en la tabla de cuentas se tenían tipos de datetime, lo que volvía éste método muy confuso

-- ########################################################################################################################
-- Stored Procedure of EstadoCuenta
-- ########################################################################################################################

-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_EstadoCuenta', N'P') IS NOT NULL
    DROP PROCEDURE CA_SP_EstadoCuenta;
GO

CREATE PROCEDURE [dbo].[CA_SP_EstadoCuenta]
    @Cuenta INT ,
@Fecha DATETIME
 
AS
    BEGIN TRY
IF(@Fecha BETWEEN DATEADD(MONTH,-12,@Fecha) AND GETDATE())
BEGIN
        BEGIN TRANSACTION
SELECT * FROM dbo.CA_EstadoCuenta
WHERE FK_Cuenta = @Cuenta
AND YEAR(@Fecha) = YEAR(Fecha)
AND MONTH(@Fecha)=MONTH(Fecha)
COMMIT
END
ELSE
    BEGIN
PRINT 'Fecha fuera de rango'
    END
 
    END TRY
    BEGIN CATCH
PRINT'No se encontro el estado de cuenta buscado'
    END CATCH
GO

miércoles, 29 de octubre de 2014

Creación de método Depósito Y Retiro


Creación de método Depósito y Retiro
5 horas

La mayor complicación en éste procedure fue por dudas de implementación. Más específicamente, cuáles tablas habrían de ser modificadas. Se concluyó que la única tabla que convenía actualizar era la de Cuenta y la de movimientos.

-- ########################################################################################################################
-- Stored Procedure of Deposito
-- ########################################################################################################################

-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Deposito', N'P') IS NOT NULL
    DROP PROCEDURE CA_SP_Deposito;
GO

CREATE PROCEDURE [dbo].[CA_SP_Deposito]
    @Cuenta INT ,
    @TipoMovimiento INT ,
    @TipoMedio INT ,
    @Monto MONEY
AS
    BEGIN TRY
        IF ( NOT EXISTS ( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @Cuenta)))
            PRINT 'No existe la cuenta'
        BEGIN TRANSACTION
--crea el movimiento
        INSERT INTO dbo.CA_Movimiento(FK_Cuenta,FK_TipoMovimiento,FK_TipoMedio,FechaHora,Monto)
        VALUES  (@Cuenta,@TipoMovimiento,@TipoMedio,GETDATE(),@Monto)
--Actualiza saldo
        UPDATE  dbo.CA_Cuenta
        SET     SaldoReal = SaldoReal + @Monto
        WHERE   dbo.CA_Cuenta.Id = @Cuenta
    END TRY
    BEGIN CATCH
        PRINT 'Error en la transaction'
    END CATCH
GO

-- ########################################################################################################################
-- Stored Procedure of Retiro
-- ########################################################################################################################

-- Verify that the stored procedure does not exist.
IF OBJECT_ID(N'CA_SP_Retiro', N'P') IS NOT NULL
    DROP PROCEDURE CA_SP_Retiro;
GO

CREATE PROCEDURE [dbo].[CA_SP_Retiro]
    @Cuenta INT ,
    @TipoMovimiento INT ,
    @TipoMedio INT ,
    @Monto MONEY
AS
    BEGIN TRY
        IF (( NOT EXISTS ( SELECT * FROM [dbo].[CA_Cuenta] WHERE (Id = @Cuenta)))AND(SELECT SaldoReal FROM dbo.CA_Cuenta WHERE Id = @Cuenta)>@Monto)
            PRINT 'No existe la cuenta o el fondo es insuficiente'
        BEGIN TRANSACTION
--crea el movimiento
        INSERT INTO dbo.CA_Movimiento(FK_Cuenta,FK_TipoMovimiento,FK_TipoMedio,FechaHora,Monto)
        VALUES  (@Cuenta,@TipoMovimiento,@TipoMedio,GETDATE(),@Monto)
--Actualiza saldo
        UPDATE  dbo.CA_Cuenta
        SET     SaldoReal = SaldoReal - @Monto
        WHERE   dbo.CA_Cuenta.Id = @Cuenta
    END TRY
    BEGIN CATCH
        PRINT 'Error en la transaction'
    END CATCH
GO

lunes, 27 de octubre de 2014

Migración de Cuentas

Migración de Cuentas

Se migran los datos de cuentas ordenados por fechas cada uno desde la mas antigua a la mas reciente. Esto para evitar errores a la hora de procesar datos.

Errores dentro de este procedimiento no se encuentran, a única observación seria la de que no se valida que los datos no están repetidos a la hora de insertar.




-----------------------------------------------------------------------------------------------------------------------

-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_CUENTAS', N'P' ) IS NOT NULL 
    DROP PROCEDURE MG_SP_MIGRAR_DATOS_CUENTAS;
GO

-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_CUENTAS]
AS
BEGIN
 BEGIN TRY  
  BEGIN TRANSACTION
   -- Insert Cuenta
   INSERT INTO [CuentasAhorroDB].[dbo].[CA_Cuenta]
   (FK_TipoCuenta, FK_Cliente,SaldoReal, SaldoPendiente, SaldoIntereses,FechaEstadoCuenta)
   SELECT FK_TipoCuenta, FK_Cliente, SaldoReal, SaldoPendiente, SaldoIntereses, fechaEstadoCuenta 
   FROM FileCuenta 
  
  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: 1 hora
Autor: Edward Ovares Villegas

viernes, 24 de octubre de 2014

Migración de Movimientos



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

jueves, 23 de octubre de 2014

Migración de datos inicio

Migración de datos inicio

Migración de los datos generales de la base de datos.

Estos se van leyendo desde una tabla en migración para la base de datos principal y todos en un mismo tiempo.




-----------------------------------------------------------------------------------------------------------------------

-- Verifica si el procedure existe, para eliminarla
IF OBJECT_ID ( N'MG_SP_MIGRAR_DATOS_GENERALES', N'P' ) IS NOT NULL 
    DROP PROCEDURE MG_SP_MIGRAR_DATOS_GENERALES;
GO

-- Create procedure for read file
CREATE PROCEDURE [dbo].[MG_SP_MIGRAR_DATOS_GENERALES]
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 GENERALES
  -- Set de datos 
  DECLARE @Nombre varchar(50)
  SET @counter = 1;
  SET @max = (SELECT COUNT(*) FROM dbo.FileDatosGenerales fdg)+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.FileDatosGenerales  d WHERE d.ID = @counter);
   
    -- Inicio del IF
    IF @TipoOperacion = 'InsercionTipoCuenta'       -- Insercion Tipo Cuenta
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo de Cuenta
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoCuenta] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoCuenta]
      (Nombre,Moneda,SaldoMinimoMensual,TasaInteresAnual,MultaSaldoNegativo, MultaSaldoMinimo)
      SELECT Nombre,'Colon',SaldoMinimo,TasaAnual,MultaSaldoNegativo, MultaSaldoMinimo FROM FileDatosGenerales dg
      WHERE dg.ID = @counter; 
            PRINT 'insercion tipo cuenta.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionTipoMovimientoInteres'   -- Insercion Tipo Movimiento Interes
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Movimiento Interes
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimientoInteres]
      (Nombre)
      SELECT Nombre FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion tipo movimiento interes.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionTipoMovimientoPedientes'   -- Insercion Tipo Movimiento Pedientes
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Movimiento Pendiente
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimientoPendiente]
      (Nombre)
      SELECT Nombre FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion tipo movimiento pendientes.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionTipoMovimiento'     -- Insercion Tipo Movimiento
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Movimiento
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMovimiento] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMovimiento]
      (Nombre)
      SELECT Nombre FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion tipo movimiento.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionTipoMedioMovimientos'   -- Insercion Tipo Medio Movimientos
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Medio Movimiento
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoMedio] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoMedio]
      (Nombre)
      SELECT Nombre FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion tipo medio movimientos.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionTipoGestion'      -- Insercion Tipo Gestion
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Gestion
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_TipoGestion] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_TipoGestion]
      (Nombre,Comision)
      SELECT Nombre,Comision FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion tipo gestion.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionBanco'       -- Insercion Banco
    BEGIN
     -- Declaracion de tipos
     SET @Nombre = NULL
     SET @Nombre = (SELECT Nombre FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Gestion
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_Banco] tc WHERE tc.Nombre = @Nombre)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_Banco]
      (Nombre,Comision)
      SELECT Nombre,Comision FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion banco.';
     END
    END
    ELSE IF @TipoOperacion = 'InsercionCliente'       -- Insercion Cliente
    BEGIN
     -- Declaracion de tipos
     DECLARE @Usuario varchar(50)
     SET @Usuario = (SELECT Usuario FROM dbo.FileDatosGenerales fdg WHERE ID = @counter);

     -- Condicion para el Insert de Tipo Gestion
     IF NOT EXISTS(SELECT 1 FROM [CuentasAhorroDB].[dbo].[CA_Cliente] tc WHERE tc.Usuario = @Usuario)
     BEGIN
      INSERT INTO [CuentasAhorroDB].[dbo].[CA_Cliente]
      (Nombre,Usuario,Contraseña)
      SELECT Nombre,Usuario,Contraseña FROM dbo.FileDatosGenerales fdg
      WHERE fdg.ID = @counter; 
            PRINT 'insercion cliente.';
     END 
    END
    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