Files
breadcrumb-the-shire/modules/helpdesk/i18n/default_en.json
fs d472026df4 feat(helpdesk): add Domains list page with BC OData contract type enrichment
Add a new "Domains" page to the helpdesk module that fetches domain data
from the FS_Contract_Domains OData endpoint and enriches each domain with
its contract type (PI_Header_Type) by joining with FS_Contract_Lines_Test
where Type = 'Domain'.

New files:
- domains/index().php, index(default).phtml, filter-schema.php — list page
- domains-data().php — data endpoint with PHP-side filtering/sorting
- helpdesk-domains-index.js — Grid.js via initStandardListPage()

Gateway additions:
- listDomains() — fetch all contract domains
- listDomainContractLines() — fetch domain-type contract lines for type lookup

Sidebar restructured into three collapsible groups (Lookup, Monitoring,
Administration) with per-group icons and color coding, matching the core
admin panel pattern.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 21:34:32 +02:00

361 lines
17 KiB
JSON

{
"Helpdesk": "Helpdesk",
"Helpdesk settings": "Helpdesk settings",
"Customers": "Customers",
"Debtor search": "Debtor search",
"Search debtors": "Search debtors",
"Search by name or debtor number...": "Search by name or debtor number...",
"Search": "Search",
"Please provide a customer number": "Please provide a customer number",
"Minimum 2 characters": "Minimum 2 characters",
"Please enter at least 2 characters.": "Please enter at least 2 characters.",
"No debtors found": "No debtors found",
"Try a different search term.": "Try a different search term.",
"Could not connect to Business Central.": "Could not connect to Business Central.",
"BC connection is not configured.": "BC connection is not configured.",
"BC connection is not configured. Please configure the connection in the settings.": "BC connection is not configured. Please configure the connection in the settings.",
"BC connection is not configured": "BC connection is not configured",
"Open settings": "Open settings",
"Debtor No.": "Debtor No.",
"Name": "Name",
"City": "City",
"Phone": "Phone",
"E-Mail": "E-Mail",
"Master data": "Master data",
"Contacts": "Contacts",
"Tickets": "Tickets",
"Debtor details": "Debtor details",
"Search name": "Search name",
"Address": "Address",
"Postal code": "Postal code",
"Salesperson": "Salesperson",
"No contacts found": "No contacts found",
"No contacts are linked to this debtor in Business Central.": "No contacts are linked to this debtor in Business Central.",
"No.": "No.",
"Type": "Type",
"Job title": "Job title",
"No tickets found": "No tickets found",
"No tickets are linked to this debtor in Business Central.": "No tickets are linked to this debtor in Business Central.",
"Ticket No.": "Ticket No.",
"Description": "Description",
"Status": "Status",
"Category": "Category",
"Contact": "Contact",
"Support": "Support",
"Sales": "Sales",
"Controlling": "Controlling",
"Ticket": "Ticket",
"Debtor": "Debtor",
"Debtor not found": "Debtor not found",
"Ticket not found": "Ticket not found",
"Back to search": "Back to search",
"Back": "Back",
"Settings": "Settings",
"Connection": "Connection",
"Save": "Save",
"Settings saved": "Settings saved",
"Configuration incomplete": "Configuration incomplete",
"OData Base URL": "OData Base URL",
"Base URL without Company path segment": "Base URL without Company path segment",
"Company name": "Company name",
"BC company name (URL-encoded automatically)": "BC company name (URL-encoded automatically)",
"Authentication": "Authentication",
"Auth mode": "Auth mode",
"Basic Auth": "Basic Auth",
"OAuth2 (client credentials)": "OAuth2 (client credentials)",
"Username": "Username",
"Password": "Password",
"Leave empty to keep current password": "Leave empty to keep current password",
"Saved": "Saved",
"Azure Tenant ID": "Azure Tenant ID",
"Client ID": "Client ID",
"Client Secret": "Client Secret",
"Token endpoint URL": "Token endpoint URL",
"Connection test": "Connection test",
"Test connection": "Test connection",
"Connection successful": "Connection successful",
"Connection failed": "Connection failed",
"Testing...": "Testing...",
"Form expired, please try again": "Form expired, please try again",
"OData Base URL must use HTTPS": "OData Base URL must use HTTPS",
"Address & contact": "Address & contact",
"Company": "Company",
"Company details": "Company details",
"Contact & dates": "Contact & dates",
"Could not load contacts.": "Could not load contacts.",
"Could not load tickets.": "Could not load tickets.",
"Last activity": "Last activity",
"Ticket details": "Ticket details",
"Overview": "Overview",
"Open tickets": "Open tickets",
"All tickets": "All tickets",
"All contacts": "All contacts",
"Recent activity": "Recent activity",
"Support info & master data": "Support info & master data",
"Support type": "Support type",
"Location": "Location",
"No open tickets": "No open tickets",
"No recent activity found.": "No recent activity found.",
"Total tickets": "Total tickets",
"Total contracts": "Total contracts",
"Critical (>48h)": "Critical (>48h)",
"Oldest open": "Oldest open",
"Ticket list": "Ticket list",
"Next actions": "Next actions",
"System recommendations": "System recommendations",
"Action": "Action",
"Age (h)": "Age (h)",
"No support actions required right now.": "No support actions are required right now.",
"No system recommendations right now.": "No system recommendations right now.",
"Contracts & products": "Contracts & products",
"No contracts found for this customer.": "No contracts found for this customer.",
"Contract No.": "Contract No.",
"Product type": "Product type",
"Next invoicing": "Next invoicing",
"Amount": "Amount",
"Active contracts": "Active contracts",
"Could not load contracts.": "Could not load contracts.",
"Escalations": "Escalations",
"Escalations are not available yet.": "Escalations are not available yet.",
"Escalated tickets": "Escalated tickets",
"No escalated tickets right now.": "No escalated tickets right now.",
"Could not load escalated tickets.": "Could not load escalated tickets.",
"Escalation code": "Escalation code",
"SLA target": "SLA target",
"Overdue by": "Overdue by",
"day": "day",
"days": "days",
"Ticket volume": "Ticket volume",
"Close rate": "Close rate",
"Avg. resolution": "Avg. resolution",
"Open backlog": "Open tickets",
"kpi_tooltip_close_rate": "Closed \u00f7 created tickets in period. Above 1\u00d7 = open ticket queue is shrinking.",
"kpi_tooltip_resolution": "Median processing time of all tickets closed in the selected period.",
"kpi_tooltip_backlog": "Current snapshot of all open tickets \u2013 independent of the selected period. Shows the pending queue.",
"Backlog shrinking": "Queue shrinking",
"Backlog growing": "Queue growing",
"unassigned": "unassigned",
"Ticket trend": "Ticket trend",
"Support efficiency": "Support efficiency",
"Contract metrics": "Contract metrics",
"Risk assessment": "Risk assessment",
"vs. prev. period": "vs. prev. period",
"Low": "Low",
"Medium": "Medium",
"High": "High",
"All checks passed": "All checks passed",
"of": "of",
"checks flagged": "checks flagged",
"Limit": "Limit",
"No controlling data available.": "No controlling data available.",
"Resolution time": "Resolution time",
"Oldest open ticket": "Oldest open ticket",
"Unassigned": "Unassigned",
"risk_desc_ticket_volume": "Change vs. previous period",
"risk_desc_resolution_time": "Median time to close",
"risk_desc_open_aging": "Since last activity",
"risk_desc_unassigned": "Share of open tickets without assignee",
"Ticket volume increase": "Ticket volume increase",
"High avg. resolution time": "High avg. resolution time",
"Open ticket aging": "Open ticket aging",
"Unassigned ticket ratio": "Unassigned ticket ratio",
"Could not load controlling dashboard.": "Could not load controlling dashboard.",
"Avg. open age": "Avg. open age",
"Without assignee": "Without assignee",
"30 days": "30 days",
"90 days": "90 days",
"6 months": "6 months",
"1 year": "1 year",
"Escalation rate": "Escalation rate",
"Threshold (%)": "Threshold (%)",
"Threshold (hours)": "Threshold (hours)",
"Controlling risk configuration was invalid. Defaults were applied.": "Controlling risk configuration was invalid. Defaults were applied.",
"Open ticket without activity for": "Open ticket without activity for",
"hours": "hours",
"Open ticket without assigned support user": "Open ticket without assigned support user",
"Follow up oldest open ticket": "Follow up oldest open ticket",
"System recommendation configuration was invalid. Defaults were applied.": "System recommendation configuration was invalid. Defaults were applied.",
"Maximum recommendations": "Maximum recommendations",
"Rule templates": "Rule templates",
"Enabled": "Enabled",
"Priority": "Priority",
"Thresholds": "Thresholds",
"Escalation overdue": "Escalation overdue",
"High-risk aging": "High-risk aging",
"Unassigned open": "Unassigned open",
"Stale open": "Stale open",
"Customer backlog": "Open tickets for customer",
"Minimum overdue (minutes)": "Minimum overdue (minutes)",
"High-risk codes (comma separated)": "High-risk codes (comma separated)",
"Minimum age (hours)": "Minimum age (hours)",
"Minimum open tickets": "Minimum open tickets",
"Escalation SLA exceeded by {overdue_hours}h ({escalation_code}).": "SLA exceeded by {overdue_hours}h ({escalation_code}) — escalate immediately or inform customer.",
"High-risk ticket ({escalation_code}) is open for {age_hours}h.": "Critical ticket ({escalation_code}) open for {age_hours}h — review priority and ensure progress.",
"Ticket is unassigned for {age_hours}h.": "Unassigned for {age_hours}h — assign to a team member urgently.",
"No activity for {age_hours}h.": "No activity for {age_hours}h — check if customer is waiting for a response.",
"Customer backlog: {open_tickets} open tickets.": "{open_tickets} open tickets — address oldest tickets first to reduce the queue.",
"Created": "Created",
"Loading...": "Loading...",
"Refresh data": "Refresh data",
"Mobile": "Mobile",
"Activity": "Activity",
"Activity timeline": "Activity timeline",
"Message": "Message",
"Status change": "Status change",
"No activity found.": "No activity found.",
"Could not load activity log.": "Could not load activity log.",
"Communication history": "Communication history",
"No communication found.": "No communication found.",
"Could not load communication history.": "Could not load communication history.",
"Live communication unavailable, showing activity fallback.": "Live communication unavailable, showing activity fallback.",
"Ticket communication": "Ticket communication",
"Last 5 tickets": "Last 5 tickets",
"Last 10 tickets": "Last 10 tickets",
"Some ticket communications could not be loaded completely.": "Some ticket communications could not be loaded completely.",
"Unknown user": "Unknown user",
"Unknown time": "Unknown time",
"Source": "Source",
"SOAP": "SOAP",
"Activity fallback": "Activity fallback",
"sent a message": "sent a message",
"changed status": "changed status",
"Forwarded": "forwarded the ticket",
"attached a file": "attached a file",
"logged an activity": "logged an activity",
"on": "on",
"Process": "Process",
"All": "All",
"Open": "Open",
"In Progress": "In Progress",
"Closed": "Closed",
"Monthly volume": "Monthly volume",
"Support hours": "Support hours",
"Contract overview": "Contract overview",
"No contract details available.": "No contract details available.",
"Could not load sales dashboard.": "Could not load sales dashboard.",
"Quantity": "Quantity",
"Unit price": "Unit price",
"Line amount": "Line amount",
"Line state": "Line state",
"Starting date": "Starting date",
"Invoicing period": "Invoicing period",
"positions": "positions",
"per month": "per month",
"Last invoicing": "Last invoicing",
"Analysis": "Analysis",
"New (30d)": "New (30d)",
"Resolved (30d)": "Resolved (30d)",
"Avg. age open": "Avg. age open",
"vs. prev. 30d": "vs. prev. 30d",
"net (30d)": "net (30d)",
"critical": "critical",
"Avg. contract value": "Avg. contract value",
"of {total} total": "of {total} total",
"in {days} days": "in {days} days",
"largest": "largest",
"Attention needed": "Attention needed",
"Recommendations": "Recommendations",
"Contract summary": "Contract summary",
"Contract trend": "Contract trend",
"New contracts": "New contracts",
"Ended contracts": "Ended contracts",
"active": "active",
"ended": "ended",
"Age": "Age",
"Period": "Period",
"Last 30 days": "Last 30 days",
"Last 90 days": "Last 90 days",
"Last 180 days": "Last 180 days",
"Last 365 days": "Last 365 days",
"Automation": "Automation",
"Risk monitoring": "Risk monitoring",
"rule_help_escalation_overdue": "Recommends action when SLA escalation deadlines are exceeded.",
"rule_help_high_risk_aging": "Detects critical tickets with specific escalation codes that have been open too long.",
"rule_help_unassigned_open": "Flags open tickets that are not assigned to any support agent.",
"rule_help_stale_open": "Marks open tickets without recent activity for follow-up.",
"rule_help_customer_backlog": "Warns when a customer has too many open tickets at once.",
"rule_help_ticket_volume": "Triggers when ticket volume rises significantly compared to the previous period.",
"rule_help_avg_resolution": "Warns when average resolution time exceeds the threshold.",
"rule_help_open_aging": "Detects open tickets that have been without activity for too long.",
"rule_help_unassigned_ratio": "Warns when too many open tickets lack an assigned agent.",
"Automation configuration was invalid. Defaults were applied.": "Automation configuration was invalid. Defaults were applied.",
"Advanced options": "Advanced options",
"Min. overdue": "Min. overdue",
"Min. age": "Min. age",
"Min. open": "Min. open",
"Team": "Team",
"Team dashboard": "Team dashboard",
"Team workload": "Team workload",
"Support agent": "Support agent",
"Critical (>48h open)": "Critical (>48h open)",
"Avg. age (h)": "Avg. age (h)",
"Resolved in period": "Resolved in period",
"Not assigned": "Not assigned",
"Could not load team dashboard.": "Could not load team dashboard.",
"No team data available.": "No team data available.",
"Top customers": "Top customers",
"Top categories": "Top categories",
"Current": "Current",
"Performance": "Performance",
"Historical": "Historical",
"Queue": "Queue",
"trend_tooltip_up": "More tickets received than resolved in the period — backlog is growing.",
"trend_tooltip_down": "More tickets resolved than received in the period — backlog is shrinking.",
"Download file": "Download file",
"Trend based on last {days} days": "Trend based on last {days} days",
"Trend": "Trend",
"Risk radar": "Risk radar",
"Risk score": "Risk score",
"Risk traffic light logic": "Traffic light logic",
"High risk (55-100)": "High risk (55-100)",
"Medium risk (25-54)": "Medium risk (25-54)",
"Low risk (0-24)": "Low risk (0-24)",
"Score = weighted sum: Open pressure (35), Trend (30), SLA overdue (25), Inactivity (10).": "Score = weighted sum: Open pressure (35), Trend (30), SLA overdue (25), Inactivity (10).",
"High risk": "High risk",
"Medium risk": "Medium risk",
"Low risk": "Low risk",
"SLA overdue": "SLA overdue",
"Net flow": "Net flow",
"Open pressure": "Open pressure",
"Inactivity": "Inactivity",
"No risk data available.": "No risk data available.",
"Could not load risk radar.": "Could not load risk radar.",
"Data may be incomplete. Not all tickets could be loaded.": "Data may be incomplete. Not all tickets could be loaded.",
"Why at risk": "Why at risk",
"open": "open",
"overdue": "overdue",
"net": "net",
"Search customers...": "Search customers...",
"more than resolved": "more than resolved",
"SLA breaches": "SLA breaches",
"Oldest ticket": "Oldest ticket",
"General connection": "General connection",
"Tenant connection": "Tenant connection",
"Configuration source": "Configuration source",
"Use tenant-specific configuration": "Use tenant-specific configuration",
"When enabled, this tenant uses its own BC connection instead of the global configuration.": "When enabled, this tenant uses its own BC connection instead of the global configuration.",
"This tenant inherits the global configuration. Enable the toggle above to use tenant-specific settings.": "This tenant inherits the global configuration. Enable the toggle above to use tenant-specific settings.",
"Tenant settings saved": "Tenant settings saved",
"Token endpoint must use HTTPS": "Token endpoint must use HTTPS",
"The current tenant uses its own configuration. Changes here only affect tenants without a tenant-specific connection.": "The current tenant uses its own configuration. Changes here only affect tenants without a tenant-specific connection.",
"Failed to save tenant settings": "Failed to save tenant settings",
"Meetings": "Meetings",
"Released": "Released",
"Pending": "Pending",
"Upcoming meetings": "Upcoming meetings",
"Past meetings": "Past meetings",
"No meetings found for this customer.": "No meetings found for this customer.",
"Could not load meetings.": "Could not load meetings.",
"Domains": "Domains",
"Search domains...": "Search domains...",
"Customer No.": "Customer No.",
"Customer Name": "Customer Name",
"Administration": "Administration",
"No domains found": "No domains found",
"Could not load domains.": "Could not load domains.",
"Lookup": "Lookup",
"Monitoring": "Monitoring",
"Contract type": "Contract type",
"Customer": "Customer"
}