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 |
|