Implement conflict resolution logic
This commit is contained in:
@@ -11,6 +11,13 @@
|
||||
<h2>{% trans "Member register" %}</h2>
|
||||
</div>
|
||||
|
||||
{% if is_member_conflict %}
|
||||
<div class="alert alert-warning">
|
||||
{% blocktrans %}There are duplicate member entries in the register.
|
||||
Please visit <a href="/members/duplicates">duplicate resolver</a>.{% endblocktrans %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if notification %}
|
||||
<div class="alert alert-success">
|
||||
{{ notification }}
|
||||
|
||||
+5
-1
@@ -17,6 +17,7 @@ from members.views import member_delete_confirm
|
||||
from members.views import member_delete
|
||||
from members.views import payment_list
|
||||
from members.views import member_duplicates
|
||||
from members.views import resolve_conflict
|
||||
|
||||
# rest api
|
||||
from members.views import MemberDetail
|
||||
@@ -104,6 +105,9 @@ urlpatterns = [
|
||||
url(r'^api/members/(?P<pk>\d+)$', MemberDetail.as_view()),
|
||||
|
||||
# member duplicate resolution view
|
||||
url(r'^duplicates$', member_duplicates)
|
||||
url(r'^duplicates$', member_duplicates),
|
||||
|
||||
# post target for resolving a conflict
|
||||
url(r'^resolve_conflict$', resolve_conflict)
|
||||
|
||||
]
|
||||
|
||||
+57
-13
@@ -105,7 +105,8 @@ def member_list(request, *args, **kwargs):
|
||||
context = {
|
||||
'table': table_html,
|
||||
'member_count': len(members),
|
||||
'notification': request.GET.get('notification', None)
|
||||
'notification': request.GET.get('notification', None),
|
||||
'is_member_conflict': MemberConflict.objects.exists()
|
||||
}
|
||||
return render(request, 'member_list.html', context)
|
||||
|
||||
@@ -459,7 +460,6 @@ def export_csv(request, *args, **kwargs):
|
||||
@require_http_methods(["GET"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def member_duplicates(request, *args, **kwargs):
|
||||
# TODO
|
||||
conflicts = MemberConflict.objects.all()
|
||||
context = {
|
||||
'conflicts': conflicts
|
||||
@@ -468,6 +468,35 @@ def member_duplicates(request, *args, **kwargs):
|
||||
return render(request, 'member_duplicates.html', context)
|
||||
|
||||
|
||||
@ensure_csrf_cookie
|
||||
@require_http_methods(["POST"])
|
||||
@permission_required('members.change_member', login_url='/login')
|
||||
def resolve_conflict(request, *args, **kwargs):
|
||||
action = request.POST.get('action', None)
|
||||
if action not in ['first', 'second', 'both']:
|
||||
return render(request, 'error.html', {'error': '{}: {}'.format(('Incorrect action value'), action)})
|
||||
|
||||
id = request.POST.get('id', None)
|
||||
if id is None:
|
||||
return render(request, 'error.html', {'error': '{}: {}'.format(('Incorrect id value'), id)})
|
||||
|
||||
conflict = MemberConflict.objects.get(id=id)
|
||||
first_member = conflict.first_member
|
||||
second_member = conflict.second_member
|
||||
|
||||
if action == 'first':
|
||||
second_member.delete()
|
||||
elif action == 'second':
|
||||
first_member.delete()
|
||||
|
||||
conflict.delete()
|
||||
if MemberConflict.objects.exists():
|
||||
return HttpResponseRedirect('/members/duplicates')
|
||||
else:
|
||||
notification = _('Successfully resolved all member conflicts.')
|
||||
return HttpResponseRedirect('/members/list?notification={}'.format(html.escape(notification)))
|
||||
|
||||
|
||||
def send_mail_wrapper(subject, message, email_to):
|
||||
send_mail(subject,
|
||||
message,
|
||||
@@ -476,20 +505,35 @@ def send_mail_wrapper(subject, message, email_to):
|
||||
fail_silently=False)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Request)
|
||||
def email_on_request(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
subject = 'Test1'
|
||||
message = 'Please validate your email address\r\n'
|
||||
send_mail_wrapper(subject, message, instance.email)
|
||||
# @receiver(post_save, sender=Request)
|
||||
# def email_on_request(sender, instance, created, **kwargs):
|
||||
# if created:
|
||||
# subject = 'Test1'
|
||||
# message = 'Please validate your email address\r\n'
|
||||
# send_mail_wrapper(subject, message, instance.email)
|
||||
#
|
||||
#
|
||||
# @receiver(post_save, sender=Member)
|
||||
# def email_on_accept(sender, instance, created, **kwargs):
|
||||
# if created:
|
||||
# subject = 'Test2'
|
||||
# message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n'
|
||||
# send_mail_wrapper(subject, message, instance.email)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Member)
|
||||
def email_on_accept(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
subject = 'Test2'
|
||||
message = 'Jäsenhakemuksesi on hyväksytty!!!\r\n'
|
||||
send_mail_wrapper(subject, message, instance.email)
|
||||
def check_for_duplicates(sender, instance, created, **kwargs):
|
||||
name_candidates = Member.objects.filter(first_name=instance.first_name,
|
||||
last_name=instance.last_name)
|
||||
email_candidates = Member.objects.filter(email=instance.email)
|
||||
|
||||
candidates = name_candidates | email_candidates
|
||||
duplicates = candidates.exclude(id=instance.id)
|
||||
|
||||
if len(duplicates) > 0:
|
||||
conflict = MemberConflict(first_member=instance,
|
||||
second_member=duplicates[0])
|
||||
conflict.save()
|
||||
|
||||
|
||||
# Can be used to retrieve single member information via REST API
|
||||
|
||||
Reference in New Issue
Block a user