Checkpoint: - Ajout table opex_bases_repartition (11e table) avec 58 bases de répartition 2026 seedées depuis le JSON source
- Ajout procédure tRPC opex.getBasesRepartition et opex.setBaseRepartition - DsiOpex utilise maintenant les bases de répartition depuis la BDD (priorité BDD > JSON fallback pour 2025) - Total en bas à droite de la vue établissements affiche totalGlobal (somme postes BDD = 1 257 678 €) au lieu de la somme des arrondis par établissement (1 259 641 €) - 0 erreur TypeScript
This commit is contained in:
35
server/db.ts
35
server/db.ts
@@ -10,6 +10,7 @@ import {
|
||||
InsertUser,
|
||||
inventaireMeta,
|
||||
inventairePostes,
|
||||
opexBasesRepartition,
|
||||
opexMontantsEtab,
|
||||
opexPostes,
|
||||
opexValidated,
|
||||
@@ -326,3 +327,37 @@ export async function insertCapexLignes(rows: InsertCapexLigne[]) {
|
||||
await db.insert(capexLignes).values(rows.slice(i, i + 100));
|
||||
}
|
||||
}
|
||||
|
||||
// ── OPEX Bases de répartition ────────────────────────────────────────────────
|
||||
export async function getOpexBasesRepartition(annee: number) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
return db
|
||||
.select()
|
||||
.from(opexBasesRepartition)
|
||||
.where(eq(opexBasesRepartition.annee, annee));
|
||||
}
|
||||
|
||||
export async function upsertOpexBaseRepartition(input: {
|
||||
annee: number;
|
||||
etablissementCode: string;
|
||||
etablissementNom?: string | null;
|
||||
baseRepartition: number;
|
||||
}) {
|
||||
const db = await getDb();
|
||||
if (!db) throw new Error("Database not available");
|
||||
await db
|
||||
.insert(opexBasesRepartition)
|
||||
.values({
|
||||
annee: input.annee,
|
||||
etablissementCode: input.etablissementCode,
|
||||
etablissementNom: input.etablissementNom ?? null,
|
||||
baseRepartition: String(input.baseRepartition),
|
||||
})
|
||||
.onDuplicateKeyUpdate({
|
||||
set: {
|
||||
baseRepartition: String(input.baseRepartition),
|
||||
etablissementNom: input.etablissementNom ?? null,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -174,6 +174,16 @@ export const appRouter = router({
|
||||
return { success: true };
|
||||
}),
|
||||
|
||||
// Bases de répartition par établissement (charges classe 6)
|
||||
getBasesRepartition: protectedProcedure
|
||||
.input(z.object({ annee: z.number() }))
|
||||
.query(async ({ input }) => db.getOpexBasesRepartition(input.annee)),
|
||||
|
||||
// Upsert une base de répartition pour un établissement
|
||||
setBaseRepartition: writeProcedure
|
||||
.input(z.object({ annee: z.number(), etablissementCode: z.string(), etablissementNom: z.string().optional().nullable(), baseRepartition: z.number() }))
|
||||
.mutation(async ({ input }) => { await db.upsertOpexBaseRepartition(input); return { success: true }; }),
|
||||
|
||||
// Supprimer toutes les lignes OPEX d'une année
|
||||
deleteAll: writeProcedure
|
||||
.input(z.object({ annee: z.number() }))
|
||||
|
||||
Reference in New Issue
Block a user