summaryrefslogtreecommitdiff
path: root/controller.py
diff options
context:
space:
mode:
authorRené 'Necoro' Neumann <necoro@necoro.net>2010-05-10 21:40:26 +0200
committerRené 'Necoro' Neumann <necoro@necoro.net>2010-05-10 21:40:26 +0200
commit7b1b6578bd3f1fbb5f23fb0cb907229a8feb477d (patch)
tree214fc7e880102a09902e6cbb169785bca0a62d70 /controller.py
parente715c36c2b6047f30407412cc1af6b6afb12fd59 (diff)
downloadkosten-7b1b6578bd3f1fbb5f23fb0cb907229a8feb477d.tar.gz
kosten-7b1b6578bd3f1fbb5f23fb0cb907229a8feb477d.tar.bz2
kosten-7b1b6578bd3f1fbb5f23fb0cb907229a8feb477d.zip
Added the 'add expense' stuff
Diffstat (limited to 'controller.py')
-rw-r--r--controller.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/controller.py b/controller.py
index f9bd27c..2615a9f 100644
--- a/controller.py
+++ b/controller.py
@@ -1,12 +1,14 @@
from __future__ import with_statement
import web
+from web import form
from model import *
from helper import appdir
from renderer import render
-import datetime
+import datetime, decimal
+import operator as op
from sqlalchemy import sql
class Show:
@@ -47,8 +49,48 @@ class Show:
return render("show", exps = exps)
class Add:
+
+ dformat = "%d.%m.%Y"
+
+ form = form.Form(
+ form.Textbox(
+ "date",
+ form.notnull,
+ value = datetime.date.today().strftime(dformat)
+ ),
+ form.Textbox(
+ "expense",
+ form.notnull,
+ ),
+ form.Textbox(
+ "description",
+ form.notnull
+ ),
+ form.Dropdown(
+ "category",
+ map(op.itemgetter(0), sorted(Category.query.values(Category.name)))
+ ),
+ validators = map(lambda x: form.Validator(*x), (
+ ("Date Format does not match", lambda f: datetime.datetime.strptime(f.date, Add.dformat)),
+ ("Not a valid decimal", lambda f: decimal.Decimal(f.expense)),
+ ))
+ )
+
def GET(self):
- return "Add new"
+ return render("add", form = self.form())
+
+ def POST(self):
+ f = self.form()
+ if f.validates():
+ e = SingleExpense(category = Category.get_by(name = f.category.value))
+
+ e.date = datetime.datetime.strptime(f.date.value, self.dformat)
+ e.expense = decimal.Decimal(f.expense.value)
+ e.description = f.description.value
+
+ raise web.seeother(web.url("/"))
+ else:
+ return render("add", form = f)
class Edit:
def GET(self, id):