Checkpoint: Intégration des signatures formateurs dans la feuille de présence PDF - Les signatures tactiles des formateurs (matin et après-midi) sont maintenant affichées dans la section dédiée de la feuille de présence au lieu des lignes vides

This commit is contained in:
Manus
2026-02-09 11:53:03 -05:00
parent 5d8054b4b8
commit 672494ccc0
3 changed files with 65 additions and 3 deletions

View File

@@ -47,6 +47,11 @@ interface FeuillePresenceInfo {
publicCible: string;
formateur?: string;
apprenants: ApprenantPresence[];
signaturesFormateurs?: Array<{
dateFormationId: number;
periode: 'matin' | 'apres_midi';
signatureUrl: string | null;
}>;
}
/**
@@ -301,14 +306,56 @@ export function generateFeuillePresence(feuilleInfo: FeuillePresenceInfo): Buffe
doc.text('Signatures du formateur :', 14, signatureY);
doc.setFont('helvetica', 'normal');
// Récupérer les signatures formateurs pour cette date
const signatureMatin = feuilleInfo.signaturesFormateurs?.find(
s => s.dateFormationId === dateInfo.id && s.periode === 'matin'
);
const signatureApresMidi = feuilleInfo.signaturesFormateurs?.find(
s => s.dateFormationId === dateInfo.id && s.periode === 'apres_midi'
);
// Signature Matin
doc.setFontSize(9);
doc.text('Matin :', 14, signatureY + 8);
doc.line(30, signatureY + 8, 90, signatureY + 8);
if (signatureMatin?.signatureUrl) {
try {
const signaturePath = path.resolve(process.cwd(), signatureMatin.signatureUrl.substring(1));
if (fs.existsSync(signaturePath)) {
const signatureBuffer = fs.readFileSync(signaturePath);
const signatureBase64 = `data:image/png;base64,${signatureBuffer.toString('base64')}`;
doc.addImage(signatureBase64, 'PNG', 30, signatureY + 2, 60, 15);
} else {
doc.line(30, signatureY + 8, 90, signatureY + 8);
}
} catch (error) {
console.error('Erreur lors du chargement de la signature formateur matin:', error);
doc.line(30, signatureY + 8, 90, signatureY + 8);
}
} else {
doc.line(30, signatureY + 8, 90, signatureY + 8);
}
// Signature Après-midi
doc.text('Après-midi :', 110, signatureY + 8);
doc.line(140, signatureY + 8, 200, signatureY + 8);
if (signatureApresMidi?.signatureUrl) {
try {
const signaturePath = path.resolve(process.cwd(), signatureApresMidi.signatureUrl.substring(1));
if (fs.existsSync(signaturePath)) {
const signatureBuffer = fs.readFileSync(signaturePath);
const signatureBase64 = `data:image/png;base64,${signatureBuffer.toString('base64')}`;
doc.addImage(signatureBase64, 'PNG', 140, signatureY + 2, 60, 15);
} else {
doc.line(140, signatureY + 8, 200, signatureY + 8);
}
} catch (error) {
console.error('Erreur lors du chargement de la signature formateur après-midi:', error);
doc.line(140, signatureY + 8, 200, signatureY + 8);
}
} else {
doc.line(140, signatureY + 8, 200, signatureY + 8);
}
};
// Générer une page pour chaque date