Rechnung löschen — Gruppierung, Sperrgründe, Rechte

Die Endpunkte für endgültiges und statusbasiertes Löschen, Belegbündel, Sperrgründe, verwaiste Dokumente und die Berechtigungsschlüssel.

Das Rechnungsmodul kennt zwei Löscharten: physisches Löschen (delete) und Papierkorb (status = 9). Beide nutzen dieselbe Gruppierungs- und Sperrlogik.

Belegbündel

Die markierten Rechnungen werden gruppiert: die Rechnung und die darauf aufbauenden Zins- und Pauschalenbelege (getDependentInvoiceIds). Ist ein Mitglied nicht löschbar, wird kein Mitglied gelöscht.

Endgültiges Löschen (finance/invoice.delete)

  1. Recht: ein Element canAction(delete), mehrere canBulkAction(delete) (→ bulkdelete); nur Rechnungen im Bereich (invoiceInScope).
  2. Sperrgründe (invoiceDeleteBlocker): finanzielle Begleichung (transaction::getSettledInvoiceIds), nummerierte Rechnung, Buchungssatz (entry), Status > 2.
  3. deleteInvoice(): Kopf, Positionen, NAV-Steuerzeile, Dokumentverknüpfungen, Buchungsdatum, Protokolle; der Status der OTP-kelfo-Importdatei wird auf 0 gesetzt.
  4. Verwaiste Dokumente gemäß Einstellung invoice_doc_delete: ask (die Antwort enthält eine Liste orphan_docs), delete (Dlbtdocstore::purgeDocument()), keep; nur mit document/document::delete.
  5. Antwort: Anzahl Erfolge und Fehlschläge mit Gründen.

Papierkorb (statusdisable) und Wiederherstellung (statusenable)

Gleiche Gruppierung; Sperrgründe sind finanzielle Begleichung und nummerierte Rechnung. Ohne Sperre: updateInvoiceStatus(id, 9). Die Wiederherstellung setzt Status 2.

statusdisable verlangt das Recht edit und canBulk(statusdelete, db); Letzteres ist bei einem Element immer wahr, daher genügt im Code für eine einzelne Rechnung edit, statusdelete ist nicht nötig. statusenable prüft nur edit und Bereich.

Betroffene Tabellen

Die Tabellennamen tragen in der Datenbank das eigene Präfix der Installation: invoice, invoice_item, invoice_ctrl, doc, doc_link; Modelle: finance/transaction, finance/entry, files/otpkelfo, document/document.

Berechtigungsschlüssel

SchlüsselEinstufungWirkung
deleteBASEendgültiges Löschen eines Elements (Zeilenmenü, Radiergummi)
bulkdeleteBASEendgültiges Löschen von 2+ Elementen (Kopf-Papierkorb)
statusdeleteBASEPapierkorb (praktisch nur bei mehreren Elementen geprüft)
bulkstatusdeleteBASEPapierkorb für mehrere Elemente

Gelöschte Zeilen liefert die Liste nur mit canSeeDeleted() (Super-Admin oder Recht delete).