mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2026-01-19 01:23:12 +00:00
with more styling
This commit is contained in:
@@ -288,29 +288,70 @@ class EntranceLetterForm(ModelForm):
|
||||
|
||||
|
||||
class NewProspectForm(forms.Form):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
# If the form is bound (POSTed), update the field's value to uppercase
|
||||
if self.is_bound:
|
||||
data = self.data.copy()
|
||||
ident = data.get('identifier')
|
||||
if ident:
|
||||
data['identifier'] = ident.upper()
|
||||
self.data = data
|
||||
# If initial data is present, ensure it's uppercase too
|
||||
if 'identifier' in self.initial:
|
||||
self.initial['identifier'] = self.initial['identifier'].upper()
|
||||
def clean_identifier(self):
|
||||
identifier = self.cleaned_data['identifier']
|
||||
if identifier:
|
||||
return identifier.upper()
|
||||
return identifier
|
||||
def clean_date_found(self):
|
||||
date = self.cleaned_data['date_found']
|
||||
if date.year <= 1990:
|
||||
raise forms.ValidationError('Year must be after 1990.')
|
||||
return date
|
||||
|
||||
date_found = forms.DateField(
|
||||
label="Date Found",
|
||||
widget=forms.DateInput(attrs={"type": "date"})
|
||||
label="Date Found (YYYY-MM-DD)",
|
||||
input_formats=["%Y-%m-%d"],
|
||||
widget=forms.DateInput(attrs={
|
||||
"type": "text",
|
||||
"placeholder": "2025-08-23",
|
||||
"pattern": "\\d{4}-\\d{2}-\\d{2}",
|
||||
"title": "Enter date as YYYY-MM-DD (e.g. 2025-08-23)",
|
||||
"size": 10,
|
||||
"style": "width: 10ch; min-width: 0;"
|
||||
})
|
||||
)
|
||||
area_code = forms.CharField(
|
||||
area_code = forms.ChoiceField(
|
||||
label="Area Code",
|
||||
max_length=10
|
||||
choices=[('1623', '1623'), ('1626', '1626')],
|
||||
initial='1623',
|
||||
widget=forms.Select(attrs={"style": "width: 6em; min-width: 0;"})
|
||||
)
|
||||
identifier = forms.CharField(
|
||||
label="Identifier (e.g. 2025-AB-01)",
|
||||
max_length=20
|
||||
label="New cave identifier",
|
||||
max_length=20,
|
||||
widget=forms.TextInput(attrs={
|
||||
"placeholder": "2025-AB-01",
|
||||
"size": 10,
|
||||
"style": "width: 10ch; min-width: 0;"
|
||||
})
|
||||
)
|
||||
discovery_name = forms.CharField(
|
||||
label="Discovery Name",
|
||||
max_length=100
|
||||
max_length=100,
|
||||
widget=forms.TextInput(attrs={"placeholder": "Dreibierbittehohle"})
|
||||
)
|
||||
gps_lat = forms.DecimalField(
|
||||
label="GPS Latitude",
|
||||
max_digits=10,
|
||||
decimal_places=7
|
||||
decimal_places=7,
|
||||
widget=forms.NumberInput(attrs={"placeholder": "47.687180"})
|
||||
)
|
||||
gps_long = forms.DecimalField(
|
||||
label="GPS Longitude",
|
||||
max_digits=10,
|
||||
decimal_places=7
|
||||
decimal_places=7,
|
||||
widget=forms.NumberInput(attrs={"placeholder": "13.825211"})
|
||||
)
|
||||
|
||||
@@ -12,45 +12,60 @@ New Prospect
|
||||
<h1>New Prospect</h1>
|
||||
<p>Please fill in the details for a new prospect: a hole which might be a cave. Fields are documented in the <a href="/handbook/survey/caveentryfields.html">cave entry fields</a> guide.</p>
|
||||
|
||||
{% if success %}
|
||||
<div class="success-message">Prospect submitted successfully. You can edit the details below or enter another.</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<style>
|
||||
div > label {
|
||||
display:block;
|
||||
.prospect-form-container {
|
||||
max-width: 100%;
|
||||
margin-left: 15%;
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
margin-top: 5px;
|
||||
font-size: 150%;
|
||||
text-align: right;
|
||||
}
|
||||
.prospect-form label {
|
||||
display: inline-block;
|
||||
width: 320px;
|
||||
text-align: right;
|
||||
margin-right: 20px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.prospect-form input, .prospect-form select, .prospect-form textarea {
|
||||
width: 87%;
|
||||
margin-bottom: 10px;
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
font-size: 100%;
|
||||
padding: 0.5em;
|
||||
width: 20%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.success-message {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
font-size: 90%;
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
</style>
|
||||
<form method="post" class="prospect-form">
|
||||
{% csrf_token %}
|
||||
<div class="form-fields">
|
||||
<div class="prospect-form-container">
|
||||
<form method="post" class="prospect-form">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
<div class="form-group">
|
||||
<div>
|
||||
<label for="{{ field.id_for_label }}">{{ field.label }}</label>
|
||||
{{ field }}
|
||||
{% if field.help_text %}<small>{{ field.help_text }}</small>{% endif %}
|
||||
{% for error in field.errors %}<div class="error">{{ error }}</div>{% endfor %}
|
||||
{% for error in field.errors %}<span class="error">{{ error }}</span>{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<p><button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%;" type="submit">Submit</button></p>
|
||||
</form>
|
||||
<br>
|
||||
<button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%;" type="submit">Submit</button>
|
||||
</form>
|
||||
</div>
|
||||
{% if success %}
|
||||
<div class="success-message">Prospect submitted successfully. You can edit the details below or enter another.</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user