Add support for importing Product.case_size from CORE API
				
					
				
			This commit is contained in:
		
							parent
							
								
									59abc4995e
								
							
						
					
					
						commit
						da55a07982
					
				
					 1 changed files with 32 additions and 0 deletions
				
			
		|  | @ -454,6 +454,7 @@ class ProductImporter(FromCOREPOSAPI, corepos_importing.model.ProductImporter): | |||
|         'food_stampable', | ||||
|         # 'tax1', | ||||
|         # 'tax2', | ||||
|         'case_size', | ||||
|     ] | ||||
| 
 | ||||
|     def setup(self): | ||||
|  | @ -467,6 +468,14 @@ class ProductImporter(FromCOREPOSAPI, corepos_importing.model.ProductImporter): | |||
|         self.core_existing = self.cache_model(model.Product, key='corepos_id', | ||||
|                                               query=query) | ||||
| 
 | ||||
|         self.vendor_items_by_upc = {} | ||||
| 
 | ||||
|         def cache(item, i): | ||||
|             self.vendor_items_by_upc.setdefault(item['upc'], []).append(item) | ||||
| 
 | ||||
|         self.progress_loop(cache, self.api.get_vendor_items(), | ||||
|                            message="Caching CORE Vendor Items") | ||||
| 
 | ||||
|     def get_host_objects(self): | ||||
|         return self.api.get_products() | ||||
| 
 | ||||
|  | @ -501,6 +510,12 @@ class ProductImporter(FromCOREPOSAPI, corepos_importing.model.ProductImporter): | |||
|             return product.uuid | ||||
|         return get_uuid() | ||||
| 
 | ||||
|     def get_vendor_items(self, api_product): | ||||
|         if hasattr(self, 'vendor_items_by_upc'): | ||||
|             return self.vendor_items_by_upc.get(api_product['upc']) | ||||
| 
 | ||||
|         return self.api.get_vendor_items(upc=api_product['upc']) | ||||
| 
 | ||||
|     def normalize_host_object(self, product): | ||||
|         try: | ||||
|             upc = GPC(product['upc'], calc_check_digit='upc') | ||||
|  | @ -552,6 +567,23 @@ class ProductImporter(FromCOREPOSAPI, corepos_importing.model.ProductImporter): | |||
|                 'uom_abbreviation': size_info['uom_abbrev'], | ||||
|             }) | ||||
| 
 | ||||
|         if 'case_size' in self.fields: | ||||
|             case_size = None | ||||
|             items = self.get_vendor_items(product) | ||||
|             if items: | ||||
|                 # here we sort by `modified DESC` to get the "deterministic | ||||
|                 # pseudo-default" vendorItems record | ||||
| 
 | ||||
|                 def sortkey(item): | ||||
|                     dt = datetime.datetime.strptime(item['modified'], '%Y-%m-%d %H:%M:%S') | ||||
|                     return dt | ||||
| 
 | ||||
|                 items = sorted(items, key=sortkey, reverse=True) | ||||
|                 item = items[0] | ||||
|                 case_size = decimal.Decimal(item['units']) | ||||
| 
 | ||||
|             data['case_size'] = case_size | ||||
| 
 | ||||
|         return data | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lance Edgar
						Lance Edgar