fix: autoriser le reimport apres suppression
This commit is contained in:
@@ -307,7 +307,7 @@ async function startServer() {
|
||||
return;
|
||||
}
|
||||
|
||||
const { getWebImportSourceByToken, createInvoice, findDuplicateInvoice, isInvoiceBlacklisted, updateWebImportSourceStatus, createSourceFile, getSourceFileByContentHash, getLlmFieldsConfigByUser } = await import('../db');
|
||||
const { getWebImportSourceByToken, createInvoice, findDuplicateInvoice, updateWebImportSourceStatus, createSourceFile, getSourceFileByContentHash, getLlmFieldsConfigByUser } = await import('../db');
|
||||
const source = await getWebImportSourceByToken(apiToken);
|
||||
if (!source) {
|
||||
res.status(401).json({ error: "Token invalide" });
|
||||
@@ -362,8 +362,6 @@ async function startServer() {
|
||||
let imported = 0;
|
||||
let duplicates = 0;
|
||||
for (const inv of extractResult.invoices || []) {
|
||||
const blacklisted = await isInvoiceBlacklisted(inv.invoiceNumber || null, source.userId);
|
||||
if (blacklisted) { duplicates++; continue; }
|
||||
const dup = await findDuplicateInvoice(inv.invoiceNumber || null, String(inv.totalAmount ?? ''), source.userId);
|
||||
if (dup) { duplicates++; continue; }
|
||||
const invoiceWithQuality = withCalculatedInvoiceQuality(inv, qualityFieldsConfig);
|
||||
|
||||
27
server/deletedInvoiceReimport.test.ts
Normal file
27
server/deletedInvoiceReimport.test.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { readFileSync } from "node:fs";
|
||||
import { resolve } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
const source = (path: string) => readFileSync(resolve(process.cwd(), path), "utf8");
|
||||
|
||||
describe("réimport d'une facture supprimée", () => {
|
||||
it("ne traite plus une entrée deletedInvoices comme un doublon", () => {
|
||||
for (const path of [
|
||||
"server/routers.ts",
|
||||
"server/emailImportService.ts",
|
||||
"server/_core/index.ts",
|
||||
]) {
|
||||
expect(source(path)).not.toContain("isInvoiceBlacklisted");
|
||||
}
|
||||
});
|
||||
|
||||
it("conserve uniquement la détection des doublons réellement présents", () => {
|
||||
for (const path of [
|
||||
"server/routers.ts",
|
||||
"server/emailImportService.ts",
|
||||
"server/_core/index.ts",
|
||||
]) {
|
||||
expect(source(path)).toContain("findDuplicateInvoice");
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -8,7 +8,6 @@ import {
|
||||
getLlmFieldsConfigByUser,
|
||||
getSourceFileByContentHash,
|
||||
findDuplicateInvoice,
|
||||
isInvoiceBlacklisted,
|
||||
createInvoice,
|
||||
createImportLog,
|
||||
} from "./db";
|
||||
@@ -259,19 +258,6 @@ async function processEmailAttachment(
|
||||
processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`,
|
||||
});
|
||||
|
||||
// Vérifier la blacklist (factures supprimées manuellement)
|
||||
const blacklisted = await isInvoiceBlacklisted(invoiceData.invoiceNumber, userId);
|
||||
if (blacklisted) {
|
||||
duplicatesCount++;
|
||||
duplicateDetails.push({
|
||||
supplierName: invoiceData.supplierName,
|
||||
invoiceNumber: invoiceData.invoiceNumber,
|
||||
totalAmount: invoiceData.totalAmount,
|
||||
reason: 'blacklisted',
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check for duplicates (numéro de facture + montant)
|
||||
const duplicate = await findDuplicateInvoice(
|
||||
invoiceData.invoiceNumber,
|
||||
|
||||
@@ -40,7 +40,6 @@ import {
|
||||
toggleUserActive,
|
||||
deleteUser,
|
||||
findDuplicateInvoice,
|
||||
isInvoiceBlacklisted,
|
||||
getAllInvoices,
|
||||
getAllImportLogs,
|
||||
getAllImportLogsWithDetails,
|
||||
@@ -324,19 +323,6 @@ export const appRouter = router({
|
||||
processingProgress: `Extraction ${i + 1}/${result.invoiceCount} factures...`,
|
||||
});
|
||||
|
||||
// Vérifier la blacklist (factures supprimées manuellement)
|
||||
const blacklisted = await isInvoiceBlacklisted(invoiceData.invoiceNumber, userId);
|
||||
if (blacklisted) {
|
||||
duplicatesCount++;
|
||||
duplicateDetails.push({
|
||||
supplierName: invoiceData.supplierName,
|
||||
invoiceNumber: invoiceData.invoiceNumber,
|
||||
totalAmount: invoiceData.totalAmount,
|
||||
reason: 'blacklisted',
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check for duplicates (numéro de facture + montant)
|
||||
const duplicate = await findDuplicateInvoice(
|
||||
invoiceData.invoiceNumber,
|
||||
|
||||
Reference in New Issue
Block a user