Deux lots regroupés sur la branche feat/absence-management. Suppression complète du portail client : - retire ROLE_CLIENT (security.yaml) ; User::getRoles() ajoute toujours ROLE_USER - supprime l'entité ClientTicket (+ repo, states, relations), User.client et User.allowedProjects, NotificationService, ProjectAllowedExtension, le bloc ROLE_CLIENT de MailAccessChecker - front : pages /portal, layout portal, composants client-ticket/, AdminClientTicketTab, services/dto/i18n/docs associés - fixtures : retire les users client-liot / client-acme - migration Version20260522110000 (drop client_ticket, user_allowed_projects, colonnes liées ; task_document.task_id -> NOT NULL) - tests : retire les cas obsolètes testant le blocage des clients sur le mail Module gestion des absences (WIP) : - entités / migrations (Version20260521160000, Version20260522090000) - pages absences.vue / team-absences.vue, composants frontend/components/absence/ - services front, AccrueLeaveCommand, PublicHolidayController Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
import type { TaskStatus } from './task-status'
|
|
import type { TaskEffort } from './task-effort'
|
|
import type { TaskPriority } from './task-priority'
|
|
import type { TaskTag } from './task-tag'
|
|
import type { TaskGroup } from './task-group'
|
|
import type { UserData } from './user-data'
|
|
import type { Project } from './project'
|
|
import type { TaskDocument } from './task-document'
|
|
|
|
export type Task = {
|
|
id: number
|
|
'@id'?: string
|
|
number: number
|
|
title: string
|
|
description: string | null
|
|
status: TaskStatus | null
|
|
effort: TaskEffort | null
|
|
priority: TaskPriority | null
|
|
assignee: UserData | null
|
|
collaborators: UserData[]
|
|
group: TaskGroup | null
|
|
project: Project | null
|
|
tags: TaskTag[]
|
|
documents: TaskDocument[]
|
|
archived: boolean
|
|
scheduledStart: string | null
|
|
scheduledEnd: string | null
|
|
deadline: string | null
|
|
syncToCalendar: boolean
|
|
calendarSyncError: string | null
|
|
recurrence: {
|
|
id: number
|
|
'@id'?: string
|
|
type: 'daily' | 'weekly' | 'monthly' | 'yearly'
|
|
interval: number
|
|
daysOfWeek: string[] | null
|
|
dayOfMonth: number | null
|
|
weekOfMonth: number | null
|
|
endDate: string | null
|
|
maxOccurrences: number | null
|
|
occurrenceCount: number
|
|
} | null
|
|
}
|
|
|
|
export type TaskWrite = {
|
|
title: string
|
|
description: string | null
|
|
status: string | null
|
|
effort: string | null
|
|
priority: string | null
|
|
assignee: string | null
|
|
collaborators?: string[]
|
|
group: string | null
|
|
project: string
|
|
tags: string[]
|
|
archived?: boolean
|
|
scheduledStart?: string | null
|
|
scheduledEnd?: string | null
|
|
deadline?: string | null
|
|
syncToCalendar?: boolean
|
|
recurrence?: string | null
|
|
}
|