diff options
Diffstat (limited to 'core/views_logbooks.py')
-rw-r--r-- | core/views_logbooks.py | 96 |
1 files changed, 90 insertions, 6 deletions
diff --git a/core/views_logbooks.py b/core/views_logbooks.py index 1cdffff..cb7de3a 100644 --- a/core/views_logbooks.py +++ b/core/views_logbooks.py @@ -1,14 +1,18 @@ from django.shortcuts import render_to_response
-from troggle.core.models import Expedition, Person, PersonExpedition, PersonTrip, LogbookEntry
+from troggle.core.models import Expedition, Person, PersonExpedition, PersonTrip, LogbookEntry, SurvexBlock
import troggle.core.models as models
import troggle.settings as settings
import django.db.models
from troggle.parsers.logbooks import LoadLogbookForExpedition
from troggle.parsers.people import GetPersonExpeditionNameLookup
-from troggle.core.forms import PersonForm
+from troggle.core.forms import PersonForm, getTripForm
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse
+from django.template import Context, loader
from utils import render_with_context
+import os.path
+import troggle.parsers.logbooks as logbookparsers
+from django.template.defaultfilters import slugify
# Django uses Context, not RequestContext when you call render_to_response. We always want to use RequestContext, so that django adds the context from settings.TEMPLATE_CONTEXT_PROCESSORS. This way we automatically get necessary settings variables passed to each template. So we use a custom method, render_response instead of render_to_response. Hopefully future Django releases will make this unnecessary.
@@ -47,18 +51,23 @@ def expedition(request, expeditionname): expedition = Expedition.objects.get(year=int(expeditionname))
expeditions = Expedition.objects.all()
personexpeditiondays = [ ]
+ dateditems = list(expedition.logbookentry_set.all()) + list(expedition.survexblock_set.all())
+ dates = list(set([item.date for item in dateditems]))
+ dates.sort()
for personexpedition in expedition.personexpedition_set.all():
prow = [ ]
- for expeditionday in expedition.expeditionday_set.all():
- pcell = { "persontrips":expeditionday.persontrip_set.filter(personexpedition=personexpedition) }
- pcell["survexblocks"] = set([survexpersonrole.survexblock for survexpersonrole in expeditionday.survexpersonrole_set.filter(personexpedition=personexpedition)])
+ for date in dates:
+ pcell = { "persontrips": PersonTrip.objects.filter(personexpedition=personexpedition,
+ logbook_entry__date=date) }
+ pcell["survexblocks"] = set(SurvexBlock.objects.filter(survexpersonrole__personexpedition=personexpedition,
+ date = date))
prow.append(pcell)
personexpeditiondays.append({"personexpedition":personexpedition, "personrow":prow})
message = ""
if "reload" in request.GET:
message = LoadLogbookForExpedition(expedition)
- return render_with_context(request,'expedition.html', {'expedition': expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'message':message, 'settings':settings })
+ return render_with_context(request,'expedition.html', {'expedition': expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'message':message, 'settings':settings, 'dateditems': dateditems })
def get_absolute_url(self):
return ('expedition', (expedition.year))
@@ -154,3 +163,78 @@ def experimental(request): totalsurvexlength = sum([survexleg.tape for survexleg in survexlegs])
return render_with_context(request, 'experimental.html', { "nsurvexlegs":len(survexlegs), "totalsurvexlength":totalsurvexlength, "legsbyexpo":legsbyexpo })
+def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
+ expedition = Expedition.objects.get(year=expeditionyear)
+ PersonTripFormSet, TripForm = getTripForm(expedition)
+ if pslug and pdate:
+ previousdate = datetime.date(*[int(x) for x in pdate.split("-")])
+ previouslbe = LogbookEntry.objects.get(slug = pslug, date = previousdate, expedition__year = year)
+ assert previouslbe.filename
+ if request.method == 'POST': # If the form has been submitted...
+ tripForm = TripForm(request.POST) # A form bound to the POST data
+ personTripFormSet = PersonTripFormSet(request.POST)
+ dateStr = tripForm.cleaned_data["date"].strftime("%Y-%m-%d")
+ directory = os.path.join(settings.EXPOWEB,
+ "years",
+ expedition.year,
+ "autologbook")
+ filename = os.path.join(directory,
+ dateStr + "." + slugify(tripForm.cleaned_data["title"])[:50] + ".html")
+ if tripForm.is_valid() and personTripFormSet.is_valid(): # All validation rules pass
+ if not os.path.isdir(directory):
+ os.mkdir(directory)
+ if pslug and pdate:
+ delLogbookEntry(previouslbe)
+ f = open(filename, "w")
+ template = loader.get_template('dataformat/logbookentry.html')
+ context = Context({'trip': tripForm.cleaned_data,
+ 'persons': personTripFormSet.cleaned_data,
+ 'date': dateStr,
+ 'expeditionyear': expeditionyear})
+ f.write(template.render(context))
+ f.close()
+ print logbookparsers.parseAutoLogBookEntry(filename)
+ return HttpResponseRedirect(reverse('expedition', args=[expedition.year])) # Redirect after POST
+ else:
+ if slug and date:
+ if lbe.cave:
+ tripForm = TripForm(date = previousdate,
+ title = previouslbe.title,
+ cave = previouslbe.cave.reference(),
+ location = None,
+ caveOrLocation = "cave",
+ html = previouslbe.text)
+ else:
+ tripForm = TripForm(date = previousdate,
+ title = previouslbe.title,
+ cave = None,
+ location = previouslbe.location,
+ caveOrLocation = "location",
+ html = previouslbe.text)
+ personTripFormSet = PersonTripFormSet(initial=[{"name": py.personexpedition.name(),
+ "TU": py.time_underground,
+ "author": py.is_logbook_entry_author}
+ for py in previouslbe.persontrip_set.all()])
+ else:
+ tripForm = TripForm() # An unbound form
+ personTripFormSet = PersonTripFormSet()
+
+ return render_with_context(request, 'newlogbookentry.html', {
+ 'tripForm': tripForm,
+ 'personTripFormSet': personTripFormSet,
+
+ })
+
+def deleteLogbookEntry(request, expeditionyear, date = None, slug = None):
+ expedition = Expedition.objects.get(year=expeditionyear)
+ previousdate = datetime.date(*[int(x) for x in pdate.split("-")])
+ previouslbe = LogbookEntry.objects.get(slug = pslug, date = previousdate, expedition__year = year)
+ delLogbookEntry(previouslbe)
+ return HttpResponseRedirect(reverse('expedition', args=[expedition.year])) # Redirect after POST
+
+def delLogbookEntry(lbe):
+ for pt in lbe.persontrip_set.all():
+ pt.delete()
+ lbe.delete()
+ os.delete(lbe.filename)
+
|