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>