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

CREATE PROCEDURE [dbo].[CPJ_VTAS_POR_ZONA]  @pJsonRecibido VARCHAR(8000)	 

AS

DECLARE 	@Fecha_Desde		DATETIME,
			@Fecha_Hasta		DATETIME,
			@ID_PROVINCIA         TINYINT


SET @Fecha_Desde				= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJsonRecibido,'Fecha_Desde')),GETDATE())
SET @Fecha_Hasta				= ISNULL(CONVERT(DATETIME, dbo.CF_JSON_VALUE(@pJsonRecibido,'Fecha_Hasta')),GETDATE())
SET @ID_PROVINCIA	         	= ISNULL(CONVERT(CHAR(3), dbo.CF_JSON_VALUE(@pJsonRecibido,'Id_Provincia')),0)



--30/07/2021 Agregado
IF OBJECT_ID (N'VTAS_ZONA', N'U') IS NOT NULL 
BEGIN
	DROP TABLE VTAS_ZONA
END
--30/07/2021 FIN Agregado

CREATE TABLE VTAS_ZONA  (
			 ID_ZONA varchar(5)
			,Descripcion VARCHAR(300)
			,SDO_INICIAL  DECIMAL(16,2)
			,FACTURAS  DECIMAL(16,2)
			,DEBITOS  DECIMAL(16,2)
			,CREDITOS  DECIMAL(16,2)
			,COBRANZAS  DECIMAL(16,2)
			,DESCUENTOS  DECIMAL(16,2)
			,OTROS  DECIMAL(16,2)
			,SDO_FINAL  DECIMAL(16,2)
		)

INSERT INTO VTAS_ZONA (ID_ZONA, Descripcion,SDO_INICIAL,FACTURAS,DEBITOS,CREDITOS,COBRANZAS,DESCUENTOS,OTROS,SDO_FINAL) 
       select Id_ZONA,Descripcion,0,0,0,0,0,0,0,0 from Tab_Zonas  


  Declare @id_ZONA VARchar(5)
  Declare @Stock Decimal(17,4)
  Declare @Total Decimal(17,2)


-- SET @FECHA_DESDE = convert(char(6), @FECHA, 112) + '01' 


--Calculo FACTURAS
  Declare Cursor_FACTURAS Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION*T.Compromete_FACTURA) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND T.Compromete_FACTURA in (1) 
		AND (C.Fecha >= @FECHA_DESDE  and C.Fecha < @FECHA_HASTA +1 ) 
		AND T.Id_tributario in ('01','06','11')
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL*T.Compromete_FACTURA) <> 0
	
	OPEN Cursor_FACTURAS

	FETCH NEXT FROM Cursor_FACTURAS
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set FACTURAS = @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_FACTURAS
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_FACTURAS
	DEALLOCATE Cursor_FACTURAS


--Calculo DEBITOS
  Declare Cursor_DEBITOS Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION*T.Compromete_FACTURA) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND T.Compromete_FACTURA in (1) 
		AND (C.Fecha >= @FECHA_DESDE  and C.Fecha < @FECHA_HASTA+1 ) 
		AND T.Id_tributario NOT in ('01','06','11')
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL*T.Compromete_FACTURA) <> 0
	
	OPEN Cursor_DEBITOS

	FETCH NEXT FROM Cursor_DEBITOS
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set DEBITOS = @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_DEBITOS
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_DEBITOS
	DEALLOCATE Cursor_DEBITOS


--Calculo CREDITOS
  Declare Cursor_CREDITOS Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND T.Compromete_FACTURA in (-1) 
		AND (C.Fecha >= @FECHA_DESDE  and C.Fecha < @FECHA_HASTA +1 ) 
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_CREDITOS

	FETCH NEXT FROM Cursor_CREDITOS
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set CREDITOS = @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_CREDITOS
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_CREDITOS
	DEALLOCATE Cursor_CREDITOS

--Calculo Recibos
  Declare Cursor_Recibos Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND T.Compromete_RECIBOS in (1,-1) 
		AND (C.Fecha >= @FECHA_DESDE  and C.Fecha < @FECHA_HASTA +1 ) 
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_Recibos

	FETCH NEXT FROM Cursor_Recibos
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set COBRANZAS = @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_Recibos
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_Recibos
	DEALLOCATE Cursor_Recibos

--Calculo CREDITOS PARA EL SALDO ANTERIOR
  Declare Cursor_Recibos_SI Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND (T.Compromete_RECIBOS in (1,-1) OR T.Compromete_FACTURA IN (-1)) 
		AND C.Fecha <  @FECHA_DESDE
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_Recibos_SI

	FETCH NEXT FROM Cursor_Recibos_SI
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set SDO_INICIAL = SDO_INICIAL - @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_Recibos_SI
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_Recibos_SI
	DEALLOCATE Cursor_Recibos_SI

--Calculo DEBITOS PARA EL SALDO ANTERIOR
  Declare Cursor_DEBITOS_SI Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND  T.Compromete_FACTURA IN (1) 
		AND C.Fecha <  @FECHA_DESDE
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_DEBITOS_SI

	FETCH NEXT FROM Cursor_DEBITOS_SI
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set SDO_INICIAL = SDO_INICIAL + @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_DEBITOS_SI
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_DEBITOS_SI
	DEALLOCATE Cursor_DEBITOS_SI

/*
--Calculo CREDITOS PARA EL SALDO FINAL
  Declare Cursor_Recibos_SA Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND (T.Compromete_RECIBOS in (1,-1) OR T.Compromete_FACTURA IN (-1)) 
		AND C.Fecha < @FECHA_HASTA+1
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_Recibos_SA

	FETCH NEXT FROM Cursor_Recibos_SA
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set SDO_FINAL = SDO_FINAL - @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_Recibos_SA
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_Recibos_SA
	DEALLOCATE Cursor_Recibos_SA

--Calculo DEBITOS PARA EL SALDO FINAL
  Declare Cursor_DEBITOS_SA Cursor for

		SELECT I.ID_ZONA,SUM(C.IMP_TOTAL*C.COTIZACION) as TOTAL 
		 FROM CLIENTES I,Cbtes C,Cbtes_Tipos T , VTAS_ZONA M 
		WHERE I.Id_CLIENTE = C.Id_CLIENTE  AND C.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
		AND I.ID_ZONA = M.ID_ZONA
		AND C.Id_Estado_Cbte <> 3 
		AND  T.Compromete_FACTURA IN (1) 
		AND C.Fecha < @FECHA_HASTA+1
        GROUP BY I.ID_ZONA  having SUM(C.IMP_TOTAL) <> 0
	
	OPEN Cursor_DEBITOS_SA

	FETCH NEXT FROM Cursor_DEBITOS_SA
	INTO @Id_ZONA,@TOTAL

	WHILE @@FETCH_STATUS = 0
	BEGIN

		 update VTAS_ZONA set SDO_FINAL = SDO_FINAL + @TOTAL where  ID_ZONA = @Id_ZONA

	 	FETCH NEXT FROM Cursor_DEBITOS_SA
		INTO @Id_ZONA,@TOTAL
	END

	CLOSE Cursor_DEBITOS_SA
	DEALLOCATE Cursor_DEBITOS_SA
*/
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--OTROS = Retenciones de Recibos
DECLARE curCP_VTAS_POR_ZONA_Otros CURSOR FOR
SELECT CL.Id_Zona, SUM(CR.Importe) AS TOTAL 
FROM Clientes CL, Cbtes CB, Cbtes_Tipos T, Cbtes_Reten CR, VTAS_ZONA M 
WHERE 
CL.Id_Cliente = CB.Id_Cliente 
AND CB.Id_Tipo_Cbte = T.Id_Tipo_Cbte  
AND CL.Id_Zona = M.Id_Zona
AND CB.Id_Trans = CR.Id_Trans
AND CB.Id_Estado_Cbte <> 3 
AND T.Compromete_RECIBOS in (1,-1) 
AND (CB.Fecha >= @FECHA_DESDE AND CB.Fecha < @FECHA_HASTA +1 )  
GROUP BY CL.Id_Zona  
HAVING SUM(CB.Imp_Total) <> 0
	
OPEN curCP_VTAS_POR_ZONA_Otros
FETCH NEXT FROM curCP_VTAS_POR_ZONA_Otros INTO @Id_Zona, @Total
WHILE @@FETCH_STATUS = 0
BEGIN

	UPDATE VTAS_ZONA 
	SET
	OTROS = OTROS + @TOTAL 
	WHERE
	Id_Zona = @Id_ZONA

	FETCH NEXT FROM curCP_VTAS_POR_ZONA_Otros INTO @Id_Zona, @Total
END

CLOSE curCP_VTAS_POR_ZONA_Otros
DEALLOCATE curCP_VTAS_POR_ZONA_Otros

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--DESCUENTOS = Valor_Tipo AJU
DECLARE curCP_VTAS_POR_ZONA_Desc CURSOR FOR
SELECT CL.Id_Zona,SUM(VA.Importe) as TOTAL 
FROM Clientes CL, Cbtes CB, Cbtes_Tipos CT, Valores VA, VTAS_ZONA M 
WHERE 
CL.Id_Cliente = CB.Id_Cliente 
AND CB.Id_Tipo_Cbte = CT.Id_Tipo_Cbte  
AND CL.Id_Zona = M.Id_Zona
AND CB.Id_Trans = VA.Id_Trans
AND VA.Id_Tipo_Val = 'AJU'
AND CB.Id_Estado_Cbte <> 3 
AND CT.Compromete_RECIBOS in (1,-1) 
AND (CB.Fecha >= @FECHA_DESDE AND CB.Fecha < @FECHA_HASTA +1 ) 
GROUP BY CL.Id_Zona  
HAVING SUM(CB.Imp_Total) <> 0

OPEN curCP_VTAS_POR_ZONA_Desc
FETCH NEXT FROM curCP_VTAS_POR_ZONA_Desc INTO @Id_Zona, @Total
WHILE @@FETCH_STATUS = 0
BEGIN

	UPDATE VTAS_ZONA 
	SET
	DESCUENTOS = DESCUENTOS + @TOTAL 
	WHERE
	Id_Zona = @Id_ZONA

	FETCH NEXT FROM curCP_VTAS_POR_ZONA_Desc INTO @Id_Zona, @Total
END

CLOSE curCP_VTAS_POR_ZONA_Desc
DEALLOCATE curCP_VTAS_POR_ZONA_Desc

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--18/02/2022 Segun calculos que indico Florencia

UPDATE VTAS_ZONA SET COBRANZAS = COBRANZAS - DESCUENTOS - OTROS

--------------------------------------------------------------
UPDATE VTAS_ZONA SET SDO_FINAL = SDO_INICIAL + FACTURAS + DEBITOS - CREDITOS - COBRANZAS - DESCUENTOS - OTROS 


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

select Z.Id_zona_padre,P.Descripcion,V.id_zona + ' - ' + V.descripcion AS 'Zona' , SDO_INICIAL,FACTURAS,DEBITOS,CREDITOS,COBRANZAS,DESCUENTOS,OTROS,SDO_FINAL 
FROM VTAS_ZONA V, TAB_ZONAS Z, Tab_Zonas P
WHERE
V.Id_Zona <> ''	
AND V.ID_ZONA = Z.Id_Zona	--18/02/2022
AND Z.Id_Zona_Padre = P.Id_Zona
ORDER BY id_zona_padre,v.Id_Zona	--18/02/2022

DROP table VTAS_ZONA


--  CPJ_VTAS_POR_ZONA '{"Id_Provincia":"1","Fecha_Desde":"20211201","Fecha_Hasta":"20211231"}' 


-- SELECT *,SDO_INICIAL+FACTURAS+DEBITOS-CREDITOS-COBRANZAS-SDO_FINAL FROM VTAS_ZONA WHERE SDO_INICIAL+FACTURAS+DEBITOS-CREDITOS-COBRANZAS<>SDO_FINAL

-- SELECT * FROM TAB_ZONAS
