Creare una fattura dagli appuntamenti

In questo esempio vedremo come creare una fattura recuperando gli appuntamenti eseguiti presso un cliente, i quali possono essere visti come rapportini di lavoro.

Gruppo ScriptEvento
SchedaValore in modifica

Lo script sarà un’azione associata alla scheda della fattura, di conseguenza l’iter consisterà nel creare una nuova fattura, scegliere il cliente e lanciare lo script per estrarre i dati.

if dataview.getvalue("gguid_nominativo") == "" then
        dataview.showerror("Selezionare il
        nominativo!"
)
        do return end
end

Per prima cosa controlliamo di aver scelto un nominativo, poiché senza questo dato è impossibile trovare i suoi appuntamenti. Se il campo speciale associato alla sotto tabella Nominativo è vuota, diamo il messaggio di errore e usciamo dallo script.

finestra = program.newdataform()
finestra.addfielddate("Data inizio","DI",null)
finestra.addfielddate("Data fine","DF",null)
finestra.show()
if finestra.closewithx == true then
        do return end
end

datainizio = finestra.getvalue("DI")
datafine = finestra.getvalue("DF")

Creiamo un dataform per chiedere all’utente di identificare quali date di appuntamenti dovremo includere nella fattura.

Da notare che se l’utente chiude il dataform con la x della finestra, allora lo script verrà bloccato.

tabella= database.getsql("SELECT * FROM agenda WHERE gguid_nome_cliente='" .. dataview.getvalue("gguid_nominativo") .. "' AND eli=0")

Iniziamo ora a estrapolare i dati dall’agenda filtrandoli in base al nominativo. Vi ricordo che questo è soltanto un esempio. Sarebbe stato possibile includere nella stringa sql anche le date per avere già una tabella filtrata, ma in questo caso preferiamo scorrerli tutti e recuperare solo gli appuntamenti che ci interessano.

totaleore =0
for i=1,tabella.countrows() do
        data = righe[i].getvalue("data")
        if data >= datainizio and data <= datafine then
               totaleore = totaleore +
               righe[i].getvalue("ore_lavorate")
        end
end

Ora giriamo tutte le righe e controlliamo che la data sia inclusa tra quelle di ricerca. È necessario fare attenzione alla data perché scritta in questo modo è molto facile che non estragga nessuna riga perché il dataform ci fa scegliere una data senza ora, minuti e secondi.

Questi valori vengono impostati a 0 quindi se la datainizio e la datafine sono uguali, allora verranno recuperati solo gli appuntamenti eseguiti esattamente a mezzanotte. In questo caso all’interno dell’appuntamento si trova un campo dove le ore sono già state calcolate da un altro script. La modalità per calcolare il tempo totale è a vostra discrezione.

If totaleore == 0 then
        dataview.showerror("Nessuna ora di lavoro
        trovata nelrange di date richiesto"
)
        do return end
end

In caso non abbia trovato niente, informiamo l’utente e usciamo dallo script.

vistagriglia = dataview.getatable("fatture_ca_rows")
riga         = vistagriglia.adddatarow()
riga.setvalue("descrizione","Manodopera dal " .. utility.datetostring(datainizio) .. " al " .. utility.datetostring(datafine))

riga.setvalue("qta",totaleore)

vistagriglia.update()
dataview.update()

Per finire creo la riga all’interno della griglia della fattura, inserisco la descrizione e la quantità. Per il prezzo, invece, dipende da come viene gestito: potrebbe essere scritto dentro la scheda del cliente, direttamente nell’appuntamento, ecc.