mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-29 21:31:54 +00:00
195 lines
9.1 KiB
Python
195 lines
9.1 KiB
Python
import string
|
|
from datetime import date
|
|
|
|
import django.forms as forms
|
|
from django.forms import ModelForm
|
|
from django.forms.models import modelformset_factory
|
|
from django.contrib.admin.widgets import AdminDateWidget
|
|
|
|
#from tinymce.widgets import TinyMCE
|
|
|
|
from troggle.core.models import Person, PersonExpedition, Expedition
|
|
from troggle.core.models_caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance
|
|
|
|
class CaveForm(ModelForm):
|
|
underground_description = forms.CharField(required = False, widget=forms.Textarea())
|
|
explorers = forms.CharField(required = False, widget=forms.Textarea())
|
|
equipment = forms.CharField(required = False, widget=forms.Textarea())
|
|
survey = forms.CharField(required = False, widget=forms.Textarea())
|
|
kataster_status = forms.CharField(required = False, widget=forms.Textarea())
|
|
underground_centre_line = forms.CharField(required = False, widget=forms.Textarea())
|
|
notes = forms.CharField(required = False, widget=forms.Textarea())
|
|
references = forms.CharField(required = False, widget=forms.Textarea())
|
|
url = forms.CharField(required = True)
|
|
class Meta:
|
|
model = Cave
|
|
exclude = ("filename",)
|
|
|
|
|
|
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."])
|
|
if self.cleaned_data.get("url") and self.cleaned_data.get("url").startswith("/"):
|
|
self._errors["url"] = self.error_class(["This field can not start with a /."])
|
|
return self.cleaned_data
|
|
|
|
class VersionControlCommentForm(forms.Form):
|
|
description_of_change = forms.CharField(required = True, widget=forms.Textarea())
|
|
|
|
|
|
class EntranceForm(ModelForm):
|
|
#underground_description = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
|
|
#explorers = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#equipment = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#survey = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#kataster_status = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#underground_centre_line = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#notes = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
#references = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
|
|
other_station = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
tag_station = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
exact_station = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
northing = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
easting = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
alt = forms.CharField(required=False) # Trying to change this to a single line entry
|
|
class Meta:
|
|
model = Entrance
|
|
exclude = ("cached_primary_slug", "filename",)
|
|
def clean(self):
|
|
if self.cleaned_data.get("url").startswith("/"):
|
|
self._errors["url"] = self.error_class(["This field can not start with a /."])
|
|
return self.cleaned_data
|
|
|
|
|
|
# This next is called from the templates/edit_cave2.html template.
|
|
# This is sufficeint to create an entire entry for for the cave fields automatically
|
|
# http://localhost:8000/cave/new/
|
|
# using django built-in stuff:
|
|
CaveAndEntranceFormSet = modelformset_factory(CaveAndEntrance, exclude=('cave',))
|
|
|
|
class EntranceLetterForm(ModelForm):
|
|
class Meta:
|
|
model = CaveAndEntrance
|
|
exclude = ('cave', 'entrance')
|
|
|
|
#This was all commneted out by Martin Green in 2012 !
|
|
#class PersonForm(ModelForm):
|
|
# class Meta:
|
|
# model = Person
|
|
|
|
#class LogbookEntryForm(ModelForm):
|
|
# class Meta:
|
|
# model = LogbookEntry#
|
|
|
|
# def wikiLinkHints(LogbookEntry=None):
|
|
# """
|
|
# This function returns html-formatted paragraphs for each of the
|
|
# wikilink types that are related to this logbookentry. Each paragraph
|
|
# contains a list of all of the related wikilinks.
|
|
#
|
|
# Perhaps an admin javascript solution would be better.
|
|
# """
|
|
# res = ["Please use the following wikilinks, which are related to this logbook entry:"]
|
|
#
|
|
# res.append(r'</p><p style="float: left;"><b>QMs found:</b>')
|
|
# for QM in LogbookEntry.instance.QMs_found.all():
|
|
# res.append(QM.wiki_link())
|
|
|
|
# res.append(r'</p><p style="float: left;"><b>QMs ticked off:</b>')
|
|
# for QM in LogbookEntry.instance.QMs_ticked_off.all():
|
|
# res.append(QM.wiki_link())
|
|
|
|
# res.append(r'</p><p style="float: left; "><b>People</b>')
|
|
# for persontrip in LogbookEntry.instance.persontrip_set.all():
|
|
# res.append(persontrip.wiki_link())
|
|
# res.append(r'</p>')
|
|
|
|
# return string.join(res, r'<br />')
|
|
|
|
# def __init__(self, *args, **kwargs):
|
|
# super(LogbookEntryForm, self).__init__(*args, **kwargs)
|
|
# self.fields['text'].help_text=self.wikiLinkHints()#
|
|
|
|
#class CaveForm(forms.Form):
|
|
# html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
|
|
|
|
def getTripForm(expedition):
|
|
|
|
class TripForm(forms.Form):
|
|
date = forms.DateField()
|
|
title = forms.CharField(max_length=200)
|
|
caves = sorted([cave.reference() for cave in Cave.objects.all()])
|
|
caves = ["-----"] + caves
|
|
cave = forms.ChoiceField([(c, c) for c in caves], required=False)
|
|
location = forms.CharField(max_length=200, required=False)
|
|
caveOrLocation = forms.ChoiceField([("cave", "Cave"), ("location", "Location")], widget = forms.widgets.RadioSelect())
|
|
# html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
|
|
html = forms.CharField(widget=forms.Textarea(attrs={"cols":80, "rows":20}))
|
|
|
|
def clean(self):
|
|
print((dir(self)))
|
|
if self.cleaned_data.get("caveOrLocation") == "cave" and not self.cleaned_data.get("cave"):
|
|
self._errors["cave"] = self.error_class(["This field is required"])
|
|
if self.cleaned_data.get("caveOrLocation") == "location" and not self.cleaned_data.get("location"):
|
|
self._errors["location"] = self.error_class(["This field is required"])
|
|
return self.cleaned_data
|
|
|
|
class PersonTripForm(forms.Form):
|
|
names = sorted([get_name(pe) for pe in PersonExpedition.objects.filter(expedition = expedition)])
|
|
names = ["-----"] + names
|
|
name = forms.ChoiceField([(n, n) for n in names])
|
|
TU = forms.FloatField(required=False)
|
|
author = forms.BooleanField(required=False, default=False)
|
|
|
|
PersonTripFormSet = formset_factory(PersonTripForm, extra=1)
|
|
|
|
return PersonTripFormSet, TripForm
|
|
|
|
def get_name(pe):
|
|
if pe.nickname:
|
|
return pe.nickname
|
|
else:
|
|
return pe.person.first_name
|
|
|
|
class UploadFileForm(forms.Form):
|
|
"""Only called by views.others.newFile() whhich seems to be only about logbook files.
|
|
"""
|
|
# Because this has EXECUTABLE statements in its signature (the fields) they get
|
|
# executed when this module is LOADED. Which barfs horribly.
|
|
# so all replaced by an __init__ method instead.
|
|
def __init__(self):
|
|
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)
|
|
|
|
#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)
|
|
|
|
entrance = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
|
|
qm = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
|
|
|
|
expeditions = [e.year for e in Expedition.objects.all()]
|
|
expeditions.sort()
|
|
expeditions = ["-----"] + expeditions
|
|
expedition = forms.ChoiceField([(e, e) for e in expeditions], required=False)
|
|
|
|
logbookentry = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
|
|
|
|
person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
|
|
|
|
survey_point = forms.CharField()
|
|
|
|
|