CREATE PROCEDURE [dbo].[pos25_NapraviRacun] (@lBroj int)
AS
BEGIN

	SET NOCOUNT ON
	DECLARE @MaxBroj int, @MaxProtokol int, @i int, @Iznos money
	DECLARE @Prodavnica nvarchar(3), @Part as nvarchar(8)
	DECLARE @KnjiziTK  bit
	DECLARE @MaxDok as nvarchar(15) 
	declare @lBrojDok as int
	declare @lPref as int
	DECLARE @lBroj0 as int
	set @lBroj0 = @lBroj
	declare @Pref as nvarchar(3)
	update KasaFP set [Partner] = ISNULL([Partner], '0000') where Broj = @lBroj
	--set @Pref = ISNULL((select Prefiks from VrstePromena where Promena = 211), '')
	--set @lPref = len(@Pref)
 	SET @MaxBroj = (SELECT Max(Broj) as maxProt From Izlaz0) 
 	if @MaxBroj is null 
 		set @MaxBroj = 0
 	SET @MaxBroj = @MaxBroj + 1
	-- set @MaxDok = (select max(dokument) as dok from Izlaz0 where left(Dokument, @lPref) = @Pref and Promena = 211)
 --	if @MaxDok is null 
 --		--set @MaxDok = @Pref + '0001'
	--	set @lBrojDok = 0
	--else
	--	set @lBrojDok = cast(substring(@maxDok, @lPref + 1, 7 - @lPref) as int)
	-- set @lBrojDok = (select BrojNoCash from KasaFp Where Broj = @lBroj)
	-- SET @MaxDok = @Pref + right('000000' + CAST(@lBrojDok as varchar(5)), 7 - @lPref)
	select @lBrojDok = BrojNoCash, @MaxDok = Faktura from KasaFp Where Broj = @lBroj

	set @Iznos = (Select Sum(Kolicina * Cena) from dbo.KasaFPSt Where Broj = @lBroj)
	if @Iznos is Null
		begin
		Select '-1' as Dokument 
		Return -1
	END
	set @Iznos = Round(@Iznos, 2)
	insert into izlaz0 (Broj, Objekat, Dokument, Datum, Valuta, Promena, Placanje, [Partner], Opis, Kasa, BrojBona, Iznos, Avans, Ikof, Jikr, QrCode, DatumFiskal, BuCode, TcrCode, OperaterCode, InvoiceFiskType, OtpremnicaRacun)
		select @MaxBroj as Broj, rs.Objekat, Faktura as Dok, convert(datetime, convert(varchar(10), rs.Datum, 102), 102) as Datum, dateadd(day, 2, rs.Datum) as Valuta, 211 as Promena, 1 as Placanje, rs.Partner, IsNull(rs.Opis, '') + ' Na osnovu Fiskalnog bona> ' + rs.Dokument, rs.Kasa, rs.Dokument, @Iznos as Iznos, rs.Avans, rs.Ikof, rs.Jikr, rs.QrCode, rs.DatumFiskal, rs.BusinessUnitCode, rs.TcrCode, rs.OperaterCode, rs.InvoiceFiskType, rs.OtpremnicaRacun
			from dbo.KasaFP rs where Broj = @lBroj
	insert into izlaz (Broj, RedBroj, Sifra, Kolicina, Cena, Iznos, Rabat, Stopa, Tarifa, NabCena)
		select @MaxBroj as Broj, rs.RedBroj, rs.Sifra, rs.Kolicina, rs.Cena, ROUND(rs.Kolicina * rs.Cena, 2) AS Iznos, rs.Rabat, rs.Stopa, a.Tarifa, a.NabCena
			from dbo.KasaFPSt rs LEFT JOIN Artikli a ON rs.sifra = a.sifra
			where Broj = @lBroj
	set @lBroj = @MaxBroj
	if (select count(0) br from Izlaz0 where broj = @lBroj) = 0
		return -1

-- ovde promenite sifru objekta za koji se prave izlazne fakture MP	
	SET @KnjiziTK  = 1
	SELECT * into #t From Izlaz0 where Broj = @lBroj
	SET @Prodavnica = (select top 1 Objekat from #t)
 	SET @MaxProtokol = (SELECT Max(Protokol) as maxProt From #t)
	if @MaxProtokol is Null 
 		set @MaxProtokol = 0
	if @MaxProtokol = 0 
	BEGIN
	 	SET @MaxProtokol = (SELECT Max(Protokol) as maxProt From Robno) 
	 	if @MaxProtokol is null 
	 		set @MaxProtokol = 0
	 	SET @MaxProtokol = @MaxProtokol + 1
	END
-- proveri da li je već knjizeno
	SET @i = (select Count(*) from dbo.Robno where Protokol = @MaxProtokol)
	IF @i >= 1 -- ako postoji knjizenje / vrati zalihe pa onda obrisi knjizenja i nastavi
	BEGIN
		PRINT 'postoji knjiženje po ovoj fakturi'
-- vrati zalihe
		create table #rs0 (Objekat nvarchar(6) COLLATE Slovenian_CI_AS not null, Sifra int not null, Izlaz money, Iznos money, Cena money, CONSTRAINT [PK_tmpRs0] PRIMARY KEY  ([Objekat], [Sifra]))
		Insert Into #rs0 (Objekat, Sifra, Izlaz, Iznos, Cena)
			select Objekat, Sifra, 
				Sum(Izlaz) as Izlaz, 
				Sum(Izlaz * ProdCena) as Iznos, 
				Max(ProdCena) as Cena  
			From RobnoStavke 
			Where Protokol = @MaxProtokol Group by Objekat, Sifra
		INSERT INTO Stanje (Objekat, Sifra, Cena, Zalihe) Select Objekat, Sifra, Cena, 0 as Zalihe From #rs0 as rs where Not Exists (Select Sifra From Stanje ss Where Sifra = rs.Sifra and Objekat = rs.Objekat)	
		UPDATE Stanje Set Zalihe = Zalihe + rs.Izlaz, Vrednost = Vrednost + rs.Iznos From #rs0 as rs where Stanje.Objekat = rs.Objekat AND Stanje.Sifra = rs.Sifra
		drop table #rs0
		delete from dbo.RobnoStavke where Protokol = @MaxProtokol
		delete from dbo.Robno where Protokol = @MaxProtokol
		delete from dbo.TrgKnjiga where Protokol = @MaxProtokol
		delete from dbo.tPromet where Protokol = @MaxProtokol
		delete from dbo.Promet where Protokol = @MaxProtokol
		delete from dbo.ira where Protokol = @MaxProtokol
		Update Izlaz set Protokol = 0, Knjizeno = 0 where  Broj = @lBroj
		Update Izlaz0 set Protokol = 0, Knjizeno = 0, Ok = 0 where  Broj = @lBroj
	END

	BEGIN TRAN
-- prepis
	set @Part = (Select top 1 Partner From #t as t)
	if (not @Part is null) 
	begin
		set @i = (select count(Partner) from Partneri where Partner = @Part)
		if @i = 0 BEGIN
			Insert Into Partneri (Partner, NazivFirme) Values (@Part, N'Kupac ' + @Part)
		END
	end
	INSERT INTO [dbo].[Robno]
           ([Protokol], [Broj] ,[Dokument] ,[Datum] ,[Partner] ,[Dospece] ,[Objekat] 
			,[Promena] ,[Placanje] ,[TipkPDV] ,[TipuPDV] ,[Operater] ,[Opis])
	SELECT
           @MaxProtokol as Protokol
           ,t.Broj
           ,t.Dokument
           ,t.Datum
           ,t.Partner
           ,t.Valuta
           ,t.Objekat
           ,t.Promena
           ,t.Placanje
           ,t.TipkPDV
           ,t.TipuPDV
           ,t.Operater
           ,t.Opis
		from #t as t
	IF @@ERROR <> 0 
		BEGIN 
			RAISERROR ('Nepravilno knjiženje zaglavlja Robno.', 2, 1) 
			DELETE From Robno WHERE Protokol = @MaxProtokol 
			ROLLBACK TRANSACTION 
			RETURN -1 
		END
-- KREIRAJ ODMAH STAVKU U TK DA BI SE SPRECILO RUSENJE INTEGRITETA
	IF @KnjiziTK  <> 0 BEGIN
		INSERT INTO [dbo].[TrgKnjiga]
			(Objekat, Datum, Dokument, Pazar,  
			[Partner], Protokol, Operater)
		 SELECT
			t.Objekat, t.Datum, t.Dokument, t.Iznos,  
			t.Partner, @MaxProtokol, t.Operater
			FROM #t as t
		IF @@ERROR <> 0 
			BEGIN 
				RAISERROR ('Nepravilno kreiranje stavke u Trgovačkoj knjizi.', 3, 1) 
				DELETE From TrgKnjiga WHERE Protokol = @MaxProtokol
				ROLLBACK TRANSACTION 
				RETURN -1 
			END
	END
-- prepis stavki racuna u stavke robnog
	-- problem mogu da budu artikli koji ne postoje u bazi a postoje u prodaji artikala
declare @Novih as int
	select distinct Sifra, Tarifa into #Art from dbo.Izlaz where Izlaz.Broj = @lBroj and Not Exists (Select Sifra from Artikli Where Sifra = Izlaz.Sifra)
	set @Novih = @@ROWCOUNT
	if @Novih > 0 BEGIN
		print N'Novih art ' + cast(@Novih as nvarchar(6))
		insert into Artikli (Sifra, Artikal, Tip, Status, NazivArtikla) 
			Select a.Sifra, cast(a.Sifra as nvarchar(13)), 0 as Tip, 0 as Aktivam , N'Art ' + cast(a.Sifra as nvarchar(13)) From #Art a
	END
	DROP TABLE #Art
	INSERT INTO [dbo].[RobnoStavke] ([Protokol] ,[RedBroj], [Objekat], 
		[Sifra], [Izlaz],
		[Cena], [ProdCena], [Stopa], [Rabat], [Operater], NabCena)
	SELECT @MaxProtokol as Protokol, iz.RedBroj, @Prodavnica as Objekat,  
		iz.Sifra, iz.Kolicina as Izl, 
		iz.Cena, iz.Cena as ProdCena, iz.Stopa, iz.Rabat, iz.Operater, iz.NabCena
	FROM [dbo].[Izlaz] as iz WHERE iz.Broj = @lBroj
	IF @@ERROR <> 0 
		BEGIN 
			RAISERROR ('Nepravilno kreiranje stavki robnog.', 4, 1) 
			DELETE From RobnoStavke WHERE Protokol = @MaxProtokol
			ROLLBACK TRANSACTION 
			RETURN -1 
		END
	UPDATE Izlaz0 set Protokol = @MaxProtokol, Knjizeno = 1, Ok = 0 Where Broj = @lBroj
	UPDATE Izlaz set Protokol = @MaxProtokol, Knjizeno = 1, OKup = 1 Where Broj = @lBroj
	UPDATE dbo.KasaFP set Protokol = @MaxProtokol, Knjizeno = 1, Faktura = @MaxDok 
		Where Broj = @lBroj
	COMMIT TRANSACTION
-- skini zalihe
	create table #rs (Objekat nvarchar(6) COLLATE Slovenian_CI_AS not null , Sifra int not null, Izlaz money, Iznos money, Cena money, CONSTRAINT [PK_tmpRs] PRIMARY KEY  ([Objekat], [Sifra]))
	Insert Into #rs (Objekat, Sifra, Izlaz, Iznos, Cena)
		select Objekat, Sifra, 
			Sum(Izlaz) as Izlaz, 
			Sum(Izlaz * ProdCena) as Iznos, 
			Max(ProdCena) as Cena  
		From RobnoStavke 
		Where Protokol = @MaxProtokol Group by Objekat, Sifra
	INSERT INTO Stanje (Objekat, Sifra, Cena, Zalihe) Select Objekat, Sifra, Cena, 0 as Zalihe From #rs as rs where Not Exists (Select Sifra From Stanje ss Where Sifra = rs.Sifra and Objekat = rs.Objekat)	
	UPDATE Stanje Set Stanje.Zalihe = Stanje.Zalihe - rs.Izlaz, Stanje.Vrednost = Stanje.Vrednost - rs.Iznos From #rs as rs where Stanje.Objekat = rs.Objekat and Stanje.Sifra = rs.Sifra
	UPDATE dbo.KasaFP set Faktura = @MaxDok, ExterniBroj = @MaxBroj, Placanje = 1 
		Where Broj = @lBroj0
	drop table #rs
	--EXEC @RC = dbo.AzurirajLager @Prodavnica, @MaxProtokol, 0, 0
Kraj:	
	drop table #t	
	Select Dokument, Datum, Iznos from Izlaz0 Where Broj = @lBroj
	RETURN 0
Greska:
	ROLLBACK TRANSACTION
	RETURN -1
END
