summaryrefslogtreecommitdiffstats
path: root/core/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'core/models.py')
-rw-r--r--core/models.py96
1 files changed, 70 insertions, 26 deletions
diff --git a/core/models.py b/core/models.py
index c82f448..7b301f5 100644
--- a/core/models.py
+++ b/core/models.py
@@ -10,6 +10,8 @@ from django.conf import settings
from decimal import Decimal, getcontext
from django.core.urlresolvers import reverse
from imagekit.models import ImageModel
+from django.template import Context, loader
+import settings
getcontext().prec=2 #use 2 significant figures for decimal calculations
from models_survex import *
@@ -339,16 +341,21 @@ class Area(TroggleModel):
elif self.parent:
return self.parent.kat_area()
-class CaveAndEntrance(TroggleModel):
+class CaveAndEntrance(models.Model):
cave = models.ForeignKey('Cave')
entrance = models.ForeignKey('Entrance')
entrance_letter = models.CharField(max_length=20,blank=True,null=True)
def __unicode__(self):
return unicode(self.cave) + unicode(self.entrance_letter)
+class CaveSlug(models.Model):
+ cave = models.ForeignKey('Cave')
+ slug = models.SlugField(max_length=50, unique = True)
+ primary = models.BooleanField()
+
+
class Cave(TroggleModel):
- # too much here perhaps
- slug = models.SlugField(max_length=50, unique = True)
+ # too much here perhaps,
official_name = models.CharField(max_length=160)
area = models.ManyToManyField(Area, blank=True, null=True)
kataster_code = models.CharField(max_length=20,blank=True,null=True)
@@ -369,6 +376,7 @@ class Cave(TroggleModel):
survex_file = models.CharField(max_length=100,blank=True,null=True)
description_file = models.CharField(max_length=200,blank=True,null=True)
url = models.CharField(max_length=200,blank=True,null=True)
+ filename = models.CharField(max_length=200)
#class Meta:
# unique_together = (("area", "kataster_number"), ("area", "unofficial_number"))
@@ -377,6 +385,15 @@ class Cave(TroggleModel):
#href = models.CharField(max_length=100)
+ def slug(self):
+ primarySlugs = self.caveslug_set.filter(primary = True)
+ if primarySlugs:
+ return primarySlugs[0].slug
+ else:
+ slugs = self.caveslug_set.filter()
+ if slugs:
+ return slugs[0].slug
+
def reference(self):
if self.kataster_number:
return "%s-%s" % (self.kat_area(), self.kataster_number)
@@ -393,17 +410,8 @@ class Cave(TroggleModel):
#return settings.URL_ROOT + '/cave/' + href + '/'
return urlparse.urljoin(settings.URL_ROOT, reverse('cave',kwargs={'cave_id':href,}))
- def __unicode__(self):
- if self.kataster_number:
- if self.kat_area():
- return self.kat_area() + u": " + self.kataster_number
- else:
- return unicode("l") + u": " + self.kataster_number
- else:
- if self.kat_area():
- return self.kat_area() + u": " + self.unofficial_number
- else:
- return self.unofficial_number
+ def __unicode__(self, sep = u": "):
+ return unicode(self.slug())
def get_QMs(self):
return QM.objects.filter(found_by__cave=self)
@@ -451,6 +459,17 @@ class Cave(TroggleModel):
else:
res += "–" + prevR
return res
+
+ def writeDataFile(self):
+ f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w")
+ t = loader.get_template('dataformat/cave.xml')
+ c = Context({'cave': self})
+ u = t.render(c)
+ u8 = u.encode("utf-8")
+ f.write(u8)
+ f.close()
+
+
def getCaveByReference(reference):
areaname, code = reference.split("-", 1)
@@ -467,10 +486,13 @@ class OtherCaveName(TroggleModel):
cave = models.ForeignKey(Cave)
def __unicode__(self):
return unicode(self.name)
-
+
+class EntranceSlug(models.Model):
+ entrance = models.ForeignKey('Entrance')
+ slug = models.SlugField(max_length=50, unique = True)
+ primary = models.BooleanField()
class Entrance(TroggleModel):
- slug = models.SlugField(max_length=50, unique = True)
name = models.CharField(max_length=100, blank=True,null=True)
entrance_description = models.TextField(blank=True,null=True)
explorers = models.TextField(blank=True,null=True)
@@ -501,19 +523,17 @@ class Entrance(TroggleModel):
alt = models.TextField(blank=True, null=True)
northing = models.TextField(blank=True, null=True)
easting = models.TextField(blank=True, null=True)
- tag_station = models.TextField()
- exact_station = models.TextField()
- other_station = models.TextField()
+ tag_station = models.TextField(blank=True, null=True)
+ exact_station = models.TextField(blank=True, null=True)
+ other_station = models.TextField(blank=True, null=True)
other_description = models.TextField(blank=True,null=True)
bearings = models.TextField(blank=True,null=True)
+ url = models.CharField(max_length=200,blank=True,null=True)
+ filename = models.CharField(max_length=200)
+ cached_primary_slug = models.CharField(max_length=200,blank=True,null=True)
+
def __unicode__(self):
- a = CaveAndEntrance.objects.filter(entrance = self)
- name = u''
- if self.name:
- name = unicode(self.name) + u' '
- if len(a) == 1:
- return name + unicode(a[0])
- return name + unicode(a)
+ return unicode(self.slug())
def marking_val(self):
for m in self.MARKING_CHOICES:
if m[0] == self.marking:
@@ -523,6 +543,8 @@ class Entrance(TroggleModel):
if f[0] == self.findability:
return f[1]
+ def tag(self):
+ return SurvexStation.objects.lookup(self.tag_station)
def get_absolute_url(self):
@@ -535,6 +557,28 @@ class Entrance(TroggleModel):
return res
+ def slug(self):
+ if not self.cached_primary_slug:
+ primarySlugs = self.entranceslug_set.filter(primary = True)
+ if primarySlugs:
+ self.cached_primary_slug = primarySlugs[0].slug
+ self.save()
+ else:
+ slugs = self.entranceslug_set.filter()
+ if slugs:
+ self.cached_primary_slug = slugs[0].slug
+ self.save()
+ return self.cached_primary_slug
+
+ def writeDataFile(self):
+ f = open(os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename), "w")
+ t = loader.get_template('dataformat/entrance.xml')
+ c = Context({'entrance': self})
+ u = t.render(c)
+ u8 = u.encode("utf-8")
+ f.write(u8)
+ f.close()
+
class CaveDescription(TroggleModel):
short_name = models.CharField(max_length=50, unique = True)
long_name = models.CharField(max_length=200, blank=True, null=True)