diff --git a/core/scripts/webpanel/routers/user/viewmodel.py b/core/scripts/webpanel/routers/user/viewmodel.py index 9db3110..f7e43ce 100644 --- a/core/scripts/webpanel/routers/user/viewmodel.py +++ b/core/scripts/webpanel/routers/user/viewmodel.py @@ -9,6 +9,7 @@ class User(BaseModel): traffic_used: str expiry_date: str expiry_days: str + day_usage: str enable: bool unlimited_ip: bool online_count: int = 0 @@ -36,6 +37,7 @@ class User(BaseModel): 'traffic_used': 'N/A', 'expiry_date': 'N/A', 'expiry_days': 'N/A', + 'day_usage': 'N/A', 'enable': False, 'unlimited_ip': False, 'online_count': 0 @@ -43,21 +45,26 @@ class User(BaseModel): expiration_days = user_data.get('expiration_days', 0) creation_date_str = user_data.get("account_creation_date") + + day_usage = "On-hold" + display_expiry_days = "On-hold" + display_expiry_date = "On-hold" - if not creation_date_str: - display_expiry_days = "On-hold" - display_expiry_date = "On-hold" - elif expiration_days <= 0: - display_expiry_days = "Unlimited" - display_expiry_date = "Unlimited" - else: - display_expiry_days = str(expiration_days) + if creation_date_str: try: creation_date = datetime.strptime(creation_date_str, "%Y-%m-%d") - expiry_dt_obj = creation_date + timedelta(days=expiration_days) - display_expiry_date = expiry_dt_obj.strftime("%Y-%m-%d") + day_usage = str((datetime.now() - creation_date).days) + + if expiration_days <= 0: + display_expiry_days = "Unlimited" + display_expiry_date = "Unlimited" + else: + display_expiry_days = str(expiration_days) + expiry_dt_obj = creation_date + timedelta(days=expiration_days) + display_expiry_date = expiry_dt_obj.strftime("%Y-%m-%d") except (ValueError, TypeError): display_expiry_date = "Error" + day_usage = "Error" used_bytes = user_data.get("download_bytes", 0) + user_data.get("upload_bytes", 0) quota_bytes = user_data.get('max_download_bytes', 0) @@ -78,6 +85,7 @@ class User(BaseModel): 'traffic_used': traffic_used_display, 'expiry_date': display_expiry_date, 'expiry_days': display_expiry_days, + 'day_usage': day_usage, 'enable': not user_data.get('blocked', False), 'unlimited_ip': user_data.get('unlimited_user', False), 'online_count': user_data.get('online_count', 0) diff --git a/core/scripts/webpanel/templates/users.html b/core/scripts/webpanel/templates/users.html index 0cb0382..4825065 100644 --- a/core/scripts/webpanel/templates/users.html +++ b/core/scripts/webpanel/templates/users.html @@ -83,6 +83,7 @@ Traffic Usage Expiry Date Expiry Days + Day Usage Enable Unlimited IP Configs @@ -116,6 +117,7 @@ {{ user.traffic_used }} {{ user.expiry_date }} {{ user.expiry_days }} + {{ user.day_usage }} {% if user.enable %} @@ -381,8 +383,8 @@ switch (filter) { case "on-hold": showRow = $(this).find("td:eq(2) i").hasClass("text-warning"); break; case "online": showRow = $(this).find("td:eq(2) i").hasClass("text-success"); break; - case "enable": showRow = $(this).find("td:eq(7) i").hasClass("text-success"); break; - case "disable": showRow = $(this).find("td:eq(7) i").hasClass("text-danger"); break; + case "enable": showRow = $(this).find("td:eq(8) i").hasClass("text-success"); break; + case "disable": showRow = $(this).find("td:eq(8) i").hasClass("text-danger"); break; default: showRow = true; } $(this).toggle(showRow).find(".user-checkbox").prop("checked", false); @@ -463,7 +465,7 @@ $("#editUsername").val(user); $("#editTrafficLimit").val(parseFloat(trafficText.split('/')[1]) || 0); $("#editExpirationDays").val(parseInt(expiryText) || 0); - $("#editBlocked").prop("checked", !row.find("td:eq(7) i").hasClass("text-success")); + $("#editBlocked").prop("checked", !row.find("td:eq(8) i").hasClass("text-success")); $("#editUnlimitedIp").prop("checked", row.find(".unlimited-ip-cell i").hasClass("text-primary")); validateUsername('#editUsername', '#editUsernameError'); });