diff --git a/expo/admin.py b/expo/admin.py index dd1be90..d8adbe2 100644 --- a/expo/admin.py +++ b/expo/admin.py @@ -90,7 +90,7 @@ admin.site.register(PersonRole) admin.site.register(PersonExpedition,PersonExpeditionAdmin) admin.site.register(Role) admin.site.register(LogbookEntry, LogbookEntryAdmin) -admin.site.register(PersonTrip) +#admin.site.register(PersonTrip) admin.site.register(QM, QMAdmin) admin.site.register(Survey, SurveyAdmin) admin.site.register(ScannedImage) diff --git a/expo/models.py b/expo/models.py index abe1870..13d0b7b 100644 --- a/expo/models.py +++ b/expo/models.py @@ -238,7 +238,7 @@ class LogbookEntry(TroggleModel): author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip title = models.CharField(max_length=200) cave = models.ForeignKey('Cave',blank=True,null=True) - place = models.CharField(max_length=100,blank=True,null=True) + place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave") text = models.TextField() slug = models.SlugField(max_length=50) #href = models.CharField(max_length=100) @@ -270,28 +270,36 @@ class PersonTrip(TroggleModel): # this will be a foreign key of the place(s) the trip went through # possibly a trip has a plurality of triplets pointing into it - place = models.CharField(max_length=100) - # should add cave thing here (copied from logbook maybe) - date = models.DateField() - time_underground = models.FloatField() + #place = models.CharField(max_length=100) + #date = models.DateField() + time_underground = models.FloatField(help_text="In decimal hours") logbook_entry = models.ForeignKey(LogbookEntry) is_logbook_entry_author = models.BooleanField() + def date(self): + return self.logbook_entry.date + + def place(self): + if self.logbook_entry.cave: + return self.logbook_entry.cave + else: + return self.logbook_entry.place + #persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', blank=True,null=True) #persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', blank=True,null=True) def __unicode__(self): - return "%s %s (%s)" % (self.person_expedition, self.place, self.date) + return "%s %s (%s)" % (self.person_expedition, self.place(), self.date()) def get_persons_next_trip(self): try: - return PersonTrip.objects.filter(person_expedition__person=self.person_expedition.person, date__gt=self.date)[0] + return PersonTrip.objects.filter(person_expedition__person=self.person_expedition.person, person_expedition__date__gt=self.date)[0] except: return def get_persons_previous_trip(self): try: - return PersonTrip.objects.filter(person_expedition__person=self.person_expedition.person, date__lt=self.date)[0] + return PersonTrip.objects.filter(person_expedition__person=self.person_expedition.person, person_expedition__date__lt=self.date)[0] except: return diff --git a/parsers/logbooks.py b/parsers/logbooks.py index 6017f15..281a1b2 100644 --- a/parsers/logbooks.py +++ b/parsers/logbooks.py @@ -87,12 +87,13 @@ def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_ lbo, created=save_carefully(models.LogbookEntry, lookupAttribs, nonLookupAttribs) for tripperson, time_underground in trippersons: - lookupAttribs={'person_expedition':tripperson, 'date':date} - nonLookupAttribs={'place':place,'time_underground':time_underground,'logbook_entry':lbo,'is_logbook_entry_author':(tripperson == author)} + lookupAttribs={'person_expedition':tripperson, 'logbook_entry':lbo} + nonLookupAttribs={'time_underground':time_underground,'is_logbook_entry_author':(tripperson == author)} save_carefully(models.PersonTrip, lookupAttribs, nonLookupAttribs) def ParseDate(tripdate, year): + """ Interprets dates in the expo logbooks and returns a correct datetime.date object """ mdatestandard = re.match("(\d\d\d\d)-(\d\d)-(\d\d)", tripdate) mdategoof = re.match("(\d\d?)/0?(\d)/(20|19)?(\d\d)", tripdate) if mdatestandard: @@ -256,10 +257,14 @@ yearlinks = [ ] def SetDatesFromLogbookEntries(expedition): + """ + Sets the date_from and date_to field for an expedition based on persontrips. + Then sets the expedition date_from and date_to based on the personexpeditions. + """ for personexpedition in expedition.personexpedition_set.all(): - persontrips = personexpedition.persontrip_set.order_by('date') - personexpedition.date_from = min([persontrip.date for persontrip in persontrips] or [None]) - personexpedition.date_to = max([persontrip.date for persontrip in persontrips] or [None]) + persontrips = personexpedition.persontrip_set.order_by('logbook_entry__date') + personexpedition.date_from = min([persontrip.logbook_entry.date for persontrip in persontrips] or [None]) + personexpedition.date_to = max([persontrip.logbook_entry.date for persontrip in persontrips] or [None]) personexpedition.save() # The below is all unnecessary, just use the built in get_previous_by_date and get_next_by_date