diff --git a/rero_ils/modules/ill_requests/views.py b/rero_ils/modules/ill_requests/views.py index 1f4c080212..0f4e446e05 100644 --- a/rero_ils/modules/ill_requests/views.py +++ b/rero_ils/modules/ill_requests/views.py @@ -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 @@ -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) diff --git a/rero_ils/modules/patrons/api.py b/rero_ils/modules/patrons/api.py index c0b0f295aa..e8fd1c21ef 100644 --- a/rero_ils/modules/patrons/api.py +++ b/rero_ils/modules/patrons/api.py @@ -314,7 +314,7 @@ 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] @@ -322,17 +322,14 @@ def get_librarian_by_user(cls, user): @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): @@ -340,8 +337,6 @@ def get_patron_by_email(cls, 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): diff --git a/rero_ils/modules/patrons/utils.py b/rero_ils/modules/patrons/utils.py index f027e3ed1b..ab00a428d8 100644 --- a/rero_ils/modules/patrons/utils.py +++ b/rero_ils/modules/patrons/utils.py @@ -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 diff --git a/rero_ils/theme/views.py b/rero_ils/theme/views.py index d6defda36e..8d46ae2e83 100644 --- a/rero_ils/theme/views.py +++ b/rero_ils/theme/views.py @@ -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( @@ -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='', help=_('Interlibrary loan request')