Improved performance, reduced sql queries.
This commit is contained in:
parent
4538ed7a2e
commit
9fce89fe4f
1 changed files with 48 additions and 16 deletions
|
@ -13,23 +13,55 @@ class Observer::Ticket::UserTicketCounter < ActiveRecord::Observer
|
|||
def user_ticket_counter_update(record)
|
||||
return if !record.customer_id
|
||||
|
||||
ticket_state_list_open = Ticket::State.where(
|
||||
:state_type_id => Ticket::StateType.where(
|
||||
:name => ['new','open', 'pending reminder', 'pending action']
|
||||
)
|
||||
)
|
||||
ticket_state_list_closed = Ticket::State.where(
|
||||
:state_type_id => Ticket::StateType.where(
|
||||
:name => ['closed']
|
||||
)
|
||||
)
|
||||
# open ticket count
|
||||
ticket_state_open_ids = Cache.get( 'ticket::state_ids::open' )
|
||||
if !ticket_state_open_ids
|
||||
ticket_state_open_ids = self.state_ids( ['new','open', 'pending reminder', 'pending action'] )
|
||||
Cache.write( 'ticket::state_ids::open', ticket_state_open_ids, { :expires_in => 1.hour } )
|
||||
end
|
||||
tickets_open = Ticket.where(
|
||||
:customer_id => record.customer_id,
|
||||
:ticket_state_id => ticket_state_open_ids,
|
||||
).count()
|
||||
|
||||
tickets_open = Ticket.where( :customer_id => record.customer_id, :ticket_state_id => ticket_state_list_open ).count()
|
||||
tickets_closed = Ticket.where( :customer_id => record.customer_id, :ticket_state_id => ticket_state_list_closed ).count()
|
||||
# closed ticket count
|
||||
ticket_state_closed_ids = Cache.get( 'ticket::state_ids::closed' )
|
||||
if !ticket_state_closed_ids
|
||||
ticket_state_closed_ids = self.state_ids( ['closed'] )
|
||||
Cache.write( 'ticket::state_ids::closed', ticket_state_closed_ids, { :expires_in => 1.hour } )
|
||||
end
|
||||
tickets_closed = Ticket.where(
|
||||
:customer_id => record.customer_id,
|
||||
:ticket_state_id => ticket_state_closed_ids,
|
||||
).count()
|
||||
|
||||
customer = User.find( record.customer_id )
|
||||
customer[:preferences][:tickets_open] = tickets_open
|
||||
customer[:preferences][:tickets_closed] = tickets_closed
|
||||
customer.save
|
||||
# check if update is needed
|
||||
customer = User.lookup( :id => record.customer_id )
|
||||
need_update = false
|
||||
if customer[:preferences][:tickets_open] != tickets_open
|
||||
need_update = true
|
||||
customer[:preferences][:tickets_open] = tickets_open
|
||||
end
|
||||
if customer[:preferences][:tickets_closed] != tickets_closed
|
||||
need_update = true
|
||||
customer[:preferences][:tickets_closed] = tickets_closed
|
||||
end
|
||||
if need_update
|
||||
customer.save
|
||||
end
|
||||
end
|
||||
|
||||
def state_ids(ticket_state_types)
|
||||
ticket_state_types = Ticket::StateType.where(
|
||||
:name => ticket_state_types,
|
||||
)
|
||||
ticket_states = Ticket::State.where( :state_type_id => ticket_state_types )
|
||||
ticket_state_ids = []
|
||||
ticket_states.each {|ticket_state|
|
||||
ticket_state_ids.push ticket_state.id
|
||||
}
|
||||
ticket_state_ids
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue