- Remove separator lines from loadDefaultLayout() in both quote and invoice templates
- Improve cleanup logic to detect and remove border lines at origin (0,0) with full page width
- Enhance filtering in code generation to catch border lines before export
- Add comprehensive line detection that calculates actual position from points array
- Filter out lines with colors #667eea, #dee2e6, and other gray/blue separator colors
- Ensure cleanup runs on template load to remove any saved unwanted elements
This fixes the persistent issue where unwanted border lines would reappear
even after deletion, especially at position (0,0) with full page width.
The lines are now filtered at multiple stages: during load, before save,
and during code generation to ensure they never appear in exported templates.
Fixes issue with unwanted border lines in PDF previews and generated PDFs.
- Update Dockerfile with improved build configuration
- Refactor docker-compose.yml with better service definitions
- Update setup.py for package installation
- Improve .dockerignore to exclude unnecessary files
- Clean up template files (whitespace and formatting)
- Fix has_any_permission() function calls: change from list syntax to argument syntax in base.html, clients/view.html, and projects/view.html
- Add permission checks to navigation menu items: Issues menu now requires view_all_issues or create_issues permission, Payment Gateways requires manage_payment_gateways permission
- Add delete_projects permission to Manager role in permissions_seed.py
- Bump version to 4.9.11
- Inventory: Group stock lots by warehouse, unit cost, lot type, and date
to prevent duplicate display entries
- Inventory: Add total value calculation and display per warehouse
- Migration: Make 082_add_global_integrations migration idempotent with
existence checks for columns and indexes
- Migration: Add 101_add_issues_table migration for client-reported issues
tracking with multi-database support (SQLite, PostgreSQL, MySQL)
- Version: Bump to 4.9.5
Add Peppol BIS Billing 3.0 (UBL) invoice sending via a configurable access point, including admin-configurable settings, per-invoice send history, and documentation/README updates.
Also introduce stock lots/allocations (valuation layers) with supporting inventory route/report/UI updates and hardened startup migration handling.
Some legacy/partially-upgraded databases already have one or more integration OAuth columns in settings (e.g. google_calendar_client_id). Only add missing columns and set defaults for columns that exist so upgrades don't fail with DuplicateColumn.
Bump version to 4.8.12.
Avoid DuplicateTable/duplicate index errors on partially-migrated databases by skipping creation of existing template tables (quote_templates, project_templates, time_entry_templates) and only creating missing indexes/columns.
Also bump version to 4.8.11.
Prevent Postgres upgrades from failing when alembic_version.version_num is too small for long revision IDs, and add an alias migration to bridge older installs that recorded '067_add_integration_credentials'.
- Add centralized module registry system (ModuleRegistry) for managing
module metadata, dependencies, and visibility across the application
- Create module helper utilities with decorators (@module_enabled) and
helper functions for route protection and template access
- Add database migration (092) to add missing module visibility flags
to settings and users tables for granular control
- Extend Settings and User models with additional module visibility
flags for CRM, Finance, Tools, and Advanced features
- Implement admin module management UI for system-wide module
enable/disable controls
- Add module checks to routes (calendar, contacts, deals, expenses,
invoices, leads, custom_reports) to enforce visibility rules
- Update scheduled report service and report templates to respect
module visibility settings
- Bump version to 4.8.0 in setup.py
- Add comprehensive documentation for module integration planning
and implementation analysis
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
- Bump version to 4.5.1
- Refactor version retrieval: make get_version_from_setup() public and add multiple path fallbacks for better reliability in production and development environments
- Optimize task listing performance:
* Replace joinedload with selectinload to avoid cartesian product issues
* Implement optimized pagination that avoids expensive count queries when possible
* Move AJAX request check earlier to skip unnecessary filter data loading
* Add query limits to filter dropdowns (projects: 500, users: 200)
* Optimize permission checks by checking is_admin first (no DB query)
- Update API info endpoint and context processor to use centralized version retrieval
- Maintain backward compatibility with _get_version_from_setup alias
- Add session state clearing (expunge_all) after rollbacks in custom field
definition error handlers to prevent stale session state
- Add graceful error handling for missing link_templates table with proper
rollback and session cleanup, preventing app crashes when migrations
haven't been run
- Add detailed performance logging to TaskService.list_tasks method to track
timing of each query step for performance monitoring
- Improve PWA install prompt UI with better toast integration, dismiss button,
and proper DOM manipulation using requestAnimationFrame
- Bump version to 4.5.0
- Add cache invalidation to update_entry API endpoint
- Add cache invalidation to edit_timer route
- Add cache invalidation to delete_entry API endpoint
- Add cache invalidation to delete_timer route
- Add cache invalidation to create_entry API endpoint
The dashboard caches data for 5 minutes, but the cache was not being
invalidated when time entries were modified. This caused the 'Recent
Entries' table to show stale duration values until the cache expired
or the browser tab was refreshed.
Now the dashboard cache is immediately invalidated whenever a time
entry is created, updated, or deleted, ensuring users see the latest
data without waiting for cache expiration.
- Add comprehensive offline sync improvements with enhanced IndexedDB support
- Optimize task model with cached total_hours calculation for better performance
- Improve task service query optimization and eager loading strategies
- Update CSP policy to allow CDN connections for improved resource loading
- Enhance service worker with better background sync capabilities
- Improve error handling and offline queue processing
- Update base template and comment templates for better UX
- Bump version to 4.3.2
- Add count_clients_with_value() method to CustomFieldDefinition model to track how many clients have values for each custom field
- Display client count in custom field definitions list view
- Automatically remove custom field values from all clients when a custom field definition is deleted
- Show user-friendly confirmation message indicating how many clients were affected when deleting a field definition
- Update client view to use custom field definitions for friendly field names instead of raw field keys
- Add comprehensive test suite for custom field definitions including model creation, client count functionality, deletion cleanup, and edge cases
- Update templates to display client counts and improve delete confirmation dialogs
- Fix AUTH_METHOD=none: Read from Flask app config instead of Config class
- Add comprehensive schema verification: Verify all SQLAlchemy models against
database and auto-fix missing columns
- Improve startup logging: Unified format with timestamps and log levels
- Enhanced migration flow: Automatic schema verification after migrations
Fixes authentication issue where password field showed even with AUTH_METHOD=none.
Ensures all database columns from models exist, preventing missing column errors.
Improves startup logging for better debugging and monitoring.