Commit Graph

151 Commits

Author SHA1 Message Date
Dries Peeters 96e0acbbea chore(release): version 5.5.7 and changelog
Bump setup.py to 5.5.7 and document the invoice PDF designer layout fix,
designer-to-ReportLab template parity, and preview vs export alignment
for issue #622 in CHANGELOG.md.
2026-05-14 21:10:43 +02:00
Dries Peeters 52c7e9f02a feat(ai): gate helper by default; add uninstall docs and release 5.5.6
- Honor AI_ENABLED across session AI, REST v1, LLM service, templates, and
  context; add regression tests for the AI helper gate.
- Docker Compose: optional Ollama behind the ai profile; align env.example
  and example compose with safe defaults.
- Add UNINSTALL.md with a dedicated AI teardown section; cross-link from
  README, INSTALLATION, Getting Started, docs index, and Docker setup guide.
- Record 5.5.6 in CHANGELOG and sync version examples in BUILD_CONFIGURATION;
  bump setup.py to 5.5.6.
2026-05-14 06:46:59 +02:00
Dries Peeters 0d9e588597 chore(release): bump version to 5.5.5
Move shell layout fixes from [Unreleased] to CHANGELOG [5.5.5].
Sync BUILD_CONFIGURATION.md version code example and setup.py snippet
with setup.py (single source of truth).
2026-05-12 20:20:23 +02:00
Dries Peeters 1dff4e7b05 Release 5.5.4
Bump package version in setup.py to 5.5.4.

CHANGELOG: document 5.5.4 (full-database restore hardening and backup/restore documentation).

docs/BUILD_CONFIGURATION.md: refresh version-code example and setup.py snippet to 5.5.4 (50504).
2026-05-11 07:27:13 +02:00
Dries Peeters 381e8b9e84 chore(release): 5.5.3
Document 5.5.3 fixes in CHANGELOG and bump package version.
2026-05-06 08:15:43 +02:00
Dries Peeters f442bff433 Release 5.5.2
Bump version in setup.py; document release in CHANGELOG and align
BUILD_CONFIGURATION examples with the current patch version.
2026-04-30 06:21:45 +02:00
Dries Peeters 135dba9a85 chore(release): bump version to 5.5.1
Update build/versioning docs to match setup.py.
2026-04-29 12:53:15 +02:00
Dries Peeters 6b771537d4 chore(release): version 5.5.0 and documentation sync
- Fix setup.py version string (missing quote).
- Promote CHANGELOG [Unreleased] entries to [5.5.0] (2026-04-27); leave empty [Unreleased].
- Update BUILD_CONFIGURATION.md example version to match setup.py.
2026-04-27 22:23:44 +02:00
Dries Peeters d161b399b9 Version Bump 2026-04-25 17:38:35 +02:00
Dries Peeters 4c427c92c0 feat(desktop): centralize connection lifecycle and expand login flow
Introduce a connection manager (state machine, listeners, offline handling,
token/server binding) with timer start/stop reconciliation helpers. Refactor
app.js to use it and extend the first-run wizard (welcome + server + token).

Add node:test coverage for the manager, timer operations, and an /api/v1/info
integration harness. Rebuild renderer bundle for packaging.

Bump desktop toolchain (electron, electron-builder, esbuild) and Python
package version to 5.3.2 in setup.py.
2026-04-24 16:17:56 +02:00
Dries Peeters d2dbbc891b Version Bump 2026-04-15 08:19:25 +02:00
Dries Peeters 70510a6622 fix: quote create 500, line order, and Factur-X PDF parity
Quotes (#583):
- Add requires_approval, approval_level, and can_be_sent; wire create form
- Migrations 145 (approval columns) and 146 (quote_items.position)
- Order Quote.items by position; set positions on create/edit/duplicate/API
- Fix view template approval branch (not_required); add web regression test

Invoices / PEPPOL:
- Use the same Factur-X embed and PDF/A-3 normalization for export and
  email attachments; Associated File Data + text/xml metadata
- CII/UBL validators, pdfa3, zugferd, and invoice_pdf_postprocess helper
- Bundle compact sRGB ICC (app/resources/icc/); INVOICE_SRGB_ICC_PATH override
- Package data in setup.py; extend PEPPOL_EINVOICING.md and tests
2026-04-12 13:34:58 +02:00
Dries Peeters 507266fbbf docs: API v1 import, bulk, idempotency, rate limits; Linear guide; release tooling
- Document CSV import, bulk actions, Idempotency-Key, and token rate limits in REST_API and scopes.
- Clarify session vs token CSV import in import/export README; mobile offline idempotency note.
- Add docs/integrations/LINEAR.md; refresh CODE_BASED_ANALYSIS_REPORT (v5.3.0, 14 connectors).
- env.example: API_TOKEN_RATE_LIMIT_*; setup.py version; CD release workflow tweak; Zapier webhook sample.
2026-04-05 08:39:22 +02:00
Dries Peeters 47dd46a1de Update to version v5.2.2 2026-03-28 20:08:49 +01:00
Dries Peeters 29f085a148 Version Bump to v5.2.1 2026-03-28 18:04:54 +01:00
Dries Peeters 81a866a655 Version Bump to 5.2.0 2026-03-27 06:47:40 +01:00
Dries Peeters ac569122bf Update setup.py 2026-03-26 18:25:23 +01:00
Dries Peeters a97520bbaf version Bump 2026-03-26 17:06:32 +01:00
Dries Peeters 3d0ad839c4 Version Bump v5.0.0 2026-03-16 17:02:08 +01:00
Dries Peeters fc9bd4c43b Version Bump 4.23.1 2026-03-15 10:58:19 +01:00
Dries Peeters 5eea34a97d Version Bump 4.23.0 2026-03-15 09:39:28 +01:00
Dries Peeters e85b9ca596 Update setup.py 2026-03-12 21:39:24 +01:00
Dries Peeters 8f1cfd2abd Update setup.py 2026-03-11 19:23:18 +01:00
Dries Peeters 42c73871ab Update setup.py 2026-03-11 12:50:13 +01:00
Dries Peeters 9f3048f6fb Update setup.py 2026-03-09 20:50:02 +01:00
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