diff --git a/RIGS/forms.py b/RIGS/forms.py index dd6015d1..617eb1bc 100644 --- a/RIGS/forms.py +++ b/RIGS/forms.py @@ -89,10 +89,10 @@ class EventForm(forms.ModelForm): return items def _get_or_initialise_item(self, pk, data, event): - if (pk < 0): + try: + item = models.EventItem.objects.get(pk=pk,event=event) + except models.EventItem.DoesNotExist: item = models.EventItem() - else: - item = models.EventItem.objects.get(pk=pk) item.name = data['name'] item.description = data['description'] diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 27f00307..f62ed2da 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -18,6 +18,7 @@ from PyPDF2 import PdfFileMerger, PdfFileReader from RIGS import models, forms import datetime import re +import copy __author__ = 'ghost' @@ -85,6 +86,23 @@ class EventUpdate(generic.UpdateView): def get_success_url(self): return reverse_lazy('event_detail', kwargs={'pk': self.object.pk}) +class EventDuplicate(EventUpdate): + def get_object(self, queryset=None): + old = super(EventDuplicate, self).get_object(queryset) # Get the object (the event you're duplicating) + new = copy.copy(old) # Make a copy of the object in memory + new.based_on = old # Make the new event based on the old event + + if self.request.method in ('POST', 'PUT'): # This only happens on save (otherwise items won't display in editor) + new.pk = None # This means a new event will be created on save, and all items will be re-created + + messages.info(self.request, 'Event data duplicated but not yet saved. Click save to complete operation.') + + return new + + def get_context_data(self, **kwargs): + context = super(EventDuplicate, self).get_context_data(**kwargs) + context["duplicate"] = True + return context class EventPrint(generic.View): def get(self, request, pk): @@ -132,24 +150,6 @@ class EventPrint(generic.View): response.write(merged.getvalue()) return response - -class EventDuplicate(generic.RedirectView): - permanent = False; - def get_redirect_url(self, *args, **kwargs): - new = get_object_or_404(models.Event, pk=kwargs['pk']) - new.pk = None - new.based_on = models.Event.objects.get(pk=kwargs['pk']) - new.save() - - old = get_object_or_404(models.Event, pk=kwargs['pk']) - for item in old.items.all(): - item.pk = None - item.event = new - item.save() - - return reverse_lazy('event_update', kwargs={'pk': new.pk}) - - class EventArchive(generic.ArchiveIndexView): model = models.Event date_field = "start_date" diff --git a/RIGS/templates/RIGS/event_form.html b/RIGS/templates/RIGS/event_form.html index cf627aa7..7da39132 100644 --- a/RIGS/templates/RIGS/event_form.html +++ b/RIGS/templates/RIGS/event_form.html @@ -119,7 +119,9 @@