fix: add basic master view for Product Costs
This commit is contained in:
parent
9e55717041
commit
20b3f87dbe
|
@ -394,6 +394,11 @@ class TailboneMenuHandler(WuttaMenuHandler):
|
|||
'route': 'products',
|
||||
'perm': 'products.list',
|
||||
},
|
||||
{
|
||||
'title': "Product Costs",
|
||||
'route': 'product_costs',
|
||||
'perm': 'product_costs.list',
|
||||
},
|
||||
{
|
||||
'title': "Departments",
|
||||
'route': 'departments',
|
||||
|
@ -451,6 +456,11 @@ class TailboneMenuHandler(WuttaMenuHandler):
|
|||
'route': 'vendors',
|
||||
'perm': 'vendors.list',
|
||||
},
|
||||
{
|
||||
'title': "Product Costs",
|
||||
'route': 'product_costs',
|
||||
'perm': 'product_costs.list',
|
||||
},
|
||||
{'type': 'sep'},
|
||||
{
|
||||
'title': "Ordering",
|
||||
|
|
|
@ -34,7 +34,7 @@ import sqlalchemy_continuum as continuum
|
|||
|
||||
from rattail import enum, pod, sil
|
||||
from rattail.db import api, auth, Session as RattailSession
|
||||
from rattail.db.model import Product, PendingProduct, CustomerOrderItem
|
||||
from rattail.db.model import Product, PendingProduct, ProductCost, CustomerOrderItem
|
||||
from rattail.gpc import GPC
|
||||
from rattail.threads import Thread
|
||||
from rattail.exceptions import LabelPrintingError
|
||||
|
@ -2668,6 +2668,78 @@ class PendingProductView(MasterView):
|
|||
permission=f'{permission_prefix}.ignore_product')
|
||||
|
||||
|
||||
class ProductCostView(MasterView):
|
||||
"""
|
||||
Master view for Product Costs
|
||||
"""
|
||||
model_class = ProductCost
|
||||
route_prefix = 'product_costs'
|
||||
url_prefix = '/products/costs'
|
||||
has_versions = True
|
||||
|
||||
grid_columns = [
|
||||
'_product_key_',
|
||||
'vendor',
|
||||
'preference',
|
||||
'code',
|
||||
'case_size',
|
||||
'case_cost',
|
||||
'pack_size',
|
||||
'pack_cost',
|
||||
'unit_cost',
|
||||
]
|
||||
|
||||
def query(self, session):
|
||||
""" """
|
||||
query = super().query(session)
|
||||
model = self.app.model
|
||||
|
||||
# always join on Product
|
||||
return query.join(model.Product)
|
||||
|
||||
def configure_grid(self, g):
|
||||
""" """
|
||||
super().configure_grid(g)
|
||||
model = self.app.model
|
||||
|
||||
# product key
|
||||
field = self.get_product_key_field()
|
||||
g.set_renderer(field, self.render_product_key)
|
||||
g.set_sorter(field, getattr(model.Product, field))
|
||||
g.set_sort_defaults(field)
|
||||
g.set_filter(field, getattr(model.Product, field))
|
||||
|
||||
# vendor
|
||||
g.set_joiner('vendor', lambda q: q.join(model.Vendor))
|
||||
g.set_sorter('vendor', model.Vendor.name)
|
||||
g.set_filter('vendor', model.Vendor.name, label="Vendor Name")
|
||||
|
||||
def render_product_key(self, cost, field):
|
||||
""" """
|
||||
handler = self.app.get_products_handler()
|
||||
return handler.render_product_key(cost.product)
|
||||
|
||||
def configure_form(self, f):
|
||||
""" """
|
||||
super().configure_form(f)
|
||||
|
||||
# product
|
||||
f.set_renderer('product', self.render_product)
|
||||
if 'product_uuid' in f and 'product' in f:
|
||||
f.remove('product')
|
||||
f.replace('product_uuid', 'product')
|
||||
|
||||
# vendor
|
||||
f.set_renderer('vendor', self.render_vendor)
|
||||
if 'vendor_uuid' in f and 'vendor' in f:
|
||||
f.remove('vendor')
|
||||
f.replace('vendor_uuid', 'vendor')
|
||||
|
||||
# futures
|
||||
# TODO: should eventually show a subgrid here?
|
||||
f.remove('futures')
|
||||
|
||||
|
||||
def defaults(config, **kwargs):
|
||||
base = globals()
|
||||
|
||||
|
@ -2677,6 +2749,9 @@ def defaults(config, **kwargs):
|
|||
PendingProductView = kwargs.get('PendingProductView', base['PendingProductView'])
|
||||
PendingProductView.defaults(config)
|
||||
|
||||
ProductCostView = kwargs.get('ProductCostView', base['ProductCostView'])
|
||||
ProductCostView.defaults(config)
|
||||
|
||||
|
||||
def includeme(config):
|
||||
defaults(config)
|
||||
|
|
Loading…
Reference in a new issue