Skip to content

Commit

Permalink
PR Fixes:
Browse files Browse the repository at this point in the history
* Prefer use of `startswith` over `in`
* Fix reporting issue occurring when no registries have working group types
  • Loading branch information
ppettitau committed Oct 13, 2024
1 parent 2350dbb commit d51ef9b
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 35 deletions.
2 changes: 1 addition & 1 deletion rdrf/rdrf/helpers/form_section_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ def get_registry_fields(
wg_fields = [
field
for field, value in patient_form_fields.items()
if "working_groups_" in field
if field.startswith("working_groups_")
]
fields.extend(wg_fields)

Expand Down
12 changes: 11 additions & 1 deletion rdrf/rdrf/models/definition/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from django.contrib.postgres.fields import ArrayField
from django.core.exceptions import ValidationError
from django.db import models
from django.db.models import Q
from django.db.models import Exists, OuterRef, Q
from django.db.models.signals import post_delete, post_save, pre_delete
from django.dispatch.dispatcher import receiver
from django.forms.models import model_to_dict
Expand Down Expand Up @@ -445,6 +445,16 @@ def carer_registration_allowed(self):
def has_email_notification(self, event_type):
return self._registration_check([event_type])

@property
def working_group_types(self):
from registry.groups.models import WorkingGroup, WorkingGroupType

return WorkingGroupType.objects.filter(
Exists(
WorkingGroup.objects.filter(type=OuterRef("pk"), registry=self)
)
)


def get_owner_choices():
"""
Expand Down
4 changes: 2 additions & 2 deletions rdrf/registry/patients/admin_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,7 @@ def apply_field_config(target_field, target_field_config):
additional_working_group_fields = [
form_fields
for form_fields in self.fields
if "working_groups_" in form_fields
if form_fields.startswith("working_groups_")
]
for wg_field in additional_working_group_fields:
apply_field_config(wg_field, field_config)
Expand Down Expand Up @@ -750,7 +750,7 @@ def clean_working_groups(self):
working_groups = self.cleaned_data["working_groups"]

field_names = [
key for key in self.data.keys() if "working_groups_" in key
key for key in self.data.keys() if key.startswith("working_groups_")
]
field_values = [
value
Expand Down
22 changes: 14 additions & 8 deletions rdrf/report/forms.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import logging

from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
Expand Down Expand Up @@ -30,20 +31,25 @@
)
from report.utils import load_report_configuration

logger = logging.getLogger(__name__)


def get_demographic_field_value(model_name, field):
return json.dumps({"model": model_name, "field": field})


def get_demographic_field_choices(cfg_demographic_model):
demographic_fields = []
for model, model_attrs in cfg_demographic_model.items():
field_choices = [
(get_demographic_field_value(model, key), value)
for key, value in model_attrs["fields"].items()
]
demographic_fields.append((model_attrs["label"], field_choices))
return demographic_fields
return [
(
model_attrs["label"],
[
(get_demographic_field_value(model, key), value)
for key, value in model_attrs["fields"].items()
],
)
for model, model_attrs in cfg_demographic_model.items()
if model_attrs.get("show_in_designer", True)
]


def get_cde_field_value(context_form_group, cde_key):
Expand Down
3 changes: 3 additions & 0 deletions rdrf/report/report_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ def get_patient_fields():
"label": "Working Group Types",
"multi_field": True,
"pivot": True,
"show_in_designer": any(
r.working_group_types for r in all_registries
),
"variant_lookup": "workingGroupTypes { values }",
"subvariant_lookup": "maxCount",
"fields": {"name": "Name"},
Expand Down
31 changes: 8 additions & 23 deletions rdrf/report/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from django.conf import settings
from django.contrib.postgres.lookups import Unaccent
from django.contrib.postgres.search import SearchVector
from django.db.models import Count, Exists, Max, OuterRef, Q, Value
from django.db.models import Count, Max, Q, Value
from django.db.models.functions import Replace
from django.utils.translation import gettext as _
from graphene import InputObjectType, ObjectType
Expand Down Expand Up @@ -180,7 +180,7 @@ def resolve_values(parent, _info):
"values": graphene.List(graphene.String),
"resolve_values": resolve_values,
}
for wg_type in registry_working_group_types(registry):
for wg_type in registry.working_group_types.all():
field_name = get_schema_field_name(codify(wg_type.name))
wg_type_fields.update(
{
Expand All @@ -198,7 +198,7 @@ def resolve_values(parent, _info):
)

def resolve_working_group_types(parent: QueryResult, _info):
return parent, registry_working_group_types(registry)
return parent, registry.working_group_types.all()

def resolve_consent_question_codes(parent: QueryResult, _info):
return parent
Expand All @@ -223,19 +223,12 @@ def resolve_consent_question_codes(parent: QueryResult, _info):
)
),
"resolve_consent_question_codes": resolve_consent_question_codes,
"working_group_types": graphene.Field(
create_working_group_types_summary()
),
"resolve_working_group_types": resolve_working_group_types,
}

working_group_types = registry_working_group_types(registry)
if working_group_types:
fields.update(
{
"working_group_types": graphene.Field(
create_working_group_types_summary()
),
"resolve_working_group_types": resolve_working_group_types,
}
)

return type(f"DynamicDataSummary_{registry.code}", (ObjectType,), fields)


Expand Down Expand Up @@ -739,21 +732,13 @@ def patient_working_groups(patient):
return patient.working_groups.filter(type__isnull=True)


def registry_working_group_types(registry):
return WorkingGroupType.objects.filter(
Exists(
WorkingGroup.objects.filter(type=OuterRef("pk"), registry=registry)
)
)


def create_working_group_types_fields(registry):
def working_groups_resolver(parent, _info, working_group_type):
patient, working_groups = parent
return working_groups.filter(type=working_group_type)

fields = {}
for working_group_type in registry_working_group_types(registry):
for working_group_type in registry.working_group_types.all():
field_name = get_schema_field_name(codify(working_group_type.name))
fields[field_name] = graphene.List(WorkingGroupSchemaType)
fields[f"resolve_{field_name}"] = partial(
Expand Down

0 comments on commit d51ef9b

Please sign in to comment.