Do quick lookup by vendor item code, alt code for mobile receiving
at least until we have to make that configurable etc.
This commit is contained in:
parent
acd8c97afc
commit
66f1ed0e41
|
@ -1006,6 +1006,47 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
if row.item_id == entry]
|
if row.item_id == entry]
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
|
def quick_locate_product(self, batch, entry):
|
||||||
|
|
||||||
|
# try to locate product by uuid before other, more specific key
|
||||||
|
product = self.Session.query(model.Product).get(entry)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
|
key = self.rattail_config.product_key()
|
||||||
|
if key == 'upc':
|
||||||
|
|
||||||
|
# we first assume the user entry *does* include check digit
|
||||||
|
provided = GPC(entry, calc_check_digit=False)
|
||||||
|
product = api.get_product_by_upc(self.Session(), provided)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
|
# but we can also calculate a check digit and try that
|
||||||
|
checked = GPC(entry, calc_check_digit='upc')
|
||||||
|
product = api.get_product_by_upc(self.Session(), checked)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
|
elif key == 'item_id':
|
||||||
|
|
||||||
|
# try to locate product by item_id
|
||||||
|
product = api.get_product_by_item_id(self.Session(), entry)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
|
# if we made it this far, lookup by product key failed.
|
||||||
|
|
||||||
|
# now we'll attempt lookup by vendor item code
|
||||||
|
product = api.get_product_by_vendor_code(self.Session(), entry, vendor=batch.vendor)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
|
# okay then, let's attempt lookup by "alternate" code
|
||||||
|
product = api.get_product_by_code(self.Session(), entry)
|
||||||
|
if product:
|
||||||
|
return product
|
||||||
|
|
||||||
def save_quick_row_form(self, form):
|
def save_quick_row_form(self, form):
|
||||||
batch = self.get_instance()
|
batch = self.get_instance()
|
||||||
entry = form.validated['quick_entry']
|
entry = form.validated['quick_entry']
|
||||||
|
@ -1031,8 +1072,9 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
self.handler.refresh_batch_status(batch)
|
self.handler.refresh_batch_status(batch)
|
||||||
return row
|
return row
|
||||||
|
|
||||||
# try to locate product by uuid before other, more specific key
|
# if product is easily located, add new row for it
|
||||||
product = self.Session.query(model.Product).get(entry)
|
product = self.quick_locate_product(batch, entry)
|
||||||
|
# TODO: probably should be smarter about how we handle deleted?
|
||||||
if product and not product.deleted:
|
if product and not product.deleted:
|
||||||
row = model.PurchaseBatchRow()
|
row = model.PurchaseBatchRow()
|
||||||
row.product = product
|
row.product = product
|
||||||
|
@ -1044,24 +1086,13 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
key = self.rattail_config.product_key()
|
key = self.rattail_config.product_key()
|
||||||
if key == 'upc':
|
if key == 'upc':
|
||||||
|
|
||||||
# try to locate product by upc
|
|
||||||
provided = GPC(entry, calc_check_digit=False)
|
|
||||||
checked = GPC(entry, calc_check_digit='upc')
|
|
||||||
product = api.get_product_by_upc(self.Session(), provided)
|
|
||||||
if not product:
|
|
||||||
product = api.get_product_by_upc(self.Session(), checked)
|
|
||||||
if product:
|
|
||||||
row = model.PurchaseBatchRow()
|
|
||||||
row.product = product
|
|
||||||
self.handler.add_row(batch, row)
|
|
||||||
self.Session.flush()
|
|
||||||
self.handler.refresh_batch_status(batch)
|
|
||||||
return row
|
|
||||||
|
|
||||||
# check for "bad" upc
|
# check for "bad" upc
|
||||||
if len(entry) > 14:
|
if len(entry) > 14:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
provided = GPC(entry, calc_check_digit=False)
|
||||||
|
checked = GPC(entry, calc_check_digit='upc')
|
||||||
|
|
||||||
# product not in system, but presumably sane upc, so add to batch anyway
|
# product not in system, but presumably sane upc, so add to batch anyway
|
||||||
row = model.PurchaseBatchRow()
|
row = model.PurchaseBatchRow()
|
||||||
add_check_digit = True # TODO: make this dynamic, of course
|
add_check_digit = True # TODO: make this dynamic, of course
|
||||||
|
@ -1078,16 +1109,6 @@ class ReceivingBatchView(PurchasingBatchView):
|
||||||
|
|
||||||
elif key == 'item_id':
|
elif key == 'item_id':
|
||||||
|
|
||||||
# try to locate product by item_id
|
|
||||||
product = api.get_product_by_item_id(self.Session(), entry)
|
|
||||||
if product:
|
|
||||||
row = model.PurchaseBatchRow()
|
|
||||||
row.product = product
|
|
||||||
self.handler.add_row(batch, row)
|
|
||||||
self.Session.flush()
|
|
||||||
self.handler.refresh_batch_status(batch)
|
|
||||||
return row
|
|
||||||
|
|
||||||
# check for "too long" item_id
|
# check for "too long" item_id
|
||||||
if len(entry) > maxlen(model.PurchaseBatchRow.item_id):
|
if len(entry) > maxlen(model.PurchaseBatchRow.item_id):
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue