//"dokframe2.sci","Dokument sprzedaży - ramki 2","\Dokumenty\Sprzedaż\",0,1.0.10,SYSTEM
////////////////////////////
// Dokument sprzedaży - ramki 2
// dokframe2.sci
//////////////////////////

#ifndef DRUKUJ_ZALICZKI
#define DRUKUJ_ZALICZKI

dispatch xConnZaliczki=GetAdoConnection()
dispatch xRecZaliczki="ADODB.Recordset"

xRecZaliczki.LockType=3
xRecZaliczki.CursorType=1

Record StructPaidAdvances
	Float NetValue
	String VatRateText[40]
	Float VatValue
	Float GrossValue
EndRec

Record StructAdvancePaymentsPaid
	Int No
	String AdvanceNumber[40]
	String DatePayments[30]
	Float SettlementAmount
EndRec

StructPaidAdvances tablePaidAdvances(1)
StructAdvancePaymentsPaid statementOfAdvancePaymentsPaid(1)
#endif

int tableMargines = 4004

Int Sub GetDetailsOfClearedAdvances(Long documentId, INT IsListOfUnpaidAdvancePayments)
	String query = ""
	Float changeSingOperation = 0
	String singOperation = ""
	int index = 1
	Int newSizetablePaidAdvances
    Int fcValues = 0    // foreign currency values
	
	IF (IsListOfUnpaidAdvancePayments == 1) THEN
		changeSingOperation = 1
		singOperation = "<>"
	Else
		changeSingOperation = -1
		singOperation = "="
	EndIf
    query += " WITH SummedData AS ( "
    query += " SELECT VAT AS [COL1], "
#ifdef CWalWartDef
	If (CWalWart || WartWal) Then fcValues = 1
#endif
#ifdef CWalWartKorDef
#define CWalWartDef
	If (WCena || WWart) Then fcValues = 1
#endif
#ifdef CWalWartDexDef
#define CWalWartDef
	If !PPlnVat Then fcValues = 1
#endif
#ifdef EkspKorDef
#define CWalWartDef
	fcValues = 1
#endif
#ifdef CWalWartDef
	If fcValues then
	    query += " ((SUM([Netto])) * %f) AS [COL2], "
        query += " ((SUM([Kwota VAT w PLN])) * %f) AS [COL3], "
        query += " ((SUM([Brutto])) * %f) AS [COL4] "
	ELSE
#endif
        query += " ((SUM([Netto w PLN])) * %f) AS [COL2], "
        query += " ((SUM([Kwota VAT w PLN])) * %f) AS [COL3], "
        query += " ((SUM([Brutto w PLN])) * %f) AS [COL4] "
#ifdef CWalWartDef
	EndIf
#endif
    query += " FROM [HM].REP_SaleDocuments_VatRates "
    query += " WHERE [Identyfikator dokumentu] IN (%l) "
    query += " AND [Identyfikator stawki VAT] %s 0 "
    query += " GROUP BY VAT ) SELECT "
#ifdef CWalWartDef
	If fcValues Then
	    query += " CAST(sd1.COL2 AS float) AS [Netto], sd1.COL1 AS VAT, "
        query += " CAST(sd1.COL3 AS float) AS [Kwota VAT w PLN], "
        query += " CAST(sd1.COL4 AS float) AS [Brutto] "
	ELSE
#endif
       query += " CAST(sd1.COL2 AS float) AS [Netto w PLN], sd1.COL1 AS VAT, "
       query += " CAST(sd1.COL3 AS float) AS [Kwota VAT w PLN], "
       query += " CAST(sd1.COL4 AS float) AS [Brutto w PLN] "
#ifdef CWalWartDef
	EndIf
#endif
    query += " FROM SummedData AS sd1 "
    query += " UNION ALL "
    query += " SELECT SUM([COL2]),[COL1],SUM([COL3]),SUM([COL4]) "
    query += " FROM (SELECT SUM(COL2) AS [COL2], 'X' AS [COL1], "
    query += " SUM(COL3) AS [COL3], SUM(COL4) AS [COL4] "
    query += " FROM SummedData) AS sd2 "
    query += " GROUP BY sd2.[COL1] ORDER BY VAT DESC; "

	xRecZaliczki.Open((Using query,changeSingOperation,changeSingOperation,changeSingOperation, documentId,singOperation), xConnZaliczki)

	If xRecZaliczki.EOF() Then
		// jesli brak rekordów to zamykamy połączenie i wychodzimy
		xRecZaliczki.Close()
		Exit
	EndIf

	xRecZaliczki.MoveFirst()
	While !xRecZaliczki.EOF()
#ifdef CWalWartDef
		If fcValues Then
			tablePaidAdvances(index).NetValue =		xRecZaliczki.Fields("Netto").Value
			tablePaidAdvances(index).GrossValue =	xRecZaliczki.Fields("Brutto").Value
		ELSE
#endif
			tablePaidAdvances(index).NetValue =		xRecZaliczki.Fields("Netto w PLN").Value
			tablePaidAdvances(index).GrossValue =	xRecZaliczki.Fields("Brutto w PLN").Value
#ifdef CWalWartDef
		EndIf
#endif
		tablePaidAdvances(index).VatRateText =	xRecZaliczki.Fields("VAT").Value
		tablePaidAdvances(index).VatValue =		xRecZaliczki.Fields("Kwota VAT w PLN").Value
		newSizetablePaidAdvances = Grow tablePaidAdvances, 1
		index += 1
		xRecZaliczki.MoveNext()
	Wend
	newSizetablePaidAdvances = Shrink tablePaidAdvances, 1	
	xRecZaliczki.Close()
	GetDetailsOfClearedAdvances = Size (tablePaidAdvances)
EndSub

Int Sub GetHeaders(Long documentId)
	int index = 1
	Int newSizetablePaidAdvances	
	String query = ""
    query  =  " SELECT tbl.[Numer dokumentu zaliczkowego] AS [NrDokZaliczkowego],"
    query  += " tbl.[Data wystawienia] AS [DataWystawienia],"
    query  += " CAST(SUM(tbl.[Kwota rozliczenia])AS Float) AS [KwotaRozliczenia]"
    query  += " FROM [HM].[REP_SaleDocuments_AdvanceInvoiceSettlement] AS tbl"
    query  += " WHERE tbl.[Identyfikator dokumentu rozliczającego] IN (%l)"
    query  += " GROUP BY tbl.[Numer dokumentu zaliczkowego],"
    query  += " tbl.[Data wystawienia],"
    query  += " tbl.[Numer dokumentu rozliczającego],"
    query  += " tbl.[Identyfikator dokumentu rozliczającego]"

	xRecZaliczki.Open((Using query,documentId), xConnZaliczki)
	If xRecZaliczki.EOF() Then
		// jesli brak rekordów to zamykamy połączenie i wychodzimy
		xRecZaliczki.Close()
		Exit
	EndIf
	xRecZaliczki.MoveFirst()
	While !xRecZaliczki.EOF()
		statementOfAdvancePaymentsPaid(index).No = index
		statementOfAdvancePaymentsPaid(index).AdvanceNumber = xRecZaliczki.Fields("NrDokZaliczkowego").Value
		statementOfAdvancePaymentsPaid(index).DatePayments = xRecZaliczki.Fields("DataWystawienia").Value
		statementOfAdvancePaymentsPaid(index).SettlementAmount = xRecZaliczki.Fields("KwotaRozliczenia").Value
		newSizetablePaidAdvances = Grow statementOfAdvancePaymentsPaid, 1
		index += 1
		xRecZaliczki.MoveNext()
	Wend
	newSizetablePaidAdvances = Shrink statementOfAdvancePaymentsPaid, 1
	xRecZaliczki.Close()
	GetHeaders = Size (statementOfAdvancePaymentsPaid)	
EndSub

Int Sub SettlementTableHeader(int currentY, int szerokoscKolumn)
	int iloscKolumn = 4
	tbl1 = Tabela 1,tableMargines, szerokoscKolumn,bc, szerokoscKolumn,bc, szerokoscKolumn,bc, szerokoscKolumn,bc
	If GRAF Then
		Ramka od str.szer-(szerokoscKolumn*iloscKolumn),y,(szerokoscKolumn*iloscKolumn),0,0,nGray
		Tabela #tbl1, od 0,0
	Else
		Tabela #tbl1, od 0,currentY
	EndIf
			int y1 = TextHeight("X")/2
			Kolumna 1 : print at #X,y1;"Wartość netto"
			Kolumna 2 : print at #X,y1; "Stawka VAT"
			Kolumna 3 : print at #X,y1; "VAT w PLN"
			Kolumna 4 : print "Wartość brutto"
		Koniec
	If GRAF Then Koniec
EndSub	

Int Sub SettlementTableDetails(int szerokoscKolumn, Int sizeTable)
	int index = 0
	tbl1 = Tabela 1,tableMargines, szerokoscKolumn,kr, szerokoscKolumn,bc, szerokoscKolumn,kr, szerokoscKolumn,kr
	For index = 1 To index > sizeTable
		If GRAF Then
			if index == 1 Then
				Tabela #tbl1, od str.szer-840,#G
			Else
				Tabela #tbl1, od str.szer-840,#Y
			EndIf
		Else
			Tabela #tbl1, od 10,y
		EndIf
				Kolumna 1, formatuj(tablePaidAdvances(index).NetValue,2)
				Kolumna 2, tablePaidAdvances(index).VatRateText
				Kolumna 3, formatuj(tablePaidAdvances(index).VatValue,2)
				Kolumna 4, formatuj(tablePaidAdvances(index).GrossValue,2)
			Koniec
	Next index 
	SettlementTableDetails = index	
EndSub

Int Sub RightTitleColumn(int currentY, int szerokoscKolumn, int sizeTable)
	Int index = 0
	tbl1 = Tabela 1,tableMargines, szerokoscKolumn,bc
	If GRAF Then
		Ramka od str.szer-(szerokoscKolumn*(5)),#Y,szerokoscKolumn,0,0,nGray
		Tabela #tbl1, od 0,0
	Else
		Tabela #tbl1, od 0,currentY
	EndIf
			Kolumna 1 : print "Razem"
		Koniec

	For index = 2 To index > sizeTable 
		Tabela #tbl1, od 0,#Y
			Kolumna 1 : print "\n"
		Koniec
	Next index 

	If GRAF Then Koniec
	RightTitleColumn = index
EndSub

Int Sub DisplayDetailedSummary(int sizeTable)
	// kontrola przejscia na nastepna strone
	y = str.Pozycja(#Y) + 25
	SettlementTableHeader(y,210)
	RightTitleColumn(y,210,sizeTable)
	SettlementTableDetails(210,sizeTable)
	Shrink tablePaidAdvances,Size (tablePaidAdvances)	
EndSub

#ifdef PLATWYD
int Sub PlatWyd()
	if !GRAF && ((bPlatnosci && Platnosci(1)) || (bWydania && (Wydania(1).NAzwa||Wydania(1).Data_Wyd)) ) then print "\n"

	// konstrukcja dziwna ze wzgledu na możliwość przejścia na następną stron
	y = str.pozycja(#Y)+50
	tbl0 = tabela 1,4004, 100,bc,350,bc,220,bc,200,bc,110,nc,200,nc
	tbl1 = tabela 1,4004, 100,bc,350,bc,250,bc

	if bPlatnosci && Platnosci(1) then
		if GRAF then ramka od 0,y,1180,10,0,nGray
			tabela #tbl0
				kolumna 1, "Lp."
				kolumna 2, "Dokument płatności"
				kolumna 3, "Data"
				kolumna 4, "Wartość"
				kolumna 5, "Waluta"
				kolumna 6, "Wartość PLN"
			koniec
		if GRAF then koniec
		y = str.Pozycja(#T)
	endif

	if bWydania && (Wydania(1).Nazwa || Wydania(1).Data_Wyd) then
		if GRAF then
			ramka od str.szer-700,y,700,10,0,nGray
			tabela #tbl1, od 0,0
		else
			tabela #tbl1, od str.szer-700,y
		endif
				kolumna 1, "Lp."
				if DokZAkupu then
					kolumna 2, "Dokument przyjęcia"
				else
					kolumna 2, "Dokument wydania"
				endif
				kolumna 3, "Data"
			koniec
		if GRAF then koniec
	endif

	if (bPlatnosci && Platnosci(1)) || (bWydania && (Wydania(1).nazwa||Wydania(1).Data_Wyd)) then
		tbl0=tabela 1,4004, 100,nc,350,nc,220,nc,200,kr,110,nc,200,kr
		tbl1=tabela 1,4004, 100,nc,350,nc,250,nc
		j=1
		while (j*3)<=size(Platnosci) || j<=Size(Wydania)
			ramka od 0,#Y,str.szer,10,0
				if (j*3)<=Size(Platnosci) && Platnosci(1) && bPlatnosci then
					tabela #tbl0, od 0,0
						kolumna 1, using "%d",j
						kolumna 2, Platnosci(j*3-2)
						kolumna 3, Platnosci(j*3-1) //dajdate(j)
						kolumna 4, rplatwal(j).wartoscRL
						kolumna 5, rplatwal(j).waluta
						kolumna 6, Platnosci(j*3)
					koniec
				endif
				//if (j*2)<=Size(Wydania) && (Wydania(1).Nazwa||Wydania(1).Data_Wyd) && bWydania then
				if j<=size(Wydania) && ((Wydania(1).Nazwa||Wydania(1).Data_Wyd) && bWydania) then
					tabela #tbl1, od str.szer-700,0
						kolumna 1, using "%d",j
						kolumna 2, Wydania(j).Nazwa
						kolumna 3, Wydania(j).Data_Wyd
					koniec
				endif
			koniec
			j+=1
		wend
	endif
EndSub
#endif

Int Sub DisplayListOfSettledAdvance(Int sizeTable)
	Int index = 0
	// kontrola przejscia na nastepna strone
	y = str.Pozycja(#Y) + 50
	tbl1 = Tabela 1,4004, 60,bc, str.szer-(840+60),bc, 420,bc,420,bc
	If GRAF Then
		Ramka od 10,y,str.szer,10,0,nGray
		Tabela #tbl1, od 0,0
	Else
		Tabela #tbl1, od 10,y
	EndIf
			Kolumna 1, "Lp."
			Kolumna 2, "Numer zaliczki"
			Kolumna 3, "Data"
			Kolumna 4, "Kwota rozliczenia"
		Koniec
	If GRAF Then Koniec

	tbl1 = Tabela 1,4004,60,bc, str.szer-(840+60), nl, 420,bc, 420,kr
	For index = 1 To index > sizeTable
			Tabela #tbl1, od 10,#Y
				Kolumna 1, Using "%d" ,statementOfAdvancePaymentsPaid(index).No
				Kolumna 2, statementOfAdvancePaymentsPaid(index).AdvanceNumber
				Kolumna 3, statementOfAdvancePaymentsPaid(index).DatePayments
				Kolumna 4, formatuj(statementOfAdvancePaymentsPaid(index).SettlementAmount,2)
			Koniec
	Next index 	
	Shrink statementOfAdvancePaymentsPaid,Size (statementOfAdvancePaymentsPaid)	
EndSub

Int Sub Zaliczki(Long documentId)
	int sizeTable = GetHeaders(documentId)
	If sizeTable < 1 Then
		Exit
	EndIf
	If !GRAF Then Print "\n"
	// ==================================================================================
	// Zestawienie rozliczonych zaliczek
	SetStyl ( nbl )
	Print "\n\nZestawienie rozliczonych zaliczek"
	DisplayListOfSettledAdvance(sizeTable)

	// ==================================================================================
	// Podsumowanie VAT
	sizeTable = GetDetailsOfClearedAdvances(documentId, 0)
	If sizeTable < 1 Then
		Exit
	EndIf
	DisplayDetailedSummary(sizeTable)

	// ==================================================================================
	// Wartość po uwzględnieniu rozliczonych zaliczek
	sizeTable = GetDetailsOfClearedAdvances(documentId, 1)
	If sizeTable < 1 Then
		Exit
	EndIf
	SetStyl ( nbl )
	Print "Wartość po uwzględnieniu rozliczonych zaliczek"
	DisplayDetailedSummary(sizeTable)	
EndSub