Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ const AquaticObservation = ({ subtypeData }: SubtypeData) => {
))}
</Fieldset>
</Fieldset>

<Fieldset label={'Observation Information'}>
<TextInput label={'suitable for biocontrol'} value={subtypeData?.suitable_for_biocontrol} />
</Fieldset>
<Fieldset label={'observation details'}>
{subtypeData?.entries.map((od) => (
<div className="group-wrap">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,22 @@
"batch_row_id": 78
}
},
{
"model": "api.AquaticPlantObservationContext",
"pk": 1,
"fields": {
"activity_id": "6BBA2749-EE3D-41B6-A9F1-4A0CB37029F7",
"suitable_for_biocontrol": "No"
}
},
{
"model": "api.AquaticPlantObservationContext",
"pk": 2,
"fields": {
"activity_id": "CD542709-F767-402F-818E-117B3FBC797D",
"suitable_for_biocontrol": "Yes"
}
},
{
"model": "api.PretreatmentObservation",
"pk": 1,
Expand Down
33 changes: 31 additions & 2 deletions api-rework/invasives/api/migrations/0002_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 6.0 on 2026-02-03 19:30
# Generated by Django 6.0 on 2026-02-05 19:42

import api.models.enums.water_level_management
import django.core.validators
Expand Down Expand Up @@ -953,6 +953,35 @@ class Migration(migrations.Migration):
"db_table": '"activity"."mechanical_authorization_pa"',
},
),
migrations.CreateModel(
name="AquaticPlantObservationContext",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"suitable_for_biocontrol",
models.CharField(
choices=[("Y", "Yes"), ("N", "No"), ("U", "Unknown")]
),
),
(
"activity",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE, to="api.activity"
),
),
],
options={
"db_table": '"activity"."observation_context_pa"',
},
),
migrations.CreateModel(
name="AquaticVoucherSpecimen",
fields=[
Expand Down Expand Up @@ -1253,7 +1282,7 @@ class Migration(migrations.Migration):
),
],
options={
"db_table": '"activity"."observation_context_pa"',
"db_table": '"activity"."observation_entries_pa"',
},
),
migrations.CreateModel(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .aquatic_plant_observation_entry import *
from .aquatic_plant_observation_context import AquaticPlantObservationContext
from .pre_treatment_observation import *
from .shoreline_types import *
from .terrestrial_plant_observation_detail import *
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from django.db import models
from api.models.activity.abstract_sub_tables import BaseOneToOneActivityTable
from api.models.enums import YesNoUnknown


class AquaticPlantObservationContext(BaseOneToOneActivityTable):
suitable_for_biocontrol = models.CharField(
choices=YesNoUnknown,
)

class Meta:
db_table = '"activity"."observation_context_pa"'
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class AquaticPlantObservationEntry(BaseOneToManyActivityTable):
sample_point_id = models.CharField(max_length=128, blank=True, null=True)

class Meta:
db_table = '"activity"."observation_context_pa"'
db_table = '"activity"."observation_entries_pa"'
constraints = [
models.UniqueConstraint(
fields=["activity", "invasive_plant"],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from rest_framework import serializers
from api.serializers.common import ShorelineTypesSerializer
from api.models.activity import (
AquaticPlantObservationContext,
AquaticPlantObservationEntry,
AquaticVoucherSpecimen,
WaterbodySubstrateType,
Expand Down Expand Up @@ -133,6 +134,12 @@ class Meta:
)


class AquaticPlantObservationContextSerializer(serializers.ModelSerializer):
class Meta:
model = AquaticPlantObservationContext
fields = ["suitable_for_biocontrol"]


class AquaticPlantObservationEntrySerializer(serializers.ModelSerializer):
voucher_specimen = serializers.SerializerMethodField()

Expand Down Expand Up @@ -178,10 +185,11 @@ class AquaticObservationSerializer(serializers.Serializer):
substrate_type = WaterbodySubstrateTypeSerializer(
source="waterbodysubstratetype_set", many=True
)
# @todo add to subtype obs model
# suitable_for_biocontrol = serializers.CharField(
# source="suitableforbiocontrol.suitable_for_biocontrol"
# )

aquatic_observation_context = AquaticPlantObservationContextSerializer(
source="aquaticplantobservationcontext"
)

waterbody_context = WaterbodyDataSerializer(source="waterbodycontext")
water_use = WaterbodyUseSerializer(source="waterbodyuse_set", many=True)
waterlevel_management = WaterbodyLevelManagementSerializer(
Expand All @@ -204,10 +212,10 @@ class AquaticObservationSerializer(serializers.Serializer):
)

def to_representation(self, instance):
"""Flatten Waterbody Details into top_level"""
"""Flatten Waterbody Details into top level"""
ret = super().to_representation(instance)
info_data = ret.pop("waterbody_context", None)

if info_data and isinstance(info_data, dict):
ret.update(info_data)
for key in ["waterbody_context", "aquatic_observation_context"]:
info_data = ret.pop(key, None)
if info_data and isinstance(info_data, dict):
ret.update(info_data)
return ret
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,9 @@ def test_subtype_details_full(self):

sd = response_object["subtype_data"]

# @todo add subtype observation info class
# self.assertEqual(sd["suitable_for_biocontrol"], "No")
self.assertEqual(sd["pretreatment_observation"], "Yes")
self.assertEqual(sd["suitable_for_biocontrol"], "No")

self.assertEqual(sd["pretreatment_observation"], "Yes")
self.assertGreaterEqual(len(sd["entries"]), 1)
self.assertIn("WET", sd["inflow_permanent"])
self.assertIn("DISP", sd["inflow_seasonal"])
Expand Down Expand Up @@ -69,8 +68,7 @@ def test_subtype_details_partial(self):

sd = response_object["subtype_data"]

# @todo add subtype observation info class
# self.assertEqual(sd["suitable_for_biocontrol"], "Yes")
self.assertEqual(sd["suitable_for_biocontrol"], "Yes")
self.assertEqual(sd["pretreatment_observation"], "No")
self.assertEqual(len(sd["entries"]), 2)

Expand Down
Loading