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_qty',
|
||||||
'alt_pkg_price',
|
'alt_pkg_price',
|
||||||
# 'auto_discount',
|
# 'auto_discount',
|
||||||
# 'supplier_unit_id',
|
'supplier_unit_id',
|
||||||
# 'supplier_id',
|
'supplier_id',
|
||||||
# 'unit',
|
'unit',
|
||||||
# 'num_pkgs',
|
'num_pkgs',
|
||||||
# 'cs_pk_multiplier',
|
# 'cs_pk_multiplier',
|
||||||
# 'dsd',
|
# 'dsd',
|
||||||
'pf1',
|
'pf1',
|
||||||
|
@ -126,11 +126,22 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
||||||
'corepos', 'exporting.catapult_inventory.warn_truncated_receipt_alias',
|
'corepos', 'exporting.catapult_inventory.warn_truncated_receipt_alias',
|
||||||
default=True)
|
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):
|
def query(self):
|
||||||
query = self.host_session.query(corepos.Product)\
|
query = self.host_session.query(corepos.Product)\
|
||||||
.order_by(corepos.Product.upc)\
|
.order_by(corepos.Product.upc)\
|
||||||
.options(orm.joinedload(corepos.Product.department))\
|
.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
|
return query
|
||||||
|
|
||||||
def normalize_host_object(self, product):
|
def normalize_host_object(self, product):
|
||||||
|
@ -237,6 +248,60 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
||||||
alt_pkg_qty = product.quantity
|
alt_pkg_qty = product.quantity
|
||||||
alt_pkg_price = product.group_price
|
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 {
|
return {
|
||||||
'item_id': item_id,
|
'item_id': item_id,
|
||||||
'dept_id': department.number,
|
'dept_id': department.number,
|
||||||
|
@ -284,14 +349,13 @@ class InventoryItemImporter(FromCore, catapult_importing.model.InventoryItemImpo
|
||||||
# TODO: does CORE have this?
|
# TODO: does CORE have this?
|
||||||
# 'auto_discount': None,
|
# 'auto_discount': None,
|
||||||
|
|
||||||
# TODO: pretty sure CORE has these, but i'm not sure where
|
'supplier_unit_id': supplier_unit_id,
|
||||||
# 'supplier_unit_id': None,
|
'supplier_id': supplier_id,
|
||||||
# 'supplier_id': None,
|
'unit': supplier_unit,
|
||||||
# 'unit': None,
|
'num_pkgs': supplier_num_pkgs,
|
||||||
# 'num_pkgs': None,
|
|
||||||
# 'cs_pk_multiplier': None,
|
|
||||||
|
|
||||||
# TODO: does CORE have this?
|
# TODO: does CORE have these?
|
||||||
|
# 'cs_pk_multiplier': None,
|
||||||
# 'dsd': None,
|
# 'dsd': None,
|
||||||
|
|
||||||
'pf1': product.subdepartment.number if product.subdepartment else None,
|
'pf1': product.subdepartment.number if product.subdepartment else None,
|
||||||
|
|
Loading…
Reference in a new issue