Matthieu
c5898fbf74
feat(ui) : add create task button on my-tasks and responsive kanban columns
...
- Add "Créer une tâche" button on my-tasks page with mandatory project selector
- TaskModal now accepts optional projects prop for project selection in create mode
- Replace fixed-width kanban columns (w-72 shrink-0) with flexible layout (min-w-36 flex-1)
- Add min-w-0 and overflow-x-hidden on default layout to properly contain content
- Kanban now adapts to screen size from 1024px to 1920px+
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-16 16:35:02 +01:00
Matthieu
56bf88f293
fix : prevent document delete button from submitting the TaskModal form
...
The delete button in TaskDocumentList lacked type="button", causing it to
act as a submit button inside the form, which triggered handleSubmit and
closed the modal before the confirmation dialog could appear. Also added
guards to prevent closing TaskModal while a sub-modal is open.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-16 09:26:32 +01:00
e4fc34b90f
refactor : simplify codebase and fix critical issues
...
Backend:
- Add MCP Serializer to centralize entity-to-array conversion (~300 lines deduped)
- Fix race condition in task/ticket number generation (SELECT FOR UPDATE + transaction)
- Add unique constraint on task (project_id, number) with migration
- Fix MIME type validation: use server-detected finfo instead of client-supplied type
- Add allowlist of permitted MIME types for uploads
- Fix TaskDocumentDownloadController: allow ROLE_CLIENT access, add priority:1
- Fix notification sent even when ticket status unchanged
- Remove redundant exception constructors
- Simplify services (BookStackApi double fetch, TokenEncryptor, GiteaApi)
- Consolidate duplicate checks in processors
Frontend:
- Fix useApi isHandlingUnauthorized scope (module-level to prevent double 401 redirect)
- Fix client-tickets toast key copy-paste bug
- Merge duplicated tasks service methods (getByProject + getByProjectArchived)
- Extract shared uploadWithRelation helper in task-documents service
- Extract formatFileSize utility from duplicated component code
- Extract status transition logic into useClientTicketHelpers composable
- Remove dead code (unused router, handleLogout, empty script blocks)
- Merge duplicate watchers and onMounted calls
- Normalize arrow functions to function declarations per convention
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:09:16 +01:00
a5144443a4
fix(avatar) : address review findings — security and UX fixes
...
- Use getMimeType() instead of getClientMimeType() to prevent MIME spoofing
- Change IsGranted to IS_AUTHENTICATED_FULLY so ROLE_CLIENT can access avatars
- Remove Groups from avatarFileName (only avatarUrl needed by frontend)
- Disable aggressive caching to prevent stale avatar images
- Add error handling to avatar upload in profile page
- Use i18n for "Mon profil" button text
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 22:02:27 +01:00
afd4baed92
feat(avatar) : replace initials with UserAvatar component everywhere
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:58:46 +01:00
962b3d935c
feat(avatar) : add AvatarCropper modal with vue-advanced-cropper
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:56:11 +01:00
cea22f977b
feat(avatar) : add UserAvatar component with image/initials fallback
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:55:52 +01:00
f7a76c9e9b
feat(frontend) : add date filter component to time-tracking page
...
Reusable DateFilter component using @vuepic/vue-datepicker with day/week
toggle. Selecting a day switches to day view, selecting a week navigates
the calendar to that week. Includes "Aujourd'hui" and "Cette semaine"
quick shortcuts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:46:48 +01:00
7047f64a6b
fix(portal) : handle submittedBy as object or IRI in canEdit check
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:40:54 +01:00
254f8bc411
fix(admin) : handle null/IRI client in project filter for UserDrawer
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:34:21 +01:00
4e3e854aa2
fix(portal) : allow admin to edit tickets and enable document deletion
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 21:12:55 +01:00
49cd971e3e
feat(project) : add client tickets panel to project page
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:28 +01:00
ffe4a0117c
feat(portal) : allow client to edit own tickets
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 20:41:25 +01:00
f09ef67117
feat : date filter, project drawer, and misc frontend improvements
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:25:26 +01:00
a2fc8e6e52
feat(task) : add client ticket selector in TaskModal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 20:14:56 +01:00
e63ed63dd8
feat(frontend) : integrate NotificationBell in AppTopNav navbar
2026-03-15 19:48:13 +01:00
ad8142ac9d
feat(frontend) : add NotificationBell component with dropdown
2026-03-15 19:48:03 +01:00
0d21e59023
feat(admin) : add client tickets tab with list, filters, status change, and delete
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 19:42:49 +01:00
7210a0d96f
feat(kanban) : show client ticket icon on task cards, my-tasks, and task modal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 19:42:46 +01:00
7099f1ca95
feat(documents) : generalize TaskDocumentUpload and add upload zone to ticket detail modal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 19:42:43 +01:00
64961631e4
feat(frontend) : add client user management to admin
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 19:30:10 +01:00
4c19b68156
fix(gitea) : propagate API errors instead of silently returning empty results
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:58:55 +01:00
f978df6a4b
fix(frontend) : explicit import for ConfirmDeleteDocumentModal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:53:39 +01:00
98e832afa5
fix(frontend) : use dedicated confirm modal component for document deletion
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:48:10 +01:00
cbfbb16c59
feat(frontend) : replace confirm() with themed modal for document deletion
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:33:44 +01:00
9908f34580
fix(frontend) : refresh documents locally after upload/delete and improve progress UX
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:21:04 +01:00
7bf632c1da
feat(bookstack) : integrate TaskBookStackLinks into TaskModal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 18:15:39 +01:00
66a75c6b6a
feat(bookstack) : add TaskBookStackLinks component
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 18:15:37 +01:00
f53b2f3d1f
feat(bookstack) : add shelf select to ProjectDrawer
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 18:15:34 +01:00
5777e8386f
feat(bookstack) : add AdminBookStackTab component
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-15 18:15:27 +01:00
5327155a80
fix(frontend) : add missing useTaskDocumentService imports
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:12:29 +01:00
245a8a932e
feat(frontend) : integrate documents into TaskModal
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:09:20 +01:00
48ef434f8b
feat(frontend) : add document upload, list and preview components
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-15 18:08:10 +01:00
f888a29e0a
refactor(frontend) : make page headers and filters sticky across all pages
...
Wrap title + filters in a sticky container (top-8 sm:top-12, z-20, bg-white)
on all pages for consistent scroll behavior. Also fix SidebarTimer icon
visibility when sidebar is collapsed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-14 09:21:45 +01:00
802659434f
fix(frontend) : fix time-tracking page scroll with fixed header and filters
...
Restructure time-tracking page layout so the page title and filters
stay fixed while only the calendar grid body scrolls internally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-14 09:10:04 +01:00
0733ac16cd
feat : add project archiving feature
...
Allow projects to be archived/unarchived from the ProjectDrawer, with a
toggle filter on the projects page to show/hide archived projects.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-14 08:58:29 +01:00
Matthieu
c0b16ef6dc
refactor(frontend) : redesign TaskGitSection with tabs and collapsible commits, add scrollable modal
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 16:44:30 +01:00
Matthieu
c89f9c5596
fix : load Gitea URL on modal open instead of onMounted
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 14:19:54 +01:00
Matthieu
c7a0dafae8
feat : integrate TaskGitSection into TaskModal
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 14:04:29 +01:00
Matthieu
6eeacd2cb0
feat : add TaskGitSection component
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 14:03:51 +01:00
Matthieu
027e31e139
feat : add Gitea repo selector to ProjectDrawer
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 14:02:57 +01:00
Matthieu
5b204a3464
feat : add AdminGiteaTab component
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 14:01:39 +01:00
Matthieu
d3ea09319c
feat(frontend) : show project code and task number badge in TaskModal header
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 12:06:39 +01:00
Matthieu
bf9faee5f4
feat(frontend) : add current time indicator line on calendar
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 11:06:09 +01:00
Matthieu
7d1d81688e
refactor(frontend) : replace TaskDrawer with TaskModal for ticket create/edit
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 11:06:04 +01:00
Matthieu
9a9e5093f5
feat : add archive/unarchive to TaskGroupDrawer and fix isFinal serialization
...
Fix TaskStatus getter naming (isFinal -> getIsFinal) so Symfony serializer
properly exposes the isFinal field. Add archive/unarchive buttons and
non-final tasks info message to TaskGroupDrawer. Remove obsolete TaskType
entity and repository.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 10:50:41 +01:00
Matthieu
7e7e373231
fix(frontend) : fix dropdown z-index and dev config
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 08:20:43 +01:00
Matthieu
517511177c
feat : add project code and task auto-numbering
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 08:20:31 +01:00
Matthieu
56275a9ebe
refactor : rename TaskType to TaskTag across the stack
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-13 08:20:21 +01:00
Matthieu
dbae1f7536
feat(frontend) : add isFinal toggle to TaskStatusDrawer
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-12 18:08:19 +01:00