Changeset - 67618d4784ed
[Not reviewed]
0 2 0
Lance Edgar - 4 years ago 2021-01-31 21:53:26
lance@edbob.org
Fix CORE API -> Rattail datasync for ProductCost
2 files changed with 34 insertions and 10 deletions:
0 comments (0 inline, 0 general) First comment
rattail_corepos/datasync/rattail.py
Show inline comments
 
@@ -108,6 +108,14 @@ class FromCOREAPIToRattail(NewDataSyncImportConsumer):
 
                self.process_change(session, self.importers['Product'],
 
                                    host_object=product)
 

	
 
        # sync all ProductCost-related changes
 
        types = [
 
            'VendorItem',
 
        ]
 
        for change in [c for c in changes if c.payload_type in types]:
 
            # normal logic works fine here
 
            self.invoke_importer(session, change)
 

	
 
    def get_host_object(self, session, change):
 
        if change.payload_type == 'Member':
 
            return self.api.get_member(change.payload_key)
rattail_corepos/importing/corepos/api.py
Show inline comments
 
@@ -648,10 +648,10 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
 
    """
 
    Importer for product cost data from CORE POS API.
 
    """
 
    key = 'corepos_id'
 
    key = ('vendor_uuid', 'code')
 
    supported_fields = [
 
        'corepos_id',
 
        'product_upc',
 
        'product_uuid',
 
        'vendor_uuid',
 
        'code',
 
        'case_size',
 
@@ -678,6 +678,9 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
 
        self.progress_loop(cache, self.api.get_products(),
 
                           message="Caching Products from CORE-POS API")
 

	
 
        self.products_by_item_id = self.cache_model(model.Product,
 
                                                    key='item_id')
 

	
 
    def get_host_objects(self):
 
        return self.api.get_vendor_items()
 

	
 
@@ -702,25 +705,38 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
 

	
 
        return self.api.get_product(item['upc'])
 

	
 
    def normalize_host_object(self, item):
 
    def get_product(self, item):
 
        item_id = item['upc']
 

	
 
        if hasattr(self, 'products_by_item_id'):
 
            return self.products_by_item_id.get(item_id)
 

	
 
        model = self.model
 
        try:
 
            upc = GPC(item['upc'], calc_check_digit='upc')
 
        except (TypeError, ValueError):
 
            log.warning("CORE POS vendor item has invalid UPC: %s", item['upc'])
 
            return
 
            return self.session.query(model.Product)\
 
                               .filter(model.Product.item_id == item_id)\
 
                               .one()
 
        except orm.exc.NoResultFound:
 
            pass
 

	
 
    def normalize_host_object(self, item):
 
        vendor = self.get_vendor(item)
 
        if not vendor:
 
            log.warning("CORE POS vendor not found for item: %s", item)
 
            return
 

	
 
        product = self.get_corepos_product(item)
 
        product = self.get_product(item)
 
        if not product:
 
            log.warning("product not found for CORE vendor item: %s", item)
 
            return
 

	
 
        core_product = self.get_corepos_product(item)
 
        # if not product:
 
        #     log.warning("CORE POS product not found for item: %s", item)
 
        #     return
 

	
 
        preferred = False
 
        if product and product['default_vendor_id'] == item['vendorID']:
 
        if core_product and core_product['default_vendor_id'] == item['vendorID']:
 
            preferred = True
 

	
 
        case_size = decimal.Decimal(item['units'])
 
@@ -728,7 +744,7 @@ class ProductCostImporter(FromCOREPOSAPI, corepos_importing.model.ProductCostImp
 

	
 
        return {
 
            'corepos_id': int(item['vendorItemID']),
 
            'product_upc': upc,
 
            'product_uuid': product.uuid,
 
            'vendor_uuid': vendor.uuid,
 
            'code': (item['sku'] or '').strip() or None,
 
            'case_size': case_size,
0 comments (0 inline, 0 general) First comment
You need to be logged in to comment. Login now