#scheduler koda za pošiljanje mailov za stanje števcev
def send_mail_stevci(first_reminder = False):
dons = datetime.datetime.now()
#a = True
try:
if dons.day in [22,25,28]:
#if a:
counters_data_oddani = db((db.counters.c_date.year() == dons.year) &
(db.counters.c_date.month() == dons.month)).select(db.counters.c_user_inserted,
db.counters.c_machine_id,
db.machines.m_code,
join= db.machines.on(
db.machines.id == db.counters.c_machine_id)).as_list()
users_machines = db(db.user_machines.um_status == 1).select(db.user_machines.um_user,
db.machines.m_code,
db.auth_user.email,
join = [db.machines.on(db.user_machines.um_machine ==
db.machines.id),
from itertools import groupby
from operator import itemgetter
nw_users_machines = []
#pogledamo kaj vse mašine ki jih user ima in za katere ni še oddal ta mesec
#glede na to mu bomo pol pošiljal maile
for rec in users_machines:
if not any(d['counters']['c_machine_id'] == rec["machines"]["id"] for d in counters_data_oddani):
nw_users_machines.append({"user": rec["user_machines"]["um_user"], "m_code" : rec["machines"]["m_code"], "email": rec["auth_user"]["email"],
"machine_id": rec["machines"]["id"]})
#print nw_masine_neoodanih
masine_uporabnikov_unique = [dict(t) for t in set([tuple(d.items()) for d in nw_users_machines])]
#sortiramo po worker_nick
sortWorkers = sorted(masine_uporabnikov_unique , key=itemgetter('user'))
#print sortWorkers
grouper = lambda x: (x["user"])
result = []
#print masine_neoddanih_unique
masine_uporabnikov_grupirane= []
for key, grp in groupby(sorted(sortWorkers, key = grouper), grouper):
group = list(grp)
all_machines = [item['m_code'] for item in group]
all_machines_codes = [(item['machine_id']) for item in group]
# print group
# print group[0]["user"], all_machines
masine_uporabnikov_grupirane.append({"user": group[0]["user"], "mail" :group[0]["email"], "machines": all_machines, "machines_codes": all_machines_codes})
for neoddan in masine_uporabnikov_grupirane:
#if neoddan["machines"]:
mail_send = False
dan = dons.day
#dan = 28
msg = "Email ni bil poslan. Ali še ni pravi datum ali pa nekaj ne dela"
if dan == 22:
msg = """<html>Pozdravljeni,<br />
<br />
bliža se konec meseca in ponovno je čas, da pristopite k vašim napravam, jim ukažete, da vam pokažejo,
koliko ste jih v tem mesecu mučili s tiskanjem ter nam to sporočite preko našega portala.<br />
<br />
Oddati morate stanja števcev za naprave s kodami <b>%s </b>.<br />
<br />
Sledite povezavi:<br />
kjer se prijavite z vašim uporabniškim imenom in geslom, katerega že poznate, ter oddate stanja za vsako napravo,
ki jo uporabljate.<br />
<br />
Punce v našem podjetju vam bodo zelo hvaležne, saj jim boste olajšali delo. Prav tako vas ne bodo motile pri vašem delu
s prošnjami glede stanja števcev, saj imate zagotovo dovolj dela, ker se bliža konec meseca. <br />
<br />
<br />
Lep pozdrav<br />
<br />
Ekipa Bilban<br />
</html>""" % (', '.join(x for x in neoddan["machines"]))
#print msg
mail_send = mail_reminder(neoddan, msg)
elif dan == 25:
msg = """<html>Pozdravljeni,<br />
<br />
radi bi vam sporočili, da smo že <b>25.</b> v mesecu, sistem pa nam sporoča, da nam še niste sporočili
stanja števcev vaših naprav. Res bi bili veseli in hvaležni, če lahko to uredite v čimkrajšem času.<br />
<br />
Za naprave s kodami <b> %s </b> še niste oddali stanja števcev. <br />
<br />
Prosimo sledite povezavi:<br />
kjer se prijavite z vašim uporabniškim imenom in geslom, katerega že poznate, ter oddate stanja za vsako napravo,
ki jo uporabljate.<br />
<br />
Hvala še enkret in lep pozdrav.<br />
<br />
Ekipa Bilban
</html>""" % (', '.join(x for x in neoddan["machines"]))
#print msg
mail_send = mail_reminder(neoddan, msg)
elif dan == 28:
msg = """<html>Pozdravljeni,<br />
<br />
spet mi iz Bilbana. Torej ja, ammmmm.... konec meseca je tu in stanja števcev vaših naprav še vedno ni v sistemu.<br />
<br />
Res, res, res bi vas prosili če si vzamete 10 minut časa, sledite povezavi
in nam sporočite stanja števcev za sledeče naprave <b>%s</b>. <br />
<br />
Naše punce so že pretežno nervozne, saj morajo po končanem zbiranju podatkov narediti še obračun in druga administrativna dela,
kar jim vzame precej časa. Prav tako bo kmalu nov mesec, kar pomeni kup težav, če nimamo podatkov in tudi vi boste jezni, če
računi in izračuni ne bodo prispeli v doglednem času. Skratka, ni prijetno. <br />
Tudi jaz vam bom hvaležen, sicer je v ŽIVČNEM krču tudi IT služba. In še jaz sem kriv za to da števci niso popisani,
čeprav sem samo informatik tukaj.<br />
<br />
Hvala vam, ker vemo da boste oddali stanje števcev vaših naprav.<br />
<br />
Lep pozdrav<br />
<br />
Ekipa Bilban
</html>""" % (', '.join(x for x in neoddan["machines"]))
#print msg
mail_send = mail_reminder(neoddan, msg)
if mail_send:
db.mail_logger.insert(ml_touser = neoddan["user"],
ml_text = msg,
ml_status =1 ) #status = 1 pomen da je blo poslano
else:
db.mail_logger.insert(ml_touser = neoddan["user"],
ml_text = msg,
ml_status = 2 ) #status = 2 pomen da ni blo poslano
else:
db.mail_logger.insert(ml_touser = neoddan["user"],
ml_text = "User nima naprav",
ml_status = 2 ) #status = 2 pomen da ni blo poslano
db.commit()
# else:
# db.mail_logger.insert(ml_touser = 2,
# ml_text = "Ni še datum za poslat maile",
# ml_status = 2 ) #status = 2 pomen da ni blo poslano
# db.commit()
except Exception as e:
import sys
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
errmsg = ["error pri pošiljanju e-mailov", exc_type, fname, exc_tb.tb_lineno,e.__doc__ , e.message]
#Writte error to log file
mailErrorLogger(errmsg)
# instantiate Scheduler class
from gluon.scheduler import Scheduler
scheduler = Scheduler(db)