diff --git a/core/views/new_hole.py b/core/views/new_hole.py index deb7fb9a..6dfbef38 100644 --- a/core/views/new_hole.py +++ b/core/views/new_hole.py @@ -11,7 +11,7 @@ class NewHoleForm(forms.Form): """ discovery_date = forms.DateField(label="Trip date", widget=forms.DateInput(attrs={'type': 'date'}), required=True) # Identification - tag_id = forms.CharField(label="New Cave Identifier for internal identifiers. Cannot easily be changed.", + cave_id = forms.CharField(label="New Cave Identifier for internal identifiers. Cannot easily be changed.", widget=forms.TextInput(attrs={'placeholder': 'e.g. 2035-ZB-03 '}), max_length=50, required=True) @@ -110,7 +110,7 @@ class NewHoleForm(forms.Form): def _add_caver_error(self, field_name, name, year): """Standardized HTML error reporter""" error_html = mark_safe( - f"'{name}' is not a recognized explorer for the year {year}. " + f"'{name}' is not a recognized caver for the year {year}. " f"See aliases list" ) self.add_error(field_name, error_html) @@ -124,18 +124,33 @@ class NewHoleForm(forms.Form): trip_date = cleaned_data.get("discovery_date") wallet_id = cleaned_data.get("survey_wallet") + cave_id = cleaned_data.get("cave_id") + + if cave_id and trip_date: + try: + clean_cave = "".join(cave_id.split()) # removes whitespace + cave_year = int(clean_cave[:4]) + + trip_year = trip_date.year + if cave_year != trip_year: + self.add_error('cave_id', + f"Year mismatch: Cave identifier year ({cave_year}) does not match Trip date year ({trip_year}).") + + except (ValueError, IndexError): + # Individual field cleaners (regex) will handle malformed wallet strings + pass + + if wallet_id and trip_date: try: clean_wallet = "".join(wallet_id.split()) # should already be cleaned wallet_year = int(clean_wallet[:4]) - # Get the year from the discovery_date (a datetime.date object) trip_year = trip_date.year if wallet_year != trip_year: - # Point the error at the wallet field - self.add_error('ug_survey_wallet', + self.add_error('survey_wallet', f"Year mismatch: Wallet year ({wallet_year}) does not match Trip date year ({trip_year}).") except (ValueError, IndexError): @@ -151,10 +166,10 @@ class NewHoleForm(forms.Form): intrepids = self._validate_caver_list( 'discoverers', year, cleaned_data.get("discoverers")) - cameramen = self._validate_caver_list( - 'photo_ent_who', year, cleaned_data.get("photo_ent_who")) + if cleaned_data.get("photo_ent_no") or cleaned_data.get("gps_photo"): + cameramen = self._validate_caver_list( + 'photo_ent_who', year, cleaned_data.get("photo_ent_who")) - # Even for a single name, it works fine gps_user = self._validate_caver_list( 'gps_owner', year, cleaned_data.get("gps_owner")) @@ -185,8 +200,8 @@ class NewHoleForm(forms.Form): return cleaned_data - def clean_tag_id(self): - data = self.cleaned_data.get('tag_id') + def clean_cave_id(self): + data = self.cleaned_data.get('cave_id') # 1. Remove whitespace and force uppercase for consistency clean_text = "".join(data.split()).upper() diff --git a/templates/new_hole.html b/templates/new_hole.html index 81716fe2..00947849 100644 --- a/templates/new_hole.html +++ b/templates/new_hole.html @@ -102,7 +102,7 @@