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 ScriptEvento
SchedaAzione
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.