Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

reports_controller.rb 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # frozen_string_literal: true
  2. # Redmine - project management software
  3. # Copyright (C) 2006-2023 Jean-Philippe Lang
  4. #
  5. # This program is free software; you can redistribute it and/or
  6. # modify it under the terms of the GNU General Public License
  7. # as published by the Free Software Foundation; either version 2
  8. # of the License, or (at your option) any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  18. class ReportsController < ApplicationController
  19. menu_item :issues
  20. before_action :find_project, :authorize, :find_issue_statuses
  21. include ReportsHelper
  22. def issue_report
  23. with_subprojects = Setting.display_subprojects_issues?
  24. @trackers = @project.rolled_up_trackers(with_subprojects).visible
  25. @versions = @project.shared_versions.sorted + [Version.new(:name => "[#{l(:label_none)}]")]
  26. @priorities = IssuePriority.all.reverse
  27. @categories = @project.issue_categories + [IssueCategory.new(:name => "[#{l(:label_none)}]")]
  28. @assignees = (Setting.issue_group_assignment? ? @project.principals : @project.users).sorted + [User.new(:firstname => "[#{l(:label_none)}]")]
  29. @authors = @project.users.sorted
  30. @subprojects = @project.descendants.visible
  31. @issues_by_tracker = Issue.by_tracker(@project, with_subprojects)
  32. @issues_by_version = Issue.by_version(@project, with_subprojects)
  33. @issues_by_priority = Issue.by_priority(@project, with_subprojects)
  34. @issues_by_category = Issue.by_category(@project, with_subprojects)
  35. @issues_by_assigned_to = Issue.by_assigned_to(@project, with_subprojects)
  36. @issues_by_author = Issue.by_author(@project, with_subprojects)
  37. @issues_by_subproject = Issue.by_subproject(@project) || []
  38. render :template => "reports/issue_report"
  39. end
  40. def issue_report_details
  41. with_subprojects = Setting.display_subprojects_issues?
  42. case params[:detail]
  43. when "tracker"
  44. @field = "tracker_id"
  45. @rows = @project.rolled_up_trackers(with_subprojects).visible
  46. @data = Issue.by_tracker(@project, with_subprojects)
  47. @report_title = l(:field_tracker)
  48. when "version"
  49. @field = "fixed_version_id"
  50. @rows = @project.shared_versions.sorted + [Version.new(:name => "[#{l(:label_none)}]")]
  51. @data = Issue.by_version(@project, with_subprojects)
  52. @report_title = l(:field_version)
  53. when "priority"
  54. @field = "priority_id"
  55. @rows = IssuePriority.all.reverse
  56. @data = Issue.by_priority(@project, with_subprojects)
  57. @report_title = l(:field_priority)
  58. when "category"
  59. @field = "category_id"
  60. @rows = @project.issue_categories + [IssueCategory.new(:name => "[#{l(:label_none)}]")]
  61. @data = Issue.by_category(@project, with_subprojects)
  62. @report_title = l(:field_category)
  63. when "assigned_to"
  64. @field = "assigned_to_id"
  65. @rows = (Setting.issue_group_assignment? ? @project.principals : @project.users).sorted + [User.new(:firstname => "[#{l(:label_none)}]")]
  66. @data = Issue.by_assigned_to(@project, with_subprojects)
  67. @report_title = l(:field_assigned_to)
  68. when "author"
  69. @field = "author_id"
  70. @rows = @project.users.sorted
  71. @data = Issue.by_author(@project, with_subprojects)
  72. @report_title = l(:field_author)
  73. when "subproject"
  74. @field = "project_id"
  75. @rows = @project.descendants.visible
  76. @data = Issue.by_subproject(@project) || []
  77. @report_title = l(:field_subproject)
  78. else
  79. render_404
  80. end
  81. respond_to do |format|
  82. format.html
  83. format.csv do
  84. send_data(issue_report_details_to_csv(@field, @statuses, @rows, @data),
  85. :type => 'text/csv; header=present',
  86. :filename => "report-#{params[:detail]}.csv")
  87. end
  88. end
  89. end
  90. private
  91. def find_issue_statuses
  92. @statuses = @project.rolled_up_statuses.sorted.to_a
  93. end
  94. end