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

CREATE  PROCEDURE dbo.CP_CtrlPresup
		 @Mes				INT	
		,@Anio				INT    
		,@Id_Centro_Costo	CHAR(10) --	CODIGO DEL CENTRO DE COSTO A SOLICITAR / VACIO PARA TODOS
		,@Id_Plan_Cta		INT
		,@Flag_SoloAsientos TINYINT 
AS
begin

/*DECLARE */
		
DECLARE	@Id_Centro_Costo_Min CHAR(10)
		,@Id_Centro_Costo_Max CHAR(10)
		,@Flag_Inc_SA		TINYINT
		,@Desde				DATETIME
		,@Hasta				DATETIME

		
IF ISNULL(@Id_Centro_Costo,'') = ''
begin
	SET @Id_Centro_Costo_Min = ISNULL((SELECT MIN(Id_Centro_Costo) FROM Centro_Costos),'')
	SET @Id_Centro_Costo_Max = ISNULL((SELECT MAX(Id_Centro_Costo) FROM Centro_Costos),'')
end
else
begin
	SET @Id_Centro_Costo_Min = @Id_Centro_Costo 
	SET @Id_Centro_Costo_Max = @Id_Centro_Costo 
end;

IF ISNULL(@Mes,0) = 0
BEGIN
	SET @Desde = CAST(@Anio AS CHAR(4)) + '0101'
	SET @Hasta = CAST(@Anio AS CHAR(4)) + '1231'
	SET @Flag_Inc_SA = 1
END
ELSE
BEGIN
	SET @Desde = CAST(@Anio AS CHAR(4)) +  RIGHT('00' +  CAST(@Mes AS VARCHAR(2)),2) +'01'
	SET @Hasta = CONVERT(CHAR(8),dbo.CF_EOMonth(@Desde),112)
	SET @Flag_Inc_SA = 0
END


CREATE TABLE #CtrlPresup (
 [Id_Cta_Contable]	INT,
 [Alias]			INT,
 [Nro_Cta_Contable]	VARCHAR(20),
 [Descripcion]		VARCHAR(80),
 [Orden_Proyect]	SMALLINT,
 [Id_Presup_Tit]	SMALLINT,
 [Descripcion_Tit]	VARCHAR(100),
 [Orden]			SMALLINT,
 [Flag_Tipo]		CHAR(2),
 Imp_Presup			DECIMAL(16,2),
 Imp_Ejec			DECIMAL(16,2),
 Porc_Ejec			DECIMAL(7,2),
 Imp_Dif			DECIMAL(16,2)
 )

 
DECLARE Cur_CP_CtrlPresup CURSOR FOR SELECT Id_Centro_Costo FROM Centro_Costos WHERE Id_Centro_Costo BETWEEN @Id_Centro_Costo_Min AND @Id_Centro_Costo_Max
OPEN Cur_CP_CtrlPresup
FETCH NEXT FROM Cur_CP_CtrlPresup INTO @Id_Centro_Costo
WHILE @@FETCH_STATUS= 0
BEGIN

	INSERT INTO #CtrlPresup
		SELECT P.Id_Cta_Contable
		,P.Alias
		,P.Nro_Cta_Contable
		,P.Descripcion
		,P.Orden_Proyect
		,ISNULL(P.Id_Presup_Tit,0) 
		,ISNULL(T.Descripcion,'')
		,ISNULL(T.Orden,0)
		,ISNULL(T.Flag_Tipo,'')
		,dbo.CF_CtrlPresup_MesPesup (@Mes,@Anio,@Id_Centro_Costo,P.Alias,1)
		/*dbo.CF_Cta_Cont_Saldo (@Desde DATETIME
								,@Hasta DATETIME
								,@Alias INT
								,@Flag_Inc_SA TINYINT
								,@Flag_CentroCosto TINYINT
								,@Id_Centro_Costo CHAR(10)
								,@Flag_CentroCosto_Recur 
								,@Flag_Unid_Neg TINYINT
								,@Id_Unid_Negocio CHAR(10)
								,@Flag_SoloAsientos TINYINT) */
		,dbo.CF_Cta_Cont_Saldo (@Desde          
								,@Hasta          
								,P.Alias 
								,@Id_Plan_Cta   
								,1                    
								,1                         
								,@Id_Centro_Costo
								,1          
								,0                      
								,''                        
								,@Flag_SoloAsientos )
		,0
		,0
		 FROM Pla_Ctas_Cuentas_Contables P LEFT OUTER JOIN Plan_Ctas_Presupuestos_Tit T ON P.Id_Presup_Tit = T.Id_Presup_Tit
		 WHERE Id_Plan_Cta = @Id_Plan_Cta 
				  AND Tipo in ('-','+') 
				  AND Imputable = 1

	FETCH NEXT FROM Cur_CP_CtrlPresup INTO @Id_Centro_Costo

END
CLOSE Cur_CP_CtrlPresup
DEALLOCATE Cur_CP_CtrlPresup

END
UPDATE #CtrlPresup SET Imp_Dif = Imp_Presup - Imp_Ejec , Porc_Ejec = CASE Imp_Presup WHEN 0 THEN 0 ELSE Imp_Ejec / Imp_Presup * 100 END
CREATE INDEX #IX_Ctrl ON #CtrlPresup (Orden,Descripcion_Tit,Orden_Proyect,Nro_Cta_Contable)
SELECT * FROM #CtrlPresup ORDER BY Orden,Descripcion_Tit,Orden_Proyect,Nro_Cta_Contable
DROP TABLE #CtrlPresup



 



