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.