Added reopen dashboard stats.
This commit is contained in:
parent
b921b8782a
commit
b170312d8e
4 changed files with 53 additions and 13 deletions
22
app/models/observer/ticket/stats_reopen.rb
Normal file
22
app/models/observer/ticket/stats_reopen.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
require 'stats/ticket_reopen'
|
||||||
|
class Observer::Ticket::StatsReopen < ActiveRecord::Observer
|
||||||
|
observe 'ticket'
|
||||||
|
|
||||||
|
def after_create(record)
|
||||||
|
_check(record)
|
||||||
|
end
|
||||||
|
|
||||||
|
def after_update(record)
|
||||||
|
_check(record)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def _check(record)
|
||||||
|
|
||||||
|
# return if we run import mode
|
||||||
|
return if Setting.get('import_mode')
|
||||||
|
Stats::TicketReopen.log('Ticket', record.id, record.changes, record.updated_by_id)
|
||||||
|
end
|
||||||
|
end
|
|
@ -23,7 +23,7 @@ class StatsStore < ApplicationModel
|
||||||
end
|
end
|
||||||
|
|
||||||
StatsStore.where(stats_store_object_id: object_id, o_id: data[:o_id], key: data[:key])
|
StatsStore.where(stats_store_object_id: object_id, o_id: data[:o_id], key: data[:key])
|
||||||
.where('created_at < ? AND created_at > ?', data[:start], data[:end]).count
|
.where('created_at > ? AND created_at < ?', data[:start], data[:end]).count
|
||||||
end
|
end
|
||||||
|
|
||||||
=begin
|
=begin
|
||||||
|
|
|
@ -39,6 +39,7 @@ module Zammad
|
||||||
'observer::_ticket::_escalation_calculation',
|
'observer::_ticket::_escalation_calculation',
|
||||||
'observer::_ticket::_ref_object_touch',
|
'observer::_ticket::_ref_object_touch',
|
||||||
'observer::_ticket::_online_notification_seen',
|
'observer::_ticket::_online_notification_seen',
|
||||||
|
'observer::_ticket::_stats_reopen',
|
||||||
'observer::_tag::_ticket_history',
|
'observer::_tag::_ticket_history',
|
||||||
'observer::_user::_ref_object_touch',
|
'observer::_user::_ref_object_touch',
|
||||||
'observer::_user::_ticket_organization',
|
'observer::_user::_ticket_organization',
|
||||||
|
|
|
@ -3,6 +3,14 @@
|
||||||
class Stats::TicketReopen
|
class Stats::TicketReopen
|
||||||
|
|
||||||
def self.generate(user)
|
def self.generate(user)
|
||||||
|
|
||||||
|
# get my closed tickets
|
||||||
|
total = Ticket.select('id').where(
|
||||||
|
'owner_id = ? AND close_time > ?',
|
||||||
|
user.id, Time.zone.now - 7.days
|
||||||
|
).count
|
||||||
|
|
||||||
|
# get count of repoens
|
||||||
count = StatsStore.count_by_search(
|
count = StatsStore.count_by_search(
|
||||||
object: 'User',
|
object: 'User',
|
||||||
o_id: user.id,
|
o_id: user.id,
|
||||||
|
@ -10,14 +18,22 @@ class Stats::TicketReopen
|
||||||
start: Time.zone.now - 7.days,
|
start: Time.zone.now - 7.days,
|
||||||
end: Time.zone.now,
|
end: Time.zone.now,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if count > total
|
||||||
|
total = count
|
||||||
|
end
|
||||||
|
|
||||||
|
reopen_in_precent = 0
|
||||||
|
if total != 0
|
||||||
|
reopen_in_precent = ( count.to_f / (total.to_f / 100) ).round(3)
|
||||||
|
end
|
||||||
{
|
{
|
||||||
used_for_average: 0,
|
used_for_average: reopen_in_precent,
|
||||||
|
percent: reopen_in_precent,
|
||||||
average_per_agent: '-',
|
average_per_agent: '-',
|
||||||
state: 'good',
|
state: 'good',
|
||||||
own: count,
|
count: count,
|
||||||
total: 0,
|
total: total,
|
||||||
percent: 0,
|
|
||||||
its_me: true,
|
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -25,24 +41,25 @@ class Stats::TicketReopen
|
||||||
|
|
||||||
return result if !result.key?(:used_for_average)
|
return result if !result.key?(:used_for_average)
|
||||||
|
|
||||||
if result[:total] < 1
|
if result[:total] < 1 || result[:average_per_agent] == 0.0
|
||||||
result[:state] = 'supergood'
|
result[:state] = 'supergood'
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
in_percent = ( result[:used_for_average].to_f / (result[:total].to_f/100) ).round(1)
|
#in_percent = ( result[:used_for_average].to_f / (result[:average_per_agent].to_f / 100) ).round(1)
|
||||||
|
#result[:average_per_agent_in_percent] = in_percent
|
||||||
|
in_percent = ( result[:count].to_f / (result[:total].to_f / 100) ).round(1)
|
||||||
if in_percent >= 90
|
if in_percent >= 90
|
||||||
result[:state] = 'supergood'
|
result[:state] = 'superbad'
|
||||||
elsif in_percent >= 65
|
elsif in_percent >= 65
|
||||||
result[:state] = 'good'
|
result[:state] = 'bad'
|
||||||
elsif in_percent >= 40
|
elsif in_percent >= 40
|
||||||
result[:state] = 'ok'
|
result[:state] = 'ok'
|
||||||
elsif in_percent >= 20
|
elsif in_percent >= 20
|
||||||
result[:state] = 'bad'
|
result[:state] = 'good'
|
||||||
else
|
else
|
||||||
result[:state] = 'superbad'
|
result[:state] = 'supergood'
|
||||||
end
|
end
|
||||||
|
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue