diff --git a/src/wuttafarm/db/alembic/versions/0771322957bd_add_log_is_movement.py b/src/wuttafarm/db/alembic/versions/0771322957bd_add_log_is_movement.py new file mode 100644 index 0000000..0aa9d54 --- /dev/null +++ b/src/wuttafarm/db/alembic/versions/0771322957bd_add_log_is_movement.py @@ -0,0 +1,37 @@ +"""add Log.is_movement + +Revision ID: 0771322957bd +Revises: 12de43facb95 +Create Date: 2026-03-02 20:21:03.889847 + +""" + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import wuttjamaican.db.util + + +# revision identifiers, used by Alembic. +revision: str = "0771322957bd" +down_revision: Union[str, None] = "12de43facb95" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + + # log + op.add_column("log", sa.Column("is_movement", sa.Boolean(), nullable=True)) + op.add_column( + "log_version", + sa.Column("is_movement", sa.Boolean(), autoincrement=False, nullable=True), + ) + + +def downgrade() -> None: + + # log + op.drop_column("log_version", "is_movement") + op.drop_column("log", "is_movement") diff --git a/src/wuttafarm/db/model/log.py b/src/wuttafarm/db/model/log.py index c3bfe14..020b39d 100644 --- a/src/wuttafarm/db/model/log.py +++ b/src/wuttafarm/db/model/log.py @@ -120,6 +120,14 @@ class Log(model.Base): """, ) + is_movement = sa.Column( + sa.Boolean(), + nullable=True, + doc=""" + Whether the log represents a movement to new location. + """, + ) + is_group_assignment = sa.Column( sa.Boolean(), nullable=True, @@ -263,6 +271,7 @@ def add_log_proxies(subclass): Log.make_proxy(subclass, "log", "log_type") Log.make_proxy(subclass, "log", "message") Log.make_proxy(subclass, "log", "timestamp") + Log.make_proxy(subclass, "log", "is_movement") Log.make_proxy(subclass, "log", "is_group_assignment") Log.make_proxy(subclass, "log", "status") Log.make_proxy(subclass, "log", "notes") diff --git a/src/wuttafarm/farmos/importing/model.py b/src/wuttafarm/farmos/importing/model.py index c785141..fab984d 100644 --- a/src/wuttafarm/farmos/importing/model.py +++ b/src/wuttafarm/farmos/importing/model.py @@ -459,6 +459,7 @@ class ToFarmOSLog(ToFarmOS): "uuid", "name", "timestamp", + "is_movement", "is_group_assignment", "status", "notes", @@ -518,6 +519,7 @@ class ToFarmOSLog(ToFarmOS): "uuid": UUID(log["id"]), "name": log["attributes"]["name"], "timestamp": self.normalize_datetime(log["attributes"]["timestamp"]), + "is_movement": log["attributes"]["is_movement"], "is_group_assignment": log["attributes"]["is_group_assignment"], "status": log["attributes"]["status"], "notes": notes, @@ -531,6 +533,8 @@ class ToFarmOSLog(ToFarmOS): attrs["name"] = source_data["name"] if "timestamp" in self.fields: attrs["timestamp"] = self.format_datetime(source_data["timestamp"]) + if "is_movement" in self.fields: + attrs["is_movement"] = source_data["is_movement"] if "is_group_assignment" in self.fields: attrs["is_group_assignment"] = source_data["is_group_assignment"] if "status" in self.fields: diff --git a/src/wuttafarm/farmos/importing/wuttafarm.py b/src/wuttafarm/farmos/importing/wuttafarm.py index d0ac065..8d76285 100644 --- a/src/wuttafarm/farmos/importing/wuttafarm.py +++ b/src/wuttafarm/farmos/importing/wuttafarm.py @@ -361,6 +361,7 @@ class FromWuttaFarmLog(FromWuttaFarm): "uuid", "name", "timestamp", + "is_movement", "is_group_assignment", "status", "notes", @@ -371,6 +372,7 @@ class FromWuttaFarmLog(FromWuttaFarm): "uuid": log.farmos_uuid or self.app.make_true_uuid(), "name": log.message, "timestamp": log.timestamp, + "is_movement": log.is_movement, "is_group_assignment": log.is_group_assignment, "status": log.status, "notes": log.notes, diff --git a/src/wuttafarm/importing/farmos.py b/src/wuttafarm/importing/farmos.py index 1cd3523..6b21090 100644 --- a/src/wuttafarm/importing/farmos.py +++ b/src/wuttafarm/importing/farmos.py @@ -959,6 +959,7 @@ class LogImporterBase(FromFarmOS, ToWutta): "log_type", "message", "timestamp", + "is_movement", "is_group_assignment", "notes", "status", diff --git a/src/wuttafarm/normal.py b/src/wuttafarm/normal.py index fa9b9da..4fc8796 100644 --- a/src/wuttafarm/normal.py +++ b/src/wuttafarm/normal.py @@ -279,6 +279,7 @@ class Normalizer(GenericHandler): "quantities": quantity_objects, "quantity_uuids": quantity_uuids, "is_group_assignment": log["attributes"]["is_group_assignment"], + "is_movement": log["attributes"]["is_movement"], "quick": log["attributes"]["quick"], "status": log["attributes"]["status"], "notes": notes, diff --git a/src/wuttafarm/web/views/farmos/logs.py b/src/wuttafarm/web/views/farmos/logs.py index d0ee388..cb7a87b 100644 --- a/src/wuttafarm/web/views/farmos/logs.py +++ b/src/wuttafarm/web/views/farmos/logs.py @@ -94,6 +94,7 @@ class LogMasterView(FarmOSMasterView): "status", "log_type_name", "owners", + "is_movement", "is_group_assignment", "quick", "drupal_id", @@ -234,6 +235,9 @@ class LogMasterView(FarmOSMasterView): # quantities f.set_node("quantities", FarmOSQuantityRefs(self.request)) + # is_movement + f.set_node("is_movement", colander.Boolean()) + # is_group_assignment f.set_node("is_group_assignment", colander.Boolean()) diff --git a/src/wuttafarm/web/views/logs.py b/src/wuttafarm/web/views/logs.py index eba1b96..6a502d2 100644 --- a/src/wuttafarm/web/views/logs.py +++ b/src/wuttafarm/web/views/logs.py @@ -133,6 +133,7 @@ class LogMasterView(WuttaFarmMasterView): "status", "log_type", "owners", + "is_movement", "is_group_assignment", "quick", "farmos_uuid", @@ -312,6 +313,9 @@ class LogMasterView(WuttaFarmMasterView): # status f.set_node("status", WuttaDictEnum(self.request, enum.LOG_STATUS)) + # is_movement + f.set_node("is_movement", colander.Boolean()) + # is_group_assignment f.set_node("is_group_assignment", colander.Boolean())