Crear una factura a partir de citas

En este ejemplo, veremos cómo crear una factura recuperando las citas hechas con un cliente, que pueden verse como informes de trabajo.

Grupo ScriptEvento
FichaValor en modificación

El script será una acción asociada con la ficha de la factura, por lo tanto, el proceso consistirá en crear una nueva factura, elegir el cliente y lanzar el script para extraer los datos.

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

Primero verificamos que hemos elegido un nombre, ya que sin estos datos es imposible encontrar sus citas. Si el campo especial asociado con la subtabla Nominative está vacío, le damos el mensaje de error y salimos del script.

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

startdate = dataform.getvalue("DI")
enddate = datafor.getvalue("DF")

Creamos un dataform para pedirle al usuario que identifique qué fechas de citas tendremos que incluir en la factura.

Tenéis en cuenta que si el usuario cierra el dataform con la x de la ventana, el script se bloqueará.

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

Ahora comenzamos a extrapolar los datos de la agenda filtrándolos por su nombre. Os recuerdo que esto es solo un ejemplo. Hubiera sido posible incluir las fechas en la cadena sql para tener una tabla filtrada, pero en este caso preferimos desplazarnos por ellas y recuperar solo las citas que nos interesan.

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

Ahora cambiamos todas las líneas y verificamos que la fecha esté incluida en las búsquedas. Es necesario prestar atención a la fecha porque escrito de esta manera es muy fácil que no extraiga ninguna línea porque el dataform nos hace elegir una fecha sin horas, minutos y segundos.

Estos valores se establecen en 0, así que si la stardate y la enddate son iguales, entonces solo se recuperarán las citas hechas exactamente a la medianoche. En este caso, dentro de la cita hay un campo donde las horas ya han sido calculadas por otro script. La forma de calcular el tiempo total es a vuestra discreción.

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

Si no ha encontrado nada, informamos al usuario y salimos del 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()

Finalmente, creo la línea dentro de la cuadrícula de la factura, ingreso la descripción y la cantidad. Sin embargo, el precio depende de cómo se gestione: podría escribirse en el archivo del cliente, directamente en la cita, etc.