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