summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorgoatchurch <goatchurch@ubuntu.clocksoft.dom>2009-09-11 23:56:47 +0100
committergoatchurch <goatchurch@ubuntu.clocksoft.dom>2009-09-11 23:56:47 +0100
commitced45c92f7db673968069bf3ba506a4f2259d224 (patch)
treebb9912e5f79175f50d60f8985281939c79394a25 /core
parentf21cddb2d04bcdfbb8aa5e93501902460087dee0 (diff)
downloadtroggle-ced45c92f7db673968069bf3ba506a4f2259d224.tar.gz
troggle-ced45c92f7db673968069bf3ba506a4f2259d224.tar.bz2
troggle-ced45c92f7db673968069bf3ba506a4f2259d224.zip
tunnelfiles scheme added
Diffstat (limited to 'core')
-rw-r--r--core/admin.py2
-rw-r--r--core/models.py51
-rw-r--r--core/models_survex.py14
-rw-r--r--core/view_surveys.py8
-rw-r--r--core/views_logbooks.py21
-rw-r--r--core/views_other.py17
6 files changed, 71 insertions, 42 deletions
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=[]