CREATE OR ALTER PROCEDURE [FK].[fk_Jpk_GetV7Documents]
	@dataOd    FK.tData,
	@dataDo    FK.tData,
	@zrodlo    SMALLINT,
	@zZerowymi SMALLINT,
    @zZerowaStawka SMALLINT,
	@zZWStawka SMALLINT
AS
	-- generalnie daty czytane z rekordu dokumentu
	-- tylko dla dokumentów RK i RL data dokumentu określana na podstawie datadok w rejestrze bo data z nagłówka dotyczy dokumentu RK i RL, a nie rozliczanej faktury
	-- tylko dla dokumentów RK i RL data wpływu i sprzedaży określana na podstawie dataws w rejestrach VAT bo nie ma ich w dokumencie
	-- [datawpl] - data wpływu określona jest dla zakupu (rZs=1) lub importu (rZs=3)
	-- [dataws] - data wpływu/sprzedaży rejestru VAT - określona jest dla sprzedaży (rZs=2) lub eksportu (rZs=4)

	-- defRej.rZs - stałe określające typ dokumentu w kontekście rejestrów VAT
	-- const int DT_ZAKUP         = 1;	// dokum. zakupu
	-- const int DT_SPRZEDAZ      = 2;	// dokum. sprzedaży
	-- const int DT_IMPORT		  = 3;	// import
	-- const int DT_EXPORT		  = 4;	// export

	-- dok.wzorzec
	-- const int DW_RAPORT_K      = 6;
	-- const int DW_ROZL_ZALICZKI = 15;


    ;WITH vat (rokId, Id, pozNum, numer, numerWl, datadok, dataws, danekh, rZs, rejAtrJpkV7, czyUlgaSprzedazZwiekszenie)
	AS
	(
        SELECT d.rokId
			 , d.Id
		     , rv.pozNum
			 , d.nazwa
			 , rv.numerWl
			 , min(rv.datadok)
			 , min(rv.dataWS)
			 , rv.danekh
			 , dr.rZs
			 , STUFF((SELECT DISTINCT ',' + RTRIM(LTRIM(art.atrJpkV7)) FROM FK.rejVat art WHERE art.atrJpkV7 is not null and art.rokDok = d.rokId AND art.dId = d.Id and art.pozNum = rv.pozNum FOR XML PATH ('')),1,1,'')  rejAtrJpkV7
			 , IIF(dr.rZs = 2 and dr.rFr = 2 and dr.srTrwale = 7 , 1, 0) as czyUlgaSprzedazZwiekszenie -- nie pokazujemy gdy rejestr sprzedaż zmniejszenie
		FROM FK.dokumenty d
		JOIN FK.rejVat rv ON rv.rokDok = d.rokId AND rv.dId = d.Id
        JOIN FK.defRej dr ON rv.def = dr.id
		WHERE rv.okres BETWEEN @dataOd AND @dataDo AND rv.nienaliczany = 0 AND d.zrodlo <= @zrodlo AND (@zZerowymi <> 0 OR rv.netto <> 0)
                	AND ((@zZerowaStawka = 0 AND ((rv.stawka <> 0 AND dr.rZs = 1) OR dr.rZs <> 1)) OR @zZerowaStawka = 1)
			        AND ((@zZWStawka = 0 AND ((rv.stawka <> -1 AND dr.rZs = 1) OR dr.rZs <> 1)) OR @zZWStawka = 1)
                    AND (rv.stawka <> -2
					--Wyjątki do stawki NP
						OR (rv.stawka = -2 AND dr.wykazuj = 1 AND (
							   ((dr.rZs = 2  OR dr.rZs = 4) AND dr.srTrwale = 5) -- Sprzedaz za granice lub export
							OR (dr.flagi & 0x01 = 0x01) --Marza ujemna
							OR (dr.rZs = 2 AND rv.ue = 1)  -- Rejestry sprzedaży z zaznaczonym parametrem UE
							OR (dr.rZs = 3 AND dr.srTrwale = 2)  -- Importy usług - VAT należny
							OR (dr.rZs = 3 AND dr.srTrwale = 3)))) -- Dostawa towarów, dla której podatnikiem jest nabywca
        GROUP BY d.rokId, d.Id, rv.pozNum, d.nazwa, rv.numerWl, rv.danekh, dr.rZs, dr.rFr , IIF(dr.rZs = 2 and dr.rFr = 2 and dr.srTrwale = 7 , 1, 0)
 )
     SELECT vat.rokId
		 , vat.Id
		 , vat.pozNum
		 , vat.numer
		 , vat.numerWl
		 , CASE WHEN dok.wzorzec IN (6, 15) THEN vat.datadok ELSE dok.datadok END AS datadok
		 , CASE WHEN vat.rZs=2 AND dok.wzorzec IN (6, 15) THEN vat.dataws ELSE dok.dataOper END AS dataws
		 , CASE WHEN vat.rZs=1 AND dok.wzorzec IN (6, 15) THEN vat.dataws ELSE dok.datawpl END AS datawpl
		 , dok.dataOper
       --Do ponownego sprawdzenia po poprawkach na formatce kontrahenta 
		 , CASE 
			WHEN dok.atrJpkV7 LIKE '%VAT_RR%' AND dkh.nip LIKE 'P:%' THEN kth.pesel --kiedy nip ma na początku P: i atrybut 'VAT_RR' to dajemy sam pesel
			WHEN dkh.nip LIKE 'P:%' THEN NULL --kiedy nie ma atrybutu 'VAT_RR' i P: na początku, to wypisuje brak
			ELSE dkh.nip --w innych przypadkach po prostu nip
		 END AS nip
         ---
		 , kth.VIES AS vies
		 , kth.pesel
		 , dkh.nazwa
		 , dkh.ulica
		 , dkh.dom
		 , dkh.lokal
		 , dkh.kodPocztowy
		 , dkh.miejscowosc
		 , dkh.kraj
		 , vat.rZs
		 , dok.atrJpkV7 as docAtrJpkV7
		 , CASE WHEN LEFT(vat.rejAtrJpkV7, 1) = ',' THEN RIGHT(vat.rejAtrJpkV7, LEN(vat.rejAtrJpkV7) - 1) ELSE vat.rejAtrJpkV7 END 
		 , IIF(vat.czyUlgaSprzedazZwiekszenie = 0 AND dok.terminPlatnosci IS NULL, (SELECT t.termin FROM fk.relacje rel2  JOIN FK.rozrachunki t ON t.id = rel2.extId WHERE rel.id = rel2.super and rel2.typ = 5  and rel2.baza = 35), dok.terminPlatnosci) as TerminPlatnosci
		 , IIF(vat.czyUlgaSprzedazZwiekszenie = 1 AND dok.dataZaplaty IS NULL,  (SELECT TOP 1 ISNULL(r.data, r.dataokr)  FROM fk.relacje rel3  JOIN FK.rozrachunki r ON r.id = rel3.extId WHERE rel.id = rel3.super and rel3.typ = 7  and rel3.baza = 36 AND ISNULL(r.data, r.dataokr) BETWEEN @dataOd AND @dataDo ORDER BY ISNULL(r.data, r.dataokr) DESC), dok.dataZaplaty) AS DataZaplaty	
	FROM vat
	JOIN FK.dokumenty dok ON vat.rokId = dok.rokId AND vat.Id = dok.Id
	LEFT JOIN FK.fk_DANEKH dkh ON dkh.id = vat.danekh
	LEFT JOIN SSCommon.STContractors kth ON  kth.MainElement = 	(SELECT Guid from SSCommon.STElements WHERE Position = dkh.kontrahent AND ElementKindId = (SELECT ElementKindId from SSCommon.STElementKinds WHERE Guid ='BC090993-0768-4487-BE6F-E44E9501734C'))
	LEFT JOIN fk.relacje rel ON rel.extId = vat.Id and rel.typ = 5 and rel.super = 0 -- przejściowy join żeby dojść do transakcji
    OPTION (RECOMPILE)