class Report def self.enabled? !Setting.get('es_url').empty? 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: 'Re-Open', 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' }, }, ] config[:metric][:count][:backend] = backend config[:metric][:create_channels] = { name: 'create_channels', display: 'Create 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 { |metric_key, metric_value| metric_value[:backend].each { |metric_backend| metric_backend[:name] = "#{metric_key}::#{metric_backend[:name]}" } } config end end