EventDuplicate now presents an edit view before saving

This commit is contained in:
David Taylor
2015-08-16 19:31:35 +01:00
parent 72ecec8860
commit 26d671ea0d
3 changed files with 24 additions and 22 deletions

View File

@@ -89,10 +89,10 @@ class EventForm(forms.ModelForm):
return items return items
def _get_or_initialise_item(self, pk, data, event): 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() item = models.EventItem()
else:
item = models.EventItem.objects.get(pk=pk)
item.name = data['name'] item.name = data['name']
item.description = data['description'] item.description = data['description']

View File

@@ -18,6 +18,7 @@ from PyPDF2 import PdfFileMerger, PdfFileReader
from RIGS import models, forms from RIGS import models, forms
import datetime import datetime
import re import re
import copy
__author__ = 'ghost' __author__ = 'ghost'
@@ -85,6 +86,23 @@ class EventUpdate(generic.UpdateView):
def get_success_url(self): def get_success_url(self):
return reverse_lazy('event_detail', kwargs={'pk': self.object.pk}) 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): class EventPrint(generic.View):
def get(self, request, pk): def get(self, request, pk):
@@ -132,24 +150,6 @@ class EventPrint(generic.View):
response.write(merged.getvalue()) response.write(merged.getvalue())
return response 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): class EventArchive(generic.ArchiveIndexView):
model = models.Event model = models.Event
date_field = "start_date" date_field = "start_date"

View File

@@ -119,7 +119,9 @@
<div class="col-sm-12"> <div class="col-sm-12">
<div class="col-sm-8"> <div class="col-sm-8">
<h2> <h2>
{% if object.pk %} {% if duplicate %}
Duplicate of Event N{{ object.pk|stringformat:"05d" }}
{% elif object.pk %}
Event N{{ object.pk|stringformat:"05d" }} Event N{{ object.pk|stringformat:"05d" }}
{% else %} {% else %}
New Event New Event