Créer une facture à partir des rendez-vous

Dans cet exemple nous voyons comment créer une facture en récupérant les rendez-vous effectués chez un client, ils peuvent être considérés comme rapports de travail.

Groupe ScriptÉvénement
FicheValeur en modification

Le script sera une action associée à la fiche de la facture, par conséquent le parcours consistera à créer une nouvelle facture, choisir le client et lancer le script pour extraire les données.

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

D’abord nous vérifions d’avoir choisi un nominatif, puisque sans cette données il est impossible de trouver vos rendez-vous. Si le champ spécial associé à le sous-tableau Nominative est vide, nous nous donnons le message d’erreur et sortons du 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")

Nous créons un dataform pour demander à l’utilisateur d’identifier les dates de rendez-vous que nous devons inclure dans la facture.

Veuillez noter que si l’utilisateur ferme le dataform avec la x de la fenêtre, le script sera bloqué.

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

Commençons maintenant à extrapoler les données de l’agenda en les filtrant en fonction du nominatif. Nous vous rappelons que ce n’est qu’un exemple. Il aurait été possible d’inclure également les dates dans la chaîne sql pour avoir déjà un tableau filtré, mais dans ce cas nous préférons les les parcourir tous et ne récupérer que les rendez-vous qui nous intéressent.

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

Maintenant nous tournons toutes les lignes et vérifions que la date est incluse parmi celles de recherche. Il est nécessaire de faire attention à la date parce qu’étant écrite de cette façon, il est très facile qu’elle n’extrait aucune ligne parce que le dataform nous fait choisir une date sans heure, minutes et secondes.

Ces valeurs sont réglées à 0 donc si la stardate et la enddate sont les mêmes, alors seulement les rendez-vous effectués exactement à minuit seront récupérés. Dans ce cas à l’intérieur du rendez-vous se trouve un champ où les heures ont été déjà calculées par un autre script. La modalité pour calculer le temps total est à votre discrétion.

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

Si rien a été trouvé, nous informons l’utilisateur et sortons du 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()

Pour finir, nous créons la ligne dans la grille de la facture, nous insérons la description et la quantité. Pour le prix, par contre, dépend de la façon dont il est géré: il pourrait être écrit dans la fiche du client, directement dans le rendez-vous, etc.