svv/items.py
author Tero Marttila <terom@fixme.fi>
Fri, 21 Jan 2011 04:44:30 +0200
changeset 61 ce1d012d02fe
parent 59 de6abcbd3c03
permissions -rw-r--r--
html: amend
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
# coding: utf-8
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
from svv import database as db
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
from svv.controllers import PageHandler
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
from svv.html import tags as html
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
from svv.forms import BaseForm, FormError
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
import logging
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
log = logging.getLogger('svv.items')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
class Item (object) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        Data-mapping for the items table
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
59
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    17
    def __init__ (self, name, detail=None, quantity=None, parent=None) :
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    18
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    19
        self.name = name
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    20
        self.detail = detail
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    21
        self.quantity = quantity
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    22
        self.parent = parent
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
    23
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
db.mapper(Item, db.items, properties=dict(
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    # forward ref to parent
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    parent      = db.relation(Item, remote_side=db.items.c.id, 
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        backref     = db.backref('children', remote_side=db.items.c.parent_id)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    ),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
))
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
class ItemForm (BaseForm) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        Form for editing item
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    def __init__ (self, session) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
            Use given database session for rendering form.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        super(ItemForm, self).__init__()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        self.session = session
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    def defaults (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        self.item_id = None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        self.item_name = None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
        self.item_detail = None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        self.item_quantity = None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        self.item_parent_id = None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    def load (self, item) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
            Load info from existing item for editing
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
        self.item_id = item.id
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        self.item_name = item.name
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
        self.item_detail = item.detail
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        self.item_quantity = item.quantity
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
        self.item_parent_id = item.parent.id if item.parent else None
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    def render_parent_select (self, name, parent_id) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
            Render <select> for parent
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
        # existing items suitable as parents
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        # XXX: currently only top-level items, as a heuristic
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
        parent_items = self.session.query(Item.id, Item.name).filter(Item.parent == None).all()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
        return (
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
            # <select> with options and selected=
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
            self.render_select_input(name, [(0, u"---")] + parent_items, parent_id)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    80
    def render (self, action, legend=u"Laitetiedot", return_url=None) :
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
            Render <form> HTML
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
                return_url          - URL for reset button
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    87
        return html.form(action=action, method='POST')(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    88
            html.fieldset(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    89
                html.legend(legend),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    91
                html.ol(
56
18e7b78813bd items: case -> sijainti
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    92
                    self.render_form_field('item_parent', u"Sijainti", u"Missä laite sijaitsee", (
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    93
                        self.render_parent_select('item_parent', self.item_parent_id)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    94
                    )),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    96
                    self.render_form_field('item_name', u"Nimi", u"Lyhyt nimi", (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    97
                        self.render_text_input('item_name', self.item_name)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    98
                    )),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    99
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   100
                    self.render_form_field('item_detail', u"Kuvaus", u"Tarkempi kuvaus", (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   101
                        self.render_text_input('item_detail', self.item_detail, multiline=True)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   102
                    )),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   103
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   104
                    self.render_form_field('item_quantity', u"Kappalemäärä", u"Jos on esim. useampi piuha/adapter, kirjaa niitten määrä; muuten jätä tyhjäksi", (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   105
                        self.render_text_input('item_quantity', self.item_quantity)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   106
                    )),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   107
                    
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   108
                    html.li(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   109
                        self.render_submit_button(u"Tallenna"),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   110
                        self.render_reset_button(u"Palaa inventaariin", return_url) if return_url else None,
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
                    ),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
                ),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
            ),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    def process (self, data) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
            Process incoming POST data
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        # bind
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
        self.data = data
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
        self.do_delete = self.process_action_field('delete')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
        if not self.do_delete :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
            try :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
                # XXX: self.process_id_field?
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
                self.item_parent_id = self.process_integer_field('item_parent')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
            except FormError, e :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
                self.fail_field(e, 'item_parent')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
            try :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
                self.item_name = self.process_text_field('item_name', required=True)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
            except FormError, e :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
                self.fail_field(e, 'item_name')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
            try :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
                self.item_detail = self.process_text_field('item_detail')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
            except FormError, e :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
                self.fail_field(e, 'item_detail')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
            try :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
                self.item_quantity = self.process_integer_field('item_quantity')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
            except FormError, e :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
                self.fail_field(e, 'item_quantity')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        # ok? 
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
        return not self.errors
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
class DeleteItemForm (BaseForm) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
        Display a list of items to delete, and confirm
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
    def __init__ (self, session) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
            Use given database session for rendering form.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
        super(DeleteItemForm, self).__init__()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
        self.session = session
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
        # list of items to delete
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
        self.items = []
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
    
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   173
    def load (self, items) :
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
        """
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   175
            Init set of items to delete
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   178
        self.items = items
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   180
    def render_items_list (self, name, items, visible=None) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   181
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   182
            Render list of items to delete.
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   183
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   184
                visible         - display list of items in addition the rendering the <input>'s
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   185
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   186
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   187
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   188
        def render_items (items, with_list, with_input) :
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   189
            """ Item <ul> or <input>s """
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   190
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   191
            if not items :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   192
                # blank
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   193
                return None
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   194
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   195
            elif with_list :
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   196
                # nested list
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   197
                return html.ul(
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   198
                    render_item(item, True, with_input) for item in items
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   199
                )
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   200
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   201
            else :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   202
                # just the controls
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   203
                return [render_item(item, False, with_input) for item in items]
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   204
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   205
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   206
        def render_item (item, with_list, with_input) :
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   207
            """ Item <li> or <input> """
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   208
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   209
            if with_input :
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   210
                # the form field
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   211
                input = html.input(type='hidden', name='items', value=item.id),
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   212
            else :
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   213
                # no field
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   214
                input = None
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   215
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   216
            if with_list :
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   217
                return html.li(
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   218
                    input,
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   219
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   220
                    item.name if visible else None,
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   221
                    
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   222
                    # don't recurse inputs
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   223
                    render_items(item.children, with_list, with_input=False),
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   224
                )
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   225
            else :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   226
                # just the input
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   227
                return input
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   228
       
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   229
        ## Render <div> or <input>s
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   230
        if visible :
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   231
            # <div> with nested <li>s
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   232
            return html.div(class_='value')(
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   233
                render_items(items, with_list=True, with_input=True),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
            )
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   235
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   236
        else :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   237
            # just the <input>s
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   238
            return render_items(items, with_list=False, with_input=True)
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   240
    def render (self, legend=None, delete_action=None, confirm_action=None, return_url=None, item_listing=None) :
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
            Render form with list of target items, and a confirm button
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   243
                
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   244
                legend              - form title
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   245
                delete_action       - URL for initial confirm stage submit
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   246
                confirm_action      - URL for final delete stage submit
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   247
                reutrn_url          - URL for cancel button
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   248
                item_listing        - display recursive item listing for confirmation
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   249
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   250
            Supply either delete_action or confirm_action, but not both
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   253
        action = delete_action or confirm_action
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   254
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
        return html.form(action=action, method='POST')(
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
            html.fieldset(
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   257
                html.legend(legend),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   259
                # raw field with just the <input>s
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   260
                (self.render_items_list('items', self.items, visible=False)) if not item_listing else None,
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   261
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
                html.ol(
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   263
                    # full UI field
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   264
                    (self.render_form_field('items', u"Poistettavat laitteet", u"Kaikki listatut laitteet poistetaan inventaarista", (
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   265
                        self.render_items_list('items', self.items, visible=True)
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   266
                    )) if item_listing else None),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
                    html.li(
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   269
                        self.render_submit_button(u"Poista") if delete_action else None,
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   270
                        self.render_submit_button(u"Varmista", 'confirm') if confirm_action else None,
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
                        
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   272
                        self.render_reset_button(u"Peruuta", return_url) if return_url else None,
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
                    ),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
                )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
            )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
    def process_items_list (self, name) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   279
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
            Uses the incoming list of id's to build the list of Item's to delete.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   283
        # incoming ids
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   284
        item_ids = self.process_list_field('items', type=int)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   285
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
        # look up
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   287
        items = self.session.query(Item).filter(Item.id.in_(item_ids)).all()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   288
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   289
        # make sure they all exist
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   290
        found = [item_id for item_id in item_ids if item_id in set(item.id for item in items)]
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   291
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   292
        if set(found) != set(item_ids) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   293
            raise FormError(name, found, "Some items were not found")
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   294
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   295
        if not items :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   296
            raise FormError(name, [], "No items were given")
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   297
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   298
        # ok
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   299
        return items
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   300
    
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   301
    def process (self, data) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   302
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   303
            Look up list of Item's to delete.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   304
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   305
            Returns True if the delete is confirmed, False otherwise.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   306
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   307
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   308
        # bind
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   309
        self.data = data
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   310
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   311
        # load items
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   312
        try :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   313
            self.items = self.process_items_list('items')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   314
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   315
        except FormError, e :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   316
            self.fail_field(e, 'items')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   317
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   318
        # confirm?
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   319
        confirm = self.process_action_field('confirm')
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   320
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   321
        return not self.errors and confirm
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   322
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   323
class ItemView (PageHandler) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   324
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   325
        Display/edit info for a single item
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   326
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   327
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   328
    def update (self, item, form) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   329
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   330
            Update item data from form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   331
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   332
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   333
        # lookup
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   334
        item.parent = self.session.query(Item).get(form.item_parent_id)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   335
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   336
        # modify
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   337
        item.name = form.item_name
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   338
        item.detail = form.item_detail
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   339
        item.quantity = form.item_quantity
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   340
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   341
        # update
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   342
        self.session.commit()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   343
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   344
    def process (self, id) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   345
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   346
            Update item data if POST'd
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   347
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   348
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   349
        # db
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   350
        self.session = self.app.session()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   351
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   352
        # item in concern
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   353
        self.item = self.session.query(Item).get(id)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   354
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   355
        # form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   356
        self.form = ItemForm(self.session)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   357
        self.form.load(self.item)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   358
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   359
        # process?
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   360
        if self.POST :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   361
            if self.form.process(self.POST) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   362
                # update
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   363
                self.update(self.item, self.form)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   364
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   365
                # ok, done with item, redirect to full list view...
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   366
                return self.redirect_for(InventoryView, fragment=('item-%d' % self.item.id))
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   367
            
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   368
            else :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   369
                # re-render form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   370
                return
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   371
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   372
    def render_subitems_table (self, subitems) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   373
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   374
            Render listing of child items in this item
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   375
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   376
            
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   377
        return ItemTable(self).render(subitems, parent=self.item)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   378
        
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   379
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   380
    def render_delete_form (self) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   381
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   382
            Render delete form for this item
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   383
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   384
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   385
        form = DeleteItemForm(self.session)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   386
        form.load([self.item])
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   387
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   388
        return form.render(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   389
            legend          = u"Poistaminen",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   390
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   391
            delete_action  = self.url_for(DeleteItemView),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   392
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   393
            item_listing    = False,
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   394
        )
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   395
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   396
    def render_content (self, id) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   397
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   398
            View item's info
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   399
        """
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   400
        
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   401
        # ourselves
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   402
        item = self.item
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   403
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   404
        # items in this item
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   405
        subitems = item.children
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   406
        
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   407
        return (
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   408
            html.h1("(#%d) %s" % (item.id, item.name)),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   409
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   410
            html.h3(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   411
                html.raw(u"Sijaitsee %s:ssa" % (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   412
                    html.a(href=self.url_for(ItemView, id=item.parent.id))(item.parent.name)
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   413
                )),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   414
            ) if item.parent else None,
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   415
            
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   416
            self.render_subitems_table(subitems) if subitems else None,
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   417
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   418
            self.form.render(
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   419
                action          = self.url_for(ItemView, id=id), 
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   420
                return_url      = self.url_for(InventoryView),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   421
            ),
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   422
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   423
            # delete form
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   424
            self.render_delete_form(),
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   425
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   426
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   427
class NewItemView (PageHandler) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   428
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   429
        Create new item
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   430
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   431
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   432
    def create (self, form) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   433
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   434
            Create and return new item from ItemForm data.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   435
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   436
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   437
        item = Item()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   438
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   439
        # validate and lookup parent
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   440
        item.parent = self.session.query(Item).get(form.item_parent_id)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   441
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   442
        # store
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   443
        item.name = form.item_name
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   444
        item.detail = form.item_detail
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   445
        item.quantity = form.item_quantity
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   446
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   447
        # insert
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   448
        self.session.add(item)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   449
        self.session.commit()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   450
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   451
        # ok
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   452
        return item
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   453
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   454
    def process (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   455
        # db
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   456
        self.session = self.app.session()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   457
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   458
        self.form = ItemForm(self.session)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   459
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   460
        # load POST
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   461
        if self.POST :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   462
            if self.form.process(self.POST) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   463
                # create
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   464
                item = self.create(self.form)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   465
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   466
                # redirect to full list view...
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   467
                return self.redirect_for(InventoryView, fragment=('item-%d' % item.id))
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   468
            
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   469
            else :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   470
                # fail, just render...
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   471
                return
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   472
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   473
        else :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   474
            # render blank form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   475
            self.form.defaults()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   476
    
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   477
    def render_content (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   478
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   479
            Render the proecss()'d form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   480
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   481
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   482
        return (
57
7a48e9d96ec8 items: fix NewOrderView
Tero Marttila <terom@fixme.fi>
parents: 56
diff changeset
   483
            self.form.render(action=self.url_for(NewItemView), legend=u"Lisää uusi")
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   484
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   485
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   486
class DeleteItemView (PageHandler) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   487
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   488
        Confirm deletion of items.
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   489
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   490
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   491
    def delete (self, form) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   492
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   493
            Delete items from form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   494
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   495
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   496
        # list of root Item's to delete, along with children
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   497
        items = form.items
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   498
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   499
        for item in items :
55
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   500
            # XXX: we shouldn't actually DELETE these; rather, mark them as removed
433842c04ab1 items: inventory table #id links, fix up DeleteItemForm
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   501
            #      messes up existing orders like this...
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   502
            self.session.delete(item)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   503
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   504
        # ok
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   505
        self.session.commit()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   506
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   507
    def process (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   508
        # db
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   509
        self.session = self.app.session()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   510
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   511
        # form
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   512
        self.form = DeleteItemForm(self.session)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   513
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   514
        # process
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   515
        if self.form.process(self.POST) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   516
            # delete
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   517
            self.delete(self.form)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   518
                
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   519
            # redirect back
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   520
            return self.redirect_for(InventoryView)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   521
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   522
        else :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   523
            # render
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   524
            pass
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   525
    
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   526
    def render_content (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   527
        return (
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   528
            self.form.render(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   529
                legend          = u"Poistettavat laitteet",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   530
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   531
                confirm_action   = self.url_for(DeleteItemView),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   532
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   533
                return_url      = self.url_for(InventoryView),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   534
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   535
                item_listing    = True,
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   536
            )
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   537
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   538
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   539
class ItemTable (object) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   540
    """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   541
        Table of items
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   542
    """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   543
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   544
    def __init__ (self, handler) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   545
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   546
                handler         - the AppHandler we are running under, used for url_for etc.
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   547
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   548
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   549
        self.handler = handler
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   550
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   551
    def url_for (self, *args, **kwargs) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   552
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   553
            Proxy to handler
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   554
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   555
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   556
        return self.handler.url_for(*args, **kwargs)
59
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   557
    
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   558
    def render_rows (self, items, parent=None) :
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   559
        """
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   560
            Render induvidual rows
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   561
        """
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   562
        
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   563
        for row, item in enumerate(items) :
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   564
            yield html.tr(id=('item-%d' % item.id), class_=('alternate' if row % 2 else None))(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   565
                html.td(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   566
                    html.a(href=self.url_for(InventoryView, fragment=('item-%d' % item.id)))(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   567
                        u'#%d' % item.id
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   568
                    )
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   569
                ),
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   570
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   571
                (
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   572
                    html.td(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   573
                        html.a(href=self.url_for(ItemView, id=item.parent.id))(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   574
                            item.parent.name
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   575
                        ) if item.parent else None
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   576
                    ),
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   577
                ) if not parent else None,
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   578
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   579
                html.td(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   580
                    html.a(href=self.url_for(ItemView, id=item.id))(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   581
                        item.name
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   582
                    )
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   583
                ),
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   584
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   585
                html.td(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   586
                    item.detail
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   587
                ),
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   588
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   589
                html.td(
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   590
                    "%d kpl" % item.quantity if item.quantity else None
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   591
                ),
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   592
            )
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   593
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   594
    def render (self, items, parent=None) :
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   595
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   596
            Render table for given set of items. If parent is given, those items are assumed to be the children of that
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   597
            item.
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   598
        """
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   599
59
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   600
        return html.table(class_='with-borders')(
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   601
            html.caption(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   602
                u"Kalustolistaus",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   603
                (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   604
                    html.a(href=self.url_for(ItemView, id=parent.id))(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   605
                        parent.name
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   606
                    ) if parent else None
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   607
                ),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   608
            ),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   609
        
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   610
            html.thead(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   611
                html.tr(
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   612
                    html.th(title) for title in (
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   613
                        u"#ID",
56
18e7b78813bd items: case -> sijainti
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
   614
                        u"Sijainti" if not parent else None,
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   615
                        u"Nimi",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   616
                        u"Kuvaus",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   617
                        u"Määrä",
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   618
                    ) if title
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   619
                ),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   620
            ),
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   621
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   622
            html.tbody(
59
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   623
                self.render_rows(items, parent)
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   624
            )
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   625
        )
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   626
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   627
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   628
class InventoryView (PageHandler) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   629
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   630
        Display overview of all items
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   631
    """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   632
    
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   633
    def process (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   634
        # db
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   635
        self.session = self.app.session()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   636
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   637
    def render_item_table (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   638
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   639
            Render HTML for full <table> of all items, sorted heirarchially (by parent)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   640
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   641
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   642
        # listing of inventory items
59
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   643
        # group items together by parent; along with the parent item itself
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   644
        # XXX: this only works correctly for top-level parents
de6abcbd3c03 items: add inventory-import script, and tweak listing
Tero Marttila <terom@fixme.fi>
parents: 57
diff changeset
   645
        items = self.session.query(Item).order_by(db.functions.coalesce(Item.parent_id, Item.id), Item.id).all()
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   646
        
53
06dad873204d items: use DeleteItemForm for ItemView as well
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   647
        return ItemTable(self).render(items)
48
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   648
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   649
    def render_item_form (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   650
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   651
            Render ItemForm for creating a new item
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   652
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   653
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   654
        form = ItemForm(self.session)
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   655
        form.defaults()
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   656
        
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   657
        return form.render(action=self.url_for(NewItemView), legend=u"Lisää uusi")
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   658
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   659
    def render_content (self) :
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   660
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   661
            Full listing of all inventory
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   662
        """
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   663
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   664
        return (
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   665
            html.h1(u"Inventaari"),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   666
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   667
            self.render_item_table(),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   668
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   669
            self.render_item_form(),
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   670
        )
06fa83c8c0bb items: Inventory management
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   671