Module: Milestoneish
- Included in:
- Milestone
- Defined in:
- app/models/concerns/milestoneish.rb
Constant Summary collapse
- DISPLAY_ISSUES_LIMIT =
500
Instance Method Summary collapse
- #closed_issues_count ⇒ Object
- #complete? ⇒ Boolean
- #elapsed_days ⇒ Object
- #expired ⇒ Object
- #expired? ⇒ Boolean
- #expires_at ⇒ Object
- #human_total_time_estimate ⇒ Object
- #human_total_time_spent ⇒ Object
- #issue_labels_visible_by_user(user) ⇒ Object
- #issue_participants_visible_by_user(user) ⇒ Object
- #issues_visible_to_user(user) ⇒ Object
- #merge_requests_visible_to_user(user) ⇒ Object
- #opened_issues_count ⇒ Object
- #percent_complete ⇒ Object
- #remaining_days ⇒ Object
- #sorted_issues(user) ⇒ Object
- #sorted_merge_requests(user) ⇒ Object
- #total_issues_count ⇒ Object
- #total_merge_requests_count ⇒ Object
- #total_time_estimate ⇒ Object
- #total_time_spent ⇒ Object
- #upcoming? ⇒ Boolean
Instance Method Details
#closed_issues_count ⇒ Object
10 11 12 |
# File 'app/models/concerns/milestoneish.rb', line 10 def closed_issues_count @close_issues_count ||= Milestones::ClosedIssuesCountService.new(self).count end |
#complete? ⇒ Boolean
22 23 24 |
# File 'app/models/concerns/milestoneish.rb', line 22 def complete? total_issues_count > 0 && total_issues_count == closed_issues_count end |
#elapsed_days ⇒ Object
38 39 40 41 42 |
# File 'app/models/concerns/milestoneish.rb', line 38 def elapsed_days return 0 if !start_date || start_date.future? (Date.today - start_date).to_i end |
#expired ⇒ Object
105 106 107 |
# File 'app/models/concerns/milestoneish.rb', line 105 def expired expired? || false end |
#expired? ⇒ Boolean
101 102 103 |
# File 'app/models/concerns/milestoneish.rb', line 101 def expired? due_date && due_date.past? end |
#expires_at ⇒ Object
91 92 93 94 95 96 97 98 99 |
# File 'app/models/concerns/milestoneish.rb', line 91 def expires_at if due_date if due_date.past? "expired on #{due_date.to_fs(:medium)}" else "expires on #{due_date.to_fs(:medium)}" end end end |
#human_total_time_estimate ⇒ Object
121 122 123 |
# File 'app/models/concerns/milestoneish.rb', line 121 def human_total_time_estimate Gitlab::TimeTrackingFormatter.output(total_time_estimate) end |
#human_total_time_spent ⇒ Object
113 114 115 |
# File 'app/models/concerns/milestoneish.rb', line 113 def human_total_time_spent Gitlab::TimeTrackingFormatter.output(total_time_spent) end |
#issue_labels_visible_by_user(user) ⇒ Object
58 59 60 61 62 |
# File 'app/models/concerns/milestoneish.rb', line 58 def issue_labels_visible_by_user(user) Label.joins(:label_links) .where('label_links.target_id' => issues_visible_to_user(user).select(:id), 'label_links.target_type' => 'Issue') .distinct end |
#issue_participants_visible_by_user(user) ⇒ Object
51 52 53 54 55 56 |
# File 'app/models/concerns/milestoneish.rb', line 51 def issue_participants_visible_by_user(user) User.joins(:issue_assignees) .where('issue_assignees.issue_id' => issues_visible_to_user(user).select(:id)) .allow_cross_joins_across_databases(url: "https://gitlab.com/gitlab-org/gitlab/-/issues/417457") .distinct end |
#issues_visible_to_user(user) ⇒ Object
44 45 46 47 48 49 |
# File 'app/models/concerns/milestoneish.rb', line 44 def issues_visible_to_user(user) memoize_per_user(user, :issues_visible_to_user) do IssuesFinder.new(user, issues_finder_params) .execute.preload(:assignees).where(milestone_id: milestoneish_id) end end |
#merge_requests_visible_to_user(user) ⇒ Object
80 81 82 83 84 85 |
# File 'app/models/concerns/milestoneish.rb', line 80 def merge_requests_visible_to_user(user) memoize_per_user(user, :merge_requests_visible_to_user) do MergeRequestsFinder.new(user, issues_finder_params) .execute.where(milestone_id: milestoneish_id) end end |
#opened_issues_count ⇒ Object
14 15 16 |
# File 'app/models/concerns/milestoneish.rb', line 14 def opened_issues_count total_issues_count - closed_issues_count end |
#percent_complete ⇒ Object
26 27 28 29 30 |
# File 'app/models/concerns/milestoneish.rb', line 26 def percent_complete closed_issues_count * 100 / total_issues_count rescue ZeroDivisionError 0 end |
#remaining_days ⇒ Object
32 33 34 35 36 |
# File 'app/models/concerns/milestoneish.rb', line 32 def remaining_days return 0 if !due_date || expired? (due_date - Date.today).to_i end |
#sorted_issues(user) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/models/concerns/milestoneish.rb', line 64 def sorted_issues(user) # This method is used on milestone view to filter opened assigned, opened unassigned and closed issues columns. # We want a limit of DISPLAY_ISSUES_LIMIT for total issues present on all columns. limited_ids = issues_visible_to_user(user).sort_by_attribute('label_priority').limit(DISPLAY_ISSUES_LIMIT) Issue .where(id: Issue.select(:id).from(limited_ids)) .preload_associated_models .sort_by_attribute('label_priority') end |
#sorted_merge_requests(user) ⇒ Object
76 77 78 |
# File 'app/models/concerns/milestoneish.rb', line 76 def sorted_merge_requests(user) merge_requests_visible_to_user(user).sort_by_attribute('label_priority') end |
#total_issues_count ⇒ Object
6 7 8 |
# File 'app/models/concerns/milestoneish.rb', line 6 def total_issues_count @total_issues_count ||= Milestones::IssuesCountService.new(self).count end |
#total_merge_requests_count ⇒ Object
18 19 20 |
# File 'app/models/concerns/milestoneish.rb', line 18 def total_merge_requests_count @total_merge_request_count ||= Milestones::MergeRequestsCountService.new(self).count end |
#total_time_estimate ⇒ Object
117 118 119 |
# File 'app/models/concerns/milestoneish.rb', line 117 def total_time_estimate @total_time_estimate ||= issues.sum(:time_estimate) + merge_requests.sum(:time_estimate) end |
#total_time_spent ⇒ Object
109 110 111 |
# File 'app/models/concerns/milestoneish.rb', line 109 def total_time_spent @total_time_spent ||= issues.joins(:timelogs).sum(:time_spent) + merge_requests.joins(:timelogs).sum(:time_spent) end |
#upcoming? ⇒ Boolean
87 88 89 |
# File 'app/models/concerns/milestoneish.rb', line 87 def upcoming? start_date && start_date.future? end |