diff --git a/paperless-backend/src/agrarmonitor/agrarmonitor-polling.service.ts b/paperless-backend/src/agrarmonitor/agrarmonitor-polling.service.ts index 06cb551..60294ad 100644 --- a/paperless-backend/src/agrarmonitor/agrarmonitor-polling.service.ts +++ b/paperless-backend/src/agrarmonitor/agrarmonitor-polling.service.ts @@ -143,7 +143,7 @@ export class AgrarmonitorPollingService implements OnModuleInit { (c) => Number(c['ist_lieferant']) === 1 && Number(c['ist_aktiv']) === 1, )) { try { - await this.getOrCreateCorrespondent(customer); + await this.getOrCreateCorrespondent(customer, Number(customer.id)); } catch (err: unknown) { this.logger.warn(`Korrespondenten-Sync fehlgeschlagen: ${err instanceof Error ? err.message : err}`); } @@ -237,7 +237,7 @@ export class AgrarmonitorPollingService implements OnModuleInit { let correspondentId: number | undefined; const customer = customers.find((c) => Number(c.id) === amDoc.kundenId); if (customer) { - const corr = await this.getOrCreateCorrespondent(customer); + const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId); if (corr) correspondentId = corr.id as number; } @@ -409,7 +409,7 @@ export class AgrarmonitorPollingService implements OnModuleInit { } // Korrespondent ermitteln oder anlegen - const corr = await this.getOrCreateCorrespondent(customer); + const corr = await this.getOrCreateCorrespondent(customer, amDoc.kundenId); // Owner aus Client-Tabelle let ownerId: number | undefined; @@ -620,7 +620,16 @@ export class AgrarmonitorPollingService implements OnModuleInit { return { mergedDocuments }; } - private async getOrCreateCorrespondent(customer: Record): Promise { + private async getOrCreateCorrespondent(customer: Record, kundenId?: number): Promise { + // Direkter Lookup über gespeicherte Agrarmonitor-ID + if (kundenId !== undefined) { + const setting = await this.corrSettingRepo.findOneBy({ AgrarmonitorId: kundenId }); + if (setting) { + return { id: setting.CorrespondentId }; + } + } + + // Fallback: Namensuche und ggf. anlegen const lieferantennummer = (customer['lieferantennummer'] as string) ?? ''; const displayName = this.buildCustomerName(customer, lieferantennummer); let corr = await this.paperlessService.getCorrespondentByName(displayName); @@ -633,6 +642,18 @@ export class AgrarmonitorPollingService implements OnModuleInit { owner: null, }); } + + // Link für künftige Läufe speichern + if (corr && kundenId !== undefined) { + let setting = await this.corrSettingRepo.findOneBy({ CorrespondentId: corr.id as number }); + if (!setting) { + setting = this.corrSettingRepo.create({ CorrespondentId: corr.id as number, AgrarmonitorId: kundenId }); + } else { + setting.AgrarmonitorId = kundenId; + } + await this.corrSettingRepo.save(setting); + } + return corr; }