diff --git a/frappe/__init__.py b/frappe/__init__.py index 6590df7d04..2a4a2ea107 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '7.2.2' +__version__ = '7.2.3' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/utils/user.py b/frappe/utils/user.py index ac1f2a8720..25364f8973 100755 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -7,6 +7,7 @@ import frappe, json from frappe import _dict import frappe.share from frappe.utils import cint +from frappe.core.doctype.user.user import get_total_users class UserPermissions: """ @@ -343,4 +344,18 @@ def disable_users(limits=None): for user in active_users: frappe.db.set_value("User", user, 'enabled', 0) + if get_total_users() > cint(limits.get('users')): + reset_simultaneous_sessions(cint(limits.get('users'))) + frappe.db.commit() + +def reset_simultaneous_sessions(user_limit): + for user in frappe.db.sql("""select name, simultaneous_sessions from tabUser + where name not in ('Administrator', 'Guest') and user_type = 'System User' and enabled=1 + order by creation desc""", as_dict=1): + if user.simultaneous_sessions < user_limit: + user_limit = user_limit - user.simultaneous_sessions + else: + frappe.db.set_value("User", user.name, "simultaneous_sessions", 1) + user_limit = user_limit - 1 +