diff --git a/tailbone/templates/batch/row.view.mako b/tailbone/templates/batch/row.view.mako new file mode 100644 index 00000000..7fc33199 --- /dev/null +++ b/tailbone/templates/batch/row.view.mako @@ -0,0 +1,10 @@ +## -*- coding: utf-8 -*- +<%inherit file="/crud.mako" /> + +<%def name="title()">${batch_display} Row + +<%def name="context_menu_items()"> +
  • ${h.link_to("Back to {0}".format(batch_display), url('{0}.view'.format(route_prefix), uuid=row.batch_uuid))}
  • + + +${parent.body()} diff --git a/tailbone/templates/vendors/invoices/row.view.mako b/tailbone/templates/vendors/invoices/row.view.mako new file mode 100644 index 00000000..4fb9847f --- /dev/null +++ b/tailbone/templates/vendors/invoices/row.view.mako @@ -0,0 +1,3 @@ +## -*- coding: utf-8 -*- +<%inherit file="/batch/row.view.mako" /> +${parent.body()} diff --git a/tailbone/views/batch.py b/tailbone/views/batch.py index 1252ec00..8261eba0 100644 --- a/tailbone/views/batch.py +++ b/tailbone/views/batch.py @@ -147,10 +147,19 @@ class BatchGrid(BaseGrid): def mapped_class(self): return self.batch_class + @property + def batch_display(self): + """ + Singular display text for the batch type, e.g. "Vendor Invoice". + Override this as necessary. + """ + return self.batch_class.__name__ + @property def batch_display_plural(self): """ - Plural display text for the batch type. + Plural display text for the batch type, e.g. "Vendor Invoices". + Override this as necessary. """ return "{0}s".format(self.batch_display) @@ -311,6 +320,13 @@ class BaseCrud(CrudView): """ flash = {} + @property + def home_route(self): + """ + The "home" route for the batch type, i.e. its grid view. + """ + return self.route_prefix + @property def permission_prefix(self): """ @@ -362,13 +378,6 @@ class BatchCrud(BaseCrud): """ return self.route_prefix - @property - def home_route(self): - """ - The "home" route for the batch type, i.e. its grid view. - """ - return self.route_prefix - @property def batch_display_plural(self): """ @@ -780,12 +789,26 @@ class BatchRowGrid(BaseGrid): return '{0}.{1}'.format(self.mapped_class.__name__.lower(), self.request.matchdict['uuid']) + @property + def batch_class(self): + """ + Model class of the batch to which the rows belong. + """ + return self.row_class.__batch_class__ + + @property + def batch_display(self): + """ + Singular display text for the batch type, e.g. "Vendor Invoice". + Override this as necessary. + """ + return self.batch_class.__name__ + def current_batch(self): """ Return the current batch, based on the UUID within the URL. """ - batch_class = self.row_class.__batch_class__ - return Session.query(batch_class).get(self.request.matchdict['uuid']) + return Session.query(self.batch_class).get(self.request.matchdict['uuid']) def modify_query(self, q): q = super(BatchRowGrid, self).modify_query(q) @@ -849,8 +872,8 @@ class BatchRowGrid(BaseGrid): self.configure_grid(g) batch = self.current_batch() - # g.viewable = True - # g.view_route_name = '{0}.rows.view'.format(self.route_prefix) + g.viewable = True + g.view_route_name = '{0}.row.view'.format(self.route_prefix) # TODO: Fix this check for edit mode. edit_mode = self.request.referrer.endswith('/edit') if edit_mode and not batch.executed and self.request.has_perm('{0}.edit'.format(self.permission_prefix)): @@ -922,6 +945,33 @@ class BatchRowCrud(BaseCrud): def mapped_class(self): return self.row_class + @property + def batch_class(self): + """ + Model class of the batch to which the rows belong. + """ + return self.row_class.__batch_class__ + + @property + def batch_display(self): + """ + Singular display text for the batch type, e.g. "Vendor Invoice". + Override this as necessary. + """ + return self.batch_class.__name__ + + def template_kwargs(self, form): + """ + Add batch row instance etc. to template context. + """ + row = form.fieldset.model + return { + 'row': row, + 'batch_display': self.batch_display, + 'route_prefix': self.route_prefix, + 'permission_prefix': self.permission_prefix, + } + def delete(self): """ "Delete" a row from the batch. This sets the ``removed`` flag on the @@ -1003,6 +1053,12 @@ def defaults(config, batch_grid, batch_crud, row_grid, row_crud, url_prefix, renderer='/batch/rows.mako', permission='{0}.view'.format(permission_prefix)) + # view batch row + config.add_route('{0}.row.view'.format(route_prefix), '{0}row/{{uuid}}'.format(url_prefix)) + config.add_view(row_crud, attr='read', route_name='{0}.row.view'.format(route_prefix), + renderer='{0}/row.view.mako'.format(template_prefix), + permission='{0}.view'.format(permission_prefix)) + # Bulk delete batch rows config.add_route('{0}.rows.bulk_delete'.format(route_prefix), '{0}{{uuid}}/rows/delete'.format(url_prefix)) config.add_view(row_grid, attr='bulk_delete', route_name='{0}.rows.bulk_delete'.format(route_prefix), diff --git a/tailbone/views/vendors/invoices.py b/tailbone/views/vendors/invoices.py index 1fef903d..8293c2c9 100644 --- a/tailbone/views/vendors/invoices.py +++ b/tailbone/views/vendors/invoices.py @@ -198,6 +198,7 @@ class VendorInvoiceRowGrid(BatchRowGrid): class VendorInvoiceRowCrud(BatchRowCrud): row_class = VendorInvoiceRow route_prefix = 'vendors.invoices' + batch_display = "Vendor Invoice" def includeme(config):