Avoid error when history has blanks for ordering worksheet

This commit is contained in:
Lance Edgar 2023-09-17 17:23:59 -05:00
parent a807a0f50c
commit cc7b9ccb86

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -27,12 +27,8 @@ These views expose the basic CRUD interface to "ordering" batches, for the web
API. API.
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
from rattail.db import model from rattail.db import model
from rattail.util import pretty_quantity from rattail.util import pretty_quantity
@ -67,10 +63,10 @@ class OrderingBatchViews(APIBatchView):
data = super(OrderingBatchViews, self).normalize(batch) data = super(OrderingBatchViews, self).normalize(batch)
data['vendor_uuid'] = batch.vendor.uuid data['vendor_uuid'] = batch.vendor.uuid
data['vendor_display'] = six.text_type(batch.vendor) data['vendor_display'] = str(batch.vendor)
data['department_uuid'] = batch.department_uuid data['department_uuid'] = batch.department_uuid
data['department_display'] = six.text_type(batch.department) if batch.department else None data['department_display'] = str(batch.department) if batch.department else None
data['po_total_calculated_display'] = "${:0.2f}".format(batch.po_total_calculated or 0) data['po_total_calculated_display'] = "${:0.2f}".format(batch.po_total_calculated or 0)
data['ship_method'] = batch.ship_method data['ship_method'] = batch.ship_method
@ -152,7 +148,7 @@ class OrderingBatchViews(APIBatchView):
product = cost.product product = cost.product
subdept_costs.append({ subdept_costs.append({
'uuid': cost.uuid, 'uuid': cost.uuid,
'upc': six.text_type(product.upc), 'upc': str(product.upc),
'upc_pretty': product.upc.pretty() if product.upc else None, 'upc_pretty': product.upc.pretty() if product.upc else None,
'brand_name': product.brand.name if product.brand else None, 'brand_name': product.brand.name if product.brand else None,
'description': product.description, 'description': product.description,
@ -173,8 +169,8 @@ class OrderingBatchViews(APIBatchView):
# sort the (sub)department groupings # sort the (sub)department groupings
sorted_departments = [] sorted_departments = []
for dept in sorted(six.itervalues(departments), key=lambda d: d['name']): for dept in sorted(departments.values(), key=lambda d: d['name']):
dept['subdepartments'] = sorted(six.itervalues(dept['subdepartments']), dept['subdepartments'] = sorted(dept['subdepartments'].values(),
key=lambda s: s['name']) key=lambda s: s['name'])
sorted_departments.append(dept) sorted_departments.append(dept)
@ -185,6 +181,8 @@ class OrderingBatchViews(APIBatchView):
history = list(reversed(history)) history = list(reversed(history))
# must convert some date objects to string, for JSON sake # must convert some date objects to string, for JSON sake
for h in history: for h in history:
if not h:
continue
purchase = h.get('purchase') purchase = h.get('purchase')
if purchase: if purchase:
dt = purchase.get('date_ordered') dt = purchase.get('date_ordered')
@ -237,7 +235,7 @@ class OrderingBatchRowViews(APIBatchRowView):
data = super(OrderingBatchRowViews, self).normalize(row) data = super(OrderingBatchRowViews, self).normalize(row)
data['item_id'] = row.item_id data['item_id'] = row.item_id
data['upc'] = six.text_type(row.upc) data['upc'] = str(row.upc)
data['upc_pretty'] = row.upc.pretty() if row.upc else None data['upc_pretty'] = row.upc.pretty() if row.upc else None
data['brand_name'] = row.brand_name data['brand_name'] = row.brand_name
data['description'] = row.description data['description'] = row.description
@ -262,7 +260,7 @@ class OrderingBatchRowViews(APIBatchRowView):
data['po_total_calculated'] = row.po_total_calculated data['po_total_calculated'] = row.po_total_calculated
data['po_total_calculated_display'] = "${:0.2f}".format(row.po_total_calculated) if row.po_total_calculated is not None else None data['po_total_calculated_display'] = "${:0.2f}".format(row.po_total_calculated) if row.po_total_calculated is not None else None
data['status_code'] = row.status_code data['status_code'] = row.status_code
data['status_display'] = row.STATUS.get(row.status_code, six.text_type(row.status_code)) data['status_display'] = row.STATUS.get(row.status_code, str(row.status_code))
return data return data