diff --git a/core/views/new_hole.py b/core/views/new_hole.py
index fad910db..c1683d34 100644
--- a/core/views/new_hole.py
+++ b/core/views/new_hole.py
@@ -9,6 +9,7 @@ from django.conf import settings
from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance, GetCaveLookup
from troggle.parsers.people import who_is_this
+# from troggle.core.views.editor_helpers import HTMLarea
from troggle.core.utils import (
get_cookie_max_age,
WriteAndCommitError,
@@ -88,6 +89,25 @@ class NewHoleForm(forms.Form):
photo_ent_no = forms.BooleanField(label="Entrance photos ?", required=False)
photo_ent_who = forms.CharField(label="Who has photos of entrance, tag and GPS?", required=False)
+ # Entrance description and approach
+ entrance_description = forms.CharField(
+ label="Entrance description",
+ required=True,
+ widget=forms.Textarea(attrs={
+ "height": "80%", "rows": 2,
+ "placeholder": "horizontal slot at foot level in 3m high NE-facing cliff"}),
+ )
+
+ approach = forms.CharField(
+ label="Approach",
+ max_length=100,
+ required=True,
+ widget=forms.Textarea(attrs={
+ "height": "80%", "rows": 2,
+ "placeholder": "from top camp, go NE round the side of Augst Eck, in some trees"}),
+ )
+
+
identified_login = forms.BooleanField(required=False,widget=forms.CheckboxInput(attrs={"onclick":"return false"})) # makes it readonly
who_are_you = forms.CharField(strip=True,
@@ -430,15 +450,19 @@ def process_new_hole(form, area):
editor = git_string(form.cleaned_data["who_are_you"])
+ fix_id = f"{area}.g{form.cleaned_data.get("cave_id").lower()}"
- _newfix(form, area, editor)
- _newent(form, area, editor) # yes, make the Entrance first
- _newcave(form, area, editor)
+ _newfix(form, area, editor, fix_id)
+
+ cave = _makecave(form, area)
+ _newent(form, area, editor, fix_id, cave) # yes, make the Entrance first
+ _savecave(form, area, editor, cave)
+
+ _newwallet(form, area, editor)
return
-def _newfix(form, area, editor):
+def _newfix(form, area, editor, fix_id):
auto_gps_file, content = get_auto_file()
- fix_id = f"{area}.g{form.cleaned_data.get("cave_id").lower()}"
fix_line = f"*fix {fix_id} reference {form.cleaned_data.get("gps_lat")} {form.cleaned_data.get("gps_long")} 0\n"
content += f"\n; {form.cleaned_data.get("discovery_date")} wallet: {form.cleaned_data.get("survey_wallet")} \n"
@@ -463,7 +487,7 @@ def _newfix(form, area, editor):
raise
return
-def _newent(form, areacode, editor):
+def _newent(form, areacode, editor, fix_id, cave):
"""All a bit over-complicated by the existance of teh combined Entrance & Letter Form and the
CaveAndEntrance class
@@ -477,25 +501,41 @@ def _newent(form, areacode, editor):
slug = f"{areacode}-{form.cleaned_data.get("cave_id")}" # no letter suffix a,b, or c..
imgpath = Path(areacode) / form.cleaned_data.get("cave_id")
- ent = Entrance.objects.create( # creates object and saves into db
+ ent = Entrance.objects.create( # creates object
slug=slug,
filename = slug + ".html",
- entrance_description="Created when registering a new cave. "
- + "Click on 'Edit' to enter the updated data, then 'Submit'.",
- marking="?",
+ findability="S", # Coordinates
+ marking="U", # Unmarked
+ approach= form.cleaned_data.get("approach"),
+ entrance_description=form.cleaned_data.get("entrance_description"),
+ # location_description=location_description[0],
+ lastvisit=form.cleaned_data.get("discovery_date"),
+ other_station=fix_id,
)
-
- #ce = CaveAndEntrance(cave=cave, entrance=Entrance()) # creates a new Entrance object as well as a new CE object
- #
- # Add in default text for various fields here, and links to the two Wallets.
- #
-
+ # link ent to cave
+ ce =CaveAndEntrance.objects.create(
+ cave=cave, entranceletter="", entrance=ent
+ )
#
# Add in saving Entrance to database and then .html file to filesystem and git
#
-
-
+ ent.save() # saves into db
+ try:
+ ent_file = ent.file_output()
+ write_and_commit([ent_file], f"Creating new Entrance {ent}", editor)
+ # leave other exceptions unhandled so that they bubble up to user interface
+ except PermissionError:
+ message = f"CANNOT save this file.\nPERMISSIONS incorrectly set on server for this file {ent.filename}. Ask a nerd to fix this."
+ return render(request, "errors/generic.html", {"message": message})
+ except WriteAndCommitError as e:
+ message = f"CANNOT git on server for this file {ent.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this."
+ return render(request, "errors/generic.html", {"message": e.message})
+ except subprocess.SubprocessError as e:
+ message = f"CANNOT update server for this file {ent.filename}.\n{e}\nEdits may not be committed.\nAsk a nerd to fix this."
+ return render(request, "errors/generic.html", {"message": message})
+ except:
+ raise
return
def _guess_survex_file(areacode, id):
@@ -508,7 +548,7 @@ def _guess_survex_file(areacode, id):
return survex_file
return ""
-def _newcave(form, areacode, editor):
+def _makecave(form, areacode):
cave_id = form.cleaned_data.get("cave_id")
slug = f"{areacode}-{cave_id}"
cave = make_cave(slug)
@@ -521,8 +561,8 @@ def _newcave(form, areacode, editor):
default_note = "Created from New Cave Datasheet. "
wallet = form.cleaned_data.get("survey_wallet")
- wallet_url = "/walletedit/{wallet.replace("#",":")}"
- references = f"Wallet {wallet}"
+ wallet_url = f"/walletedit/{wallet.replace('#',':')}"
+ references = f"Wallet {wallet}"
# TO-DO Need to detect if the existence of the survex was ticked but the file was not found,
# but that is probably normal: people will mostly record the Cave first and then do the survex data.
@@ -540,6 +580,10 @@ def _newcave(form, areacode, editor):
references=references,
)
cave.save()
+ return cave
+
+def _savecave(form, areacode, editor, cave):
+ cave.save()
# need a CaveForm f we do it this way, which is a ModelForm.
# form.save_m2m() # this does the many-to-many relationship saving between caves and entrances
# can we do this manually?
@@ -561,3 +605,5 @@ def _newcave(form, areacode, editor):
return
+def _newwallet(form, areacode, editor):
+ return
\ No newline at end of file