ticket_user_ticket_counter_job.rb 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. class TicketUserTicketCounterJob < ApplicationJob
  2. include HasActiveJobLock
  3. def lock_key
  4. # "TicketUserTicketCounterJob/23/42"
  5. "#{self.class.name}/#{arguments[0]}/#{arguments[1]}"
  6. end
  7. def perform(customer_id, updated_by_id)
  8. # check if update is needed
  9. customer = User.lookup(id: customer_id)
  10. return if !customer
  11. # count open and closed tickets of customer
  12. ticket_count = {
  13. closed: 0,
  14. open: 0,
  15. }
  16. if customer_id != 1
  17. ticket_count.each_key do |ticket_state_category|
  18. ticket_states = Ticket::State.by_category(ticket_state_category)
  19. ticket_state_ids = ticket_states.map(&:id)
  20. tickets = Ticket.where(
  21. customer_id: customer_id,
  22. state_id: ticket_state_ids,
  23. )
  24. ticket_count[ticket_state_category] = tickets.count
  25. end
  26. end
  27. needs_update = false
  28. ticket_count.each_key do |ticket_state_category|
  29. preferences_key = :"tickets_#{ticket_state_category}"
  30. next if customer[:preferences][preferences_key] == ticket_count[ticket_state_category]
  31. needs_update = true
  32. customer[:preferences][preferences_key] = ticket_count[ticket_state_category]
  33. end
  34. return if !needs_update
  35. customer.updated_by_id = updated_by_id
  36. customer.save
  37. end
  38. end