add price field renderers

This commit is contained in:
Lance Edgar 2012-07-26 14:03:20 -07:00
parent 3a015be690
commit 5deb198846

View file

@ -34,7 +34,7 @@ from edbob.pyramid import Session
import rattail
__all__ = ['UpcFieldRenderer']
__all__ = ['PriceFieldRenderer', 'RegularPriceFieldRenderer', 'UpcFieldRenderer']
class BatchIdFieldRenderer(formalchemy.FieldRenderer):
@ -58,6 +58,56 @@ class BatchIdFieldRenderer(formalchemy.FieldRenderer):
# def render(self, options, **kwargs):
class PriceFieldRenderer(formalchemy.fields.FloatFieldRenderer):
"""
Generic renderer for price (currency) fields.
"""
def render_readonly(self, **kwargs):
value = self.raw_value
if value is None:
return ''
return '$ %0.2f' % value
class RegularPriceFieldRenderer(PriceFieldRenderer):
"""
Custom renderer for the :attr:`rattail.Product.regular_price` field.
"""
def render_readonly(self, **kwargs):
prod = self.field.model
if prod.regular_price and prod.package_price:
return '$ %0.2f  ($ %0.2f / %u)' % (
prod.regular_price, prod.package_price, prod.package_price_quantity)
elif prod.regular_price:
return '$ %0.2f' % prod.regular_price
elif prod.package_price:
return '$ %0.2f / %u' % (
prod.package_price, prod.package_price_quantity)
return ''
class SalePriceFieldRenderer(PriceFieldRenderer):
"""
Custom renderer for the :attr:`rattail.Product.sale_price` field.
"""
def render_readonly(self, **kwargs):
prod = self.field.model
if prod.sale_price:
if prod.sale_price_quantity and prod.sale_price_quantity != 1:
return '$ %0.2f / %u' % (
prod.sale_price, prod.sale_price_quantity)
return '$ %0.2f' % prod.sale_price
return ''
class UpcFieldRenderer(formalchemy.TextFieldRenderer):
"""