Add supplier info to Catapult export
This commit is contained in:
parent
6dc65f1aa5
commit
e30cbf374e
|
@ -92,10 +92,10 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
|||
'alt_pkg_qty',
|
||||
'alt_pkg_price',
|
||||
# 'auto_discount',
|
||||
# 'supplier_unit_id',
|
||||
# 'supplier_id',
|
||||
# 'unit',
|
||||
# 'num_pkgs',
|
||||
'supplier_unit_id',
|
||||
'supplier_id',
|
||||
'unit',
|
||||
'num_pkgs',
|
||||
# 'cs_pk_multiplier',
|
||||
# 'dsd',
|
||||
'pf1',
|
||||
|
@ -126,11 +126,22 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
|||
'corepos', 'exporting.catapult_inventory.warn_truncated_receipt_alias',
|
||||
default=True)
|
||||
|
||||
self.warn_multiple_vendor_items = self.config.getbool(
|
||||
'corepos', 'exporting.catapult_inventory.warn_multiple_vendor_items',
|
||||
default=True)
|
||||
|
||||
self.warn_no_valid_vendor_items = self.config.getbool(
|
||||
'corepos', 'exporting.catapult_inventory.warn_no_valid_vendor_items',
|
||||
default=True)
|
||||
|
||||
def query(self):
|
||||
query = self.host_session.query(corepos.Product)\
|
||||
.order_by(corepos.Product.upc)\
|
||||
.options(orm.joinedload(corepos.Product.department))\
|
||||
.options(orm.joinedload(corepos.Product.subdepartment))
|
||||
.options(orm.joinedload(corepos.Product.subdepartment))\
|
||||
.options(orm.joinedload(corepos.Product.vendor_items)\
|
||||
.joinedload(corepos.VendorItem.vendor))\
|
||||
.options(orm.joinedload(corepos.Product.default_vendor))
|
||||
return query
|
||||
|
||||
def normalize_host_object(self, product):
|
||||
|
@ -237,6 +248,60 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
|||
alt_pkg_qty = product.quantity
|
||||
alt_pkg_price = product.group_price
|
||||
|
||||
# no supplier info by default
|
||||
supplier_unit_id = None
|
||||
supplier_id = None
|
||||
supplier_unit = None
|
||||
supplier_num_pkgs = None
|
||||
|
||||
# maybe add supplier info, for "default" `vendorItems` record. we'll
|
||||
# have to get a little creative to figure out which is the default
|
||||
vendor_items = []
|
||||
|
||||
# first we try to narrow down according to product's default vendor
|
||||
if product.default_vendor:
|
||||
vendor_items = [item for item in product.vendor_items
|
||||
if item.vendor is product.default_vendor]
|
||||
|
||||
# but if that didn't work, just use any "valid" vendorItems
|
||||
if not vendor_items:
|
||||
# valid in this context means, not missing vendor
|
||||
vendor_items = [item for item in product.vendor_items
|
||||
if item.vendor]
|
||||
if not vendor_items and product.vendor_items:
|
||||
logger = log.warning if self.warn_no_valid_vendor_items else log.debug
|
||||
logger("product %s has %s vendorItems but each is missing (valid) vendor: %s",
|
||||
product.upc, len(product.vendor_items), product)
|
||||
|
||||
if vendor_items:
|
||||
if len(vendor_items) > 1:
|
||||
|
||||
# try to narrow down a bit further, based on valid 'units' amount
|
||||
valid_items = [item for item in vendor_items
|
||||
if item.units]
|
||||
if valid_items:
|
||||
vendor_items = valid_items
|
||||
|
||||
# warn if we still have more than one "obvious" vendor item
|
||||
if len(vendor_items) > 1:
|
||||
logger = log.warning if self.warn_multiple_vendor_items else log.debug
|
||||
logger("product %s has %s vendorItems to pick from: %s",
|
||||
product.upc, len(vendor_items), product)
|
||||
|
||||
# sort the list so most recently modified is first
|
||||
vendor_items.sort(key=lambda item: item.modified,
|
||||
reverse=True)
|
||||
|
||||
# use the "first" vendor item available
|
||||
item = vendor_items[0]
|
||||
supplier_unit_id = item.sku
|
||||
supplier_id = item.vendor.name
|
||||
supplier_num_pkgs = item.units or 1
|
||||
if supplier_num_pkgs == 1:
|
||||
supplier_unit = 'LB' if product.scale else 'EA'
|
||||
else:
|
||||
supplier_unit = 'CS'
|
||||
|
||||
return {
|
||||
'item_id': item_id,
|
||||
'dept_id': department.number,
|
||||
|
@ -284,14 +349,13 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
|||
# TODO: does CORE have this?
|
||||
# 'auto_discount': None,
|
||||
|
||||
# TODO: pretty sure CORE has these, but i'm not sure where
|
||||
# 'supplier_unit_id': None,
|
||||
# 'supplier_id': None,
|
||||
# 'unit': None,
|
||||
# 'num_pkgs': None,
|
||||
# 'cs_pk_multiplier': None,
|
||||
'supplier_unit_id': supplier_unit_id,
|
||||
'supplier_id': supplier_id,
|
||||
'unit': supplier_unit,
|
||||
'num_pkgs': supplier_num_pkgs,
|
||||
|
||||
# TODO: does CORE have this?
|
||||
# TODO: does CORE have these?
|
||||
# 'cs_pk_multiplier': None,
|
||||
# 'dsd': None,
|
||||
|
||||
'pf1': product.subdepartment.number if product.subdepartment else None,
|
||||
|
|
Loading…
Reference in a new issue