05/24 Enhance functionalities 2

This commit is contained in:
2026-05-24 23:04:55 -04:00
parent cb98c7e222
commit 13f8ba124d
11 changed files with 309 additions and 77 deletions
+37 -4
View File
@@ -250,6 +250,23 @@ def get_user_by_id(user_id: int):
conn.close()
def update_user_profile(user_id: int, full_name: str, email: str):
"""Allow a user to update their own full name and email address."""
conn = None
try:
conn = get_connection()
cur = conn.cursor()
cur.execute(
"UPDATE users SET full_name=%s, email=%s WHERE id=%s",
(full_name.strip() or None, email.strip().lower() or None, user_id),
)
conn.commit()
cur.close()
finally:
if conn:
conn.close()
def create_user(admin_id, username, password, role, full_name, email=None):
conn = None
try:
@@ -1092,12 +1109,28 @@ def get_admin_dashboard_stats():
total_users = cur.fetchone()["n"]
cur.execute("SELECT COUNT(DISTINCT user_id) AS n FROM shift_checks WHERE DATE(checked_at)=CURDATE()")
active_today = cur.fetchone()["n"]
cur.execute("SELECT COUNT(*) AS n FROM bid_tracker WHERE status IN ('open','monitoring')")
open_bids = cur.fetchone()["n"]
cur.execute(
"SELECT COUNT(*) AS n FROM bid_tracker"
" WHERE status IN ('open','monitoring')"
" AND due_date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)"
)
bids_due_soon = cur.fetchone()["n"]
cur.execute(
"SELECT COUNT(*) AS n FROM ai_analysis_log"
" WHERE analyzed_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)"
)
ai_analyses_30d = cur.fetchone()["n"]
cur.close()
return {
"user_stats": user_stats,
"total_sites": total_sites,
"total_users": total_users,
"active_today": active_today,
"user_stats": user_stats,
"total_sites": total_sites,
"total_users": total_users,
"active_today": active_today,
"open_bids": open_bids,
"bids_due_soon": bids_due_soon,
"ai_analyses_30d": ai_analyses_30d,
}
finally:
if conn: