feat: add sync support for MedicalLog.vet
This commit is contained in:
parent
7d2ae48067
commit
d07f3ed716
8 changed files with 145 additions and 1 deletions
|
|
@ -0,0 +1,37 @@
|
||||||
|
"""add MedicalLog.vet
|
||||||
|
|
||||||
|
Revision ID: d459db991404
|
||||||
|
Revises: 9e875e5cbdc1
|
||||||
|
Create Date: 2026-02-28 22:17:57.001134
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Sequence, Union
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import wuttjamaican.db.util
|
||||||
|
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision: str = "d459db991404"
|
||||||
|
down_revision: Union[str, None] = "9e875e5cbdc1"
|
||||||
|
branch_labels: Union[str, Sequence[str], None] = None
|
||||||
|
depends_on: Union[str, Sequence[str], None] = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
|
||||||
|
# log_medical
|
||||||
|
op.add_column("log_medical", sa.Column("vet", sa.String(length=100), nullable=True))
|
||||||
|
op.add_column(
|
||||||
|
"log_medical_version",
|
||||||
|
sa.Column("vet", sa.String(length=100), autoincrement=False, nullable=True),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
|
||||||
|
# log_medical
|
||||||
|
op.drop_column("log_medical_version", "vet")
|
||||||
|
op.drop_column("log_medical", "vet")
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
Model definition for Medical Logs
|
Model definition for Medical Logs
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
from wuttjamaican.db import model
|
from wuttjamaican.db import model
|
||||||
|
|
||||||
from wuttafarm.db.model.log import LogMixin, add_log_proxies
|
from wuttafarm.db.model.log import LogMixin, add_log_proxies
|
||||||
|
|
@ -41,5 +43,13 @@ class MedicalLog(LogMixin, model.Base):
|
||||||
"farmos_log_type": "medical",
|
"farmos_log_type": "medical",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vet = sa.Column(
|
||||||
|
sa.String(length=100),
|
||||||
|
nullable=True,
|
||||||
|
doc="""
|
||||||
|
Name of the veterinarian, if applicable.
|
||||||
|
""",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
add_log_proxies(MedicalLog)
|
add_log_proxies(MedicalLog)
|
||||||
|
|
|
||||||
|
|
@ -558,6 +558,32 @@ class MedicalLogImporter(ToFarmOSLog):
|
||||||
model_title = "MedicalLog"
|
model_title = "MedicalLog"
|
||||||
farmos_log_type = "medical"
|
farmos_log_type = "medical"
|
||||||
|
|
||||||
|
def get_supported_fields(self):
|
||||||
|
fields = list(super().get_supported_fields())
|
||||||
|
fields.extend(
|
||||||
|
[
|
||||||
|
"vet",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return fields
|
||||||
|
|
||||||
|
def normalize_target_object(self, log):
|
||||||
|
data = super().normalize_target_object(log)
|
||||||
|
data.update(
|
||||||
|
{
|
||||||
|
"vet": log["attributes"]["vet"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def get_log_payload(self, source_data):
|
||||||
|
payload = super().get_log_payload(source_data)
|
||||||
|
|
||||||
|
if "vet" in self.fields:
|
||||||
|
payload["attributes"]["vet"] = source_data["vet"]
|
||||||
|
|
||||||
|
return payload
|
||||||
|
|
||||||
|
|
||||||
class ObservationLogImporter(ToFarmOSLog):
|
class ObservationLogImporter(ToFarmOSLog):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -401,6 +401,24 @@ class MedicalLogImporter(FromWuttaFarmLog, farmos_importing.model.MedicalLogImpo
|
||||||
|
|
||||||
source_model_class = model.MedicalLog
|
source_model_class = model.MedicalLog
|
||||||
|
|
||||||
|
def get_supported_fields(self):
|
||||||
|
fields = list(super().get_supported_fields())
|
||||||
|
fields.extend(
|
||||||
|
[
|
||||||
|
"vet",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return fields
|
||||||
|
|
||||||
|
def normalize_source_object(self, log):
|
||||||
|
data = super().normalize_source_object(log)
|
||||||
|
data.update(
|
||||||
|
{
|
||||||
|
"vet": log.vet,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
class ObservationLogImporter(
|
class ObservationLogImporter(
|
||||||
FromWuttaFarmLog, farmos_importing.model.ObservationLogImporter
|
FromWuttaFarmLog, farmos_importing.model.ObservationLogImporter
|
||||||
|
|
|
||||||
|
|
@ -1211,6 +1211,17 @@ class MedicalLogImporter(LogImporterBase):
|
||||||
|
|
||||||
model_class = model.MedicalLog
|
model_class = model.MedicalLog
|
||||||
|
|
||||||
|
def get_simple_fields(self):
|
||||||
|
""" """
|
||||||
|
fields = list(super().get_simple_fields())
|
||||||
|
# nb. must explicitly declare proxy fields
|
||||||
|
fields.extend(
|
||||||
|
[
|
||||||
|
"vet",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
return fields
|
||||||
|
|
||||||
|
|
||||||
class ObservationLogImporter(LogImporterBase):
|
class ObservationLogImporter(LogImporterBase):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -252,4 +252,6 @@ class Normalizer(GenericHandler):
|
||||||
"location_uuids": location_uuids,
|
"location_uuids": location_uuids,
|
||||||
"owners": owner_objects,
|
"owners": owner_objects,
|
||||||
"owner_uuids": owner_uuids,
|
"owner_uuids": owner_uuids,
|
||||||
|
# TODO: should we do this here or make caller do it?
|
||||||
|
"vet": log["attributes"].get("vet"),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ View for farmOS Medical Logs
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from wuttafarm.web.views.farmos.logs import LogMasterView
|
from wuttafarm.web.views.farmos.logs import LogMasterView
|
||||||
|
from wuttafarm.web.grids import SimpleSorter, StringFilter
|
||||||
|
|
||||||
|
|
||||||
class MedicalLogView(LogMasterView):
|
class MedicalLogView(LogMasterView):
|
||||||
|
|
@ -41,6 +42,35 @@ class MedicalLogView(LogMasterView):
|
||||||
farmos_log_type = "medical"
|
farmos_log_type = "medical"
|
||||||
farmos_refurl_path = "/logs/medical"
|
farmos_refurl_path = "/logs/medical"
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
"vet": "Veterinarian",
|
||||||
|
}
|
||||||
|
|
||||||
|
grid_columns = [
|
||||||
|
"status",
|
||||||
|
"drupal_id",
|
||||||
|
"timestamp",
|
||||||
|
"name",
|
||||||
|
"assets",
|
||||||
|
"vet",
|
||||||
|
"owners",
|
||||||
|
]
|
||||||
|
|
||||||
|
def configure_grid(self, grid):
|
||||||
|
g = grid
|
||||||
|
super().configure_grid(g)
|
||||||
|
|
||||||
|
# vet
|
||||||
|
g.set_sorter("vet", SimpleSorter("vet"))
|
||||||
|
g.set_filter("vet", StringFilter)
|
||||||
|
|
||||||
|
def configure_form(self, form):
|
||||||
|
f = form
|
||||||
|
super().configure_form(f)
|
||||||
|
|
||||||
|
# vet
|
||||||
|
f.fields.insert_after("timestamp", "vet")
|
||||||
|
|
||||||
|
|
||||||
def defaults(config, **kwargs):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
|
||||||
|
|
@ -39,16 +39,26 @@ class MedicalLogView(LogMasterView):
|
||||||
farmos_bundle = "medical"
|
farmos_bundle = "medical"
|
||||||
farmos_refurl_path = "/logs/medical"
|
farmos_refurl_path = "/logs/medical"
|
||||||
|
|
||||||
|
labels = {
|
||||||
|
"vet": "Veterinarian",
|
||||||
|
}
|
||||||
|
|
||||||
grid_columns = [
|
grid_columns = [
|
||||||
"status",
|
"status",
|
||||||
"drupal_id",
|
"drupal_id",
|
||||||
"timestamp",
|
"timestamp",
|
||||||
"message",
|
"message",
|
||||||
"assets",
|
"assets",
|
||||||
"veterinarian",
|
"vet",
|
||||||
"owners",
|
"owners",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def configure_form(self, f):
|
||||||
|
super().configure_form(f)
|
||||||
|
|
||||||
|
# vet
|
||||||
|
f.fields.insert_after("timestamp", "vet")
|
||||||
|
|
||||||
|
|
||||||
def defaults(config, **kwargs):
|
def defaults(config, **kwargs):
|
||||||
base = globals()
|
base = globals()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue