Move some custorder logic to handler; allow force-swap of product selection

This commit is contained in:
Lance Edgar 2021-11-03 19:19:20 -05:00
parent b0fa559760
commit 4d33e3dcbe
3 changed files with 24 additions and 60 deletions

View file

@ -551,61 +551,12 @@ class CustomerOrderView(MasterView):
return self.info_for_product(batch, data, product)
def uom_choices_for_product(self, product):
choices = []
# Each
if not product or not product.weighed:
unit_name = self.enum.UNIT_OF_MEASURE[self.enum.UNIT_OF_MEASURE_EACH]
choices.append({'key': self.enum.UNIT_OF_MEASURE_EACH,
'value': unit_name})
# Pound
if not product or product.weighed:
unit_name = self.enum.UNIT_OF_MEASURE[self.enum.UNIT_OF_MEASURE_POUND]
choices.append({
'key': self.enum.UNIT_OF_MEASURE_POUND,
'value': unit_name,
})
# Case
case_text = None
case_size = self.handler.get_case_size_for_product(product)
if case_size is None:
case_text = "{} (× ?? {})".format(
self.enum.UNIT_OF_MEASURE[self.enum.UNIT_OF_MEASURE_CASE],
unit_name)
elif case_size > 1:
case_text = "{} (× {} {})".format(
self.enum.UNIT_OF_MEASURE[self.enum.UNIT_OF_MEASURE_CASE],
pretty_quantity(case_size),
unit_name)
if case_text:
choices.append({'key': self.enum.UNIT_OF_MEASURE_CASE,
'value': case_text})
return choices
return self.handler.uom_choices_for_product(product)
def info_for_product(self, batch, data, product):
app = self.get_rattail_app()
products = app.get_products_handler()
data = {
'uuid': product.uuid,
'upc': six.text_type(product.upc),
'upc_pretty': product.upc.pretty(),
'unit_price_display': self.get_unit_price_display(product),
'full_description': product.full_description,
'url': self.request.route_url('products.view', uuid=product.uuid),
'image_url': products.get_image_url(product),
'uom_choices': self.uom_choices_for_product(product),
}
key = self.rattail_config.product_key()
if key == 'upc':
data['key'] = data['upc_pretty']
else:
data['key'] = getattr(product, key, data['upc_pretty'])
return data
info = self.handler.get_product_info(batch, product)
info['url'] = self.request.route_url('products.view', uuid=info['uuid'])
return info
def normalize_batch(self, batch):
return {