Regrouper les commandes d’un client dans une facture

Dans cet exemples nous allons créer un petit groupeur des commandes dans la facture. De cette façon avec un seul script nous pouvons récupérer ce que notre client nous doit et créer un seul document.

Groupe ScriptÉvénement
FicheAction
if dataview.getvalue("gguid_customer") == "" then
        dataview.showerror("Select a customer!")
        do return end
end

D’abord nous vérifions d’avoir sélectionné le client dans la nouvelle facture. Bien sûr, si le choix n’a pas été fait, nous ne pouvons pas continuer.

table_invoice = dataview.getatable("invoice_rows")
 
table_rows= database.getsql("SELECT * FROM orders WHERE gguid_customer='" .. dataview.getvalue("gguid_customer") .. "' AND eli=0 AND billed=0")
rows= table_rows.getrows()
 
for i=1,table_rows.countrows() do
        date = rows[i].getvalue("date")
        number = rows[i].getvalue("number)
        description = "Order N." .. number .. " of " .. date

        -- ENTER THE DESCRIPTIVE LINE OF THE ORDER
        rowinvoice  = table_invoice.adddatarow()
        rowinvoice.setvalue("description",description)"SELECT * FROM order_rows WHERE gguidp='" .. rows[i].getvalue("gguid")  .. "' AND eli=0")
 
        rowsorders= tabler.getrows()
 
        for i=1,tabler.countrows() do
               -- ENTER ALL THE LINES OF THE ORDER
               rowinvoice2= table_invoice.adddatarow()
 
               rowinvoice2.setvalue("code", rowsorders[i].getvalue("code"))
               rowinvoice2.setvalue("description", rowsorders[i].getvalue("description"))
 
               rowitem2.setvalue("qty",rowsorders[i].getvalue("qty")) 
 
               rowitem2.setvalue("price", rowsorders[i].getvalue("price"))  
 
               rowitem2.setvalue("totalprice",rowsorders[i].getvalue("totalprice"))
        end
 
       --INSERT AN EMPTY LINE TO REMOVE THE ORDERS
 
       rowitem= table_invoice.adddatarow()
       rowitem.setvalue("description","")
 
       --CHANGE THE STATE ON THE ORDER TO AVOID BILLING IT TWICE
 
       database.setsql("UPDATE orders SET tid=" .. tostring(utility.tid()) .. ",billed=1 WHERE gguid='" .. rows[i].getvalue("gguid") .. "'")
 
       database.addsyncbox("orders",rows[i].getvalue("gguid"))


end

--FORCE THE INVOICE UPDATE
dataview.update()

La procédure se compose de deux cycles. Le premier extrait les commandes en les sélectionnant en fonction du client et du chiffre d’affaires = 0. Ceci est utilisé pour empêcher de créer deux factures avec la même commande.

Une fois récupérées les commandes, nous insérons une première ligne fans la facture où nous reporterons le numéro de commande et sa date.

Après nous extrairons les lignes de la commande actuelle et nous commencerons le deuxième cycle pour insérer toutes les lignes qui le composent dans la facture.

Nous insérons après une ligne vide entre une commande et l’autre pour mieux les afficher dans le corps de la facture. Parallèlement nous chargerons l’état de la commande en définissant la valeur de billed à 1, de manière que la commande ne soit pas rappelée par une autre facture. Une fois terminés les deux cycles nous forcerons la mise à jour des calculs de la facture.