Crearea unei facturi din insemnari

In acest exemplu vom vedea cum se poate crea o factura prin recuperarea insemnarilor efectuate la un client, care pot fi vazute ca rapoarte de lucru.

Grup ScriptEveniment
FisaValoare in modificare

Script-ul va fi o actiune asociata fisei facturii, in consecinta, procesul va consta in crearea unei facturi noi, alegerea clientului si lansarea script-ului pentru extragerea datelor.

if dataview.getvalue("gguid_name") == "" then
        dataview.showerror("Select the
        name!"
)
        do return end
end

Mai intai verificam faptul ca am ales un nume, deoarece fara aceste date este imposibil sa gasim notitele sale. Daca, campul special asociat cu subtabelul Nume este gol, dam mesajul de eroare si iesim din script.

dataform = program.newdataform()
dataform.addfielddate("Start Date","SD",null)
dataform.addfielddate("End Date","ED",null)
dataform.show()
if dataform.closewithx == true then
        do return end
end

startdate = dataform.getvalue("SD")
enddate = datafor.getvalue("ED")

Cream un dataform pentru a solicita utilizatorului sa identifice ce date din insemnari va trebui sa includem in factura.

De retinut: daca utilizatorul inchide dataform-ul cu x-ul ferestrei, script-ul va fi blocat.

table_rows = database.getsql("SELECT * FROM agenda WHERE gguid_name_customer='" .. dataview.getvalue("gguid_name") .. "' AND eli=0")

Incepem acum sa extrapolam datele din agenda, filtrandu-le in functie de nume. Reamintim ca, acesta este doar un exemplu. Ar fi fost posibil sa includem in sirul SQL datele pentru a avea deja un tabel filtrat dar, in acest caz, preferam sa le derulam si sa regasim doar notitele care ne intereseaza.

totalhours =0
for i=1,table_rows.countrows() do
        date = rows[i].getvalue("data")
        if date >= startdate and date <= enddate then
               totalhours = totalhours +
               rows[i].getvalue("workhours")
        end
end

Acum intoarcem toate liniile si verificam daca data este inclusa in acelea de cautare. Este necesar sa acordam atentie datei deoarece, scrisa in acest mod, este foarte usor sa nu extraga niciun rand, deoarece dataform-ul ne face sa alegem o data fara ore, minute si secunde.

Aceste valori sunt setate la 0, deci daca datainceput si datasfarsit sunt aceleasi, atunci, vor fi redate doar programarile efectuate exact la miezul noptii. In acest caz, in cadrul programarii exista un camp in care orele au fost deja calculate de un alt script. Metoda de calcul a timpului total este la discretia dumneavoastra.

If totalhours == 0 then
        dataview.showerror("No working hours
        found in the requested date range"
)
        do return end
end

In cazul in care nu a gasit nimic, informam utilizatorul si iesim din script.

gridview = dataview.getatable("invoices_ca_rows")
row         = gridview.adddatarow()
row.setvalue("description","Labor since " .. utility.datetostring(startdate) .. " to " .. utility.datetostring(enddate))

row.setvalue("qty",totalhours)

gridview.update()
dataview.update()

Pentru a termina, am creat randul in cadrul grilei facturii, am introdus descrierea si cantitatea. Pentru pret, depinde insa de modul in care este gestionat: acesta ar putea fi scris in fisa clientului, direct in insemnari, etc.