diff --git a/RIGS/admin.py b/RIGS/admin.py index 18dc554e..a72c4705 100644 --- a/RIGS/admin.py +++ b/RIGS/admin.py @@ -4,16 +4,20 @@ from django.contrib.auth.admin import UserAdmin from django.utils.translation import ugettext_lazy as _ import reversion +from django.contrib.admin import helpers +from django.template.response import TemplateResponse +from django.contrib import messages +from django.db import transaction +from django.core.exceptions import ObjectDoesNotExist + # Register your models here. -admin.site.register(models.Person, reversion.VersionAdmin) -admin.site.register(models.Organisation, reversion.VersionAdmin) admin.site.register(models.VatRate, reversion.VersionAdmin) -admin.site.register(models.Venue, reversion.VersionAdmin) admin.site.register(models.Event, reversion.VersionAdmin) admin.site.register(models.EventItem, reversion.VersionAdmin) admin.site.register(models.Invoice) admin.site.register(models.Payment) +@admin.register(models.Profile) class ProfileAdmin(UserAdmin): fieldsets = ( (None, {'fields': ('username', 'password')}), @@ -33,4 +37,38 @@ class ProfileAdmin(UserAdmin): form = forms.ProfileChangeForm add_form = forms.ProfileCreationForm -admin.site.register(models.Profile, ProfileAdmin) +@admin.register(models.Person, models.Organisation, models.Venue) +class AssociateAdmin(reversion.VersionAdmin): + list_display = ('id', 'name','number_of_events') + search_fields = ['id','name'] + + actions = ['merge'] + + def number_of_events(self,obj): + return obj.latest_events.count() + + def merge(self, request, queryset): + if request.POST.get('post'): # Has the user confirmed which is the master record? + try: + masterObjectPk = request.POST.get('master') + masterObject = queryset.get(pk = masterObjectPk) + except ObjectDoesNotExist: + self.message_user(request, "An error occured. Did you select a 'master' record?",level=messages.ERROR) + return + + with transaction.atomic(), reversion.create_revision(): + for obj in queryset.exclude(pk = masterObjectPk): + events = obj.event_set.all() + for event in events: + masterObject.event_set.add(event) + obj.delete() + + self.message_user(request, "Objects successfully merged.") + return + else: # Present the confirmation screen + context = { + 'title': _("Are you sure?"), + 'queryset': queryset, + 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, + } + return TemplateResponse(request, 'RIGS/admin_associate_merge.html', context, current_app=self.admin_site.name) \ No newline at end of file diff --git a/RIGS/templates/RIGS/admin_associate_merge.html b/RIGS/templates/RIGS/admin_associate_merge.html new file mode 100644 index 00000000..e30b2e55 --- /dev/null +++ b/RIGS/templates/RIGS/admin_associate_merge.html @@ -0,0 +1,21 @@ +{% extends "admin/base_site.html" %} +{% load i18n l10n %} + +{% block content %} +
+{% endblock %} \ No newline at end of file