overviews.rb 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. module Ticket::Overviews
  3. =begin
  4. all overviews by user
  5. result = Ticket::Overviews.all(
  6. current_user: User.find(123),
  7. )
  8. returns
  9. result = [overview1, overview2]
  10. =end
  11. def self.all(data)
  12. # get customer overviews
  13. if data[:current_user].role?('Customer')
  14. role = Role.find_by(name: 'Customer')
  15. overviews = if data[:current_user].organization_id && data[:current_user].organization.shared
  16. Overview.where(role_id: role.id, active: true).order(:prio)
  17. else
  18. Overview.where(role_id: role.id, organization_shared: false, active: true).order(:prio)
  19. end
  20. return overviews
  21. end
  22. # get agent overviews
  23. return if !data[:current_user].role?('Agent')
  24. role = Role.find_by(name: 'Agent')
  25. Overview.where(role_id: role.id, active: true).order(:prio)
  26. end
  27. =begin
  28. result = Ticket::Overviews.index(User.find(123))
  29. returns
  30. [
  31. {
  32. overview: {
  33. id: 123,
  34. updated_at: ...,
  35. },
  36. count: 3,
  37. tickets: [
  38. {
  39. id: 1,
  40. updated_at: ...,
  41. },
  42. {
  43. id: 2,
  44. updated_at: ...,
  45. },
  46. {
  47. id: 3,
  48. updated_at: ...,
  49. }
  50. ],
  51. },
  52. {
  53. ...
  54. }
  55. ]
  56. =end
  57. def self.index(user)
  58. overviews = Ticket::Overviews.all(
  59. current_user: user,
  60. )
  61. # get only tickets with permissions
  62. access_condition = Ticket.access_condition(user)
  63. list = []
  64. overviews.each {|overview|
  65. query_condition, bind_condition = Ticket.selector2sql(overview.condition, user)
  66. order_by = "#{overview.order[:by]} #{overview.order[:direction]}"
  67. if overview.group_by && !overview.group_by.empty?
  68. order_by = "#{overview.group_by}_id, #{order_by}"
  69. end
  70. ticket_result = Ticket.select('id, updated_at')
  71. .where(access_condition)
  72. .where(query_condition, *bind_condition)
  73. .order(order_by)
  74. .limit(500)
  75. tickets = []
  76. ticket_result.each { |ticket|
  77. ticket_item = {
  78. id: ticket.id,
  79. updated_at: ticket.updated_at,
  80. }
  81. tickets.push ticket_item
  82. }
  83. count = Ticket.where(access_condition).where(query_condition, *bind_condition).count()
  84. item = {
  85. overview: {
  86. id: overview.id,
  87. view: overview.link,
  88. updated_at: overview.updated_at,
  89. },
  90. tickets: tickets,
  91. count: count,
  92. }
  93. list.push item
  94. }
  95. list
  96. end
  97. end