From 848b727b113055e8589b0d47abc99e5800fa0fc9 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sat, 29 Sep 2018 14:24:03 -0500 Subject: [PATCH] Tweak how receiving rows are looked up when adding to the batch i.e. locate the product first, and then try to find an existing row to match. previously we looked for a row based on product key match only, and it could cause new rows to be created for a product we already had in the batch (i.e. if the product was located via some secondary lookup other than product key) --- tailbone/views/purchasing/receiving.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tailbone/views/purchasing/receiving.py b/tailbone/views/purchasing/receiving.py index 38be04d9..19aab266 100644 --- a/tailbone/views/purchasing/receiving.py +++ b/tailbone/views/purchasing/receiving.py @@ -705,6 +705,7 @@ class ReceivingBatchView(PurchasingBatchView): f.set_readonly('invoice_total') # claims + f.set_readonly('claims') if batch.is_truck_dump_parent(): f.set_renderer('claims', self.render_parent_row_claims) f.set_helptext('claims', "Parent row is claimed by these child rows.") @@ -994,11 +995,10 @@ class ReceivingBatchView(PurchasingBatchView): """ return True - def quick_locate_rows(self, batch, entry): + def quick_locate_rows(self, batch, entry, product): rows = [] # try to locate rows by product uuid match before other key - product = self.Session.query(model.Product).get(entry) if product: rows = [row for row in batch.active_rows() if row.product_uuid == product.uuid] @@ -1050,8 +1050,11 @@ class ReceivingBatchView(PurchasingBatchView): batch = self.get_instance() entry = form.validated['quick_entry'] - # maybe try to locate existing row first - rows = self.quick_locate_rows(batch, entry) + # first try to locate the product based on quick entry + product = self.quick_locate_product(batch, entry) + + # then try to locate existing row(s) which match product/entry + rows = self.quick_locate_rows(batch, entry, product) if rows: # if aggregating, just re-use matching row @@ -1072,8 +1075,7 @@ class ReceivingBatchView(PurchasingBatchView): self.handler.refresh_batch_status(batch) return row - # if product is easily located, add new row for it - product = self.quick_locate_product(batch, entry) + # matching row(s) not found; add new row if product was identified # TODO: probably should be smarter about how we handle deleted? if product and not product.deleted: row = model.PurchaseBatchRow()