From 8c0a2ffaa7a69b8ee7199c713c7a0dc41795d206 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Sun, 10 May 2026 01:36:42 +0100 Subject: [PATCH] revised --- core/views/new_hole.py | 73 +++++++++++++------ templates/new_hole.html | 157 ++++++++++++++++++++++++++++++++-------- 2 files changed, 176 insertions(+), 54 deletions(-) diff --git a/core/views/new_hole.py b/core/views/new_hole.py index 38880744..c3a0cbe0 100644 --- a/core/views/new_hole.py +++ b/core/views/new_hole.py @@ -2,39 +2,68 @@ from django import forms class NewHoleForm(forms.Form): # Identification - tag_id = forms.CharField(label="Cave Tag Identifier", max_length=50) - tag_text = forms.CharField(label="Exact text on tag", widget=forms.Textarea(attrs={'rows': 2})) + tag_id = forms.CharField(label="New Cave Identifier", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 2029-XY-03'}), + max_length=50, required=True) + tag_text = forms.CharField(label="Exact text on tag if placed", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 29 CUCC 35'}), + max_length=50, required=False) + # Naming + proposed_name = forms.CharField(label="Proposed Cave Name", + max_length=90, required=True) # Discovery - discoverers = forms.CharField(label="Discoverers", max_length=255) - discovery_date = forms.DateField(label="Discovery date", widget=forms.DateInput(attrs={'type': 'date'})) - surface_wallet = forms.CharField(label="Surface survey Wallet", max_length=100) + discoverers = forms.CharField(label="Discoverers / Investigators today", + widget=forms.TextInput(attrs={'placeholder': 'e.g. Dour, Animal, Becka'}), + max_length=255, required=True) + discovery_date = forms.DateField(label="Trip date", widget=forms.DateInput(attrs={'type': 'date'}), required=True) + surface_wallet = forms.CharField(label="Wallet used to find the entrance (if any)", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 2005 # 63'}), + max_length=100, required=False) # GPS Data - gps_owner = forms.CharField(label="GPS: Whose?", max_length=100) - gps_coords = forms.CharField(label="GPS Coordinates", max_length=100) - gps_dt = forms.DateTimeField(label="Time & date of GPS reading", widget=forms.DateTimeInput(attrs={'type': 'datetime-local'})) - gps_screenshot = forms.BooleanField(label="Screenshot taken of GPS reading?", required=False) + gps_owner = forms.CharField(label="GPS: Whose device?", + widget=forms.TextInput(attrs={'placeholder': 'e.g. Becka'}), + max_length=100, required=True) + gps_lat = forms.FloatField( + label="GPS Latitude", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 47.6964483 N'}), required=True + ) + gps_long = forms.FloatField( + label="GPS Longitude", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 13.8160500 E'}), required=True + ) + gps_time = forms.TimeField( + label="Time of GPS reading", + widget=forms.TimeInput(attrs={'type': 'time'}) + ) + gps_screenshot = forms.BooleanField(label="Screenshot taken of GPSTest while GPS device in situ?", required=False) + gps_photo = forms.BooleanField(label="Photo taken of GPS device in situ with view of entrance?", required=False) # Navigation - dist_to_ent = forms.FloatField(label="Distance from GPS to entrance (m)") - bear_to_ent = forms.FloatField(label="Compass bearing to entrance (degrees)") + dist_to_ent = forms.FloatField(label="Distance from GPS to entrance (m)", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 11.5'}) + ) + bear_to_ent = forms.FloatField(label="Compass bearing to entrance (degrees)", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 217'}) + ) # Status & Surveys - is_explored = forms.BooleanField(label="Completely explored?", required=False) - ug_survey_done = forms.BooleanField(label="Underground survey conducted?", required=False) - ug_survey_wallet = forms.CharField(label="Underground Wallet Name", required=False) + is_explored = forms.BooleanField(label="Exploration complete?", required=False) + ug_survey_done = forms.BooleanField(label="Survex data recorded?", required=False) + ug_survey_wallet = forms.CharField(label="Wallet id for all this data", + widget=forms.TextInput(attrs={'placeholder': 'e.g. 2029 # 88'}), + required=True) - # Media - PHOTO_CHOICES = [('no', 'No'), ('upload', 'Upload now'), ('on_camera', 'On camera (specify who)')] - photo_ent = forms.ChoiceField(label="Photo of entrance?", choices=PHOTO_CHOICES) - photo_ent_who = forms.CharField(label="Who has entrance photo?", required=False) - photo_tag = forms.ChoiceField(label="Photo of tag?", choices=PHOTO_CHOICES) - photo_tag_who = forms.CharField(label="Who has tag photo?", required=False) + # Media: Entrance Photo (Replaced dropdown with checkboxes) + photo_ent_no = forms.BooleanField(label="Entrance photos ?", required=False) + photo_ent_who = forms.CharField(label="Who has entrance photos ?", required=False) - # Naming - proposed_name = forms.CharField(label="Proposed Cave Name", max_length=255) + # Media: Tag Photo (Replaced dropdown with checkboxes) + photo_tag_no = forms.BooleanField(label="Photos of tag ?", required=False) + photo_tag_who = forms.CharField(label="Who has tag photos ?", required=False) + from django.shortcuts import render, redirect from django.contrib import messages diff --git a/templates/new_hole.html b/templates/new_hole.html index d755afb4..2165af34 100644 --- a/templates/new_hole.html +++ b/templates/new_hole.html @@ -4,50 +4,143 @@ {% block extraheaders %} {% endblock %} {% block content %} -

New Cave Creation

+

New Cave Datasheet

-
-

Please fill this out to record a new discovery in the field. This data matches the physical New Cave Data Sheet.

-

Consult the cave entry fields documentation if you are unsure about specific requirements.

-
+

Instructions

+

Refer to the handbok New Cave Datasheet page for what all these mean and how to fill them in.

{% csrf_token %} - {# Django 5.2 default div-based rendering #} - {{ form }} +
+ {% for field in form %} + + {# Logic to catch the first coordinate and start a side-by-side div #} + {% if field.name == "gps_lat" %} +
+
+ {{ field.label_tag }} + {{ field }} N + {{ field.errors }} +
+ {% elif field.name == "gps_long" %} +
+ {{ field.label_tag }} + {{ field }} E + {{ field.errors }} +
+
{# Standard Checkbox rendering #} + {% elif field.field.widget.input_type == "checkbox" %} +
+ {{ field }} + {{ field.label_tag }} +
+ {{ field.errors }} + + {# Standard Field rendering #} + {% else %} +
+ {{ field.label_tag }} + {{ field }} + {{ field.errors }} +
+ {% endif %} + + {% endfor %} +

- +

-

Field Procedures

-

Ensure that the physical data sheet is placed in the plastic wallet with survey notes and sketches before returning to base.

+

What this will do:

+

+

+

{% endblock %} \ No newline at end of file