Skip to content
Snippets Groups Projects
Commit c92cf009 authored by Ronald van Zon's avatar Ronald van Zon
Browse files

Moving state_count to Milestone model

By moving and improving state_count the functions in GlobalMilestone
are no longer used.
parent 074fafe9
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -34,66 +34,6 @@ class GlobalMilestone
new(title, child_milestones)
end
 
def self.states_count(projects, groups = nil)
legacy_group_milestones_count = legacy_group_milestone_states_count(projects)
group_milestones_count = groups_milestone_state_count(groups)
legacy_group_milestones_count.merge(group_milestones_count) do |k, legacy_group_milestones_count, group_milestones_count|
legacy_group_milestones_count + group_milestones_count
end
end
def self.groups_milestone_state_count(groups)
return STATE_COUNT_HASH unless groups
return self.group_milestones_states_count(groups) unless groups.respond_to?(:each)
milestone_states = STATE_COUNT_HASH
groups.each do |group|
group_milestones_count = self.group_milestones_states_count(group)
milestone_states = milestone_states.merge(group_milestones_count) do |k, milestone_state, group_milestones_count|
milestone_state + group_milestones_count
end
end
milestone_states
end
def self.group_milestones_states_count(group)
return STATE_COUNT_HASH unless group
params = { group_ids: [group.id], state: 'all' }
relation = MilestonesFinder.new(params).execute # rubocop: disable CodeReuse/Finder
grouped_by_state = relation.reorder(nil).group(:state).count
{
opened: grouped_by_state['active'] || 0,
closed: grouped_by_state['closed'] || 0,
all: grouped_by_state.values.sum
}
end
# Counts the legacy group milestones which must be grouped by title
def self.legacy_group_milestone_states_count(projects)
return STATE_COUNT_HASH unless projects
params = { project_ids: projects.map(&:id), state: 'all' }
relation = MilestonesFinder.new(params).execute # rubocop: disable CodeReuse/Finder
project_milestones_by_state_and_title = relation.reorder(nil).group(:state, :title).count
opened = count_by_state(project_milestones_by_state_and_title, 'active')
closed = count_by_state(project_milestones_by_state_and_title, 'closed')
all = project_milestones_by_state_and_title.map { |(_, title), _| title }.uniq.count
{
opened: opened,
closed: closed,
all: all
}
end
def self.count_by_state(milestones_by_state_and_title, state)
milestones_by_state_and_title.count do |(milestone_state, _), _|
milestone_state == state
Loading
Loading
Loading
Loading
@@ -170,6 +170,22 @@ class Milestone < ActiveRecord::Base
sorted.with_order_id_desc
end
 
def self.states_count(projects, groups = nil)
return STATE_COUNT_HASH unless projects || groups
counts = Milestone
.for_projects_and_groups(projects&.map(&:id), groups&.map(&:id))
.reorder(nil)
.group(:state)
.count
{
opened: counts['active'] || 0,
closed: counts['closed'] || 0,
all: counts.values.sum
}
end
##
# Returns the String necessary to reference this Milestone in Markdown. Group
# milestones only support name references, and do not support cross-project
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment