SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO

IF EXISTS (SELECT * FROM sys.objects 
   WHERE object_id = OBJECT_ID(N'WINV_Consumos_Seccion_RepInfo') )
DROP Procedure WINV_Consumos_Seccion_RepInfo
GO
 
Create PROCEDURE WINV_Consumos_Seccion_RepInfo
				@Cod_Desde varchar(20), 
				@Cod_Hasta varchar(20), 
				@List_Alma varchar(8000), 
				@List_Secc varchar(8000), 
				@Fdesde datetime, 
				@Fhasta datetime, 
				@Consumo bit,
				@Resumido bit
AS
/*
    Date: Mar 03,2016 
          Mar 07,2016
*/

BEGIN
	-- GM:En vez de cantidad_d en compras y traslados, la calculé a partir
	-- de cantidad porque por un error en las actualizaciones de compras y
	-- traslados, no se actualiza la cantidad_d en todos los casos y de dejarlo así,
	-- las operaciones ya hechas nunca darían bien.

   -- sp que devuelve el cursor para el reporte Consumo Global de ALmacen / Secciones
   -- las cantidades van en um de almacen o seccion segun el caso
   -- no se puede tomar nada del submayor (salvo inv.inic., cambios de cod y de um),
   -- porque se perderian los consumos hacia secciones de gasto, de insumos, de NCE, etc

	-- Ver en Constotqisecc, los casos q se consideran consumo.
	-- Aqui se seleccionan los datos para las otras columnas del reporte. Solo
	-- no se incluyen aqui las rebajas, invent y aj neg, porque solo se cuentan
	-- en los consumos. El resto de las cosas de consumo, se cuenta en consumo
	-- y aqui (entrada-consumo)

Set language us_english

	IF(LEN(@Cod_Desde) = 0)
	BEGIN
		SET @Cod_Desde = NULL
	END
	
	IF(LEN(@Cod_Hasta) = 0)
	BEGIN
		SET @Cod_Hasta = NULL
	END
	
	IF(LEN(@List_Alma) = 0)
	BEGIN
		SET @List_Alma = NULL
	END
	
	IF(LEN(@List_Secc) = 0)
	BEGIN
		SET @List_Secc = NULL
	END

--Declare @cod_desde varchar(20), 
--		@cod_hasta varchar(20), 
--		@list_alma varchar(8000), 
--		@list_secc varchar(8000), 
--		@fdesde datetime, 
--		@fhasta datetime, 
--		@consumo bit,
--		@resumido bit

--Set @cod_desde = '0101010'
--Set @cod_hasta = '0108007'
--Set @list_alma = null
--Set @list_secc = ''
--Set @fdesde    = '2016-01-01 00:00:00'
--Set @fhasta    = '2016-01-31 00:00:00'
--Set @consumo   = 1
--Set @resumido  = 0 

	Declare @cFilaI int,@cFilaF int,
		@cIdArticulo int,@cIdSeccion int,
		@cFilaMin int,
		@cFilaMax int,
		@Cantidad_Vendida  numeric(20, 4) =0,
		@Cantidad_Aumentos numeric(20, 4) =0,
		@Importe_Aumentos  numeric(20, 4) =0,
		@Cantidad_Disminucion numeric(20, 4) =0,
		@Importe_Disminucion  numeric(20, 4) =0 


--    drop table #T_Seccion_Articulos
      -- drop table #Lista_Grupo


/* ==============================
   Region 01
   ==============================
*/
	CREATE TABLE #T_Seccion_Articulos
	   (cRow int identity(1,1),
	    cFirst tinyint Default 0,
		Id_Almacen    int NULL,
		Id_Seccion    int NULL,
		Id_Articulo   int NULL,
		Cod_Articulo  varchar(50) NULL,
		Desc_Articulo varchar(250) NULL,
		Cantidad   numeric(20, 4) NULL,
		Importe    numeric(18, 2) NULL,
		Id_Dmov    int NULL,
		Fec_Oper   datetime NULL,
		Id_Unme    int NULL,
		Cant_Um    numeric(9, 4) NULL,
		cControl tinyint default 0,
		Cod_Alma  varchar(50) NULL,
		Desc_Alma varchar(250) NULL,
		Cod_Secc  varchar(50) NULL,
		Desc_Secc varchar(250) NULL,

		Cod_Unme   varchar(50) NULL,
		Desc_Unme  varchar(250) NULL,
		Existencia numeric(20, 4) NULL,
		Imp_Actual numeric(20, 4) NULL,
		Cod_Dest   varchar(50) NULL,
		Cod_Dmov   varchar(50) NULL,
		Desc_Dmov  varchar(250) NULL,
		Cod_Familia   varchar(50) NULL,
		Desc_Familia  varchar(250) NULL,
		Cod_Grupo    varchar(50) NULL,
		Desc_Grupo   varchar(250) NULL,
		Sant_Cantidad numeric(20, 4) default 0 NULL,
		Sant_Importe  numeric(18, 2) default 0 NULL,
		Cons_Cant     numeric(20, 4) default 0 NULL,
		Cons_Imp      numeric(18, 2) default 0 NULL,
		Inv_Inicial   numeric(20, 4) default 0 NULL,
		Inv_Inicial_Importe numeric(20, 4) default 0 NULL,
		Inv_Final numeric(20, 4) default 0 NULL,
		Inv_Final_Importe numeric(20, 4) default 0 NULL,
		Cantidad_Vendida  numeric(20, 4) default 0 NULL,
		Cantidad_Aumentos numeric(20, 4) default 0 NULL,
		Importe_Aumentos  numeric(20, 4) default 0 NULL,
		Cantidad_Disminucion numeric(20, 4) default 0 NULL,
		Importe_Disminucion  numeric(20, 4) default 0 NULL,
		Rotacion numeric(20, 4) default 0 )

		Create Table #Lista_Grupo
					(cRow int)


  
		Delete #T_Seccion_Articulos

/* ==============================
   Region 02
   ==============================
*/
	Insert Into #T_Seccion_Articulos
			 (Id_Almacen,Id_Seccion,
			  Id_Articulo,Cod_Articulo,Desc_Articulo,
			  Cantidad,Importe,
			  Id_Dmov,Fec_Oper,
			  Id_Unme,Cant_Um,
			  Cod_Alma,Desc_Alma,
			  Cod_Secc,Desc_Secc,
			  Cod_Unme,Desc_Unme,
			  Existencia,Imp_Actual,
			  Cod_Dest,
			  Cod_Dmov,Desc_Dmov,
			  Cod_Familia,Desc_Familia,
			  Cod_Grupo,Desc_Grupo,
			  Sant_Cantidad,Sant_Importe,
			  Cons_Cant,Cons_Imp)
	  Exec ConsSecc @Cod_desde,@Cod_hasta,
					@List_Alma,@List_Secc,
					@Fdesde,@Fhasta,
					@Consumo,@Resumido

	Delete #Lista_Grupo


	 Insert Into #Lista_Grupo(cRow)
 			 Select cRow  
				From 
				 (SELECT ROW_NUMBER() OVER(PARTITION BY 
						 Id_Articulo,Id_Seccion ORDER BY Id_Articulo DESC ) AS r,
		  				 cRow
					 FROM #T_Seccion_Articulos) as r 
					 Where r.r=1

	 Update #T_Seccion_Articulos
			Set cFirst = 1
			From #T_Seccion_Articulos a
				 Inner join #Lista_Grupo b on b.cRow = a.cRow 

/* ==============================
   Region 03
   ==============================
*/  

	Update #T_Seccion_Articulos
		  Set Inv_Inicial          = b.sant_cantidad,
			  Inv_Inicial_Importe  = b.sant_Importe,
			  Cantidad_Vendida     = 0
			  --Cantidad_Vendida     = b.Cantidad_Vendida
			  --Cantidad_Aumentos    = b.Cantidad_Aumentos,
			  --Importe_Aumentos     = b.Importe_Aumentos,
			  --Cantidad_Disminucion = b.Cantidad_Disminucion,
			  --Importe_Disminucion  = b.Importe_Disminucion
	          
		From ( 

   
		 Select id_articulo, 
			    sant_cantidad=coalesce(sant_cantidad,0.0000),
				sant_importe=coalesce(sant_importe,0.00),
				--cons_cant=coalesce(cons_cant,0.0000),
				--cons_imp=coalesce(cons_imp,0.00),
				Inv_Inicial = Coalesce(sant_cantidad,0.0000),
				Inv_Inicial_Importe = Coalesce(sant_Importe,0.0000),
				Inv_Final   = 0,
				Inv_Final_Importe=0
				
				--Cantidad_Vendida = 0
				--	  Cons_Cant/cant_unme_se +
				--	   abs(Case When su.Id_Dmov in(31,41,71,132,141,101,111,151,161)
				--				Then Cantidad 
				--				Else 0.0000 end),
				--Cantidad_Aumentos = 
				--			   Case When su.Id_Dmov in(0,1,2,31,32,320,42,5,6,9,72,102,112,131,142,152,162)
				--					Then (Select Sum(Cantidad) 
				--							 From #T_Seccion_Articulos
				--							 Where id_articulo = su.id_articulo
				--							   and id_seccion = Su.id_seccion )
				--					else 0.0000 end,
				--Importe_Aumentos = 
				--			  Case When su.Id_Dmov in(0,1,2,32,320,42,5,6,9,72,102,112,131,142,152,162)
				--				   Then (Select Sum(Importe) 
				--							From #T_Seccion_Articulos
				--							Where id_articulo = su.id_articulo
				--							   and id_seccion = Su.id_seccion )
				--					Else 0.0000 end ,
				--Cantidad_Disminucion = 
				--			abs(Case When su.Id_Dmov in(31,41,71,132,141,101,111,151,161)
				--					 Then (Select Sum(Cantidad) 
				--							  From #T_Seccion_Articulos
				--							  Where id_articulo = su.id_articulo
				--							   and id_seccion = Su.id_seccion )
				--						Else 0.0000 End) ,
				--Importe_Disminucion = 
				--			abs(Case When su.Id_Dmov in(31,41,71,132,141,101,111,151,161)
				--					 Then (Select Sum(Importe) 
				--							  From #T_Seccion_Articulos
				--							  Where id_articulo = su.id_articulo
				--							   and id_seccion = Su.id_seccion )
				--					 else 0.0000 end)                          
		   From #T_Seccion_Articulos su
				inner join stokarti arti on su.id_articulo = arti.id_arti) b
			Where #T_Seccion_Articulos.Id_articulo = b.Id_articulo 	 


	Select @cFilaI = MIN(cRow),
	       @cFilaF=MAX(cRow)
	From #T_Seccion_Articulos 


	While @cFilaI <= @cFilaF
	Begin
	 
	 Select @cIdArticulo = Id_Articulo,
			@cIdSeccion  = Id_Seccion
		From #T_Seccion_Articulos 
		Where cRow = @cFilaI
	    
	 Select @cFilaMin = Min(cRow),
			@cFilaMax = MAX(cRow)
		From #T_Seccion_Articulos
		Where id_Articulo = @cIdArticulo
		  and id_Seccion  = @cIdSeccion 
		  
		  
     Select @Cantidad_Vendida = 
              Cons_Cant/cant_unme_se +
					   abs(Case When Id_Dmov in(31,41,71,132,141,101,111,151,161)
								Then Cantidad
								Else  0 End )
        From #T_Seccion_Articulos
        inner join stokarti arti on id_articulo = arti.id_arti
        Where id_Articulo = @cIdArticulo
		  and id_Seccion  = @cIdSeccion 		   

     Select @Cantidad_Aumentos = sum(ISNULL(Cantidad, 0)),
            @Importe_Aumentos  = SUM(ISNULL(Importe, 0)) 
        From #T_Seccion_Articulos
        Where id_Articulo = @cIdArticulo
		  and id_Seccion  = @cIdSeccion 
		  and Id_Dmov in(0,1,2,32,320,42,5,6,9,72,102,112,131,142,152,162)

	
	 Select @Cantidad_Disminucion = sum(ISNULL(Cantidad, 0)),
            @Importe_Disminucion  = sum(ISNULL(Importe, 0))
        From #T_Seccion_Articulos
        Where id_Articulo = @cIdArticulo
		  and id_Seccion  = @cIdSeccion 
		  and Id_Dmov in(31,41,71,132,141,101,111,151,161)

		
	Update #T_Seccion_Articulos
	    Set Cantidad_Vendida = ISNULL(@Cantidad_Vendida, 0),
	        Cantidad_Aumentos = ISNULL(@Cantidad_Aumentos, 0),
	        Importe_Aumentos = ISNULL(@Importe_Aumentos, 0),
	        Cantidad_Disminucion = ISNULL(@Cantidad_Disminucion, 0),
	        Importe_Disminucion = ISNULL(@Importe_Disminucion, 0)
	    Where cRow = @cFilaMin

   --select @Cantidad_Vendida,
   --       @Cantidad_Aumentos ,
   --       @Importe_Aumentos,
   --@cFilaMin,@cFilaMax		     
	      
	-- UPDATE #T_Seccion_Articulos
	--  SET cControl= 0,
	--	  Sant_Importe= 0,
	--	  Cons_Imp = 0 ,
	--	  Cantidad_Aumentos=0,
	--	  Importe_Aumentos=0,
	--	  Cantidad_Disminucion=0,
	--	  Importe_Disminucion = 0,
	--	  Inv_Final_Importe= 0,
	--	  Imp_Actual = 0  
	--WHERE id_seccion = @cidSeccion
	--  and id_articulo = @cIdArticulo
	--  and cRow > @cFilaMin
	   
	--Set @cFilaI = @cFilaI + 1
	
	Set @cFilaI = @cFilaMax + 1
	
	
	End


--return

/* ==============================
   Region 04
   ==============================
*/

	
	Update #T_Seccion_Articulos
	   Set Inv_Final =  Sant_Cantidad 
	                  + Cantidad_Aumentos
	                  - Cons_Cant
	                  - Cantidad_Disminucion,
	       Inv_Final_Importe = Sant_Importe 
					         + Importe_Aumentos
					         - Cons_Imp
					         - Importe_Disminucion
	   Where cFirst = 1
	

	--Update #T_Seccion_Articulos
	--   Set Inv_Final = b.Sant_Cantidad 
	--				 --- b.Cons_Cant 
	--				 --+ b.Cant_1
	--				 --- b.Cant_2
	--	   --Inv_Final_Importe = 
	--				--   b.Sant_Importe 
	--				-- - b.Cons_Imp 
	--				-- + b.Cant_3
	--				-- - b.Cant_4            
	--   From 
	--	(
	--	Select id_articulo,
	--		   id_seccion,
	--			Sant_Cantidad,
	--			Cons_Cant,
	--			Cant_1 = Cantidad_Aumentos,
	--			Cant_2 = Cantidad_Disminucion

	--			--Cant_1 = min(Cantidad_Aumentos),
	--			--Cant_2 = min(Cantidad_Disminucion),
	--			--Sant_Importe = min(Sant_Importe),
	--			--Cons_Imp = MIN(Cons_Imp),
	--			--Cant_3 = min(Importe_Aumentos),
	--			--Cant_4 = min(Importe_Disminucion)
	--		From #T_Seccion_Articulos
	--		Where cFirst= 1
	--		--group by id_articulo,Sant_Cantidad,
	--		--	Cons_Cant,id_seccion
	--			) b
	--		where #T_Seccion_Articulos.Id_Articulo = b.id_articulo 
	--		  and #T_Seccion_Articulos.id_seccion = b.id_seccion
	--		  and #T_Seccion_Articulos.cFirst = 1



--select Cons_cant,cons_imp,
--       Cantidad_Disminucion,
--       Importe_Disminucion,
--       Inv_Final,
--       Inv_Final_Importe,
       
----cantidad_vendida, 
----       Cantidad_aumentos,
----       cantidad_Disminucion,
----       Importe_disminucion,

--* from #T_Seccion_Articulos



--return



/* ==============================
   Region 05
   ==============================
*/

	--Declare @cFilaI int,@cFilaF int,
	--	@cIdArticulo int,@cIdSeccion int,
	--	@cFilaMin int,
	--	@cFilaMax int


	--Select @cFilaI = MIN(cRow),@cFilaF=MAX(cRow)
	--From #T_Seccion_Articulos 


	--While @cFilaI <= @cFilaF
	--Begin
	 
	-- Select @cIdArticulo = Id_Articulo,
	--		@cIdSeccion  = Id_Seccion
	--	From #T_Seccion_Articulos 
	--	Where cRow = @cFilaI
	    
	-- Select @cFilaMin = Min(cRow),
	--		@cFilaMax = MAX(cRow)
	--	From #T_Seccion_Articulos
	--	Where id_Articulo = @cIdArticulo
	--	  and id_Seccion  = @cIdSeccion    
	      
	-- UPDATE #T_Seccion_Articulos
	--  SET cControl= 0,
	--	  Sant_Importe= 0,
	--	  Cons_Imp = 0 ,
	--	  Cantidad_Aumentos=0,
	--	  Importe_Aumentos=0,
	--	  Cantidad_Disminucion=0,
	--	  Importe_Disminucion = 0,
	--	  Inv_Final_Importe= 0,
	--	  Imp_Actual = 0  
	--WHERE id_seccion = @cidSeccion
	--  and id_articulo = @cIdArticulo
	--  and cRow > @cFilaMin
	   
	--Set @cFilaI = @cFilaI + 1
	--End

/* ==============================
   Region 06
   ==============================
*/
	Update #T_Seccion_Articulos
		   Set Rotacion =
     					Cast(Case When (ISNULL(Inv_Inicial, 0.0) + ISNULL(Inv_Final, 0.0)) <> 0
						 Then  
							 --(ISNULL(Cantidad_Vendida, 0.0) + ISNULL(Cantidad_Disminucion, 0.0))
							 (ISNULL(Cons_Cant, 0.0) + ISNULL(Cantidad_Disminucion, 0.0))
							  /
							  ((ISNULL(Inv_Inicial, 0.0) + ISNULL(Inv_Final, 0.0)) / 2.0)
						 Else 0.0 END as numeric(12,4))



	UPDATE #T_Seccion_Articulos
		Set Sant_Importe = 0,
			Cons_Imp = 0,
			Imp_Actual = 0,
			Inv_Inicial=0,
			Inv_Inicial_Importe=0
	   Where cFirst = 0

  Select * 
       From #T_Seccion_Articulos
       
    -- Descripción de la Selección
    DECLARE @Fil VARCHAR(4000) = ''
    DECLARE @vElementos VARCHAR(8000) = ''
	DECLARE @vAux VARCHAR(20) = NULL
	
	IF LEN(LTRIM(RTRIM(@List_Alma))) <> 0
	BEGIN
		SET @vElementos = @List_Alma
		WHILE LEN(@vElementos) > 0
		BEGIN
			IF PATINDEX('%,%',@vElementos) > 0
			BEGIN
				SET @vAux = SUBSTRING(@vElementos, 0, PATINDEX('%,%',@vElementos))
				IF(@Fil <> '')
				BEGIN
					SET @Fil = @Fil + ' - '
				END
				SET @Fil = @Fil + ISNULL((SELECT LTRIM(RTRIM(codigo)) + '-' + LTRIM(RTRIM(descripcion)) FROM STOKALMA WHERE id_alma = CONVERT(INT, @vAux)), '???')
				SET @vElementos = SUBSTRING(@vElementos, LEN(@vAux + ',') + 1, LEN(@vElementos))
			END
			ELSE
			BEGIN
				SET @vAux = @vElementos
				SET @vElementos = NULL
				IF(@Fil <> '')
				BEGIN
					SET @Fil = @Fil + ' - '
				END
				SET @Fil = @Fil + ISNULL((SELECT LTRIM(RTRIM(codigo)) + '-' + LTRIM(RTRIM(descripcion)) FROM STOKALMA WHERE id_alma = CONVERT(INT, @vAux)), '???')
			END
		END
	END

	SELECT @Fil as 'Almacen'
	
	SET @Fil = ''
	
	IF LEN(LTRIM(RTRIM(@List_Secc))) <> 0
	BEGIN
		SET @vElementos = @List_Secc
		WHILE LEN(@vElementos) > 0
		BEGIN
			IF PATINDEX('%,%',@vElementos) > 0
			BEGIN
				SET @vAux = SUBSTRING(@vElementos, 0, PATINDEX('%,%',@vElementos))
				IF(@Fil <> '')
				BEGIN
					SET @Fil = @Fil + ' - '
				END
				SET @Fil = @Fil + ISNULL((SELECT LTRIM(RTRIM(codigo)) + '-' + LTRIM(RTRIM(descripcion)) FROM STOKSECC WHERE id_secc = CONVERT(INT, @vAux)), '???')
				SET @vElementos = SUBSTRING(@vElementos, LEN(@vAux + ',') + 1, LEN(@vElementos))
			END
			ELSE
			BEGIN
				SET @vAux = @vElementos
				SET @vElementos = NULL
				IF(@Fil <> '')
				BEGIN
					SET @Fil = @Fil + ' - '
				END
				SET @Fil = @Fil + ISNULL((SELECT LTRIM(RTRIM(codigo)) + '-' + LTRIM(RTRIM(descripcion)) FROM STOKSECC WHERE id_secc = CONVERT(INT, @vAux)), '???')
			END
		END
	END
	
	SELECT @Fil as 'Seccion'

  --drop table Temp_01
  
  --Select * 
  --     into Temp_01
  --     From #T_Seccion_Articulos



END
