summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/groups/milestones_controller.rb3
-rw-r--r--app/models/group_milestone.rb41
-rw-r--r--app/services/milestones/group_service.rb67
-rw-r--r--app/views/groups/milestones/index.html.haml19
4 files changed, 53 insertions, 77 deletions
diff --git a/app/controllers/groups/milestones_controller.rb b/app/controllers/groups/milestones_controller.rb
index e85ef3ff25f..cb5fed0bc3e 100644
--- a/app/controllers/groups/milestones_controller.rb
+++ b/app/controllers/groups/milestones_controller.rb
@@ -5,8 +5,7 @@ class Groups::MilestonesController < ApplicationController
@group = Group.find_by(path: params[:group_id])
project_ids = @group.projects
project_milestones = Milestone.where(project_id: project_ids)
- @milestones = project_milestones
- @group_milestones = Milestones::GroupService.new(@group, current_user, project_milestones)
+ @group_milestones = Milestones::GroupService.new(project_milestones).execute
end
end
diff --git a/app/models/group_milestone.rb b/app/models/group_milestone.rb
new file mode 100644
index 00000000000..c2fb3a5edee
--- /dev/null
+++ b/app/models/group_milestone.rb
@@ -0,0 +1,41 @@
+class GroupMilestone
+
+ def initialize(title, milestones)
+ @title = title
+ @milestones = milestones
+ end
+
+ def title
+ @title
+ end
+
+ def milestones
+ @milestones
+ end
+
+ def project_names
+ milestones.map{ |milestone| milestone.project.name }
+ end
+
+ def issue_count
+ milestones.map{ |milestone| milestone.issues.count }.sum
+ end
+
+ def merge_requests_count
+ milestones.map{ |milestone| milestone.merge_requests.count }.sum
+ end
+
+ def closed_items_count
+ milestones.map{ |milestone| milestone.closed_items_count }.sum
+ end
+
+ def total_items_count
+ milestones.map{ |milestone| milestone.total_items_count }.sum
+ end
+
+ def percent_complete
+ ((closed_items_count * 100) / total_items_count).abs
+ rescue ZeroDivisionError
+ 100
+ end
+end
diff --git a/app/services/milestones/group_service.rb b/app/services/milestones/group_service.rb
index 74bf126652e..3a7e092a77a 100644
--- a/app/services/milestones/group_service.rb
+++ b/app/services/milestones/group_service.rb
@@ -1,72 +1,11 @@
module Milestones
class GroupService < Milestones::BaseService
- def initialize(group, user, project_milestones)
- @group = group
- @user = user
+ def initialize(project_milestones)
@project_milestones = project_milestones.group_by(&:title)
end
- def titles
- @project_milestones.map{ |title, milestone| title }
- end
-
- def project_names
- names = {}
- @project_milestones.map do |title, milestone|
- projects = milestone.map{|m| m.project.name }
- names.store(title, projects)
- end
- names
- end
-
- def issue_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.count }.sum }
- end
-
- def mr_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.count }.sum }
- end
-
- def open_issues_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.opened.count }.sum }
- end
-
- def closed_issues_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.issues.closed.count }.sum }
- end
-
- def open_mr_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.opened.count }.sum }
- end
-
- def close_mr_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.merge_requests.closed.count }.sum }
- end
-
- def open_items_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.open_items_count }.sum }
- end
-
- def closed_items_count
- @project_milestones.merge(@project_milestones){ |title, milestone| milestone.map{|m| m.closed_items_count }.sum }
- end
-
- def total_items_count
- issue_count.merge(mr_count){ |title,issue,mr| issue + mr }
- end
-
- def percent_complete
- percentage_per_milestone = {}
- closed_items_count.map do |title, closed_items|
- total_items = total_items_count[title]
- percentage = begin
- ((closed_items * 100) / total_items).abs
- rescue ZeroDivisionError
- 100
- end
- percentage_per_milestone.store(title, percentage)
- end
- percentage_per_milestone
+ def execute
+ @project_milestones.map{ |title, milestone| GroupMilestone.new(title, milestone) }
end
end
diff --git a/app/views/groups/milestones/index.html.haml b/app/views/groups/milestones/index.html.haml
index 2e51d74ca88..97cc88db522 100644
--- a/app/views/groups/milestones/index.html.haml
+++ b/app/views/groups/milestones/index.html.haml
@@ -1,6 +1,6 @@
%h3.page-title
Milestones
- %span.pull-right #{@group_milestones.titles.count} milestones
+ %span.pull-right #{@group_milestones.count} milestones
%p.light
Only milestones from
@@ -21,31 +21,28 @@
%li
.nothing-here-block No milestones to show
- else
- - @group_milestones.titles.each do |title|
+ - @group_milestones.each do |milestone|
%li{class: "milestone milestone-open", id: 1 }
.pull-right
- = link_to root_path, class: "btn btn-small edit-milestone-link btn-grouped" do
- %i.icon-edit
- Edit
= link_to 'Close Milestone', root_path, method: :put, remote: true, class: "btn btn-small btn-remove"
%h4
- = link_to_gfm truncate(title, length: 100), root_path
+ = link_to_gfm truncate(milestone.title, length: 100), root_path
- if false
%span.muted Empty
- else
%div
%div
= link_to root_path do
- = pluralize @group_milestones.issue_count[title], 'Issue'
+ = pluralize milestone.issue_count, 'Issue'
&nbsp;
= link_to root_path do
- = pluralize @group_milestones.mr_count[title], 'Merge Request'
+ = pluralize milestone.merge_requests_count, 'Merge Request'
&nbsp;
- %span.light #{@group_milestones.percent_complete[title]}% complete
+ %span.light #{milestone.percent_complete}% complete
.progress.progress-info
- .progress-bar{style: "width: #{@group_milestones.percent_complete[title]}%;"}
+ .progress-bar{style: "width: #{milestone.percent_complete}%;"}
%div
%br
- - @group_milestones.project_names[title].each do |name|
+ - milestone.project_names.each do |name|
%span.label.label-default
= name