fix: cleanup grid views for All, Standard Quantities

This commit is contained in:
Lance Edgar 2026-03-08 15:50:36 -05:00
parent b2a7184937
commit 1d5499686f
2 changed files with 98 additions and 8 deletions

View file

@ -171,6 +171,7 @@ class QuantityMasterView(FarmOSMasterView):
# as_text # as_text
g.set_renderer("as_text", self.render_as_text_for_grid) g.set_renderer("as_text", self.render_as_text_for_grid)
g.set_link("as_text")
# measure # measure
g.set_renderer("measure", self.render_measure_for_grid) g.set_renderer("measure", self.render_measure_for_grid)
@ -303,6 +304,7 @@ class StandardQuantityView(QuantityMasterView):
url_prefix = "/farmOS/quantities/standard" url_prefix = "/farmOS/quantities/standard"
farmos_quantity_type = "standard" farmos_quantity_type = "standard"
farmos_refurl_path = "/log-quantities/standard"
def get_xref_buttons(self, standard_quantity): def get_xref_buttons(self, standard_quantity):
model = self.app.model model = self.app.model

View file

@ -25,11 +25,14 @@ Master view for Quantities
from collections import OrderedDict from collections import OrderedDict
from webhelpers2.html import tags
from wuttaweb.db import Session from wuttaweb.db import Session
from wuttafarm.web.views import WuttaFarmMasterView from wuttafarm.web.views import WuttaFarmMasterView
from wuttafarm.db.model import QuantityType, Quantity, StandardQuantity from wuttafarm.db.model import QuantityType, Quantity, StandardQuantity
from wuttafarm.web.forms.schema import UnitRef, LogRef from wuttafarm.web.forms.schema import UnitRef, LogRef
from wuttafarm.util import get_log_type_enum
def get_quantity_type_enum(config): def get_quantity_type_enum(config):
@ -100,17 +103,28 @@ class QuantityMasterView(WuttaFarmMasterView):
Base class for Quantity master views Base class for Quantity master views
""" """
farmos_entity_type = "quantity"
labels = {
"log_id": "Log ID",
}
grid_columns = [ grid_columns = [
"drupal_id", "drupal_id",
"as_text", "log_id",
"quantity_type", "log_status",
"log_timestamp",
"log_type",
"log_name",
"log_assets",
"measure", "measure",
"value", "value",
"units", "units",
"label", "label",
"quantity_type",
] ]
sort_defaults = ("drupal_id", "desc") sort_defaults = ("log_timestamp", "desc")
form_fields = [ form_fields = [
"quantity_type", "quantity_type",
@ -129,10 +143,15 @@ class QuantityMasterView(WuttaFarmMasterView):
model = self.app.model model = self.app.model
model_class = self.get_model_class() model_class = self.get_model_class()
session = session or self.Session() session = session or self.Session()
query = session.query(model_class) query = session.query(model_class)
if model_class is not model.Quantity: if model_class is not model.Quantity:
query = query.join(model.Quantity) query = query.join(model.Quantity)
query = query.join(model.Measure).join(model.Unit) query = query.join(model.Measure).join(model.Unit)
query = query.outerjoin(model.LogQuantity).outerjoin(model.Log)
return query return query
def configure_grid(self, grid): def configure_grid(self, grid):
@ -140,14 +159,39 @@ class QuantityMasterView(WuttaFarmMasterView):
super().configure_grid(g) super().configure_grid(g)
model = self.app.model model = self.app.model
model_class = self.get_model_class() model_class = self.get_model_class()
session = self.Session()
# drupal_id # drupal_id
g.set_label("drupal_id", "ID", column_only=True) g.set_label("drupal_id", "ID", column_only=True)
g.set_sorter("drupal_id", model.Quantity.drupal_id) g.set_sorter("drupal_id", model.Quantity.drupal_id)
# as_text # log_id
g.set_renderer("as_text", self.render_as_text_for_grid) g.set_renderer("log_id", self.render_log_id_for_grid)
g.set_link("as_text") g.set_sorter("log_id", model.Log.drupal_id)
# log_status
g.set_renderer("log_status", self.render_log_status_for_grid)
g.set_sorter("log_status", model.Log.status)
# log_timestamp
g.set_renderer("log_timestamp", self.render_log_timestamp_for_grid)
g.set_sorter("log_timestamp", model.Log.timestamp)
# log_type
self.log_type_enum = get_log_type_enum(self.config, session)
g.set_renderer("log_type", self.render_log_type_for_grid)
g.set_sorter("log_type", model.Log.log_type)
# log_name
g.set_renderer("log_name", self.render_log_name_for_grid)
g.set_sorter("log_name", model.Log.message)
if not self.farmos_style_grid_links:
g.set_link("log_name")
# log_assets
g.set_renderer("log_assets", self.render_log_assets_for_grid)
if not self.farmos_style_grid_links:
g.set_link("log_assets")
# quantity_type # quantity_type
if model_class is not model.Quantity: if model_class is not model.Quantity:
@ -177,8 +221,47 @@ class QuantityMasterView(WuttaFarmMasterView):
g.add_action("view", icon="eye", url=quantity_url) g.add_action("view", icon="eye", url=quantity_url)
def render_as_text_for_grid(self, quantity, field, value): def render_log_id_for_grid(self, quantity, field, value):
return quantity.render_as_text(self.config) if log := quantity.log:
return log.drupal_id
return None
def render_log_status_for_grid(self, quantity, field, value):
enum = self.app.enum
if log := quantity.log:
return enum.LOG_STATUS.get(log.status, log.status)
return None
def render_log_timestamp_for_grid(self, quantity, field, value):
if log := quantity.log:
return self.app.render_date(log.timestamp)
return None
def render_log_type_for_grid(self, quantity, field, value):
if log := quantity.log:
return self.log_type_enum.get(log.log_type, log.log_type)
return None
def render_log_name_for_grid(self, quantity, field, value):
if log := quantity.log:
if self.farmos_style_grid_links:
url = self.request.route_url(f"logs_{log.log_type}.view", uuid=log.uuid)
return tags.link_to(log.message, url)
return log.message
return None
def render_log_assets_for_grid(self, quantity, field, value):
if log := quantity.log:
if self.farmos_style_grid_links:
links = []
for asset in log.assets:
url = self.request.route_url(
f"{asset.asset_type}_assets.view", uuid=asset.uuid
)
links.append(tags.link_to(str(asset), url))
return ", ".join(links)
return [str(a) for a in log.assets]
return None
def render_value_for_grid(self, quantity, field, value): def render_value_for_grid(self, quantity, field, value):
value = quantity.value_numerator / quantity.value_denominator value = quantity.value_numerator / quantity.value_denominator
@ -271,6 +354,8 @@ class AllQuantityView(QuantityMasterView):
deletable = False deletable = False
model_is_versioned = False model_is_versioned = False
farmos_refurl_path = "/log-quantities"
class StandardQuantityView(QuantityMasterView): class StandardQuantityView(QuantityMasterView):
""" """
@ -281,6 +366,9 @@ class StandardQuantityView(QuantityMasterView):
route_prefix = "quantities_standard" route_prefix = "quantities_standard"
url_prefix = "/quantities/standard" url_prefix = "/quantities/standard"
farmos_bundle = "standard"
farmos_refurl_path = "/log-quantities/standard"
def defaults(config, **kwargs): def defaults(config, **kwargs):
base = globals() base = globals()