ALTER PROCEDURE [dbo].[sp_conAnalisisCtaCte] 
(
@fecini DATE,
@fecfin DATE,
@ctacteini VARCHAR(10),
@ctactefin VARCHAR(10),
@ctaini VARCHAR(10),
@ctafin VARCHAR(10),
@solosaldo VARCHAR(5),
@unineg INT = 0,
@clasificacion INT = 1,
@betaCtaCte VARCHAR(5)='false',
@total INT = 0,
@fecVen DATE = Null,
@fecEmi DATE = Null
)
AS

SET @betaCtaCte = UPPER(@betaCtaCte)
SET @solosaldo = UPPER(@solosaldo)

if @betaCtaCte = 'false'
begin

	set @betactacte = (select case betaCtaCte 
								when 0 then 'false' 
								when 1 then 'true'
								end as betactacte
						from conParametros)

end


IF @betaCtaCte = 'TRUE'
BEGIN

	
    --DECLARE @COMPROBANTES TABLE (TipoComprobante varchar(500),
    --                                    numero bigint,
    --                                    cuenta varchar(100),
    --                                    linea bigint,
    --                                    NombreCuenta varchar(500),
    --                                    clasificacion bigint,
    --                                    fecha date,
    --                                    debe decimal(18,4),
    --                                    haber decimal(18,4),
    --                                    glosa_linea varchar(500),
    --                                    ctacte bigint,
    --                                    digcte varchar(5),
    --                                    nomcte varchar(500),
    --                                    tipo_docto bigint,
    --                                    num_docto bigint,
    --                                    vencimiento date,
    --                                    tipoAnalisis bigint,
    --                                    analisis bigint,
    --                                    descanalisis varchar(500),
    --                                    tipo bigint,
    --                                    uni_negocio bigint,
    --                                    sistema varchar(20),
    --                                    descripcion varchar(500),
    --                                    alias_doc varchar(50)
				--						INDEX ix_tempIndexForUpdateSaldos NONCLUSTERED (cuenta, ctacte, tipo_docto, num_docto))


    --        DECLARE @tabla TABLE (TipoComprobante varchar(500),
    --                                    numero int,
    --                                    cuenta varchar(50),
    --                                    linea int,
    --                                    NombreCuenta varchar(500),
    --                                    clasificacion int,
    --                                    fecha date,
    --                                    debe decimal(18,4),
    --                                    haber decimal(18,4),
    --                                    glosa_linea varchar(500),
    --                                    ctacte int,
    --                                    digcte varchar(5),
    --                                    nomcte varchar(500),
    --                                    tipo_docto int,
    --                                    num_docto bigint,
    --                                    vencimiento date,
    --                                    tipoAnalisis int,
    --                                    analisis int,
    --                                    descanalisis varchar(500),
    --                                    tipo int,
    --                                    uni_negocio int,
    --                                    sistema varchar(10),
    --                                    descripcion varchar(500),
    --                                    saldo_docto decimal(18,4),
    --                                    alias_doc varchar(50)
				--						INDEX ix_tempIndexForUpdateSaldos NONCLUSTERED ( tipo_docto, saldo_docto))

            --INSERT INTO @COMPROBANTES

                SELECT
                CONVERT(VARCHAR(1), C.TipoComprobante) AS TipoComprobante
                ,C.numeroComprobante as numero
                ,C.cuenta
                ,C.linea
                ,C.nombrecuenta AS NombreCuenta
                ,C.clasificacion
                ,C.fecha
                ,C.debe
                ,C.haber
                ,C.glosa_linea
                ,C.ctacte
                ,C.digcte
                ,C.nomcte
                ,C.tipo_docto
                ,C.num_docto
                ,C.vencimiento
                ,C.tipoAnalisis
                ,C.analisis
                ,C. descanalisis
                ,C.tipoComprobante AS tipo
                ,C.uni_negocio
                ,C.sistema 
                ,CASE 
				WHEN C.descripcion = '' THEN 'SIN UNIDAD' 
				WHEN C.descripcion IS NULL THEN 'SIN UNIDAD'
				ELSE C.descripcion
				END AS descripcion
                ,alias_doc
                INTO #COMPROBANTES
                FROM ConAnalisisCtacte AS C
				INNER JOIN conPlanCuentas AS PC
					ON C.cuenta = PC.cuenta
					AND YEAR(C.fecha) = PC.periodo
                            
                WHERE (CONVERT(DATE, C.fecha) BETWEEN @fecini AND @fecfin)
                AND (C.ctacte > 0)
                AND (C.ctacte = @ctacteini OR @ctacteini = 0)
                AND (C.cuenta BETWEEN @ctaini AND @ctafin)
                AND ((C.uni_negocio = @unineg
					OR @unineg = -1) or (C.uni_negocio = @unineg
					OR @unineg = 0))
                --AND (COALESCE(C.uni_negocio, 0) = @unineg
                --OR @unineg = -1)
                AND (LEN(C.sistema) >= 2)
                AND (C.clasificacion = 1
                OR C.clasificacion = @clasificacion)
				AND (PC.marcaCtacte = 1)
                --and (num_docto>0 and tipo_docto>0)
                --ORDER BY C.ctacte, C.tipo_docto, C.num_docto, C.periodo, C.numeroComprobante



            --INSERT INTO @tabla
                                    
                SELECT
                    TipoComprobante
                ,numero
                ,cuenta
                ,linea
                ,NombreCuenta
                ,clasificacion
                ,fecha
                ,debe
                ,haber
                ,glosa_linea
                ,ctacte
                ,digcte
                ,nomcte
                ,tipo_docto
                ,num_docto
                ,vencimiento
                ,tipoAnalisis
                ,analisis
                ,descanalisis
                ,tipo
                ,uni_negocio 
                ,sistema  
                ,descripcion
                ,convert(decimal (18,2), (SELECT
					SUM(convert(decimal (18,2),debe) - convert(decimal (18,2),haber))
                        FROM #COMPROBANTES AS C2
                        WHERE (C2.cuenta = C.cuenta)
                        AND (C2.ctacte = C.ctacte)
                        AND (C2.tipo_docto = C.tipo_docto)
                        AND (C2.num_docto = C.num_docto)))
                    AS saldo_docto 
				
                ,alias_doc
				INTO #A
                FROM #COMPROBANTES C
        

                SELECT
                    A.TipoComprobante
                ,A.numero
                ,A.cuenta
                ,A.linea
                ,A.NombreCuenta
                ,A.clasificacion
                ,A.fecha
                ,A.debe
                ,A.haber
                ,A.glosa_linea
                ,A.ctacte
                ,A.digcte
                ,A.nomcte
                ,A.tipo_docto
                ,A.num_docto
                ,A.vencimiento
                ,A.tipoAnalisis
                ,A.analisis
                ,A.descanalisis
                ,A.tipo
                ,A.uni_negocio 
                ,A.descripcion  
                ,A.sistema
                ,A.saldo_docto
                ,A.alias_doc
                ,CASE
                        WHEN A.sistema IN ('VEN', 'CYV') THEN A.alias_doc + ' N° ' + CONVERT(VARCHAR(500), num_docto) + ' DOBLE CLICK PARA ABRIR DOCUMENTO'
                        ELSE A.alias_doc + ' N° ' + CONVERT(VARCHAR(500), num_docto)
                    END tooltipdoc
                FROM #A A
                WHERE (convert(decimal (18,2), saldo_docto) <> 0
                OR @solosaldo = 'FALSE')
                AND convert(int, A.tipo_docto) > 0

                UNION ALL

                SELECT
                    A.TipoComprobante
                ,A.numero
                ,A.cuenta
                ,A.linea
                ,A.NombreCuenta
                ,A.clasificacion
                ,A.fecha
                ,A.debe
                ,A.haber
                ,A.glosa_linea
                ,A.ctacte
                ,A.digcte
                ,A.nomcte
                ,A.tipo_docto
                ,A.num_docto
                ,A.vencimiento
                ,A.tipoAnalisis
                ,A.analisis
                ,A.descanalisis
                ,A.tipo
                ,A.uni_negocio 
                ,A.descripcion  
                ,A.sistema
                ,A.saldo_docto
                ,'NO DEFINIDO' AS alias_doc
                ,'' AS tooltipdoc
                FROM #A A
                WHERE (convert (decimal(18,2),saldo_docto) <> 0
                OR @solosaldo = 'FALSE')
                AND convert(int, A.tipo_docto) = 0
                --ORDER BY 11, 14, 16

		

			IF @total = 1
			BEGIN
				SELECT
					ctacte
				   ,SUM(debe) - SUM(haber) AS saldototal
				FROM #COMPROBANTES
				GROUP BY ctacte
				UNION ALL
				SELECT
					0 AS ctacte
				   ,0 AS saldototal
			END
	END
ELSE
	BEGIN
		--DECLARE @COMPROBANTES2 TABLE (TipoComprobante varchar(500),
		--							 numero bigint,
		--							 cuenta varchar(100),
		--							 linea bigint,
		--							 NombreCuenta varchar(500),
		--							 clasificacion bigint,
		--							 fecha date,
		--							 debe decimal(18,4),
		--							 haber decimal(18,4),
		--							 glosa_linea varchar(500),
		--							 ctacte bigint,
		--							 digcte varchar(5),
		--							 nomcte varchar(500),
		--							 tipo_docto bigint,
		--							 num_docto bigint,
		--							 vencimiento date,
		--							 tipoAnalisis bigint,
		--							 analisis bigint,
		--							 descanalisis varchar(500),
		--							 tipo bigint,
		--							 uni_negocio bigint,
		--							 sistema varchar(20),
		--							 descripcion varchar(500))

		--DECLARE @tablaA TABLE (TipoComprobante varchar(500),
		--							 numero int,
		--							 cuenta varchar(50),
		--							 linea int,
		--							 NombreCuenta varchar(500),
		--							 clasificacion int,
		--							 fecha date,
		--							 debe decimal(18,4),
		--							 haber decimal(18,4),
		--							 glosa_linea varchar(500),
		--							 ctacte int,
		--							 digcte varchar(5),
		--							 nomcte varchar(500),
		--							 tipo_docto int,
		--							 num_docto bigint,
		--							 vencimiento date,
		--							 tipoAnalisis int,
		--							 analisis int,
		--							 descanalisis varchar(500),
		--							 tipo int,
		--							 uni_negocio int,
		--							 sistema varchar(10),
		--							 descripcion varchar(500),
		--							 saldo_docto decimal(18,4))

		--INSERT INTO @COMPROBANTES2

			SELECT
				TC.descripcion AS TipoComprobante
			   ,C.numero
			   ,C.cuenta
			   ,C.linea
			   ,PC.descripcion AS NombreCuenta
			   ,C.clasificacion
			   ,C.fecha
			   ,C.debe
			   ,C.haber
			   ,C.glosa_linea
			   ,C.ctacte
			   ,CC.digcte
			   ,CC.nomcte
			   ,C.tipo_docto
			   ,C.num_docto
			   ,C.vencimiento
			   ,PC.tipoAnalisis
			   ,C.analisis
			   ,conAnalisis.descripcion AS descanalisis
			   ,C.tipo
			   ,C.uni_negocio
			   ,C.sistema 
			   ,CASE 
				WHEN CUN.descripcion = '' THEN 'SIN UNIDAD' 
				WHEN CUN.descripcion IS NULL THEN 'SIN UNIDAD'
				ELSE CUN.descripcion
				END AS descripcion
				,C.fecha_emision
			   INTO #COMPROBANTES2
			FROM conComprobantes AS C
			INNER JOIN conCtacte AS CC
				ON C.ctacte = CC.rutcte
				LEFT OUTER  JOIN conUnidadNegocio as CUN
			ON C.uni_negocio = CUN.idUniNeg
				INNER JOIN conTipoComprobante AS TC
				ON C.tipo = TC.codigo
			INNER JOIN conPlanCuentas AS PC
				ON C.cuenta = PC.cuenta
					AND YEAR(C.fecha) = PC.periodo
			LEFT OUTER JOIN conAnalisis
				ON PC.tipoAnalisis = conAnalisis.tipoAnalisis
					AND C.analisis = conAnalisis.codigoAnalisis
		
			WHERE (CONVERT(DATE, C.fecha) BETWEEN @fecini AND @fecfin)
			AND (C.ctacte = @ctacteini OR @ctacteini = 0)
			AND (C.ctacte > 0)
			AND (C.cuenta BETWEEN @ctaini AND @ctafin)
			AND ((C.uni_negocio = @unineg
					OR @unineg = -1) or (C.uni_negocio = @unineg
					OR @unineg = 0))
			--AND (COALESCE(C.uni_negocio, 0) = @unineg
			--OR @unineg = -1)
			AND (LEN(C.sistema) >= 2)
                AND (C.clasificacion = 1
                OR C.clasificacion = @clasificacion)
			AND (PC.marcaCtacte = 1)
			--and (num_docto>0 and tipo_docto>0)
			ORDER BY C.ctacte, C.tipo_docto, C.num_docto, C.periodo, C.numero



		--INSERT INTO @tablaA
							 	
			SELECT
				TipoComprobante
			   ,numero
			   ,cuenta
			   ,linea
			   ,NombreCuenta
			   ,clasificacion
			   ,fecha
			   ,debe
			   ,haber
			   ,glosa_linea
			   ,ctacte
			   ,digcte
			   ,nomcte
			   ,tipo_docto
			   ,num_docto
			   ,vencimiento
			   ,tipoAnalisis
			   ,analisis
			   ,descanalisis
			   ,tipo
			   ,uni_negocio 
			   ,sistema  
			   ,descripcion
			   ,convert(decimal (18,2), (SELECT
					SUM(convert(decimal (18,2),debe) - convert(decimal (18,2),haber))
					FROM #COMPROBANTES2 AS C2
					WHERE (C2.cuenta = C.cuenta)
					AND (C2.ctacte = C.ctacte)
					AND (C2.tipo_docto = C.tipo_docto)
					AND (C2.num_docto = C.num_docto)))
				AS saldo_docto 
				,fecha_emision
				INTO #A2
			FROM #COMPROBANTES2 C
	

			SELECT
				A.TipoComprobante
			   ,A.numero
			   ,A.cuenta
			   ,A.linea
			   ,A.NombreCuenta
			   ,A.clasificacion
			   ,A.fecha
			   ,A.debe
			   ,A.haber
			   ,A.glosa_linea
			   ,A.ctacte
			   ,A.digcte
			   ,A.nomcte
			   ,A.tipo_docto
			   ,A.num_docto
			   ,A.vencimiento
			   ,A.tipoAnalisis
			   ,A.analisis
			   ,A.descanalisis
			   ,A.tipo
			   ,A.uni_negocio 
			   ,A.descripcion  
			   ,A.sistema
			   ,A.saldo_docto
			   ,venDocumentos.alias_doc
			   ,CASE
					WHEN A.sistema IN ('VEN', 'CYV') THEN venDocumentosSii.Desdocsii + ' N° ' + CONVERT(VARCHAR(500), num_docto) + ' DOBLE CLICK PARA ABRIR DOCUMENTO'
					ELSE venDocumentosSii.Desdocsii + ' N° ' + CONVERT(VARCHAR(500), num_docto)
				END tooltipdoc
				,A.fecha_emision
			FROM #A2 A
			INNER JOIN venDocumentosSii
				ON convert(int,A.tipo_docto) = venDocumentosSii.codsii
			LEFT OUTER JOIN venDocumentos
				ON venDocumentosSii.codsii = venDocumentos.codsii
			WHERE (convert(decimal (18,2), saldo_docto) <> 0
			OR @solosaldo = 'FALSE')
			AND convert(int, A.tipo_docto) > 0
			AND (@fecVen IS NULL OR A.vencimiento <= @fecVen)
			AND (@fecEmi IS NULL OR A.fecha_emision <= @fecEmi)

			UNION ALL

			SELECT
				A.TipoComprobante
			   ,A.numero
			   ,A.cuenta
			   ,A.linea
			   ,A.NombreCuenta
			   ,A.clasificacion
			   ,A.fecha
			   ,A.debe
			   ,A.haber
			   ,A.glosa_linea
			   ,A.ctacte
			   ,A.digcte
			   ,A.nomcte
			   ,A.tipo_docto
			   ,A.num_docto
			   ,A.vencimiento
			   ,A.tipoAnalisis
			   ,A.analisis
			   ,A.descanalisis
			   ,A.tipo
			   ,A.uni_negocio 
			   ,A.descripcion  
			   ,A.sistema
			   ,A.saldo_docto
			   ,'NO DEFINIDO' AS alias_doc
			   ,'' AS tooltipdoc
				,A.fecha_emision
			FROM #A2 A
			WHERE (convert (decimal(18,2),saldo_docto) <> 0
			OR @solosaldo = 'FALSE')
			AND convert(int, A.tipo_docto) = 0
			AND (@fecVen IS NULL OR A.vencimiento <= @fecVen)
			AND (@fecEmi IS NULL OR A.fecha_emision <= @fecEmi)
			ORDER BY 11, 14, 16
	
			IF @total = 1
			BEGIN
				SELECT
					ctacte
				   ,SUM(debe) - SUM(haber) AS saldototal
				FROM #A2
				GROUP BY ctacte
				UNION ALL
				SELECT
					0 AS ctacte
				   ,0 AS saldototal
			END
END