2020-05-28 04:54:53 +01:00
|
|
|
import string
|
|
|
|
from datetime import date
|
|
|
|
|
2011-07-11 02:10:22 +01:00
|
|
|
import django.forms as forms
|
2020-05-28 04:54:53 +01:00
|
|
|
from django.forms import ModelForm
|
2012-06-10 14:59:21 +01:00
|
|
|
from django.forms.models import modelformset_factory
|
2011-07-11 02:10:22 +01:00
|
|
|
from django.contrib.admin.widgets import AdminDateWidget
|
2020-05-28 04:54:53 +01:00
|
|
|
|
2020-06-13 23:16:19 +01:00
|
|
|
#from tinymce.widgets import TinyMCE
|
2011-07-11 02:10:22 +01:00
|
|
|
|
2021-04-22 02:45:28 +01:00
|
|
|
from troggle.core.models.troggle import Person, PersonExpedition, Expedition, SimpleFileModel
|
2021-04-13 00:47:17 +01:00
|
|
|
from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance
|
2020-05-28 04:54:53 +01:00
|
|
|
|
2021-04-13 01:37:42 +01:00
|
|
|
'''These are all the Forms used by troggle
|
|
|
|
Some are not used and need renovating or destroying.
|
|
|
|
'''
|
|
|
|
|
2021-04-23 11:43:25 +01:00
|
|
|
todo = '''Fix UploadFileForm - long list of actions
|
|
|
|
|
2021-04-21 19:08:42 +01:00
|
|
|
'''
|
|
|
|
|
2012-01-07 19:05:25 +00:00
|
|
|
class CaveForm(ModelForm):
|
2021-04-14 16:28:30 +01:00
|
|
|
'''Only those fields for which we want to override defaults are listed here
|
2021-04-21 19:08:42 +01:00
|
|
|
the other fields are present on the form, but use the default presentation style
|
2021-04-14 16:28:30 +01:00
|
|
|
'''
|
|
|
|
official_name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'}))
|
|
|
|
underground_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9}))
|
|
|
|
explorers = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
equipment = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
survey = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
#survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
|
|
kataster_status = forms.CharField(required = False)
|
|
|
|
underground_centre_line = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
notes = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
references = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':1}))
|
|
|
|
description_file = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'}))
|
|
|
|
survex_file = forms.CharField(required = False, label="Survex file [caves-1623/000/000.svx]", widget=forms.TextInput(attrs={'size': '45'}))
|
|
|
|
url = forms.CharField(required = True, label="URL [1623/000/000]", widget=forms.TextInput(attrs={'size': '45'}))
|
|
|
|
length = forms.CharField(required = False, label="Length (m)")
|
|
|
|
depth = forms.CharField(required = False, label="Depth (m)")
|
|
|
|
extent = forms.CharField(required = False, label="Extent (m)")
|
2012-01-07 19:05:25 +00:00
|
|
|
class Meta:
|
|
|
|
model = Cave
|
2012-08-12 18:10:23 +01:00
|
|
|
exclude = ("filename",)
|
2012-01-07 19:05:25 +00:00
|
|
|
|
2012-08-14 21:51:15 +01:00
|
|
|
def clean(self):
|
|
|
|
if self.cleaned_data.get("kataster_number") == "" and self.cleaned_data.get("unofficial_number") == "":
|
|
|
|
self._errors["unofficial_number"] = self.error_class(["Either the kataster or unoffical number is required."])
|
|
|
|
if self.cleaned_data.get("kataster_number") != "" and self.cleaned_data.get("official_name") == "":
|
|
|
|
self._errors["official_name"] = self.error_class(["This field is required when there is a kataster number."])
|
|
|
|
if self.cleaned_data.get("area") == []:
|
|
|
|
self._errors["area"] = self.error_class(["This field is required."])
|
2017-10-25 03:49:03 +01:00
|
|
|
if self.cleaned_data.get("url") and self.cleaned_data.get("url").startswith("/"):
|
2021-04-14 16:28:30 +01:00
|
|
|
self._errors["url"] = self.error_class(["This field cannot start with a /."])
|
2012-08-14 21:51:15 +01:00
|
|
|
return self.cleaned_data
|
|
|
|
|
2012-06-10 14:59:21 +01:00
|
|
|
class VersionControlCommentForm(forms.Form):
|
2021-04-14 16:28:30 +01:00
|
|
|
'''Was appended to all forms. Not used currently
|
|
|
|
'''
|
|
|
|
description_of_change = forms.CharField(required = True, widget=forms.Textarea(attrs={'rows':2}))
|
2012-05-23 09:23:40 +01:00
|
|
|
|
|
|
|
|
2012-06-10 14:59:21 +01:00
|
|
|
class EntranceForm(ModelForm):
|
2021-04-14 16:28:30 +01:00
|
|
|
'''Only those fields for which we want to override defaults are listed here
|
|
|
|
the other fields are present on the form, but use the default presentaiton style
|
|
|
|
'''
|
|
|
|
name = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'}))
|
|
|
|
entrance_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':9}))
|
|
|
|
explorers = forms.CharField(required = False, widget=forms.TextInput(attrs={'size': '45'}))
|
2012-06-10 14:59:21 +01:00
|
|
|
#explorers = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
2021-04-14 16:28:30 +01:00
|
|
|
map_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':3}))
|
|
|
|
location_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':3}))
|
|
|
|
approach = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':3}))
|
|
|
|
underground_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':3}))
|
|
|
|
photo = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
marking_comment = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
findability_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
other_description = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
bearings = forms.CharField(required = False, widget=forms.Textarea(attrs={'rows':2}))
|
|
|
|
other_station = forms.CharField(required=False)
|
|
|
|
tag_station = forms.CharField(required=False)
|
|
|
|
exact_station = forms.CharField(required=False)
|
|
|
|
northing = forms.CharField(required=False)
|
|
|
|
easting = forms.CharField(required=False)
|
|
|
|
alt = forms.CharField(required=False, label="Altitude (m)")
|
|
|
|
url = forms.CharField(required = False, label="URL [usually blank]", widget=forms.TextInput(attrs={'size': '45'}))
|
2012-06-10 14:59:21 +01:00
|
|
|
class Meta:
|
|
|
|
model = Entrance
|
2012-08-12 18:10:23 +01:00
|
|
|
exclude = ("cached_primary_slug", "filename",)
|
2015-09-16 01:52:45 +01:00
|
|
|
def clean(self):
|
|
|
|
if self.cleaned_data.get("url").startswith("/"):
|
2021-04-14 16:28:30 +01:00
|
|
|
self._errors["url"] = self.error_class(["This field cannot start with a /."])
|
2015-09-16 01:52:45 +01:00
|
|
|
return self.cleaned_data
|
2012-06-10 14:59:21 +01:00
|
|
|
|
2012-01-07 19:05:25 +00:00
|
|
|
|
2021-04-21 22:09:20 +01:00
|
|
|
# This next line is called from the templates/edit_cave2.html template.
|
2020-08-02 23:53:35 +01:00
|
|
|
# This is sufficeint to create an entire entry for for the cave fields automatically
|
|
|
|
# http://localhost:8000/cave/new/
|
2021-04-14 16:28:30 +01:00
|
|
|
# using django built-in Deep magic. https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/
|
2018-04-15 12:00:59 +01:00
|
|
|
CaveAndEntranceFormSet = modelformset_factory(CaveAndEntrance, exclude=('cave',))
|
2012-01-07 19:05:25 +00:00
|
|
|
|
2012-08-14 21:51:15 +01:00
|
|
|
class EntranceLetterForm(ModelForm):
|
2021-04-21 22:09:20 +01:00
|
|
|
'''Can't see what this does at all. called twice from views.caves
|
2021-04-14 16:28:30 +01:00
|
|
|
'''
|
2012-08-14 21:51:15 +01:00
|
|
|
class Meta:
|
|
|
|
model = CaveAndEntrance
|
|
|
|
exclude = ('cave', 'entrance')
|
|
|
|
|
2011-07-11 02:10:22 +01:00
|
|
|
def get_name(pe):
|
|
|
|
if pe.nickname:
|
|
|
|
return pe.nickname
|
|
|
|
else:
|
|
|
|
return pe.person.first_name
|
|
|
|
|
2020-06-04 23:00:58 +01:00
|
|
|
class UploadFileForm(forms.Form):
|
2021-04-14 16:28:30 +01:00
|
|
|
"""Only called by views.others.newFile() which seems to be only about logbook files.
|
2020-08-02 23:53:35 +01:00
|
|
|
"""
|
2021-04-21 22:09:20 +01:00
|
|
|
title = forms.CharField(max_length=50)
|
|
|
|
file = forms.FileField()
|
|
|
|
#html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
|
|
|
|
html = forms.CharField(widget=forms.Textarea(attrs={"cols":80, "rows":20}))
|
|
|
|
lon_utm = forms.FloatField(required=False)
|
|
|
|
lat_utm = forms.FloatField(required=False)
|
|
|
|
slug = forms.CharField(max_length=50)
|
|
|
|
date = forms.DateField(required=False)
|
|
|
|
survey_point = forms.CharField()
|
|
|
|
|
2020-06-08 00:11:09 +01:00
|
|
|
# Because this has EXECUTABLE statements in its signature (the fields) they get
|
|
|
|
# executed when this module is LOADED. Which barfs horribly.
|
2021-04-21 22:09:20 +01:00
|
|
|
# so all put in an __init__ method instead pending deletion or rewriting
|
2020-06-08 00:11:09 +01:00
|
|
|
def __init__(self):
|
|
|
|
#This next line is the one that causes django.setup() to BARF LOUDLY
|
|
|
|
caves = [cave.slug for cave in Cave.objects.all()]
|
|
|
|
#caves.sort() # sort needs rewriting for python3
|
|
|
|
caves = ["-----"] + caves
|
|
|
|
cave = forms.ChoiceField([(c, c) for c in caves], required=False)
|
2021-04-21 22:09:20 +01:00
|
|
|
|
2020-06-08 00:11:09 +01:00
|
|
|
entrance = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
|
2020-06-04 23:00:58 +01:00
|
|
|
|
2020-06-08 00:11:09 +01:00
|
|
|
expeditions = [e.year for e in Expedition.objects.all()]
|
|
|
|
expeditions.sort()
|
|
|
|
expeditions = ["-----"] + expeditions
|
|
|
|
expedition = forms.ChoiceField([(e, e) for e in expeditions], required=False)
|
2020-06-04 23:00:58 +01:00
|
|
|
|
2021-04-21 22:09:20 +01:00
|
|
|
qm = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
|
2020-06-08 00:11:09 +01:00
|
|
|
logbookentry = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
|
|
|
|
person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
|
2020-06-04 23:00:58 +01:00
|
|
|
|
2011-07-11 02:10:22 +01:00
|
|
|
|
2021-04-22 02:45:28 +01:00
|
|
|
|
|
|
|
class SimpleUploadFileForm(forms.ModelForm):
|
|
|
|
"""New in April 2021
|
|
|
|
"""
|
|
|
|
class Meta:
|
|
|
|
model = SimpleFileModel
|
|
|
|
fields = ('title', 'simplefile',)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|