fix: cleanup grid views for All, Standard Quantities
This commit is contained in:
parent
b2a7184937
commit
1d5499686f
2 changed files with 98 additions and 8 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue