123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class Report
- def self.enabled?
- Setting.get('es_url').present?
- end
- def self.config
- config = {}
- config[:metric] = {}
- config[:metric][:count] = {
- name: 'count',
- display: __('Ticket Count'),
- default: true,
- prio: 10_000,
- }
- backend = [
- {
- name: 'created',
- display: __('Created'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: { field: 'created_at' }
- },
- {
- name: 'closed',
- display: __('Closed'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: { field: 'close_at' }
- },
- {
- name: 'backlog',
- display: __('Backlog'),
- selected: true,
- dataDownload: false,
- adapter: Report::TicketBacklog
- },
- {
- name: 'first_solution',
- display: __('First Solution'),
- selected: false,
- dataDownload: true,
- adapter: Report::TicketFirstSolution
- },
- {
- name: 'reopened',
- display: __('Reopened'),
- selected: false,
- dataDownload: true,
- adapter: Report::TicketReopened
- },
- {
- name: 'movedin',
- display: __('Moved in'),
- selected: false,
- dataDownload: true,
- adapter: Report::TicketMoved,
- params: { type: 'in' }
- },
- {
- name: 'movedout',
- display: __('Moved out'),
- selected: false,
- dataDownload: true,
- adapter: Report::TicketMoved,
- params: { type: 'out' }
- },
- {
- name: 'merged',
- display: __('Merged'),
- selected: false,
- dataDownload: true,
- adapter: Report::TicketMerged,
- },
- ]
- config[:metric][:count][:backend] = backend
- config[:metric][:create_channels] = {
- name: 'create_channels',
- display: __('Creation Channels'),
- prio: 9000,
- }
- backend = [
- {
- name: 'phone_in',
- display: __('Phone (in)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
- },
- },
- },
- },
- {
- name: 'phone_out',
- display: __('Phone (out)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
- },
- }
- },
- },
- {
- name: 'email_in',
- display: __('Email (in)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'email').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
- },
- },
- },
- },
- {
- name: 'email_out',
- display: __('Email (out)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'email').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
- },
- },
- },
- },
- {
- name: 'web_in',
- display: __('Web (in)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'web').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
- },
- },
- },
- },
- {
- name: 'twitter_in',
- display: __('Twitter (in)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
- },
- },
- },
- },
- {
- name: 'twitter_out',
- display: __('Twitter (out)'),
- selected: true,
- dataDownload: true,
- adapter: Report::TicketGenericTime,
- params: {
- field: 'created_at',
- selector: {
- 'create_article_type_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
- },
- 'create_article_sender_id' => {
- 'operator' => 'is',
- 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
- },
- },
- },
- },
- ]
- config[:metric][:create_channels][:backend] = backend
- config[:metric][:communication] = {
- name: 'communication',
- display: __('Communication'),
- prio: 7000,
- }
- backend = [
- {
- name: 'phone_in',
- display: __('Phone (in)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'phone',
- sender: 'Customer',
- },
- },
- {
- name: 'phone_out',
- display: __('Phone (out)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'phone',
- sender: 'Agent',
- },
- },
- {
- name: 'email_in',
- display: __('Email (in)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'email',
- sender: 'Customer',
- },
- },
- {
- name: 'email_out',
- display: __('Email (out)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'email',
- sender: 'Agent',
- },
- },
- {
- name: 'web_in',
- display: __('Web (in)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'web',
- sender: 'Customer',
- },
- },
- {
- name: 'twitter_in',
- display: __('Twitter (in)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'twitter status',
- sender: 'Customer',
- },
- },
- {
- name: 'twitter_out',
- display: __('Twitter (out)'),
- selected: true,
- dataDownload: false,
- adapter: Report::ArticleByTypeSender,
- params: {
- type: 'twitter status',
- sender: 'Agent',
- },
- },
- ]
- config[:metric][:communication][:backend] = backend
- config[:metric].each do |metric_key, metric_value|
- metric_value[:backend].each do |metric_backend|
- metric_backend[:name] = "#{metric_key}::#{metric_backend[:name]}"
- end
- end
- config
- end
- end
|