Import product sale pricing from CORE
this almost certainly needs improvements for POS sake
This commit is contained in:
parent
b60cfa777f
commit
5ac3a3d82c
|
@ -541,11 +541,55 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
|
||||||
'regular_price_price',
|
'regular_price_price',
|
||||||
'regular_price_multiple',
|
'regular_price_multiple',
|
||||||
'regular_price_type',
|
'regular_price_type',
|
||||||
|
'sale_price_price',
|
||||||
|
'sale_price_starts',
|
||||||
|
'sale_price_ends',
|
||||||
|
'sale_price_current',
|
||||||
'food_stampable',
|
'food_stampable',
|
||||||
# 'tax1',
|
# 'tax1',
|
||||||
'tax_code',
|
'tax_code',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def setup(self):
|
||||||
|
super().setup()
|
||||||
|
|
||||||
|
if self.fields_active(self.sale_price_fields):
|
||||||
|
self.core_batch_items = {}
|
||||||
|
|
||||||
|
# TODO: it seems possible for CORE to have more than one
|
||||||
|
# batch item for a given product. sort order will
|
||||||
|
# determine which would "win" but not clear what sort
|
||||||
|
# order should be used, e.g. CORE does not seem to use one
|
||||||
|
today = self.app.today()
|
||||||
|
batches = self.host_session.query(corepos.Batch)\
|
||||||
|
.filter(corepos.Batch.start_date <= today)\
|
||||||
|
.filter(corepos.Batch.end_date >= today)\
|
||||||
|
.filter(corepos.Batch.discount_type > 0)\
|
||||||
|
.options(orm.joinedload(corepos.Batch.items))\
|
||||||
|
.all()
|
||||||
|
|
||||||
|
def cache(batch, i):
|
||||||
|
for item in batch.items:
|
||||||
|
self.core_batch_items.setdefault(item.upc, []).append(item)
|
||||||
|
|
||||||
|
self.progress_loop(cache, batches,
|
||||||
|
message="Caching CORE-POS batch items")
|
||||||
|
|
||||||
|
def get_core_batch_item(self, upc):
|
||||||
|
if hasattr(self, 'core_batch_items'):
|
||||||
|
items = self.core_batch_items.get(upc)
|
||||||
|
if not items:
|
||||||
|
return
|
||||||
|
|
||||||
|
sale_price = items[0].sale_price
|
||||||
|
if any([item.sale_price != sale_price
|
||||||
|
for item in items[1:]]):
|
||||||
|
log.warning("ambiguous batch items for upc: %s", upc)
|
||||||
|
|
||||||
|
return items[0]
|
||||||
|
|
||||||
|
raise NotImplementedError("TODO: fetch batch items in real-time")
|
||||||
|
|
||||||
def normalize_host_object(self, product):
|
def normalize_host_object(self, product):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -577,6 +621,12 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
|
||||||
'regular_price_price': price,
|
'regular_price_price': price,
|
||||||
'regular_price_multiple': 1 if price is not None else None,
|
'regular_price_multiple': 1 if price is not None else None,
|
||||||
'regular_price_type': self.enum.PRICE_TYPE_REGULAR if price is not None else None,
|
'regular_price_type': self.enum.PRICE_TYPE_REGULAR if price is not None else None,
|
||||||
|
|
||||||
|
# nb. these may get set below
|
||||||
|
'sale_price_price': None,
|
||||||
|
'sale_price_starts': None,
|
||||||
|
'sale_price_ends': None,
|
||||||
|
'sale_price_current': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
if 'tax_code' in self.fields:
|
if 'tax_code' in self.fields:
|
||||||
|
@ -591,6 +641,18 @@ class ProductImporter(FromCOREPOS, corepos_importing.model.ProductImporter):
|
||||||
'uom_abbreviation': size_info['uom_abbrev'],
|
'uom_abbreviation': size_info['uom_abbrev'],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# sale price
|
||||||
|
# nb. CORE discount_type indicates if item is on sale "now"
|
||||||
|
if self.fields_active(self.sale_price_fields) and product.discount_type:
|
||||||
|
item = self.get_core_batch_item(product.upc)
|
||||||
|
if item:
|
||||||
|
data.update({
|
||||||
|
'sale_price_price': item.sale_price,
|
||||||
|
'sale_price_starts': self.app.make_utc(self.app.localtime(item.batch.start_date)),
|
||||||
|
'sale_price_ends': self.app.make_utc(self.app.localtime(item.batch.end_date)),
|
||||||
|
'sale_price_current': True,
|
||||||
|
})
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue