La création de projet échouait : `Project.workflow` est obligatoire mais
n'était jamais fourni (formulaire frontend, MCP create-project), tout POST
/api/projects partait en erreur de validation/contrainte NOT NULL.
- ProjectDefaultWorkflowListener (prePersist) : assigne le workflow par
défaut quand aucun n'est fourni, couvrant API Platform, API brute et MCP.
- retrait de l'Assert\NotNull sur Project::workflow (la validation tournait
avant le flush et empêchait le filet) ; la contrainte DB reste le garde-fou.
- CreateProjectTool (MCP) : paramètre optionnel workflowId.
- ProjectDrawer : sélecteur Workflow en création, pré-rempli sur le défaut,
IRI envoyée dans le payload.
- tests fonctionnels : création avec et sans workflow.
- Prestataire : entité/repo + ressource API Platform (RBAC directory.providers.*),
ownership prestataire sur contacts/adresses/comptes-rendus (CHECK XOR à 3),
DTO/service/drawer/fiche détail + onglet dédié dans le répertoire.
- Prospect : société uniquement (suppression du champ name, company requis) ;
migration de backfill, conversion prospect→client et MCP adaptés.
- Champ site web sur client/prospect/prestataire (entités, DTO, onglet Information, MCP).
- Validateurs front email / téléphone FR (0549200910) / URL sur Information et Contacts,
enregistrement bloqué tant qu'un champ est invalide.
- Autocomplete adresse branché sur la Base Adresse Nationale (api-adresse.data.gouv.fr)
avec mode dégradé en saisie libre.
- Administration : retrait de l'onglet Clients.
- replace hardcoded ROLE_ADMIN check with usePermissions().can('directory.{clients,prospects}.manage')
- rename misleading isAdmin prop to canManage in CommercialReportTab and ReportDocumentList
- add busy guard on delete confirmation modal to prevent duplicate DELETE on double-click
- report tab redesigned as a reverse-chronological timeline with type
badges/icons, relative dates and author
- add/edit moved to a side drawer; body now uses the rich text editor
(MalioInputRichText), displayed read-only as inline prose
- delete now asks for confirmation (ConfirmDeleteReportModal)
- empty state with CTA and pluralized count
- info tab: use v-model, neutral i18n validation key, real admin flag
instead of hardcoded true on CommercialReportTab
Add an Information tab (first, active by default) to the client and prospect
detail pages so base fields can be edited directly from the record. Client:
name/email/phone. Prospect: name/company/status/email/phone/source/notes.
Fields are edited in memory and persisted only on explicit save (PATCH),
matching the Contact/Address tabs pattern.
Les formulaires d'ajout/édition client et prospect ne conservent que le champ
« Nom société ». Les coordonnées (email, téléphone) et les champs prospect
(société, statut, source, notes) sont retirés : ils seront gérés via Contact.
Le statut prospect prend son défaut New à la création ; DTO assouplis, payload
réduit à { name }.
Hold contact/address block edits in memory and persist them via explicit
saveContacts/saveAddresses on click (with saving guards), matching the task
forms. Keep immediate deletion. Minor restyle of blocks and action buttons.