„inbox“ war doppelt belegt (/api/inbox = Scanner, /api/paperless/inbox = Paperless-Posteingang) und passte nicht zur Manuell-Seite, die dieselben Routen nutzt. Umbenannt (ohne Alias, nur das eigene Frontend nutzt sie): PUT paperless/inbox/:id → PUT paperless/documents/:id GET paperless/inbox/pdf/:id → GET paperless/documents/:id/pdf GET paperless/inbox/preview/:id → GET paperless/documents/:id/preview GET paperless/inbox/:id/erechnung → GET paperless/documents/:id/erechnung Dabei: - Dokumentsuche (GET documents) wieder für den Posteingang (VIEW_INBOX) statt nur Admin – die Verknüpfungssuche im Bearbeiten-Dialog nutzt sie; die Einschränkung aus dem vorigen Commit hatte sie gebrochen. - Suche und GET documents/:id liefern nur noch id, Titel, ASN, Datum (kein OCR-Volltext, keine Statusfelder). - documents/:id/pdf auch für VIEW_SCANNER (Duplikatvergleich im Scanner). - E-Rechnungs-Vorschlag prüft wie das Speichern pro Dokument (Tag 1 bzw. Manuell-Tag); Vorschau/PDF bewusst nicht (Suchergebnisse, Duplikate). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import { Permission } from '../auth/permissions.enum';
|
||
|
||
/** Paperless-Tag, der ein Dokument als „im Posteingang“ kennzeichnet. */
|
||
export const POSTEINGANG_TAG_ID = 1;
|
||
|
||
/**
|
||
* Darf der Benutzer dieses Paperless-Dokument über die Posteingangs-Maske
|
||
* bearbeiten? Der Backend-Service-Token umgeht die Paperless-Rechte, deshalb
|
||
* wird hier pro Dokument geprüft: Posteingang-Rolle nur für Dokumente mit
|
||
* Posteingang-Tag, Buchhaltung nur für Dokumente mit Manuell-Tag.
|
||
*/
|
||
export function darfDokumentBearbeiten(
|
||
tags: number[] | undefined,
|
||
permissions: Permission[],
|
||
manuellTagId: number,
|
||
): boolean {
|
||
if (permissions.includes(Permission.MANAGE_ALL)) return true;
|
||
const vorhanden = new Set((tags ?? []).map(Number));
|
||
return (
|
||
(vorhanden.has(POSTEINGANG_TAG_ID) &&
|
||
permissions.includes(Permission.VIEW_INBOX)) ||
|
||
(vorhanden.has(manuellTagId) &&
|
||
permissions.includes(Permission.PROCESS_MANUALLY))
|
||
);
|
||
}
|
||
|
||
export interface DokumentKurzinfo {
|
||
id: number;
|
||
title: string;
|
||
archive_serial_number: number | null;
|
||
created: string;
|
||
}
|
||
|
||
/**
|
||
* Für Suche und Verknüpfungsanzeige genügen Kennung, Titel, ASN und Datum.
|
||
* Das vollständige Paperless-Dokument enthält u.a. den OCR-Volltext und
|
||
* Statusfelder – die sollen über diese Routen nicht abrufbar sein.
|
||
*/
|
||
export function dokumentKurzinfo(doc: {
|
||
id: number;
|
||
title: string;
|
||
archive_serial_number?: number | null;
|
||
created: string;
|
||
}): DokumentKurzinfo {
|
||
return {
|
||
id: doc.id,
|
||
title: doc.title,
|
||
archive_serial_number: doc.archive_serial_number ?? null,
|
||
created: doc.created,
|
||
};
|
||
}
|