Checkpoint: Correction de deux bugs : (1) getToutesLesSolutionsGroupees retourne maintenant editeurId et blocFonctionnelId pour pré-remplir le Dialog de modification ; (2) getBlocsFonctionnels ne filtre plus sur estValide=true, tous les blocs fonctionnels sont désormais visibles dans les selects.

This commit is contained in:
Manus
2026-04-17 10:33:38 -04:00
parent df8c5ee2c1
commit cbd439bac7

View File

@@ -99,7 +99,7 @@ export async function createEditeur(nom: string, estValide = false) {
export async function getBlocsFonctionnels() { export async function getBlocsFonctionnels() {
const db = await getDb(); const db = await getDb();
if (!db) return []; if (!db) return [];
return db.select().from(blocsFonctionnels).where(eq(blocsFonctionnels.estValide, true)).orderBy(blocsFonctionnels.nom); return db.select().from(blocsFonctionnels).orderBy(blocsFonctionnels.nom);
} }
export async function createBlocFonctionnel(nom: string, estValide = false) { export async function createBlocFonctionnel(nom: string, estValide = false) {
@@ -667,33 +667,40 @@ export async function getMesSolutionsGroupees(userId: number, sonumRole: string)
const map = new Map<number, { const map = new Map<number, {
solutionId: number; solutionId: number;
solutionNom: string; solutionNom: string;
editeurId: number | null;
editeurNom: string; editeurNom: string;
blocFonctionnelId: number | null;
blocFonctionnelNom: string | null; blocFonctionnelNom: string | null;
nbEtablissements: number;
etablissements: { id: number; nom: string; region: string | null; etatDeploiement: string }[]; etablissements: { id: number; nom: string; region: string | null; etatDeploiement: string }[];
}>(); }>();
for (const row of rows) { for (const row of rows) {
if (!map.has(row.solutionId)) { if (!map.has(row.solutionId)) {
map.set(row.solutionId, { map.set(row.solutionId, {
solutionId: row.solutionId, solutionId: row.solutionId,
solutionNom: row.solutionNom ?? "", solutionNom: row.solutionNom ?? "",
editeurId: null,
editeurNom: row.editeurNom ?? "", editeurNom: row.editeurNom ?? "",
blocFonctionnelId: null,
blocFonctionnelNom: row.blocFonctionnelNom ?? null, blocFonctionnelNom: row.blocFonctionnelNom ?? null,
nbEtablissements: 0,
etablissements: [], etablissements: [],
}); });
} }
map.get(row.solutionId)!.etablissements.push({ const entry = map.get(row.solutionId)!;
if (row.etablissementId) {
entry.etablissements.push({
id: row.etablissementId, id: row.etablissementId,
nom: row.etablissementNom ?? "", nom: row.etablissementNom ?? "",
region: row.etablissementRegion ?? null, region: row.etablissementRegion ?? null,
etatDeploiement: row.etatDeploiement ?? "", etatDeploiement: row.etatDeploiement ?? "",
}); });
entry.nbEtablissements = entry.etablissements.length;
}
} }
return Array.from(map.values()); return Array.from(map.values());
} }
/***
/**
* Retourne toutes les solutions du référentiel avec les établissements équipés (vue globale). * Retourne toutes les solutions du référentiel avec les établissements équipés (vue globale).
* Accessible à tous les utilisateurs connectés. * Accessible à tous les utilisateurs connectés.
*/ */
@@ -705,7 +712,9 @@ export async function getToutesLesSolutionsGroupees() {
.select({ .select({
solutionId: solutions.id, solutionId: solutions.id,
solutionNom: solutions.nom, solutionNom: solutions.nom,
editeurId: solutions.editeurId,
editeurNom: editeurs.nom, editeurNom: editeurs.nom,
blocFonctionnelId: solutions.blocFonctionnelId,
blocFonctionnelNom: blocsFonctionnels.nom, blocFonctionnelNom: blocsFonctionnels.nom,
etablissementId: etablissements.id, etablissementId: etablissements.id,
etablissementNom: etablissements.nom, etablissementNom: etablissements.nom,
@@ -718,22 +727,24 @@ export async function getToutesLesSolutionsGroupees() {
.leftJoin(logicielsEtablissements, eq(logicielsEtablissements.solutionId, solutions.id)) .leftJoin(logicielsEtablissements, eq(logicielsEtablissements.solutionId, solutions.id))
.leftJoin(etablissements, eq(logicielsEtablissements.etablissementId, etablissements.id)) .leftJoin(etablissements, eq(logicielsEtablissements.etablissementId, etablissements.id))
.orderBy(solutions.nom, etablissements.nom); .orderBy(solutions.nom, etablissements.nom);
const map = new Map<number, { const map = new Map<number, {
solutionId: number; solutionId: number;
solutionNom: string; solutionNom: string;
editeurId: number | null;
editeurNom: string; editeurNom: string;
blocFonctionnelId: number | null;
blocFonctionnelNom: string | null; blocFonctionnelNom: string | null;
nbEtablissements: number; nbEtablissements: number;
etablissements: { id: number; nom: string; region: string | null; etatDeploiement: string }[]; etablissements: { id: number; nom: string; region: string | null; etatDeploiement: string }[];
}>(); }>();
for (const row of rows) { for (const row of rows) {
if (!map.has(row.solutionId)) { if (!map.has(row.solutionId)) {
map.set(row.solutionId, { map.set(row.solutionId, {
solutionId: row.solutionId, solutionId: row.solutionId,
solutionNom: row.solutionNom ?? "", solutionNom: row.solutionNom ?? "",
editeurId: row.editeurId ?? null,
editeurNom: row.editeurNom ?? "", editeurNom: row.editeurNom ?? "",
blocFonctionnelId: row.blocFonctionnelId ?? null,
blocFonctionnelNom: row.blocFonctionnelNom ?? null, blocFonctionnelNom: row.blocFonctionnelNom ?? null,
nbEtablissements: 0, nbEtablissements: 0,
etablissements: [], etablissements: [],