
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--@fdtupotrnabav: 1-upotreba, 0-nabavka
/*-- 9.12.2011 --

@fdtupotrnabav: 0 - nabavka jer je ranije u ovoj f-ji ispitivano if(@fdtupotrnabav = 2)
a kod vraca true i false tj. 1 i 0

-- 27.01.2012
 za status OS se uzima trenutni status, a ne na datum pregleda
 
*/ 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[os_rep_pregled_os_bez_sqls]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].os_rep_pregled_os_bez_sqls
GO


create  procedure [dbo].[os_rep_pregled_os_bez_sqls](@pid int, @d datetime, @fdtupotrnabav int, @dtupotrnabavod datetime, @dtupotrnabavdo datetime,
	@oj_id int, @nomgr_id int,  @selkonto nvarchar(2000), @racunopolagac_id int, @stope nvarchar(4000), @osstatus nvarchar(50),  
	@ord nvarchar(1000))
as
begin
	set nocount on
--++ stope iz parametra @stope se smestaju u tabelu ++
		DECLARE @idx int
		DECLARE @start int
		DECLARE @item nvarchar(10)

		CREATE TABLE #stopetbl (s float)
		if len(@stope)>0
		begin
			SET @start = 1
			SET @idx = CHARINDEX(',',@stope, @start)
			WHILE (@idx>0 )
			BEGIN
				SET @item = SUBSTRING(@stope, @start, @idx-@start)
				INSERT INTO #stopetbl VALUES (CONVERT(float, @item))
				IF (@@ERROR <> 0)
				BEGIN
					DELETE FROM #stopetbl
					BREAK
				END
				SET  @start=@idx+1
				SET @idx = CHARINDEX(',',@stope, @start)
			END

			SET @item = SUBSTRING(@stope, @start, LEN(@stope)-@start + 1)
			INSERT INTO #stopetbl VALUES (CONVERT(float, @item))
			IF (@@ERROR <> 0)
			BEGIN
				DELETE FROM #stopetbl
			END
		end
		else
			insert into #stopetbl select distinct stopa_otpisa from os_osnovno_sredstvo where cp_preduzece_id = @pid
		
--+- stope se smestaju u tabelu ++

--++ statusi iz parametra @osstatus se smestaju u tabelu ++
		CREATE TABLE #statusitbl (s INT)
		if len(@osstatus)>0
		begin
			SET @start = 1
			SET @idx = CHARINDEX(',',@osstatus, @start)
			WHILE (@idx>0 )
			BEGIN
				SET @item = SUBSTRING(@osstatus, @start, @idx-@start)
				INSERT INTO #statusitbl VALUES (CONVERT(int, @item))
				IF (@@ERROR <> 0)
				BEGIN
					DELETE FROM #statusitbl
					BREAK
				END
				SET  @start=@idx+1
				SET @idx = CHARINDEX(',',@osstatus, @start)
			END

			SET @item = SUBSTRING(@osstatus, @start, LEN(@osstatus)-@start + 1)
			INSERT INTO #statusitbl VALUES (CONVERT(int, @item))
			IF (@@ERROR <> 0)
			BEGIN
				DELETE FROM #statusitbl
			END
		end
		else
			insert into #statusitbl select distinct stopa_otpisa from os_osnovno_sredstvo
		
--+- statusi se smestaju u tabelu ++

	CREATE table #tbl (
--	+	N'cp_preduzece_id int,'
	 broj nvarchar(30), 
	 naziv nvarchar(150),  
	 status nvarchar(20), 
	 povecanje money, 
	 smanjenje money, 
	 tekuci_otpis money, 
	 tek_am money,  --
	 nab_vred money, 
 	 ukupan_otpis money, 
	 sad_vred money, 
	 datum_nabavke datetime, 		
	 datum_aktivacije datetime,  --datum_stavljanja_u_upotrebu 
	 datum_knjizenja datetime,   --datum_stavljanja_van_upotrebe 
	 stopa_otpisa money, 
	 oj_naziv nvarchar(200) 
	 ,lokacija nvarchar(250) 
--	+	N',os_nomenklaturna_grupa nvarchar(250)'
	 ,ng_naziv nvarchar(150) 
	 ,ng_stopa float 
	 ,ng_konto nvarchar(50)  
	 ,barkod nvarchar(30) 
 	 ,napomena nvarchar(1500)  
	 ,kol float 
	 --+ dodati su parametri zbog kasnijeg where uslova
	 ,oj_id int
	 ,ng_id int
	 ,racunopolagac_id int
	 --- dodati su parametri
	) 
	
	declare @tmp table( 
	 oid int, 
	 potr money, 
	 duguje money, 
	 smanj money, 
	 uvec money, 
	 t_am money,
	 status int		--!!!! NOVO -- ovde je ubacen status iz tbl_osnovno_sredstvo
	) 

	 insert into @tmp(oid,potr,duguje,status) 
	 SELECT p.os_osnovno_sredstvo_id,SUM(isnull(potrazuje,0)),
		SUM(isnull(duguje,0)), os.status   
	 FROM os_promena p inner join os_osnovno_sredstvo os 
	 on p.os_osnovno_sredstvo_id = os.os_osnovno_sredstvo_id
	 WHERE DATEPART(YEAR,datum)=YEAR(@d)
	 and evidencija in (1,2) and cp_preduzece_id=@pid
	 GROUP BY p.os_osnovno_sredstvo_id, os.status
	
	 insert into @tmp(oid,potr,duguje,status) 
	 SELECT os.os_osnovno_sredstvo_id,0,0, os.status   
	 FROM os_osnovno_sredstvo os 
	 WHERE os.cp_preduzece_id=@pid
	 and os.os_osnovno_sredstvo_id not in (select oid from @tmp)

 
	 update @tmp 
	 set smanj=(select SUM(isnull(potrazuje,0)) 
	 FROM os_promena p 
	 WHERE datum<=@d
	 and os_tip_promene_id=3 
	 and evidencija in (1,2) 
	 and p.os_osnovno_sredstvo_id=priv.oid 
	 group by p.os_osnovno_sredstvo_id) 
	 from @tmp priv,os_promena p 

	 update @tmp 
	 set uvec=(SELECT SUM(isnull(duguje,0))  
	 FROM os_promena p 
	 WHERE datum <= @d
	 and os_tip_promene_id=2  
	 and evidencija in (1,2) 
	 and p.os_osnovno_sredstvo_id=priv.oid 
	 group by p.os_osnovno_sredstvo_id) 
	 from  @tmp priv,os_promena p 

	 update @tmp 
	 set t_am=(SELECT SUM(isnull(potrazuje,0)) 
	 FROM os_promena p 
	 WHERE DATEPART(YEAR,datum)=YEAR(@d)
	 and os_tip_promene_id = 4  
	 and evidencija in (1,2) 
	 and p.os_osnovno_sredstvo_id=priv.oid 
	 group by p.os_osnovno_sredstvo_id) 
	 from  @tmp priv,os_promena p 

if(@fdtupotrnabav = 1) --datum upotrebe
	  insert into #tbl  
	  SELECT broj, os.naziv, priv.status,   
	  isnull(priv.uvec,0),isnull(priv.smanj,0),  
	  isnull(priv.potr,0),isnull(priv.t_am,0) as tek_am, 
	  nabavna_vrednost+isnull(priv.uvec,0)-isnull(priv.smanj,0) as nabVr, 
	  nabavna_vrednost+isnull(priv.uvec,0)-isnull(priv.smanj,0)-SUM(isnull(pr.duguje,0)-isnull(pr.potrazuje,0))as ukOtp, 
	  SUM( isnull(pr.duguje,0)-isnull(pr.potrazuje,0)) AS sadVr,datum_nabavke, 
	  datum_stavljanja_u_upotrebu,datum_stavljanja_van_upotrebe,  
	  stopa_otpisa * 100, 
	  isnull(oj.sifra,N'') + ' - ' + isnull(oj.naziv,N'') AS oj 
	  ,OS.lokacija   --,NG.ng_naziv as os_nomenklaturna_grupa'
	  ,NG.ng_naziv,NG.ng_stopa,NG.ng_konto,OS.barkod  
	  ,OS.napomena, SUM( isnull(pr.ulaz,0)-isnull(pr.izlaz,0)) AS kol
	  --+ dodati su parametri zbog kasnijeg where uslova
	 ,os.organizaciona_jedinica_id, os.os_nomenklaturna_grupa_id, racunopolagac
	 --- dodati su parametri
	  FROM os_osnovno_sredstvo os LEFT OUTER JOIN pp_organizaciona_jedinica oj ON os.organizaciona_jedinica_id = oj.pp_organizaciona_jedinica_id  
	  left outer JOIN os_promena pr ON os.os_osnovno_sredstvo_id=pr.os_osnovno_sredstvo_id  
	  left outer JOIN @tmp priv ON os.os_osnovno_sredstvo_id=priv.oid  
	  LEFT OUTER JOIN dbo.os_nomenklaturna_grupa NG ON (OS.os_nomenklaturna_grupa_id=NG.os_nomenklaturna_grupa_id)
	  WHERE os.cp_preduzece_id=@pid
	  AND pr.datum<=@d
	  and pr.evidencija in (1,2) 
-- OVDE DODJE WHERE USLOV
	 AND datum_stavljanja_u_upotrebu >= @dtupotrnabavod  AND datum_stavljanja_u_upotrebu <= @dtupotrnabavdo
	 --and round(stopa_otpisa,5) in (select * from #stopetbl)-- umesto ovoga ide ovo dole round(stopa_otpisa,5) je zbog nacina skupljanja stopa u formi pregled
	 and exists (select * from #stopetbl s where abs(s.s - round(stopa_otpisa,5))<0.00001)
	 -- and status in (select * from #statusitbl) --prebacujemo statuse na f-ju da odredi za tacan datum pregleda da li je u upotrebi 
	 and priv.status in (select * from #statusitbl)
	 --++ IZDVOJEN DEO NA KRAJU
	 --and os.organizaciona_jedinica_id = isnull(@oj_id, os.organizaciona_jedinica_id)
	 --and os.os_nomenklaturna_grupa_id = isnull(@nomgr_id, os.os_nomenklaturna_grupa_id)
	 --and NG.ng_konto = isnull(@selkonto, NG.ng_konto)
	 --and racunopolagac = isnull(@racunopolagac_id, racunopolagac)
	 --+- IZDVOJEN DEO NA KRAJU
--	+ isnull(@whr,N'') 
	  GROUP BY os.cp_preduzece_id,os.broj,os.naziv,priv.status,priv.potr,priv.smanj,priv.uvec,priv.t_am,datum_stavljanja_u_upotrebu, 
	  datum_stavljanja_van_upotrebe,datum_nabavke,stopa_otpisa,oj.sifra,oj.naziv,nabavna_vrednost, 
	  OS.lokacija,NG.ng_naziv,NG.ng_stopa,NG.ng_konto,OS.barkod,OS.napomena 
	  --+ dodati su parametri zbog kasnijeg where uslova
	  ,os.organizaciona_jedinica_id, os.os_nomenklaturna_grupa_id, racunopolagac
	  --- dodati su parametri
	  ORDER BY os.broj,os.naziv 

if(@fdtupotrnabav = 0) --datum nabavke 
	  insert into #tbl  
	  SELECT broj,os.naziv,priv.status,   
	  isnull(priv.uvec,0),isnull(priv.smanj,0),  
	  isnull(priv.potr,0),isnull(priv.t_am,0) as tek_am, 
	  nabavna_vrednost+isnull(priv.uvec,0)-isnull(priv.smanj,0) as nabVr, 
	  nabavna_vrednost+isnull(priv.uvec,0)-isnull(priv.smanj,0)-SUM(isnull(pr.duguje,0)-isnull(pr.potrazuje,0))as ukOtp, 
	  SUM( isnull(pr.duguje,0)-isnull(pr.potrazuje,0)) AS sadVr,datum_nabavke, 
	  datum_stavljanja_u_upotrebu,datum_stavljanja_van_upotrebe,  
	  stopa_otpisa * 100, 
	  isnull(oj.sifra,N'') + ' - ' + isnull(oj.naziv,N'') AS oj 
	  ,OS.lokacija   --,NG.ng_naziv as os_nomenklaturna_grupa'
	  ,NG.ng_naziv,NG.ng_stopa,NG.ng_konto,OS.barkod  
	  ,OS.napomena, SUM( isnull(pr.ulaz,0)-isnull(pr.izlaz,0)) AS kol
	  --+ dodati su parametri zbog kasnijeg where uslova
	  ,os.organizaciona_jedinica_id, os.os_nomenklaturna_grupa_id, racunopolagac
	  --- dodati su parametri
	  FROM os_osnovno_sredstvo os LEFT OUTER JOIN pp_organizaciona_jedinica oj ON os.organizaciona_jedinica_id = oj.pp_organizaciona_jedinica_id  
	  left outer JOIN os_promena pr ON os.os_osnovno_sredstvo_id=pr.os_osnovno_sredstvo_id  
	  left outer JOIN @tmp priv ON os.os_osnovno_sredstvo_id=priv.oid  
	  LEFT OUTER JOIN dbo.os_nomenklaturna_grupa NG ON (OS.os_nomenklaturna_grupa_id=NG.os_nomenklaturna_grupa_id) 
	  WHERE os.cp_preduzece_id=@pid
	  AND pr.datum<=@d
	  and pr.evidencija in (1,2)
-- OVDE DODJE WHERE USLOV
	AND datum_nabavke >= @dtupotrnabavod  AND datum_nabavke <= @dtupotrnabavdo
	 --and round(stopa_otpisa,5) in (select * from #stopetbl)-- umesto ovoga ide ovo dole round(stopa_otpisa,5) je zbog nacina skupljanja stopa u formi pregled
	 and exists (select * from #stopetbl s where abs(s.s - round(stopa_otpisa,5))<0.00001)
	 -- and status in (select * from #statusitbl) --prebacujemo statuse na f-ju da odredi za tacan datum pregleda da li je u upotrebi 
	 and priv.status in (select * from #statusitbl)
	 --and os.organizaciona_jedinica_id = isnull(@oj_id, os.organizaciona_jedinica_id)
	 --and os.os_nomenklaturna_grupa_id = isnull(@nomgr_id, os.os_nomenklaturna_grupa_id)
	 --and NG.ng_konto = isnull(@selkonto, NG.ng_konto)
	 --and racunopolagac = isnull(@racunopolagac_id, racunopolagac)
--	+ isnull(@whr,N'') 
	  GROUP BY os.cp_preduzece_id,os.broj,os.naziv,priv.status,priv.potr,priv.smanj,priv.uvec,priv.t_am,datum_stavljanja_u_upotrebu, 
	  datum_stavljanja_van_upotrebe,datum_nabavke,stopa_otpisa,oj.sifra,oj.naziv,nabavna_vrednost, 
	  OS.lokacija,NG.ng_naziv,NG.ng_stopa,NG.ng_konto,OS.barkod,OS.napomena
	  --+ dodati su parametri zbog kasnijeg where uslova
	  ,os.organizaciona_jedinica_id, os.os_nomenklaturna_grupa_id, racunopolagac
	  --- dodati su parametri
	  ORDER BY os.broj,os.naziv 
	  

/* deo za proveru
		declare @pid int, @d datetime, @fdtupotrnabav int, @dtupotrnabavod datetime, @dtupotrnabavdo datetime,
	@oj_id int, @nomgr_id int,  @selkonto nvarchar(2000), @racunopolagac_id int, @stope nvarchar(3000), @osstatus nvarchar(50),  
	@ord nvarchar(1000)
	
		set @pid = 189
set @d = '20110328'
set @fdtupotrnabav = 1 
set @dtupotrnabavod = N'1900-01-01'
set @dtupotrnabavdo = N'2011-03-28'
set @oj_id  =  -1
set @nomgr_id =  -1
set @selkonto =  N''
set @racunopolagac_id = -1
set @stope =  N''
set @osstatus = N'2'
*/
	DECLARE @SQL nvarchar(4000)

	DECLARE @Parametri NVARCHAR(4000);

	SELECT	@Parametri = '
		@ParOjId INT,
		@ParNomgrId INT,
		@ParSelkonto nvarchar(2000),
		@ParRacunopolagacId INT '

	SELECT	@SQL = N'
	select * from #tbl
	WHERE 1 = 1 '

	IF @oj_id <> -1
		SELECT @SQL = @SQL + N' and oj_id = @ParOjId '
	IF @nomgr_id <> -1
		SELECT @SQL = @SQL + N' and ng_id = @ParNomgrId '
	IF @selkonto <> N''	
		 SELECT @SQL = @SQL + N' and ng_konto = @ParSelkonto '
	IF @racunopolagac_id <> -1	
		 SELECT @SQL = @SQL + N' and racunopolagac_id = @ParRacunopolagacId '
	-- na kraju order by
	if @ord <> N''
		SELECT @SQL = @SQL + @ord
		
	--PRINT @SQL
		
	EXEC sp_executeSQL 
		@SQL,
		@Parametri,
		@ParOjId = @oj_id,
		@ParNomgrId = @nomgr_id,
		@ParSelkonto = @selkonto,
		@ParRacunopolagacId = @racunopolagac_id
	
	 	
	drop table #tbl
				
  
  drop table #statusitbl
  drop table #stopetbl

end
