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>
361 lines
17 KiB
JSON
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"
|
|
}
|