diff --git a/rattail/pyramid/templates/products/read.mako b/rattail/pyramid/templates/products/read.mako index 86768505..5bf6d296 100644 --- a/rattail/pyramid/templates/products/read.mako +++ b/rattail/pyramid/templates/products/read.mako @@ -4,6 +4,28 @@ ${parent.body()} <% product = form.fieldset.model %> +
+

Product Codes:

+ % if product.codes: +
+ + + + + + % for i, code in enumerate(product.codes, 1): + + + + % endfor + +
Code
${code}
+
+ % else: +

None on file.

+ % endif +
+

Product Costs:

% if product.costs: diff --git a/rattail/pyramid/views/products.py b/rattail/pyramid/views/products.py index c9ce401b..5073cb6f 100644 --- a/rattail/pyramid/views/products.py +++ b/rattail/pyramid/views/products.py @@ -44,7 +44,7 @@ from rattail import sil from rattail import batches from rattail.threads import Thread from rattail.exceptions import LabelPrintingError -from rattail.db.model import ProductPrice +from rattail.db.model import ProductPrice, ProductCode from rattail.pyramid import Session from rattail.pyramid.forms import (AutocompleteFieldRenderer, @@ -87,6 +87,8 @@ class ProductsGrid(SearchableAlchemyGridView): rattail.ProductPrice.uuid == rattail.Product.current_price_uuid), 'vendor': join_vendor, + 'code': + lambda q: q.outerjoin(ProductCode), } def filter_map(self): @@ -117,7 +119,8 @@ class ProductsGrid(SearchableAlchemyGridView): brand=self.filter_ilike(rattail.Brand.name), department=self.filter_ilike(rattail.Department.name), subdepartment=self.filter_ilike(rattail.Subdepartment.name), - vendor=self.filter_ilike(rattail.Vendor.name)) + vendor=self.filter_ilike(rattail.Vendor.name), + code=self.filter_ilike(ProductCode.code)) def filter_config(self): return self.make_filter_config(