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 | Evento |
Scheda | 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.