ticket_user_ticket_counter_job.rb 1.2 KB

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