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 Script

Scheda

Evento

Valore 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.