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

CREATE PROCEDURE [dbo].[CPJ_Cuentas_Saldo_Anterior_Rpt]	@pJson VARCHAR(8000)
AS
SET NOCOUNT ON

/*Variables recibidas por parametro a traves del JSON*/
DECLARE @pModoDebug			    		TINYINT
DECLARE @pId_Usuario					SMALLINT
DECLARE @pFecha_Desde					DATETIME
DECLARE @pFecha_Hasta					DATETIME
DECLARE @pFlag_incluirSoloAsientos		TINYINT
DECLARE @pFlag_FiltrarId_CC				TINYINT
DECLARE @pId_Centro_Costo				CHAR(10)
DECLARE @pId_Plan_Cta					INT
DECLARE @pId_Unid_Negocio				CHAR(10)
DECLARE @pFlag_Desglozar_CC	    		TINYINT
DECLARE @pFlag_Excluir_Asientos_Cierre	TINYINT
DECLARE @pId_Alias_Cta_Contable			INT
DECLARE @pId_Cta_Contable			    INT

SET @pModoDebug						= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'ModoDebug')), 0)
SET @pId_Usuario					= ISNULL(CONVERT(SMALLINT, dbo.CF_JSON_VALUE(@pJson,'Id_Usuario')), 0)
SET @pFecha_Desde					= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Desde')), '19000101')
SET @pFecha_Hasta					= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJson,'Fecha_Hasta')), '19000101')
SET @pFlag_incluirSoloAsientos		= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_incluirSoloAsientos')), 0)
SET @pFlag_FiltrarId_CC				= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_FiltrarId_CC')), 0)
SET @pId_Centro_Costo				= ISNULL(CONVERT(Char(10), dbo.CF_JSON_VALUE(@pJson,'Id_Centro_Costo')), '')
SET @pId_Plan_Cta					= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Plan_Cta')), 0)
SET @pId_Unid_Negocio				= ISNULL(CONVERT(CHAR(10), dbo.CF_JSON_VALUE(@pJson,'Id_Unid_Negocio')), '')
SET @pFlag_Desglozar_CC				= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_Desglozar_CC')), 0)
SET @pFlag_Excluir_Asientos_Cierre	= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJson,'Flag_Excluir_Asientos_Cierre')), 0)
SET @pId_Alias_Cta_Contable			= ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJson,'Id_Alias_Cta_Contable')), 0)

/*FIN Variables recibidas por parametro a traves del JSON*/

/*Variables Locales*/
DECLARE @SqlStr						NVARCHAR(MAX)
DECLARE @TipoAsientoCierre			VARCHAR(8000)
DECLARE @Id_Cta_Contable			INT
DECLARE @Debe_Suma					DECIMAL(30,2)
DECLARE @Haber_Suma					DECIMAL(30,2)
DECLARE @Nro_Cta_Contable			VARCHAR(20)
DECLARE @Alias						DECIMAL(12,0)
DECLARE @Cta_Contable				VARCHAR(80)
DECLARE @Id_Centro_Costo			CHAR(10)
DECLARE @Centro_Costo				VARCHAR(200)
DECLARE @Anterior					DECIMAL(30,2)
DECLARE @Debe						DECIMAL(30,2)
DECLARE @Haber						DECIMAL(30,2)
DECLARE @Diferencia					DECIMAL(30,2)
DECLARE @Deudor						DECIMAL(30,2)
DECLARE @Acreedor					DECIMAL(30,2)
DECLARE @Columna_Bal				INT
DECLARE @Alias_Cta_Padre			DECIMAL(12,0)
DECLARE @PCE_Fecha_Inicio			DATETIME
DECLARE @PCE_Fecha_Cierre			DATETIME
DECLARE @Id_Ejercicio				INT
DECLARE @Flag_Existe_Registro_En_Cola TINYINT

/*FIN Variables Locales*/


BEGIN TRY
	IF(@pModoDebug = 1)
	BEGIN
		PRINT 'Ingreso a Stored Procedure: CPJ_Balance_Sumas_Saldos_Rpt'
		PRINT 'Parametros: '
		PRINT '@pId_Usuario: ' + CONVERT(VARCHAR(10), @pId_Usuario) + '. @pFecha_Desde: ' + CONVERT(VARCHAR(10), @pFecha_Desde, 112) + '. @pFecha_Hasta: ' + CONVERT(VARCHAR(10), @pFecha_Hasta, 112) +'. @pFlag_FiltrarId_CC: ' + CONVERT(VARCHAR(10), @pFlag_FiltrarId_CC) + '. @pId_Centro_Costo: ' + CONVERT(VARCHAR(10), @pId_Centro_Costo)
		PRINT '@pFlag_incluirSoloAsientos: ' + CONVERT(VARCHAR(10), @pFlag_incluirSoloAsientos) + '. @pId_Plan_Cta: ' + CONVERT(VARCHAR(10), @pId_Plan_Cta) + '. @pId_Unid_Negocio: ' + @pId_Unid_Negocio + '. @pFlag_Desglozar_CC: ' + CONVERT(VARCHAR(10), @pFlag_Desglozar_CC) + '. @pFlag_Excluir_Asientos_Cierre: ' + CONVERT(VARCHAR(10), @pFlag_Excluir_Asientos_Cierre) 
	END

	/*=============================================================================================================================*/

	IF(@pId_Usuario = 0)
	BEGIN
		SET @pId_Usuario = -1
	END
	
	IF(@pFecha_Desde = '19000101')								RAISERROR ('Fecha_Desde can not be blank.', 16,  1)
	IF(@pId_Plan_Cta = 0)										RAISERROR ('Id_Plan_Cta can not be zero.', 16,  1) 
	IF(@pFlag_FiltrarId_CC <> 0)
	BEGIN
		IF(@pId_Centro_Costo = '')								RAISERROR ('ID_Centro_Costo can not be blank.', 16,  1)
	END
	
	/*=============================================================================================================================*/
	SELECT 	@Id_Cta_Contable	=	ISNULL(Id_Cta_Contable, 0),
        	@pId_Cta_Contable   =	ISNULL(Id_Cta_Contable, 0)
		FROM Pla_Ctas_Cuentas_Contables 
		WHERE Alias = @pId_Alias_Cta_Contable
		AND Id_Plan_Cta	= @pId_Plan_Cta

	SET @TipoAsientoCierre = dbo.CF_xParam('Tipo_Asto_Cierre')
	SELECT 	@Id_Ejercicio	= ISNULL(Id_Ejercicio, 0) 	FROM Plan_Ctas 	WHERE 	Id_Plan_Cta = @pId_Plan_Cta

	SELECT 	@PCE_Fecha_Inicio = ISNULL(Fecha_Inicio, '19000101'),
			@PCE_Fecha_Cierre = ISNULL(Fecha_Cierre, '19000101')
			FROM Plan_Ctas_Ejercicios WHERE Id_Ejercicio = @Id_Ejercicio

	/*=============================================================================================================================*/
    Update Cbtes_Ctas_Contables  set Id_Centro_Costo = '' where Id_centro_costo is null
	Update Asientos_Items  set Id_Centro_Costo = '' where Id_centro_costo is null

	/*=============================================================================================================================*/
	/*=============================================================================================================================*/

	IF(@pModoDebug = 1)
	BEGIN
		PRINT ''
		PRINT 'ASIENTOS'
	END


    Select Id_Cta_Contable,Id_Centro_Costo into  #Asientos_Sumas_Saldos_ANTERIOR FROM  Asientos_Items where 1=0
	ALTER TABLE #Asientos_Sumas_Saldos_ANTERIOR ADD 
		        Saldo_Ant						DECIMAL(30,2)

    Select Id_Cta_Contable,Id_Centro_Costo into  #Cbtes_Sumas_Saldos_ANTERIOR FROM  CBTES_CTAS_CONTABLES where 1=0
	ALTER TABLE #Cbtes_Sumas_Saldos_ANTERIOR ADD 
	            Saldo_Ant						DECIMAL(30,2)

	/*========================================================Saldos de asientos =====================================================================*/

	SET @SqlStr = 'INSERT INTO #Asientos_Sumas_Saldos_ANTERIOR (Id_Cta_Contable, Id_Centro_Costo, Saldo_Ant) '

	SET @SqlStr =	RTRIM(LTRIM(@SqlStr))												+ CHAR(13) + 
					'SELECT '															+ CHAR(13) + 
					'Id_Cta_Contable, '													+ CHAR(13) 
	IF (@pFlag_Desglozar_CC = 0)	
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) +		
					''''' AS Id_Centro_Costo, '															+ CHAR(13)  
	ELSE
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) +		
					'I.Id_Centro_Costo , '				+ CHAR(13) 

	SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + 
					'SUM(ISNULL(I.Debe,0)-ISNULL(I.Haber,0)) as saldo_Ant'			+ CHAR(13) + 
					'FROM Asientos_Items I, Asientos A '								+ CHAR(13) + 
					'WHERE '															+ CHAR(13) + 
					'A.Id_Asiento = I.Id_Asiento '										+ CHAR(13) + 
					'AND A.Balanceado = 1 '												+ CHAR(13) + 
					'AND A.Id_Plan_Cta = '	+ CONVERT(VARCHAR(10), @pId_Plan_Cta)

	SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
					'AND A.Fecha < ''' + CONVERT(VARCHAR(10), @pFecha_Desde, 112) + ''' '


	IF(@pFlag_FiltrarId_CC <> 0)
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND I.Id_Centro_Costo = ''' + @pId_Centro_Costo + ''' '
	END

	IF(@pId_Unid_Negocio <> '')
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND A.Id_Unid_Negocio = ''' + @pId_Unid_Negocio + ''' '
	END

	IF(@pFlag_Excluir_Asientos_Cierre <> 0)
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND A.Id_Tipo_Asi NOT IN (' + @TipoAsientoCierre + ') '
	END

	IF(@pId_Cta_Contable <> 0)
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND I.Id_Cta_Contable = ' + CONVERT(VARCHAR(10), @pId_Cta_Contable) 
	END

	IF (@pFlag_Desglozar_CC = 0)
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) +
						'GROUP BY Id_Cta_Contable ORDER BY Id_Cta_Contable'
	ELSE
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) +
						'GROUP BY Id_Cta_Contable,Id_Centro_Costo ORDER BY Id_Cta_Contable,Id_Centro_Costo  '

	IF(@pModoDebug = 1)
	BEGIN
		PRINT ''
		PRINT 'Saldos de asientos @SqlStr: '
		PRINT @SqlStr
		PRINT ''
	END

	EXECUTE sp_executesql @SqlStr

	--select * from #Asientos_Sumas_Saldos_ANTERIOR WHERE SALDO_ANT <> 0

	/*=============================================================================================================================*/

	IF(@pModoDebug = 1)
	BEGIN
		PRINT ''
		PRINT 'COMPROBANTES'
	END

    Select Id_Cta_Contable,Id_Centro_Costo into  #Cbtes_Sumas_Saldos FROM  CBTES_CTAS_CONTABLES where 1=0

	ALTER TABLE #Cbtes_Sumas_Saldos ADD
	            Saldo_Ant						DECIMAL(30,2)


	SET @SqlStr = 'INSERT INTO #Cbtes_Sumas_Saldos_ANTERIOR (Id_Cta_Contable, Id_Centro_Costo, Saldo_Ant) '

	SET @SqlStr =	RTRIM(LTRIM(@SqlStr))												+ CHAR(13) + 
					'SELECT '															+ CHAR(13) + 
					'Id_Cta_Contable, '													+ CHAR(13)  
	IF (@pFlag_Desglozar_CC = 0)	
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) +		
					''''' as Id_Centro_Costo, '											+ CHAR(13)  
	ELSE
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) +		
					'ISNULL(I.Id_Centro_Costo,'''') as Id_Centro_Costo, '				+ CHAR(13) 
					 
	SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) +	
					'SUM(ISNULL(I.Debe,0)-ISNULL(I.Haber,0)) as saldo_Ant '			    + CHAR(13) + 

					'FROM Cbtes_Ctas_Contables I, Cbtes A, Cbtes_Tipos T '				+ CHAR(13) + 
					'WHERE '															+ CHAR(13) + 
					'A.Id_Trans = I.Id_Trans '											+ CHAR(13) + 
					'AND ISNULL(I.Id_Asiento, 0) = 0 '									+ CHAR(13) + 
					'AND A.Id_Tipo_Cbte = T.Id_Tipo_Cbte '								+ CHAR(13) + 
					'AND ISNULL(T.Compromete_Asientos, 0) <> 0 '						+ CHAR(13) + 
			    	'AND A.Id_Estado_Cbte not in (0,3)'


	SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
					'AND A.Periodo_Iva >= ''' + CONVERT(VARCHAR(10), @PCE_Fecha_Inicio, 112) + ''' '

	SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
					'AND A.Periodo_Iva < ''' + CONVERT(VARCHAR(10), @pFecha_Desde, 112) + ''' '

	IF(@pFlag_FiltrarId_CC <> 0)
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND I.Id_Centro_Costo = ''' + @pId_Centro_Costo + ''' '
	END

	IF(@pId_Unid_Negocio <> '')
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND T.Id_Unid_Negocio = ''' + @pId_Unid_Negocio + ''' '
	END

	IF(@pId_Cta_Contable <> 0)
	BEGIN
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) + 
						'AND I.Id_Cta_Contable = ' + CONVERT(VARCHAR(10), @pId_Cta_Contable) 
	END

	IF (@pFlag_Desglozar_CC = 0)
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) +
						'GROUP BY Id_Cta_Contable ORDER BY Id_Cta_Contable'
	ELSE
		SET @SqlStr =	RTRIM(LTRIM(@SqlStr)) + CHAR(13) +
						'GROUP BY Id_Cta_Contable,I.Id_Centro_Costo ORDER BY Id_Cta_Contable,I.Id_Centro_Costo  '

	IF(@pModoDebug = 1)
	BEGIN
		PRINT ''
		PRINT '@SqlStr: '
		PRINT @SqlStr
		PRINT ''
	END

	IF (@pFlag_incluirSoloAsientos = 0)       -- Si es solo asientos, no lo ejecuto
		EXECUTE sp_executesql @SqlStr

--		select * from #Cbtes_Sumas_Saldos_ANTERIOR


	/*=============================================================================================================================*/
    INSERT INTO  #Asientos_Sumas_Saldos_ANTERIOR  
          SELECT * FROM  #Cbtes_Sumas_Saldos_ANTERIOR 
 
    SELECT ID_CTA_CONTABLE,ID_CENTRO_COSTO,SUM(SALDO_ANT) AS ANTERIOR 
			INTO #Sumas_Saldos_Anteriores
			FROM #Asientos_Sumas_Saldos_ANTERIOR
			GROUP BY ID_CTA_CONTABLE,ID_CENTRO_COSTO

    SELECT * FROM #Sumas_Saldos_Anteriores
	
	/*=============================================================================================================================*/

	DROP TABLE #Sumas_Saldos_Anteriores
	DROP TABLE #Cbtes_Sumas_Saldos_ANTERIOR
	DROP TABLE #Asientos_Sumas_Saldos_ANTERIOR
	/*=============================================================================================================================*/
	
	IF(@pModoDebug = 1)
	BEGIN
		PRINT 'Fin Stored Procedure: CPJ_Balance_Sumas_Saldos_Rpt'
	END
END TRY  


BEGIN CATCH  
    EXECUTE usp_GetErrorInfo

	RETURN 9999
END CATCH

RETURN 0

/*

EXEC dbo.[CPJ_Cuentas_saldo_Anterior_Rpt] '{
										"ModoDebug":"1",
										"Id_Usuario":"-1",
										"Fecha_Desde":"01/02/2022",
                                        "Fecha_Hasta":"31/03/2022", 
										"Flag_incluirSoloAsientos":"0",
										"Flag_FiltrarId_CC":"0",
										"Id_Centro_Costo":"0",
										"Id_aLIAS_Cta_Contable":"506",
										"Id_Plan_Cta":"143",
										"Id_Unid_Negocio":"",
										"Flag_Desglozar_CC":"0",
										"Flag_Excluir_Asientos_Cierre":"0"
										}'


*/
