Overhaul product views a little, per customization needs

This commit is contained in:
Lance Edgar 2016-12-15 15:11:15 -06:00
parent f7267597ee
commit 9a6ad16e2f
5 changed files with 94 additions and 54 deletions

View file

@ -41,7 +41,9 @@ from .employees import EmployeeFieldRenderer
from .stores import StoreFieldRenderer
from .vendors import VendorFieldRenderer, PurchaseFieldRenderer
from .products import (GPCFieldRenderer, DepartmentFieldRenderer, SubdepartmentFieldRenderer, CategoryFieldRenderer,
BrandFieldRenderer, ProductFieldRenderer, PriceFieldRenderer, PriceWithExpirationFieldRenderer)
from .products import (GPCFieldRenderer, ScancodeFieldRenderer,
DepartmentFieldRenderer, SubdepartmentFieldRenderer, CategoryFieldRenderer,
BrandFieldRenderer, ProductFieldRenderer,
PriceFieldRenderer, PriceWithExpirationFieldRenderer)
from .batch import BatchIDFieldRenderer, HandheldBatchFieldRenderer

View file

@ -27,6 +27,8 @@ Product Field Renderers
from __future__ import unicode_literals, absolute_import
from rattail.gpc import GPC
from rattail.db import model
from rattail.db.util import maxlen
from formalchemy import TextFieldRenderer
from formalchemy.fields import SelectFieldRenderer
@ -57,7 +59,26 @@ class ProductFieldRenderer(AutocompleteFieldRenderer):
return tags.link_to(product, self.request.route_url('products.view', uuid=product.uuid))
class GPCFieldRenderer(TextFieldRenderer):
class ProductKeyFieldRenderer(TextFieldRenderer):
"""
Base class for product key field renderers.
"""
def render_readonly(self, **kwargs):
value = self.raw_value
if value is None:
return ''
value = self.render_value(value)
if kwargs.get('link'):
product = self.field.parent.model
value = tags.link_to(value, kwargs['link'](product))
return value
def render_value(self, value):
return unicode(value)
class GPCFieldRenderer(ProductKeyFieldRenderer):
"""
Renderer for :class:`rattail.gpc.GPC` fields.
"""
@ -67,16 +88,18 @@ class GPCFieldRenderer(TextFieldRenderer):
# Hm, should maybe consider hard-coding this...?
return len(unicode(GPC(0)))
def render_readonly(self, **kwargs):
gpc = self.raw_value
if gpc is None:
return ''
gpc = unicode(gpc)
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
def render_value(self, gpc):
return gpc.pretty()
class ScancodeFieldRenderer(ProductKeyFieldRenderer):
"""
Renderer for :class:`rattail.db.model.Product.scancode` field
"""
@property
def length(self):
return maxlen(model.Product.scancode)
class DepartmentFieldRenderer(SelectFieldRenderer):