svv/controllers.py
author Tero Marttila <terom@fixme.fi>
Wed, 22 Dec 2010 21:30:27 +0200
changeset 8 27e37082625e
parent 7 bbac4b0f4320
child 10 4bdb45071c89
permissions -rw-r--r--
html: Implement selfclosing and whitespace_sensitive options (for <textarea>s)
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
# coding: utf-8
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
"""
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
    Generic controller base classes.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
    respond(Request) -> Response
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
"""
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
from werkzeug import Response
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
7
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    10
from svv import html, pdf
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
from svv.html import tags
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
class AppHandler (object):
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        Per-request handler type, containing the request context and implementing the response.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        Works on a generic level, i.e. WSGI/Werkzeug URL-mapped request in, response out.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    def __init__ (self, app, request, urlmap) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
            Initialize for processing the given Request, to prepare for action-method later on
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
                app     - the global Application state
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
                request - the request state
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
                urlmap  - the URL map we were matched through
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        self.app = app
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        self.request = request
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        self.urlmap = urlmap
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    def build_url (self, endpoint, **values) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
            Return an URL for the given endpoint, applying the given values
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        return self.urlmap.build(endpoint, values)
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
7
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    40
    @property
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    41
    def POST (self) :
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    42
        """
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    43
            Access request's POST data
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    44
        """
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    45
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    46
        # MultiDict from werkzeug.Request
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    47
        return self.request.form
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    48
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    def respond (self, url_values) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
            Handle request that was mapped to ourselves via the URL routing, using given dict of values from URL.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
        raise NotImplementedError()
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
class PageHandler (AppHandler) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        Specialized AppHandler for normal HTML page views.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        Renders the layout template and HTML.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    def respond (self, url_values) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        title = "Index"
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
        css = [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
                "/static/layout.css", 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
                "/static/style.css", 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
                "/static/forms.css",
7
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    69
                "/static/treelist.css",
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    70
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    71
                "/static/jquery-ui/jquery-ui.css",
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        ]
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
        scripts = [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
                "/static/js/jquery.js",
7
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    75
                "/static/js/jquery-ui.min.js",  # fairly big
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    76
                "/static/js/jquery-ui-timepicker.js",
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    77
                "/static/js/jquery.ui.datepicker-fi.js",
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    78
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
                "/static/js/forms.js",
7
bbac4b0f4320 Further improve order form
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    80
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
                #"/static/js/prototype.js", 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
                #"/static/js/scriptaculous/scriptaculous.js", 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
                #"/static/js/treelist.js"
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        ]
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
        head = (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
            tags.title(title),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
            (tags.link(rel='Stylesheet', type="text/css", href=src) for src in css),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
            # XXX: script can't self-close >_<
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
            (tags.script(src=src)(" ") for src in scripts),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
        )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
        # XXX: silly circular-import hack for urls
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
        #      it's not sustainable for a base class to referr to its subclasses at define time
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
        from svv import urls
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
        header = ("Foo List")
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
        nav = [tags.ul(tags.li(tags.a(href='#')(name)) for name in ['Nav A', 'Nav B', 'Nav C'])]
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        menu = [tags.ul(tags.li(tags.a(href=url)(name)) for name, url in [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
            ("Etusivu",     self.build_url(urls.Index)),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
            ("Uusi tilaus", self.build_url(urls.NewOrderView)),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
            ("Tilaukset",   self.build_url(urls.OrdersView)),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
            ("Tilaajat",    self.build_url(urls.CustomersView)),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        ])]
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        footer = ("Copyright?")
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
        # render page HTML
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
        content = self.render(**url_values)
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
        layout = (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
            tags.div(id='header')(header),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
            tags.div(id='container')(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
                tags.div(id='menu')(menu),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
                tags.div(id='nav')(nav),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
                tags.div(id='content')(content),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
            ),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
            tags.div(id='footer')(footer),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
        
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
        # perform the actual rendering (run generators etc.)
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        html_text = unicode(html.document(head, layout))
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        # response object
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        # XXX: unicode?
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
        return Response(html_text, mimetype='text/html')
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    def render (self, **args) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
            Render and return HTML for page content.
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
            XXX: must be HTML object, support just text?
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
        raise NotImplementedError()
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
### XXX: random test controllers
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
class Document (AppHandler) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
        PDF generation/export
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    """
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
    def respond (self, url_values) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
        title = url_values.get('name', "Hello World")
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
        tpl = pdf.PageTemplate('id', 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
            header_columns  = (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
                ("", ""),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
                ("", ""),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
                ("", ""),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
                ("Vuokrasopimus", "%(today)s\n" + title + "\n"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
            ),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
            footer_columns  = (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
                ("Teekkarispeksi Ry", "www.teekkarispeksi.fi"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
                ("Tekniikkavastaava", "Juha Kallas\n045 xxx yyzz\njskallas@cc.hut.fi"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
                ("Varastovastaava", "Joel Pirttimaa\n045 xxx yyzz\njhpirtti@cc.hut.fi"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
                ("", ""),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
            ),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
        doc = pdf.DocumentTemplate([tpl],
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
            title = title, author = "A. N. Onous"
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        # stylesheet
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
        styles = pdf.Styles
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
        # tree root
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
        list_seq = pdf.ListItem.seq
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
        tree = pdf.ListItem("Sopimusehdot", styles.h2, None, list_seq(), [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
            pdf.ListItem("Osapuolet", styles.list_h2, None, list_seq(), [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
                pdf.ListItem(None, None, "Teekkarispeksi ry (Y-tunnus 1888541-7), jäljempänä “Vuokranantaja”."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
                pdf.ListItem(None, None, title + u", jäljempänä “Vuokraaja”. 1.1 ja 1.2 jäljempänä yhdessä “osapuolet”.")
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
            ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
            pdf.ListItem("Kaluston lainaaminen", styles.list_h2, None, list_seq(), [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
                pdf.ListItem("Yleistä", styles.list_h3, "Tässä sopimuksessa sovitaan toiminnasta Vuokranantajan lainatessa tanssimattoja Vuokraajalle"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
                pdf.ListItem("Vuokranantajan velvollisuudet", styles.list_h3, "Vuokranantaja sitoutuu toimittamaan sovittuna ajankohtana Vuokraajalle erikseen sovittava (liite) määrä tanssimattoja."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
                pdf.ListItem("Blaa Blaa", styles.list_h3, "Etc."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
            ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
            pdf.ListItem("Tätä sopimusta ja sitä koskevia erimielisyyksiä koskevat määräykset", styles.list_h2, None, list_seq(), [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
                pdf.ListItem("Sopimuksen voimassaolo", styles.list_h3, "Sopimus on osapuolia sitova sen jälkeen, kun osapuolet ovat sen allekirjoittaneet."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
                pdf.ListItem("Muutosten tekeminen", styles.list_h3, "Muutokset sopimukseen on tehtävä kirjallisesti molempien osapuolten kesken."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
                pdf.ListItem("Blaa Blaa", styles.list_h3, "Etc."),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
            ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
        ])
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
        from reportlab.platypus import Paragraph as p
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
        elements = [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   193
                p("Vuokrasopimus", styles.h1),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   194
                p("Teekkarispeksi ry AV-tekniikka", styles.h3),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   195
        ] + list(tree.render_pdf()) + [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   196
                p("Nouto", styles.h2),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   197
                p("\t\tAika: _______________\tPaikka: _______________", styles.text),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   198
                p("Palautus", styles.h2),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   199
                p("\t\tAika: _______________\tPaikka: _______________", styles.text),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   200
                
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   201
                pdf.SignatureBlock(("Vuokranantaja", "Vuokraaja"), ("%(column)s", "Nimen selvennys", "Aika ja paikka"), {
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   202
                    ('Vuokranantaja', 'Nimen selvennys'): "Joel Pirttimaa",
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   203
                    ('Vuokranantaja', 'Aika ja paikka'): 'Otaniemi, %(today)s',
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   204
                    ('Vuokraaja', 'Aika ja paikka'): 'Otaniemi, %(today)s',
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   205
                }),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   206
        ]
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   207
       
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   208
        # render elements to buf as PDF code
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   209
        pdf_code = doc.render_string(elements)
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   210
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   211
        return Response(pdf_code, mimetype='application/pdf')
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   212
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   213
class Index (PageHandler) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   214
    DATA = (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   215
        (100, "Top A", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   216
        (200, "Top B", [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
            (210, "Mid BA", [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
                (211, "Sub BAA", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
                (212, "Sub BAB", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
            ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
            (220, "Mid BB", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
        ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
        (300, "Top C", [
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
            (310, "Mid CA", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
            (320, "Mid CB", []),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
        ]),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
    )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    def render (self) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
        # build data set
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
        data = self.DATA
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
        def render_item (id, text, children) :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
            return tags.li(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
                tags.div(class_='item')(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
                    # item text
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
                    tags.a(tags.input(type='checkbox', name_=id, checked=(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
                        'checked' if self.request.form.get(str(id)) else None
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
                    )), text, class_='text'),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
                ),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
                # children
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
                tags.ul(render_item(*item) for item in children if item) if children else None,
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
                # 
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
                class_=('more open' if children else None),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
            )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
        # render it
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
        return (
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
            tags.h3("Item list"),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
            tags.form(action='.', method='post')(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
                tags.ul(class_='treelist')(render_item(*item) for item in data),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
                tags.input(type='submit'),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
            ),
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
        )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259