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.db import transaction
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Count from django.db.models import Count
from django.forms import ModelForm
# Register your models here. # Register your models here.
admin.site.register(models.VatRate, reversion.VersionAdmin) admin.site.register(models.VatRate, reversion.VersionAdmin)
@@ -38,19 +39,19 @@ class ProfileAdmin(UserAdmin):
form = forms.ProfileChangeForm form = forms.ProfileChangeForm
add_form = forms.ProfileCreationForm add_form = forms.ProfileCreationForm
@admin.register(models.Person, models.Organisation, models.Venue)
class AssociateAdmin(reversion.VersionAdmin): class AssociateAdmin(reversion.VersionAdmin):
list_display = ('id', 'name','number_of_events') list_display = ('id', 'name','number_of_events')
search_fields = ['id','name'] search_fields = ['id','name']
list_display_links = ['id','name']
actions = ['merge'] actions = ['merge']
merge_fields = ['name']
def get_queryset(self, request): def get_queryset(self, request):
return super(AssociateAdmin, self).get_queryset(request).annotate(event_count = Count('event')) return super(AssociateAdmin, self).get_queryset(request).annotate(event_count = Count('event'))
def number_of_events(self,obj): def number_of_events(self,obj):
return obj.latest_events.count() return obj.latest_events.count()
number_of_events.admin_order_field = 'event_count' number_of_events.admin_order_field = 'event_count'
def merge(self, request, queryset): def merge(self, request, queryset):
@@ -73,9 +74,35 @@ class AssociateAdmin(reversion.VersionAdmin):
self.message_user(request, "Objects successfully merged.") self.message_user(request, "Objects successfully merged.")
return return
else: # Present the confirmation screen 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 = { context = {
'title': _("Are you sure?"), 'title': _("Are you sure?"),
'queryset': queryset, 'queryset': queryset,
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, 'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
'forms': forms
} }
return TemplateResponse(request, 'RIGS/admin_associate_merge.html', context, current_app=self.admin_site.name) 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 %} <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> <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 %} <table>
<input type="radio" name="master" value="{{item.pk|unlocalize}}"> {{item.pk}} | {{item}}<br> {% 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 %} {% endfor %}
</table>
<div> <div>
{% for obj in queryset %} {% 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 %} {% endfor %}
<input type="hidden" name="action" value="merge" /> <input type="hidden" name="action" value="merge" />
<input type="hidden" name="post" value="yes" /> <input type="hidden" name="post" value="yes" />