diff --git a/members/templates/member_list.html b/members/templates/member_list.html
index 221764f..18bc6cb 100644
--- a/members/templates/member_list.html
+++ b/members/templates/member_list.html
@@ -11,6 +11,13 @@
{% trans "Member register" %}
+ {% if is_member_conflict %}
+
+ {% blocktrans %}There are duplicate member entries in the register.
+ Please visit
duplicate resolver.{% endblocktrans %}
+
+ {% endif %}
+
{% if notification %}
{{ notification }}
diff --git a/members/urls.py b/members/urls.py
index d4a8fe9..9738af6 100644
--- a/members/urls.py
+++ b/members/urls.py
@@ -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
\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)
]
diff --git a/members/views.py b/members/views.py
index 4a7acbf..691b30f 100644
--- a/members/views.py
+++ b/members/views.py
@@ -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