//"interapokrfk.sci","Integracja RO do FK - include","\Integracja z FK a\",0,1.0.4,SYSTEM
/////////////////////////////////////////
// "Integracja RO do FK - include"
// interapokrfk.sci
/////////////////////////////////////////


int Sub IntegrRO(long idDK)
	
	IntegrRO = 0

	Dispatch xRapOkr = GetObjById("BRapOkr", idDK)
	Dispatch xDekretParamsPn=xFactory.NewObject("BDekretParams")
	
	Dispatch xDokSp = xFactory.NewObject("BDokSp")
	Dispatch xKartParamsDokSp = xFactory.NewObject("BKartParamsDokSp")

	Dispatch xDokumentSp = xFactory.NewObject("BDokumentSp")
	Dispatch xIntegracja = xFactory.GetObject("BIntegracjaFK")

	rozUidStrona = 0
	int err, nRes, ii, jj, iPom, iPomStVat, stop = 0
	float wartosc
	String strOkres
	

	int iRok = dbd.firmainfo.GetRokByDate(xRapOkr.dataOd)
	if RokFK(1).Zap == 1 then

		if RokFK(1).IdRok != iRok then
			UstawRok(iRok)
		endif

	else
		UstawRok(iRok)
	endif

	dst=RokFK(1).Rok
	plkn=RokFK(1).PlanKont
	defdok=RokFK(1).DefDokument
	rozrDokument=RokFK(1).RokDokumentRoz

	Dispatch xDzial = GetObjById("BDzial", xRapOkr.dzial)

	if !xDzial then  Error using "Brak działu o id = %l.", xRapOkr.dzial

	Dispatch xTypDokumentuSp = GetObjByKod("BTypDokumentuSp", xRapOkr.typDok)
	if !xTypDokumentuSp then  Error using "Brak typu dokumentu o skrócie %s.", xRapOkr.typDok

	IntegrRO = CzyIntegrBrakTypDK(xTypDokumentuSp.symbolFK, xRapOkr.numerDokumentu, idDK, xTypDokumentuSp.skrot)
	if IntegrRO then exit
	
	xKartParamsDokSp.raportOkresowyId = xRapOkr.Id
	nRes = xDokSp.Load(xKartParamsDokSp)

	IntegrRO = CzyIntegrBrakSchematu(xRapOkr.schematKs, xRapOkr.numerDokumentu, idDK)
	if IntegrRO then exit

    int IngegrROKH = 0
	ii=1
	Dispatch xKh
	Dispatch xDk	
	while !nRes && ii <= xDokSp.Count()
		xDk=GetObjById("BDokumentSp",xDokSp.item(ii).Id)
		
		if 0 != xDk.danekh.KhId then
			xKh = GetObjById("BKontrahent", xDk.danekh.KhId)
			if !xKh then  error "Brak takiego rekordu w bazie KH"

			if ( 1 != xIntegracja.trybWspolpracy && 4 != xIntegracja.trybWspolpracy) then
				IntegrRO = CzyIntegrBrakIDFK(val(xKh.identyfikatorFK), xDk.numer, idDK, KHtypKH)	
                if IntegrRO then IngegrROKH = IntegrRO
			endif
		endif
		ii=ii+1
	wend	
    if IngegrROKH then IntegrRO = IngegrROKH
    if IntegrRO then exit

	dst.Clear()
	sOpisy=0

	dbd.CurrentDate = sDataWpr

	//dst.Value("UId") = 
	dst.Value("DataDok") = xRapOkr.dataOd
	dst.Value("DataOper") = xRapOkr.dataOd
	dst.Value("Datawpl") = Data()
	dst.Value("Datawpr") = sDataWpr
	dst.Value("Kwota") = Round(xRapOkr.wartoscBrutto, 2)
	dst.Value("skrot") = xTypDokumentuSp.symbolFK

	//////////////////////////////////////////////////////
	// numer dokumentu w FK
	dst.Value("nazwa") = xRapOkr.numerDokumentu

//	xDekretacjeRapPn.Clear()
//	xDekretParams = xDekretacjeRapPn.Params()
//	xDekretParams.id=xRapOkr.id
//	xDekretacjeRapPn.Dekret(xDekretParams)
//	dst.Value("tresc") = Using "dział %s za okres od %s do %s", xDzial.kod, xRapOkr.dataOd, xRapOkr.dataDo
	dst.Value("JPK_V7") = AggregatedJPK_V7()


		//////////// eksport dekretacji zbiorczej z dokumentów raportu okersowego ////////////////////
		// czekamy na dostosowanie obiektu dekretacji
		Dispatch xDekretacjeRapOkr = xFactory.NewObject("BDekretacjeRapRO")
		Dispatch xDekretParamsRapOkr

		xDekretacjeRapOkr.Clear()
		xDekretParamsRapOkr = xDekretacjeRapOkr.Params()
		xDekretParamsPn.id=xRapOkr.id
		xDekretParamsPn.RownolegleMAG = (iRownoKsiegMag)
		xDekretParamsPn.czyZbiorcze = (iDekretyZbiorcze)
		xDekretParamsPn.czyEkspOznak = !(iNieIntegrOznak)
		xDekretacjeRapOkr.Dekret(xDekretParamsPn)
		if (iDekretyZbiorcze!=0) then
			xDekretacjeRapOkr.OptymalizujMg()
		endif	
	dst.Value("tresc") = xDekretacjeRapOkr.trescwFK
	//////////// eksport dekretacji zbiorczej z dokumentów raportu okersowego ////////////////////
		
		//zapisy
		//ZapiszZAP(xDekretacjeRapOkr, 0, 0,0, "", 0, 0, TiRapOkr)
		WriteStatusBar(using "Eksport zapisów dokumentu: %s", xRapOkr.numerDokumentu)
		ZapiszZAP(xDekretacjeRapOkr, 0, 0, 0,"", 0,"", 0, TiRapOkr)
		
		//rozrachunki
		//ZapiszTRAROZ(xDekretacjeRapOkr, 1, 0)

		//rejestry vat
		//		
		Dispatch dpRejestr
		Dispatch dpStVat
		Dispatch pozycja
		Dispatch xDokumentZbiorczyPar
		InfoTabRejVat TabRejVatParZbior
		int iPercentage

		ii=1
		while !nRes && ii <= xDokSp.Count()
			xDokumentZbiorczyPar=GetObjById("BDokumentSp",xDokSp.item(ii).Id)

			iPercentage = (ii * 100) / xDokSp.Count()
			WriteStatusBar(using "Generowanie rejestru VAT dla dokumentu: %s (%s)\t\t%l%%%%=%l%%%%,255", xRapOkr.numerDokumentu, xDokumentZbiorczyPar.kod, iPercentage, iPercentage)

				for jj=1 to jj>(xDokumentZbiorczyPar.Pozycje.Count())
					if (xDokumentZbiorczyPar.CzyKorekta) then
						wartosc = 0
						if (xDokumentZbiorczyPar.Pozycje.item(jj).idpozkoryg) then
							pozycja = xDokumentZbiorczyPar.Pozycje.item(jj).przedKorekta
							if pozycja.lp != 0 then
								dpRejestr = pozycja.rejestrVAT
								dpStVat = pozycja.stVAT
								IntegrRO = CzyintegrBlednyRej(dpRejestr.rejestrFKid, xDokumentZbiorczyPar.numer, xDokumentZbiorczyPar.id, 1)
								If IntegrRO Then Exit
								TabRejVatParZbior.Wstaw(dpRejestr.rejestrFKid, dpStVat, pozycja,1,0,1,1,0)
								wartosc = -(pozycja.niePodlega + pozycja.netto)
							endif
												
							pozycja = xDokumentZbiorczyPar.Pozycje.item(jj).poKorekcie
							if pozycja.lp != 0 then
								dpRejestr = pozycja.rejestrVAT
								dpStVat = pozycja.stVAT
								IntegrRO = CzyintegrBlednyRej(dpRejestr.rejestrFKid, xDokumentZbiorczyPar.numer, xDokumentZbiorczyPar.id, 1) 
								If IntegrRO Then Exit
								TabRejVatParZbior.Wstaw(dpRejestr.rejestrFKid, dpStVat, pozycja,1,0,0,1,0)
								wartosc = wartosc + (pozycja.niePodlega + pozycja.netto - pozycja.rozlZalNettoPLN)
							endif
						endif
					else
						pozycja = xDokumentZbiorczyPar.Pozycje.item(jj)
						if pozycja.lp != 0 then
							dpRejestr = pozycja.rejestrVAT
							dpStVat = pozycja.stVAT
							IntegrRO = CzyintegrBlednyRej(dpRejestr.rejestrFKid, xDokumentZbiorczyPar.numer, xDokumentZbiorczyPar.id, 1)
							If IntegrRO Then Exit
							TabRejVatParZbior.Wstaw(dpRejestr.rejestrFKid, dpStVat, pozycja,1,0,0,1,0)
						endif
	
					endif
				next jj
			ii=ii+1
		wend
		if IntegrRO then exit
		WriteStatusBar("")

		// zapis informacji o rejestrach
		For iPom=1 To iPom>TabRejVatParZbior.IloscRejestrow(0)
			For iPomStVat=1 To iPomStVat>TabRejVatParZbior.IloscStawek(iPom)
				dst.RejestrVAT.Insert()
				dst.RejestrVAT.Value("soczek") = dst.RejestrVAT.Value("oczek")
				dst.RejestrVAT.Value("def") = TabRejVatParZbior.RejVat(iPom).id
				dst.RejestrVAT.Value("typabc") = 1
				dst.RejestrVAT.Value("JPK_V7") = AggregatedGTU()
				buf = xDokumentZbiorczyPar.dataRejestrVAT
				strOkres = Find Regular "????????" // osiem pierwszych znaków
				dst.RejestrVAT.Value("okres") = strOkres + "01"
				dst.RejestrVAT.Value("datadok") = dst.Value( "DataDok" )
				dst.RejestrVAT.Value("dataws") = dst.Value( "DataOper" )
				dst.RejestrVAT.Value("stawka") = TabRejVatParZbior.Wartosc(iPom, iPomStVat, "stawka")
				dst.RejestrVAT.Value("brutto") = Round( (TabRejVatParZbior.Wartosc(iPom, iPomStVat, "netto") + TabRejVatParZbior.Wartosc(iPom, iPomStVat, "vat")),2 )
				dst.RejestrVAT.Value("netto") = Round( TabRejVatParZbior.Wartosc(iPom, iPomStVat, "netto"),2 )
				dst.RejestrVAT.Value("vat") = Round( TabRejVatParZbior.Wartosc(iPom, iPomStVat, "vat"),2 )
				dst.RejestrVAT.Value("UE") = 0
			Next iPomStVat
		Next iPom

		TabRejVatParZbior.IloscRejestrow(-1)
		TabRejVatParZbior.ClearRec()

	dst.Validate()
	if (ers.Count) then IntegrRO = ShowError( "Raport okresowy "+ xRapOkr.numerDokumentu)
	if IntegrRO == 0 then IntegrRO = !dst.Insert()

	ShowStatus(xRapOkr.numerDokumentu,idDK, IntegrRO)
EndSub


int Sub BeginProcessRO()
EndSub

int Sub DoProcessRO(long idDK)
	DoProcessRO = 0
	rozUidStrona = 0
	int iVal
	Dispatch xRapOkr = GetObjById("BRapOkr", idDK)
	Dispatch xKartParamsDokSp = xFactory.NewObject("BKartParamsDokSp")
	Dispatch xDokSp = xFactory.NewObject("BDokSp")
	Dispatch xDokumentSpPar
	Dispatch xDokumentMg
	Dispatch xDokMg
	int kk=1, ii

	if ( iNieIntegrOznak && xRapOkr.eksportFK ) then
		DoProcessRO = 1 // pomijamy
			AddError("Nie można powtórnie wysłać raportu okresowego o numerze " + xRapOkr.numerDokumentu + ".",idDK)
		Exit // nie wysylamy oznakowanych raportów
	endif

	DoProcessRO = IntegrRO(idDK)

	if DoProcessRO then	Exit //pomijamy

	/////////////////////////////////////////////////
	// oznaczamy wyslany dokument
	if ( iOznaczaj ) then
		xRapOkr.SetEkspFK()
		if ( iRownoKsiegMag ) then //oznaczanie dokumentów magazynowych powiązanych z raportem okresowym dla księgowania równoległego
			xKartParamsDokSp.raportOkresowyId = xRapOkr.Id
			nRes = xDokSp.Load(xKartParamsDokSp)
			
			while !nRes && kk <= xDokSp.Count()
				xDokumentSpPar=GetObjById("BDokumentSp",xDokSp.item(kk).Id)

				if ( !xDokumentSpPar.czyKorekta )then
					xDokumentSpPar.transakcjaTw.powiazaniaTw.PokazujIstniejace()
					for ii=1 to ii>xDokumentSpPar.transakcjaTw.powiazaniaTw.count
						nRes =!( xDokumentMg=GetObjById("BDokumentMg",xDokumentSpPar.transakcjaTw.powiazaniaTw.item(ii).idWlascicielaTrans))
						if nRes then  error "Dokument nie załadowany"
				
						if (xDokumentMg.czyWystawiony) then
							nRes = !(xDokMg=GetObjByID("BDokMg",xDokumentMg.id))
							if nRes then  ShowError("Powiązany dokument magazynowy nie załadowany")					

							xDokMg.SetEkspFK()
						endif
					next ii
				endif				
				for ii=1 to ii>xDokumentSpPar.zwiazkiOdpDok.Count()
					if ((xDokumentSpPar.zwiazkiOdpDok.item(ii).dkBase == 33) && xDokumentSpPar.zwiazkiOdpDok.item(ii).idDk) then
						nRes=!(xDokumentMg=GetObjById("BDokumentMg",xDokumentSpPar.zwiazkiOdpDok.item(ii).idDk))
						if nRes then  error "Dokument nie załadowany"
						if (xDokumentMg.czyWystawiony) then
							nRes = !(xDokMg=GetObjByID("BDokMg",xDokumentMg.id))
							if nRes then  ShowError("Powiązany dokument magazynowy nie załadowany")
							
							xDokMg.SetEkspFK()
						endif
					endif
				next ii

				kk=kk+1
			wend
		endif// koniec oznaczania dokumentów magazynowych powiązanych z raportem okresowym dla księgowania równoległego
	endif
EndSub

int Sub EndProcessRO()

EndSub
