Skip to content
Draft
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
18 changes: 15 additions & 3 deletions .talismanrc
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ fileignoreconfig:
- filename: erp/export/static/schema.json
checksum: 888e09b1fe8ead28a4561b05842cd852be1ca8a3b86264aa48469514f93cfdd2
- filename: templates/contrib/6-accueil.html
checksum: 6a2b50478a202eb35bf49d50ff156110eeed68287d545626753b7343bd3e3074
checksum: 8aaacce11ed6b610a2bd7556d5f42b5035747d994eb103ccdfe0fdec0ae1c708
- filename: templates/contrib/2-a-propos.html
checksum: 674d89a3766a1df233648b7de14a5116de651bfea5b4db7f4f9f05f95629a32a
- filename: templates/contrib/0-start.html
Expand All @@ -28,7 +28,7 @@ fileignoreconfig:
- filename: templates/contrib/4-exterieur.html
checksum: 4e6911a34b51f640e0fb6a2dad359628daf63459f2b3d868ce0d80ce094f8538
- filename: templates/contrib/3-transport.html
checksum: 31cb1838db8607f44c92e00e0841c18f7454943ea3a600d79f943fae2f967874
checksum: 68334d56087d71ffb7443ca8917ed32c553786a8b1c9852bec1adec03aa138fe
- filename: .circleci/config.yml
checksum: 9c50da347ce5a9602eb25d2c192597343c50e062f465c0e8ae6e4aed1034407e
- filename: erp/imports/mapper/service_public.py
Expand All @@ -52,7 +52,13 @@ fileignoreconfig:
- filename: erp/management/commands/flush_widget_stats.py
checksum: 07f7fb0fbd7c587d43aad69f87e892107a6e80c8d5a5145d608905485a4f2011
- filename: tests/stats/tests.py
checksum: 3d899b94bc836e0f97b282d569ca27b513be6df54cf718e96a944a99b634444d
checksum: 14316ca4cb3801fde82de4647e7c3df271a7c5b962e3526fa06e5d190caceb27
- filename: tests/api/tests.py
checksum: 19cc87e6a7c33d056a2c85831e86af11ba1fff4935b9fc4b786faee0c88552c9
- filename: tests/erp/test_tasks.py
checksum: 5af076ad122ca09cd7a76c75a11c3094c70d15fa928a827a3180c8c43177a9f5
- filename: tests/erp/imports/test_serializers.py
checksum: ec01ecc27f54e45f02eae36db0369b353e069426f19eeac2025d776760f94fec
- filename: .env.sample
checksum: aa3f02c8f5d30f989986f9eafaca8bc57d99d09361b9fa9c2158638bcc263f15
- filename: erp/management/commands/import_apidae.py
Expand Down Expand Up @@ -93,3 +99,9 @@ fileignoreconfig:
checksum: 40161683c6d36b3a1d5bb3c0b05594fa48ada9dd88ecc379294fa10f64743eb2
- filename: core/settings.py
checksum: 541b4298f5183e65805309ef55140f6b1da02f62a1fbf196fba3cc8d7c5dab58
- filename: erp/models.py
checksum: 7399cf142d418045c6167e0ed5b83c3f61a9102015d994929e0584f288508e67
- filename: erp/schema.py
checksum: 319eee5047b7058a601da24eb201f2ed8fd4ece23e9dc47a92f05f2e956e7ae2
- filename: erp/migrations/0191_remove_accessibilite_erp_accessibilite_sanitaires_presence_consistency_and_more.py
checksum: 9549fe2888e7d35c031c145eca2235510545a0b69774201c1365f466ca42f649
110 changes: 110 additions & 0 deletions erp/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,115 @@ def clean_accueil_soignant_experience(self):
return self.cleaned_data["accueil_soignant_experience"]


class ContribAccessibiliteSportsEquipmentForm(ContribAccessibiliteForm):
accueil_casiers_fermeture = forms.MultipleChoiceField(
required=False,
choices=schema.ACCUEIL_SYSTEME_FERMETURE_CHOICES,
widget=forms.CheckboxSelectMultiple,
label=schema.get_label("accueil_casiers_fermeture"),
help_text=schema.get_help_text("accueil_casiers_fermeture"),
)

accueil_prestations_complementaires = forms.MultipleChoiceField(
required=False,
choices=schema.ACCUEIL_PRESTATIONS_COMPLEMENTAIRES_CHOICES,
widget=forms.CheckboxSelectMultiple,
label=schema.get_label("accueil_prestations_complementaires"),
help_text=schema.get_help_text("accueil_prestations_complementaires"),
)

accueil_presence_espaces_specifiques = forms.MultipleChoiceField(
required=False,
choices=schema.ACCUEIL_PRESENCE_ESPACES_SPECIFIQUES_CHOICES,
widget=forms.CheckboxSelectMultiple,
label=schema.get_label("accueil_presence_espaces_specifiques"),
help_text=schema.get_help_text("accueil_presence_espaces_specifiques"),
)

fields_to_remove = (
"accueil_personnels", # Root
"accueil_audiodescription_presence", # Root
"accueil_audiodescription", # Child
"accueil_ascenseur_etage", # Root
"accueil_ascenseur_etage_pmr", # Child
"labels", # Root
"labels_familles_handicap", # Root
"labels_autre", # Root
)

large_establishments_fields_to_keep = ["accueil_signaletique_interieure", "cheminement_ext_signaletique_exterieure"]
conditionals_to_add = get_conditional_fields_in(["sports_equipment"]) + large_establishments_fields_to_keep
conditionals_to_remove = get_conditional_fields_not_in(["sports_equipment"])

class Meta:
model = Accessibilite
exclude = ("pk",)
widgets = get_widgets_for_accessibilite()
labels = schema.get_labels(include_conditional=["sports_equipment", "large_establishments"])
help_texts = schema.get_help_texts(include_conditional=["sports_equipment", "large_establishments"])
required = schema.get_required_fields()

def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

allowed_fields = set(schema.get_help_texts(include_conditional=["sports_equipment"]).keys()) | set(
self.large_establishments_fields_to_keep
)
for field in copy(self.fields):
if field not in allowed_fields:
self.fields.pop(field, None)

def clean_accueil_casiers_adaptes(self):
if self.cleaned_data.get("accueil_casiers") is not True:
return None
return self.cleaned_data["accueil_casiers_adaptes"]

def clean_accueil_casiers_fermeture(self):
if self.cleaned_data.get("accueil_casiers") is not True:
return None
return self.cleaned_data["accueil_casiers_fermeture"]

def clean_accueil_tribunes_localisation_places(self):
if (self.cleaned_data.get("accueil_tribunes_places") or 0) < 1:
return None
return self.cleaned_data["accueil_tribunes_localisation_places"]

def clean_accueil_tribunes_places_avec_accompagnants(self):
if (self.cleaned_data.get("accueil_tribunes_places") or 0) < 1:
return None
return self.cleaned_data["accueil_tribunes_places_avec_accompagnants"]

def clean_accueil_vestiaires_largeur_passage(self):
if self.cleaned_data.get("accueil_vestiaires") is not True:
return None
return self.cleaned_data["accueil_vestiaires_largeur_passage"]

def clean_accueil_douches_collectives_adaptees(self):
if self.cleaned_data.get("accueil_douches_collectives") is not True:
return None
return self.cleaned_data["accueil_douches_collectives_adaptees"]

def clean_accueil_douches_individuelles_adaptees(self):
if self.cleaned_data.get("accueil_douches_individuelles") is not True:
return None
return self.cleaned_data["accueil_douches_individuelles_adaptees"]

def clean_sanitaires_urinoirs(self):
if self.cleaned_data.get("sanitaires_presence") is not True:
return None
return self.cleaned_data["sanitaires_urinoirs"]

def clean_sanitaires_largeur_porte(self):
if self.cleaned_data.get("sanitaires_adaptes") is not True:
return None
return self.cleaned_data["sanitaires_largeur_porte"]

def clean_sanitaires_sens_transfert(self):
if self.cleaned_data.get("sanitaires_adaptes") is not True:
return None
return self.cleaned_data["sanitaires_sens_transfert"]


class AdminAccessibiliteForm(ContribAccessibiliteForm):
# Note: defining `labels` and `help_texts` in `Meta` doesn't work with custom
# fields, hence why we set them up manually for each fields.
Expand Down Expand Up @@ -942,6 +1051,7 @@ def get_contrib_forms_for_activity(activity: Activite):
ACTIVITY_GROUPS["LARGE_ESTABLISHMENTS"]: ContribAccessibiliteLargeEstablishmentsForm,
ACTIVITY_GROUPS["POLLING_STATION"]: ContribAccessibilitePollingStationForm,
ACTIVITY_GROUPS["HEALTHCARE"]: ContribAccessibiliteHealthcareForm,
ACTIVITY_GROUPS["SPORTS_EQUIPMENT"]: ContribAccessibiliteSportsEquipmentForm,
}

groups = activity.groups.all()
Expand Down
22 changes: 20 additions & 2 deletions erp/imports/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class AccessibilityImportSerializer(serializers.ModelSerializer):
stationnement_pmr = NullBooleanField(required=False, allow_null=True)
stationnement_ext_presence = NullBooleanField(required=False, allow_null=True)
stationnement_ext_pmr = NullBooleanField(required=False, allow_null=True)
stationnement_zone_depose_pmr = NullBooleanField(required=False, allow_null=True)
cheminement_ext_presence = NullBooleanField(required=False, allow_null=True)
cheminement_ext_terrain_stable = NullBooleanField(required=False, allow_null=True)
cheminement_ext_plain_pied = NullBooleanField(required=False, allow_null=True)
Expand Down Expand Up @@ -95,8 +96,18 @@ class AccessibilityImportSerializer(serializers.ModelSerializer):
accueil_soignant = NullBooleanField(required=False, allow_null=True)
accueil_salle_consultation_accessible = NullBooleanField(required=False, allow_null=True)
accueil_consultation_domicile = NullBooleanField(required=False, allow_null=True)
accueil_aire_de_jeux = NullBooleanField(required=False, allow_null=True)
accueil_tribunes = NullBooleanField(required=False, allow_null=True)
accueil_vestiaires = NullBooleanField(required=False, allow_null=True)
accueil_douches_collectives = NullBooleanField(required=False, allow_null=True)
accueil_douches_collectives_adaptees = NullBooleanField(required=False, allow_null=True)
accueil_douches_individuelles = NullBooleanField(required=False, allow_null=True)
accueil_douches_individuelles_adaptees = NullBooleanField(required=False, allow_null=True)
accueil_casiers = NullBooleanField(required=False, allow_null=True)
accueil_casiers_adaptes = NullBooleanField(required=False, allow_null=True)
sanitaires_presence = NullBooleanField(required=False, allow_null=True)
sanitaires_adaptes = NullBooleanField(required=False, allow_null=True)
sanitaires_urinoirs = NullBooleanField(required=False, allow_null=True)
conformite = NullBooleanField(required=False, allow_null=True)

class Meta:
Expand Down Expand Up @@ -222,15 +233,22 @@ def validate_accessibilite(self, obj):

return obj

@staticmethod
def _should_display_children(field_config, current_value):
min_value = field_config.get("min_value_to_display_children")
if min_value is not None:
return current_value is not None and current_value >= min_value

return str(current_value) in field_config.get("value_to_display_children", [])

def _handle_children_reinit(self, accessibilite_instance, field_name):
field_config = FIELDS.get(field_name)
if not field_config or not field_config.get("children"):
return

current_value = getattr(accessibilite_instance, field_name)
trigger_values = field_config.get("value_to_display_children", [])

if str(current_value) not in trigger_values:
if not self._should_display_children(field_config, current_value):
for child_name in field_config.get("children"):
field_obj = accessibilite_instance._meta.get_field(child_name)
default_value = field_obj.get_default()
Expand Down
Loading