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

No hay comentarios:

Publicar un comentario