report.rb 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. class Report
  2. def self.config
  3. config = {}
  4. config[:metric] = {}
  5. config[:metric][:count] = {
  6. name: 'count',
  7. display: 'Ticket Count',
  8. default: true,
  9. prio: 10_000,
  10. }
  11. backend = [
  12. {
  13. name: 'created',
  14. display: 'Created',
  15. selected: true,
  16. dataDownload: true,
  17. adapter: Report::TicketGenericTime,
  18. params: { field: 'created_at' },
  19. },
  20. {
  21. name: 'closed',
  22. display: 'Closed',
  23. selected: true,
  24. dataDownload: true,
  25. adapter: Report::TicketGenericTime,
  26. params: { field: 'close_time' },
  27. },
  28. {
  29. name: 'backlog',
  30. display: 'Backlog',
  31. selected: true,
  32. dataDownload: false,
  33. adapter: Report::TicketBacklog,
  34. },
  35. {
  36. name: 'first_solution',
  37. display: 'First Solution',
  38. selected: false,
  39. dataDownload: true,
  40. adapter: Report::TicketFirstSolution,
  41. },
  42. {
  43. name: 'reopened',
  44. display: 'Re-Open',
  45. selected: false,
  46. dataDownload: true,
  47. adapter: Report::TicketReopened,
  48. },
  49. {
  50. name: 'movedin',
  51. display: 'Moved in',
  52. selected: false,
  53. dataDownload: true,
  54. adapter: Report::TicketMoved,
  55. params: { type: 'in' },
  56. },
  57. {
  58. name: 'movedout',
  59. display: 'Moved out',
  60. selected: false,
  61. dataDownload: true,
  62. adapter: Report::TicketMoved,
  63. params: { type: 'out' },
  64. },
  65. ]
  66. config[:metric][:count][:backend] = backend
  67. config[:metric][:create_channels] = {
  68. name: 'create_channels',
  69. display: 'Create Channels',
  70. prio: 9000,
  71. }
  72. backend = [
  73. {
  74. name: 'phone_in',
  75. display: 'Phone (in)',
  76. selected: true,
  77. dataDownload: true,
  78. adapter: Report::TicketGenericTime,
  79. params: {
  80. field: 'created_at',
  81. selector: {
  82. 'create_article_type_id' => {
  83. 'operator' => 'is',
  84. 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
  85. },
  86. 'create_article_sender_id' => {
  87. 'operator' => 'is',
  88. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  89. },
  90. },
  91. },
  92. },
  93. {
  94. name: 'phone_out',
  95. display: 'Phone (out)',
  96. selected: true,
  97. dataDownload: true,
  98. adapter: Report::TicketGenericTime,
  99. params: {
  100. field: 'created_at',
  101. selector: {
  102. 'create_article_type_id' => {
  103. 'operator' => 'is',
  104. 'value' => Ticket::Article::Type.lookup(name: 'phone').id,
  105. },
  106. 'create_article_sender_id' => {
  107. 'operator' => 'is',
  108. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  109. },
  110. }
  111. },
  112. },
  113. {
  114. name: 'email_in',
  115. display: 'Email (in)',
  116. selected: true,
  117. dataDownload: true,
  118. adapter: Report::TicketGenericTime,
  119. params: {
  120. field: 'created_at',
  121. selector: {
  122. 'create_article_type_id' => {
  123. 'operator' => 'is',
  124. 'value' => Ticket::Article::Type.lookup(name: 'email').id,
  125. },
  126. 'create_article_sender_id' => {
  127. 'operator' => 'is',
  128. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  129. },
  130. },
  131. },
  132. },
  133. {
  134. name: 'email_out',
  135. display: 'Email (out)',
  136. selected: true,
  137. dataDownload: true,
  138. adapter: Report::TicketGenericTime,
  139. params: {
  140. field: 'created_at',
  141. selector: {
  142. 'create_article_type_id' => {
  143. 'operator' => 'is',
  144. 'value' => Ticket::Article::Type.lookup(name: 'email').id,
  145. },
  146. 'create_article_sender_id' => {
  147. 'operator' => 'is',
  148. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  149. },
  150. },
  151. },
  152. },
  153. {
  154. name: 'web_in',
  155. display: 'Web (in)',
  156. selected: true,
  157. dataDownload: true,
  158. adapter: Report::TicketGenericTime,
  159. params: {
  160. field: 'created_at',
  161. selector: {
  162. 'create_article_type_id' => {
  163. 'operator' => 'is',
  164. 'value' => Ticket::Article::Type.lookup(name: 'web').id,
  165. },
  166. 'create_article_sender_id' => {
  167. 'operator' => 'is',
  168. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  169. },
  170. },
  171. },
  172. },
  173. {
  174. name: 'twitter_in',
  175. display: 'Twitter (in)',
  176. selected: true,
  177. dataDownload: true,
  178. adapter: Report::TicketGenericTime,
  179. params: {
  180. field: 'created_at',
  181. selector: {
  182. 'create_article_type_id' => {
  183. 'operator' => 'is',
  184. 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
  185. },
  186. 'create_article_sender_id' => {
  187. 'operator' => 'is',
  188. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  189. },
  190. },
  191. },
  192. },
  193. {
  194. name: 'twitter_out',
  195. display: 'Twitter (out)',
  196. selected: true,
  197. dataDownload: true,
  198. adapter: Report::TicketGenericTime,
  199. params: {
  200. field: 'created_at',
  201. selector: {
  202. 'create_article_type_id' => {
  203. 'operator' => 'is',
  204. 'value' => Ticket::Article::Type.lookup(name: 'twitter status').id,
  205. },
  206. 'create_article_sender_id' => {
  207. 'operator' => 'is',
  208. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  209. },
  210. },
  211. },
  212. },
  213. ]
  214. config[:metric][:create_channels][:backend] = backend
  215. config[:metric][:communication] = {
  216. name: 'communication',
  217. display: 'Communication',
  218. prio: 7000,
  219. }
  220. backend = [
  221. {
  222. name: 'phone_in',
  223. display: 'Phone (in)',
  224. selected: true,
  225. dataDownload: false,
  226. adapter: Report::ArticleByTypeSender,
  227. params: {
  228. type: 'phone',
  229. sender: 'Customer',
  230. },
  231. },
  232. {
  233. name: 'phone_out',
  234. display: 'Phone (out)',
  235. selected: true,
  236. dataDownload: false,
  237. adapter: Report::ArticleByTypeSender,
  238. params: {
  239. type: 'phone',
  240. sender: 'Agent',
  241. },
  242. },
  243. {
  244. name: 'email_in',
  245. display: 'Email (in)',
  246. selected: true,
  247. dataDownload: false,
  248. adapter: Report::ArticleByTypeSender,
  249. params: {
  250. type: 'email',
  251. sender: 'Customer',
  252. },
  253. },
  254. {
  255. name: 'email_out',
  256. display: 'Email (out)',
  257. selected: true,
  258. dataDownload: false,
  259. adapter: Report::ArticleByTypeSender,
  260. params: {
  261. type: 'email',
  262. sender: 'Agent',
  263. },
  264. },
  265. {
  266. name: 'web_in',
  267. display: 'Web (in)',
  268. selected: true,
  269. dataDownload: false,
  270. adapter: Report::ArticleByTypeSender,
  271. params: {
  272. type: 'web',
  273. sender: 'Customer',
  274. },
  275. },
  276. {
  277. name: 'twitter_in',
  278. display: 'Twitter (in)',
  279. selected: true,
  280. dataDownload: false,
  281. adapter: Report::ArticleByTypeSender,
  282. params: {
  283. type: 'twitter status',
  284. sender: 'Customer',
  285. },
  286. },
  287. {
  288. name: 'twitter_out',
  289. display: 'Twitter (out)',
  290. selected: true,
  291. dataDownload: false,
  292. adapter: Report::ArticleByTypeSender,
  293. params: {
  294. type: 'twitter status',
  295. sender: 'Agent',
  296. },
  297. },
  298. ]
  299. config[:metric][:communication][:backend] = backend
  300. config[:metric].each {|metric_key, metric_value|
  301. metric_value[:backend].each {|metric_backend|
  302. metric_backend[:name] = "#{metric_key}::#{metric_backend[:name]}"
  303. }
  304. }
  305. config
  306. end
  307. end