Créer les mensuels à partir des marqueurs heures des opérateurs

Dans cet exemple nous allons construire un document directement dans la base de données. Nous en créerons un pour chaque opérateur et nous insérerons les heures travaillées pour un certain mois. Vue l’opération a effectuer, ce script est une action associée directement au logiciel.

Groupe Script

Programme

Événement

Action Programme


output.clear()

dataform = program.newdataform()

dataform.settitle("Select month")

months = {"January","February","March","April","May","June","July","August","September","October","November","December"}


actualmonth = utility.datemonth(utility.getnow())

actualyear = utility.dateyear(utility.getnow())

actualmonths = null


if actualmonth == 1 then actualmonth = "January" end

if actualmonth == 2 then actualmonth = "February" end

if actualmonth == 3 then actualmonth = "March" end

if actualmonth == 4 then actualmonth = "April" end

if actualmonth == 5 then actualmonth = "May" end

if actualmonth == 6 then actualmonth = "June" end

if actualmonth == 7 then actualmonth = "July" end

if actualmonth == 8 then actualmonth = "August" end

if actualmonth == 9 then actualmonth = "September" end

if actualmonth == 10 then actualmonth = "October" end

if actualmonth == 11 then actualmonth = "November" end

if actualmonth == 12 then actualmonth = "December" end


dataform.addfieldlist("Month","MONTH",months,actualmonths)

dataform.addfieldinteger("Year","YEAR",actualyear)

dataform.show()


if dataform.closewithx == true then

do return end

end

D’abord nous créons un dataform pour demander à l’utilisateur quel mois et année on devrait analyser. Pour plus de commodité, nous définirons les valeurs par défaut avec le mois et l’année en cours.

Au cas où l’utilisateur ferme le dataform avec la x, bonne règle sera de bloquer l’exécution du script.

table_rows = database.getsql("SELECT * FROM work_hour WHERE eli=0")

rows = table_rows.getrows()

for i = 1,table_rows.countrows() do

m = utility.datemonth(rows[i].getvalue("date"))

y = utility.dateyear(rows[i].getvalue("date"))

wrk = rows[i].getvalue("gguid_worker")

if m == actualmonth and y == actualyear then

vote = false

for i,worker in pairs(workers) do

if worker == wrk then

vote = true

end

end

if vote == false then

table.insert(worker,wrk)

end

end

end

Une fois récupéré le mois et l’année à analyser, nous commençons à tourner le tableau work_hour pour intercepter quels sont les opérateurs qui ont travaillé dans ce laps de temps. Dans cette phase nous enregistrons seulement le gguid de l’opérateur, puisqu’il servira pour effectuer les recherches sur les tableaux. D’ici, nous saurons combien de documents nous allons créer.

for i,worker in pairs(workers) do

workername = ""

hourlyrate = 0

tworker = database.getsql("SELECT * FROM workers WHERE gguid='" .. worker .."' AND eli=0")

if tworker.countrows() > 0 then

rowso = tworker.getrows()

workername = rowso[1].getvalue("name")

hourlyrate = rowso[1].getvalue("hourly_rate")

end

Nous commençons à tourner tous les opérateurs et, en premier lieu, nous récupérons pour chacun le nom et son tarif horaire.

Attention : le cycle for n’est pas fermé parce que les parties ultérieures du script doivent également être ajoutées.

if workername ~= "" then

-- start to see if I find a monthly with the required characteristics

gguidmonth = ""

account = 0

tme = database.getsql("SELECT * FROM monthly

WHERE eli=0 and gguid_worker='" ..worker .. "' and month='" .. actualmonths .. "' and year=" .. tostring(actualyear) .."")

if tme.countrows() == 0 then

--I have to create a new card

gguidmonth = utility.gguid()

sql = "INSERT INTO monthly(gguid,tid,eli,arc,ut, uta,exp,gguidp,ind,tap,dsp,dsc,dsq1,dsq2,utc,tidc,gguid_worker,workername,[month],[year], hourly_rate,date) VALUES ("sql = sql .. "'" .. gguidmonth .. "'," .. tostring(utility.tid()) .. ",0,0,'','','',''," ..tostring(database.getind("monthly")) .. ",'','','',0,0,'',0,'" ..worker .. "','" .. utility.convap(workername) .. "','" .. actualmonths .."'," ..tostring(actualyear) .. "," ..tostring(hourlyrate) .. ",#" .. utility.formatdate(utility.getnow(),"yyyy-MM-dd") .. "#)"

database.setsql(sql)

else

rows = tme.getrows()

gguidmonth = rows[1].getvalue("gguid")

total_account = rows[1].getvalue("total_account")

--I eliminate the detail lines

database.setsql("DELETE * FROM monthly_rows WHERE gguidp='" .. gguidmonth .. "'")

end

Nous ne prenons en considération seulement les opérateurs qui ont un nom valide et après nous voyons s’il existe un mensuel pour cet opérateur avec le mois et l’année requis. S’il n’existe pas nous le créons, sinon nous le récupérons le précédent en supprimant les lignes à l’intérieur, car nous allons ensuite les recréer.

Veuillez noter la chaîne de création où sont indiqués tous les champs de gestion de Nios4 et les champs propres au tableau. En plus n’oubliez pas que pour éviter des dysfonctionnements il est nécessaire de donner toujours une valeur à tous les champs, car la condition null n’est pas gérée.

Attention: dans ce cas également le if initial c’est pas fermé.

--I begin to read the reports

table_rows = database.getsql("SELECT * FROM work_hour WHERE eli=0 and gguid_worker='" .. worker .. "'")

totalhour = 0

rows = table_rows.getrows()

for i = 1,table_rows.countrows() do

m = utility.datemonth(rows[i].getvalue("date"))

y = utility.dateyear(rows[i].getvalue("date"))

wrk = rows[i].getvalue("gguid_worker")

if m == actualmonth and y == actualyear then

- I create the row and save it

gguidr = utility.gguid()

sql = "INSERT INTO monthly_rows(gguid,tid,eli,arc,ut,uta,exp,gguidp,ind,tap,dsp,dsc,dsq1,dsq2,utc,tidc) VALUES ("sql = sql .. "'" .. gguidr .. "'," .. tostring(utility.tid()) .. ",0,0,'','','','" .. gguidmonth .. "'," .. tostring(database.getind("monthly_rows")) .. ",'monthly','','',0,0,'',0)"

database.setsql(sql)

- add the missing values

sql = "UPDATE monthly_rows SET date=#" .. utility.formatdate(rows[i].getvalue("date"),"yyyy-MM-dd") .. "#,"

sql = sql .. "gguid_customer='" .. rows[i].getvalue("gguid_customer") .. "', customer='" .. utility.convap(rows[i].getvalue("customer")) .. "',"

sql = sql .. "total_hour=" .. utility.convi(rows[i].getvalue("total_hour")) .. ","

sql = sql .. "work_done=" .. utility.convap(rows[i].getvalue("work_done")) .. "',"

sql = sql .. "site='" .. utility.convap(rows[i].getvalue("site")) .. "'"

sql = sql .. " WHERE gguid='" .. gguidr .. "'"

database.setsql(sql)

totalhour = totalhour + rows[i].getvalue("total_hour")

end

end

Maintenant que nous avons créée ou récupérée la tête du document de notre mensuel, nous commençons à extrapoler les lignes du compteur horaire en fonction de l’opérateur. Dans ce cas deux requêtes d’écriture sont exécutées pour plus de commodité: la première définit la nouvelle ligne en saisissant les valeurs pour le programme, tandis que la deuxième saisit nos données.

-- update the head of the monthly

total_month = totalhour * hourlyrate

balance = total_month– total_account

sql = "UPDATE monthly SET total_month=" .. utility.convi(total_month) .. ",total_hour=" .. utility.convi(totalhour) .. ",balance=".. utility.convi(balance) .. " WHERE gguid='" .. gguidmonth .."'" database.setsql(sql)

end

end

program.refreshsection("monthly")

Après avoir tourné toutes les lignes, nous mettons à jour la tête du mensuel en saisissant le prix total et ce que nous avons déjà payé à l’opérateur.

Nous terminons la condition if concernant le nom de l’opérateur et le cycle for.

Enfin nous forçons le programme pour mettre à jour les sections qu’utilisent le tableau de mensuels pour montrer les documents créés.