svv/orders.py
changeset 10 4bdb45071c89
parent 9 0327b83959e9
child 11 90a3c570c227
equal deleted inserted replaced
9:0327b83959e9 10:4bdb45071c89
   331             (
   331             (
   332                 tags.option(value=opt_value, selected=('selected' if opt_value == value else None))(opt_title)
   332                 tags.option(value=opt_value, selected=('selected' if opt_value == value else None))(opt_title)
   333             ) for opt_value, opt_title in options
   333             ) for opt_value, opt_title in options
   334         )
   334         )
   335 
   335 
       
   336     def render_datetime_input (self, name, value=None) :
       
   337         """
       
   338             Render HTML for a generic datetime control (using jQuery).
       
   339 
       
   340                 name            - field name, as used for POST
       
   341                 value           - selected date
       
   342         """
       
   343             
       
   344         return (
       
   345             self.render_text_input(name, (value.strftime(self.DATETIME_FORMAT) if value else None)),
       
   346 
       
   347             tags.script("$(document).ready(function () { $('#" + name + "').datetimepicker(); });"),
       
   348         )
       
   349 
   336     def render_customer_input (self) :
   350     def render_customer_input (self) :
   337         """
   351         """
   338             Render HTML for customer_id/name field inputs.
   352             Render HTML for customer_id/name field inputs.
   339         """
   353         """
   340 
   354 
   351     def render_contact_input (self) :
   365     def render_contact_input (self) :
   352         """
   366         """
   353             Render HTML for contact name field <input>s
   367             Render HTML for contact name field <input>s
   354         """
   368         """
   355         # recommended contacts for selected customer, if known
   369         # recommended contacts for selected customer, if known
   356         contacts = self.get_contact_list(self.customer_id)
   370         contacts = self.build_contact_list(self.customer_id)
   357 
   371 
   358         return (
   372         return (
   359             self.render_select_input('contact_id', ((id, name) for id, name, phone, email in contacts), self.contact_id)
   373             self.render_select_input('contact_id', ((id, name) for id, name, phone, email in contacts), self.contact_id),
   360             self.render_text_input('contact_name', self.contact_name),
   374             self.render_text_input('contact_name', self.contact_name),
   361 
   375 
   362             tags.script(r"$(document).ready(function () { $('#contact_id').formSelectPreset({textTarget: $('#contact_name')}); });"),
   376             tags.script(r"$(document).ready(function () { $('#contact_id').formSelectPreset({textTarget: $('#contact_name')}); });"),
   363         )
   377         )
   364 
   378 
   366         """
   380         """
   367             Render HTML for event start/end field <input>s
   381             Render HTML for event start/end field <input>s
   368         """
   382         """
   369         
   383         
   370         return (
   384         return (
   371             self.render_text_input('event_start', (self.event_start.strftime(self.DATETIME_FORMAT) if event_start else None)),
   385             self.render_datetime_input('event_start', self.event_start),
   372             " - ",
   386             " - ",
   373             self.render_text_input('event_end', (self.event_end.strftime(self.DATETIME_FORMAT) if event_end else None)),
   387             self.render_datetime_input('event_end', self.event_end),
   374 
   388 
   375             tags.script(r"""
   389             tags.script(r"""
   376 $(document).ready(function () { 
   390 $(document).ready(function () { 
   377     var event_start = $('#event_start');
   391     var event_start = $('#event_start');
   378     var event_end = $('#event_end');
   392     var event_end = $('#event_end');
   379 
   393 
   380     event_start.datetimepicker();
       
   381     event_end.datetimepicker(); 
       
   382     
       
   383 /* Buggy shit doesn't work
   394 /* Buggy shit doesn't work
   384 
   395 
   385     {
   396     {
   386         beforeShow: function (input, inst) {
   397         beforeShow: function (input, inst) {
   387             // copy default value from event_start
   398             // copy default value from event_start
   472             tags.input(type='submit', value=submit),
   483             tags.input(type='submit', value=submit),
   473         )
   484         )
   474 
   485 
   475 
   486 
   476 class OrdersView (PageHandler) :
   487 class OrdersView (PageHandler) :
   477     def render (self) :
   488     def render_content (self) :
   478         return tags.h1("Orders list")
   489         return tags.h1("Orders list")
   479 
   490 
   480 class OrderView (PageHandler) :
   491 class OrderView (PageHandler) :
   481     def render (self, id) :
   492     def render_content (self, id) :
   482         return tags.h1("Order info for #%d" % (id, ))
   493         return tags.h1("Order info for #%d" % (id, ))
   483 
   494 
   484 class NewOrderView (PageHandler) :
   495 class NewOrderView (PageHandler) :
   485     """
   496     """
   486         
   497             
   487     """
   498     """
   488 
   499 
   489     def render (self) :
   500     def render_content (self) :
       
   501 
       
   502         form = OrderForm(self.app)
       
   503         form.defaults()
       
   504 
       
   505         return form.render(action=self.url_for(NewOrderView))
       
   506 
       
   507         # XXX: under construction..
       
   508 
   490         if self.POST :
   509         if self.POST :
   491             print self.POST
   510             print self.POST
   492 
   511 
   493             # 
       
   494             
   512             
   495             # if we've gotten this far, then we can create it!
   513             # if we've gotten this far, then we can create it!
   496             sql = db.insert(db.orders).values(
   514             sql = db.insert(db.orders).values(
   497                 customer            = customer_id,
   515                 customer            = customer_id,
   498                 contact             = contact_id,
   516                 contact             = contact_id,
   507             order_id, = self.app.insert(sql)
   525             order_id, = self.app.insert(sql)
   508 
   526 
   509             # ok, we don't need the /new URL anymore, we can just show the order page
   527             # ok, we don't need the /new URL anymore, we can just show the order page
   510             return self.redirect_for(OrderView, id=order_id)
   528             return self.redirect_for(OrderView, id=order_id)
   511 
   529 
   512         # render form
   530 
   513         return self.render_form()
   531 
   514 
       
   515