755c39a0f6
feat : extend export endpoint for multi-user, multi-project, client filters
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-25 18:41:05 +01:00
8f8eeddd91
feat : add downloadExport async method to time-entries service
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-25 18:41:05 +01:00
548b101d82
feat : add i18n keys for export modal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-25 18:41:05 +01:00
Matthieu
e3149f8a27
chore : bump version to v0.3.10 and add push-tickets-lesstime skill
...
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Successful in 1m41s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.3.10
2026-03-25 17:36:54 +01:00
gitea-actions
32aff3d4d3
chore: bump version to v0.3.9
Auto Tag Develop / tag (push) Successful in 6s
Build Release Artefact / build (push) Successful in 2m6s
v0.3.9
2026-03-24 20:06:10 +00:00
Matthieu
9760de1805
feat : add export button to time-tracking page
...
Auto Tag Develop / tag (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:16:06 +01:00
Matthieu
f72dd57bd0
feat : add getExportUrl to time-entries service and i18n key
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:15:04 +01:00
Matthieu
a8f7c77758
feat : add TimeEntryExportController with auth, validation, and filters
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:03:35 +01:00
Matthieu
a09a415393
feat : add TimeEntryExportService generating XLSX with detail and recap sheets
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:02:18 +01:00
Matthieu
8208df1ade
feat : add findForExport repository method for time entries
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 16:00:22 +01:00
Matthieu
15af8975f0
chore : add phpoffice/phpspreadsheet dependency for time entry export
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 15:59:30 +01:00
Matthieu
040cbfc588
docs : add time entry export implementation plan (LST-41)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 15:54:06 +01:00
Matthieu
e796741dd8
docs : add time entry export design spec (LST-41)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-24 15:47:33 +01:00
Matthieu
9e7d196443
chore : bump version to v0.3.8
...
Auto Tag Develop / tag (push) Successful in 4s
Build Release Artefact / build (push) Successful in 1m56s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.3.8
2026-03-20 14:20:57 +01:00
Matthieu
3e9a0c93eb
fix(admin) : embed client and project in user list serialization
...
Client.id/name and Project.id/name were missing the user:list group,
causing them to be serialized as IRI strings instead of embedded objects.
This broke the user edit form which expected object properties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-20 14:20:17 +01:00
Matthieu
1d533d1d28
fix : allow ROLE_CLIENT to upload and view documents on client tickets
...
GetCollection/Get required ROLE_USER which ROLE_CLIENT doesn't have.
Added TaskDocumentProvider to scope client access to their own tickets.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-20 14:17:48 +01:00
Matthieu
efa42b6039
chore : bump version to v0.3.7
...
Auto Tag Develop / tag (push) Successful in 4s
Build Release Artefact / build (push) Successful in 1m32s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
v0.3.7
2026-03-19 18:12:10 +01:00
gitea-actions
7b0c2d9fba
chore: bump version to v0.3.6
Auto Tag Develop / tag (push) Successful in 4s
Build Release Artefact / build (push) Successful in 1m38s
v0.3.6
2026-03-19 17:10:47 +00:00
Matthieu
4ce0214ec9
feat(ui) : add dark mode toggle and remove inline dark: classes
...
Auto Tag Develop / tag (push) Successful in 6s
- Add dark mode toggle button in top nav
- Add darkMode store with localStorage persistence
- Enable Tailwind class-based dark mode
- Import dark.css global overrides
- Remove inline dark: Tailwind classes (handled by global CSS)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
43304bebcc
chore : update auto-generated reference config (Symfony rebuild)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
6668af73a7
chore : update MCP config with HTTP transport and local fallback
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
ff9a6763c3
fix(ui) : add dark mode overrides for MalioSelect, forms, and date inputs
...
- Override floating-label background (hardcoded white in malio/layer-ui)
- Override text-black, border-black, border-m-muted for Malio components
- Add color-scheme: dark for native date/datetime inputs
- Override red/blue button backgrounds for dark mode
- Fix checkbox/radio borders in dark mode
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
db5b3d39f9
fix : detect isFinal transition using Doctrine UnitOfWork original entity data
...
The previous approach read $data->getStatus() which already had the NEW
status after API Platform deserialization, making wasAlreadyFinal always
true when transitioning to a final status. Now we read the original status
from UnitOfWork snapshot.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
1fdc68c66d
fix(ui) : remove invalid string props on MalioInputTextArea (expects Number)
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
99b664cdd8
fix : use getIsFinal() instead of isFinal() on TaskStatus
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
fd1da75fd7
fix(ui) : use native date/datetime inputs instead of MalioInputText for planning dates
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
66264e3b8c
fix(ui) : escape @ in i18n placeholders for vue-i18n compatibility
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
a89fa6a7af
docs : update CLAUDE.md with Zimbra calendar integration references
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
6862944726
feat : add Zimbra config and calendar task fixtures
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
e00c33d20b
feat(ui) : add Zimbra CalDAV configuration tab in admin page
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
1aa72c3b56
feat(ui) : add deadline/scheduled columns and sort options to Mes tâches page
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
6a8e406cc5
feat(ui) : add deadline badges and calendar/recurrence icons to task cards and list items
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
83b42139b2
feat(ui) : add Planification tab to TaskModal with dates, calendar sync, and recurrence
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
1bdd3883aa
feat(ui) : add i18n translations for calendar integration
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
22c3c3dbd1
feat(ui) : add DTOs and services for calendar fields, recurrence, and Zimbra settings
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
cb768e0ce1
feat : update MCP tools with calendar fields and add recurrence tools
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
b3d317284e
feat : add RecurrenceHandler for auto-creating next recurring task
...
When a task transitions to a final status, archives the current task and creates
a new occurrence with recalculated dates. Adds TaskStatusRepository::findFirstNonFinal()
to assign the initial status to the new task.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
5a47adace5
feat : add TaskCalendarProcessor for CalDAV sync after DB operations
...
Handles Patch (persist + sync + recurrence check) and Delete (remove + cleanup Zimbra events).
Updates TaskNumberProcessor to sync newly created tasks to calendar.
Wires TaskCalendarProcessor as processor for Patch/Delete on Task entity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
75c53632c8
feat : add Zimbra settings API (CRUD + test connection)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
97a8afe559
feat : add RecurrenceCalculator service for next occurrence dates
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
bae6d10ece
feat : add CalDavService for Zimbra CalDAV sync
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
a0306bb5b2
feat(ui) : sync task code in URL for deep-linking from Gitea
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
7e36b6fd49
feat : migration for TaskRecurrence, ZimbraConfiguration, and Task calendar fields
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
e688c69438
feat : add calendar fields to Task entity (dates, sync, recurrence)
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:35 +01:00
Matthieu
e640e715bb
feat : add ZimbraConfiguration entity for CalDAV settings
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00
Matthieu
6784ee9ead
feat : add TaskRecurrence entity with RecurrenceType enum
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00
Matthieu
fc6b6587f9
feat : add RecurrenceType backed enum
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00
Matthieu
aa38e20c00
chore : add sabre/vobject for CalDAV ICS generation
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00
Matthieu
98370e0478
docs : fix plan review findings for Zimbra calendar integration
...
- Separate @Version from occurrenceCount (use dedicated version column)
- Fix processor chaining: TaskNumberProcessor for Post, TaskCalendarProcessor for Patch/Delete
- Detect status CHANGE to isFinal (not just current isFinal) to avoid duplicate recurrence
- Add DeleteTaskTool CalDAV cleanup for MCP deletions
- Add "Mes tâches" page update task (sort + columns)
- Use i18n for weekDays labels instead of hardcoded French
- Clarify documents/bookStackLinks NOT copied for recurring tasks
- Use multi-line getter/setter style note
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00
Matthieu
30fb36e668
docs : add Zimbra CalDAV calendar integration implementation plan
...
20 tasks covering entities, services, API resources, MCP tools,
frontend components, i18n, fixtures, and testing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-19 18:10:34 +01:00