From 60735a9b3acae9d883589c51aa953ced40cc7488 Mon Sep 17 00:00:00 2001 From: substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> Date: Wed, 13 May 2009 05:43:20 +0100 Subject: [PATCH] [svn] merge the trip table to have surveys by date Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8221 by julian @ 1/24/2009 2:01 PM --- expo/models.py | 28 +++++++++++++++ expo/models_survex.py | 12 +++++++ media/css/main2.css | 11 ++++++ parsers/cavetab.py | 18 ++++++++++ parsers/logbooks.py | 16 +++++---- templates/index.html | 21 ++++++++--- templates/personexpedition.html | 64 +++++++++++++++++++++------------ templates/survexblock.html | 8 ++--- 8 files changed, 139 insertions(+), 39 deletions(-) diff --git a/expo/models.py b/expo/models.py index ee3179b..b8885ea 100644 --- a/expo/models.py +++ b/expo/models.py @@ -86,6 +86,34 @@ class PersonExpedition(models.Model): is_guest = models.BooleanField(default=False) nickname = models.CharField(max_length=100,blank=True,null=True) + def GetPersonroles(self): + res = [ ] + for personrole in self.personrole_set.order_by('survex_block'): + if res and res[-1]['survexpath'] == personrole.survex_block.survexpath: + res[-1]['roles'] += ", " + str(personrole.role) + else: + res.append({'date':personrole.survex_block.date, 'survexpath':personrole.survex_block.survexpath, 'roles':str(personrole.role)}) + print res + return res + + def GetPersonChronology(self): + res = { } + for persontrip in self.persontrip_set.all(): + a = res.setdefault(persontrip.date, { }) + a.setdefault("persontrips", [ ]).append(persontrip) + for personrole in self.personrole_set.all(): + a = res.setdefault(personrole.survex_block.date, { }) + b = a.setdefault("personroles", { }) + survexpath = personrole.survex_block.survexpath + + if b.get(survexpath): + b[survexpath] += ", " + str(personrole.role) + else: + b[survexpath] = str(personrole.role) +# needs converting dict into list + return sorted(res.items()) + + # deprecated def GetPossibleNameForms(self): res = [ ] diff --git a/expo/models_survex.py b/expo/models_survex.py index 4b65357..1a7251f 100644 --- a/expo/models_survex.py +++ b/expo/models_survex.py @@ -27,6 +27,9 @@ class SurvexBlock(models.Model): end_file = models.CharField(max_length=200, blank=True, null=True) end_char = models.IntegerField(blank=True, null=True) + class Meta: + ordering = ('date', 'survexpath') + def __unicode__(self): return unicode(self.name) @@ -37,6 +40,15 @@ class SurvexBlock(models.Model): fin.close() return res + def GetPersonroles(self): + res = [ ] + for personrole in self.personrole_set.order_by('personexpedition'): + if res and res[-1]['person'] == personrole.personexpedition.person: + res[-1]['roles'] += ", " + str(personrole.role) + else: + res.append({'person':personrole.personexpedition.person, 'expeditionyear':personrole.personexpedition.expedition.year, 'roles':str(personrole.role)}) + print res + return res class PersonRole(models.Model): diff --git a/media/css/main2.css b/media/css/main2.css index fa9d3c2..b07c65c 100644 --- a/media/css/main2.css +++ b/media/css/main2.css @@ -142,6 +142,17 @@ p.indent margin-left:10px; } +table.survexcontibutions td.date +{ width:90px; } +table.survexcontibutions td.roles +{ width:100px; background-color:#feeeed; } +table.survexcontibutions td.survexblock +{ width:260px; background-color:#feeeed; } +table.survexcontibutions td.trip +{ width:190px; } +table.survexcontibutions td.place +{ width:140px; } + #expoHeader { width:100%; position:relative; diff --git a/parsers/cavetab.py b/parsers/cavetab.py index 25a9d81..7f3146a 100644 --- a/parsers/cavetab.py +++ b/parsers/cavetab.py @@ -262,3 +262,21 @@ for line in caveReader : newCaveAndEntrance = models.CaveAndEntrance(cave = newCave, entrance = newEntrance, entrance_letter = entrance_letter) newCaveAndEntrance.save() + + +# lookup function modelled on GetPersonExpeditionNameLookup +Gcavelookup = None +def GetCaveLookup(): + global Gcavelookup + if Gcavelookup: + return Gcavelookup + Gcavelookup = {"NONEPLACEHOLDER":None} + for cave in models.Cave.objects.all(): + Gcavelookup[cave.official_name.lower()] = cave + if cave.kataster_number: + Gcavelookup[cave.kataster_number] = cave + if cave.unofficial_number: + Gcavelookup[cave.unofficial_number] = cave + return Gcavelookup + + \ No newline at end of file diff --git a/parsers/logbooks.py b/parsers/logbooks.py index 3de28d7..9ad1962 100644 --- a/parsers/logbooks.py +++ b/parsers/logbooks.py @@ -4,6 +4,7 @@ import troggle.settings as settings import troggle.expo.models as models from troggle.parsers.people import GetPersonExpeditionNameLookup +from troggle.parsers.cavetab import GetCaveLookup import csv import re @@ -64,13 +65,14 @@ def GetTripCave(place): #need to be fuzzier about matching h def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_underground): trippersons, author = GetTripPersons(trippeople, expedition, logtime_underground) - tripCave = GetTripCave(place) +# tripCave = GetTripCave(place) lbo = models.LogbookEntry(date=date, place=place, title=title[:50], text=text, author=author, expedition=expedition) - if tripCave: - lbo.cave=tripCave + lbo.cave=GetCaveLookup().get(place) + print "pppp", place, lbo.cave + lbo.save() - print "ttt", date, place + #print "ttt", date, place for tripperson, time_underground in trippersons: pto = models.PersonTrip(person_expedition = tripperson, place=place, date=date, time_underground=time_underground, logbook_entry=lbo, is_logbook_entry_author=(tripperson == author)) @@ -156,7 +158,7 @@ def Parseloghtml01(year, expedition, txt): tripid = mtripid and mtripid.group(1) or "" tripheader = re.sub("</?(?:[ab]|span)[^>]*>", "", tripheader) - #print [tripheader] + print [tripheader] #continue tripdate, triptitle, trippeople = tripheader.split("|") @@ -234,7 +236,7 @@ yearlinks = [ ("1999", "1999/log.htm", Parseloghtml01), ("1998", "1998/log.htm", Parseloghtml01), ("1997", "1997/log.htm", Parseloghtml01), - #("1996", "1996/log.htm", Parseloghtml01), + ("1996", "1996/log.htm", Parseloghtml01), ] def SetDatesFromLogbookEntries(expedition): @@ -303,7 +305,7 @@ def LoadLogbooks(): models.LogbookEntry.objects.all().delete() expowebbase = os.path.join(settings.EXPOWEB, "years") #yearlinks = [ ("2001", "2001/log.htm", Parseloghtml01), ] #overwrite - #yearlinks = [ ("1997", "1997/log.htm", Parseloghtml01),] # overwrite + #yearlinks = [ ("1996", "1996/log.htm", Parseloghtml01),] # overwrite for year, lloc, parsefunc in yearlinks: expedition = models.Expedition.objects.filter(year = year)[0] diff --git a/templates/index.html b/templates/index.html index 0122bdd..bbc4312 100644 --- a/templates/index.html +++ b/templates/index.html @@ -7,11 +7,22 @@ <h2>The unfinished front page</h2> <b>Work down through an expedition page link</b> -<p class="indent">Remaining work: continue to build up the network; tables of trips per year per person; parse 1996 logbook; -continue to correct the name matching and spelling; detect T/U on log entries; match caves to log entries; see the cave list; -simplify the survex parsing code (if necessary); vast front-page layout table of folks and caving trips and years; -links between logbooks and survex blocks to cave things; where are the subcaves; mini-tree of survexblocks; connect sketches -to caves to survey blocks and render thumbnailwise; all images to start appearing in pages; and so on</p> +<p class="indent"><b>Remaining work:</b> + +<p>continue to build up the network; </p> +<p>tables of trips per year per person;</p> +<p>parse 1995-1976 logbooks; </p> +<p>continue to correct the name matching and spelling; </p> +<p>detect T/U on log entries; </p> +<p>match caves to log entries; </p> +<p>see the cave list;</p> +<p>simplify the survex parsing code (if necessary); </p> +<p>vast front-page layout table of folks and caving trips and years; </p> +<p>links between logbooks and survex blocks to cave things; </p> +<p>where are the subcaves; </p> +<p>mini-tree of survexblocks; </p> +<p>connect sketches to caves to survey blocks and render thumbnailwise; </p> +<p>all images to start appearing in pages; and so on</p> <h3>{{message}}</h3> diff --git a/templates/personexpedition.html b/templates/personexpedition.html index bbbc067..07dcb54 100644 --- a/templates/personexpedition.html +++ b/templates/personexpedition.html @@ -9,32 +9,50 @@ <h3>{{message}}</h3> -<p>Needs links fore and back through expeditions attended by this person (or as a complete barchart type list with one date in bold)</p> -<p>Needs lists below to be sorted by date, and the duplicates removed from survey role list</p> -<p>Finally, a correspondence between these two columns</p> +<p><b><a href="{% url expedition personexpedition.expedition.year %}">Main page for expedition: {{personexpedition.expedition}}</a></b></p> -<div id="col2"> -<table class="survexcontibutions"> -<tr><th>Date</th><th>Place</th><th>Role</th></tr> -{% for personrole in personexpedition.personrole_set.all %} - <tr> - <td>{{personrole.survex_block.date}}</td> - <td><a href="{% url survexblock personrole.survex_block.survexpath %}">{{personrole.survex_block.survexpath}}</a></td> - <td>{{personrole.role}}</td> - </tr> +<p>List of other expos by this person</p> +<p> +{% for otherpersonexpedition in personexpedition.person.personexpedition_set.all %} +{% ifequal otherpersonexpedition personexpedition %} + | <b>{{otherpersonexpedition.expedition.year}}</b> +{% else %} + | <a href="{% url personexpedition personexpedition.person.href otherpersonexpedition.expedition.year %}">{{otherpersonexpedition.expedition.year}}</a> +{% endifequal %} {% endfor %} -</table> -</div> +</p> -<div id="col1"> -<table class="expeditionlogbooks"> -<tr><th>Date</th><th>Title</th><th>Place</th></tr> -{% for persontrip in personexpedition.persontrip_set.all %} - <tr> - <td>{{persontrip.date}}</td> - <td><a href="{% url logbookentry persontrip.logbook_entry.href %}">{{persontrip.logbook_entry.title|safe}}</td> - <td>{{persontrip.place}}</td> - </tr> +<h3>Table of all trips and surveys aligned by date</h3> +<div> +<table class="survexcontibutions"> +<tr><th>Date</th><th>Trips</th><th>Surveys</th></tr> +{% for persondate in personexpedition.GetPersonChronology %} +<tr> + <td class="date">{{persondate.0}}</td> + + <td> + <table> + {% for persontrip in persondate.1.persontrips %} + <tr> + <td class="trip"><a href="{% url logbookentry persontrip.logbook_entry.href %}">{{persontrip.logbook_entry.title|safe}}</a></td> + <td class="place">{{persontrip.place}}</td> + </tr> + {% endfor %} + </table> + </td> + + <td> + <table> + {% for personsurvexroles in persondate.1.personroles.items %} + <tr> + <td class="survexblock"><a href="{% url survexblock personsurvexroles.0 %}">{{personsurvexroles.0}}</a></td> + <td class="roles">{{personsurvexroles.1}}</td> + </tr> + {% endfor %} + </table> + </td> + +</tr> {% endfor %} </table> </div> diff --git a/templates/survexblock.html b/templates/survexblock.html index ef392df..dedf09f 100644 --- a/templates/survexblock.html +++ b/templates/survexblock.html @@ -29,10 +29,10 @@ <p>Date: {{survexblock.date}}</p> <table> -{% for personrole in survexblock.personrole_set.all %} +{% for personrole in survexblock.GetPersonroles %} <tr> - <td><a href="{% url personexpedition personrole.personexpedition.person.href personrole.personexpedition.expedition.year%}">{{personrole.personexpedition.person}}</a></td> - <td>{{personrole.role}}</td> + <td><a href="{% url personexpedition personrole.person.href personrole.expeditionyear%}">{{personrole.person}}</a></td> + <td>{{personrole.roles}}</td> </tr> {% endfor %} </table> @@ -40,7 +40,7 @@ </div> -<div id="col1"> +<div class="survexblock"> {{ftext|survex_to_html}} </div>