# Tickets, dossiers, statuts et étiquettes dans Todomator

> Le modèle de données de Todomator : ce que contient un ticket, les six statuts, qui peut voir un ticket, les dossiers pour clients et projets, les étiquettes, commentaires, liens et pièces jointes.

Framework: todomator
Product: Todomator (todomator@1.7)
Language: fr
Content-SHA256: ffd671f8a384204b1db481fe0f763659a585d56aa7121eee5b37942f420be113
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Le centre de Todomator est le **ticket** (table `tbl_ticket`, schéma `Tickets` dans `schemas/tickets.js`). Tout le reste organise des tickets ou en dépend.

## Ce que contient un ticket

| Champ | Signification |
|---|---|
| `name` | le titre (obligatoire) |
| `statusid` | le statut ; un nouveau ticket est `pending` sauf indication contraire |
| `folderid` | le dossier (client ou projet) auquel il appartient |
| `ownerid`, `userid`, `watcherid` | l’auteur, les personnes assignées et les personnes qui ne font que le suivre |
| `ispublic` | visible de tous ; un ticket public n’a pas de personnes assignées |
| `ispriority`, `isbillable` | une marque de priorité et un indicateur facturable |
| `markdown`, `html` | le contenu (l’interface utilise Markdown) |
| `tags` | une liste d’étiquettes |
| `date`, `deadline` | le jour du ticket (aujourd’hui par défaut) et une échéance facultative |
| `estimate`, `worked` | l’estimation et les minutes déjà travaillées ([suivi du temps](/en/todomator/time-tracking/)) |
| `reference`, `source` | texte libre pour relier le ticket à quelque chose d’extérieur |
| `parentid` | le ticket parent, pour les sous-tâches |
| `attachments` | les fichiers du ticket |
| `attrs` | données JSON libres |
| `callback` | une adresse qui reçoit le ticket quand il change ([API](/en/todomator/create-tickets-with-the-api/)) |

## Les six statuts

La table `cl_status` est créée avec : `pending` (Pending), `open` (In progress), `review` (Review), `postponed` (Postponed), `note` (Note) et `closed` (Closed). Les noms sont traduits dans la langue de l’utilisateur.

## Qui peut voir un ticket

Un ticket est visible de son propriétaire, des personnes de `userid`, des personnes de `watcherid` et de tout le monde quand `ispublic` est activé. La liste des dossiers qu’un utilisateur voit est limitée de la même façon : un dossier n’apparaît que si l’utilisateur peut y voir un ticket (les utilisateurs avec `sa` voient tout). La liste des tickets accepte `type` (par exemple `pending`, `postponed`, `review`, `assigned`, `note`, `unread` ou `all`), `q` (recherche), `folderid`, `date`, `skip` et `limit` (10 par défaut).

## Dossiers et étiquettes

Un **dossier** a un nom, une icône, une couleur, un client, un e-mail et un téléphone, et des indicateurs : `isbillable` (les nouveaux tickets en héritent), `isprivate`, `ispinned`, `isarchived` et `isdisabled`. Seules les personnes ayant la permission `admin` (ou les administrateurs) gèrent les dossiers. Une **étiquette** a un nom, une couleur et une icône, et peut appartenir à un dossier.

## Autour du ticket

- **Commentaires** (`Comments|create`, `Comments|update`, `Comments|remove`) : texte Markdown attaché à un ticket.
- **Marques de non-lu et signets** : chaque utilisateur a son propre état de non-lu et ses signets pour un ticket.
- **Liens** entre tickets et **clonage** d’un ticket.
- **Historique et journaux** des modifications d’un ticket.
- **Pièces jointes** : `POST /upload/` accepte jusqu’à 5 Mo par requête. L’adresse d’un fichier est signée (`/download/<id>-<signature>.<ext>`) : les images, la vidéo et les PDF s’ouvrent dans le navigateur et les autres types sont téléchargés.
- **Mises à jour en direct** : le WebSocket envoie un événement `refresh` uniquement aux personnes qui peuvent voir le ticket, et indique aux autres qui regarde un ticket en ce moment.
