diff options
Diffstat (limited to 'core/models.py')
-rw-r--r-- | core/models.py | 96 |
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) |