Donner une équipe à tout établissement neuf
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 <noreply@anthropic.com>
This commit is contained in:
1 parent
ef3dd5c027
commit
791dd523eb
4 files changed
+45
-3
No files matched your search
@@ -100,10 +100,28 @@ export default async function SemainePage({ searchParams }: PageProps) {
|
|||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* 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 ? (
|
{board.sections.length === 0 ? (
|
||||||
<p className="rounded-3 border border-line-1 bg-surface p-4 text-sm text-ink-2">
|
<div className="rounded-3 border border-line-1 bg-surface p-4 text-sm text-ink-2">
|
||||||
Cet établissement n’a pas encore d’équipe.
|
<p className="mb-1 font-medium text-ink-1">
|
||||||
</p>
|
Cet établissement n’a pas encore d’équipe.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Le planning se construit équipe par équipe : chacune porte son propre
|
||||||
|
état de publication. Créez-en une dans{' '}
|
||||||
|
<Link
|
||||||
|
href="/reglages/etablissements"
|
||||||
|
className="underline underline-offset-2"
|
||||||
|
>
|
||||||
|
Réglages · Établissements
|
||||||
|
</Link>
|
||||||
|
, puis rattachez-y les salariés depuis l’onglet « Planification et
|
||||||
|
accès » de leur fiche.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
{board.sections.map((section) => (
|
{board.sections.map((section) => (
|
||||||
|
|||||||
@@ -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
|
// É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
|
// 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
|
// rien à quoi l'accrocher — pas de demande d'absence saisissable, pas de
|
||||||
|
|||||||
@@ -101,6 +101,15 @@ export async function createLocationAction(
|
|||||||
} as never,
|
} 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, {
|
await recordAudit(db, {
|
||||||
actorMembershipId: actor.membershipId,
|
actorMembershipId: actor.membershipId,
|
||||||
action: 'location.create',
|
action: 'location.create',
|
||||||
|
|||||||
@@ -118,6 +118,14 @@ describeIfDb('première installation', () => {
|
|||||||
});
|
});
|
||||||
expect(location.timezone).toBe('America/Martinique');
|
expect(location.timezone).toBe('America/Martinique');
|
||||||
expect(location.name).toBe('Siège');
|
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);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in new issue
Block a user