article_by_type_sender.rb 2.9 KB

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