diff options
author | substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> | 2009-06-18 06:53:52 +0100 |
---|---|---|
committer | substantialnoninfringinguser <substantialnoninfringinguser@gmail.com> | 2009-06-18 06:53:52 +0100 |
commit | b4a63eca026a31e0f5471d7b37523e3072e2eb1d (patch) | |
tree | a3382cddd71e966807fb931d6c29a27915cb4aee | |
parent | 0306723c950296566ef6c6cf3c3add5b605e9855 (diff) | |
download | troggle-b4a63eca026a31e0f5471d7b37523e3072e2eb1d.tar.gz troggle-b4a63eca026a31e0f5471d7b37523e3072e2eb1d.tar.bz2 troggle-b4a63eca026a31e0f5471d7b37523e3072e2eb1d.zip |
[svn] Adding logbook export features. Troggle can now produce .txt or .html logbooks through the controlPanel or via an action in the LogbookEntry admin pages.
-rw-r--r-- | expo/admin.py | 11 | ||||
-rw-r--r-- | expo/views_other.py | 38 | ||||
-rw-r--r-- | export/tocavetab.py | 4 | ||||
-rw-r--r-- | templates/controlPanel.html | 43 | ||||
-rw-r--r-- | templates/logbook2005style.html | 26 | ||||
-rw-r--r-- | templates/logbook2008style.txt | 6 | ||||
-rw-r--r-- | urls.py | 4 |
7 files changed, 125 insertions, 7 deletions
diff --git a/expo/admin.py b/expo/admin.py index e4863b1..e88e1cd 100644 --- a/expo/admin.py +++ b/expo/admin.py @@ -6,6 +6,7 @@ import django.forms as forms from expo.forms import LogbookEntryForm
from django.http import HttpResponse
from django.core import serializers
+from expo.views_other import downloadLogbook
#from troggle.reversion.admin import VersionAdmin #django-reversion version control
#overriding admin save so we have the new since parsing field
@@ -50,6 +51,16 @@ class LogbookEntryAdmin(TroggleModelAdmin): date_heirarchy = ('date')
inlines = (PersonTripInline, PhotoInline, QMsFoundInline)
form = LogbookEntryForm
+
+ actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt')
+
+ def export_logbook_entries_as_html(modeladmin, request, queryset):
+ response=downloadLogbook(request=request, queryset=queryset, extension='html')
+ return response
+
+ def export_logbook_entries_as_txt(modeladmin, request, queryset):
+ response=downloadLogbook(request=request, queryset=queryset, extension='txt')
+ return response
class PersonExpeditionInline(admin.TabularInline):
model = PersonExpedition
diff --git a/expo/views_other.py b/expo/views_other.py index c6da4b3..f56f8bc 100644 --- a/expo/views_other.py +++ b/expo/views_other.py @@ -1,6 +1,7 @@ from troggle.expo.models import Cave, Expedition, Person, LogbookEntry, PersonExpedition, PersonTrip, Photo
import troggle.settings as settings
from django import forms
+from django.template import loader, Context
from django.db.models import Q
import databaseReset
import re
@@ -80,7 +81,7 @@ def controlPanel(request): else:
return HttpResponseRedirect(reverse('auth_login'))
- return render_response(request,'controlPanel.html', {'caves':Cave.objects.all(),'jobs_completed':jobs_completed})
+ return render_response(request,'controlPanel.html', {'caves':Cave.objects.all(),'expeditions':Expedition.objects.all(),'jobs_completed':jobs_completed})
def downloadCavetab(request):
from export import tocavetab
@@ -96,7 +97,42 @@ def downloadSurveys(request): tosurveys.writeCaveTab(response)
return response
+def downloadLogbook(request,year=None,extension=None,queryset=None):
+
+ if year:
+ expedition=Expedition.objects.get(year=year)
+ logbook_entries=LogbookEntry.objects.filter(expedition=expedition)
+ filename='logbook'+year
+ elif queryset:
+ logbook_entries=queryset
+ filename='logbook'
+ else:
+ return response(r"Error: Logbook downloader doesn't know what year you want")
+
+ if 'year' in request.GET:
+ year=request.GET['year']
+ if 'extension' in request.GET:
+ extension=request.GET['extension']
+
+
+
+ if extension =='txt':
+ response = HttpResponse(mimetype='text/plain')
+ style='2008'
+ elif extension == 'html':
+ response = HttpResponse(mimetype='text/html')
+ style='2005'
+
+ template='logbook'+style+'style.'+extension
+ response['Content-Disposition'] = 'attachment; filename='+filename+'.'+extension
+ t=loader.get_template(template)
+ c=Context({'logbook_entries':logbook_entries})
+ response.write(t.render(c))
+ return response
+
+
def downloadQMs(request):
+ # Note to self: use get_cave method for the below
if request.method=='GET':
try:
cave=Cave.objects.get(kataster_number=request.GET['cave_id'])
diff --git a/export/tocavetab.py b/export/tocavetab.py index ab7a2ee..2ffc5be 100644 --- a/export/tocavetab.py +++ b/export/tocavetab.py @@ -1,9 +1,7 @@ import troggle.expo.models as models
from django.conf import settings
-import csv
-import re
-import os
+import csv, re, os
#format of CAVETAB2.CSV is
headers=['KatasterNumber','KatStatusCode','Entrances','UnofficialNumber','MultipleEntrances','AutogenFile','LinkFile','LinkEntrance','Name','UnofficialName',
diff --git a/templates/controlPanel.html b/templates/controlPanel.html index 49725e1..efaee62 100644 --- a/templates/controlPanel.html +++ b/templates/controlPanel.html @@ -32,9 +32,9 @@ <h3>Import (non-destructive):</h3>
<form name="import" method="post" action="">
<table>
+<tr><td>people from folk.csv using parsers\people.py</td><td><input type="checkbox" name="import_people"/></td></tr>
<tr><td>caves from cavetab2.csv using parsers\cavetab.py</td><td> <input type="checkbox" class="parser" name="import_cavetab"/></td></tr>
<tr><td>logbook entries using parsers\logbooks.py</td><td><input type="checkbox" name="import_logbooks"/></td></tr>
-<tr><td>people from folk.csv using parsers\people.py</td><td><input type="checkbox" name="import_people"/></td></tr>
<tr><td>QMs using parsers\QMs.py</td><td><input type="checkbox" name="import_QMs" /></td></tr>
<tr><td>survey scans using parsers\surveys.py</td><td><input type="checkbox" name="import_surveys" /></td></tr>
<tr><td>survex data using parsers\survex.py</td><td><input type="checkbox" name="import_survex" /></td></tr>
@@ -50,8 +50,13 @@ </form>
-<h3>Export to csv:</h3>
+<h3>Export to legacy formats:</h3>
<table>
+
+<th>
+ <td>Export onto server</td>
+ <td>Export and Download</td>
+</th>
<tr>
<td>
caves to cavetab2.csv
@@ -75,6 +80,40 @@ surveys to Surveys.csv
</td>
<td>
+
+ </td>
+ <td>
+ <form name="export" method="get" action={% url downloadlogbook %}>
+ <p>Download a logbook file which is dynamically generated by Troggle.</p>
+
+ <p>
+ Expedition year:
+ <select name="year">
+ {% for expedition in expeditions %}
+ <option value="{{expedition}}"> {{expedition}} </option>
+ {% endfor %}
+ </select>
+ </p>
+
+ <p>
+ Output style:
+ <select name="extension">
+ <option value="txt">.txt file with MediaWiki markup - 2008 style</option>
+ <option value="html">.html file - 2005 style</option>
+ </select>
+ </p>
+ <p>
+ <input name="download_logbook" type="submit" value="Download logbook" />
+ </p>
+ </form>
+ </td>
+</tr>
+
+<tr>
+ <td>
+ surveys to Surveys.csv
+ </td>
+ <td>
<form name="export" method="post" action="">
<p>Overwrite the existing Surveys.csv file with one generated by Troggle.</p>
<input disabled name="export_surveys" type="submit" value="Update {{settings.SURVEYS}}noinfo/Surveys.csv" />
diff --git a/templates/logbook2005style.html b/templates/logbook2005style.html new file mode 100644 index 0000000..39205f1 --- /dev/null +++ b/templates/logbook2005style.html @@ -0,0 +1,26 @@ +<html>
+<head><title>{{logbook_entries.0.expedition}} Expo Logbook</title></head>
+<link rel="stylesheet" type="text/css" href="../../css/main2.css" />
+<style type="text/css">
+.tripdate { float: left;}
+.trippeople { float: right;}
+.triptitle { font-size: 120%; text-align: center; font-weight: bold; clear: both }
+.timeug { text-align: right; font-weight: bold }
+p { clear: both }
+</style>
+<body>
+
+<h1>Expo {{logbook_entries.0.expedition}}</h1>
+
+{%for logbook_entry in logbook_entries%}
+<hr />
+
+<div class="tripdate" id="t{{logbook_entry.date}}A">{{logbook_entry.date}}</div>
+<div class="trippeople"><u>{{logbook_entry.author.person}}</u>
+{% for persontrip in logbook_entry.persontrip_set.all %}{{ persontrip.person_expedition.person }} {{ persontrip.person_expedition.time_underground }}, {% endfor %}
+</div>
+
+<div class="triptitle">{{logbook_entry.place}} - {{logbook_entry.title}}</div>
+
+{{logbook_entry.text|safe}}
+{% endfor %}
diff --git a/templates/logbook2008style.txt b/templates/logbook2008style.txt new file mode 100644 index 0000000..a7fbea7 --- /dev/null +++ b/templates/logbook2008style.txt @@ -0,0 +1,6 @@ +=Expo {{logbook_entries.0.expedition}} logbook ==
+{%for logbook_entry in logbook_entries%}
+==={{logbook_entry.date}} | {{logbook_entry.place}} - {{logbook_entry.title}} | {% for persontrip in logbook_entry.persontrip_set.all %}{{ persontrip.person_expedition.person }} {{ persontrip.person_expedition.time_underground }}, {% endfor %}===
+
+{{logbook_entry.text|safe}}
+{% endfor %}
\ No newline at end of file @@ -61,7 +61,9 @@ urlpatterns = patterns('', url(r'^controlpanel/?$', views_other.controlPanel, name="controlpanel"),
url(r'^CAVETAB2\.CSV/?$', views_other.downloadCavetab, name="downloadcavetab"),
- url(r'^Surveys\.csv/?$', views_other.downloadSurveys, name="downloadsurveys"),
+ url(r'^Surveys\.csv/?$', views_other.downloadSurveys, name="downloadsurveys"),
+ url(r'^logbook(?P<year>\d\d\d\d)\.(?P<extension>.*)/?$',views_other.downloadLogbook),
+ url(r'^logbook/?$',views_other.downloadLogbook, name="downloadlogbook"),
url(r'^cave/(?P<cave_id>[^/]+)/qm\.csv/?$', views_other.downloadQMs, name="downloadqms"),
(r'^downloadqms$', views_other.downloadQMs),
url(r'^cave/(?P<cave_id>[^/]+)(?P<subcave>/.*)/?$', subcave, name="subcave"),
|