Make confirmation more useful

This commit is contained in:
David Taylor
2016-04-05 12:53:04 +01:00
parent 03ca65602f
commit 99dfdcd253
2 changed files with 53 additions and 7 deletions

View File

@@ -10,6 +10,7 @@ from django.contrib import messages
from django.db import transaction
from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Count
from django.forms import ModelForm
# Register your models here.
admin.site.register(models.VatRate, reversion.VersionAdmin)
@@ -38,19 +39,19 @@ class ProfileAdmin(UserAdmin):
form = forms.ProfileChangeForm
add_form = forms.ProfileCreationForm
@admin.register(models.Person, models.Organisation, models.Venue)
class AssociateAdmin(reversion.VersionAdmin):
list_display = ('id', 'name','number_of_events')
search_fields = ['id','name']
list_display_links = ['id','name']
actions = ['merge']
merge_fields = ['name']
def get_queryset(self, request):
return super(AssociateAdmin, self).get_queryset(request).annotate(event_count = Count('event'))
def number_of_events(self,obj):
return obj.latest_events.count()
number_of_events.admin_order_field = 'event_count'
def merge(self, request, queryset):
@@ -73,9 +74,35 @@ class AssociateAdmin(reversion.VersionAdmin):
self.message_user(request, "Objects successfully merged.")
return
else: # Present the confirmation screen
class TempForm(ModelForm):
class Meta:
model = queryset.model
fields = self.merge_fields
forms = []
for obj in queryset:
forms.append(TempForm(instance=obj))
context = {
'title': _("Are you sure?"),
'queryset': queryset,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
'forms': forms
}
return TemplateResponse(request, 'RIGS/admin_associate_merge.html', context, current_app=self.admin_site.name)
@admin.register(models.Person)
class PersonAdmin(AssociateAdmin):
list_display = ('id', 'name','phone','email','number_of_events')
merge_fields = ['name','phone','email','address','notes']
@admin.register(models.Venue)
class VenueAdmin(AssociateAdmin):
list_display = ('id', 'name','phone','email','number_of_events')
merge_fields = ['name','phone','email','address','notes','three_phase_available']
@admin.register(models.Organisation)
class OrganisationAdmin(AssociateAdmin):
list_display = ('id', 'name','phone','email','number_of_events')
merge_fields = ['name','phone','email','address','notes','union_account']

View File

@@ -5,13 +5,32 @@
<form action="" method="post">{% csrf_token %}
<p>The following objects will be merged. Please select the 'master' record which you would like to keep. Other records will have associated events moved to the 'master' copy, and then will be deleted.</p>
{% for item in queryset %}
<input type="radio" name="master" value="{{item.pk|unlocalize}}"> {{item.pk}} | {{item}}<br>
<table>
{% for form in forms %}
{% if forloop.first %}
<tr>
<th></th>
<th> ID </th>
{% for field in form %}
<th>{{ field.label }}</th>
{% endfor %}
</tr>
{% endif %}
<tr>
<td><input type="radio" name="master" value="{{form.instance.pk|unlocalize}}"></td>
<td>{{form.instance.pk}}</td>
{% for field in form %}
<td> {{ field.value }} </td>
{% endfor %}
</tr>
{% endfor %}
</table>
<div>
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}" />
{% endfor %}
<input type="hidden" name="action" value="merge" />
<input type="hidden" name="post" value="yes" />