From 791dd523ebc5cef3a4468007f3ddaafbf857c6e6 Mon Sep 17 00:00:00 2001 From: R0m1k3 Date: Tue, 11 Aug 2026 15:02:15 +0200 Subject: [PATCH] =?UTF-8?q?Donner=20une=20=C3=A9quipe=20=C3=A0=20tout=20?= =?UTF-8?q?=C3=A9tablissement=20neuf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un établissement naissait sans équipe. Le planning s'ordonnant par équipe, il n'avait alors aucune ligne où poser un créneau — même avec des salariés rattachés. L'écran annonçait « cet établissement n'a pas encore d'équipe », ce qui se lit « il n'y a personne », et rien ne disait où en créer une. Deux corrections. La création d'un établissement pose une première équipe, à l'installation comme depuis les réglages ; elle se renomme, et rien n'empêche d'en ajouter d'autres. Et le message du planning dit désormais où aller : créer l'équipe dans les réglages, puis rattacher les salariés depuis l'onglet « Planification et accès » de leur fiche. Les établissements déjà créés gardent leur situation : le correctif empêche d'en produire de nouveaux sans équipe, il ne rattrape pas l'existant. Une équipe s'ajoute en deux clics depuis Réglages · Établissements. Co-Authored-By: Claude Opus 5 --- src/app/(app)/planning/semaine/page.tsx | 24 +++++++++++++++++++++--- src/server/install/install.ts | 7 +++++++ src/server/settings/locations.ts | 9 +++++++++ tests/integration/installation.test.ts | 8 ++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/app/(app)/planning/semaine/page.tsx b/src/app/(app)/planning/semaine/page.tsx index f0652aa..7ff81bb 100644 --- a/src/app/(app)/planning/semaine/page.tsx +++ b/src/app/(app)/planning/semaine/page.tsx @@ -100,10 +100,28 @@ export default async function SemainePage({ searchParams }: PageProps) { ) : null} + {/* Le planning s'ordonne par équipe : sans équipe, il n'y a pas de ligne + où poser un créneau, même quand des salariés sont rattachés à + l'établissement. Dire ce qui manque ne suffit pas — l'écran dit aussi + où le créer, sans quoi le message se lit « il n'y a personne ». */} {board.sections.length === 0 ? ( -

- Cet établissement n’a pas encore d’équipe. -

+
+

+ Cet établissement n’a pas encore d’équipe. +

+

+ Le planning se construit équipe par équipe : chacune porte son propre + état de publication. Créez-en une dans{' '} + + Réglages · Établissements + + , puis rattachez-y les salariés depuis l’onglet « Planification et + accès » de leur fiche. +

+
) : null} {board.sections.map((section) => ( diff --git a/src/server/install/install.ts b/src/server/install/install.ts index aedf099..311a871 100644 --- a/src/server/install/install.ts +++ b/src/server/install/install.ts @@ -115,6 +115,13 @@ export async function installAccount( }, }); + // Une première équipe. Le planning s'ordonne par équipe : sans elle, + // l'établissement neuf n'a aucune ligne où poser un créneau, et l'écran de + // planning annonce « pas encore d'équipe » à qui vient de tout installer. + await tx.team.create({ + data: { accountId: account.id, locationId: location.id, name: 'Équipe' }, + }); + // Étiquettes, types d'absence, convention d'amorce, conservation et jours // fériés. Ce ne sont pas des exemples : sans eux, l'instance a le schéma et // rien à quoi l'accrocher — pas de demande d'absence saisissable, pas de diff --git a/src/server/settings/locations.ts b/src/server/settings/locations.ts index e2c8ae8..05787e4 100644 --- a/src/server/settings/locations.ts +++ b/src/server/settings/locations.ts @@ -101,6 +101,15 @@ export async function createLocationAction( } as never, }); + // Une première équipe, tout de suite. Le planning s'ordonne par équipe : + // un établissement qui n'en a aucune ne se planifie pas, et rien ne le + // dit avant la première semaine à couvrir — où le message « pas encore + // d'équipe » se lit « il n'y a personne ». Elle se renomme, et rien + // n'empêche d'en ajouter d'autres. + await db.team.create({ + data: { locationId: created.id, name: 'Équipe', position: 0 } as never, + }); + await recordAudit(db, { actorMembershipId: actor.membershipId, action: 'location.create', diff --git a/tests/integration/installation.test.ts b/tests/integration/installation.test.ts index 95ac314..818cb52 100644 --- a/tests/integration/installation.test.ts +++ b/tests/integration/installation.test.ts @@ -118,6 +118,14 @@ describeIfDb('première installation', () => { }); expect(location.timezone).toBe('America/Martinique'); expect(location.name).toBe('Siège'); + + // Et une première équipe : sans elle, le planning n'a aucune ligne où + // poser un créneau, et l'écran annonce « pas encore d'équipe » à qui + // vient d'installer l'instance. + const teams = await tx.team.findMany({ + where: { locationId: location.id }, + }); + expect(teams).toHaveLength(1); }, ); });