diff --git a/server/db.ts b/server/db.ts index 196c197..f6de05a 100644 --- a/server/db.ts +++ b/server/db.ts @@ -414,23 +414,25 @@ export async function getInvoiceStats(userId: number) { } export async function findDuplicateInvoice( - supplierName: string | null, invoiceNumber: string | null, - invoiceDate: Date | null + totalAmount: string | null, + userId?: number ): Promise { - if (!supplierName || !invoiceNumber || !invoiceDate) return undefined; + if (!invoiceNumber || !totalAmount) return undefined; const db = await getDb(); if (!db) return undefined; + const conditions = [ + eq(invoices.invoiceNumber, invoiceNumber), + eq(invoices.totalAmount, totalAmount), + ]; + if (userId !== undefined) { + conditions.push(eq(invoices.userId, userId)); + } + const result = await db.select().from(invoices) - .where( - and( - eq(invoices.supplierName, supplierName), - eq(invoices.invoiceNumber, invoiceNumber), - eq(invoices.invoiceDate, invoiceDate) - ) - ) + .where(and(...conditions)) .limit(1); return result[0]; diff --git a/server/emailImportService.ts b/server/emailImportService.ts index fe6d0b3..fbcea72 100644 --- a/server/emailImportService.ts +++ b/server/emailImportService.ts @@ -129,11 +129,11 @@ async function processEmailAttachment( processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`, }); - // Check for duplicates + // Check for duplicates (numéro de facture + montant) const duplicate = await findDuplicateInvoice( - invoiceData.supplierName, invoiceData.invoiceNumber, - invoiceData.invoiceDate + invoiceData.totalAmount?.toString() ?? null, + userId ); if (duplicate) { @@ -141,7 +141,7 @@ async function processEmailAttachment( duplicateDetails.push({ supplierName: invoiceData.supplierName, invoiceNumber: invoiceData.invoiceNumber, - invoiceDate: invoiceData.invoiceDate, + totalAmount: invoiceData.totalAmount, }); continue; } diff --git a/server/folderImportService.ts b/server/folderImportService.ts index 66b6998..6989d73 100644 --- a/server/folderImportService.ts +++ b/server/folderImportService.ts @@ -115,11 +115,11 @@ async function processFolderFile( processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`, }); - // Check for duplicates + // Check for duplicates (numéro de facture + montant) const duplicate = await findDuplicateInvoice( - invoiceData.supplierName, invoiceData.invoiceNumber, - invoiceData.invoiceDate + invoiceData.totalAmount?.toString() ?? null, + userId ); if (duplicate) { @@ -127,7 +127,7 @@ async function processFolderFile( duplicateDetails.push({ supplierName: invoiceData.supplierName, invoiceNumber: invoiceData.invoiceNumber, - invoiceDate: invoiceData.invoiceDate, + totalAmount: invoiceData.totalAmount, }); continue; } diff --git a/server/routers.ts b/server/routers.ts index d29b457..cf59dbe 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -252,11 +252,11 @@ export const appRouter = router({ processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`, }); - // Check for duplicates + // Check for duplicates (numéro de facture + montant) const duplicate = await findDuplicateInvoice( - invoiceData.supplierName, invoiceData.invoiceNumber, - invoiceData.invoiceDate + invoiceData.totalAmount?.toString() ?? null, + userId ); if (duplicate) { @@ -264,7 +264,7 @@ export const appRouter = router({ duplicateDetails.push({ supplierName: invoiceData.supplierName, invoiceNumber: invoiceData.invoiceNumber, - invoiceDate: invoiceData.invoiceDate, + totalAmount: invoiceData.totalAmount, }); continue; }