feat: Add comprehensive issue/bug tracking system

Implement a complete issue management system with client portal integration
and internal admin interface for tracking and resolving client-reported issues.

Features:
- New Issue model with full lifecycle management (open, in_progress, resolved, closed, cancelled)
- Priority levels (low, medium, high, urgent) with visual indicators
- Issue linking to projects and tasks
- Create tasks directly from issues
- Client portal integration for issue reporting and viewing
- Internal admin routes for issue management, filtering, and assignment
- Comprehensive templates for both client and admin views
- Status filtering and search functionality
- Issue assignment to internal users
- Automatic timestamp tracking (created, updated, resolved, closed)

Client Portal:
- Clients can report new issues with project association
- View all issues with status filtering
- View individual issue details
- Submit issues with optional submitter name/email

Admin Interface:
- List all issues with advanced filtering (status, priority, client, project, assignee, search)
- View, edit, and delete issues
- Link issues to existing tasks
- Create tasks from issues
- Update issue status, priority, and assignment
- Issue statistics dashboard

Technical:
- Added Issue model with relationships to Client, Project, Task, and User
- New issues blueprint for internal management
- Extended client_portal routes with issue endpoints
- Updated model imports and relationships
- Added navigation links in base templates
- Version bump to 4.6.0
- Code cleanup in docker scripts and schema verification
This commit is contained in:
Dries Peeters
2025-12-14 07:25:42 +01:00
parent 8324636e2b
commit 7791e6ada0
27 changed files with 1654 additions and 48 deletions
+8 -2
View File
@@ -96,8 +96,14 @@ def verify_and_fix_table(engine, inspector, model_class, dialect):
# Check if table exists
if table_name not in inspector.get_table_names():
print(f"⚠ Table '{table_name}' does not exist (will be created by migrations)")
return 0
print(f"⚠ Table '{table_name}' does not exist, creating it...")
try:
# Create the table
model_class.__table__.create(engine, checkfirst=True)
print(f" ✓ Created table '{table_name}'")
except Exception as e:
print(f" ✗ Failed to create table '{table_name}': {e}")
return 0
# Get expected columns from model
expected_columns = {}