Raggruppare gli ordini di un cliente in una fattura

In questo esempio creeremo un piccolo raggruppatore di ordini all’interno della fattura. In questo modo con un singolo script possiamo recuperare quello che ci deve il nostro cliente e creare un singolo documento.

Gruppo Script

Scheda

Evento

Azione


if dataview.getvalue("gguid_cliente") == "" then

dataview.showerror("Selezionare il cliente!")

do return end

end

Per prima cosa controlliamo di aver selezionato il cliente nella nuova fattura. Ovviamente se non è stata eseguita la scelta non possiamo continuare.

tabellafattura = dataview.getatable("fattura_rows")

tabella= database.getsql("SELECT * FROM ordini WHERE gguid_cliente='" .. dataview.getvalue("gguid_cliente") .. "' AND eli=0 AND fatturato=0")

righe = tabella.getrows()

for i=1,tabella.countrows() do

data = righe[i].getvalue("data")

numero = righe[i].getvalue("numero)

descrizione = "Ordine N." .. numero .. " del " .. data


--INSERISCO LA RIGA DESCRITTIVA DELL'ORDINE

rigafattura = tabellafattura.adddatarow()

rigafattura.setvalue("descrizione",descrizione)


tabellarighe= database.getsql("SELECT * FROM ordini_rows WHERE gguidp='" .. righe[i].getvalue("gguid") .. "' AND eli=0")

righeordini = tabellarighe.getrows()

for i=1,tabellarighe.countrows() do

--INSERISCO TUTTE LE RIGHE DELL'ORDINE

rigafattura2 = tabellafattura.adddatarow()

rigafattura2.setvalue("codice", righeordini[i].getvalue("codice"))

rigafattura2.setvalue("descrizione", righeordini[i].getvalue("descrizione"))

rigafattura2.setvalue("qta",righeordini[i].getvalue("qta"))

rigafattura2.setvalue("prezzo", righeordini[i].getvalue("prezzo"))

rigafattura2.setvalue("prezzototale",righeordini[i].getvalue("prezzototale"))

end

--INSERISCO UNA RIGA VUOTA PER STACCARE GLI ORDINI

rigafattura = tabellafattura.adddatarow()

rigafattura.setvalue("descrizione","")

--CAMBIO LO STATO ALL'ORDINE PER EVITARE DI FATTURARLO DUE VOLTE

database.setsql("UPDATE ordini SET tid=" .. tostring(utility.tid()) .. ",fatturato=1 WHERE gguid='" .. righe[i].getvalue("gguid") .. "'")

database.addsyncbox("ordini",righe[i].getvalue("gguid"))



end


--FORZO L'AGGIORNAMENTO DELLA FATTURA

dataview.update()

La procedura è composta da due cicli. Il primo estrae gli ordini selezionandoli in base al cliente e in base al valore fatturato=0. Questo viene utilizzato per impedire di creare due fatture che riportino lo stesso ordine.

Una volta recuperati gli ordini, inseriamo una prima riga nella fattura dove riporteremo il numero dell’ordine e la sua data.

Successivamente estrarremo le righe dell’ordine attuale e inizieremo il secondo ciclo per inserire tutte le righe che lo compongono in fattura.

Inseriremo poi una riga vuota tra un ordine e l’altro per visualizzarli meglio all’interno del corpo della fattura. Nel frattempo cambieremo lo stato dell’ordine impostando il valore di Fatturato a 1, in modo tale che l’ordine non venga richiamato da un’altra fattura. Finiti i due cicli forzeremo l’aggiornamento dei calcoli della fattura.