From 3ae4d639ecf2b4ba5cd64b23139c0a2931ab3152 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Sat, 28 Feb 2026 20:15:10 -0600 Subject: [PATCH] feat: add sync support for `Log.is_group_assignment` --- ...3c7e273bfa3_add_log_is_group_assignment.py | 39 +++++++++++++++++++ src/wuttafarm/db/model/log.py | 9 +++++ src/wuttafarm/farmos/importing/model.py | 4 ++ src/wuttafarm/farmos/importing/wuttafarm.py | 2 + src/wuttafarm/importing/farmos.py | 5 +++ src/wuttafarm/web/views/farmos/logs.py | 5 +++ src/wuttafarm/web/views/logs.py | 5 +++ 7 files changed, 69 insertions(+) create mode 100644 src/wuttafarm/db/alembic/versions/f3c7e273bfa3_add_log_is_group_assignment.py diff --git a/src/wuttafarm/db/alembic/versions/f3c7e273bfa3_add_log_is_group_assignment.py b/src/wuttafarm/db/alembic/versions/f3c7e273bfa3_add_log_is_group_assignment.py new file mode 100644 index 0000000..986f4db --- /dev/null +++ b/src/wuttafarm/db/alembic/versions/f3c7e273bfa3_add_log_is_group_assignment.py @@ -0,0 +1,39 @@ +"""add Log.is_group_assignment + +Revision ID: f3c7e273bfa3 +Revises: 47d0ebd84554 +Create Date: 2026-02-28 20:04:40.700474 + +""" + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa +import wuttjamaican.db.util + + +# revision identifiers, used by Alembic. +revision: str = "f3c7e273bfa3" +down_revision: Union[str, None] = "47d0ebd84554" +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_group_assignment", sa.Boolean(), nullable=True)) + op.add_column( + "log_version", + sa.Column( + "is_group_assignment", sa.Boolean(), autoincrement=False, nullable=True + ), + ) + + +def downgrade() -> None: + + # log + op.drop_column("log_version", "is_group_assignment") + op.drop_column("log", "is_group_assignment") diff --git a/src/wuttafarm/db/model/log.py b/src/wuttafarm/db/model/log.py index 6142229..7234839 100644 --- a/src/wuttafarm/db/model/log.py +++ b/src/wuttafarm/db/model/log.py @@ -120,6 +120,14 @@ class Log(model.Base): """, ) + is_group_assignment = sa.Column( + sa.Boolean(), + nullable=True, + doc=""" + Whether the log represents a group assignment. + """, + ) + status = sa.Column( sa.String(length=20), nullable=False, @@ -207,6 +215,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_group_assignment") Log.make_proxy(subclass, "log", "status") Log.make_proxy(subclass, "log", "notes") Log.make_proxy(subclass, "log", "assets") diff --git a/src/wuttafarm/farmos/importing/model.py b/src/wuttafarm/farmos/importing/model.py index a938423..7b900ff 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_group_assignment", "status", "notes", ] @@ -516,6 +517,7 @@ class ToFarmOSLog(ToFarmOS): "uuid": UUID(log["id"]), "name": log["attributes"]["name"], "timestamp": self.normalize_datetime(log["attributes"]["timestamp"]), + "is_group_assignment": log["attributes"]["is_group_assignment"], "status": log["attributes"]["status"], "notes": notes, } @@ -527,6 +529,8 @@ class ToFarmOSLog(ToFarmOS): attrs["name"] = source_data["name"] if "timestamp" in self.fields: attrs["timestamp"] = self.format_datetime(source_data["timestamp"]) + if "is_group_assignment" in self.fields: + attrs["is_group_assignment"] = source_data["is_group_assignment"] if "status" in self.fields: attrs["status"] = source_data["status"] if "notes" in self.fields: diff --git a/src/wuttafarm/farmos/importing/wuttafarm.py b/src/wuttafarm/farmos/importing/wuttafarm.py index d61437b..8679a78 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_group_assignment", "status", "notes", ] @@ -370,6 +371,7 @@ class FromWuttaFarmLog(FromWuttaFarm): "uuid": log.farmos_uuid or self.app.make_true_uuid(), "name": log.message, "timestamp": log.timestamp, + "is_group_assignment": log.is_group_assignment, "status": log.status, "notes": log.notes, "_src_object": log, diff --git a/src/wuttafarm/importing/farmos.py b/src/wuttafarm/importing/farmos.py index c931fb4..f65ac38 100644 --- a/src/wuttafarm/importing/farmos.py +++ b/src/wuttafarm/importing/farmos.py @@ -967,6 +967,7 @@ class LogImporterBase(FromFarmOS, ToWutta): "log_type", "message", "timestamp", + "is_group_assignment", "notes", "status", ] @@ -1093,6 +1094,7 @@ class ActivityLogImporter(LogImporterBase): "log_type", "message", "timestamp", + "is_group_assignment", "notes", "status", "assets", @@ -1112,6 +1114,7 @@ class HarvestLogImporter(LogImporterBase): "log_type", "message", "timestamp", + "is_group_assignment", "notes", "status", "assets", @@ -1131,6 +1134,7 @@ class MedicalLogImporter(LogImporterBase): "log_type", "message", "timestamp", + "is_group_assignment", "notes", "status", "assets", @@ -1150,6 +1154,7 @@ class ObservationLogImporter(LogImporterBase): "log_type", "message", "timestamp", + "is_group_assignment", "notes", "status", "assets", diff --git a/src/wuttafarm/web/views/farmos/logs.py b/src/wuttafarm/web/views/farmos/logs.py index 6e6dc36..fbd2a9d 100644 --- a/src/wuttafarm/web/views/farmos/logs.py +++ b/src/wuttafarm/web/views/farmos/logs.py @@ -23,6 +23,7 @@ View for farmOS Harvest Logs """ +import colander from webhelpers2.html import tags from wuttaweb.forms.schema import WuttaDateTime, WuttaDictEnum @@ -85,6 +86,7 @@ class LogMasterView(FarmOSMasterView): "timestamp", "assets", "quantities", + "is_group_assignment", "notes", "status", "log_type_name", @@ -213,6 +215,9 @@ class LogMasterView(FarmOSMasterView): # quantities f.set_node("quantities", FarmOSQuantityRefs(self.request)) + # is_group_assignment + f.set_node("is_group_assignment", colander.Boolean()) + # notes f.set_node("notes", Notes()) diff --git a/src/wuttafarm/web/views/logs.py b/src/wuttafarm/web/views/logs.py index b0b150c..626f34d 100644 --- a/src/wuttafarm/web/views/logs.py +++ b/src/wuttafarm/web/views/logs.py @@ -181,6 +181,11 @@ class LogMasterView(WuttaFarmMasterView): # assets g.set_renderer("assets", self.render_assets_for_grid) + # is_group_assignment + g.set_renderer("is_group_assignment", "boolean") + g.set_sorter("is_group_assignment", model.Log.is_group_assignment) + g.set_filter("is_group_assignment", model.Log.is_group_assignment) + # owners g.set_label("owners", "Owner") g.set_renderer("owners", self.render_owners_for_grid)