IF EXISTS ( SELECT * 
            FROM   sysobjects 
            WHERE  id = object_id(N'[dbo].[CP_Cbtes_Rec_Fin]') 
                   and OBJECTPROPERTY(id, N'IsProcedure') = 1 )
BEGIN
    DROP PROCEDURE [dbo].[CP_Cbtes_Rec_Fin] 
END
GO



CREATE PROCEDURE [dbo].[CP_Cbtes_Rec_Fin]
@pId_Trans				INT
AS
SET NOCOUNT ON

/*Declaracion Variables Locales*/
DECLARE @Id_Cta_Contable	INT
DECLARE @Fecha				DATETIME
DECLARE @Debe				DECIMAL(12,2)
DECLARE @Haber				DECIMAL(12,2)
DECLARE @Observacion		VARCHAR(100)
DECLARE @Alias				SMALLINT
DECLARE @Id_Asiento			INT
DECLARE @Id_Centro_Costo	CHAR(10)
DECLARE @Item				SMALLINT
DECLARE @Resultado			INT

DECLARE @Descripcion_Cbte	VARCHAR(80)

DECLARE @Importe_Aplicado   DECIMAL(16,2)
DECLARE @Importe_Pago_A_Cta DECIMAL(16,2)
DECLARE @Importe_Rec		DECIMAL(16,2)

DECLARE @Mensaje			VARCHAR(100)
/*Fin de Declaraciones Variables Locales */

PRINT 'Procedimiento: CP_Cbtes_Rec_Fin Trans: '+ CAST(@pId_Trans AS VARCHAR(10))


EXEC @Resultado = dbo.CP_Cbtes_Ctas_Contables_Generar @pId_Trans, 1
IF ISNULL(@Resultado,0) <> 0 
	RETURN 9999

EXEC @Resultado = dbo.CP_Cbtes_Grabar_Numero @pId_Trans
IF ISNULL(@Resultado,0) <> 0 
	RETURN 9999


BEGIN TRY
	BEGIN TRAN
	
	SET @Importe_Rec = ISNULL((SELECT Imp_Total FROM Cbtes WHERE Id_Trans = @pId_Trans),0)
	SET @Importe_Aplicado = ISNULL((SELECT SUM(Importe) FROM Cbtes_Aplica WHERE Id_Trans_D = @pId_Trans AND Id_Trans <> 0), 0) 
	SET @Importe_Pago_A_Cta = ISNULL((SELECT SUM(Importe) FROM Cbtes_Aplica WHERE Id_Trans_D = @pId_Trans AND Id_Trans = 0), 0) 
	

	SET @Descripcion_Cbte = (dbo.CF_Cbte_Descrip(@pId_Trans))
	
	UPDATE Transacciones SET Descripcion = SUBSTRING((Descripcion + ' ' + @Descripcion_Cbte), 1, 50) WHERE Id_Trans = @pId_Trans
	UPDATE Valores SET Id_Estado_Valor = 4  WHERE Id_Trans = @pId_Trans
	UPDATE Valores_Mov SET Id_Estado_Valor = 4 WHERE Id_Trans = @pId_Trans
	UPDATE Cajas_Mov SET Id_Estado_Mov_Caja = 2, Descripcion = @Descripcion_Cbte WHERE Id_Trans = @pId_Trans

		
	IF(@Importe_Aplicado =  @Importe_Rec)
	BEGIN
		--Actualizar Estados/Descripcion/Saldo en Cbtes, Clientes_ctaCte, Valores, Valores_Mov, Cajas_Mov		
		UPDATE Cbtes SET Id_Estado_Cbte = 2, Saldo = 0 WHERE Id_Trans = @pId_Trans
		UPDATE Cbtes_Items SET Id_Estado_Cbte = 2 WHERE Id_Trans = @pId_Trans
		UPDATE Clientes_CtaCte SET Id_Estado_Cbte = 2, Descripcion = @Descripcion_Cbte, Saldo = 0 WHERE Id_Trans = @pId_Trans
	END
	ELSE
	BEGIN
		IF @Importe_Pago_A_Cta = @Importe_Rec
		BEGIN
			UPDATE Cbtes SET Id_Estado_Cbte = 1 WHERE Id_Trans = @pId_Trans       -- Pendiente
			UPDATE Clientes_CtaCte SET Id_Estado_Cbte = 1, Descripcion = @Descripcion_Cbte WHERE Id_Trans = @pId_Trans
		END
		ELSE
		BEGIN
			UPDATE Cbtes SET Id_Estado_Cbte = 4 WHERE Id_Trans = @pId_Trans      -- Parcial
			UPDATE Clientes_CtaCte SET Id_Estado_Cbte = 4, Descripcion = @Descripcion_Cbte WHERE Id_Trans = @pId_Trans
		END
	END
	
	COMMIT

	SET @Mensaje = @Descripcion_Cbte

	SELECT	 0				AS ErrorNumber 
			,0				AS ErrorSeverity  
			,0				AS ErrorState 
			,0				AS ErrorProcedure  
			,0				AS ErrorLine		
			,@Mensaje		AS ErrorMessage
			,@pId_Trans		AS Id_Trans

END TRY  


BEGIN CATCH  
    SELECT  ERROR_NUMBER() AS ErrorNumber  
		,ERROR_SEVERITY() AS ErrorSeverity  
		,ERROR_STATE() AS ErrorState  
		,ERROR_PROCEDURE() AS ErrorProcedure  
		,ERROR_LINE() AS ErrorLine  
		,ERROR_MESSAGE() AS ErrorMessage
		,@pId_Trans		AS Id_Trans 

	ROLLBACK
	RETURN 9999
END CATCH

PRINT 'FIN Procedimiento: CP_Cbtes_Rec_Fin  Trans: '+ CAST(@pId_Trans AS VARCHAR(10))

RETURN 0
