diff --git a/src/wuttafarm/app.py b/src/wuttafarm/app.py index 6bbca34..e83bce0 100644 --- a/src/wuttafarm/app.py +++ b/src/wuttafarm/app.py @@ -167,7 +167,7 @@ class WuttaFarmAppHandler(base.AppHandler): """ model = self.model with self.short_session(session=session) as sess: - return sess.query(model.Measure).order_by(model.Measure.name).all() + return sess.query(model.Measure).order_by(model.Measure.ordinal).all() def get_units(self, session=None): """ diff --git a/src/wuttafarm/db/alembic/versions/82a497e30a97_add_measure_ordinal.py b/src/wuttafarm/db/alembic/versions/82a497e30a97_add_measure_ordinal.py new file mode 100644 index 0000000..2cd8057 --- /dev/null +++ b/src/wuttafarm/db/alembic/versions/82a497e30a97_add_measure_ordinal.py @@ -0,0 +1,37 @@ +"""add Measure.ordinal + +Revision ID: 82a497e30a97 +Revises: c5183b781d34 +Create Date: 2026-03-08 13:15:36.917747 + +""" + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import wuttjamaican.db.util + + +# revision identifiers, used by Alembic. +revision: str = "82a497e30a97" +down_revision: Union[str, None] = "c5183b781d34" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + + # measure + op.add_column("measure", sa.Column("ordinal", sa.Integer(), nullable=True)) + op.add_column( + "measure_version", + sa.Column("ordinal", sa.Integer(), autoincrement=False, nullable=True), + ) + + +def downgrade() -> None: + + # measure + op.drop_column("measure_version", "ordinal") + op.drop_column("measure", "ordinal") diff --git a/src/wuttafarm/db/model/unit.py b/src/wuttafarm/db/model/unit.py index e9c6e70..a376e2c 100644 --- a/src/wuttafarm/db/model/unit.py +++ b/src/wuttafarm/db/model/unit.py @@ -42,6 +42,14 @@ class Measure(model.Base): uuid = model.uuid_column() + ordinal = sa.Column( + sa.Integer(), + nullable=True, + doc=""" + Ordinal (sequence number) for the measure. + """, + ) + name = sa.Column( sa.String(length=100), nullable=False, diff --git a/src/wuttafarm/importing/farmos.py b/src/wuttafarm/importing/farmos.py index c0671a7..1e07e77 100644 --- a/src/wuttafarm/importing/farmos.py +++ b/src/wuttafarm/importing/farmos.py @@ -873,6 +873,7 @@ class MeasureImporter(FromFarmOS, ToWutta): supported_fields = [ "drupal_id", + "ordinal", "name", ] @@ -883,12 +884,15 @@ class MeasureImporter(FromFarmOS, ToWutta): ) response.raise_for_status() data = response.json() + self.ordinal = 0 return data["definitions"]["attributes"]["properties"]["measure"]["oneOf"] def normalize_source_object(self, measure): """ """ + self.ordinal += 1 return { "drupal_id": measure["const"], + "ordinal": self.ordinal, "name": measure["title"], } diff --git a/src/wuttafarm/web/views/units.py b/src/wuttafarm/web/views/units.py index fe8dafe..13cff36 100644 --- a/src/wuttafarm/web/views/units.py +++ b/src/wuttafarm/web/views/units.py @@ -37,17 +37,19 @@ class MeasureView(WuttaFarmMasterView): url_prefix = "/measures" grid_columns = [ + "ordinal", "name", "drupal_id", ] - sort_defaults = "name" + sort_defaults = "ordinal" filter_defaults = { "name": {"active": True, "verb": "contains"}, } form_fields = [ + "ordinal", "name", "drupal_id", ]