Improve UPC search for rows within batches.

As with the products page, now this search works with or without the check
digit.
This commit is contained in:
Lance Edgar 2015-01-15 12:17:35 -06:00
parent 7d42950527
commit e47477f0c4

View file

@ -33,7 +33,9 @@ from tailbone.forms import GPCFieldRenderer
from tailbone.grids.search import BooleanSearchFilter from tailbone.grids.search import BooleanSearchFilter
from tailbone.db import Session from tailbone.db import Session
from rattail.db import model
from rattail.db.model import Batch, LabelProfile from rattail.db.model import Batch, LabelProfile
from rattail.gpc import GPC
def field_with_renderer(field, column): def field_with_renderer(field, column):
@ -62,9 +64,34 @@ def BatchRowsGrid(request):
sort = 'ordinal' sort = 'ordinal'
def filter_map(self): def filter_map(self):
# TODO: This code is copied from `tailbone.views.products`, which
# means we probably should refactor...
def filter_F01_is(q, v):
if not v:
return q
try:
return q.filter(model.Product.upc.in_((
GPC(v), GPC(v, calc_check_digit='upc'))))
except ValueError:
return q
def filter_F01_not(q, v):
if not v:
return q
try:
return q.filter(~model.Product.upc.in_((
GPC(v), GPC(v, calc_check_digit='upc'))))
except ValueError:
return q
fmap = self.make_filter_map() fmap = self.make_filter_map()
for column in batch.columns: for column in batch.columns:
if column.visible: if column.sil_name == 'F01':
fmap[column.name] = {'is': filter_F01_is,
'nt': filter_F01_not}
elif column.visible:
if column.data_type.startswith('CHAR'): if column.data_type.startswith('CHAR'):
fmap[column.name] = self.filter_ilike( fmap[column.name] = self.filter_ilike(
getattr(batch.rowclass, column.name)) getattr(batch.rowclass, column.name))