Add hyperlinks to product UPC and description, within main grid

These won't honor the indexing scheme yet, still need to think about
that.
This commit is contained in:
Lance Edgar 2016-05-03 22:10:54 -05:00
parent b718336ac2
commit aaa1d17507
2 changed files with 35 additions and 8 deletions

View file

@ -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):

View file

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