state.rb 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class Ticket::State < ApplicationModel
  3. belongs_to :state_type, class_name: 'Ticket::StateType'
  4. belongs_to :next_state, class_name: 'Ticket::State'
  5. validates :name, presence: true
  6. latest_change_support
  7. =begin
  8. list tickets by customer
  9. states = Ticket::State.by_category('open') # open|closed|work_on|work_on_all|pending_reminder|pending_action
  10. returns:
  11. state objects
  12. =end
  13. def self.by_category(category)
  14. if category == 'open'
  15. return Ticket::State.where(
  16. state_type_id: Ticket::StateType.where(name: ['new', 'open', 'pending reminder', 'pending action'])
  17. )
  18. elsif category == 'pending_reminder'
  19. return Ticket::State.where(
  20. state_type_id: Ticket::StateType.where(name: ['pending reminder'])
  21. )
  22. elsif category == 'pending_action'
  23. return Ticket::State.where(
  24. state_type_id: Ticket::StateType.where(name: ['pending action'])
  25. )
  26. elsif category == 'work_on'
  27. return Ticket::State.where(
  28. state_type_id: Ticket::StateType.where(name: %w(new open))
  29. )
  30. elsif category == 'work_on_all'
  31. return Ticket::State.where(
  32. state_type_id: Ticket::StateType.where(name: ['new', 'open', 'pending reminder'])
  33. )
  34. elsif category == 'closed'
  35. return Ticket::State.where(
  36. state_type_id: Ticket::StateType.where(name: %w(closed))
  37. )
  38. end
  39. raise "Unknown category '#{category}'"
  40. end
  41. =begin
  42. check if state is ignored for escalation
  43. state = Ticket::State.lookup(name: 'state name')
  44. result = state.ignore_escalation?
  45. returns:
  46. true/false
  47. =end
  48. def ignore_escalation?
  49. return true if ignore_escalation
  50. false
  51. end
  52. end