from pysqlite2 import dbapi2 as sqlite import sys, datetime def ekasivu(lajit, tyypit, virheet): return """ WWW-sovellukset - HT 5

Treenikirjanpito

*

%s

*

%s

* 2008-05-18 13:40

%s

* 1:05:30

%s

10

%s

150

185

2000

Vapaata lätinää

Laji %s

%s

Treenityyppi %s

%s

""" % (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 += "" 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)