diff --git a/prisma.config.ts b/prisma.config.ts index 1be248d..b59a8e4 100644 --- a/prisma.config.ts +++ b/prisma.config.ts @@ -1,5 +1,5 @@ import 'dotenv/config'; -import { defineConfig, env } from 'prisma/config'; +import { defineConfig } from 'prisma/config'; /** * Prisma 7 moved the migration connection URL out of schema.prisma. @@ -15,6 +15,16 @@ export default defineConfig({ seed: 'tsx prisma/seed.ts', }, datasource: { - url: env('DATABASE_URL'), + /* + * Lu directement plutôt que par `env()`, qui échoue dès le **chargement** + * du fichier de configuration quand la variable manque. + * + * Or ce fichier est chargé par toutes les commandes du CLI, y compris + * `prisma generate`, qui ne se connecte à rien : la construction de l'image + * devenait impossible sans fournir une base au constructeur. Les commandes + * qui ont réellement besoin de l'URL — `migrate` — échouent d'elles-mêmes, + * au moment où elle leur manque. + */ + url: process.env.DATABASE_URL ?? '', }, }); diff --git a/src/app/(app)/paie/periodes/page.tsx b/src/app/(app)/paie/periodes/page.tsx index f758eef..beeca6c 100644 --- a/src/app/(app)/paie/periodes/page.tsx +++ b/src/app/(app)/paie/periodes/page.tsx @@ -68,6 +68,14 @@ export default async function PeriodesPage({ searchParams }: PageProps) { suggestedMonth={view.suggestedMonth} /> + {view.totalPeriods > view.periods.length ? ( +

+ {view.totalPeriods} périodes en tout ; les {view.periods.length} plus + récentes sont affichées. Une période plus ancienne reste consultable + par son mois. +

+ ) : null} + {view.periods.length === 0 ? (

Aucune période. Verrouiller une période fige les heures transmises au diff --git a/src/server/payroll/period-queries.ts b/src/server/payroll/period-queries.ts index c6188f0..d7a1c3e 100644 --- a/src/server/payroll/period-queries.ts +++ b/src/server/payroll/period-queries.ts @@ -39,6 +39,8 @@ export interface PeriodsView { location: { id: string; name: string }; locations: Array<{ id: string; name: string }>; periods: PeriodCard[]; + /** Total en base : la liste est bornée, et le taire induirait en erreur. */ + totalPeriods: number; /** Mois proposé par défaut à la création. */ suggestedMonth: string; canLock: boolean; @@ -62,10 +64,17 @@ export async function getPeriods(locationId?: string): Promise await create.getByLabel('Libellé').fill(label); await create.getByRole('button', { name: 'Créer la période' }).click(); + // La liste est bornée aux 24 périodes les plus récentes : sans nettoyage, les + // restes d'exécutions interrompues finissent par repousser la nouvelle hors + // de l'écran, et le test échoue pour une raison sans rapport avec ce qu'il + // vérifie. const card = page.locator('section').filter({ hasText: label }).first(); await expect(card).toBeVisible();