diff --git a/product/ERP5Security/ERP5UserManager.py b/product/ERP5Security/ERP5UserManager.py index be4b23fe04bb2d586a62ff17b910d5252638e50d..29a45aa55eb0b6c268e87f861d2424514f3fb3a6 100644 --- a/product/ERP5Security/ERP5UserManager.py +++ b/product/ERP5Security/ERP5UserManager.py @@ -91,6 +91,22 @@ def getUserByLogin(portal, login, exact_match=True): return [x.getObject() for x in result if not exact_match or x['reference'] in login] +@transactional_cached(lambda portal, *args: args) +def getValidAssignmentList(user): + """Returns list of valid assignments.""" + assignment_list = [x for x in user.contentValues(portal_type="Assignment") if x.getValidationState() == "open"] + valid_assignment_list = [] + # check dates if exist + login_date = DateTime() + for assignment in assignment_list: + if assignment.getStartDate() is not None and \ + assignment.getStartDate() > login_date: + continue + if assignment.getStopDate() is not None and \ + assignment.getStopDate() < login_date: + continue + valid_assignment_list.append(assignment) + return valid_assignment_list class ERP5UserManager(BasePlugin): """ PAS plugin for managing users in ERP5 @@ -101,7 +117,6 @@ class ERP5UserManager(BasePlugin): security = ClassSecurityInfo() def __init__(self, id, title=None): - self._id = self.id = id self.title = title @@ -141,22 +156,9 @@ class ERP5UserManager(BasePlugin): user = user_list[0] try: - # get assignment - assignment_list = [x for x in user.contentValues(portal_type="Assignment") if x.getValidationState() == "open"] - valid_assignment_list = [] - # check dates if exist - login_date = DateTime() - for assignment in assignment_list: - if assignment.getStartDate() is not None and \ - assignment.getStartDate() > login_date: - continue - if assignment.hasStopDate() and \ - assignment.getStopDate() < login_date: - continue - valid_assignment_list.append(assignment) if (ignore_password or pw_validate(user.getPassword(), password)) and \ - len(valid_assignment_list) and user \ + len(getValidAssignmentList(user)) and user \ .getValidationState() != 'deleted': #user.getCareerRole() == 'internal': return login, login # use same for user_id and login finally: