Add buefy theme support for ordering worksheet
This commit is contained in:
parent
7a01cb8873
commit
58362ae858
7 changed files with 282 additions and 84 deletions
|
@ -1514,7 +1514,8 @@ class BatchMasterView(MasterView):
|
|||
config.add_route('{}.worksheet'.format(route_prefix), '{}/{{{}}}/worksheet'.format(url_prefix, model_key))
|
||||
config.add_view(cls, attr='worksheet', route_name='{}.worksheet'.format(route_prefix),
|
||||
permission='{}.worksheet'.format(permission_prefix))
|
||||
config.add_route('{}.worksheet_update'.format(route_prefix), '{}/{{{}}}/worksheet/update'.format(url_prefix, model_key))
|
||||
config.add_route('{}.worksheet_update'.format(route_prefix), '{}/{{{}}}/worksheet/update'.format(url_prefix, model_key),
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='worksheet_update', route_name='{}.worksheet_update'.format(route_prefix),
|
||||
renderer='json', permission='{}.worksheet'.format(permission_prefix))
|
||||
|
||||
|
|
|
@ -328,8 +328,9 @@ class PurchasingBatchView(BatchMasterView):
|
|||
buyer_display = six.text_type(buyer)
|
||||
elif self.creating:
|
||||
buyer = self.request.user.employee
|
||||
buyer_display = six.text_type(buyer)
|
||||
f.set_default('buyer_uuid', buyer.uuid)
|
||||
if buyer:
|
||||
buyer_display = six.text_type(buyer)
|
||||
f.set_default('buyer_uuid', buyer.uuid)
|
||||
elif self.editing:
|
||||
buyer_display = six.text_type(batch.buyer or '')
|
||||
buyers_url = self.request.route_url('employees.autocomplete')
|
||||
|
|
|
@ -27,6 +27,7 @@ Views for 'ordering' (purchasing) batches
|
|||
from __future__ import unicode_literals, absolute_import
|
||||
|
||||
import os
|
||||
import json
|
||||
|
||||
import six
|
||||
import openpyxl
|
||||
|
@ -245,6 +246,11 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
order_date = batch.date_ordered
|
||||
if not order_date:
|
||||
order_date = localtime(self.rattail_config).date()
|
||||
|
||||
buefy_data = None
|
||||
if self.get_use_buefy():
|
||||
buefy_data = self.get_worksheet_buefy_data(departments)
|
||||
|
||||
return self.render_to_response('worksheet', {
|
||||
'batch': batch,
|
||||
'order_date': order_date,
|
||||
|
@ -257,8 +263,32 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
'get_upc': lambda p: p.upc.pretty() if p.upc else '',
|
||||
'header_columns': self.order_form_header_columns,
|
||||
'ignore_cases': not self.handler.allow_cases(),
|
||||
'worksheet_data': buefy_data,
|
||||
})
|
||||
|
||||
def get_worksheet_buefy_data(self, departments):
|
||||
data = {}
|
||||
for department in six.itervalues(departments):
|
||||
for subdepartment in six.itervalues(department._order_subdepartments):
|
||||
for i, cost in enumerate(subdepartment._order_costs, 1):
|
||||
cases = int(cost._batchrow.cases_ordered or 0) if cost._batchrow else None
|
||||
units = int(cost._batchrow.units_ordered or 0) if cost._batchrow else None
|
||||
key = 'cost_{}'.format(cost.uuid)
|
||||
data['{}_cases'.format(key)] = cases
|
||||
data['{}_units'.format(key)] = units
|
||||
|
||||
total = 0
|
||||
row = cost._batchrow
|
||||
if row:
|
||||
total = row.po_total_calculated or row.po_total or 0
|
||||
if not (total or cases or units):
|
||||
display = ''
|
||||
else:
|
||||
display = '${:0,.2f}'.format(total)
|
||||
data['{}_total_display'.format(key)] = display
|
||||
|
||||
return data
|
||||
|
||||
def worksheet_update(self):
|
||||
"""
|
||||
Handles AJAX requests to update the order quantities for some row
|
||||
|
@ -282,21 +312,34 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
"""
|
||||
batch = self.get_instance()
|
||||
|
||||
cases_ordered = self.request.POST.get('cases_ordered', '0')
|
||||
if not cases_ordered or not cases_ordered.isdigit():
|
||||
return {'error': "Invalid value for cases ordered: {}".format(cases_ordered)}
|
||||
cases_ordered = int(cases_ordered)
|
||||
try:
|
||||
data = self.request.json_body
|
||||
except json.JSONDecodeError:
|
||||
data = self.request.POST
|
||||
|
||||
cases_ordered = data.get('cases_ordered')
|
||||
if cases_ordered is None:
|
||||
cases_ordered = 0
|
||||
elif not isinstance(cases_ordered, int):
|
||||
if cases_ordered == '':
|
||||
cases_ordered = 0
|
||||
else:
|
||||
cases_ordered = int(cases_ordered)
|
||||
if cases_ordered >= 100000: # TODO: really this depends on underlying column
|
||||
return {'error': "Invalid value for cases ordered: {}".format(cases_ordered)}
|
||||
|
||||
units_ordered = self.request.POST.get('units_ordered', '0')
|
||||
if not units_ordered or not units_ordered.isdigit():
|
||||
return {'error': "Invalid value for units ordered: {}".format(units_ordered)}
|
||||
units_ordered = int(units_ordered)
|
||||
units_ordered = data.get('units_ordered')
|
||||
if units_ordered is None:
|
||||
units_ordered = 0
|
||||
elif not isinstance(units_ordered, int):
|
||||
if units_ordered == '':
|
||||
units_ordered = 0
|
||||
else:
|
||||
units_ordered = int(units_ordered)
|
||||
if units_ordered >= 100000: # TODO: really this depends on underlying column
|
||||
return {'error': "Invalid value for units ordered: {}".format(units_ordered)}
|
||||
|
||||
uuid = self.request.POST.get('product_uuid')
|
||||
uuid = data.get('product_uuid')
|
||||
product = self.Session.query(model.Product).get(uuid) if uuid else None
|
||||
if not product:
|
||||
return {'error': "Product not found"}
|
||||
|
@ -336,8 +379,10 @@ class OrderingBatchView(PurchasingBatchView):
|
|||
'row_units_ordered': int(row.units_ordered or 0) if row else None,
|
||||
'row_po_total': '${:0,.2f}'.format(row.po_total or 0) if row else None,
|
||||
'row_po_total_calculated': '${:0,.2f}'.format(row.po_total_calculated or 0) if row else None,
|
||||
'row_po_total_display': '${:0,.2f}'.format(row.po_total_calculated or row.po_total or 0) if row else None,
|
||||
'batch_po_total': '${:0,.2f}'.format(batch.po_total or 0),
|
||||
'batch_po_total_calculated': '${:0,.2f}'.format(batch.po_total_calculated or 0),
|
||||
'batch_po_total_display': '${:0,.2f}'.format(batch.po_total_calculated or batch.po_total or 0),
|
||||
}
|
||||
|
||||
def render_mobile_listitem(self, batch, i):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue