Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

circulation: restrict ILL request form to patron #1910

Merged
merged 1 commit into from
May 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions rero_ils/modules/ill_requests/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
from .forms import ILLRequestForm
from .models import ILLRequestStatus
from .utils import get_pickup_location_options
from ..decorators import check_logged_as_patron
from ..locations.api import Location
from ..patrons.api import current_patrons
from ..utils import extracted_data_from_ref, get_ref_for_pid
Expand All @@ -42,6 +43,7 @@

@blueprint.route('/create/', methods=['GET', 'POST'])
@check_user_is_authenticated(redirect_to='security.login')
@check_logged_as_patron
def ill_request_form():
"""Return professional view."""
form = ILLRequestForm(request.form)
Expand Down
21 changes: 8 additions & 13 deletions rero_ils/modules/patrons/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -314,34 +314,29 @@ def get_librarian_by_user(cls, user):
patrons = cls.get_patrons_by_user(user)
librarians = list(filter(lambda ptrn: ptrn.is_librarian, patrons))
if len(librarians) > 1:
raise Error('more than one librarian account for a user')
raise Exception('more than one librarian account for a user')
if len(librarians) == 0:
return None
return librarians[0]

@classmethod
def get_patrons_by_user(cls, user):
"""Get all patrons by user."""
patrons = []
if hasattr(user, 'id'):
result = PatronsSearch().filter(
'term',
user_id=user.id
).source(includes='pid').scan()
patrons = [
cls.get_record_by_pid(record.pid)
for record in result
]
return patrons if patrons else []
return []
result = PatronsSearch()\
.filter('term', user_id=user.id)\
.source(includes='pid')\
.scan()
patrons = [cls.get_record_by_pid(hit.pid) for hit in result]
return patrons

@classmethod
def get_patron_by_email(cls, email):
"""Get patron by email."""
pid_value = cls.get_pid_by_email(email)
if pid_value:
return cls.get_record_by_pid(pid_value)
else:
return None

@classmethod
def get_pid_by_email(cls, email):
Expand Down
4 changes: 1 addition & 3 deletions rero_ils/modules/patrons/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,4 @@ def user_has_patron(user=current_user):
"""Test if user has a patron."""
from .api import Patron
patrons = Patron.get_patrons_by_user(user=user)
if patrons:
return True
return False
return bool(patrons) # true if `patrons` list isn't empty; false otherwise
3 changes: 1 addition & 2 deletions rero_ils/theme/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
from rero_ils.modules.patrons.api import current_librarian, current_patrons
from rero_ils.permissions import can_access_professional_view

from ..modules.patrons.utils import user_has_patron
from ..version import __version__

blueprint = Blueprint(
Expand Down Expand Up @@ -101,7 +100,7 @@ def init_menu_tools():
rero_register(
item,
endpoint='ill_requests.ill_request_form',
visible_when=lambda: user_has_patron,
visible_when=lambda: bool(current_patrons),
text='{icon} {help}'.format(
icon='<i class="fa fa-shopping-basket"></i>',
help=_('Interlibrary loan request')
Expand Down