from pysqlite2 import dbapi2 as sqlite
import sys, datetime
def ekasivu(lajit, tyypit, virheet):
return """
WWW-sovellukset - HT 5
Treenikirjanpito
""" % (virheet["enimi"], virheet["snimi"], virheet["aika"], virheet["kesto"], virheet["matka"], lajit, virheet["lajit"], tyypit, virheet["tyypit"])
def tokasivu(tulos, virheet):
return """
WWW-sovellukset - HT 5
Treenikirjanpito
%s
Uusi treeni on lisätty
Treenit
%s
""" % (virheet["uusi"], tulos)
def hae_nimet(con, nimet):
cur = con.cursor()
sql = """
SELECT *
FROM Henkilo
"""
try:
cur.execute(sql)
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
req.write(virhe)
nimet += '"
return nimet
def hae_lajit(con, lajit):
cur = con.cursor()
sql = """
SELECT *
FROM laji
"""
try:
cur.execute(sql)
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
req.write(virhe)
lajit += '"
return lajit
def hae_tyypit(con, tyypit):
cur = con.cursor()
sql = """
SELECT *
FROM Treenityyppi
"""
try:
cur.execute(sql)
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
req.write(virhe)
for rivi in cur:
tyypit += '
' % (rivi['TreenityyppiID'], rivi['Treenityyppinimi'])
return tyypit
def lisaa_treeni(con, form, req, hloID):
cur = con.cursor()
Alkuaika = form.getfirst("aika")
kesto = form.getfirst("kesto")
Km = form.getfirst("matka")
Syke_avg = form.getfirst("ksyke")
Syke_max = form.getfirst("msyke")
Kalorit = form.getfirst("kalorit")
Kommentti = form.getfirst("kommentti")
HenkiloID = hloID
try:
cur.execute("""
INSERT INTO Treeni (Alkuaika, kesto, Km, Syke_avg, Syke_max, Kalorit, Kommentti, HenkiloID)
VALUES (:Alkuaika, :kesto, :Km, :Syke_avg, :Syke_max, :Kalorit, :Kommentti, :HenkiloID)
""", {"Alkuaika":Alkuaika, "kesto":kesto, "Km":Km, "Syke_avg":Syke_avg, "Syke_max":Syke_max, "Kalorit":Kalorit, "Kommentti":Kommentti, "HenkiloID":HenkiloID})
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
con.rollback()
req.write(virhe)
con.commit()
TreeniID = cur.lastrowid
return TreeniID
def lisaa_lajit(con, form, req, treeniID):
cur = con.cursor()
lajit = form.getlist("lajit")
try:
for i in lajit:
cur.execute("""
INSERT INTO lajia (TreeniID, LajiID)
VALUES (:TreeniID, :LajiID)
""", {"TreeniID":treeniID, "LajiID":i})
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
con.rollback()
req.write(virhe)
con.commit()
def lisaa_tyypit(con, form, req, treeniID):
cur = con.cursor()
tyypit = form.getlist("tyypit")
try:
for i in tyypit:
cur.execute("""
INSERT INTO tyyppia (TreeniID, TreenityyppiID)
VALUES (:TreeniID, :TreenityyppiID)
""", {"TreeniID":treeniID, "TreenityyppiID":i})
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
con.rollback()
req.write(virhe)
con.commit()
def tulokset(con, form, req, tulos):
cur = con.cursor()
try:
cur.execute("""
SELECT Laji.Lajinimi as laji, Henkilo.HenkiloID as henkiloID, Henkilo.Etunimi as enimi, Henkilo.Sukunimi as snimi, Treeni.Alkuaika as aika
FROM Laji, lajia, Treeni, Henkilo
WHERE Laji.LajiID = lajia.LajiID AND lajia.TreeniID = Treeni.TreeniID AND Treeni.HenkiloID = Henkilo.HenkiloID
ORDER BY snimi, enimi, aika
""")
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
req.write(virhe)
hid = ""
eka = 0
tulos += ""
for rivi in cur:
if hid == rivi["henkiloID"]:
tulos += "- %s %s
" % (rivi["laji"], rivi["aika"])
else:
if eka == 0:
tulos += "- %s %s
" % (rivi["enimi"], rivi["snimi"])
tulos += "- %s %s
" % (rivi["laji"], rivi["aika"])
hid = rivi["henkiloID"]
eka = 1
elif eka == 1:
tulos += "
- %s %s
" % (rivi["enimi"], rivi["snimi"])
tulos += "- %s %s
" % (rivi["laji"], rivi["aika"])
hid = rivi["henkiloID"]
tulos += "
"
return tulos
def tarkasta_nimi(con, form, req, enimi, snimi, virheet):
cur = con.cursor()
sql = """
SELECT *
FROM Henkilo
"""
try:
cur.execute(sql)
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
req.write(virhe)
for rivi in cur:
if enimi == rivi["Etunimi"] and snimi == rivi["Sukunimi"]:
return rivi["HenkiloID"]
try:
cur.execute("""
INSERT INTO Henkilo (Etunimi, Sukunimi)
VALUES (:Etunimi, :Sukunimi)
""", {"Etunimi":enimi, "Sukunimi":snimi})
except:
virhe = "WIRHE: %s" % sys.exc_info()[0]
con.rollback()
req.write(virhe)
con.commit()
virheet["uusi"] = "Uusi käyttäjä: %s %s" % (enimi, snimi)
return cur.lastrowid
def tarkistus(form, virheet, enimi, snimi):
virheita = 0
aika = form.getfirst("aika")
kesto = form.getfirst("kesto")
matka = form.getfirst("matka")
if not enimi:
virheet["enimi"] = "Nimikenttä ei saa olla tyhjä."
virheita += 1
if not snimi:
virheet["snimi"] = "Nimikenttä ei saa olla tyhjä."
virheita += 1
#TODO: aloitusajan tarkistus
if not kesto:
virheet["kesto"] = "Kesto ei saa olla tyhjä"
virheita += 1
if matka:
if matka == "0":
virheet["matka"] = "Matka ei saa olla 0, mutta voi jättää tyhjäksi."
virheita += 1
if not form.getlist("lajit"):
virheet["lajit"] = "Valitse ainakin yksi laji."
virheita += 1
if not form.getlist("tyypit"):
virheet["tyypit"] = "Valitse ainakin yksi tyyppi."
virheita += 1
return virheita
def index(req):
req.content_type = "text/html"
form = req.form
con = sqlite.connect ('/home3/304/juiitamm/html/sovellukset/vt5/hidden/kanta/treeni')
con.text_factory = str
con.row_factory = sqlite.Row
lajit = ""
tyypit = ""
tulos = ""
tallenna = form.getfirst("tallenna")
virheet = dict([["enimi", ""], ["snimi", ""], ["kesto", ""], ["aika", ""], ["matka", ""], ["lajit", ""], ["tyypit", ""], ["uusi", ""]])
lajit = hae_lajit(con, lajit)
tyypit = hae_tyypit(con, tyypit)
if tallenna:
enimi = form.getfirst("enimi")
snimi = form.getfirst("snimi")
if tarkistus(form, virheet, enimi, snimi) == 0:
hloID = tarkasta_nimi(con, form, req, enimi, snimi, virheet)
treeniID = lisaa_treeni(con, form, req, hloID)
lisaa_lajit(con, form, req, treeniID)
lisaa_tyypit(con, form, req, treeniID)
tulos = tulokset(con, form, req, tulos)
return tokasivu(tulos, virheet)
else:
return ekasivu(lajit, tyypit, virheet)
else:
return ekasivu(lajit, tyypit, virheet)