Der before_save-Hook am Service Report ruft save_backlinks auf, das auf den DocType
"OTRSConnect Article" zugreift. Seit dem Entfernen der App otrsconnect (26.08.2026)
existiert dieser DocType nicht mehr - jeder Speichervorgang warf dadurch einen
DoesNotExistError. Frappe 16.31 wandelt den fuer Benutzer ohne Leserecht auf den
DocType "DocType" zusaetzlich in einen PermissionError um ("Keine Berechtigung fuer
DocType"), was die Ursache vollstaendig verschleierte.
save_backlinks und clear_backlinks pruefen jetzt zuerst, ob der DocType ueberhaupt
vorhanden ist, und tun sonst nichts. Auf Sites mit OTRSConnect bleibt das Verhalten
unveraendert.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Der Formular-Dashboard-Link (Gruppe "IT", IT Object ueber it_landscape)
war auf erpnext.itsdave.de seit dem 2026-04-24 in der Datenbank aktiv,
lag aber nur als uncommittete developer_mode-Rueckschreibung im
Produktivbaum und waere beim naechsten Checkout verloren gewesen.
Mitgenommen: naming_rule "Expression (old style)" -> "Expression" und
row_format "Dynamic" (beides Frappe-Normalisierung beim Speichern).
get_attendance_list fragte den DocType `Attendance` ab, den es seit dem
v16-Stand ohne hrms nicht mehr gibt. Der DoesNotExistError riss die
gesamte Kette get_data -> compare_hours -> get_target_hours mit, der
Dashboard-Chart "Meine Performance" blieb fuer alle Nutzer auf "Loading"
haengen (ITSD-22440).
Quelle sind jetzt genehmigte HR Absence Requests, deren Abwesenheitsart
das Soll reduziert (HR Absence Type.affects_target_hours). Halbe Tage
(half_day_start/half_day_end) halbieren das Tagessoll.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>