Skip to content

Commit 7e24f71

Browse files
Initial commit - quick fix
1 parent c52ae27 commit 7e24f71

File tree

5 files changed

+80
-2
lines changed

5 files changed

+80
-2
lines changed

classes/subject/gender_type.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,18 @@ def by_redefined_value(cls, redefined_value: int) -> Optional["GenderType"]:
8888
return next(
8989
(item for item in cls if item.redefined_value == redefined_value), None
9090
)
91+
92+
@classmethod
93+
def by_allowed_value(cls, allowed_value: str) -> Optional["GenderType"]:
94+
"""
95+
Returns the GenderType enum member matching the given allowed value.
96+
97+
Args:
98+
allowed_value (str): The allowed value to search for.
99+
100+
Returns:
101+
Optional[GenderType]: The matching enum member, or None if not found.
102+
"""
103+
return next(
104+
(item for item in cls if item.allowed_value == allowed_value), None
105+
)

classes/subject/subject.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,6 +1302,16 @@ def from_dataframe_row(row: pd.Series) -> "Subject":
13021302
),
13031303
"date_of_birth": DateTimeUtils.parse_date(row.get("date_of_birth")),
13041304
"date_of_death": DateTimeUtils.parse_date(row.get("date_of_death")),
1305+
"title": row.get("person_title"),
1306+
"other_names": row.get("person_other_given_names"),
1307+
"address_line1": row.get("address_line_1"),
1308+
"address_line2": row.get("address_line_2"),
1309+
"address_line3": row.get("address_line_3"),
1310+
"address_line4": row.get("address_line_4"),
1311+
"address_line5": row.get("address_line_5"),
1312+
"postcode": row.get("postcode"),
1313+
"gp_practice_code": row.get("gp_practice_code"),
1314+
"gender": GenderType.by_allowed_value(str(row.get("person_gender"))),
13051315
}
13061316

13071317
return Subject(**field_map)
@@ -1318,13 +1328,17 @@ def populate_subject_object_from_nhs_no(self, nhs_no: str) -> "Subject":
13181328
SubjectSelectionQueryBuilder,
13191329
)
13201330

1321-
nhs_no_criteria = {"nhs number": nhs_no}
1331+
criteria = {
1332+
"nhs number": nhs_no,
1333+
"add column to select statement": " c.person_title, c.person_other_given_names, CASE c.person_gender WHEN 130 THEN 'M' WHEN 131 THEN 'F' WHEN 132 THEN 'I' WHEN 160 THEN 'U' END, adds.address_line_1, adds.address_line_2, adds.address_line_3, adds.address_line_4, adds.address_line_5, adds.postcode, (SELECT hub.org_code FROM org hub WHERE org_id = c.gp_practice_id) AS gp_practice_code ",
1334+
"add join to from statement": " INNER JOIN sd_address_t adds ON adds.contact_id = c.contact_id ",
1335+
}
13221336
subject = Subject()
13231337
user = User()
13241338
builder = SubjectSelectionQueryBuilder()
13251339

13261340
query, bind_vars = builder.build_subject_selection_query(
1327-
criteria=nhs_no_criteria,
1341+
criteria=criteria,
13281342
user=user,
13291343
subject=subject,
13301344
subjects_to_retrieve=1,

classes/subject_selection_query_builder/subject_selection_criteria_key.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class SubjectSelectionCriteriaKey(Enum):
2424
"""
2525

2626
ADD_COLUMN_TO_SELECT_STATEMENT = ("add column to select statement", False, False)
27+
ADD_JOIN_TO_FROM_STATEMENT = ("add join to from statement", False, False)
2728
APPOINTMENT_DATE = ("appointment date", False, True)
2829
APPOINTMENT_STATUS = ("appointment status", True, True)
2930
APPOINTMENT_TYPE = ("appointment type", False, True)

tests/regression/regression_tests/fobt_regression_tests/test_scenario_6.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,3 +538,43 @@ def test_scenario_6(page: Page) -> None:
538538

539539
logging.info("[TEST COMPLETE] Scenario 6 passed all assertions")
540540
LogoutPage(page).log_out()
541+
542+
543+
544+
from classes.user.user import User
545+
from classes.subject.subject import Subject
546+
from utils.oracle.subject_selection_query_builder import SubjectSelectionQueryBuilder
547+
@pytest.mark.wip
548+
def test_test(page: Page) -> None:
549+
# Given I log in to BCSS "England" as user role "Hub Manager"
550+
user_role = UserTools.user_login(
551+
page, "Hub Manager State Registered at BCS01", return_role_type=True
552+
)
553+
if user_role is None:
554+
raise ValueError("This user cannot be assigned to a UserRoleType")
555+
556+
# And there is a subject who meets the following criteria:
557+
criteria = {
558+
"latest event status": "S9 Pre-Invitation Sent",
559+
"latest episode kit class": "FIT",
560+
"latest episode started": "Within the last 6 months",
561+
"latest episode type": "FOBT",
562+
"subject age": "Between 60 and 72",
563+
"subject has unprocessed sspi updates": "No",
564+
"subject has user dob updates": "No",
565+
}
566+
567+
query, bind_vars = SubjectSelectionQueryBuilder().build_subject_selection_query(
568+
criteria=criteria,
569+
user=User(),
570+
subject=Subject(),
571+
subjects_to_retrieve=1,
572+
)
573+
574+
nhs_no_df = OracleDB().execute_query(query=query, parameters=bind_vars)
575+
nhs_no = nhs_no_df["subject_nhs_number"].iloc[0]
576+
577+
# Then Comment: NHS number
578+
logging.info(f"[SUBJECT RETRIEVAL] Retrieved subject's NHS number: {nhs_no}")
579+
580+
SSPIChangeSteps().sspi_update_to_change_dob_received(nhs_no, 75)

utils/oracle/subject_selection_query_builder.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,8 @@ def _dispatch_criteria_key(self, user: "User", subject: "Subject") -> None:
716716
# ------------------------------------------------------------------------
717717
case SubjectSelectionCriteriaKey.ADD_COLUMN_TO_SELECT_STATEMENT:
718718
self._add_extra_column_to_select_statement()
719+
case SubjectSelectionCriteriaKey.ADD_JOIN_TO_FROM_STATEMENT:
720+
self._add_extra_join_to_from_statement()
719721
# ------------------------------------------------------------------------
720722
# 🛑 Fallback: Unmatched Criteria Key
721723
# ------------------------------------------------------------------------
@@ -792,6 +794,12 @@ def _add_extra_column_to_select_statement(self) -> None:
792794
"""
793795
self.sql_select.append(f", {self.criteria_value}")
794796

797+
def _add_extra_join_to_from_statement(self) -> None:
798+
"""
799+
Adds extra joins to the FROM statement.
800+
"""
801+
self.sql_from.append(f" {self.criteria_value} ")
802+
795803
def _add_criteria_nhs_number(self) -> None:
796804
"""
797805
Adds a check for the subject's NHS number

0 commit comments

Comments
 (0)