Add products row grid for misc. org table views
This commit is contained in:
parent
ec5ff8a788
commit
0dc9793772
|
@ -58,6 +58,23 @@ class BrandView(MasterView):
|
||||||
'confirmed',
|
'confirmed',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
model_row_class = model.Product
|
||||||
|
|
||||||
|
row_labels = {
|
||||||
|
'upc': "UPC",
|
||||||
|
}
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'upc',
|
||||||
|
'description',
|
||||||
|
'size',
|
||||||
|
'department',
|
||||||
|
'vendor',
|
||||||
|
'regular_price',
|
||||||
|
'current_price',
|
||||||
|
]
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
super(BrandView, self).configure_grid(g)
|
super(BrandView, self).configure_grid(g)
|
||||||
|
|
||||||
|
@ -70,6 +87,32 @@ class BrandView(MasterView):
|
||||||
# confirmed
|
# confirmed
|
||||||
g.set_type('confirmed', 'boolean')
|
g.set_type('confirmed', 'boolean')
|
||||||
|
|
||||||
|
def get_row_data(self, brand):
|
||||||
|
return self.Session.query(model.Product)\
|
||||||
|
.filter(model.Product.brand == brand)
|
||||||
|
|
||||||
|
def get_parent(self, product):
|
||||||
|
return product.brand
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(BrandView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
g.set_renderer('regular_price', self.render_price)
|
||||||
|
g.set_renderer('current_price', self.render_price)
|
||||||
|
|
||||||
|
g.set_sort_defaults('upc')
|
||||||
|
|
||||||
|
def render_price(self, product, field):
|
||||||
|
if not product.not_for_sale:
|
||||||
|
price = product[field]
|
||||||
|
if price:
|
||||||
|
return self.handler.render_price(price)
|
||||||
|
|
||||||
|
def row_view_action_url(self, product, i):
|
||||||
|
return self.request.route_url('products.view', uuid=product.uuid)
|
||||||
|
|
||||||
def get_merge_data(self, brand):
|
def get_merge_data(self, brand):
|
||||||
product_count = self.Session.query(model.Product)\
|
product_count = self.Session.query(model.Product)\
|
||||||
.filter(model.Product.brand == brand)\
|
.filter(model.Product.brand == brand)\
|
||||||
|
|
|
@ -63,6 +63,23 @@ class DepartmentView(MasterView):
|
||||||
'employees',
|
'employees',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
model_row_class = model.Product
|
||||||
|
|
||||||
|
row_labels = {
|
||||||
|
'upc': "UPC",
|
||||||
|
}
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'upc',
|
||||||
|
'brand',
|
||||||
|
'description',
|
||||||
|
'size',
|
||||||
|
'vendor',
|
||||||
|
'regular_price',
|
||||||
|
'current_price',
|
||||||
|
]
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
super(DepartmentView, self).configure_grid(g)
|
super(DepartmentView, self).configure_grid(g)
|
||||||
g.filters['name'].default_active = True
|
g.filters['name'].default_active = True
|
||||||
|
@ -156,6 +173,32 @@ class DepartmentView(MasterView):
|
||||||
count, department), 'error')
|
count, department), 'error')
|
||||||
raise self.redirect(self.get_action_url('view', department))
|
raise self.redirect(self.get_action_url('view', department))
|
||||||
|
|
||||||
|
def get_row_data(self, department):
|
||||||
|
return self.Session.query(model.Product)\
|
||||||
|
.filter(model.Product.department == department)
|
||||||
|
|
||||||
|
def get_parent(self, product):
|
||||||
|
return product.department
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(DepartmentView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
g.set_renderer('regular_price', self.render_price)
|
||||||
|
g.set_renderer('current_price', self.render_price)
|
||||||
|
|
||||||
|
g.set_sort_defaults('upc')
|
||||||
|
|
||||||
|
def render_price(self, product, field):
|
||||||
|
if not product.not_for_sale:
|
||||||
|
price = product[field]
|
||||||
|
if price:
|
||||||
|
return self.handler.render_price(price)
|
||||||
|
|
||||||
|
def row_view_action_url(self, product, i):
|
||||||
|
return self.request.route_url('products.view', uuid=product.uuid)
|
||||||
|
|
||||||
def list_by_vendor(self):
|
def list_by_vendor(self):
|
||||||
"""
|
"""
|
||||||
View list of departments by vendor
|
View list of departments by vendor
|
||||||
|
|
|
@ -51,12 +51,60 @@ class FamilyView(MasterView):
|
||||||
'name',
|
'name',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
model_row_class = model.Product
|
||||||
|
|
||||||
|
row_labels = {
|
||||||
|
'upc': "UPC",
|
||||||
|
}
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'upc',
|
||||||
|
'brand',
|
||||||
|
'description',
|
||||||
|
'size',
|
||||||
|
'department',
|
||||||
|
'vendor',
|
||||||
|
'regular_price',
|
||||||
|
'current_price',
|
||||||
|
]
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
super(FamilyView, self).configure_grid(g)
|
super(FamilyView, self).configure_grid(g)
|
||||||
g.filters['name'].default_active = True
|
g.filters['name'].default_active = True
|
||||||
g.filters['name'].default_verb = 'contains'
|
g.filters['name'].default_verb = 'contains'
|
||||||
|
|
||||||
g.set_sort_defaults('code')
|
g.set_sort_defaults('code')
|
||||||
|
|
||||||
|
g.set_link('code')
|
||||||
|
g.set_link('name')
|
||||||
|
|
||||||
|
def get_row_data(self, family):
|
||||||
|
return self.Session.query(model.Product)\
|
||||||
|
.filter(model.Product.family == family)
|
||||||
|
|
||||||
|
def get_parent(self, product):
|
||||||
|
return product.family
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(FamilyView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
g.set_renderer('regular_price', self.render_price)
|
||||||
|
g.set_renderer('current_price', self.render_price)
|
||||||
|
|
||||||
|
g.set_sort_defaults('upc')
|
||||||
|
|
||||||
|
def render_price(self, product, field):
|
||||||
|
if not product.not_for_sale:
|
||||||
|
price = product[field]
|
||||||
|
if price:
|
||||||
|
return self.handler.render_price(price)
|
||||||
|
|
||||||
|
def row_view_action_url(self, product, i):
|
||||||
|
return self.request.route_url('products.view', uuid=product.uuid)
|
||||||
|
|
||||||
# TODO: deprecate / remove this
|
# TODO: deprecate / remove this
|
||||||
FamiliesView = FamilyView
|
FamiliesView = FamilyView
|
||||||
|
|
||||||
|
|
|
@ -171,6 +171,9 @@ class ProductView(MasterView):
|
||||||
super(ProductView, self).__init__(request)
|
super(ProductView, self).__init__(request)
|
||||||
self.print_labels = request.rattail_config.getbool('tailbone', 'products.print_labels', default=False)
|
self.print_labels = request.rattail_config.getbool('tailbone', 'products.print_labels', default=False)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
|
||||||
def query(self, session):
|
def query(self, session):
|
||||||
user = self.request.user
|
user = self.request.user
|
||||||
if user and user not in session:
|
if user and user not in session:
|
||||||
|
@ -453,24 +456,11 @@ class ProductView(MasterView):
|
||||||
return ""
|
return ""
|
||||||
return "${:0.2f}".format(cost.unit_cost)
|
return "${:0.2f}".format(cost.unit_cost)
|
||||||
|
|
||||||
def render_price(self, product, column):
|
def render_price(self, product, field):
|
||||||
price = product[column]
|
if not product.not_for_sale:
|
||||||
if price:
|
price = product[field]
|
||||||
if not product.not_for_sale:
|
if price:
|
||||||
if price.price is not None and price.pack_price is not None:
|
return self.handler.render_price(price)
|
||||||
if price.multiple > 1:
|
|
||||||
return HTML.literal("$ {:0.2f} / {} ($ {:0.2f} / {})".format(
|
|
||||||
price.price, price.multiple,
|
|
||||||
price.pack_price, price.pack_multiple))
|
|
||||||
return HTML.literal("$ {:0.2f} ($ {:0.2f} / {})".format(
|
|
||||||
price.price, price.pack_price, price.pack_multiple))
|
|
||||||
if price.price is not None:
|
|
||||||
if price.multiple is not None and price.multiple > 1:
|
|
||||||
return "$ {:0.2f} / {}".format(price.price, price.multiple)
|
|
||||||
return "$ {:0.2f}".format(price.price)
|
|
||||||
if price.pack_price is not None:
|
|
||||||
return "$ {:0.2f} / {}".format(price.pack_price, price.pack_multiple)
|
|
||||||
return ""
|
|
||||||
|
|
||||||
def render_current_price_for_grid(self, product, field):
|
def render_current_price_for_grid(self, product, field):
|
||||||
text = self.render_price(product, field)
|
text = self.render_price(product, field)
|
||||||
|
|
|
@ -50,6 +50,24 @@ class ReportCodeView(MasterView):
|
||||||
'name',
|
'name',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
model_row_class = model.Product
|
||||||
|
|
||||||
|
row_labels = {
|
||||||
|
'upc': "UPC",
|
||||||
|
}
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'upc',
|
||||||
|
'brand',
|
||||||
|
'description',
|
||||||
|
'size',
|
||||||
|
'department',
|
||||||
|
'vendor',
|
||||||
|
'regular_price',
|
||||||
|
'current_price',
|
||||||
|
]
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
super(ReportCodeView, self).configure_grid(g)
|
super(ReportCodeView, self).configure_grid(g)
|
||||||
g.filters['name'].default_active = True
|
g.filters['name'].default_active = True
|
||||||
|
@ -58,6 +76,32 @@ class ReportCodeView(MasterView):
|
||||||
g.set_link('code')
|
g.set_link('code')
|
||||||
g.set_link('name')
|
g.set_link('name')
|
||||||
|
|
||||||
|
def get_row_data(self, reportcode):
|
||||||
|
return self.Session.query(model.Product)\
|
||||||
|
.filter(model.Product.report_code == reportcode)
|
||||||
|
|
||||||
|
def get_parent(self, product):
|
||||||
|
return product.report_code
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(ReportCodeView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
g.set_renderer('regular_price', self.render_price)
|
||||||
|
g.set_renderer('current_price', self.render_price)
|
||||||
|
|
||||||
|
g.set_sort_defaults('upc')
|
||||||
|
|
||||||
|
def render_price(self, product, field):
|
||||||
|
if not product.not_for_sale:
|
||||||
|
price = product[field]
|
||||||
|
if price:
|
||||||
|
return self.handler.render_price(price)
|
||||||
|
|
||||||
|
def row_view_action_url(self, product, i):
|
||||||
|
return self.request.route_url('products.view', uuid=product.uuid)
|
||||||
|
|
||||||
# TODO: deprecate / remove this
|
# TODO: deprecate / remove this
|
||||||
ReportCodesView = ReportCodeView
|
ReportCodesView = ReportCodeView
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,12 @@ class SubdepartmentView(MasterView):
|
||||||
'department',
|
'department',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
form_fields = [
|
||||||
|
'number',
|
||||||
|
'name',
|
||||||
|
'department',
|
||||||
|
]
|
||||||
|
|
||||||
mergeable = True
|
mergeable = True
|
||||||
merge_additive_fields = [
|
merge_additive_fields = [
|
||||||
'product_count',
|
'product_count',
|
||||||
|
@ -57,6 +63,23 @@ class SubdepartmentView(MasterView):
|
||||||
'department_number',
|
'department_number',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
has_rows = True
|
||||||
|
model_row_class = model.Product
|
||||||
|
|
||||||
|
row_labels = {
|
||||||
|
'upc': "UPC",
|
||||||
|
}
|
||||||
|
|
||||||
|
row_grid_columns = [
|
||||||
|
'upc',
|
||||||
|
'brand',
|
||||||
|
'description',
|
||||||
|
'size',
|
||||||
|
'vendor',
|
||||||
|
'regular_price',
|
||||||
|
'current_price',
|
||||||
|
]
|
||||||
|
|
||||||
def configure_grid(self, g):
|
def configure_grid(self, g):
|
||||||
super(SubdepartmentView, self).configure_grid(g)
|
super(SubdepartmentView, self).configure_grid(g)
|
||||||
|
|
||||||
|
@ -98,6 +121,33 @@ class SubdepartmentView(MasterView):
|
||||||
|
|
||||||
Session.delete(removing)
|
Session.delete(removing)
|
||||||
|
|
||||||
|
def get_row_data(self, subdepartment):
|
||||||
|
return self.Session.query(model.Product)\
|
||||||
|
.filter(model.Product.subdepartment == subdepartment)
|
||||||
|
|
||||||
|
def get_parent(self, product):
|
||||||
|
return product.subdepartment
|
||||||
|
|
||||||
|
def configure_row_grid(self, g):
|
||||||
|
super(SubdepartmentView, self).configure_row_grid(g)
|
||||||
|
|
||||||
|
app = self.get_rattail_app()
|
||||||
|
self.handler = app.get_products_handler()
|
||||||
|
g.set_renderer('regular_price', self.render_price)
|
||||||
|
g.set_renderer('current_price', self.render_price)
|
||||||
|
|
||||||
|
g.set_sort_defaults('upc')
|
||||||
|
|
||||||
|
def render_price(self, product, field):
|
||||||
|
if not product.not_for_sale:
|
||||||
|
price = product[field]
|
||||||
|
if price:
|
||||||
|
return self.handler.render_price(price)
|
||||||
|
|
||||||
|
def row_view_action_url(self, product, i):
|
||||||
|
return self.request.route_url('products.view', uuid=product.uuid)
|
||||||
|
|
||||||
|
|
||||||
# TODO: deprecate / remove this
|
# TODO: deprecate / remove this
|
||||||
SubdepartmentsView = SubdepartmentView
|
SubdepartmentsView = SubdepartmentView
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue