SciPost Code Repository

Skip to content
Snippets Groups Projects
Commit 57ca4508 authored by Jorran de Wit's avatar Jorran de Wit
Browse files

Tweaks

parent 5f683171
No related branches found
No related tags found
No related merge requests found
...@@ -36,6 +36,22 @@ class AlternativeEmailForm(forms.ModelForm): ...@@ -36,6 +36,22 @@ class AlternativeEmailForm(forms.ModelForm):
model = AlternativeEmail model = AlternativeEmail
fields = ['email', 'still_valid'] fields = ['email', 'still_valid']
def __init__(self, *args, **kwargs):
self.profile = kwargs.pop('profile', None)
super().__init__(*args, **kwargs)
def clean_email(self):
"""Check if profile/email combination exists."""
email = self.cleaned_data['email']
if self.profile.emails.filter(email=email).exists():
self.add_error('email', 'This profile/email pair is already defined.')
return email
def save(self):
"""Save to a profile."""
self.instance.profile = self.profile
return super().save()
class SearchTextForm(forms.Form): class SearchTextForm(forms.Form):
text = forms.CharField(label='') text = forms.CharField(label='')
...@@ -10,9 +10,9 @@ class ProfileQuerySet(models.QuerySet): ...@@ -10,9 +10,9 @@ class ProfileQuerySet(models.QuerySet):
def get_unique_from_email_or_None(self, email): def get_unique_from_email_or_None(self, email):
try: try:
return self.get(Q(email=email) | Q(alternativeemail__email__in=[email])) return self.get(Q(email=email) | Q(alternativeemail__email=email))
except self.model.DoesNotExist: except self.model.DoesNotExist:
pass pass
except self.model.MultipleObjectsReturned: except self.model.MultipleObjectsReturned:
pass pass
return None return self.none()
...@@ -14,7 +14,7 @@ def populate_profile_from_refinv(apps, schema_editor): ...@@ -14,7 +14,7 @@ def populate_profile_from_refinv(apps, schema_editor):
try: try:
profile = Profile.objects.get( profile = Profile.objects.get(
Q(email=refinv.email_address) | Q(email=refinv.email_address) |
Q(alternativeemail__email__in=[refinv.email_address])) Q(alternativeemail__email=refinv.email_address))
except Profile.DoesNotExist: except Profile.DoesNotExist:
profile = Profile(title=refinv.title, profile = Profile(title=refinv.title,
first_name=refinv.first_name, first_name=refinv.first_name,
...@@ -26,7 +26,7 @@ def populate_profile_from_refinv(apps, schema_editor): ...@@ -26,7 +26,7 @@ def populate_profile_from_refinv(apps, schema_editor):
except Profile.MultipleObjectsReturned: except Profile.MultipleObjectsReturned:
profile = Profile.objects.filter( profile = Profile.objects.filter(
Q(email=refinv.email_address) | Q(email=refinv.email_address) |
Q(alternativeemail__email__in=[refinv.email_address])).first() Q(alternativeemail__email=refinv.email_address)).first()
refinv.profile = profile refinv.profile = profile
refinv.save() refinv.save()
...@@ -40,7 +40,7 @@ def populate_profile_from_reginv(apps, schema_editor): ...@@ -40,7 +40,7 @@ def populate_profile_from_reginv(apps, schema_editor):
try: try:
profile = Profile.objects.get( profile = Profile.objects.get(
Q(email=reginv.email) | Q(email=reginv.email) |
Q(alternativeemail__email__in=[reginv.email])) Q(alternativeemail__email=reginv.email))
except Profile.DoesNotExist: except Profile.DoesNotExist:
profile = Profile(title=reginv.title, profile = Profile(title=reginv.title,
first_name=reginv.first_name, first_name=reginv.first_name,
...@@ -50,7 +50,7 @@ def populate_profile_from_reginv(apps, schema_editor): ...@@ -50,7 +50,7 @@ def populate_profile_from_reginv(apps, schema_editor):
except Profile.MultipleObjectsReturned: except Profile.MultipleObjectsReturned:
profile = Profile.objects.filter( profile = Profile.objects.filter(
Q(email=reginv.email) | Q(email=reginv.email) |
Q(alternativeemail__email__in=[reginv.email])).first() Q(alternativeemail__email=reginv.email)).first()
reginv.profile = profile reginv.profile = profile
reginv.save() reginv.save()
......
...@@ -74,3 +74,4 @@ class AlternativeEmail(models.Model): ...@@ -74,3 +74,4 @@ class AlternativeEmail(models.Model):
class Meta: class Meta:
unique_together = ['profile', 'email'] unique_together = ['profile', 'email']
default_related_name = 'emails'
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
<td> <td>
<ul> <ul>
<li>{{ profile.email }} (current)</li> <li>{{ profile.email }} (current)</li>
{% for altemail in profile.alternativeemail_set.all %} {% for altemail in profile.emails.all %}
<li>{{ altemail.email }} (alt, {% if altemail.still_valid %}still valid{% else %}deprecated{% endif %})</li> <li>{{ altemail.email }} (alt, {{ altemail.still_valid|yesno:"still valid,deprecated" }})</li>
{% endfor %} {% endfor %}
</ul> </ul>
</td> </td>
......
...@@ -17,18 +17,18 @@ ...@@ -17,18 +17,18 @@
<div class="col-12"> <div class="col-12">
<h4>Profiles-related Actions:</h4> <h4>Profiles-related Actions:</h4>
<ul> <ul>
{% if nr_contributors_w_duplicate_email > 0 %} {% if contributors_w_duplicate_email %}
<li class="text-danger"> <li class="text-danger">
{{ nr_contributors_w_duplicate_email }} Contributor duplicates (via email) identified {{ contributors_w_duplicate_email|length }} Contributor duplicates (via email) identified
<ul> <ul>
{% for dup in contributors_w_duplicate_email %} {% for dup in contributors_w_duplicate_email %}
<li>{{ dup }}, {{ dup.user.email }}, id {{ dup.id }}</li> <li>{{ dup }}, {{ dup.user.email }}, id {{ dup.id }}</li>
{% empty %} {% empty %}
<li>No duplicates found</li> <li>No duplicates found</li>
{% endfor %} {% endfor %}
</ul> </ul>
Please take action by merging these Contributor instances. Please take action by merging these Contributor instances.
</li> </li>
{% endif %} {% endif %}
<li><a href="{% url 'profiles:profile_create' %}">Add a Profile</a></li> <li><a href="{% url 'profiles:profile_create' %}">Add a Profile</a></li>
{% if next_reginv_wo_profile %} {% if next_reginv_wo_profile %}
......
...@@ -40,35 +40,40 @@ class ProfileCreateView(PermissionsMixin, CreateView): ...@@ -40,35 +40,40 @@ class ProfileCreateView(PermissionsMixin, CreateView):
initial = super().get_initial() initial = super().get_initial()
from_type = self.kwargs.get('from_type', None) from_type = self.kwargs.get('from_type', None)
pk = self.kwargs.get('pk', None) pk = self.kwargs.get('pk', None)
print(from_type)
print(pk) if pk and from_type:
if pk:
pk = int(pk) pk = int(pk)
if from_type == 'contributor': if from_type == 'contributor':
contributor = get_object_or_404(Contributor, pk=pk) contributor = get_object_or_404(Contributor, pk=pk)
initial['title'] = contributor.title initial.update({
initial['first_name'] = contributor.user.first_name 'title': contributor.title,
initial['last_name'] = contributor.user.last_name 'first_name': contributor.user.first_name,
initial['email'] = contributor.user.email 'last_name': contributor.user.last_name,
initial['discipline'] = contributor.discipline 'email': contributor.user.email,
initial['expertises'] = contributor.expertises 'discipline': contributor.discipline,
initial['orcid_id'] = contributor.orcid_id 'expertises': contributor.expertises,
initial['webpage'] = contributor.personalwebpage 'orcid_id': contributor.orcid_id,
initial['accepts_SciPost_emails'] = contributor.accepts_SciPost_emails 'webpage': contributor.personalwebpage,
'accepts_SciPost_emails': contributor.accepts_SciPost_emails,
})
elif from_type == 'refereeinvitation': elif from_type == 'refereeinvitation':
refinv = get_object_or_404(RefereeInvitation, pk=pk) refinv = get_object_or_404(RefereeInvitation, pk=pk)
initial['title'] = refinv.title initial.update({
initial['first_name'] = refinv.first_name 'title': refinv.title,
initial['last_name'] = refinv.last_name 'first_name': refinv.first_name,
initial['email'] = refinv.email_address 'last_name': refinv.last_name,
initial['discipline'] = refinv.submission.discipline 'email': refinv.email_address,
initial['expertises'] = refinv.submission.secondary_areas 'discipline': refinv.submission.discipline,
'expertises': refinv.submission.secondary_areas,
})
elif from_type == 'registrationinvitation': elif from_type == 'registrationinvitation':
reginv = get_object_or_404(RegistrationInvitation, pk=pk) reginv = get_object_or_404(RegistrationInvitation, pk=pk)
initial['title'] = reginv.title initial.update({
initial['first_name'] = reginv.first_name 'title': reginv.title,
initial['last_name'] = reginv.last_name 'first_name': reginv.first_name,
initial['email'] = reginv.email 'last_name': reginv.last_name,
'email': reginv.email,
})
return initial return initial
...@@ -105,35 +110,36 @@ class ProfileListView(PermissionsMixin, PaginationMixin, ListView): ...@@ -105,35 +110,36 @@ class ProfileListView(PermissionsMixin, PaginationMixin, ListView):
Return a queryset of Profiles using optional GET data. Return a queryset of Profiles using optional GET data.
""" """
queryset = Profile.objects.all() queryset = Profile.objects.all()
if self.request.GET.get('discipline', None): if self.request.GET.get('discipline'):
queryset = queryset.filter(discipline=self.request.GET['discipline'].lower()) queryset = queryset.filter(discipline=self.request.GET['discipline'].lower())
if self.request.GET.get('expertise', None): if self.request.GET.get('expertise'):
queryset = queryset.filter(expertises__contains=[self.request.GET['expertise']]) queryset = queryset.filter(expertises__contains=[self.request.GET['expertise']])
if self.request.GET.get('contributor', None) == 'False': if self.request.GET.get('contributor') == 'False':
queryset = queryset.filter(contributor=None) queryset = queryset.filter(contributor__isnull=True)
elif self.request.GET.get('contributor', None) == 'True': elif self.request.GET.get('contributor') == 'True':
queryset = queryset.exclude(contributor=None) queryset = queryset.filter(contributor__isnull=False)
if self.request.GET.get('text', None): if self.request.GET.get('text'):
queryset = queryset.filter(last_name__startswith=self.request.GET.get('text')) queryset = queryset.filter(last_name__istartswith=self.request.GET['text'])
return queryset return queryset
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['subject_areas'] = SCIPOST_SUBJECT_AREAS contributors_wo_profile = Contributor.objects.filter(profile__isnull=True)
context['searchform'] = SearchTextForm(initial={'text': self.request.GET.get('text', None)}) refinv_wo_profile = RefereeInvitation.objects.filter(profile__isnull=True)
contributors_dup_email = Contributor.objects.have_duplicate_email() reginv_wo_profile = RegistrationInvitation.objects.filter(profile__isnull=True)
context['nr_contributors_w_duplicate_email'] = contributors_dup_email.count()
context['contributors_w_duplicate_email'] = contributors_dup_email context.update({
contributors_wo_profile = Contributor.objects.filter(profile=None) 'subject_areas': SCIPOST_SUBJECT_AREAS,
context['nr_contributors_wo_profile'] = contributors_wo_profile.count() 'searchform': SearchTextForm(initial={'text': self.request.GET.get('text')}),
context['next_contributor_wo_profile'] = contributors_wo_profile.first() 'contributors_w_duplicate_email': Contributor.objects.have_duplicate_email(),
refinv_wo_profile = RefereeInvitation.objects.filter(profile=None) 'nr_contributors_wo_profile': contributors_wo_profile.count(),
context['nr_refinv_wo_profile'] = refinv_wo_profile.count() 'next_contributor_wo_profile': contributors_wo_profile.first(),
context['next_refinv_wo_profile'] = refinv_wo_profile.first() 'nr_refinv_wo_profile': refinv_wo_profile.count(),
reginv_wo_profile = RegistrationInvitation.objects.filter(profile=None) 'next_refinv_wo_profile': refinv_wo_profile.first(),
context['nr_reginv_wo_profile'] = reginv_wo_profile.count() 'nr_reginv_wo_profile': reginv_wo_profile.count(),
context['next_reginv_wo_profile'] = reginv_wo_profile.first() 'next_reginv_wo_profile': reginv_wo_profile.first(),
context['alternative_email_form'] = AlternativeEmailForm() 'alternative_email_form': AlternativeEmailForm(),
})
return context return context
...@@ -143,20 +149,11 @@ def add_alternative_email(request, profile_id): ...@@ -143,20 +149,11 @@ def add_alternative_email(request, profile_id):
Add an alternative email address to a Profile. Add an alternative email address to a Profile.
""" """
profile = get_object_or_404(Profile, pk=profile_id) profile = get_object_or_404(Profile, pk=profile_id)
form = AlternativeEmailForm(request.POST or None) form = AlternativeEmailForm(request.POST or None, profile=profile)
if form.is_valid(): if form.is_valid():
try: form.save()
newaltemail = AlternativeEmail(profile=profile, messages.success(request, 'Alternative email successfully added.')
email=form.cleaned_data['email'],
still_valid=form.cleaned_data['still_valid'])
newaltemail.save()
messages.success(request, 'Alternative email successfully added.')
except IntegrityError:
errormessage = 'This profile/email pair is already defined.'
return render(request, 'scipost/error.html',
context={'errormessage': errormessage})
else: else:
errormessage = 'Please enter a valid email address' for field, err in form.errors.items():
return render(request, 'scipost/error.html', messages.warning(request, err[0])
context={'errormessage': errormessage})
return redirect(reverse('profiles:profiles')) return redirect(reverse('profiles:profiles'))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment