Commit Graph

126 Commits

Author SHA1 Message Date
Dries Peeters ac829c5dbf Update setup.py 2026-03-08 06:22:27 +01:00
Dries Peeters cac75d9e5e Update setup.py 2026-03-06 22:16:09 +01:00
Dries Peeters d0c5b0480d Update setup.py 2026-03-02 20:55:51 +01:00
Dries Peeters 9883b61cbf Update setup.py 2026-03-01 07:39:41 +01:00
Dries Peeters 61be74680b Update setup.py 2026-02-28 17:30:50 +01:00
Dries Peeters 61256cdc60 Bump version to 4.20.6 and update documentation 2026-02-20 09:59:35 +01:00
Dries Peeters 11c6c5559b Bump version to 4.20.5 and update documentation 2026-02-17 20:32:54 +01:00
Dries Peeters 94ed0ae7d7 VErsion bump 2026-02-16 22:00:14 +01:00
Dries Peeters cd3b1b68ce Update Render 2026-02-16 21:49:48 +01:00
Dries Peeters 32f8a90ded Version bump 2026-02-16 21:28:44 +01:00
Dries Peeters a3d362ec48 Version bump 2026-02-16 20:34:48 +01:00
Dries Peeters def875431c chore: bump version to 4.20.0 and update documentation 2026-02-16 09:34:15 +01:00
Dries Peeters de4abbd984 Version Bump 4.19.2 2026-02-14 22:16:57 +01:00
Dries Peeters e68f231b91 feat: API v1 CRM/approvals, api_responses, templates, version & RBAC docs
- REST API v1: add deals, leads, contacts, time-entry-approvals (CRUD + approve/reject/cancel/bulk-approve). New scopes and /info entries.
- Standardize API errors: use error_response, forbidden_response, not_found_response in api_v1 (projects + new CRM/approval routes).
- Consolidate templates: move root templates/ into app/templates/, remove ChoiceLoader and legacy root files.
- Version: README/FEATURES_COMPLETE/CHANGELOG/mobile docs reference setup.py as single source (4.19.0); add [4.19.0] changelog entry.
- Docs: SERVICE_LAYER_AND_BASE_CRUD.md, RBAC_PERMISSION_MODEL.md; base_crud_service docstring points to service-layer doc.
- Mark projects_refactored_example, timer_refactored, invoices_refactored as REFERENCE ONLY in docstrings.
2026-02-13 21:43:09 +01:00
Dries Peeters 7110194080 VErsion Bump 4.19.0 2026-02-09 21:38:55 +01:00
Dries Peeters a11a37c7df Version Bump 4.18.4 2026-02-08 21:29:39 +01:00
Dries Peeters 2814661cf1 Version Bump 4.18.3 2026-02-08 11:22:22 +01:00
Dries Peeters a77eb2361e Version bump 4.18.2 2026-02-07 22:26:40 +01:00
Dries Peeters ab0d03ffa5 Version Bump
4.18.1
2026-02-07 08:23:46 +01:00
Dries Peeters 1ebfbf39de refactor: comprehensive code quality, security, and performance improvements
Performance:
- Fix N+1 queries in reports.py with joinedload for TimeEntry.project,
  TimeEntry.user, TimeEntry.task, and Project.client across 6 query locations
- Replace per-task time_entries loops with batch UPDATE queries in tasks.py
- Use efficient subquery for favorite project IDs in projects.py

Architecture:
- Add get_by_id() and get_by_name() methods to ProjectService and ClientService
- Route project/client lookups through service layer in timer.py, projects.py,
  and clients.py instead of direct Model.query calls

Security:
- Add sanitize_input() with length limits to form inputs in clients.py,
  projects.py, timer.py, issues.py, and auth.py
- Add email format validation for client creation
- Warn at startup when SECRET_KEY uses the default value or is too short
  in ProductionConfig
- Replace 7 bare except: pass clauses with specific exception types
  (OSError, IOError, TypeError, ValueError) in admin.py, settings.py,
  and invoice.py

Authorization:
- Migrate all @admin_required decorators to @admin_or_permission_required()
  with granular permissions (manage_roles, manage_kanban, manage_webhooks,
  manage_api_tokens, manage_integrations, access_admin) across permissions.py,
  kanban.py, webhooks.py, and admin.py (28 routes total)

Frontend:
- Remove 40+ console.log debug statements across 18 JS files
- Replace 42 inline onclick/onchange handlers in base.html with delegated
  event listeners using data-dropdown and data-no-propagation attributes
- Migrate 6 inline handlers in time_entries_overview.html to addEventListener
- Extract shared typing detection into typing-utils.js, eliminating 5
  duplicate isTyping() implementations across keyboard shortcut files
- Add missing aria-label attributes to icon-only buttons

Dependencies:
- Migrate from pytz to stdlib zoneinfo (Python 3.9+) across all 6 files
  that used pytz; replace pytz with tzdata in requirements.txt
- Separate dev/test dependencies into requirements-dev.txt
- Configure RotatingFileHandler (10MB, 5 backups) for app and JSON logs

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 07:56:23 +01:00
Dries Peeters c0fd80d5e0 Bump version to 4.17.6
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 21:18:00 +01:00
Dries Peeters 8d8fa582ec chore: bump version to 4.17.5
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-05 19:12:07 +01:00
Dries Peeters 33277d32eb chore: bump version to 4.17.4
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-04 22:10:36 +01:00
Dries Peeters 0e9f318f07 Version bump v4.17.3
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 22:21:48 +01:00
Dries Peeters 69bef9741a Version bump v4.17.2
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-03 20:27:52 +01:00
Dries Peeters 5a33186e5f Version bump v4.17.1 2026-02-02 20:31:10 +01:00
Dries Peeters 80e74905e8 Version bump 4.17.0 2026-02-02 19:34:28 +01:00
Dries Peeters 5e5ebbb263 Version Bump V4.16.1 2026-02-02 15:04:34 +01:00
Dries Peeters 94fc19f6f2 Build: add icon generation to CI and scripts, bump version to 4.16.0
- Run app icon and launcher icon generation in build-mobile workflow
- Add generate-mobile-icon scripts (Python/Pillow, ImageMagick, Inkscape)
- BUILD.md: document icon requirements and troubleshooting
- setup.py: version 4.16.0

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-01 16:51:13 +01:00
Dries Peeters 0c999fd780 Version bump v4.15.1 2026-01-31 08:06:13 +01:00
Dries Peeters 0480b1d1c5 Version bump 4.15.0 2026-01-30 17:42:05 +01:00
Dries Peeters de1153f9ef Version bump: v4.14.2 2026-01-28 19:19:31 +01:00
Dries Peeters 02bdbe2411 Version bump to 4.14.1 2026-01-28 08:52:41 +01:00
Dries Peeters 93e21bd256 Version Bump to 4.14.0 2026-01-27 21:51:13 +01:00
Dries Peeters c97318926f Version Bump 2026-01-26 14:53:56 +01:00
Dries Peeters 8d3469d741 Version Bump 2026-01-25 08:36:22 +01:00
Dries Peeters 84975f5065 Version Bump 2026-01-23 22:39:45 +01:00
Dries Peeters 3ac5488a9c Version Bump 2026-01-22 20:18:08 +01:00
Dries Peeters 606e7a9dc1 feat: Add comprehensive module management system with route protection
- Add @module_enabled decorator to all module routes (30+ route files)
  - Protects routes for inventory, mileage, per_diem, project_templates,
    gantt, kanban, weekly_goals, issues, time_entry_templates, reports,
    custom_reports, scheduled_reports, invoice_approvals, recurring_invoices,
    payments, payment_gateways, budget_alerts, analytics, integrations,
    import_export, saved_filters, workflows, time_approvals, activity_feed,
    recurring_tasks, team_chat, client_portal, kiosk, and more
  - Ensures disabled modules are not accessible to users

- Fix indentation errors in route files
  - Remove duplicate module_enabled imports incorrectly placed inside
    function bodies in 8 files (import_export, client_portal, custom_reports,
    integrations, kiosk, payment_gateways, scheduled_reports, team_chat)
  - Move all imports to top of files for proper scope

- Fix Jinja2 template error in admin/settings.html
  - Replace invalid loop.parent.loop.last with namespace-based approach
  - Use Jinja2 namespace feature to track first item for comma placement
  - Fixes UndefinedError when rendering module dependencies and names

- Fix JavaScript syntax error in admin/settings.html
  - Remove orphaned closing braces causing parse errors
  - Restores toggleCategory function availability

- Update task templates to include module visibility checks
  - Add module_enabled checks to task creation and editing templates

This commit completes the module management system, allowing administrators
to globally enable/disable modules, with all routes properly protected and
UI elements conditionally rendered based on module status.
2026-01-22 19:47:22 +01:00
Dries Peeters f5405d24ab Version Bump 2026-01-21 15:14:08 +01:00
Dries Peeters 2ad89848f3 Version Bump
bump to version 4.11.1
2026-01-20 21:21:33 +01:00
Dries Peeters d510617d3c Version Bump 2026-01-16 09:19:36 +01:00
Dries Peeters c5ada775d3 chore: Bump version to 4.10.7 2026-01-14 21:15:24 +01:00
Dries Peeters d7c0a277d5 Update setup.py 2026-01-13 21:58:43 +01:00
Dries Peeters 5d62b16bd5 Fix unwanted border lines in PDF template editor
- 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.
2026-01-13 20:09:15 +01:00
Dries Peeters f998961041 Version Bump 2026-01-13 13:45:36 +01:00
Dries Peeters 2af0a931aa chore: bump version to 4.10.3 2026-01-12 20:09:15 +01:00
Dries Peeters dd125fbc9c Bump version to 4.10.2 2026-01-11 21:48:32 +01:00
Dries Peeters 15b0c2c2b4 chore: bump version to 4.10.1 2026-01-11 12:15:37 +01:00
Dries Peeters 36483648bb chore: Update Docker configuration and infrastructure setup
- 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)
2026-01-11 08:38:10 +01:00