article_by_type_sender.rb 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. class Report::ArticleByTypeSender < Report::Base
  3. =begin
  4. result = Report::ArticleByTypeSender.aggs(
  5. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  6. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  7. interval: 'month', # quarter, month, week, day, hour, minute, second
  8. selector: selector, # ticket selector to get only a collection of tickets
  9. params: {
  10. type: 'phone',
  11. sender: 'Customer',
  12. }
  13. )
  14. returns
  15. [4,5,1,5,0,51,5,56,7,4]
  16. =end
  17. def self.aggs(params_origin)
  18. params = params_origin.deep_dup
  19. result = []
  20. case params[:interval]
  21. when 'month'
  22. stop_interval = 12
  23. when 'week'
  24. stop_interval = 7
  25. when 'day'
  26. stop_interval = 31
  27. when 'hour'
  28. stop_interval = 24
  29. when 'minute'
  30. stop_interval = 60
  31. end
  32. query, bind_params, tables = Ticket.selector2sql(params[:selector])
  33. sender = Ticket::Article::Sender.lookup(name: params[:params][:sender])
  34. type = Ticket::Article::Type.lookup(name: params[:params][:type])
  35. (1..stop_interval).each do |_counter|
  36. case params[:interval]
  37. when 'month'
  38. params[:range_end] = params[:range_start].next_month
  39. when 'week', 'day'
  40. params[:range_end] = params[:range_start].next_day
  41. when 'hour'
  42. params[:range_end] = params[:range_start] + 1.hour
  43. when 'minute'
  44. params[:range_end] = params[:range_start] + 1.minute
  45. end
  46. count = Ticket::Article.joins('INNER JOIN tickets ON tickets.id = ticket_articles.ticket_id')
  47. .where(query, *bind_params).joins(tables)
  48. .where(
  49. 'ticket_articles.created_at >= ? AND ticket_articles.created_at <= ? AND ticket_articles.type_id = ? AND ticket_articles.sender_id = ?',
  50. params[:range_start],
  51. params[:range_end],
  52. type.id,
  53. sender.id,
  54. ).count
  55. result.push count
  56. params[:range_start] = params[:range_end]
  57. end
  58. result
  59. end
  60. =begin
  61. result = Report::ArticleByTypeSender.items(
  62. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  63. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  64. selector: selector, # ticket selector to get only a collection of tickets
  65. selector: selector, # ticket selector to get only a collection of tickets
  66. params: {
  67. type: 'phone',
  68. sender: 'Customer',
  69. }
  70. )
  71. returns
  72. {}
  73. =end
  74. def self.items(_params)
  75. {}
  76. end
  77. end