--- a/svv/orders.py Fri Jan 07 02:46:29 2011 +0200
+++ b/svv/orders.py Fri Jan 07 03:19:37 2011 +0200
@@ -496,7 +496,7 @@
self.contract_text = self.DEFAULT_TEXT
- def render (self, action, submit=u"Tulosta Vuokrasopimus") :
+ def render (self, action, submit=u"Tulosta vuokrasopimus") :
# self.url_for(OrderContractDocument, id=id)
return tags.form(action=action, method='POST')(
@@ -521,7 +521,7 @@
tags.li(
tags.input(type='submit', value=submit),
- tags.input(type='submit', name='edit', value=u"Muokkaa lisää"),
+ tags.input(type='submit', name='edit', value=u"Muokkaa vuokrasopimusta"),
),
),
),
@@ -737,6 +737,94 @@
Render form for database object, let the user make updates, update the database.
"""
+ def process (self, id) :
+ """
+ Set up our object form.
+
+ Process incoming POST data.
+ """
+
+ # db session
+ self.session = self.app.session()
+
+ # order object
+ self.order = self.session.query(Order).options(db.eagerload(Order.customer), db.eagerload(Order.contact)).get(id)
+
+ def render_contract_form (self, id) :
+ """
+ Render the contract panel for our view
+ """
+
+ form = OrderContractForm(self.app)
+ form.defaults()
+
+ # prefilled values?
+ if self.POST :
+ # feed form POST data
+ form.process(self.POST)
+
+ # render
+ return form.render(action=self.url_for(OrderContractDocument, id=id))
+
+
+ def render_order (self, order) :
+ """
+ Render order fields
+ """
+
+ return tags.form(action=self.url_for(EditOrderView, id=order.id), method='GET')(
+ tags.fieldset(
+ tags.legend(u"Tilaustiedot"),
+
+
+ tags.ol(
+ (tags.li(
+ tags.h3(title),
+ (tags.div(value, class_='value') for value in values if value),
+
+ ) for title, values in (
+ (u"Tilaaja", (order.customer.name, )),
+ (u"Yhteyshenkilö", (
+ order.contact.name,
+ order.contact.phone,
+ order.contact.email,
+ )),
+ (u"Tapahtuma", (
+ order.event_name,
+ tags.pre(order.event_description.strip(), _whitespace_sensitive=True),
+ order.format_event_time(),
+ )),
+ )),
+
+ tags.li(
+ tags.input(type='submit', value=u"Muokkaa"),
+ ),
+ ),
+
+ ),
+ )
+
+ def render_content (self, id) :
+ """
+ Render our form
+ """
+
+ return (
+ tags.h1(u"Tilaus #%d" % (id, )),
+ tags.h3(u"%s - %s (%s)" % (self.order.customer.name, self.order.event_name, self.order.format_event_time())),
+
+ self.render_order(self.order),
+ self.render_contract_form(id),
+ )
+
+
+class EditOrderView (PageHandler) :
+ """
+ Render form for existing order, and update order.
+
+ XXX: concurrent edits!
+ """
+
def update (self, order, form) :
"""
Update order values from submitted form data
@@ -755,7 +843,7 @@
def process (self, id) :
"""
- Set up our object form.
+ Set up our order form.
Process incoming POST data.
"""
@@ -780,37 +868,22 @@
# submit data was OK, update order from form
self.update(self.order, self.form)
- else :
- # errors
- pass
-
- def render_contract_form (self, id) :
- """
- Render the contract panel for our view
- """
+ # return to order view
+ return self.redirect_for(OrderView, id=self.order.id)
- form = OrderContractForm(self.app)
- form.defaults()
-
- # prefilled values?
- if self.POST :
- # feed form POST data
- form.process(self.POST)
-
- # render
- return form.render(action=self.url_for(OrderContractDocument, id=id))
-
+ else :
+ # errors, re-show form
+ pass
+
def render_content (self, id) :
"""
- Render our form
+ Render our edit form
"""
return (
tags.h1(u"Tilaus #%d" % (id, )),
- tags.h3(u"%s - %s (%s)" % (self.form.customer_name, self.form.event_name, self.form.event_start.strftime('%d.%m.%Y'))),
-
- self.render_contract_form(id),
- self.form.render(action=self.url_for(OrderView, id=id))
+
+ self.form.render(action=self.url_for(EditOrderView, id=id)),
)
--- a/svv/urls.py Fri Jan 07 02:46:29 2011 +0200
+++ b/svv/urls.py Fri Jan 07 03:19:37 2011 +0200
@@ -7,13 +7,14 @@
# controllers
from svv.controllers import Index
from svv.customers import CustomersView, CustomerView
-from svv.orders import OrdersView, OrderView, NewOrderView, OrderContractDocument
+from svv.orders import OrdersView, OrderView, EditOrderView, NewOrderView, OrderContractDocument
# map URLs -> AppHandler
URLS = Map((
Rule('/orders/', endpoint=OrdersView),
Rule('/orders/new', endpoint=NewOrderView),
Rule('/orders/<int:id>', endpoint=OrderView),
+ Rule('/orders/<int:id>/edit', endpoint=EditOrderView),
Rule('/orders/<int:id>/Vuokrasopimus.pdf', endpoint=OrderContractDocument),
Rule('/customers', endpoint=CustomersView),