diff --git a/routes/system_admin.py b/routes/system_admin.py index 404ba24..b37d27c 100644 --- a/routes/system_admin.py +++ b/routes/system_admin.py @@ -6,7 +6,8 @@ from flask import Blueprint, render_template, request, redirect, url_for, flash, from models import (db, Company, User, Role, Team, Project, TimeEntry, SystemSettings, SystemEvent, BrandingSettings, Task, SubTask, TaskDependency, Sprint, Comment, UserPreferences, UserDashboard, WorkConfig, CompanySettings, - CompanyWorkConfig, ProjectCategory) + CompanyWorkConfig, ProjectCategory, Note, NoteFolder, NoteShare, + Announcement, CompanyInvitation) from routes.auth import system_admin_required from flask import session from sqlalchemy import func @@ -226,6 +227,34 @@ def delete_company(company_id): db.session.query(User.id).filter(User.company_id == company_id) )).delete(synchronize_session=False) + # Delete notes and note-related data + user_ids_subquery = db.session.query(User.id).filter(User.company_id == company_id).subquery() + + # Delete note shares + NoteShare.query.filter(NoteShare.created_by_id.in_(user_ids_subquery)).delete(synchronize_session=False) + + # Delete notes + Note.query.filter(Note.created_by_id.in_(user_ids_subquery)).delete(synchronize_session=False) + + # Delete note folders + NoteFolder.query.filter(NoteFolder.created_by_id.in_(user_ids_subquery)).delete(synchronize_session=False) + + # Delete announcements + Announcement.query.filter(Announcement.created_by_id.in_(user_ids_subquery)).delete(synchronize_session=False) + + # Delete invitations + CompanyInvitation.query.filter( + (CompanyInvitation.invited_by_id.in_(user_ids_subquery)) | + (CompanyInvitation.accepted_by_user_id.in_(user_ids_subquery)) + ).delete(synchronize_session=False) + + # Delete system events associated with users from this company + SystemEvent.query.filter(SystemEvent.user_id.in_(user_ids_subquery)).delete(synchronize_session=False) + + # Clear branding settings updated_by references + BrandingSettings.query.filter(BrandingSettings.updated_by_id.in_(user_ids_subquery)).update( + {BrandingSettings.updated_by_id: None}, synchronize_session=False) + # Delete users User.query.filter_by(company_id=company_id).delete() diff --git a/static/css/style.css b/static/css/style.css index 730f740..0f0ca6f 100644 --- a/static/css/style.css +++ b/static/css/style.css @@ -530,8 +530,8 @@ button { /* Button Outline Variants */ .btn-outline { - border: 1px solid #007bff; - color: #007bff; + border: 1px solid #6c757d; + color: #495057; background: transparent; } diff --git a/templates/admin_projects.html b/templates/admin_projects.html index e2e163b..ddfe06f 100644 --- a/templates/admin_projects.html +++ b/templates/admin_projects.html @@ -65,7 +65,7 @@
- {{ category.icon or '' }} + {{ category.icon|safe if category.icon else ''|safe }} {{ category.name }}
@@ -141,7 +141,7 @@ {% if project.category %}
- {{ project.category.icon or '' }} {{ project.category.name }} + {{ project.category.icon|safe if project.category.icon else ''|safe }} {{ project.category.name }}
{% endif %} @@ -226,7 +226,7 @@ {% if project.category %} - {{ project.category.icon or '' }} {{ project.category.name }} + {{ project.category.icon|safe if project.category.icon else ''|safe }} {{ project.category.name }} {% else %} - diff --git a/templates/analytics.html b/templates/analytics.html index 2c2aa2f..78a6c4b 100644 --- a/templates/analytics.html +++ b/templates/analytics.html @@ -2,15 +2,25 @@ {% block content %}
-