-
Notifications
You must be signed in to change notification settings - Fork 0
/
project_patch.rb
54 lines (43 loc) · 1.82 KB
/
project_patch.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
require_dependency 'project'
module ProjectPatch
def unestimated_issues_count(options = {})
not_done_issues(options).select(&:unestimated).size
end
def remaining_story_points(options = {})
not_done_issues(options).map(&:story_points).sum
end
def points_done_within(start_date, end_date, options = {})
resolved_issues_within(start_date, end_date, options).map {|issue| issue.story_points }.sum
end
protected
def not_done_issues(options = {})
if options[:include_children]
self.self_and_descendants.map{|p| p.not_done_issues_for_this_project}.flatten
else
self.not_done_issues_for_this_project
end
end
def not_done_issues_for_this_project
self.issues.select {|i|
i.status.name == "New" || i.status.name == "Assigned" || i.status.name == "Feedback"
}
end
def resolved_issues_within(start_date, end_date, options = {})
resolved_issue_changes_within(start_date, end_date, options).map(&:issue)
end
def resolved_issue_changes_within(start_date, end_date, options = {})
if options[:include_children]
self.self_and_descendants.map {|p| p.resolved_issue_changes_for_this_project_within(start_date, end_date) }.flatten
else
self.resolved_issue_changes_for_this_project_within(start_date, end_date)
end
end
def resolved_issue_changes_for_this_project_within(start_date, end_date)
resolved_status_id = IssueStatus.find_by_name('Resolved').id
issue_changes.select { |issue_change|
detail = issue_change.details.last
issue_change.created_on.to_date <= end_date && issue_change.created_on.to_date >= start_date && detail && detail.value.to_i == 3
}
end
end
Project.send(:include, ProjectPatch)