summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/views/logbooks.py55
-rw-r--r--templates/expedition.html1
-rw-r--r--templates/logreport.html72
-rw-r--r--urls.py3
4 files changed, 130 insertions, 1 deletions
diff --git a/core/views/logbooks.py b/core/views/logbooks.py
index 6e207ca..8f7d002 100644
--- a/core/views/logbooks.py
+++ b/core/views/logbooks.py
@@ -218,6 +218,61 @@ def personexpedition(request, slug="", year=""):
print(msg)
return render(request, "errors/generic.html", {"message": msg})
+def logreport(request, year=1999):
+ """
+ Remember that 'personexpedition__expedition' is interpreted by Django to mean the
+ 'expedition' object which is connected by a foreign key to the 'personexpedition'
+ object, which is a field of the PersonLogEntry object:
+ PersonLogEntry.objects.filter(personexpedition__expedition=expo)
+
+"""
+ print(f"logreport(): begun")
+
+ expeditions = Expedition.objects.all() # top menu only, evaluated only when template renders
+ dates = None
+ dateditems = None
+
+
+ try:
+ expo = Expedition.objects.get(year=int(year))
+ except:
+ message = (
+ "Expedition not found - database apparently empty, you probably need to do a full re-import of all data."
+ )
+ return render(request, "errors/generic.html", {"message": message})
+
+ entries = expo.logbookentry_set.all() # lazy list
+ dateditems = list(entries) # evaluates the Django query and hits db
+ dates = sorted(set([item.date for item in dateditems]))
+
+ try:
+ for entry in dateditems:
+
+ people = PersonLogEntry.objects.filter(logbook_entry=entry)
+ entry.who = []
+ for p in people:
+ if p.is_logbook_entry_author:
+ entry.author = p
+ else:
+ entry.who.append(p)
+
+
+ print(f"logreport(): trying..")
+ context = {
+ "year": year,
+ "expedition": expo,
+ "expeditions": expeditions,
+ "settings": settings,
+ "dateditems": dateditems,
+ "dates": dates,
+ }
+ print(f"logreport(): rendering..")
+ return render(request, "logreport.html", context)
+
+ except Exception as e:
+ msg = f' Logbook report for year:"{year}" not implemented yet\n{e}\n {context}'
+ print(msg)
+ return render(request, "errors/generic.html", {"message": msg})
def logbookentry(request, date, slug):
# start = time.time()
diff --git a/templates/expedition.html b/templates/expedition.html
index e68afa6..0aa8d8c 100644
--- a/templates/expedition.html
+++ b/templates/expedition.html
@@ -23,6 +23,7 @@
<li> <a href="/wallets/year/{{expedition.year}}">wallet completion status</a> for this Expo
<li> <a href="/aliases/{{expedition.year}}">alias names</a> for this Expo
<li> <a href="/years/{{expedition.year}}/{{expedition.logbookfile}}">full logbook</a> for this Expo
+<li> <a href="/logreport/{{expedition.year}}">logbook report</a> for this Expo
<li> <a href="/logbookedit/">new logbook entry</a> for this Expo
{% if logged_in %}
<p>Reparse and reload this year's logbook by clicking here: <a href="/expedition/{{expedition.year}}?reload">RELOAD</a>
diff --git a/templates/logreport.html b/templates/logreport.html
new file mode 100644
index 0000000..087792e
--- /dev/null
+++ b/templates/logreport.html
@@ -0,0 +1,72 @@
+{% extends "base.html" %}
+{% block title %}Log Report {{year}} for {{expedition.name}}{% endblock %}
+{% block related %}
+{% endblock %}
+
+{% block content %}
+<!-- templates/logreport.html - this text visible because this template has been included -->
+
+<h2>Logbook report for {{expedition.name}}</h2>
+
+<p><b>Other years:</b>
+{% for otherexpedition in expeditions %}
+ {% if otherexpedition == expedition %}
+ | <b>{{otherexpedition.year}}</b>
+ {% else %}
+ | <a href="/logreport/{{otherexpedition.year}}">{{ otherexpedition.year }}</a>
+ {% endif %}
+{% endfor %}
+</p>
+
+
+
+<h3 id="trips"> {{expedition.name}} - Logbook entries per day</h3>
+
+<table class="expeditionlogbooks">
+<tr><th>Date</th><th>Logged trips and diary entries</th><th>Cave</th><th>Text..</th><th>Author</th><th>Who else</th></tr>
+{% regroup dateditems|dictsort:"date" by date as dates %}
+{% for date in dates %}
+ {% for entry in date.list %}
+ <tr>
+ <td>{{date.grouper|date:"D d M Y"}}</td>
+ <td>
+ <a href="{{ entry.get_absolute_url }}">{{entry.title|truncatechars:30|safe|striptags}}</a>&nbsp;
+ </td>
+ <td>
+ {% if entry.cave %}
+ <a href="/{{ entry.cave.url }}">{{entry.cave|safe}}</a><br/>
+ {% else %}
+ &nbsp;
+ {% endif %}
+ </td>
+ <td>
+ {{entry.text|striptags|safe|truncatechars:30}}&nbsp;
+ </td>
+ <td>
+ <a href="/personexpedition/{{entry.author.personexpedition.person}}/{{year}}">{{entry.author.nickname_used}}</a>
+ </td>
+ <td>
+ {% if entry.who %}
+ {% for w in entry.who %}
+ <a href="/personexpedition/{{w.personexpedition.person}}/{{year}}">{{w.nickname_used}}</a>,
+ {% endfor %}
+ {% endif %}
+
+ </td>
+ </tr>
+ {% endfor %}
+{% endfor %}
+</table>
+
+<p>See also the
+<ul>
+<li> <a href="/expedition/{{expedition.year}}">full calendar page</a> for this Expo (slow page)
+<li> <a href="/years/{{expedition.year}}/">documentation index</a> for this Expo
+<li> <a href="/wallets/year/{{expedition.year}}">wallet completion status</a> for this Expo
+<li> <a href="/aliases/{{expedition.year}}">alias names</a> for this Expo
+<li> <a href="/years/{{expedition.year}}/{{expedition.logbookfile}}">full logbook</a> for this Expo
+<li> <a href="/logbookedit/">new logbook entry</a> for this Expo
+</ul>
+
+<h3> {{expedition.name}} </h3>
+{% endblock %}
diff --git a/urls.py b/urls.py
index 4fa5eba..6278d92 100644
--- a/urls.py
+++ b/urls.py
@@ -15,7 +15,7 @@ from troggle.core.views.expo import (pubspage, indexpage, editexpopage, expofile
expofilessingle, expopage, map, mapfile,
mediapage, spider)
from troggle.core.views.logbooks import (QMs_jsonListView, Expeditions_jsonListView,
- Expeditions_tsvListView, expedition,
+ Expeditions_tsvListView, expedition, logreport,
get_logbook_entries, get_people,
logbookentry, notablepersons, person,
personexpedition)
@@ -149,6 +149,7 @@ trogglepatterns = [
# Logbook entries
re_path(r'^logbookentry/(?P<date>.*)/(?P<slug>.*)/?$', logbookentry,name="logbookentry"),
re_path(r'^logbook$', exportlogbook, name='exportlogbook'),
+ path('logreport/<slug:year>', logreport, name='logreport'),
# Internal. editfile.html template uses these internally
re_path(r'^getPeople/(?P<expeditionslug>.*)', get_people, name = "get_people"),