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)
- Recht: ein Element
canAction(delete), mehrerecanBulkAction(delete)(→bulkdelete); nur Rechnungen im Bereich (invoiceInScope). - Sperrgründe (
invoiceDeleteBlocker): finanzielle Begleichung (transaction::getSettledInvoiceIds), nummerierte Rechnung, Buchungssatz (entry), Status > 2. deleteInvoice(): Kopf, Positionen, NAV-Steuerzeile, Dokumentverknüpfungen, Buchungsdatum, Protokolle; der Status der OTP-kelfo-Importdatei wird auf 0 gesetzt.- Verwaiste Dokumente gemäß Einstellung
invoice_doc_delete:ask(die Antwort enthält eine Listeorphan_docs),delete(Dlbtdocstore::purgeDocument()),keep; nur mitdocument/document::delete. - 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üssel | Einstufung | Wirkung |
|---|---|---|
delete | BASE | endgültiges Löschen eines Elements (Zeilenmenü, Radiergummi) |
bulkdelete | BASE | endgültiges Löschen von 2+ Elementen (Kopf-Papierkorb) |
statusdelete | BASE | Papierkorb (praktisch nur bei mehreren Elementen geprüft) |
bulkstatusdelete | BASE | Papierkorb für mehrere Elemente |
Gelöschte Zeilen liefert die Liste nur mit canSeeDeleted() (Super-Admin oder Recht delete).