diff options
author | Marin Jankovski <marin@gitlab.com> | 2014-06-27 12:14:57 +0400 |
---|---|---|
committer | Marin Jankovski <marin@gitlab.com> | 2014-06-30 11:45:16 +0400 |
commit | c223fb1a9677ae00285426090618f5762de9f40e (patch) | |
tree | b09d63edbd4982066daf2f25203e12b8e0655b3a /app/models/group_milestone.rb | |
parent | b6425f33bc0b0547058e96e5ab99a7892d9297f2 (diff) |
Start building group milestone show page.
Diffstat (limited to 'app/models/group_milestone.rb')
-rw-r--r-- | app/models/group_milestone.rb | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb index 567e0c2b9fb..0faff39ae7a 100644 --- a/app/models/group_milestone.rb +++ b/app/models/group_milestone.rb @@ -9,6 +9,10 @@ class GroupMilestone @title end + def safe_title + @title.gsub(".", "-") + end + def milestones @milestones end @@ -25,6 +29,10 @@ class GroupMilestone milestones.map{ |milestone| milestone.merge_requests.count }.sum end + def open_items_count + milestones.map{ |milestone| milestone.open_items_count }.sum + end + def closed_items_count milestones.map{ |milestone| milestone.closed_items_count }.sum end @@ -42,10 +50,69 @@ class GroupMilestone def state state = milestones.map{ |milestone| milestone.state } - if state.count("active") == state.size + if state.count('active') == state.size 'active' else 'closed' end end + + def active? + state == 'active' + end + + def closed? + state == 'closed' + end + + def opened_unassigned_issues + milestones.map{ |milestone| milestone.issues.opened.unassigned } + end + + def opened_assigned_issues + milestones.map{ |milestone| milestone.issues.opened.assigned } + end + + def closed_issues + milestones.map{ |milestone| milestone.issues.closed } + end + + def participants + milestones.map{ |milestone| milestone.participants.uniq }.reject(&:empty?).flatten + end + + def filter_by(filter, entity) + if entity + milestones = self.milestones.sort_by(&:project_id) + entities = {} + milestones.each do |project_milestone| + next unless project_milestone.send(entity).any? + project_name = project_milestone.project.name + entities_by_state = state_filter(filter, project_milestone.send(entity)) + entities.store(project_name, entities_by_state) + end + entities + else + {} + end + end + + def state_filter(filter, entities) + if entities.present? + sorted_entities = entities.sort_by(&:position) + entities_by_state = case filter + when 'active'; sorted_entities.group_by(&:state)['opened'] + when 'closed'; sorted_entities.group_by(&:state)['closed'] + else sorted_entities + end + if entities_by_state.blank? + [] + else + entities_by_state + end + else + [] + end + end + end |