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


CREATE PROCEDURE [dbo].[CP_Iva_Posicion]  @pFechaDesde DATETIME, @pFechaHasta DATETIME,@pId_Unid_Negocio Char(10)
AS
SET NOCOUNT ON

DECLARE @PERIODOS DATETIME
       ,@ID_UNID_NEGOCIO char(10)

Select Id_Unid_Negocio into #Posicion_Iva from Empresas_Unid_Negocios 

ALTER TABLE #Posicion_Iva ADD 
	 Periodo	        	DATETIME,
	 Deb_Fiscal_iva21       DECIMAL(14,2),
     Deb_Fiscal_iva10       DECIMAL(14,2),
	 Deb_Fiscal_iva27       DECIMAL(14,2),
     Cred_Fiscal_iva21      DECIMAL(14,2),
	 Cred_Fiscal_iva10      DECIMAL(14,2),
	 Cred_Fiscal_iva27      DECIMAL(14,2),
     Perc_iva               DECIMAL(14,2),
	 Reten_iva              DECIMAL(14,2),
	 Saldo_Ant              DECIMAL(14,2),
	 Empresa                VARCHAR(50)
	

	UPDATE #Posicion_Iva SET Periodo = @pFechaDesde,
	 Deb_Fiscal_iva21 = 0,
	 Deb_Fiscal_iva10 = 0,
     Deb_Fiscal_iva27 = 0,
     Cred_Fiscal_iva21 =0,
	 Cred_Fiscal_iva10 = 0,
	 Cred_Fiscal_iva27 = 0,
     Perc_iva = 0,
	 Reten_iva = 0,
	 Saldo_Ant = 0,
	 Empresa = ''

  DECLARE TagCbtesCursor CURSOR FOR  
    Select Id_Unid_Negocio from Empresas_Unid_Negocios 

	OPEN TagCbtesCursor

	FETCH NEXT FROM TagCbtesCursor INTO @ID_UNID_NEGOCIO

	WHILE @@FETCH_STATUS=0 
	BEGIN


	 SET @PERIODOS = DATEADD(MM,1,@pFechaDesde)
	 WHILE  @PERIODOS <= @pFechaHasta
	    BEGIN
		   INSERT #Posicion_Iva VALUES (@ID_UNID_NEGOCIO,@PERIODOS,0,0,0,0,0,0,0,0,0,'')	
		   SET @PERIODOS = DATEADD(MM,1,@PERIODOS)
		END	   
   	 	FETCH NEXT FROM TagCbtesCursor INTO @ID_UNID_NEGOCIO

	END
	CLOSE TagCbtesCursor
	DEALLOCATE TagCbtesCursor

	--select * from #Posicion_Iva

 SELECT substring(convert(nvarchar,c.Periodo_Iva,112),1,6)+'01' as Periodo,isnull(T.Id_Unid_Negocio,'') AS Id_Unid_Negocio
 ,SUM(ISNULL(IMP_IVA,0) * t.Compromete_Factura) as DEB_FISCAL_IVA21
 ,SUM(ISNULL(IMP_IVA2,0) * t.Compromete_Factura) as DEB_FISCAL_IVA10
 ,SUM(ISNULL(IMP_IVA3,0) * t.Compromete_Factura) as DEB_FISCAL_IVA27
  INTO #DEB_IVA
  FROM CBTES C, CBTES_TIPOS T
  WHERE C.Id_Tipo_Cbte =  T.Id_Tipo_Cbte
  AND T.Compromete_Factura in (1,-1) 
  AND T.Compromete_Impuestos IN (1,-1)
  AND C.ID_ESTADO_CBTE NOT IN (0,3)
  AND C.Periodo_Iva >= @pFechaDesde
  AND C.Periodo_Iva < @pFechaHasta
  GROUP BY substring(convert(nvarchar,c.Periodo_Iva,112),1,6)+'01',isnull(T.Id_Unid_Negocio,'')

  UPDATE #Posicion_Iva SET Deb_Fiscal_iva21 = D.Deb_Fiscal_iva21 ,Deb_Fiscal_iva10 = D.Deb_Fiscal_iva10 ,Deb_Fiscal_iva27 = D.Deb_Fiscal_iva27
     FROM #Posicion_Iva P, #DEB_IVA D WHERE P.PERIODO = D.PERIODO  AND P.Id_Unid_Negocio =  D.Id_Unid_Negocio




 SELECT substring(convert(nvarchar,c.Periodo_Iva,112),1,6)+'01' as Periodo,T.Id_Unid_Negocio as Id_Unid_Negocio
 ,SUM(ISNULL(IMP_IVA,0)) as CRED_FISCAL_IVA21
 ,SUM(ISNULL(IMP_IVA2,0)) as CRED_FISCAL_IVA10
 ,SUM(ISNULL(IMP_IVA3,0)) as CRED_FISCAL_IVA27
 INTO #CRED_IVA
  FROM CBTES C, CBTES_TIPOS T
  WHERE C.Id_Tipo_Cbte =  T.Id_Tipo_Cbte
  AND T.Compromete_COMPRAS in (1,-1) 
  AND T.Compromete_Impuestos IN (1,-1)
  AND C.ID_ESTADO_CBTE NOT IN (0,3)
  AND C.Periodo_Iva >= @pFechaDesde
  AND C.Periodo_Iva < @pFechaHasta
  GROUP BY substring(convert(nvarchar,c.Periodo_Iva,112),1,6)+'01',T.Id_Unid_Negocio

  UPDATE #Posicion_Iva SET Cred_Fiscal_iva21 = D.Cred_Fiscal_iva21 ,Cred_Fiscal_iva10 = D.Cred_Fiscal_iva10 ,Cred_Fiscal_iva27 = D.Cred_Fiscal_iva27
  FROM #Posicion_Iva P, #CRED_IVA D WHERE P.PERIODO = D.PERIODO AND P.Id_Unid_Negocio = D.Id_Unid_Negocio
 


 SELECT substring(convert(nvarchar,c.fecha,112),1,6)+'01' as Periodo,T.Id_Unid_Negocio as Id_Unid_Negocio ,SUM(R.IMPORTE) AS RETEN_IVA
  INTO #RETEN_IVA
  FROM CBTES C, CBTES_TIPOS T, CBTES_RETEN R, Cbtes_Reten_Tipos RT
  WHERE C.Id_Tipo_Cbte =  T.Id_Tipo_Cbte
  AND T.Compromete_COMPRAS in (1,-1) 
  AND T.Compromete_Impuestos IN (1,-1)
  AND C.ID_ESTADO_CBTE NOT IN (0,3)
  AND C.Periodo_Iva >= @pFechaDesde
  AND C.Periodo_Iva < @pFechaHasta
  AND C.ID_TRANS = R.ID_TRANS 
  AND R.Id_Tipo_Reten = RT.Id_Tipo_Reten
  AND RT.TIPO = 'R'
  AND RT.TIPO_IMP = 'V'
  GROUP BY substring(convert(nvarchar,c.fecha,112),1,6)+'01',T.Id_Unid_Negocio

  UPDATE #Posicion_Iva SET Reten_iva = D.Reten_iva 
  FROM #Posicion_Iva P, #RETEN_IVA D WHERE P.PERIODO = D.PERIODO AND P.Id_Unid_Negocio = D.Id_Unid_Negocio




  SELECT substring(convert(nvarchar,c.fecha,112),1,6)+'01' as Periodo,T.Id_Unid_Negocio ,sum(R.Importe)  AS PERC_IVA
  INTO #PERCEP_IVA
  FROM CBTES C, CBTES_TIPOS T, CBTES_RETEN R, Cbtes_Reten_Tipos RT
  WHERE C.Id_Tipo_Cbte =  T.Id_Tipo_Cbte
  AND T.Compromete_COMPRAS in (1,-1) 
  AND T.Compromete_Impuestos IN (1,-1)
  AND C.ID_ESTADO_CBTE NOT IN (0,3)
  AND C.Periodo_Iva >= @pFechaDesde
  AND C.Periodo_Iva < @pFechaHasta
  AND C.ID_TRANS = R.ID_TRANS 
  AND R.Id_Tipo_Reten = RT.Id_Tipo_Reten
  AND RT.TIPO = 'P'
  AND RT.TIPO_IMP = 'V'
  GROUP BY substring(convert(nvarchar,c.fecha,112),1,6)+'01',T.Id_Unid_Negocio

  UPDATE #Posicion_Iva SET Perc_iva = D.Perc_iva 
  FROM #Posicion_Iva P, #PERCEP_IVA D WHERE P.PERIODO = D.PERIODO AND P.Id_Unid_Negocio = D.Id_Unid_Negocio

  
  update #Posicion_Iva set Saldo_Ant = D.Saldo
  FROM #Posicion_Iva P, Tab_Iva_Saldos D WHERE P.PERIODO = D.PERIODO AND P.Id_Unid_Negocio = D.Id_Unid_Negocio
 

 UPDATE #Posicion_Iva SET EMPRESA = E.DESCRIPCION FROM #Posicion_Iva P, Empresas_Unid_Negocios E 
        WHERE E.Id_Unid_Negocio = P.Id_Unid_Negocio

 If @pId_Unid_Negocio <> '_'
    BEGIN
	  select * from #Posicion_Iva WHERE (Deb_Fiscal_iva21+
		 Deb_Fiscal_iva10+ 
		 Deb_Fiscal_iva27+
		 Cred_Fiscal_iva21+
		 Cred_Fiscal_iva10+
		 Cred_Fiscal_iva27+
		 Perc_iva+
		 Saldo_Ant+
		 Reten_iva) <> 0 AND Id_Unid_Negocio = @pId_Unid_Negocio
    END
  ELSE
	BEGIN
	  select * from #Posicion_Iva WHERE (Deb_Fiscal_iva21+
		 Deb_Fiscal_iva10+ 
		 Deb_Fiscal_iva27+
		 Cred_Fiscal_iva21+
		 Cred_Fiscal_iva10+
		 Cred_Fiscal_iva27+
		 Perc_iva+
		 Saldo_Ant+
		 Reten_iva) <> 0 
	END



  drop table #Posicion_Iva
  DROP TABLE #RETEN_IVA
  DROP TABLE #PERCEP_IVA
  DROP TABLE #CRED_IVA
  DROP TABLE #DEB_IVA

  /*

  
 EXEC cP_IVA_Posicion '20230101','20230131',''

 */
