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

CREATE PROCEDURE [dbo].[CPJ_Clientes_ResumenCta] @pJsonRecibido VARCHAR(8000)
AS 
SET NOCOUNT ON
/*Parametros*/

DECLARE 	@pFechaDesde			DATETIME,
			@pFechaHasta			DATETIME,
			@pId_Unid_Negocio       VARCHAR(10),
			@pFiltrar_con_saldo     TINYINT,
			@pClientes_activos      TINYINT, 
			@pId_Cliente            INT

SET @pId_Unid_Negocio			= ISNULL(CONVERT(VARCHAR(10), dbo.CF_JSON_VALUE(@pJsonRecibido,'Id_Unid_Negocio')),'')
SET @pFechaDesde				= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJsonRecibido,'FechaDesde')),GETDATE())
SET @pFechaHasta				= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJsonRecibido,'FechaHasta')),GETDATE())
SET @pFiltrar_con_saldo			= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJsonRecibido,'Filtrar_con_saldo')),0)
SET @pClientes_activos			= ISNULL(CONVERT(TINYINT, dbo.CF_JSON_VALUE(@pJsonRecibido,'Clientes_activos')),0)
SET @pId_Cliente			    = ISNULL(CONVERT(INT, dbo.CF_JSON_VALUE(@pJsonRecibido,'Id_Cliente')),0)

/*Declaracion Variables Locales*/

DECLARE @Mensaje			VARCHAR(100)
		,@UltError			INT
		,@Id_Trans			INT
		,@Id_Cliente		INT
		,@Importe			DECIMAL(16,2)
		,@Email_Cob			VARCHAR(256)
		,@Id_Trans_Rec		INT
		,@CursorOpen        INT
		,@Flag_Cbte_Tipo	SMALLINT
		,@Periodo           DATE 
		,@Id_sucursal	    SMALLINT
		,@Venta_Total       DECIMAL(16,2)

					
BEGIN 
DECLARE @Agrupar_GF TinyInt
SET @Agrupar_GF =  dbo.CF_xParam('Cli_Ref_CtaCte_Agrup')

Select Id_Cliente_Ref
    	into #Clientes from Clientes where 1=0

IF @Agrupar_GF <> 1
   BEGIN
		If @pId_Cliente <> 0
           INSERT INTO #Clientes SELECT Id_Cliente as Id_Cliente_Ref 
										from Clientes where Id_Cliente = @pId_Cliente
		  Else
		   If @pClientes_activos = 1
              INSERT INTO #Clientes SELECT Id_Cliente as Id_Cliente_Ref 
										from Clientes where Activo = 1 and Id_cliente > 1
			Else
              INSERT INTO #Clientes SELECT Id_Cliente as Id_Cliente_Ref 
										from Clientes where Activo = 1 and Id_cliente > 1
   END
  ELSE
   BEGIN
		Select Id_cliente,Id_Cliente_Ref,Razon_Social
    			into #Clientes_Temp from Clientes where 1=0

		If @pId_Cliente <> 0
			 Insert Into #Clientes_Temp select Id_cliente, case ISNULL(Id_Cliente_Ref,0) 
										WHEN 0 THEN Id_Cliente
										ELSE Id_Cliente_Ref
										END AS Id_Cliente_Ref,Razon_Social
										from Clientes where Id_Cliente = @pId_Cliente
		  Else
		   If @pClientes_activos = 1
			  Insert Into #Clientes_Temp Select Id_cliente, case ISNULL(Id_Cliente_Ref,0) 
										WHEN 0 THEN Id_Cliente
										ELSE Id_Cliente_Ref
										END AS Id_Cliente_Ref,Razon_Social
										from Clientes where Activo = 1 and Id_cliente > 1
			Else
			  Insert Into #Clientes_Temp select Id_cliente, case ISNULL(Id_Cliente_Ref,0) 
										WHEN 0 THEN Id_Cliente
										ELSE Id_Cliente_Ref
										END AS Id_Cliente_Ref,Razon_Social
										from Clientes where  Id_cliente > 1

 
			 INSERT INTO #Clientes SELECT DISTINCT(Id_Cliente_Ref) FROM #Clientes_Temp
		END


    SELECT ID_UNID_NEGOCIO INTO #UN FROM Empresas_Unid_Negocios

    IF CAST(@pId_Unid_Negocio as int) <> 0
       DELETE #UN WHERE ID_UNID_NEGOCIO <> @pId_Unid_Negocio 


	CREATE TABLE #ACTIVO (ACTIVO TINYINT)
    INSERT INTO #ACTIVO (ACTIVO) VALUES (1)

	IF @pClientes_activos <> 1
	  INSERT INTO #ACTIVO (ACTIVO) VALUES (0)


	Select K.Id_Cliente_Ref AS Id_Cliente
			, CAST(sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Factura,0)) - sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Recibos,0)) AS DECIMAL(14,2)) AS Saldo
		Into #Resumen_Cta
		 from Cbtes_Tipos T, clientes c, cbtes F, #UN U, #ACTIVO A ,#Clientes K
		 where C.id_cliente = f.id_cliente
		 AND A.ACTIVO = C.ACTIVO
	     AND CASE ISNULL(C.Id_Cliente_Ref,0) 
								WHEN 0 THEN C.Id_Cliente
								ELSE C.Id_Cliente_Ref
								END = K.Id_Cliente_Ref
		 AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
		 and f.id_tipo_cbte = t.id_tipo_cbte
		 and (   
				(f.Id_Cond_Pago <> 1 and t.Compromete_Factura in (1,-1)) 
			  or t.Compromete_recibos in (1,-1)
			  )
		 and f.id_estado_cbte not in (0,3)
		 AND F.FECHA < dateadd(dd,1,@pFechaHasta)
		 group by K.Id_Cliente_Ref
		 

		IF @pFiltrar_con_saldo = 1
		      DELETE #Resumen_Cta WHERE ABS(SALDO) < 1


		alter table #Resumen_Cta add Sdo_Ant decimal(16,2),Debe decimal(16,2), Haber decimal(16,2)

		update #Resumen_Cta set Debe=0,Haber=0,Sdo_Ant=0

		Select K.Id_Cliente_Ref AS Id_Cliente
				, CAST(sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Factura,0)) - sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Recibos,0)) AS DECIMAL(14,2)) AS Sdo_Ant
		Into #Resumen_Sdo_Ant
		From Cbtes_Tipos T, clientes c, cbtes F, #UN U, #ACTIVO A, #Resumen_Cta R, #Clientes K
		Where c.id_cliente = f.id_cliente
	   	 AND A.ACTIVO = C.ACTIVO
	   	 and r.id_cliente = f.id_cliente
		 AND CASE ISNULL(C.Id_Cliente_Ref,0) 
								WHEN 0 THEN C.Id_Cliente
								ELSE C.Id_Cliente_Ref
								END = K.Id_Cliente_Ref
		 AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
		 and f.id_tipo_cbte = t.id_tipo_cbte
		 and (
				(f.Id_Cond_Pago <> 1 and t.Compromete_Factura in (1,-1) )
			  or t.Compromete_recibos in (1,-1)
			  )
		 and f.id_estado_cbte not in (0,3)
		 AND F.FECHA < @pFechaDesde 
		 group by K.Id_Cliente_Ref


		select K.Id_Cliente_Ref AS Id_Cliente
				,(sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Factura,0))) as debe
	    into #Resumen_Debe
		from Cbtes_Tipos T, cbtes F, #Resumen_Cta R, #UN U, Clientes C  ,#Clientes K
		where r.id_cliente = f.id_cliente
		AND c.id_cliente = f.id_cliente
		AND CASE ISNULL(C.Id_Cliente_Ref,0) 
								WHEN 0 THEN C.Id_Cliente
								ELSE C.Id_Cliente_Ref
								END = K.Id_Cliente_Ref
		AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
		and f.id_tipo_cbte = t.id_tipo_cbte
		and f.Id_Cond_Pago <> 1 and t.Compromete_Factura in (1) 
		and f.id_estado_cbte not in (0,3)
	    AND F.FECHA >= @pFechaDesde 
		AND F.FECHA < dateadd(dd,1,@pFechaHasta)
		group by K.Id_Cliente_Ref

		select K.Id_Cliente_Ref AS Id_Cliente
		       ,(sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Factura,0))) as Haber
		 into #Resumen_Haber
		 from Cbtes_Tipos T, cbtes F, #Resumen_Cta R, #UN U, Clientes C ,#Clientes K
		 where r.id_cliente = f.id_cliente
	 	 AND c.id_cliente = f.id_cliente
		 AND CASE ISNULL(C.Id_Cliente_Ref,0) 
								WHEN 0 THEN C.Id_Cliente
								ELSE C.Id_Cliente_Ref
								END = K.Id_Cliente_Ref
		 AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
		 and f.id_tipo_cbte = t.id_tipo_cbte
		 and f.Id_Cond_Pago <> 1 and t.Compromete_Factura in (-1) 
	  	 and f.id_estado_cbte not in (0,3)
		 AND F.FECHA >= @pFechaDesde 
		 AND F.FECHA < dateadd(dd,1,@pFechaHasta)
		 group by K.Id_Cliente_Ref
 
		Select  K.Id_Cliente_Ref AS Id_Cliente
				, sum(isnull(f.Imp_Total,0) * f.cotizacion * isnull(T.Compromete_Recibos,0)) as Recibos
		 into #Resumen_Rec
		 from Cbtes_Tipos T, cbtes F, #Resumen_Cta R, #UN U ,Clientes C ,#Clientes K
		 where r.id_cliente = f.id_cliente
		 AND c.id_cliente = f.id_cliente
		 AND CASE ISNULL(C.Id_Cliente_Ref,0) 
								WHEN 0 THEN C.Id_Cliente
								ELSE C.Id_Cliente_Ref
								END = K.Id_Cliente_Ref
		 AND T.Id_Unid_Negocio = U.Id_Unid_Negocio
		 and f.id_tipo_cbte = t.id_tipo_cbte
		 and t.Compromete_Recibos in (1,-1) 
		 and f.id_estado_cbte not in (0,3)
		 AND F.FECHA >= @pFechaDesde 
		 AND F.FECHA < dateadd(dd,1,@pFechaHasta)
		 group by K.Id_Cliente_Ref

		update #Resumen_Cta set Debe = D.Debe
		from #Resumen_Cta C,#Resumen_Debe D 
		Where C.Id_Cliente = D.Id_Cliente

		update #Resumen_Cta set  Haber = (H.Haber*-1) 
		from #Resumen_Cta C, #Resumen_Haber H
		Where C.Id_Cliente = H.Id_Cliente

		update #Resumen_Cta set  Haber = Haber + R.Recibos
		from #Resumen_Cta C, #Resumen_Rec R
		Where C.Id_Cliente = R.Id_Cliente

		update #Resumen_Cta set  Sdo_Ant = S.Sdo_Ant
		from #Resumen_Cta C, #Resumen_Sdo_Ant S
		Where C.Id_Cliente = S.Id_Cliente

	
		--SELECT * FROM #Resumen_Cta order by Razon_Social 
		SELECT c.Razon_Social,R.* FROM #Resumen_Cta R, Clientes C
		Where R.id_cliente = C.Id_Cliente
		AND R.Id_Cliente > 1
		 order by C.Razon_Social

		SELECT c.Id_Cliente,C.RAZON_SOCIAL,R.SALDO 
				INTO Z_RESCTA
		FROM #Resumen_Cta R, Clientes C
 
		Where R.id_cliente = C.Id_Cliente
		AND R.Id_Cliente > 1
		 order by C.Razon_Social


		DROP TABLE #Resumen_Cta
		DROP TABLE #Resumen_DEBE
        DROP TABLE #Resumen_HABER
        DROP TABLE #Resumen_REC
        DROP TABLE #UN
		DROP TABLE #ACTIVO
END

/*

EXEC dbo.CPJ_Clientes_ResumenCta   '{
			"FechaDesde":"20000101",
			"FechaHasta":"20230930",
		    "Filtrar_con_saldo":"1",
			"Clientes_activos":"0",
			"Id_Unid_Negocio":""
		}'

*/

-- drop table Z_RESCTA
