Checkpoint: Bug corrigé : ajout contrainte UNIQUE (annee, etablissementCode) sur opex_bases_repartition + déduplication des lignes existantes — le clic ne crée plus de doublon. Nouvelle fonctionnalité : colonne "Tout manuel" (toggle) dans l'onglet Clés de répartition — quand activé pour un établissement, le calcul prorata est ignoré et seuls les montants saisis manuellement dans la vue Établissements sont utilisés. Badge ambre visible dans les deux vues.

This commit is contained in:
Manus
2026-06-11 07:57:02 +00:00
parent cfeb5196db
commit 0e1cab9f6c
8 changed files with 992 additions and 11 deletions

View File

@@ -344,6 +344,7 @@ export async function upsertOpexBaseRepartition(input: {
etablissementNom?: string | null;
baseRepartition: number;
baseRepartitionHep?: number;
modeManuel?: boolean;
}) {
const db = await getDb();
if (!db) throw new Error("Database not available");
@@ -355,12 +356,14 @@ export async function upsertOpexBaseRepartition(input: {
etablissementNom: input.etablissementNom ?? null,
baseRepartition: String(input.baseRepartition),
baseRepartitionHep: String(input.baseRepartitionHep ?? 0),
modeManuel: input.modeManuel ?? false,
})
.onDuplicateKeyUpdate({
set: {
baseRepartition: String(input.baseRepartition),
baseRepartitionHep: String(input.baseRepartitionHep ?? 0),
etablissementNom: input.etablissementNom ?? null,
modeManuel: input.modeManuel ?? false,
},
});
}

View File

@@ -187,6 +187,7 @@ export const appRouter = router({
etablissementNom: z.string().optional().nullable(),
baseRepartition: z.number(),
baseRepartitionHep: z.number().optional().default(0),
modeManuel: z.boolean().optional().default(false),
}))
.mutation(async ({ input }) => { await db.upsertOpexBaseRepartition(input); return { success: true }; }),