Checkpoint: Ajout de la page de gestion des attestations de formation
Fonctionnalités : - Configuration par formation (génération auto/manuel, envoi auto/manuel) - Affichage de la liste des apprenants inscrits - Upload de documents PDF par apprenant (mode manuel) - Boutons de prévisualisation et d'envoi manuel - Gestion complète des attestations Corrections : - Ajout des colonnes modeAttestation et modeEnvoi dans la table formations - Ajout des colonnes documentUrl, documentS3Key, uploadedBy, uploadedAt, emailEnvoye, dateEnvoiEmail dans la table attestations - Correction de l'erreur SQL en retirant la colonne urlPdf inexistante de la requête
This commit is contained in:
@@ -1,14 +1,53 @@
|
||||
import { drizzle } from "drizzle-orm/mysql2";
|
||||
import mysql from "mysql2/promise";
|
||||
import { eq, and } from "drizzle-orm";
|
||||
import * as schema from "./drizzle/schema.ts";
|
||||
|
||||
const connection = await mysql.createConnection(process.env.DATABASE_URL);
|
||||
const db = drizzle(connection);
|
||||
const { apprenants, inscriptions, sequences, attestations } = schema;
|
||||
|
||||
const db = drizzle(process.env.DATABASE_URL);
|
||||
|
||||
try {
|
||||
const result = await connection.query("SELECT YEAR(NOW()) as annee, MONTH(NOW()) as mois");
|
||||
console.log("Test YEAR/MONTH réussi:", result[0]);
|
||||
const results = await db
|
||||
.select({
|
||||
apprenant: {
|
||||
id: apprenants.id,
|
||||
nom: apprenants.nom,
|
||||
prenom: apprenants.prenom,
|
||||
email: apprenants.email,
|
||||
},
|
||||
inscription: {
|
||||
id: inscriptions.id,
|
||||
sequenceId: inscriptions.sequenceId,
|
||||
},
|
||||
sequence: {
|
||||
id: sequences.id,
|
||||
nom: sequences.nom,
|
||||
},
|
||||
attestation: {
|
||||
id: attestations.id,
|
||||
documentUrl: attestations.documentUrl,
|
||||
urlPdf: attestations.urlPdf,
|
||||
emailEnvoye: attestations.emailEnvoye,
|
||||
dateEnvoiEmail: attestations.dateEnvoiEmail,
|
||||
},
|
||||
})
|
||||
.from(inscriptions)
|
||||
.innerJoin(apprenants, eq(inscriptions.apprenantId, apprenants.id))
|
||||
.innerJoin(sequences, eq(inscriptions.sequenceId, sequences.id))
|
||||
.leftJoin(attestations, eq(attestations.inscriptionId, inscriptions.id))
|
||||
.where(
|
||||
and(
|
||||
eq(sequences.formationId, 1),
|
||||
eq(inscriptions.statut, "confirmee")
|
||||
)
|
||||
)
|
||||
.orderBy(apprenants.nom, apprenants.prenom);
|
||||
|
||||
console.log("Success! Found", results.length, "results");
|
||||
console.log(JSON.stringify(results, null, 2));
|
||||
} catch (error) {
|
||||
console.error("Erreur:", error.message);
|
||||
console.error("Error:", error.message);
|
||||
console.error("Full error:", error);
|
||||
}
|
||||
|
||||
await connection.end();
|
||||
process.exit(0);
|
||||
|
||||
Reference in New Issue
Block a user