Skip to content
Snippets Groups Projects
Commit 190e483f authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Rework of milestones

parent b01f8b63
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -531,9 +531,14 @@ pre {
}
}
 
.milestone .progress {
margin-bottom: 0;
margin-top: 4px;
.milestone {
&.milestone-closed {
background: #eee;
}
.progress {
margin-bottom: 0;
margin-top: 4px;
}
}
 
.float-link {
Loading
Loading
Loading
Loading
@@ -12,11 +12,12 @@ class MilestonesController < ProjectResourceController
 
def index
@milestones = case params[:f]
when 'all'; @project.milestones
else @project.milestones.active
when 'all'; @project.milestones.order("closed, due_date DESC")
when 'closed'; @project.milestones.closed.order("due_date DESC")
else @project.milestones.active.order("due_date ASC")
end
 
@milestones = @milestones.includes(:project).order("due_date")
@milestones = @milestones.includes(:project)
@milestones = @milestones.page(params[:page]).per(20)
end
 
Loading
Loading
Loading
Loading
@@ -19,12 +19,19 @@ class Milestone < ActiveRecord::Base
has_many :issues
has_many :merge_requests
 
scope :active, where(closed: false)
scope :closed, where(closed: true)
validates :title, presence: true
validates :project, presence: true
validates :closed, inclusion: { in: [true, false] }
 
def self.active
where("due_date > ? OR due_date IS NULL", Date.today)
def expired?
if due_date
due_date < Date.today
else
false
end
end
 
def participants
Loading
Loading
@@ -52,4 +59,12 @@ class Milestone < ActiveRecord::Base
def expires_at
"expires at #{due_date.stamp("Aug 21, 2011")}" if due_date
end
def can_be_closed?
issues.count > 0 && open? && issues.opened.count.zero?
end
def open?
!closed
end
end
Loading
Loading
@@ -22,7 +22,7 @@ class Snippet < ActiveRecord::Base
belongs_to :author, class_name: "User"
has_many :notes, as: :noteable, dependent: :destroy
 
delegate :name, :email, to: :author, prefix: true
delegate :name, :email, to: :author, prefix: true, allow_nil: true
 
validates :author, presence: true
validates :project, presence: true
Loading
Loading
Loading
Loading
@@ -28,7 +28,7 @@
%p= link_to_gfm truncate(issue.title, length: 100), project_issue_path(issue.project, issue), class: "row_title"
 
%span.update-author
%small.cdark= "##{issue.id}"
%span.cdark= "##{issue.id}"
- if issue.assignee
assigned to #{issue.assignee_name}
- else
Loading
Loading
%li{class: "milestone", id: dom_id(milestone) }
%li{class: "milestone milestone-#{milestone.closed ? 'closed' : 'open'}", id: dom_id(milestone) }
.right
- if can? current_user, :admin_milestone, milestone.project
- if can?(current_user, :admin_milestone, milestone.project) and milestone.open?
= link_to edit_project_milestone_path(milestone.project, milestone), class: "btn small edit-milestone-link grouped" do
%i.icon-edit
Edit
%h4
= link_to_gfm truncate(milestone.title, length: 100), project_milestone_path(milestone.project, milestone)
- if milestone.expired? and not milestone.closed
%span.cred (Expired)
%small
= milestone.expires_at
.row
Loading
Loading
Loading
Loading
@@ -11,6 +11,9 @@
%li{class: ("active" if (params[:f] == "active" || !params[:f]))}
= link_to project_milestones_path(@project, f: "active") do
Active
%li{class: ("active" if params[:f] == "closed")}
= link_to project_milestones_path(@project, f: "closed") do
Closed
%li{class: ("active" if params[:f] == "all")}
= link_to project_milestones_path(@project, f: "all") do
All
Loading
Loading
@@ -19,7 +22,7 @@
= render @milestones
 
- if @milestones.present?
%li.bottom= paginate @milestones, remote: true, theme: "gitlab"
%li.bottom= paginate @milestones, theme: "gitlab"
- else
%li
%h3.nothing_here_message Nothing to show here
%h3.page_title
Milestone ##{@milestone.id}
%small
= @milestone.expires_at
.row
.span6
%h3.page_title
Milestone ##{@milestone.id}
%small
= @milestone.expires_at
.back_link
= link_to project_milestones_path(@project) do
&larr; To milestones list
.span6
.right
- unless @milestone.closed
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
%i.icon-plus
New Issue
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
- if can?(current_user, :admin_milestone, @project)
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
%i.icon-edit
Edit
 
%span.right
= link_to new_project_issue_path(@project, issue: { milestone_id: @milestone.id }), class: "btn small grouped", title: "New Issue" do
%i.icon-plus
New Issue
= link_to 'Browse Issues', project_issues_path(@milestone.project, milestone_id: @milestone.id), class: "btn edit-milestone-link small grouped"
- if can?(current_user, :admin_milestone, @project)
= link_to edit_project_milestone_path(@project, @milestone), class: "btn small grouped" do
%i.icon-edit
Edit
 
.back_link
= link_to project_milestones_path(@project) do
&larr; To milestones list
- if @milestone.can_be_closed?
%hr
%p
%span All issues for this milestone are closed. You may close milestone now.
= link_to 'Close Milestone', project_milestone_path(@project, @milestone, milestone: {closed: true }), method: :put, class: "btn small danger"
 
.main_box
.top_box_content
%h5
%h4.box-title
- if @milestone.closed
.alert-message.error.status_info Closed
- else
.alert-message.success.status_info Open
.error.status_info Closed
- elsif @milestone.expired?
.error.status_info Expired
= gfm escape_once(@milestone.title)
%small.right= @milestone.expires_at
 
.middle_box_content
%h5
Loading
Loading
@@ -34,6 +44,7 @@
#{@milestone.closed_items_count} closed
&ndash;
#{@milestone.open_items_count} open
%span.right= @milestone.expires_at
.progress.progress-info
.bar{style: "width: #{@milestone.percent_complete}%;"}
 
Loading
Loading
@@ -43,6 +54,7 @@
= preserve do
= markdown @milestone.description
 
.row
.span6
%table.milestone-issue-filter
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