feat(helpdesk): add software updates tracking with BC ticket integration

New Updates page in the Helpdesk module that fetches UPDATE/UPDATE-HF tickets
from Business Central (PBI_LV_Tickets) and allows assigning a domain and Gitea
link via a dialog. Ticket status (from BC) and assignment status (local) are
shown as separate columns with filters for both plus type and free-text search.
Assigned updates also appear on the domain detail page. Includes session-cached
BC fetch with refresh button, admin permissions, migration, and 16 unit tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 13:21:40 +02:00
parent 693d33a0c8
commit da0abc824a
23 changed files with 1971 additions and 6 deletions

View File

@@ -381,6 +381,7 @@
"Define the fields that make up the handover protocol for this product.": "Definieren Sie die Felder, die das Übergabeprotokoll für dieses Produkt bilden.",
"Add field": "Feld hinzufügen",
"Remove field": "Feld entfernen",
"Duplicate field": "Feld duplizieren",
"Move up": "Nach oben",
"Move down": "Nach unten",
"Field key": "Feld-Schlüssel",
@@ -469,6 +470,7 @@
"Restore this version": "Diese Version wiederherstellen",
"Restore this version?": "Diese Version wiederherstellen?",
"Version restored": "Version wiederhergestellt",
"Failed to restore": "Wiederherstellen fehlgeschlagen",
"Only managers can restore revisions": "Nur Manager können Versionen wiederherstellen",
"Revision not found": "Version nicht gefunden",
"Created": "Erstellt",
@@ -480,5 +482,63 @@
"Yes": "Ja",
"No": "Nein",
"Changed": "Geändert",
"Compare with current": "Mit aktueller Version vergleichen"
"Compare with current": "Mit aktueller Version vergleichen",
"Domain": "Domain",
"Select a customer first...": "Bitte zuerst einen Kunden auswählen...",
"Loading domains...": "Domains werden geladen...",
"No domains found for this customer": "Keine Domains für diesen Kunden gefunden",
"Failed to load domains": "Domains konnten nicht geladen werden",
"Please select a domain": "Bitte wählen Sie eine Domain",
"Delete": "Löschen",
"Select all": "Alle auswählen",
"Delete selected handovers?": "Ausgewählte Übergaben löschen?",
"%d handover(s) deleted": "%d Übergabe(n) gelöscht",
"Failed to delete handovers": "Übergaben konnten nicht gelöscht werden",
"Only managers can delete handovers": "Nur Manager können Übergaben löschen",
"No handovers selected": "Keine Übergaben ausgewählt",
"Domain not found": "Domain nicht gefunden",
"Domain detail": "Domain-Details",
"Back to domains": "Zurück zu Domains",
"Open domain": "Domain öffnen",
"Open debitor": "Debitor öffnen",
"Customer information": "Kundeninformation",
"Contract information": "Vertragsinformation",
"Related domains": "Verwandte Domains",
"No handovers for this domain yet": "Noch keine Übergaben für diese Domain",
"No contract information available": "Keine Vertragsinformation verfügbar",
"Network error — please try again": "Netzwerkfehler — bitte erneut versuchen",
"Contract state": "Vertragsstatus",
"Total": "Gesamt",
"URL": "URL",
"State": "Status",
"Product": "Produkt",
"Updates": "Updates",
"Ticket status": "Ticketstatus",
"Assignment": "Zuweisung",
"Resolved": "Erledigt",
"Closed": "Geschlossen",
"Open": "Offen",
"Assign update": "Update zuweisen",
"Assign": "Zuweisen",
"Unassigned": "Nicht zugewiesen",
"Assigned": "Zugewiesen",
"Update": "Update",
"Hotfix": "Hotfix",
"Gitea link": "Gitea-Link",
"e.g. https://gitea.example.com/org/repo/src/branch/main/updates/2026-02": "z.B. https://gitea.example.com/org/repo/src/branch/main/updates/2026-02",
"Notes": "Notizen",
"No update tickets found": "Keine Update-Tickets gefunden",
"Failed to load update tickets": "Update-Tickets konnten nicht geladen werden",
"Update assigned successfully": "Update erfolgreich zugewiesen",
"Failed to assign update": "Update konnte nicht zugewiesen werden",
"Select domain...": "Domain auswählen...",
"Loading domains...": "Domains werden geladen...",
"No domains found for this customer": "Keine Domains für diesen Kunden gefunden",
"No updates for this domain yet": "Noch keine Updates für diese Domain",
"Search updates...": "Updates suchen...",
"Open in Gitea": "In Gitea öffnen",
"Invalid category": "Ungültige Kategorie",
"Ticket number is required": "Ticket-Nummer ist erforderlich",
"View software updates list": "Software-Updates-Liste anzeigen",
"Assign and manage software updates": "Software-Updates zuweisen und verwalten"
}