Improve grids for custorder items
main grid as well as rows grid for Pending Product
This commit is contained in:
parent
67ec6f7773
commit
e793ba6630
|
@ -3,27 +3,6 @@
|
|||
|
||||
<%def name="object_helpers()">
|
||||
${parent.object_helpers()}
|
||||
% if instance.custorder_item_records:
|
||||
<nav class="panel">
|
||||
<p class="panel-heading">Cross-Reference</p>
|
||||
<div class="panel-block">
|
||||
<div style="display: flex; flex-direction: column;">
|
||||
<p class="block">
|
||||
This ${model_title} is referenced by the following<br />
|
||||
Customer Order Items:
|
||||
</p>
|
||||
<ul class="list">
|
||||
% for item in instance.custorder_item_records:
|
||||
<li class="list-item">
|
||||
${h.link_to('#{}-{}'.format(item.order.id, item.sequence), url('custorders.items.view', uuid=item.uuid))}
|
||||
</li>
|
||||
% endfor
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
% endif
|
||||
|
||||
% if instance.status_code == enum.PENDING_PRODUCT_STATUS_PENDING and master.has_perm('resolve_product'):
|
||||
<nav class="panel">
|
||||
<p class="panel-heading">Tools</p>
|
||||
|
|
|
@ -58,14 +58,18 @@ class CustomerOrderItemView(MasterView):
|
|||
grid_columns = [
|
||||
'order_id',
|
||||
'person',
|
||||
'_product_key_',
|
||||
'product_brand',
|
||||
'product_description',
|
||||
'product_size',
|
||||
'department_name',
|
||||
'case_quantity',
|
||||
'order_quantity',
|
||||
'order_uom',
|
||||
'case_quantity',
|
||||
'total_price',
|
||||
'order_created',
|
||||
'status_code',
|
||||
'flagged',
|
||||
]
|
||||
|
||||
has_rows = True
|
||||
|
@ -114,42 +118,55 @@ class CustomerOrderItemView(MasterView):
|
|||
.joinedload(model.CustomerOrder.person))
|
||||
|
||||
def configure_grid(self, g):
|
||||
super(CustomerOrderItemView, self).configure_grid(g)
|
||||
super().configure_grid(g)
|
||||
batch_handler = self.get_batch_handler()
|
||||
|
||||
# order_id
|
||||
g.set_renderer('order_id', self.render_order_id)
|
||||
g.set_link('order_id')
|
||||
|
||||
g.set_joiner('person', lambda q: q.outerjoin(model.Person))
|
||||
|
||||
g.filters['person'] = g.make_filter('person', model.Person.display_name,
|
||||
default_active=True, default_verb='contains')
|
||||
|
||||
g.set_sorter('person', model.Person.display_name)
|
||||
g.set_sorter('order_created', model.CustomerOrder.created)
|
||||
|
||||
g.set_sort_defaults('order_created', 'desc')
|
||||
|
||||
g.set_type('case_quantity', 'quantity')
|
||||
g.set_type('cases_ordered', 'quantity')
|
||||
g.set_type('units_ordered', 'quantity')
|
||||
g.set_type('total_price', 'currency')
|
||||
g.set_type('order_quantity', 'quantity')
|
||||
|
||||
g.set_enum('order_uom', self.enum.UNIT_OF_MEASURE)
|
||||
|
||||
g.set_renderer('person', self.render_person_text)
|
||||
g.set_renderer('order_created', self.render_order_created)
|
||||
|
||||
g.set_renderer('status_code', self.render_status_code_column)
|
||||
|
||||
# person
|
||||
g.set_label('person', "Person Name")
|
||||
g.set_renderer('person', self.render_person_text)
|
||||
g.set_link('person')
|
||||
g.set_joiner('person', lambda q: q.outerjoin(model.Person))
|
||||
g.set_sorter('person', model.Person.display_name)
|
||||
g.set_filter('person', model.Person.display_name,
|
||||
default_active=True, default_verb='contains')
|
||||
|
||||
# product_key
|
||||
field = self.get_product_key_field()
|
||||
g.set_renderer(field, lambda item, field: getattr(item, f'product_{field}'))
|
||||
|
||||
# product_*
|
||||
g.set_label('product_brand', "Brand")
|
||||
g.set_link('product_brand')
|
||||
g.set_label('product_description', "Description")
|
||||
g.set_link('product_description')
|
||||
g.set_label('product_size', "Size")
|
||||
|
||||
g.set_link('order_id')
|
||||
g.set_link('person')
|
||||
g.set_link('product_brand')
|
||||
g.set_link('product_description')
|
||||
# "numbers"
|
||||
g.set_type('case_quantity', 'quantity')
|
||||
g.set_type('order_quantity', 'quantity')
|
||||
g.set_type('total_price', 'currency')
|
||||
# TODO: deprecate / remove these
|
||||
g.set_type('cases_ordered', 'quantity')
|
||||
g.set_type('units_ordered', 'quantity')
|
||||
|
||||
# order_uom
|
||||
# nb. this is not relevant if "case orders only"
|
||||
if not batch_handler.allow_unit_orders():
|
||||
g.remove('order_uom')
|
||||
else:
|
||||
g.set_enum('order_uom', self.enum.UNIT_OF_MEASURE)
|
||||
|
||||
# order_created
|
||||
g.set_renderer('order_created', self.render_order_created)
|
||||
g.set_sorter('order_created', model.CustomerOrder.created)
|
||||
g.set_sort_defaults('order_created', 'desc')
|
||||
|
||||
# status_code
|
||||
g.set_renderer('status_code', self.render_status_code_column)
|
||||
|
||||
def render_order_id(self, item, field):
|
||||
return item.order.id
|
||||
|
|
|
@ -2257,15 +2257,28 @@ class PendingProductView(MasterView):
|
|||
# TODO: add support for this someday
|
||||
rows_viewable = False
|
||||
|
||||
# TODO: this clearly needs help
|
||||
row_labels = {
|
||||
'order_id': "Order ID",
|
||||
'product_brand': "Brand",
|
||||
'product_description': "Description",
|
||||
'product_size': "Size",
|
||||
'order_created': "Ordered",
|
||||
'status_code': "Status",
|
||||
}
|
||||
|
||||
row_grid_columns = [
|
||||
# 'upc',
|
||||
'brand_name',
|
||||
'description',
|
||||
'size',
|
||||
'vendor_name',
|
||||
# 'regular_price',
|
||||
# 'current_price',
|
||||
'order_id',
|
||||
'customer',
|
||||
'person',
|
||||
'_product_key_',
|
||||
'product_brand',
|
||||
'product_description',
|
||||
'product_size',
|
||||
'order_quantity',
|
||||
'total_price',
|
||||
'order_created',
|
||||
'status_code',
|
||||
'flagged',
|
||||
]
|
||||
|
||||
def configure_grid(self, g):
|
||||
|
@ -2468,6 +2481,42 @@ class PendingProductView(MasterView):
|
|||
def get_parent(self, item):
|
||||
return item.pending_product
|
||||
|
||||
def configure_row_grid(self, g):
|
||||
super().configure_row_grid(g)
|
||||
app = self.get_rattail_app()
|
||||
|
||||
# order_id
|
||||
g.set_renderer('order_id', lambda item, field: item.order.id)
|
||||
|
||||
# contact
|
||||
handler = app.get_batch_handler('custorder')
|
||||
if handler.new_order_requires_customer():
|
||||
g.remove('person')
|
||||
g.set_renderer('customer', lambda item, field: item.order.customer)
|
||||
else:
|
||||
g.remove('customer')
|
||||
g.set_renderer('person', lambda item, field: item.order.person)
|
||||
|
||||
# product_key
|
||||
field = self.get_product_key_field()
|
||||
if not self.rows_viewable:
|
||||
g.set_link(field, False)
|
||||
g.set_renderer(field, lambda item, field: getattr(item, f'product_{field}'))
|
||||
|
||||
# "numbers"
|
||||
g.set_type('order_quantity', 'quantity')
|
||||
g.set_type('total_price', 'currency')
|
||||
|
||||
# order_created
|
||||
g.set_renderer('order_created',
|
||||
lambda item, field: raw_datetime(self.rattail_config,
|
||||
app.localtime(item.order.created,
|
||||
from_utc=True),
|
||||
as_date=True))
|
||||
|
||||
# status_code
|
||||
g.set_enum('status_code', self.enum.CUSTORDER_ITEM_STATUS)
|
||||
|
||||
@classmethod
|
||||
def defaults(cls, config):
|
||||
cls._defaults(config)
|
||||
|
|
Loading…
Reference in a new issue