Writing a first customer-panel widget
Main assumptions
Our goal is to create a simple widget that can be added to the Dashboard view. It will include the number of new tickets assigned to the specific customer user.
Module Structure
The widget will be built as a standard OTRS package, easy to build and deploy. It will contain all necessary configuration needed for proper running. We will create a separate hidden module in which we will put our widget. Our whole package's structure will look like this:
otrs-ticket-information/
├── install.sopm
├── Kernel
│ ├── Config
│ │ └── Files
│ │ └── XML
│ │ └── TicketInformationWidget.xml
│ ├── Language
│ │ └── pl_TicketInformationWidget.pm
│ └── Modules
│ └── TicketInformation.pm
└── var
├── httpd
│ └── htdocs
│ └── customer-panel
│ └── modules
│ └── WIDGET_OpenTickets.js
└── intalio-customer-panel
└── ticket_widget_translation_strings.json
XML Configuration
What we do here is registering the OTRS module - TIcketInformation, which will be referenced when calling our API for retrieving the ticket's information. Furthermore, we register our CustomerPanel module and assign 'Open tickets counter' to him.
<otrs_config version="2.0" init="Application">
<Setting Name="CustomerFrontend::Module###ContractWidget" Required="1" Valid="1">
<Description Translatable="1">FrontendModuleRegistration for TicketInformation module.</Description>
<Navigation>Frontend::Customer::ModuleRegistration</Navigation>
<Value>
<Item ValueType="FrontendRegistration">
<Hash>
<Item Key="Group">
<Array>
<Item>users</Item>
</Array>
</Item>
<Item Key="Description" Translatable="1">TicketInformation.</Item>
<Item Key="Title" Translatable="1">TicketInformation</Item>
<Item Key="NavBarName">TicketInformation</Item>
</Hash>
</Item>
</Value>
</Setting>
<Setting Name="OTRSFrontendModule::TicketInformation" Required="0" Valid="1">
<Description Translatable="1">This is module for a small ticket's informations widgets</Description>
<Navigation>CustomerFrontend</Navigation>
<Value>
<Hash>
<Item Key="id">TicketInformation</Item>
<Item Key="type">hidden</Item>
<Item Key="text">Contract</Item>
<Item Key="to">/module/TicketInformation</Item>
<Item Key="priority">110</Item>
<Item ValueType="Textarea" Key="widgets">
[
{
"props": {},
"id": "20",
"widgetFile": "WIDGET_OpenTickets.js",
"compiled": false,
"view" : "Dashboard",
"name": "Open tickets counter"
}
]
</Item>
</Hash>
</Value>
</Setting>
</otrs_config>
OTRS Module
In the previous subthread, we defined OTRS module ['TicketInformation'] which will be