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:
+
+
+
+ Code |
+
+
+ % for i, code in enumerate(product.codes, 1):
+
+ ${code} |
+
+ % endfor
+
+
+
+ % 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(