
/****** Object:  StoredProcedure [dbo].[DSS_ACC_EstadoResultados]    Script Date: 09/23/2012 11:05:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
===========================================================
-- Autor:       Francis Antonio Bolaños Arias
-- Fecha:       26/09/2012 09:24:30
-- Descripción: Procedimiento que obtiene la información
--              para generar el informe de Balance
--              General para DSS
-- ========================================================
*/
DROP PROCEDURE [dbo].[DSS_ACC_Ratios]
GO

CREATE PROCEDURE [dbo].[DSS_ACC_Ratios]
(
    @Modo         INT, -- 0 - Resumido (Estructural), 1 - Detallado (Plan)
    @Filtro       INT, -- 11 - Activo Circulante, 12 - Activo Fijo, 13 - Otros Activos, etc.
    @id_ejer      INT, 
    @id_peri      INT, 
    @id_empr      INT,
    @id_mone      INT,
    @Tasa NUMERIC(13, 8)
)
AS
BEGIN 

	DECLARE @Orden INT, @TipoOrden CHAR(2)

	SELECT @Orden = orden
	FROM   CONTPERI
	WHERE  id_peri = @id_peri
	
	SET @Tasa = (1 / CASE @Tasa WHEN 0 THEN 1 ELSE @Tasa END)
	
	--select @Tasa

	SELECT @TipoOrden  = CONVERT(CHAR(2), @Filtro)
						 
	--SELECT @Tasa = (SELECT tasa FROM SICLAMON WHERE refer_mone = 1)

	SELECT tc.id_tcta, 
	       cod_tcta,
           Acumul  = CONVERT(NUMERIC(25, 6), SUM((COALESCE(debe,  0) - COALESCE(haber, 0)) * @Tasa)),
           AcuCred = CONVERT(NUMERIC(25, 6), SUM(COALESCE(haber, 0) * @Tasa)),
           PeriIni = CONVERT(NUMERIC(25, 6), SUM(CASE WHEN pe.orden = 0 THEN (COALESCE(debe, 0) - COALESCE(haber, 0)) 
                                                      ELSE 0 
                                                      END) * @Tasa)
    INTO       #TempRatios
    FROM       CONTSALD sa 
    INNER JOIN CONTPLAN pl ON sa.id_cuenta = pl.id_cuenta 
    LEFT JOIN  CONTCTGT gt ON pl.id_ctgt   = gt.id_ctgt
    INNER JOIN CONTPERI pe ON sa.id_peri   = pe.id_peri
    INNER JOIN CONTESTR es ON pl.id_estr   = es.id_estr
    INNER JOIN CONTTCTA tc ON es.id_tcta   = tc.id_tcta
    INNER JOIN CONTEMPR em ON pl.id_empr   = em.id_empr
    INNER JOIN SICLAMON m1 ON em.id_mone   = m1.id_mone
    LEFT JOIN  SICLAMON m2 ON pl.id_mone   = m2.id_mone
    WHERE   sa.id_ejer  =  CONVERT(CHAR(16), @id_ejer)
        AND tc.cod_tcta NOT IN ('19', '20')
        AND em.id_empr  = @id_empr 
        AND pe.orden    <= CONVERT(CHAR(16),@Orden)
    GROUP BY tc.id_tcta, cod_tcta 
    ORDER BY cod_tcta

	-- Se obtienen valores especiales

	DECLARE @Ejercicio   SMALLINT    = (SELECT ejercicio FROM CONTEJER WHERE id_ejer = @id_ejer)
	DECLARE @Periodo     VARCHAR(20) = (SELECT titulo    FROM CONTPERI WHERE id_peri = @id_peri)
	DECLARE @TitEmpresa  VARCHAR(30) = (SELECT tit_emp   FROM CONTEMPR WHERE id_empr = @id_empr)
	DECLARE @co_maydig   TINYINT     = (SELECT co_maydig FROM CONTTABL WHERE id_tabl = 1)
	DECLARE @Moneda      CHAR(18)    = (SELECT desc_mone FROM SICLAMON WHERE id_mone = @id_mone)
	
	CREATE TABLE #Ratios
	(
		ActCircul           NUMERIC(25, 6),
		ObliCorPla          NUMERIC(25, 6),
		RatioLiq            NUMERIC(25, 2),
		EfecPorCob          NUMERIC(25, 6),
		RatioTeso1          NUMERIC(25, 2),
		Efec                NUMERIC(25, 6),
		RatioTeso2          NUMERIC(25, 2),
		PorCobrar           NUMERIC(25, 6),
		CDias               INT,
		Ingresos            NUMERIC(25, 6),
		RatioCredMedCC      NUMERIC(25, 2),
		Costo               NUMERIC(25, 6),
		Inventario          NUMERIC(25, 6),
		RatioRotStock       NUMERIC(25, 2),
		PorPagar            NUMERIC(25, 6),
		Compras             NUMERIC(25, 6),
		RatioCredMedCP      NUMERIC(25, 2),
		Capital             NUMERIC(25, 6),
		Obligaciones        NUMERIC(25, 6),
		Solvencia1          NUMERIC(25, 2),
		Solvencia2          NUMERIC(25, 2),
		ObliLarPla          NUMERIC(25, 6),
		ActivosFijos        NUMERIC(25, 6),
		CobeInmovil         NUMERIC(25, 2),
		Beneficio           NUMERIC(25, 6),
		RecPropios          NUMERIC(25, 6),
		RenRecuProp         NUMERIC(25, 2),
		RecPermanentes      NUMERIC(25, 6),
		RenPermanentes      NUMERIC(25, 6),
		RotacionInver       NUMERIC(25, 2),
		Ventas              NUMERIC(25, 6),
		RenVentas           NUMERIC(25, 2),
		RenInversion        NUMERIC(25, 2),
		DeudasCapi          NUMERIC(25, 2),
		Activo              NUMERIC(25, 6),
		RenActivo           NUMERIC(25, 2)
	)
	
	DECLARE @v01     NUMERIC(25, 6),
	        @v01u    NUMERIC(25, 6),
	        @v01cred NUMERIC(25, 6),
	        @v02     NUMERIC(25, 6),
	        @v02u    NUMERIC(25, 6),
	        @v03     NUMERIC(25, 6),
	        @v03u    NUMERIC(25, 6),
	        @v04     NUMERIC(25, 6),
	        @v04u    NUMERIC(25, 6),
	        @v05     NUMERIC(25, 6),
	        @v05u    NUMERIC(25, 6),
	        @v06     NUMERIC(25, 6),
	        @vcapi   NUMERIC(25, 6),
	        @vcapiu  NUMERIC(25, 6),
	        @vbenef  NUMERIC(25, 6),
	        @v11     NUMERIC(25, 6),
	        @v11u    NUMERIC(25, 6),
	        @v12     NUMERIC(25, 6),
	        @v13     NUMERIC(25, 6),
	        @v13u    NUMERIC(25, 6),
	        @v14     NUMERIC(25, 6),
	        @v14u    NUMERIC(25, 6),
	        @v15     NUMERIC(25, 6),
	        @v15u    NUMERIC(25, 6),
	        @v16     NUMERIC(25, 6),
	        @v16u    NUMERIC(25, 6),
	        @v17     NUMERIC(25, 6),
	        @v18     NUMERIC(25, 6),
	        @v18u    NUMERIC(25, 6),
	        @FecIni  DATE,
	        @FecFin  DATE,
	        @cdias   INT
	        
	--SELECT * FROM #TempRatios
	        
    SELECT  @v01 =     ISNULL(SUM(Acumul), 0),
            @v01u =    ISNULL(SUM(PeriIni), 0),
            @v01cred = ISNULL(SUM(acucred), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '01'
    
    SELECT  @v02 =     ISNULL(SUM(Acumul), 0),
            @v02u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '02'
    
    SELECT  @v03 =     ISNULL(SUM(Acumul), 0),
            @v03u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '03'
    
    SELECT  @v04 =     ISNULL(SUM(Acumul), 0),
            @v04u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '04'
    
    SELECT  @v05 =     ISNULL(SUM(Acumul), 0),
            @v05u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '05'
    
    SELECT  @v06 =     ISNULL(SUM(Acumul), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '06'
    
    SELECT  @vcapi  =  ISNULL(SUM(Acumul), 0),
            @vcapiu =  ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta IN ('07', '08', '09')
    
    SELECT  @vbenef =  ISNULL(SUM(Acumul), 0)
    FROM    #TempRatios
    WHERE   cod_tcta IN ('06', '10', '12')
    
    SELECT  @v11 =     ISNULL(SUM(Acumul), 0),
            @v11u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '11'
    
    SELECT  @v12 =     ISNULL(SUM(Acumul), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '12'
    
    SELECT  @v13 =     ISNULL(SUM(Acumul), 0),
            @v13u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '13'
    
    SELECT  @v14 =     ISNULL(SUM(Acumul), 0),
            @v14u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '14'
    
    SELECT  @v15 =     ISNULL(SUM(Acumul), 0),
            @v15u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '15'
    
    SELECT  @v16 =     ISNULL(SUM(Acumul), 0),
            @v16u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '16'
    
    SELECT  @v17 =     ISNULL(SUM(Acumul), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '17'
    
    SELECT  @v18 =     ISNULL(SUM(Acumul), 0),
            @v18u =    ISNULL(SUM(PeriIni), 0)
    FROM    #TempRatios
    WHERE   cod_tcta = '18'
    
    SELECT @FecIni = (SELECT desde FROM CONTPERI pe WHERE orden = 0 AND id_ejer = @id_ejer)
    SELECT @FecFin = (SELECT hasta FROM CONTPERI pe WHERE id_peri = @id_peri AND id_ejer = @id_ejer)
    
    SELECT @cdias  = DATEDIFF(DAY, @FecIni, @FecFin)
    
    --SELECT @v04
    --SELECT @v12
    --SELECT (CASE (-(@vcapi + @vcapiu + @v14 + @v14u) / 2) WHEN 0 THEN 0 ELSE ABS(ROUND(((-@v12 / (-(@vcapi + @vcapiu + @v14 + @v14u) / 2))), 2, 1)) END) * (CASE @v12 WHEN 0 THEN 0 ELSE ((@vbenef * 100) / @v12) END)
	
	INSERT INTO #Ratios
	(
		ActCircul,
		ObliCorPla,
		RatioLiq,
		
		EfecPorCob,
		RatioTeso1,
		
		Efec,
		RatioTeso2,
		
		PorCobrar,
		CDias,
		Ingresos,
		RatioCredMedCC,
		
		Costo,
		Inventario,
		RatioRotStock,
		
		PorPagar,
		Compras,
		RatioCredMedCP,
		
		Capital,
		Obligaciones,
		Solvencia1,
		
		Solvencia2,
		
		ObliLarPla,
		ActivosFijos,
		CobeInmovil,
		
		Beneficio,
		RecPropios,
		RenRecuProp,
		
		RecPermanentes,
		RenPermanentes,
		
		RotacionInver,
		
		Ventas,
		RenVentas,
		
		RenInversion,
		
		DeudasCapi,
		
		Activo,
		RenActivo
		
	)VALUES
	(
		-- ActCircul
		ABS((-(@v02 + @v03 + @v05 + @v13 + @v16 + @v18))),
		-- ObliCorPla
		ABS((@v01 + @v17)),
		-- RatioLiq
		CASE (@v01 + @v17) WHEN 0 THEN 0 ELSE ABS(ROUND((-(@v02 + @v03 + @v05 + @v13 + @v16 + @v18) / (@v01 + @v17)), 2, 1)) END,
		
		-- EfecPorCob
		ABS((-(@v05 + @v18 + @v03 + @v02))),
		-- RatioTeso1
		CASE (@v01 + @v17) WHEN 0 THEN 0 ELSE ABS(ROUND((-(@v05 + @v18 + @v03 + @v02) / (@v01 + @v17)), 2, 1)) END,
		
		-- Efec
		ABS((-(@v05 + @v18))),
		-- RatioTeso2
		CASE (@v01 + @v17) WHEN 0 THEN 0 ELSE ABS(ROUND((-(@v05 + @v18) / (@v01 + @v17)), 2, 1)) END,
		
		-- PorCobrar
		ABS((-(@v02 + @v03 + @v02u + @v03u) / 2)),
		-- CDias
		@cdias,
		-- Ingresos
		ABS((@v12)),
		-- RatioCredMedCC
		CASE @v12 WHEN 0 THEN 0 ELSE ABS(ROUND((-(((@v02 + @v03 + @v02u + @v03u) / 2) *  @cdias) / @v12), 2, 1)) END,
		
		-- Costo
		ABS(@v06),
		-- Inventario
		ABS(((@v13 + @v13u) / 2)),
		-- RatioRotStock
		CASE (@v13 + @v13u) WHEN 0 THEN 0 ELSE ABS(ROUND((@v06 / ((@v13 + @v13u) / 2)), 2, 1)) END,
		
		-- PorPagar
		ABS((-@v01)),
		-- Compras
		ABS((@v01cred)),
		-- RatioCredMedCP
		CASE @v01cred WHEN 0 THEN 0 ELSE ABS(ROUND(((-@v01 * @cdias) / (@v01cred)), 2, 1)) END,
		
		-- Capital
		ABS(-(@vcapi)),
		-- Obligaciones
		ABS((@v01 + @v17 + @v14)),
		-- Solvencia1
		CASE (@v01 + @v17 + @v14) WHEN 0 THEN 0 ELSE ABS(ROUND(-(@vcapi) / (@v01 + @v17 + @v14), 2, 1)) END,
		
		-- Solvencia2
		CASE (@v01 + @v17 + @v14) WHEN 0 THEN 0 ELSE ABS(ROUND(-(@v02 + @v03 + @v05 + @v13 + @v16 + @v18) / (@v01 + @v17 + @v14), 2, 1)) END,
		
		-- ObliLarPla
		ABS(@v14),
		-- ActivosFijos
		ABS((@v11 + @v15)),
		-- CobeInmovil
		CASE (@v11 + @v15) WHEN 0 THEN 0 ELSE ABS(ROUND((-(@vcapi + @v14) / (@v11 + @v15)), 2, 1)) END,
		
		-- Beneficio
		ABS(@vbenef),
		-- RecPropios
		ABS(((@vcapi + @vcapiu) /*/ 2*/)),
		-- RenRecuProp
		(CASE (@vcapi + @vcapiu) 
			WHEN 0 THEN 0
			ELSE ABS(ROUND((@vbenef * 100) / ((@vcapi + @vcapiu) /*/ 2*/), 2, 1)) 
			END),
			
		-- RecPermanentes
		ABS((-(@vcapi + @vcapiu + @v14 + @v14u) /*/ 2*/)),
		-- RenPermanentes
		CASE -(@vcapi + @vcapiu + @v14 + @v14u) WHEN 0 THEN 0 ELSE ABS(ROUND(((-@vbenef) * 100) / (-(@vcapi + @vcapiu + @v14 + @v14u) /*/ 2*/), 2, 1)) END,
		
		-- RotacionInver
		CASE -(@vcapi + @vcapiu + @v14 + @v14u) WHEN 0 THEN 0 ELSE ABS(ROUND((-@v12 / (-(@vcapi + @vcapiu + @v14 + @v14u) /*/ 2*/)), 2, 1)) END,
		
		-- Ventas
		ABS(@v12),
		-- RenVentas
		CASE @v12 WHEN 0 THEN 0 ELSE ABS(((@vbenef * 100) / @v12)) END,
		
		-- RenInversion
		(CASE (-(@vcapi + @vcapiu + @v14 + @v14u) /*/ 2*/) WHEN 0 THEN 0 ELSE ABS(ROUND(((-@v12 / (-(@vcapi + @vcapiu + @v14 + @v14u) /*/ 2*/))), 2, 1)) END) * (CASE @v12 WHEN 0 THEN 0 ELSE ((@vbenef * 100) / @v12) END),
		
		-- DeudasCapi
		(CASE @vcapi WHEN 0 THEN 0 ELSE ABS(ROUND(@v14 / @vcapi, 2, 1)) END),
		
		-- Activo
		ABS((((@v02 + @v02u + @v03 + @v03u + @v05 + @v05u + @v13 + @v13u + @v16 + @v16u + @v18 + @v18u) /*/ 2*/ 
			+ (@v11 + @v11u + @v04 + @v04u + @v15 + @v15u + @v16 + @v16u) /*/ 2*/))),
		-- RenActivo
		CASE ((@v02 + @v02u + @v03 + @v03u + @v05 + @v05u + @v13 + @v13u + @v16 + @v16u + @v18 + @v18u) /*/ 2*/ 
			+ (@v11 + @v11u + @v04 + @v04u + @v15 + @v15u + @v16 + @v16u) /*/ 2*/)
			WHEN 0 THEN 0 ELSE ABS(ROUND(
				(-@v12 / ((@v02 + @v02u + @v03 + @v03u + @v05 + @v05u + @v13 + @v13u + @v16 + @v16u + @v18 + @v18u) /*/ 2*/ 
				+ (@v11 + @v11u + @v04 + @v04u + @v15 + @v15u + @v16 + @v16u) /*/ 2*/))
		    , 2, 1))
		    END
	)
	
	SELECT *, 
	       @Ejercicio     AS Ejercicio,
		   @Periodo       AS Periodo,
		   @TitEmpresa    AS TitEmpresa,
		   @Moneda        AS Moneda
	FROM #Ratios

	RETURN

END
