From 12cf3a6d534e5038b5d78b11a03cef2b81f5f852 Mon Sep 17 00:00:00 2001 From: goatchurch Date: Fri, 11 Sep 2009 23:56:47 +0100 Subject: tunnelfiles scheme added --- core/admin.py | 2 +- core/models.py | 51 +++++++++++++++++++++++++++++++++++++------------- core/models_survex.py | 14 ++++++++++++-- core/view_surveys.py | 8 +++++++- core/views_logbooks.py | 21 +++++++++++++-------- core/views_other.py | 17 ----------------- 6 files changed, 71 insertions(+), 42 deletions(-) (limited to 'core') diff --git a/core/admin.py b/core/admin.py index 37afc3b..f8fe9fe 100644 --- a/core/admin.py +++ b/core/admin.py @@ -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): diff --git a/core/models.py b/core/models.py index 08504c0..432eca4 100644 --- a/core/models.py +++ b/core/models.py @@ -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) + ########################################## diff --git a/core/models_survex.py b/core/models_survex.py index f3fc61d..9fd23c4 100644 --- a/core/models_survex.py +++ b/core/models_survex.py @@ -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 + + \ No newline at end of file diff --git a/core/view_surveys.py b/core/view_surveys.py index ab45438..0324b24 100644 --- a/core/view_surveys.py +++ b/core/view_surveys.py @@ -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 }) \ No newline at end of file diff --git a/core/views_logbooks.py b/core/views_logbooks.py index 17c88fd..1cdffff 100644 --- a/core/views_logbooks.py +++ b/core/views_logbooks.py @@ -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)) diff --git a/core/views_other.py b/core/views_other.py index 78d3bd1..3acb87d 100644 --- a/core/views_other.py +++ b/core/views_other.py @@ -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=[] -- cgit v1.2.3