diff --git a/src/wuttafarm/web/views/units.py b/src/wuttafarm/web/views/units.py index 549333e..3356428 100644 --- a/src/wuttafarm/web/views/units.py +++ b/src/wuttafarm/web/views/units.py @@ -24,7 +24,7 @@ Master view for Units """ from wuttafarm.web.views import WuttaFarmMasterView -from wuttafarm.db.model import Measure, Unit +from wuttafarm.db.model import Measure, Unit, Quantity class MeasureView(WuttaFarmMasterView): @@ -104,6 +104,26 @@ class UnitView(WuttaFarmMasterView): "farmos_uuid", ] + has_rows = True + row_model_class = Quantity + rows_viewable = True + + row_labels = { + "quantity_type_id": "Quantity Type ID", + "measure_id": "Measure ID", + } + + row_grid_columns = [ + "drupal_id", + "as_text", + "quantity_type", + "measure", + "value", + "label", + ] + + rows_sort_defaults = ("drupal_id", "desc") + def configure_grid(self, grid): g = grid super().configure_grid(g) @@ -131,6 +151,37 @@ class UnitView(WuttaFarmMasterView): return buttons + def get_row_grid_data(self, unit): + model = self.app.model + session = self.Session() + return session.query(model.Quantity).filter(model.Quantity.units == unit) + + def configure_row_grid(self, grid): + g = grid + super().configure_row_grid(g) + + # drupal_id + g.set_label("drupal_id", "ID", column_only=True) + + # as_text + g.set_renderer("as_text", self.render_as_text_for_grid) + g.set_link("as_text") + + # value + g.set_renderer("value", self.render_value_for_grid) + + def render_as_text_for_grid(self, quantity, field, value): + return quantity.render_as_text(self.config) + + def render_value_for_grid(self, quantity, field, value): + value = quantity.value_numerator / quantity.value_denominator + return self.app.render_quantity(value) + + def get_row_action_url_view(self, quantity, i): + return self.request.route_url( + f"quantities_{quantity.quantity_type_id}.view", uuid=quantity.uuid + ) + def defaults(config, **kwargs): base = globals()