Refactor several "field grids" per Buefy theme

e.g. the Users field when viewing a Role, and Vendor Sources panel
when viewing a Product
This commit is contained in:
Lance Edgar 2021-09-25 18:54:33 -04:00
parent 9fe1d4c596
commit 3ece3303db
9 changed files with 299 additions and 17 deletions

View file

@ -1152,8 +1152,88 @@ class ProductView(MasterView):
kwargs['costs_label_vendor'] = "Vendor"
kwargs['costs_label_code'] = "Order Code"
kwargs['costs_label_case_size'] = "Case Size"
if use_buefy:
kwargs['vendor_sources'] = self.get_context_vendor_sources(product)
kwargs['lookup_codes'] = self.get_context_lookup_codes(product)
return kwargs
def get_context_vendor_sources(self, product):
app = self.get_rattail_app()
route_prefix = self.get_route_prefix()
factory = self.get_grid_factory()
g = factory(
key='{}.vendor_sources'.format(route_prefix),
data=[],
columns=[
'preferred',
'vendor',
'vendor_item_code',
'case_size',
'case_cost',
'unit_cost',
'status',
],
labels={
'preferred': "Pref.",
'vendor_item_code': "Order Code",
},
)
sources = []
link_vendor = self.request.has_perm('vendors.view')
for cost in product.costs:
source = {
'uuid': cost.uuid,
'preferred': "X" if cost.preference == 1 else None,
'vendor_item_code': cost.code,
'case_size': app.render_quantity(cost.case_size),
'case_cost': app.render_currency(cost.case_cost),
'unit_cost': app.render_currency(cost.unit_cost, scale=4),
'status': "discontinued" if cost.discontinued else "available",
}
text = six.text_type(cost.vendor)
if link_vendor:
url = self.request.route_url('vendors.view', uuid=cost.vendor.uuid)
source['vendor'] = tags.link_to(text, url)
else:
source['vendor'] = text
sources.append(source)
return {'grid': g, 'data': sources}
def get_context_lookup_codes(self, product):
route_prefix = self.get_route_prefix()
factory = self.get_grid_factory()
g = factory(
key='{}.lookup_codes'.format(route_prefix),
data=[],
columns=[
'sequence',
'code',
],
labels={
'sequence': "Seq.",
},
)
lookup_codes = []
for code in product._codes:
lookup_codes.append({
'uuid': code.uuid,
'sequence': code.ordinal,
'code': code.code,
})
return {'grid': g, 'data': lookup_codes}
def get_regular_price_history(self, product):
"""
Returns a sequence of "records" which corresponds to the given