Checkpoint: Ajout de l'association Service→Signature dans l'onglet Signatures des Paramètres et apposition automatique de la signature sur les PDFs exportés lors de l'export BAP. Inclut : table serviceSignatures, routes tRPC, interface de configuration, et modification de exportToPdf pour apposer la signature en bas à droite du PDF avec le nom du signataire.

This commit is contained in:
Manus
2026-03-14 19:28:50 -04:00
parent cf886a1adb
commit ee49992530
8 changed files with 1790 additions and 6 deletions

View File

@@ -35,7 +35,10 @@ import {
LlmFieldConfig,
signatures,
InsertSignature,
Signature
Signature,
serviceSignatures,
InsertServiceSignature,
ServiceSignature
} from "../drizzle/schema";
import { ENV } from './_core/env';
@@ -701,3 +704,40 @@ export async function deleteSignature(id: number): Promise<void> {
if (!db) return;
await db.delete(signatures).where(eq(signatures.id, id));
}
// ============= SERVICE SIGNATURES HELPERS =============
export async function getServiceSignaturesByUser(userId: number): Promise<ServiceSignature[]> {
const db = await getDb();
if (!db) return [];
return db.select().from(serviceSignatures).where(eq(serviceSignatures.userId, userId));
}
export async function getServiceSignatureByService(userId: number, serviceName: string): Promise<ServiceSignature | undefined> {
const db = await getDb();
if (!db) return undefined;
const results = await db.select().from(serviceSignatures)
.where(eq(serviceSignatures.userId, userId))
.limit(1);
// Filter in JS to avoid SQL case sensitivity issues
return results.find(r => r.serviceName.toLowerCase() === serviceName.toLowerCase());
}
export async function upsertServiceSignature(data: InsertServiceSignature): Promise<void> {
const db = await getDb();
if (!db) throw new Error("Database not available");
await db.insert(serviceSignatures).values(data)
.onDuplicateKeyUpdate({
set: { signatureId: data.signatureId, updatedAt: new Date() }
});
}
export async function deleteServiceSignature(userId: number, serviceName: string): Promise<void> {
const db = await getDb();
if (!db) return;
const all = await db.select().from(serviceSignatures).where(eq(serviceSignatures.userId, userId));
const match = all.find(r => r.serviceName.toLowerCase() === serviceName.toLowerCase());
if (match) {
await db.delete(serviceSignatures).where(eq(serviceSignatures.id, match.id));
}
}