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
28 changes: 18 additions & 10 deletions manage_breast_screening/mammograms/forms/__init__.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
from .appointment_cannot_go_ahead_form import AppointmentCannotGoAheadForm
from .appointment_note_form import AppointmentNoteForm
from .ask_for_medical_information_form import AskForMedicalInformationForm
from .breast_augmentation_history_form import BreastAugmentationHistoryForm
from .cyst_history_form import CystHistoryForm
from .implanted_medical_device_history_form import ImplantedMedicalDeviceHistoryForm
from .mastectomy_or_lumpectomy_history_form import MastectomyOrLumpectomyHistoryForm
from .other_procedure_history_form import OtherProcedureHistoryForm
from .medical_history.breast_augmentation_history_item_form import (
BreastAugmentationHistoryItemForm,
)
from .medical_history.cyst_history_item_form import CystHistoryItemForm
from .medical_history.implanted_medical_device_history_item_form import (
ImplantedMedicalDeviceHistoryItemForm,
)
from .medical_history.mastectomy_or_lumpectomy_history_item_form import (
MastectomyOrLumpectomyHistoryItemForm,
)
from .medical_history.other_procedure_history_item_form import (
OtherProcedureHistoryItemForm,
)
from .record_medical_information_form import RecordMedicalInformationForm
from .screening_appointment_form import ScreeningAppointmentForm
from .special_appointment_forms import (
Expand All @@ -17,13 +25,13 @@
"AppointmentCannotGoAheadForm",
"AskForMedicalInformationForm",
"AppointmentNoteForm",
"BreastAugmentationHistoryForm",
"CystHistoryForm",
"BreastAugmentationHistoryItemForm",
"CystHistoryItemForm",
"RecordMedicalInformationForm",
"ScreeningAppointmentForm",
"ProvideSpecialAppointmentDetailsForm",
"MarkReasonsTemporaryForm",
"MastectomyOrLumpectomyHistoryForm",
"ImplantedMedicalDeviceHistoryForm",
"OtherProcedureHistoryForm",
"MastectomyOrLumpectomyHistoryItemForm",
"ImplantedMedicalDeviceHistoryItemForm",
"OtherProcedureHistoryItemForm",
]
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
)
from manage_breast_screening.nhsuk_forms.fields.integer_field import YearField
from manage_breast_screening.nhsuk_forms.forms import FormWithConditionalFields
from manage_breast_screening.participants.models.benign_lump_history_item import (
from manage_breast_screening.participants.models.medical_history.benign_lump_history_item import (
BenignLumpHistoryItem,
)

Expand Down Expand Up @@ -104,8 +104,8 @@ class BenignLumpHistoryItemForm(FormWithConditionalFields):
hint="Include any other relevant information about the procedure (optional)",
)

def __init__(self, *args, **kwargs):
self.instance = kwargs.pop("instance", None)
def __init__(self, *args, instance=None, **kwargs):
self.instance = instance

if self.instance:
kwargs["initial"] = self.initial_values(self.instance)
Expand Down Expand Up @@ -152,6 +152,9 @@ def create(self, appointment, request):
return benign_lump_history_item

def update(self, request):
if self.instance is None:
raise ValueError("Form has no instance")

auditor = Auditor.from_request(request)

self.instance.left_breast_procedures = self.cleaned_data.get(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
YearField,
)
from manage_breast_screening.nhsuk_forms.fields.choice_fields import MultipleChoiceField
from manage_breast_screening.participants.models.breast_augmentation_history_item import (
from manage_breast_screening.participants.models.medical_history.breast_augmentation_history_item import (
BreastAugmentationHistoryItem,
)


class BreastAugmentationHistoryBaseForm(Form):
class BreastAugmentationHistoryItemForm(Form):
right_breast_procedures = MultipleChoiceField(
label="Right breast",
label_classes="nhsuk-fieldset__legend--s",
Expand Down Expand Up @@ -64,6 +64,21 @@ class BreastAugmentationHistoryBaseForm(Form):
error_messages={"max_words": "Additional details must be 500 words or less"},
)

def __init__(self, *args, instance=None, **kwargs):
self.instance = instance

if instance:
kwargs["initial"] = {
"right_breast_procedures": instance.right_breast_procedures,
"left_breast_procedures": instance.left_breast_procedures,
"procedure_year": instance.procedure_year,
"implants_have_been_removed": instance.implants_have_been_removed,
"removal_year": instance.removal_year,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

def model_values(self):
return dict(
left_breast_procedures=self.cleaned_data.get("left_breast_procedures", []),
Expand Down Expand Up @@ -107,8 +122,6 @@ def clean(self):

return cleaned_data


class BreastAugmentationHistoryForm(BreastAugmentationHistoryBaseForm):
def create(self, appointment, request):
auditor = Auditor.from_request(request)
field_values = self.model_values()
Expand All @@ -122,23 +135,10 @@ def create(self, appointment, request):

return breast_augmentation_history


class BreastAugmentationHistoryUpdateForm(BreastAugmentationHistoryBaseForm):
def __init__(self, instance, *args, **kwargs):
self.instance = instance

kwargs["initial"] = {
"right_breast_procedures": instance.right_breast_procedures,
"left_breast_procedures": instance.left_breast_procedures,
"procedure_year": instance.procedure_year,
"implants_have_been_removed": instance.implants_have_been_removed,
"removal_year": instance.removal_year,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

def update(self, request):
if self.instance is None:
raise ValueError("Form has no instance")

# fmt: off
self.instance.right_breast_procedures = self.cleaned_data["right_breast_procedures"]
self.instance.left_breast_procedures = self.cleaned_data["left_breast_procedures"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@
ChoiceField,
MultipleChoiceField,
)
from manage_breast_screening.nhsuk_forms.fields.integer_field import (
YearField,
)
from manage_breast_screening.nhsuk_forms.fields.integer_field import YearField
from manage_breast_screening.nhsuk_forms.forms import FormWithConditionalFields
from manage_breast_screening.participants.models.breast_cancer_history_item import (
from manage_breast_screening.participants.models.medical_history.breast_cancer_history_item import (
BreastCancerHistoryItem,
)


class BreastCancerHistoryBaseForm(FormWithConditionalFields):
class BreastCancerHistoryItemForm(FormWithConditionalFields):
class DiagnosisLocationChoices(TextChoices):
RIGHT_BREAST = "RIGHT_BREAST", "Right breast"
LEFT_BREAST = "LEFT_BREAST", "Left breast"
Expand All @@ -26,8 +24,8 @@ class DiagnosisLocationChoices(TextChoices):
def form_value_to_model_field(form_value):
match form_value:
case [
BreastCancerHistoryBaseForm.DiagnosisLocationChoices.RIGHT_BREAST,
BreastCancerHistoryBaseForm.DiagnosisLocationChoices.LEFT_BREAST,
BreastCancerHistoryItemForm.DiagnosisLocationChoices.RIGHT_BREAST,
BreastCancerHistoryItemForm.DiagnosisLocationChoices.LEFT_BREAST,
]:
return BreastCancerHistoryItem.DiagnosisLocationChoices.BOTH_BREASTS
case [other]:
Expand Down Expand Up @@ -145,7 +143,29 @@ def model_field_to_form_value(cls, model_field):
error_messages={"required": "Select where surgery and treatment took place"},
)

def __init__(self, **kwargs):
def __init__(self, instance=None, **kwargs):
self.instance = instance
self.appointment = instance.appointment if instance else None

if instance:
kwargs["initial"] = {
"diagnosis_location": self.DiagnosisLocationChoices.model_field_to_form_value(
instance.diagnosis_location
),
"diagnosis_year": instance.diagnosis_year,
"right_breast_procedure": instance.right_breast_procedure,
"left_breast_procedure": instance.left_breast_procedure,
"right_breast_other_surgery": instance.right_breast_other_surgery,
"left_breast_other_surgery": instance.left_breast_other_surgery,
"right_breast_treatment": instance.right_breast_treatment,
"left_breast_treatment": instance.left_breast_treatment,
"systemic_treatments": instance.systemic_treatments,
"systemic_treatments_other_treatment_details": instance.systemic_treatments_other_treatment_details,
"intervention_location": instance.intervention_location,
f"intervention_location_details_{instance.intervention_location.lower()}": instance.intervention_location_details,
"additional_details": instance.additional_details,
}

super().__init__(**kwargs)

self.given_field_value(
Expand Down Expand Up @@ -205,8 +225,6 @@ def model_values(self):
additional_details=self.cleaned_data.get("additional_details"),
)


class BreastCancerHistoryForm(BreastCancerHistoryBaseForm):
def create(self, appointment, request):
auditor = Auditor.from_request(request)
field_values = self.model_values()
Expand All @@ -219,33 +237,10 @@ def create(self, appointment, request):

return instance


class BreastCancerHistoryUpdateForm(BreastCancerHistoryBaseForm):
def __init__(self, instance, **kwargs):
self.instance = instance
self.appointment = instance.appointment

kwargs["initial"] = {
"diagnosis_location": self.DiagnosisLocationChoices.model_field_to_form_value(
instance.diagnosis_location
),
"diagnosis_year": instance.diagnosis_year,
"right_breast_procedure": instance.right_breast_procedure,
"left_breast_procedure": instance.left_breast_procedure,
"right_breast_other_surgery": instance.right_breast_other_surgery,
"left_breast_other_surgery": instance.left_breast_other_surgery,
"right_breast_treatment": instance.right_breast_treatment,
"left_breast_treatment": instance.left_breast_treatment,
"systemic_treatments": instance.systemic_treatments,
"systemic_treatments_other_treatment_details": instance.systemic_treatments_other_treatment_details,
"intervention_location": instance.intervention_location,
f"intervention_location_details_{instance.intervention_location.lower()}": instance.intervention_location_details,
"additional_details": instance.additional_details,
}

super().__init__(**kwargs)

def update(self, request):
if self.instance is None:
raise ValueError("Form has no instance")

auditor = Auditor.from_request(request)
field_values = self.model_values()

Expand All @@ -254,6 +249,6 @@ def update(self, request):

self.instance.save()

auditor.audit_create(self.instance)
auditor.audit_update(self.instance)

return self.instance
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,21 @@

from manage_breast_screening.core.services.auditor import Auditor
from manage_breast_screening.nhsuk_forms.fields import CharField, ChoiceField
from manage_breast_screening.participants.models.cyst_history_item import (
from manage_breast_screening.participants.models.medical_history.cyst_history_item import (
CystHistoryItem,
)


class CystHistoryBaseForm(Form):
def __init__(self, *args, participant, **kwargs):
class CystHistoryItemForm(Form):
def __init__(self, *args, participant, instance=None, **kwargs):
self.instance = instance

if instance:
kwargs["initial"] = {
"treatment": instance.treatment,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

self.fields["treatment"] = ChoiceField(
Expand All @@ -35,8 +43,6 @@ def model_values(self):
additional_details=self.cleaned_data.get("additional_details", ""),
)


class CystHistoryForm(CystHistoryBaseForm):
def create(self, appointment, request):
auditor = Auditor.from_request(request)
field_values = self.model_values()
Expand All @@ -50,20 +56,10 @@ def create(self, appointment, request):

return cyst_history


class CystHistoryUpdateForm(CystHistoryBaseForm):
def __init__(self, instance, *args, **kwargs):
self.instance = instance

kwargs["participant"] = instance.participant
kwargs["initial"] = {
"treatment": instance.treatment,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

def update(self, request):
if self.instance is None:
raise ValueError("Form has no instance")

self.instance.treatment = self.cleaned_data["treatment"]
self.instance.additional_details = self.cleaned_data["additional_details"]
self.instance.save()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,25 @@
YearField,
)
from manage_breast_screening.nhsuk_forms.forms import FormWithConditionalFields
from manage_breast_screening.participants.models.implanted_medical_device_history_item import (
from manage_breast_screening.participants.models.medical_history.implanted_medical_device_history_item import (
ImplantedMedicalDeviceHistoryItem,
)


class ImplantedMedicalDeviceHistoryBaseForm(FormWithConditionalFields):
def __init__(self, *args, participant, **kwargs):
class ImplantedMedicalDeviceHistoryItemForm(FormWithConditionalFields):
def __init__(self, *args, participant, instance=None, **kwargs):
self.instance = instance

if instance:
kwargs["initial"] = {
"device": instance.device,
"other_medical_device_details": instance.other_medical_device_details,
"device_has_been_removed": instance.device_has_been_removed,
"removal_year": instance.removal_year,
"procedure_year": instance.procedure_year,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

self.fields["device"] = ChoiceField(
Expand Down Expand Up @@ -100,8 +112,6 @@ def clean(self):
),
)


class ImplantedMedicalDeviceHistoryForm(ImplantedMedicalDeviceHistoryBaseForm):
def create(self, appointment, request):
auditor = Auditor.from_request(request)
field_values = self.model_values()
Expand All @@ -117,24 +127,10 @@ def create(self, appointment, request):

return implanted_medical_device_history


class ImplantedMedicalDeviceHistoryUpdateForm(ImplantedMedicalDeviceHistoryBaseForm):
def __init__(self, instance, *args, **kwargs):
self.instance = instance

kwargs["participant"] = instance.participant
kwargs["initial"] = {
"device": instance.device,
"other_medical_device_details": instance.other_medical_device_details,
"device_has_been_removed": instance.device_has_been_removed,
"removal_year": instance.removal_year,
"procedure_year": instance.procedure_year,
"additional_details": instance.additional_details,
}

super().__init__(*args, **kwargs)

def update(self, request):
if self.instance is None:
raise ValueError("Form has no instance")

self.instance.device = self.cleaned_data["device"]
self.instance.other_medical_device_details = self.cleaned_data[
"other_medical_device_details"
Expand Down
Loading