SciPost Code Repository

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

Extra search form

parent 4d87635b
No related branches found
No related tags found
No related merge requests found
from django import forms from django import forms
from django.contrib import messages from django.contrib import messages
from django.db.models import Q
from journals.models import Publication from journals.models import Publication
from scipost.models import Contributor from scipost.models import Contributor
...@@ -17,6 +18,17 @@ class AcceptRequestMixin: ...@@ -17,6 +18,17 @@ class AcceptRequestMixin:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
class RegistrationInvitationFilterForm(forms.Form):
term = forms.CharField(help_text="You may search on arXiv identifier, DOI or last name.")
def search(self, qs):
term = self.cleaned_data.get('term')
return qs.filter(
Q(last_name__icontains=term) |
Q(citation_notifications__submission__arxiv_identifier_w_vn_nr__icontains=term) |
Q(citation_notifications__publication__doi_label__icontains=term))
class SuggestionSearchForm(forms.Form): class SuggestionSearchForm(forms.Form):
last_name = forms.CharField() last_name = forms.CharField()
......
...@@ -47,6 +47,13 @@ ...@@ -47,6 +47,13 @@
<div class="col-12"> <div class="col-12">
<h2 class="highlight">Registration Invitations</h2> <h2 class="highlight">Registration Invitations</h2>
</div> </div>
<div class="col-md-6">
<form method="get">
{{ search_form|bootstrap }}
<input class="btn btn-primary" type="submit" value="Filter">
<a href="{% url 'invitations:list' %}" class="btn btn-link">Reset filter</a>
</form>
</div>
{% if is_paginated %} {% if is_paginated %}
<div class="col-12"> <div class="col-12">
{% include 'partials/pagination.html' with page_obj=page_obj %} {% include 'partials/pagination.html' with page_obj=page_obj %}
......
...@@ -16,6 +16,13 @@ ...@@ -16,6 +16,13 @@
<div class="row"> <div class="row">
<div class="col-12">
<form method="get">
{{ search_form|bootstrap }}
<input class="btn btn-primary" type="submit" value="Filter">
<a href="{% url 'invitations:list_sent' %}" class="btn btn-link">Reset filter</a>
</form>
</div>
{% if is_paginated %} {% if is_paginated %}
<div class="col-12"> <div class="col-12">
{% include 'partials/pagination.html' with page_obj=page_obj %} {% include 'partials/pagination.html' with page_obj=page_obj %}
......
{% load scipost_extras %} {% load scipost_extras %}
<table class="table"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>Name</th> <th>Name</th>
...@@ -16,7 +16,10 @@ ...@@ -16,7 +16,10 @@
<tbody> <tbody>
{% for invitation in invitations %} {% for invitation in invitations %}
<tr> <tr>
<td>{{ invitation.last_name }}, {{ invitation.first_name }}</td> <td>
<small><i class="fa fa-paperclip" data-toggle="tooltip" data-html="true" data-title="<ul style='margin-bottom:0; padding: 0 10px 0 20px; min-height: 20px;'>{% for cit in invitation.citation_notifications.all %}<li>{% if cit.submission %}{{ cit.submission.arxiv_identifier_w_vn_nr }}{% endif %}{% if cit.publication %}{{ cit.publication.doi_label }}{% endif %}</li>{% endfor %}</ul>"></i></small>
{{ invitation.last_name }}, {{ invitation.first_name }}
</td>
<td>{{ invitation.email }}</td> <td>{{ invitation.email }}</td>
<td{% if invitation.status == 'draft' %} class="text-warning"{% endif %}>{{ invitation.get_status_display }}</td> <td{% if invitation.status == 'draft' %} class="text-warning"{% endif %}>{{ invitation.get_status_display }}</td>
<td>{{ invitation.get_invitation_type_display }}</td> <td>{{ invitation.get_invitation_type_display }}</td>
......
...@@ -8,7 +8,7 @@ from django.views.generic.edit import UpdateView, DeleteView ...@@ -8,7 +8,7 @@ from django.views.generic.edit import UpdateView, DeleteView
from .forms import RegistrationInvitationForm, RegistrationInvitationReminderForm,\ from .forms import RegistrationInvitationForm, RegistrationInvitationReminderForm,\
RegistrationInvitationMarkForm, RegistrationInvitationMapToContributorForm,\ RegistrationInvitationMarkForm, RegistrationInvitationMapToContributorForm,\
CitationNotificationForm, SuggestionSearchForm,\ CitationNotificationForm, SuggestionSearchForm, RegistrationInvitationFilterForm,\
CitationNotificationProcessForm, RegistrationInvitationAddCitationForm CitationNotificationProcessForm, RegistrationInvitationAddCitationForm
from .mixins import RequestArgumentMixin, PermissionsMixin, SaveAndSendFormMixin, SendMailFormMixin from .mixins import RequestArgumentMixin, PermissionsMixin, SaveAndSendFormMixin, SendMailFormMixin
from .models import RegistrationInvitation, CitationNotification from .models import RegistrationInvitation, CitationNotification
...@@ -23,11 +23,19 @@ class RegistrationInvitationsView(PaginationMixin, PermissionsMixin, ListView): ...@@ -23,11 +23,19 @@ class RegistrationInvitationsView(PaginationMixin, PermissionsMixin, ListView):
queryset = RegistrationInvitation.objects.drafts().not_for_fellows() queryset = RegistrationInvitation.objects.drafts().not_for_fellows()
paginate_by = 10 paginate_by = 10
ordering = ['date_sent_last', 'last_name'] ordering = ['date_sent_last', 'last_name']
search_form = None
def get_queryset(self):
self.search_form = RegistrationInvitationFilterForm(self.request.GET or None)
if self.search_form.is_valid():
self.queryset = self.search_form.search(self.queryset)
return super().get_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['count_in_draft'] = RegistrationInvitation.objects.drafts().count() context['count_in_draft'] = RegistrationInvitation.objects.drafts().count()
context['count_pending'] = RegistrationInvitation.objects.sent().count() context['count_pending'] = RegistrationInvitation.objects.sent().count()
context['search_form'] = self.search_form
return context return context
......
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