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
					
				
					 1 changed files with 47 additions and 26 deletions
				
			
		|  | @ -1006,6 +1006,47 @@ class ReceivingBatchView(PurchasingBatchView): | |||
|                     if row.item_id == entry] | ||||
|             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): | ||||
|         batch = self.get_instance() | ||||
|         entry = form.validated['quick_entry'] | ||||
|  | @ -1031,8 +1072,9 @@ class ReceivingBatchView(PurchasingBatchView): | |||
|                 self.handler.refresh_batch_status(batch) | ||||
|                 return row | ||||
| 
 | ||||
|         # try to locate product by uuid before other, more specific key | ||||
|         product = self.Session.query(model.Product).get(entry) | ||||
|         # if product is easily located, add new row for it | ||||
|         product = self.quick_locate_product(batch, entry) | ||||
|         # TODO: probably should be smarter about how we handle deleted? | ||||
|         if product and not product.deleted: | ||||
|             row = model.PurchaseBatchRow() | ||||
|             row.product = product | ||||
|  | @ -1044,24 +1086,13 @@ class ReceivingBatchView(PurchasingBatchView): | |||
|         key = self.rattail_config.product_key() | ||||
|         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 | ||||
|             if len(entry) > 14: | ||||
|                 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 | ||||
|             row = model.PurchaseBatchRow() | ||||
|             add_check_digit = True # TODO: make this dynamic, of course | ||||
|  | @ -1078,16 +1109,6 @@ class ReceivingBatchView(PurchasingBatchView): | |||
| 
 | ||||
|         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 | ||||
|             if len(entry) > maxlen(model.PurchaseBatchRow.item_id): | ||||
|                 return | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar