
/****** Object:  StoredProcedure [dbo].[DSS_ACC_EstadoResultados_Chart]    Script Date: 03/03/2014 14:26:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[DSS_ACC_EstadoResultados_Chart]
(
	@Modo         INT,
    @id_ejer      INT,  
    @id_empr      INT,
    @id_mone      INT,
    @Tasa         NUMERIC(13, 8)
)
AS
BEGIN 

	DECLARE @Orden INT, @TipoCuenta INT

	SELECT id_peri, titulo 
	INTO   #Periodos
	FROM   CONTPERI 
	WHERE  id_ejer = @id_ejer AND
		   orden <> 0 AND
		   orden <> 99
	ORDER BY orden ASC
	
	--SET @Tasa = (1 / CASE @Tasa WHEN 0 THEN 1 ELSE @Tasa END)
						 
	CREATE TABLE #TempEstResChart
	(
		id_peri INT, titulo  VARCHAR(20),
		Ingresos NUMERIC(21, 6), PresIngresos NUMERIC(21, 6),
		Costos   NUMERIC(21, 6), PresCostos NUMERIC(21, 6),
		Gastos   NUMERIC(21, 6), PresGastos NUMERIC(21, 6),
		TIngresos NUMERIC(21, 6), TPresIngresos NUMERIC(21, 6),
		TCostos   NUMERIC(21, 6), TPresCostos NUMERIC(21, 6),
		TGastos   NUMERIC(21, 6), TPresGastos NUMERIC(21, 6),
		UtilidadNeta  NUMERIC(21, 6), Presupuesto NUMERIC(21, 6),
		Ejercicio SMALLINT
	)
						 
	CREATE TABLE #TempEstRes
	(
		cuenta CHAR(100), tit_cta VARCHAR(100), cuenta_may CHAR(100), tit_ctamay VARCHAR(100), sal_ini NUMERIC(21, 6), sal_per NUMERIC(21, 6),
		tit_ctaest VARCHAR(100), id_tcta INT, Ejercicio SMALLINT, Periodo VARCHAR(20), TitEmpresa VARCHAR(30), Moneda CHAR(18), Sumar INT,
		Presupuesto NUMERIC(21, 6), Orden TINYINT, Ingresos NUMERIC(21, 6), PresIngresos NUMERIC(21, 6), TotIngresos NUMERIC(21, 6), 
		Costos NUMERIC(21, 6), PresCostos NUMERIC(21, 6), TotCostos NUMERIC(21, 6), Gastos NUMERIC(21, 6), PresGastos NUMERIC(21, 6), 
		TotGastos NUMERIC(21, 6)
	)
	
	DECLARE @PerIni INT = (SELECT MIN(id_peri) FROM #Periodos)
	DECLARE @PerMax INT = (SELECT MAX(id_peri) FROM #Periodos)
	DECLARE @PerAct INT = @PerIni
	
	WHILE @PerAct <= @PerMax
	BEGIN
	
		INSERT INTO #TempEstResChart(id_peri, titulo, Ingresos, PresIngresos,
		                             Costos, PresCostos, Gastos, PresGastos,
		                             UtilidadNeta, Presupuesto)
		VALUES(
		       (SELECT id_peri FROM #Periodos WHERE id_peri = @PerAct),
		       (SELECT UPPER(SUBSTRING(titulo, 1, 3)) FROM #Periodos WHERE id_peri = @PerAct),
		       0, 0, 0, 0, 0, 0, 0, 0
		)
		
		--Obtener Ingresos
		INSERT INTO #TempEstRes
		EXEC DSS_ACC_EstadoResultados 0, 0, @id_ejer, @PerAct, @id_empr, @id_mone, @Tasa
		
		DECLARE @co_mossal INT = (SELECT TOP 1 co_mossal FROM CONTTABL)
		
		UPDATE #TempEstResChart
		SET --Ingresos = ISNULL((SELECT MAX(Ingresos) FROM #TempEstRes), 0) * -1,
		    Ingresos = ISNULL((SELECT MAX(Ingresos) FROM #TempEstRes), 0) * CASE @co_mossal WHEN 1 THEN -1 ELSE 1 END,
		    PresIngresos = ISNULL((SELECT MAX(PresIngresos) FROM #TempEstRes), 0),
		    --TIngresos = ISNULL((SELECT MAX(Ingresos) FROM #TempEstRes), 0) * -1,
		    TIngresos = ISNULL((SELECT MAX(Ingresos) FROM #TempEstRes), 0) * CASE @co_mossal WHEN 1 THEN -1 ELSE 1 END,
		    TPresIngresos = ISNULL((SELECT MAX(PresIngresos) FROM #TempEstRes), 0),
		    Ejercicio = (SELECT MAX(Ejercicio) FROM #TempEstRes)
		WHERE id_peri = @PerAct
		
		IF @Modo = 1
		BEGIN
			UPDATE #TempEstResChart
			SET Ingresos = (SELECT SUM(TIngresos) FROM #TempEstResChart),
				PresIngresos = (SELECT SUM(TPresIngresos) FROM #TempEstResChart)
			WHERE id_peri = @PerAct
		END
		    
		TRUNCATE TABLE #TempEstRes
		
		-- Obtener Costos
		INSERT INTO #TempEstRes
		EXEC DSS_ACC_EstadoResultados 0, 1, @id_ejer, @PerAct, @id_empr, @id_mone, @Tasa
		
		UPDATE #TempEstResChart
		SET Costos = ISNULL((SELECT MAX(Costos) FROM #TempEstRes), 0),
		    PresCostos = ISNULL((SELECT MAX(PresCostos) FROM #TempEstRes), 0),
		    TCostos = ISNULL((SELECT MAX(Costos) FROM #TempEstRes), 0),
		    TPresCostos = ISNULL((SELECT MAX(PresCostos) FROM #TempEstRes), 0)
		WHERE id_peri = @PerAct
		
		IF @Modo = 1
		BEGIN
			UPDATE #TempEstResChart
			SET Costos = (SELECT SUM(TCostos) FROM #TempEstResChart),
				PresCostos = (SELECT SUM(TPresCostos) FROM #TempEstResChart)
			WHERE id_peri = @PerAct
		END
		    
		TRUNCATE TABLE #TempEstRes
		
		-- Obtener Gastos
		INSERT INTO #TempEstRes
		EXEC DSS_ACC_EstadoResultados 0, 2, @id_ejer, @PerAct, @id_empr, @id_mone, @Tasa
		
		UPDATE #TempEstResChart
		SET Gastos = ISNULL((SELECT MAX(Gastos) FROM #TempEstRes), 0),
		    PresGastos = ISNULL((SELECT MAX(PresGastos) FROM #TempEstRes), 0),
		    TGastos = ISNULL((SELECT MAX(Gastos) FROM #TempEstRes), 0),
		    TPresGastos = ISNULL((SELECT MAX(PresGastos) FROM #TempEstRes), 0)
		WHERE id_peri = @PerAct
		
		IF @Modo = 1
		BEGIN
			UPDATE #TempEstResChart
			SET Gastos = (SELECT SUM(TGastos) FROM #TempEstResChart),
				PresGastos = (SELECT SUM(TPresGastos) FROM #TempEstResChart)
			WHERE id_peri = @PerAct
		END
		    
		TRUNCATE TABLE #TempEstRes
		
		-- Calcular Utilidad Neta y Presupuesto
		UPDATE #TempEstResChart
		SET Ingresos = Ingresos, UtilidadNeta = (Ingresos) - Costos - Gastos,
		    Presupuesto = PresIngresos - PresCostos - PresGastos
		WHERE id_peri = @PerAct   
		
		SET @PerAct = @PerAct + 1
		
	END
	
	SELECT * FROM #TempEstResChart ORDER BY id_peri ASC

	RETURN

END
