diff --git a/tailbone/forms/renderers/products.py b/tailbone/forms/renderers/products.py index 1857d791..5ae60954 100644 --- a/tailbone/forms/renderers/products.py +++ b/tailbone/forms/renderers/products.py @@ -2,7 +2,7 @@ ################################################################################ # # Rattail -- Retail Software Framework -# Copyright © 2010-2015 Lance Edgar +# Copyright © 2010-2016 Lance Edgar # # This file is part of Rattail. # @@ -24,13 +24,14 @@ Product Field Renderers """ -from __future__ import unicode_literals +from __future__ import unicode_literals, absolute_import + +from rattail.gpc import GPC from formalchemy import TextFieldRenderer -from rattail.gpc import GPC -from .common import AutocompleteFieldRenderer -from webhelpers.html import literal +from webhelpers.html import tags, literal +from tailbone.forms.renderers.common import AutocompleteFieldRenderer from tailbone.util import pretty_datetime @@ -57,14 +58,18 @@ class GPCFieldRenderer(TextFieldRenderer): @property def length(self): # Hm, should maybe consider hard-coding this...? - return len(str(GPC(0))) + return len(unicode(GPC(0))) def render_readonly(self, **kwargs): gpc = self.raw_value if gpc is None: return '' gpc = unicode(gpc) - return '{0}-{1}'.format(gpc[:-1], gpc[-1]) + gpc = '{}-{}'.format(gpc[:-1], gpc[-1]) + if kwargs.get('link'): + product = self.field.parent.model + gpc = tags.link_to(gpc, kwargs['link'](product)) + return gpc class DepartmentFieldRenderer(TextFieldRenderer): diff --git a/tailbone/views/products.py b/tailbone/views/products.py index f5749c26..cd3dfbb9 100644 --- a/tailbone/views/products.py +++ b/tailbone/views/products.py @@ -70,6 +70,21 @@ from tailbone.progress import SessionProgress # return query +class DescriptionFieldRenderer(fa.TextFieldRenderer): + """ + Renderer for product descriptions within the grid; adds hyperlink. + """ + + def render_readonly(self, **kwargs): + description = self.raw_value + if description is None: + return '' + if kwargs.get('link'): + product = self.field.parent.model + description = tags.link_to(description, kwargs['link'](product)) + return description + + class ProductsView(MasterView): """ Master view for the Product class. @@ -166,9 +181,16 @@ class ProductsView(MasterView): g.filters['vendor_any'] = g.make_filter('vendor_any', self.VendorAny.name, label="Vendor (any)") # factory=VendorAnyFilter, joiner=join_vendor_any) - g.default_sortkey = 'description' + g.default_sortkey = 'upc' + + product_link = lambda p: self.get_action_url('view', p) g.upc.set(renderer=forms.renderers.GPCFieldRenderer) + g.upc.attrs(link=product_link) + + g.description.set(renderer=DescriptionFieldRenderer) + g.description.attrs(link=product_link) + g.regular_price.set(renderer=forms.renderers.PriceFieldRenderer) g.current_price.set(renderer=forms.renderers.PriceFieldRenderer) g.configure(