refactor: rename tagPosteingang to tagManuell for missing AM entries
Build and Push Multi-Platform Images / build-and-push (push) Successful in 34s

- Renamed setting agrarmonitor_tag_posteingang → agrarmonitor_tag_manuell
- Documents not found in AM are now tagged as "Manuell bearbeiten"
  instead of being moved back to Posteingang

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-26 22:17:01 +02:00
parent 55b30f1f39
commit 2444821c9e
4 changed files with 21 additions and 21 deletions
@@ -53,7 +53,7 @@ export class AgrarmonitorPollingService implements OnModuleInit {
await this.upsertSetting('agrarmonitor_tag_verbucht', '9'); await this.upsertSetting('agrarmonitor_tag_verbucht', '9');
await this.upsertSetting('agrarmonitor_tag_hochgeladen', ''); await this.upsertSetting('agrarmonitor_tag_hochgeladen', '');
await this.upsertSetting('agrarmonitor_link_field', ''); await this.upsertSetting('agrarmonitor_link_field', '');
await this.upsertSetting('agrarmonitor_tag_posteingang', ''); await this.upsertSetting('agrarmonitor_tag_manuell', '');
} }
@Cron(process.env['AGRARMONITOR_POLLING_CRON'] || '0 */30 * * * *') @Cron(process.env['AGRARMONITOR_POLLING_CRON'] || '0 */30 * * * *')
@@ -68,20 +68,20 @@ export class AgrarmonitorPollingService implements OnModuleInit {
this.processVerarbeiteteDocuments().catch((err) => this.logger.error('Cron-Upload-Check-Fehler:', err)); this.processVerarbeiteteDocuments().catch((err) => this.logger.error('Cron-Upload-Check-Fehler:', err));
} }
async getPollingConfig(): Promise<{ tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagPosteingang: string }> { async getPollingConfig(): Promise<{ tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagManuell: string }> {
const [fertig, verbucht, hochgeladen, linkField, posteingang] = await Promise.all([ const [fertig, verbucht, hochgeladen, linkField, manuell] = await Promise.all([
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_fertig' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_fertig' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_verbucht' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_verbucht' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_hochgeladen' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_hochgeladen' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_link_field' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_link_field' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_posteingang' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_manuell' }),
]); ]);
return { return {
tagFertig: fertig?.Wert ?? '4', tagFertig: fertig?.Wert ?? '4',
tagVerbucht: verbucht?.Wert ?? '9', tagVerbucht: verbucht?.Wert ?? '9',
tagHochgeladen: hochgeladen?.Wert ?? '', tagHochgeladen: hochgeladen?.Wert ?? '',
linkField: linkField?.Wert ?? '', linkField: linkField?.Wert ?? '',
tagPosteingang: posteingang?.Wert ?? '', tagManuell: manuell?.Wert ?? '',
}; };
} }
@@ -90,16 +90,16 @@ export class AgrarmonitorPollingService implements OnModuleInit {
tagVerbucht: string, tagVerbucht: string,
tagHochgeladen: string, tagHochgeladen: string,
linkField: string, linkField: string,
tagPosteingang: string, tagManuell: string,
): Promise<{ tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagPosteingang: string }> { ): Promise<{ tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagManuell: string }> {
await Promise.all([ await Promise.all([
this.settingRepo.update({ Tag: 'agrarmonitor_tag_fertig' }, { Wert: tagFertig }), this.settingRepo.update({ Tag: 'agrarmonitor_tag_fertig' }, { Wert: tagFertig }),
this.settingRepo.update({ Tag: 'agrarmonitor_tag_verbucht' }, { Wert: tagVerbucht }), this.settingRepo.update({ Tag: 'agrarmonitor_tag_verbucht' }, { Wert: tagVerbucht }),
this.settingRepo.update({ Tag: 'agrarmonitor_tag_hochgeladen' }, { Wert: tagHochgeladen }), this.settingRepo.update({ Tag: 'agrarmonitor_tag_hochgeladen' }, { Wert: tagHochgeladen }),
this.settingRepo.update({ Tag: 'agrarmonitor_link_field' }, { Wert: linkField }), this.settingRepo.update({ Tag: 'agrarmonitor_link_field' }, { Wert: linkField }),
this.settingRepo.update({ Tag: 'agrarmonitor_tag_posteingang' }, { Wert: tagPosteingang }), this.settingRepo.update({ Tag: 'agrarmonitor_tag_manuell' }, { Wert: tagManuell }),
]); ]);
return { tagFertig, tagVerbucht, tagHochgeladen, linkField, tagPosteingang }; return { tagFertig, tagVerbucht, tagHochgeladen, linkField, tagManuell };
} }
async runPolling(): Promise<PollingResult> { async runPolling(): Promise<PollingResult> {
@@ -295,17 +295,17 @@ export class AgrarmonitorPollingService implements OnModuleInit {
this.logger.log('Starte Upload-Check'); this.logger.log('Starte Upload-Check');
try { try {
const [hochgeladenSetting, fertigSetting, linkFieldSetting, posteingangSetting] = await Promise.all([ const [hochgeladenSetting, fertigSetting, linkFieldSetting, manuellSetting] = await Promise.all([
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_hochgeladen' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_hochgeladen' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_fertig' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_fertig' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_link_field' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_link_field' }),
this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_posteingang' }), this.settingRepo.findOneBy({ Tag: 'agrarmonitor_tag_manuell' }),
]); ]);
const tagHochgeladenId = parseInt(hochgeladenSetting?.Wert ?? '', 10); const tagHochgeladenId = parseInt(hochgeladenSetting?.Wert ?? '', 10);
const tagFertigId = parseInt(fertigSetting?.Wert ?? '4', 10); const tagFertigId = parseInt(fertigSetting?.Wert ?? '4', 10);
const linkFieldId = parseInt(linkFieldSetting?.Wert ?? '', 10); const linkFieldId = parseInt(linkFieldSetting?.Wert ?? '', 10);
const tagPosteingangId = parseInt(posteingangSetting?.Wert ?? '', 10); const tagManuellId = parseInt(manuellSetting?.Wert ?? '', 10);
if (isNaN(tagHochgeladenId)) { if (isNaN(tagHochgeladenId)) {
this.logger.warn('Tag "hochgeladen" nicht konfiguriert — Upload-Check übersprungen'); this.logger.warn('Tag "hochgeladen" nicht konfiguriert — Upload-Check übersprungen');
@@ -396,12 +396,12 @@ export class AgrarmonitorPollingService implements OnModuleInit {
continue; continue;
} }
// Weder verbucht noch im Dateieingang → zurück in Posteingang // Weder verbucht noch im Dateieingang → Tag "Manuell bearbeiten" setzen
if (!isNaN(tagPosteingangId)) { if (!isNaN(tagManuellId)) {
const currentTags: number[] = (doc.tags as number[]) ?? []; const currentTags: number[] = (doc.tags as number[]) ?? [];
const newTags = [...new Set(currentTags.filter(t => t !== tagHochgeladenId).concat([tagPosteingangId]))]; const newTags = [...new Set(currentTags.filter(t => t !== tagHochgeladenId).concat([tagManuellId]))];
await this.paperlessService.updateDocument(doc.id as number, { tags: newTags }); await this.paperlessService.updateDocument(doc.id as number, { tags: newTags });
this.logger.log(`${interneBelegnummer} nicht mehr in Agrarmonitor — zurück in Posteingang`); this.logger.log(`${interneBelegnummer} nicht mehr in Agrarmonitor — als manuell bearbeiten markiert`);
result.updated++; result.updated++;
} else { } else {
result.skipped++; result.skipped++;
@@ -32,8 +32,8 @@ export class AgrarmonitorController {
@Put('polling-config') @Put('polling-config')
@RequirePermissions(Permission.MANAGE_SETTINGS) @RequirePermissions(Permission.MANAGE_SETTINGS)
async updatePollingConfig(@Body() body: { tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagPosteingang: string }) { async updatePollingConfig(@Body() body: { tagFertig: string; tagVerbucht: string; tagHochgeladen: string; linkField: string; tagManuell: string }) {
return this.pollingService.updatePollingConfig(body.tagFertig, body.tagVerbucht, body.tagHochgeladen, body.linkField, body.tagPosteingang ?? ''); return this.pollingService.updatePollingConfig(body.tagFertig, body.tagVerbucht, body.tagHochgeladen, body.linkField, body.tagManuell ?? '');
} }
@Post('run-polling') @Post('run-polling')
+1 -1
View File
@@ -202,7 +202,7 @@ export interface AgrarmonitorPollingConfig {
tagVerbucht: string; tagVerbucht: string;
tagHochgeladen: string; tagHochgeladen: string;
linkField: string; linkField: string;
tagPosteingang: string; tagManuell: string;
} }
export interface AgrarmonitorPollingResult { export interface AgrarmonitorPollingResult {
@@ -2588,8 +2588,8 @@ function AgrarmonitorTab() {
<Form.Item name="tagHochgeladen" label="Tag-ID: Hochgeladen in Agrarmonitor"> <Form.Item name="tagHochgeladen" label="Tag-ID: Hochgeladen in Agrarmonitor">
<Input placeholder="3" style={{ width: 120 }} /> <Input placeholder="3" style={{ width: 120 }} />
</Form.Item> </Form.Item>
<Form.Item name="tagPosteingang" label="Tag-ID: Posteingang (bei fehlendem AM-Beleg)"> <Form.Item name="tagManuell" label="Tag-ID: Manuell bearbeiten (bei fehlendem AM-Beleg)">
<Input placeholder="1" style={{ width: 120 }} /> <Input placeholder="" style={{ width: 120 }} />
</Form.Item> </Form.Item>
<Form.Item name="linkField" label="Custom Field: Agrarmonitor-Link"> <Form.Item name="linkField" label="Custom Field: Agrarmonitor-Link">
<Select allowClear placeholder="Kein Feld ausgewählt" style={{ width: 280 }}> <Select allowClear placeholder="Kein Feld ausgewählt" style={{ width: 280 }}>