2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-02-13 17:36:27 +00:00

tunnelfiles scheme added

This commit is contained in:
goatchurch
2009-09-11 23:56:47 +01:00
parent f21cddb2d0
commit ced45c92f7
18 changed files with 277 additions and 233 deletions

View File

@@ -51,7 +51,7 @@ class PhotoInline(admin.TabularInline):
class PersonTripInline(admin.TabularInline):
model = PersonTrip
exclude = ['persontrip_next','Delete']
raw_id_fields = ('person_expedition',)
raw_id_fields = ('personexpedition',)
extra = 1
#class LogbookEntryAdmin(VersionAdmin):

View File

@@ -5,6 +5,7 @@ from django.contrib import admin
from django.core.files.storage import FileSystemStorage
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.db.models import Min, Max
from django.conf import settings
from decimal import Decimal, getcontext
from django.core.urlresolvers import reverse
@@ -65,21 +66,18 @@ class TroggleImageModel(ImageModel):
class Expedition(TroggleModel):
year = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=100)
# these will become min and max dates
date_from = models.DateField(blank=True,null=True)
date_to = models.DateField(blank=True,null=True)
def __unicode__(self):
return self.year
class Meta:
ordering = ('-year',)
get_latest_by = 'date_from'
get_latest_by = 'year'
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year]))
# construction function. should be moved out
def get_expedition_day(self, date):
expeditiondays = self.expeditionday_set.filter(date=date)
if expeditiondays:
@@ -89,11 +87,28 @@ class Expedition(TroggleModel):
res.save()
return res
def day_min(self):
res = self.expeditionday_set.all()
return res and res[0] or None
def day_max(self):
res = self.expeditionday_set.all()
return res and res[len(res) - 1] or None
class ExpeditionDay(TroggleModel):
expedition = models.ForeignKey("Expedition")
date = models.DateField()
class Meta:
ordering = ('date',)
def GetPersonTrip(self, personexpedition):
personexpeditions = self.persontrip_set.filter(expeditionday=self)
return personexpeditions and personexpeditions[0] or None
#
# single Person, can go on many years
#
@@ -159,8 +174,8 @@ class Person(TroggleModel):
class PersonExpedition(TroggleModel):
expedition = models.ForeignKey(Expedition)
person = models.ForeignKey(Person)
date_from = models.DateField(blank=True,null=True)
date_to = models.DateField(blank=True,null=True)
is_guest = models.BooleanField(default=False)
COMMITTEE_CHOICES = (
('leader','Expo leader'),
@@ -184,7 +199,6 @@ class PersonExpedition(TroggleModel):
class Meta:
ordering = ('-expedition',)
#order_with_respect_to = 'expedition'
get_latest_by = 'expedition'
def __unicode__(self):
return "%s: (%s)" % (self.person, self.expedition)
@@ -205,11 +219,21 @@ class PersonExpedition(TroggleModel):
survexblocks = [personrole.survexblock for personrole in self.personrole_set.all() ]
return sum([survexblock.totalleglength for survexblock in set(survexblocks)])
# would prefer to return actual person trips so we could link to first and last ones
def day_min(self):
res = self.persontrip_set.aggregate(day_min=Min("expeditionday__date"))
return res["day_min"]
def day_max(self):
res = self.persontrip_set.all().aggregate(day_max=Max("expeditionday__date"))
return res["day_max"]
#
# Single parsed entry from Logbook
#
class LogbookEntry(TroggleModel):
date = models.DateField()
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double-
author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip.
# Re: the above- so this field should be "typist" or something, not "author". - AC 15 jun 09
@@ -249,12 +273,14 @@ class LogbookEntry(TroggleModel):
"""Produces a link to a new QM with the next number filled in and this LogbookEntry set as 'found by' """
return settings.URL_ROOT + r'/admin/core/qm/add/?' + r'found_by=' + str(self.pk) +'&number=' + str(self.new_QM_number())
def DayIndex(self):
return list(self.expeditionday.logbookentry_set.all()).index(self)
#
# Single Person going on a trip, which may or may not be written up (accounts for different T/U for people in same logbook entry)
#
class PersonTrip(TroggleModel):
person_expedition = models.ForeignKey(PersonExpedition,null=True)
personexpedition = models.ForeignKey("PersonExpedition",null=True)
expeditionday = models.ForeignKey("ExpeditionDay")
date = models.DateField()
@@ -271,9 +297,8 @@ class PersonTrip(TroggleModel):
return self.logbook_entry.cave and self.logbook_entry.cave or self.logbook_entry.place
def __unicode__(self):
return "%s (%s)" % (self.person_expedition, self.date)
return "%s (%s)" % (self.personexpedition, self.date)
##########################################

View File

@@ -113,6 +113,8 @@ class SurvexBlock(models.Model):
ss.save()
return ss
def DayIndex(self):
return list(self.expeditionday.survexblock_set.all()).index(self)
class SurvexTitle(models.Model):
@@ -143,7 +145,8 @@ class SurvexPersonRole(models.Model):
person = models.ForeignKey('Person', blank=True, null=True)
personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True)
persontrip = models.ForeignKey('PersonTrip', blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
def __unicode__(self):
return unicode(self.person) + " - " + unicode(self.survexblock) + " - " + unicode(self.nrole)
@@ -164,4 +167,11 @@ class SurvexScanSingle(models.Model):
return urlparse.urljoin(settings.URL_ROOT, reverse('surveyscansingle', kwargs={"path":re.sub("#", "%23", self.survexscansfolder.walletname), "file":self.name}))
class TunnelFile(models.Model):
tunnelpath = models.CharField(max_length=200)
bfontcolours = models.BooleanField()
survexscans = models.ManyToManyField("SurvexScanSingle")
survexblocks = models.ManyToManyField("SurvexBlock")
tunnelcontains = models.ManyToManyField("TunnelFile") # case when its a frame type

View File

@@ -4,7 +4,7 @@ from django.shortcuts import render_to_response
from django.http import HttpResponse, Http404
import os
import re
from troggle.core.models import SurvexScansFolder, SurvexScanSingle, SurvexBlock
from troggle.core.models import SurvexScansFolder, SurvexScanSingle, SurvexBlock, TunnelFile
# inline fileabstraction into here if it's not going to be useful anywhere else
# keep things simple and ignore exceptions everywhere for now
@@ -47,6 +47,7 @@ extmimetypes = {".txt": "text/plain",
".jpg": "image/jpeg",
}
# dead
def jgtfile(request, f):
fp = os.path.join(settings.SURVEYS, f)
# could also surf through SURVEX_DATA
@@ -175,4 +176,9 @@ def surveyscansingle(request, path, file):
def surveyscansfolders(request):
survexscansfolders = SurvexScansFolder.objects.all()
return render_to_response('survexscansfolders.html', { 'survexscansfolders':survexscansfolders, 'settings': settings })
def tunneldata(request):
tunnelfiles = TunnelFile.objects.all()
return render_to_response('tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })

View File

@@ -44,16 +44,21 @@ def personindex(request):
def expedition(request, expeditionname):
year = int(expeditionname)
expedition = Expedition.objects.get(year=year)
expedition_next = Expedition.objects.filter(year=year+1) and Expedition.objects.get(year=year+1) or None
expedition_prev = Expedition.objects.filter(year=year-1) and Expedition.objects.get(year=year-1) or None
message = "No message"
expedition = Expedition.objects.get(year=int(expeditionname))
expeditions = Expedition.objects.all()
personexpeditiondays = [ ]
for personexpedition in expedition.personexpedition_set.all():
prow = [ ]
for expeditionday in expedition.expeditionday_set.all():
pcell = { "persontrips":expeditionday.persontrip_set.filter(personexpedition=personexpedition) }
pcell["survexblocks"] = set([survexpersonrole.survexblock for survexpersonrole in expeditionday.survexpersonrole_set.filter(personexpedition=personexpedition)])
prow.append(pcell)
personexpeditiondays.append({"personexpedition":personexpedition, "personrow":prow})
message = ""
if "reload" in request.GET:
message = LoadLogbookForExpedition(expedition)
#message = str(GetPersonExpeditionNameLookup(expedition).keys())
logbookentries = expedition.logbookentry_set.order_by('date')
return render_with_context(request,'expedition.html', {'expedition': expedition, 'expedition_next':expedition_next, 'expedition_prev':expedition_prev, 'logbookentries':logbookentries, 'message':message, 'settings':settings })
return render_with_context(request,'expedition.html', {'expedition': expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'message':message, 'settings':settings })
def get_absolute_url(self):
return ('expedition', (expedition.year))

View File

@@ -45,23 +45,6 @@ def todo(request):
totallogbookentries = LogbookEntry.objects.count()
return render_with_context(request,'index.html', {'expeditions':expeditions, 'all':'all', 'totallogbookentries':totallogbookentries, "message":message})
def calendar(request, year):
week=['S','S','M','T','W','T','F']
expedition = Expedition.objects.get(year=year)
personexpeditions = expedition.personexpedition_set.all()
listdays = [ ] # the columns of the table
date = expedition.date_from
while date <= expedition.date_to:
listdays.append(date)
date += datetime.timedelta(days=1)
personexpeditiondays = [ ]
for personexpedition in personexpeditions:
pelistdays = [ (personexpedition.date_from and (personexpedition.date_from <= date < personexpedition.date_to)) for date in listdays ]
personexpeditiondays.append([personexpedition, pelistdays])
return render_with_context(request,'calendar.html', {"expedition":expedition, "listdays":listdays, "personexpeditiondays":personexpeditiondays})
def controlPanel(request):
jobs_completed=[]