From 1d5499686f95ca133f659454aab1ddbe37c53065 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sun, 8 Mar 2026 15:50:36 -0500 Subject: [PATCH] fix: cleanup grid views for All, Standard Quantities --- src/wuttafarm/web/views/farmos/quantities.py | 2 + src/wuttafarm/web/views/quantities.py | 104 +++++++++++++++++-- 2 files changed, 98 insertions(+), 8 deletions(-) diff --git a/src/wuttafarm/web/views/farmos/quantities.py b/src/wuttafarm/web/views/farmos/quantities.py index a388559..97ec9f0 100644 --- a/src/wuttafarm/web/views/farmos/quantities.py +++ b/src/wuttafarm/web/views/farmos/quantities.py @@ -171,6 +171,7 @@ class QuantityMasterView(FarmOSMasterView): # as_text g.set_renderer("as_text", self.render_as_text_for_grid) + g.set_link("as_text") # measure g.set_renderer("measure", self.render_measure_for_grid) @@ -303,6 +304,7 @@ class StandardQuantityView(QuantityMasterView): url_prefix = "/farmOS/quantities/standard" farmos_quantity_type = "standard" + farmos_refurl_path = "/log-quantities/standard" def get_xref_buttons(self, standard_quantity): model = self.app.model diff --git a/src/wuttafarm/web/views/quantities.py b/src/wuttafarm/web/views/quantities.py index d4112cf..9ff8912 100644 --- a/src/wuttafarm/web/views/quantities.py +++ b/src/wuttafarm/web/views/quantities.py @@ -25,11 +25,14 @@ Master view for Quantities from collections import OrderedDict +from webhelpers2.html import tags + from wuttaweb.db import Session from wuttafarm.web.views import WuttaFarmMasterView from wuttafarm.db.model import QuantityType, Quantity, StandardQuantity from wuttafarm.web.forms.schema import UnitRef, LogRef +from wuttafarm.util import get_log_type_enum def get_quantity_type_enum(config): @@ -100,17 +103,28 @@ class QuantityMasterView(WuttaFarmMasterView): Base class for Quantity master views """ + farmos_entity_type = "quantity" + + labels = { + "log_id": "Log ID", + } + grid_columns = [ "drupal_id", - "as_text", - "quantity_type", + "log_id", + "log_status", + "log_timestamp", + "log_type", + "log_name", + "log_assets", "measure", "value", "units", "label", + "quantity_type", ] - sort_defaults = ("drupal_id", "desc") + sort_defaults = ("log_timestamp", "desc") form_fields = [ "quantity_type", @@ -129,10 +143,15 @@ class QuantityMasterView(WuttaFarmMasterView): model = self.app.model model_class = self.get_model_class() session = session or self.Session() + query = session.query(model_class) if model_class is not model.Quantity: query = query.join(model.Quantity) + query = query.join(model.Measure).join(model.Unit) + + query = query.outerjoin(model.LogQuantity).outerjoin(model.Log) + return query def configure_grid(self, grid): @@ -140,14 +159,39 @@ class QuantityMasterView(WuttaFarmMasterView): super().configure_grid(g) model = self.app.model model_class = self.get_model_class() + session = self.Session() # drupal_id g.set_label("drupal_id", "ID", column_only=True) g.set_sorter("drupal_id", model.Quantity.drupal_id) - # as_text - g.set_renderer("as_text", self.render_as_text_for_grid) - g.set_link("as_text") + # log_id + g.set_renderer("log_id", self.render_log_id_for_grid) + 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 if model_class is not model.Quantity: @@ -177,8 +221,47 @@ class QuantityMasterView(WuttaFarmMasterView): g.add_action("view", icon="eye", url=quantity_url) - def render_as_text_for_grid(self, quantity, field, value): - return quantity.render_as_text(self.config) + def render_log_id_for_grid(self, quantity, field, value): + 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): value = quantity.value_numerator / quantity.value_denominator @@ -271,6 +354,8 @@ class AllQuantityView(QuantityMasterView): deletable = False model_is_versioned = False + farmos_refurl_path = "/log-quantities" + class StandardQuantityView(QuantityMasterView): """ @@ -281,6 +366,9 @@ class StandardQuantityView(QuantityMasterView): route_prefix = "quantities_standard" url_prefix = "/quantities/standard" + farmos_bundle = "standard" + farmos_refurl_path = "/log-quantities/standard" + def defaults(config, **kwargs): base = globals()